Skip to main content
Paste one absolute path into your client’s MCP config and stop there. 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.
For an install outside /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

The double dash separates Claude Code’s flags from the command it runs. stdio is the default transport. Verify with 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:
Open Copilot Chat in agent mode and confirm the TablePro tools appear in the tools picker.

Continue

Continue reads MCP configs from .continue/mcpServers/ in your workspace. Create .continue/mcpServers/tablepro.yaml:
Reload Continue’s config from the gear menu.

Zed

Zed keys MCP servers under context_servers (not mcpServers) in ~/.config/zed/settings.json:
Or use the Agent Panel: header menu > Settings > MCP Servers > + Add Custom Server > Local tab. That dialog requires an "args": [] field even though the settings-file form treats it as optional.

Goose

Run goose 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:
Run 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 runs open -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:
Replace 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 call list_connections.
The tool list contains list_connections, list_tables, describe_table and execute_query, and list_connections returns your saved connections.
Clients see the full tool catalog, the resources and the prompts, and the server’s instructions tell the model to start from 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.

Unauthenticated (-33009)

The bridge token is stale. The bridge re-reads the handshake and retries once on its own, so this reaches you only when TablePro is not running.

Rate limited (-33010)

Five failed auth attempts inside 60 seconds triggered a 5-minute lockout. Wait it out, or restart TablePro. The other rate limits return the same code.