mcp-server-questdb
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOG_PATH | No | Override the log file location. | /tmp/questdb-mcp-bridge/<ISO-ts>-<pid>.log |
| LOG_LEVEL | No | Log level: ERROR, WARN, INFO, DEBUG. DEBUG adds heartbeats and full tool payloads. | INFO |
| CONSOLE_ORIGIN | No | QuestDB Web Console origin. Default is http://127.0.0.1:9000. '127.0.0.1' and 'localhost' are interchangeable. | http://127.0.0.1:9000 |
| MCP_BRIDGE_PORT | No | When specified, the bridge uses a fixed port. The port is bound on the first pairing attempt, pairing fails with a 'bridge_bind_failed' error if the port is taken. Leave unset for auto-allocation. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_pairing_credentialsA | Get the credentials the user needs to pair their browser with this MCP bridge — calling this tool does NOT itself pair anything. It returns a deep_link, ws_url, token, AND a pre-rendered |
| wait_for_pairingA | Poll for completion of pairing started by |
| get_tablesA | Get a list of all tables and materialized views in the QuestDB database |
| get_table_schemaB | Get the full schema definition (DDL) for a specific table or materialized view |
| get_table_detailsB | Get the runtime details/statistics of a specific table or materialized view |
| validate_queryA | Validate the syntax correctness of a SQL query using QuestDB's SQL syntax validator. All generated SQL queries should be validated using this tool before responding to the user. |
| get_questdb_tocA | Get a table of contents listing all available QuestDB functions, operators, and SQL keywords. Use this first to see what documentation is available before requesting specific items. |
| get_questdb_documentationA | Get documentation for specific QuestDB functions, operators, or SQL keywords. This is much more efficient than loading all documentation. |
| create_notebookA | Create a new QuestDB notebook tab in the editor. You never see query data; this only scaffolds the tab and binds the current chat if it isn't already bound to a notebook. The tab is ALWAYS created in the background — you never switch the user's active tab. The user sees a notification and opens it themselves; only call activate_notebook if they explicitly ask to be taken there. |
| activate_notebookA | Switch the user's editor to the given notebook tab so it becomes visible and focused. ONLY call this after the user has explicitly agreed to be taken to the notebook (e.g. they accepted your offer to open it). Never call it to auto-switch while the user is working elsewhere. |
| duplicate_notebookA | Duplicate a notebook tab. Copies every cell (SQL, mode, chart config) and the layout into a NEW notebook labelled " (copy)" placed right after the original; cell ids are regenerated and last-run results are cleared. The copy is ALWAYS made in the background — you never switch the user's active tab. The user sees a notification and opens it themselves; only call activate_notebook if they explicitly ask to be taken there. |
| delete_notebookA | Archive (soft-delete) a notebook tab — the same as the user closing it with the X. It moves to history and the user can restore it; it is not permanently destroyed and query data is untouched. If this notebook is bound to the current chat, the binding goes stale (start a new one with create_notebook). |
| list_cellsA | List the cells in a notebook. Returns id, type, short preview (≤120 chars), position, mode, and last-run status. No cell data values. |
| get_cellA | Get full details of a cell (value, kind via |
| get_notebook_stateA | Full structural snapshot of a notebook (layout, cells with previews, kind via |
| add_cellA | Append a cell to the notebook. Returns the new cell id and, if run=true, a per-query status array. You never see query rows or column data. Set type:"markdown" to add a prose cell instead of a SQL cell — its |
| update_cellA | Replace a cell's value. Overwrites preemptively — cells are auto-saved. Use to fix a broken SQL cell. When editing part of a long cell, base the new value on a non-truncated read (get_cell with get_full_content: true) — never on a preview or a |
| delete_cellC | Delete a cell from the notebook. |
| move_cell_upC | Swap a cell with the one above it. |
| move_cell_downA | Swap a cell with the one below it. |
| duplicate_cellB | Duplicate a cell immediately after the original. |
| run_cellA | Execute a SQL cell. Each |
| set_layout_modeB | Switch a notebook between list and grid layouts. |
| set_cell_layoutA | Position a single cell in grid mode. x/y/w/h are integers in the 12-column react-grid-layout grid (w ≤ 12). |
| set_cell_modeA | Switch a SQL cell between run (table output) and draw (chart output). Draw cells auto-execute — do not call run_cell afterwards. MULTI-SERIES TIP: a draw-mode cell can hold multiple SELECT statements separated by |
| set_cell_chart_configA | Configure the chart for a draw-mode cell. The cell's |
| set_cell_autorefreshA | Set auto-refresh polling for a draw-mode cell's chart. |
| set_cell_nameA | Set or clear a cell's name (its display label in the cell header). Applies to any cell; for a chart cell it is also the chart title. Pass null to clear. |
| set_cell_view_maximizedA | Toggle whether the cell's result view (chart OR table) fills the cell, hiding the editor. Applies to any cell that has a result — not just charts. For narrow cells, there is no split-view. When this is false, the cell only shows the editor for narrow cells. For wide cells, it shows the editor and the result view if result exists. |
| apply_notebook_stateA | Bulk-apply the entire desired state of a notebook in one atomic call. Use this for bulk edits spanning multiple cells or creating a notebook from scratch. Use update_cell or set_cell_* for small operations. Use INSTEAD OF chained add_cell + update_cell + set_cell_mode + set_cell_chart_config only when composing a multi-cell layout from scratch, changing many cells at once, or restructuring an existing notebook. The cells array is the COMPLETE desired list: cells in the current notebook whose id is missing from your request are DELETED. For new cells, omit |
| set_cell_maximizedB | Spotlight one cell (or null to restore normal layout). Hides other cells in the notebook view. |
| run_queryA | Execute an arbitrary SQL statement against the user's QuestDB instance and return the result rows so you can inspect data, validate work, or compose follow-up queries. UNLIKE |
| get_workspace_stateA | If notebook tools fail with BRIDGE_NOT_PAIRED, call get_pairing_credentials to begin pairing (the response includes a one-click URL to show the user; authentication runs in the browser, the bridge never sees credentials). Once paired, call get_workspace_state at the start of each notebook turn; the digest of edits since your last fetch is in get_recent_user_actions. Return the current workspace + notebook context as text. Use this at the start of every notebook turn so you know which notebook is active, what cells exist, layout mode, chart configs, and last-run statuses. Pass include_user_events=true to also receive the digest of edits the user made since your last fetch. |
| get_recent_user_actionsA | If notebook tools fail with BRIDGE_NOT_PAIRED, call get_pairing_credentials to begin pairing (the response includes a one-click URL to show the user; authentication runs in the browser, the bridge never sees credentials). Once paired, call get_workspace_state at the start of each notebook turn; the digest of edits since your last fetch is in get_recent_user_actions. Return the digest of user edits to the notebook since your last fetch (or session start). Use this to detect that the user changed something the agent might want to react to. Coalesced — multiple typing events on the same cell collapse to a single 'edited' entry. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/questdb/mcp-server-questdb'
If you have feedback or need assistance with the MCP directory API, please join our Discord server