tablepro-mcp ships inside the app bundle; it starts TablePro when nothing is running, reads the port, and carries the token, so none of those end up in the file.
/Applications, use your own bundle’s path. Setapp puts it at ~/Applications/Setapp/TablePro.app/Contents/MacOS/tablepro-mcp.
Clients that take the JSON above
Only the config file differs.Claude Code
claude mcp list.
VS code
Native MCP support arrived in 1.99. Run MCP: Open User Configuration from the Command Palette, or create.vscode/mcp.json in the workspace. The top-level key is servers, not mcpServers:
Continue
Continue reads MCP configs from.continue/mcpServers/ in your workspace. Create .continue/mcpServers/tablepro.yaml:
Zed
Zed keys MCP servers undercontext_servers (not mcpServers) in ~/.config/zed/settings.json:
"args": [] field even though the settings-file form treats it as optional.
Goose
Rungoose configure, choose Add Extension > Command-line Extension, name it tablepro, and enter the binary path as the command. Or add to ~/.config/goose/config.yaml by hand:
goose session and ask for the tool list to confirm.
Setup snippets in TablePro
Click Connect a Client… in Settings > Integrations. The sheet covers Claude Desktop, Claude Code, Cursor, and Zed, with numbered steps and copyable snippets that already carry the right binary path for your install.What the config leaves out
TablePro does not have to be open first. Finding no trusted handshake, the bridge runsopen -g tablepro://integrations/start-mcp and polls for one every 200ms for up to 10 seconds. A TablePro started that way stays out of the Dock, the app switcher and the menu bar until it has a window to show; open the app yourself and it behaves normally for the rest of that run.
The token is not yours to manage either. Each server start mints one named __stdio_bridge__, writes it into the handshake file, and rotates it 15 minutes before its one-hour expiry. It is Read & Write, so an agent on the bridge can read and write but cannot call confirm_destructive_operation.
The port is absent for the same reason: TablePro writes the port it actually bound into the handshake file, so a conflict resolves itself and your config never changes.
Two installs share that one handshake file, so the bridge reaches whichever TablePro is running rather than the bundle whose path you configured. Quit the one you do not want.
For a narrower scope than
readWrite, or a connection allowlist, use the HTTP transport with a token you mint yourself.HTTP transport
Use HTTP when the client cannot spawn a local process. Mint a token in Settings > Integrations > Authentication and point the client at the server:23508 with the port shown in Settings > Integrations. Other clients use the same url plus headers shape, sometimes under type: streamable-http. Check the client’s docs.
Three things change on this route. The server binds 127.0.0.1 over plain HTTP with no remote mode and no TLS, so a client on another machine needs an SSH port forward. GET /mcp answers 405, so a client that opens a GET stream for notifications fails; notifications ride the response stream of the request they belong to. And 2025-11-25 and 2025-06-18 still work through the old initialize handshake and Mcp-Session-Id, while 2025-03-26 is refused.
Writing a client against 2026-07-28 directly means sending the required _meta and headers on every request. See MCP Protocol.
Check it worked
Ask the client to list TablePro tools, or calllist_connections.
The tool list contains
list_connections, list_tables, describe_table and execute_query, and list_connections returns your saved connections.list_connections and call describe_table before writing SQL. A connection’s External Clients level and the token’s scope still apply on top of that.
When it does not work
The bridge writes its failure to stderr and as a JSON-RPC error, so the message in the client names the layer that refused.TablePro is not running
The bridge could not launch the app, or got no trusted handshake within 10 seconds. Open TablePro and check that Settings > Integrations shows the server running; if it does, toggle Enable MCP Server off and on, then relaunch the client.The local MCP endpoint did not prove it belongs to TablePro
The handshake file points at a process the bridge will not trust, usually one left behind by a TablePro that is gone. Quit TablePro, delete~/Library/Application Support/TablePro/mcp-handshake.json, and reopen the app, which rewrites it.
This TablePro build does not speak 2026-07-28
The bridge is newer than the app it found. Update TablePro.This connection is read only for external clients
External Clients on that connection is Read Only and the statement writes. Change it in the connection editor’s Advanced pane, or run the query in the app’s editor.Forbidden (-33007)
External Clients is Blocked, the connection’s AI policy is Never, or the token’s allowlist excludes it. Any of the three also hides the connection from list_connections.

