Documentation Index
Fetch the complete documentation index at: https://docs.tablepro.app/llms.txt
Use this file to discover all available pages before exploring further.
MCP Tools
The MCP server exposes tools and resources over JSON-RPC. The tools are grouped by category below. Every tool is scope-gated: a request must come with a token whose scope and connection allowlist permit the call.Transports
The same tool catalog is available over two transports:- HTTP:
http://127.0.0.1:<port>/mcp(port from the handshake file). Bearer token inAuthorizationheader. - stdio: bundled
tablepro-mcpCLI bridges stdio JSON-RPC to localhost HTTP. No token needed because the bridge reuses the in-app handshake.
Scope and access matrix
Every tool requires one of these scopes. The scope is the token’s; the connection’sexternalAccess setting can downgrade it further.
| Scope | Read schema | Run SELECT | Run INSERT/UPDATE/DELETE | Confirm DROP/TRUNCATE |
|---|---|---|---|---|
readOnly | yes | yes | no | no |
readWrite | yes | yes | yes | no |
fullAccess | yes | yes | yes | yes (with phrase) |
connection.externalAccess is blocked, every tool that targets that connection returns 403 forbidden. If readOnly, write tools return 403 even with a readWrite token.
Connection tools
list_connections
List all saved connections.
Input: none.
Output:
readOnly.
connect
Open a database connection.
Input:
current_schema and server_version are present when known.
Scope: readOnly.
disconnect
Close a connection.
Input: { "connection_id": "..." }
Output: empty object on success.
Scope: readOnly.
get_connection_status
Return version, uptime, and active database for a connection.
Input: { "connection_id": "..." }
Output:
status is one of connected, connecting, disconnected, error. When error, an error object with a message field is included.
Scope: readOnly.
Schema tools
list_databases
Input: { "connection_id": "..." }
Output: { "databases": ["app", "analytics"] } (array of database names)
Scope: readOnly.
list_schemas
Input: { "connection_id": "...", "database": "app" } (database optional)
Output: { "schemas": ["public", "reporting"] } (array of schema names)
Scope: readOnly.
list_tables
Input:
include_row_counts is true and the driver supports it, each entry also includes row_count.
Scope: readOnly.
describe_table
Columns, indexes, foreign keys, primary key, DDL.
Input:
schema is optional. The current database is used unless the connection was first switched with switch_database.
Output:
default_value, extra, and comment are present on a column when set. ddl and approximate_row_count are present when the driver supports them.
Scope: readOnly.
get_table_ddl
Just the CREATE TABLE statement.
Input: same as describe_table (connection_id, table, schema).
Output: { "ddl": "CREATE TABLE ..." }
Scope: readOnly.
Query tools
execute_query
Run a SQL query.
Input:
max_rows defaults to 500, max 10,000. timeout_seconds defaults to 30, max 300. Single-statement queries only. Query size cap is 100 KB.
Output:
columns is an array of column-name strings. rows is an array of rows, where each row is an array of strings (or null) aligned to the columns order. status_message is added when the driver returns one.
Scope:
readOnlyfor SELECT, SHOW, EXPLAIN.readWritefor INSERT, UPDATE, DELETE.- DROP, TRUNCATE, ALTER…DROP are rejected. Use
confirm_destructive_operation.
readOnly returns 403 for any write SQL.
confirm_destructive_operation
Run a DROP, TRUNCATE, or ALTER…DROP after a typed confirmation.
Input:
I understand this is irreversible. Anything else returns 400 invalid confirmation.
Output: same shape as execute_query.
Scope: fullAccess.
export_data
Export query or table data as CSV, JSON, or SQL.
Input:
format is one of csv, json, sql. max_rows defaults to 50,000, max 100,000. Provide either tables or query. Pass output_path to write to disk instead of returning data inline.
Output: an envelope with one entry per query/table exported. Each entry has the export label and either inline data or the file path. Provide output_path in the request to receive a file-path response.
Scope: readOnly.
switch_database / switch_schema
Input: { "connection_id": "...", "database": "analytics" } or { "connection_id": "...", "schema": "reporting" }
Output: { "status": "switched", "current_database": "analytics" } or { "status": "switched", "current_schema": "reporting" }
Scope: readOnly.
Navigation tools
These mutate UI state in the running TablePro app: opening tabs, focusing windows. They requirereadWrite scope because the user sees the result.
open_connection_window
Open a connection in TablePro and bring its window to front.
Input: { "connection_id": "..." }
Output:
readWrite.
open_table_tab
Open a table tab.
Input:
database_name and schema_name are optional. If omitted, the connection’s current database/schema is used.
Output:
readWrite.
focus_query_tab
Bring an existing tab to front.
Input: { "tab_id": "..." }
Output:
readWrite.
list_recent_tabs
Read the cross-window tab registry.
Input: { "limit": 20 } (optional, 1-500, default 20).
Output:
tab_type is one of query, table, createTable, erDiagram, serverDashboard, terminal. table_name, database_name, schema_name, and window_id are present when known.
Scope: readOnly.
History tools
search_query_history
Full-text search over the query history database.
Input:
connection_id is optional. limit is 1-500, default 50. since and until are optional Unix epoch seconds; both bounds are inclusive. Either may be set on its own. Pass an empty query ("") to skip the full-text filter and only narrow by date or connection.
Output:
executed_at is a Unix timestamp in seconds. error_message is included when was_successful is false.
Scope: readOnly.
Errors
All tools return JSON-RPC errors with these codes:| Code | Meaning |
|---|---|
400 | Invalid input |
401 | Missing or invalid bearer token |
403 | Token scope or externalAccess rejects the request |
404 | Connection, table, or tab not found |
408 | Query timeout |
429 | Rate limit |
500 | Server error |
message field. Example:
