MCP Clients
Any MCP client that supports the stdio transport and can run a command on disk can connect to TablePro. The pattern is the same across every client:tablepro-mcp CLI ships inside the app bundle. It reads ~/Library/Application Support/TablePro/mcp-handshake.json for the local port and a bridge token, then forwards stdio JSON-RPC to the app’s HTTP MCP server. If the handshake file is missing or points at a dead process, the bridge launches TablePro itself (open -g tablepro://integrations/start-mcp) and polls up to 10 seconds for a fresh handshake. You do not need to start TablePro first.
You never put a token in the client config. At every server start TablePro mints a full-access bridge token named __stdio_bridge__ and writes it to the handshake file; the bridge picks it up from there. Pairing and manually created tokens apply only to HTTP clients.
The bridge token is full access. To give an AI agent a narrower scope or a connection allowlist, use the HTTP transport with a token you mint yourself.
/Applications (Setapp, custom path), replace the command value with the absolute path to your bundle’s tablepro-mcp binary.
Clients using the standard shape
These clients take the exact JSON above; only the config file differs.Claude Code
claude mcp list.
VS Code
VS Code has native MCP support (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 contain the correct binary path for your install.Generic or custom client
If you are building against the MCP specification, TablePro speaks two transports:- stdio: spawn the
tablepro-mcpbinary with no arguments. It handles the handshake and forwards JSON-RPC over stdin and stdout. No token, no environment variables, full access. - HTTP:
http://127.0.0.1:<port>/mcpwith the port from the handshake file and a bearer token from Pairing or the Settings UI. See Tokens for scope rules.
HTTP transport
Mint a token in Settings > Integrations > Authentication and point the client at the server directly. Cursor’s form: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.
What the AI sees
AI clients see the full tool catalog. For an unfamiliar schema the AI is expected to calldescribe_table before generating SQL, and mutating SQL goes through the host’s tool-confirmation UI. The connection’s externalAccess setting and the token scope still apply: a read-only connection rejects writes regardless of what the AI tries.
Verify the connection
Ask the client to list TablePro tools or calllist_connections. Success looks like:
- The client lists tools such as
list_connections,list_tables,describe_table, andexecute_query. - A
list_connectionscall returns the connections you have saved in TablePro.
- stdio process exits immediately: the bridge could not launch TablePro or got no handshake within 10 seconds. Open TablePro manually and check that Settings > Integrations shows the server running.
401 Unauthorized: the bridge token is stale. The stdio bridge re-reads the handshake and retries on its own; you only see this if the retry also fails, which means TablePro is not running.403 Forbidden: the connection’sexternalAccessisblockedorreadOnly, or the token’s allowlist excludes it. Adjust External Access in TablePro’s connection editor.404 Session not found(JSON-RPC code-32001): the session hit the 15-minute idle timeout or the server restarted. The stdio bridge starts a new session on its own and replays the call, so you should never see this through the bridge. If you speak HTTP to the server directly, drop the cachedMcp-Session-Idand send a newinitializerequest yourself. Most HTTP clients do not do this for you.429 Too Many Requests: 5 failed auth attempts within 60 seconds against the same(client_address, principal)pair triggered a 5-minute lockout. Wait it out or restart TablePro.
Troubleshooting
Handshake timeout. TablePro launched but did not respond totablepro://integrations/start-mcp within 10 seconds. Open Settings > Integrations, toggle Enable MCP Server off and on, then re-launch the client.
Stale handshake file. The bridge detects a handshake from a dead process and relaunches TablePro on its own. If connections still fail, delete ~/Library/Application Support/TablePro/mcp-handshake.json and reopen TablePro; the app rewrites it.
Setapp or non-default install path. Replace /Applications/TablePro.app in the command with your install path. For Setapp the bundle lives under ~/Applications/Setapp/TablePro.app.
Port conflict. If the configured port (default 23508) is taken, TablePro falls back to a free port in the 51000-52000 range and rewrites the handshake file. A bridge that is already running re-reads the file the next time a call fails against the old port, so it picks up the new one without a restart.
Sessions recover on their own. The MCP server drops a session after 15 minutes with no client attached, and restarting the server from Settings retires every session and rotates the bridge token. In both cases the stdio bridge starts a fresh session and replays the call that triggered it. You do not need to restart your agent or toggle the server. While an agent is attached, the bridge pings every 5 minutes, so an idle session stays alive rather than being recreated.
Tool calls return 403 Connection is read-only for external clients. The connection’s external access is readOnly and the SQL is a write. Change external access in TablePro, or run the query in TablePro’s editor.