Skip to main content
Glama
jonasliesas

singlestore-mcp-server

by jonasliesas

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SINGLESTORE_URLNoAlternative to SINGLESTORE_HOST: user:password@host:port/database
SINGLESTORE_HOSTNoThe SingleStore host. Either this or SINGLESTORE_URL must be set.
SINGLESTORE_PORTNoThe SingleStore port. Defaults to 3306.3306
SINGLESTORE_USERNoThe SingleStore user. Defaults to root.root
SINGLESTORE_DATABASENoDefault database for queries.
SINGLESTORE_PASSWORDNoThe SingleStore password.
SINGLESTORE_SSL_DISABLEDNoSet to 'true' for a self-managed cluster without TLS configured.false

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
pipeline_monitorA

Open an interactive monitor of SingleStore pipelines.

Shows every pipeline's state, source, latest batch and recent errors, with
buttons to start, stop and test pipelines and an auto-refresh. Use this
when the user wants to see or manage pipelines visually.

The result includes ``browser_url``, which opens this view full-window in
the user's browser: post it as a clickable link right under the app.

Args:
    database: Limit to one database. Omit to show pipelines in all databases.
pipeline_monitor_dataC

Refresh data for the Pipeline Monitor app.

pipeline_errorsC

Most recent errors for one pipeline, for the Pipeline Monitor app.

query_gridA

Run a read-only SQL query and show the results in an interactive grid.

Use this when the user wants to see, browse, sort, filter or export
(CSV) query results, or when a result is too large to read as text. The
user can also edit and re-run the query from the grid. You receive only
a summary with the first 20 rows; the user sees all fetched rows.

Only read-only statements are accepted: SELECT, WITH, SHOW, DESCRIBE,
DESC, EXPLAIN (one statement, no SELECT ... INTO). For writes, DDL or when
you just need a value for your own reasoning, use run_sql instead.

The result includes ``browser_url``, which opens this view full-window in
the user's browser: post it as a clickable link right under the app.

Args:
    sql: A single read-only statement.
    database: Database to run it against (defaults to the connection's
        configured database).
    max_rows: Maximum rows to fetch, 1-10000 (default 1000). The result
        is flagged as truncated when more rows exist.
query_grid_rowsB

Full rows of an earlier query_grid result, for the Query Results Grid app.

schema_explorerA

Open an interactive Schema Explorer for the SingleStore cluster.

Shows every database and its tables/views with storage type
(columnstore/rowstore/reference), row counts and sizes; for a selected
table it shows columns, shard key and sort key, the full CREATE TABLE DDL
and a 50-row data preview. The user can browse freely and ask follow-up
questions from the UI. Use this when the user wants to explore, browse or
understand the schema visually. For a plain list of tables or columns
inside your own reasoning, list_tables / describe_table are cheaper.

The result includes ``browser_url``, which opens this view full-window in
the user's browser: post it as a clickable link right under the app.

Args:
    database: Pre-select this database (case-sensitive). Omit to start at the database list.
    table: Pre-select this table or view in `database` (case-sensitive). Requires `database`.
schema_explorer_databasesA

List databases with table/view counts, for the Schema Explorer app.

schema_explorer_tablesB

Tables and views of one database with storage type, rows and size, for the Schema Explorer app.

schema_explorer_tableB

Columns, keys, DDL and stats of one table, for the Schema Explorer app.

schema_explorer_previewB

First rows of a table or view, for the Schema Explorer app.

cleanup_work_tablesA

Open the Schema Explorer's Clean-up panel for leftover SAS work tables.

SAS jobs leave work tables behind in SingleStore (SAS Data Management
``_dm…`` tables, SAS flow ``_flw…`` tables, ``SASTMP…`` / ``_tmp…``). The
panel scans every non-system database by name pattern (editable, and
optionally every table older than N days) and shows per table its rows,
size, creator, age, last use in the query history and dependent views.
The user selects tables, confirms, and they are dropped one by one (with a
dry-run mode and a log). Nothing is dropped by this call; only the user
can drop from the panel. Use this when the user wants to find or clean up
leftover, temporary or SAS work tables.

The result includes ``browser_url``, which opens this view full-window in
the user's browser: post it as a clickable link right under the app.
schema_explorer_cleanup_scanA

Find leftover work tables by name pattern (and age), for the Schema Explorer's Clean-up panel.

Args:
    patterns: [{"pattern": "_dm*", "kind": "SAS DM"}, ...]; shell-style, case-insensitive. Omit for the saved ones.
    older_than_days: Also offer every table not created/altered for this many days.
    recent_days: Tables used or created this recently are flagged as risky.
    save: Store these settings in ~/.singlestore-mcp/cleanup.json.
schema_explorer_cleanup_settingsC

Read (or change the dry-run default of) the Clean-up settings, plus recent log entries.

schema_explorer_cleanup_dropA

Drop the selected work tables one statement at a time (DROP TABLE IF EXISTS), for the Clean-up panel.

Re-checks each table on the server; system databases are refused and a table
with a dependent view is skipped unless that view is listed in ``views``
(it is then dropped first). With ``dry_run`` only the statements are returned.

Args:
    tables: [{"database": "SASDP", "name": "_dmallchars"}, ...]
    views: Dependent views to drop as well, same shape.
    dry_run: Only show the statements; drop nothing.
cluster_monitorA

Open a live monitor of the SingleStore cluster.

Shows every node (aggregators and leaves) with CPU, memory and disk
usage, and the queries running right now, with auto-refresh. Use this
when the user wants to see cluster load, resource usage or what is
running.

The result includes ``browser_url``, which opens this view full-window in
the user's browser: post it as a clickable link right under the app.
cluster_monitor_dataC

Refresh data (including CPU history) for the Cluster Monitor app.

app_pageB

HTML of one of this server's app pages (the workspace loads its views with this).

Tool results aren't cached by hosts, unlike resources/read, so views pick
up changes right after restart_server.
sql_editorA

Open the SingleStore workspace: an interactive SQL editor plus views.

A slim rail on the left switches between the SQL Editor (schema tree,
editor with autocomplete for keywords, SingleStore functions, databases,
tables and columns, and a results pane), the Schema Explorer, the Pipeline
Monitor and the Cluster Monitor. Use this when the user wants to write,
edit or run SQL themselves, or wants the combined workspace. To run a
query for your own reasoning use run_sql; to show results use query_grid.
The editor has a chat panel: questions from it arrive in the conversation
tagged "[SQL Editor <id>]"; answer those with sql_editor_reply.

The result includes ``browser_url``, which opens this view full-window in
the user's browser: post it as a clickable link right under the app.

Args:
    database: Database to start in (case-sensitive).
    sql: SQL to put in the editor (not run automatically).
    view: View to show first: "sql" (default), "notebook", "schema", "pipelines", "cluster", "history" (Query History), "alerts" or "connections".
    table: For view="schema": table to pre-select in `database`.
sql_editor_queryA

Run a read-only statement from the SQL Editor app.

Statements that change data or schema are answered with
``needs_confirmation`` instead of running; the app then asks the user and
uses sql_editor_execute.
sql_editor_executeB

Run any single statement the user confirmed in the SQL Editor app (writes and DDL included).

files_browseA

List a folder for the file browser: subfolders and .sql (kind="sql") or .ipynb (kind="notebook") files.

``path`` defaults to the SQL folder. Only folders inside the allowed roots
(the user's home folder, the SQL folder, SINGLESTORE_MCP_FILE_ROOTS) can be browsed.
sql_editor_filesB

The .sql files in the SQL Editor's folder, newest first.

sql_editor_open_fileB

Read one .sql file from the SQL Editor's folder.

sql_editor_save_fileA

Save the editor's SQL as a .sql file in the SQL Editor's folder.

An existing file is only replaced with ``overwrite``; otherwise the result
says ``exists`` so the app can ask first.
sql_editor_inboxB

Replies sent to one SQL Editor's chat panel, newer than after.

sql_editor_assistantC

Whether the SQL Editor can answer questions in the app (Claude Code installed).

sql_editor_askC

Answer a SQL Editor chat question in the app; the reply arrives in the editor's inbox.

``profile`` picks speed vs depth: "fast", "balanced" (default) or "thorough".
sql_editor_assistant_warmA

Start the editor's assistant process ahead of the first question (no model call).

sql_editor_ask_cancelB

Stop the in-app answer that is running for one SQL Editor.

sql_editor_schemaB

Tables, columns and routines of one database, for the SQL Editor's tree and autocomplete.

notebookA

Open a SingleStore notebook: SQL and Python cells on a Jupyter kernel.

SQL cell results become pandas DataFrames for the Python cells; Python has
pandas, matplotlib and `conn` (a SingleStore connection). Notebooks are
.ipynb files in the user's SQL folder. It's also the Notebook view of the
SingleStore Workspace (sql_editor with view="notebook").

The result includes ``browser_url``: post it as a clickable link under the app.

Args:
    name: Notebook file to open (e.g. "sales.ipynb"); omit for a new notebook.
    database: Database for SQL cells (case-sensitive).
notebook_environmentB

Status of the notebook Python environment (and install progress).

notebook_environment_installA

Create the notebook Python environment (ipykernel, pandas, matplotlib, singlestoredb) with uv.

notebook_packagesB

Packages installed in the notebook Python environment (name, version, summary, core).

notebook_packages_installB

Install packages (space-separated names with optional version pins) into the notebook environment.

notebook_kernel_startA

Start the notebook's Python kernel ahead of the first cell (no code runs).

notebook_kernel_stateB

The notebook kernel's state: stopped, starting, idle, busy, error or dead.

notebook_kernel_controlB

Interrupt, restart or shut down the notebook's kernel (action: interrupt | restart | shutdown).

notebook_runA

Run one notebook cell in its kernel; returns a run id to poll with notebook_poll.

cell_type "sql": a SingleStore statement whose result becomes a DataFrame
(``df``, and ``name`` if given). Statements that change data or schema
come back with ``needs_confirmation`` unless ``confirmed``.
cell_type "python": Python code, run as-is.
cell_type "sas": SAS code (DATA steps, PROCs) in the SAS Viya session; libref S2 = the notebook database.
notebook_pollB

New output of a running (or finished) cell since output index after.

notebook_filesB

The .ipynb notebooks in the SQL folder, newest first.

notebook_openB

Read one .ipynb notebook from the SQL folder.

notebook_saveC

Save a notebook (nbformat 4 JSON) as a .ipynb file in the SQL folder.

notebook_askA

Ask the in-app assistant about the notebook; the reply arrives in the notebook's inbox (sql_editor_inbox).

notebook_assistant_warmA

Start the notebook's assistant process ahead of the first question (no model call).

connections_windowA

Open the Connections window: add, edit, test and switch between saved SingleStore connections.

It's also the Connections view of the SingleStore Workspace. The result
includes ``browser_url``: post it as a clickable link under the app.
connections_stateB

Saved connections, the active one and where passwords are stored.

connection_saveB

Create or update a saved connection. password None keeps the stored one; "" removes it.

connection_deleteA

Delete a saved connection and its stored password.

connection_testC

Try a connection: a saved one by name, or the settings from the form.

connection_activateA

Make a saved connection the active one, and test it (token connections may need a sign-in first).

connection_sso_sign_inA

Browser sign-in for SSO connections (Helios or Microsoft Entra ID): open the sign-in page in the user's browser and wait for the token (up to 2 min).

sas_viya_stateB

SAS Viya settings and sign-in status (for SAS cells in notebooks).

sas_viya_saveC

Save the SAS Viya address, compute context, certificate check and SingleStore libref.

sas_viya_sign_inA

Without code: open SAS Logon in the browser. With code: finish signing in with the code SAS Logon shows.

sas_viya_sign_outC

Forget the SAS Viya sign-in.

sas_viya_testA

Check the SAS Viya sign-in and compute context (lists the compute contexts; starts no SAS session).

connection_helios_caA

Download SingleStore's CA bundle (needed for Helios / TLS) to ~/.singlestore-mcp once; returns its path.

query_historyA

Open the Query History: every finished query on the cluster with its runtime, user, database and result, filtered by minimum runtime (1 s and up). Select a query in the app for tuning recommendations.

Uses SingleStore's query history (event tracing, information_schema.MV_TRACE_EVENTS). Use this when the
user asks about slow / long-running queries or jobs over time (the Cluster Monitor shows only what's
running now).

Args:
    min_seconds: Only queries that ran at least this long (minimum 1).
    hours: Only the last N hours (default: everything in the history).
    tab: "queries" (default), "trends" (daily / hourly load, failures and p95 from a local copy of the history
        kept across the cluster's ring buffer, plus queries that got slower) or "advisor" (table-design advice
        from the whole history).

The result includes ``browser_url``: post it as a clickable link right under the app.
query_history_dataC

Refresh the Query History list.

query_history_eventB

One query from the history with its full SQL and details.

query_history_tuningB

Tuning recommendations for one query from the history (EXPLAIN, plan cache statistics, table design).

query_history_advisorB

Table-design advice from the whole query history: sort keys, shard keys, reference tables, indexes, statistics, plus workload findings. EXPLAINs every distinct query (without running it).

query_advisor_reportB

Recommend table design changes from the whole query history: SORT KEY and SHARD KEY per table, REFERENCE table candidates, indexes and missing statistics, plus workload issues (huge results, SELECT *, failures).

Every distinct query in the history is EXPLAINed (compiled, not run) to see which columns it filters,
joins and groups on, weighted by how long those queries ran. Opens the Query History app on its Advisor tab.

The result includes ``browser_url``: post it as a clickable link right under the app.
query_history_assistantC

Whether Claude can answer in the app (Claude Code installed).

query_history_askB

Ask Claude, in the app, how to tune one query from the history; poll query_history_answer for the reply.

query_history_answerC

Claude's in-app answer for one query (or its progress while it works).

query_history_ask_cancelC

Stop Claude's in-app answer for one query.

query_history_assistant_warmA

Start the screen's Claude process ahead of the first question (no model call).

alertsA

Open the Alerts view: alerts the server raised while watching the SingleStore cluster in the background (queries running too long, slow or failed queries, failed pipeline batches / pipeline errors, node memory and disk thresholds, nodes not online), with the rules to edit and acknowledge / clear buttons.

The result includes ``browser_url``: post it as a clickable link right under the app.
alerts_dataB

Alerts, rules and checker status for the Alerts view (no cluster queries).

alerts_badgeA

Unacknowledged alert count for the workspace rail (in-memory state only; cheap to poll).

alerts_updateB

Change alert rules ({name: {enabled, seconds, percent}}) and settings ({interval_s, notify}).

alerts_ackB

Acknowledge alerts by id, or all of them.

alerts_clearB

Remove alerts from the list (all, or only the acknowledged ones).

alerts_check_nowA

Run every enabled check now (read-only queries) and return the new state.

query_history_trendsB

Daily / hourly query counts, runtime, failures and p95 from the local copy of the history, plus query shapes that got slower than the week before.

query_history_trend_runsB

The queries behind one Trends bar (a day "YYYY-MM-DD" or an hour "YYYY-MM-DD HH"), slowest first.

query_history_compare_candidatesB

The heaviest read-only queries in the history that read table (database.table), with the table name replaced by new_table (nothing is run).

query_history_compare_startB

Run the selected candidate queries against the original and the new table (wrapped in COUNT(*)), alternating, runs times each. Poll query_history_compare_status.

query_history_compare_statusC

Progress and results of a before/after comparison.

query_history_compare_cancelC

Stop a running comparison (the statement running now is cancelled too).

run_sqlA

Run one arbitrary SQL statement against SingleStore and return the results.

Use this for SELECT/DML/DDL that isn't pipeline-specific. For creating,
altering, starting, stopping, dropping or inspecting Pipelines, prefer
the dedicated pipeline tools -- they validate the statement type and are
easier to call correctly.

Args:
    sql: The statement to execute.
    database: Database to run it against (defaults to the connection's
        configured database).
    max_rows: Truncate returned rows to this many (does not affect how
        many rows the statement itself processes).
list_databasesA

List all databases visible to the connected user.

list_tablesA

List tables (and views) in a database.

Args:
    database: Database to list tables from (defaults to the connection's
        configured database).
describe_tableA

Show column definitions for a table.

Args:
    table: Table name.
    database: Database the table lives in (defaults to the connection's
        configured database).
list_pipelinesA

List all pipelines in a database and their current state (Running/Stopped/Error).

Args:
    database: Database to list pipelines from (defaults to the
        connection's configured database).
pipeline_statusA

Get the current state of one pipeline by name.

Equivalent to SHOW PIPELINES filtered down to a single pipeline. Returns
an empty row list if no pipeline with that name exists.

Args:
    pipeline_name: Name of the pipeline to look up.
    database: Database the pipeline lives in (defaults to the
        connection's configured database).
get_pipeline_ddlA

Get the full CREATE PIPELINE statement that reproduces an existing pipeline.

Args:
    pipeline_name: Name of the pipeline.
    database: Database the pipeline lives in (defaults to the
        connection's configured database).
create_pipelineA

Create a new pipeline from a full CREATE PIPELINE statement.

Pipeline definitions vary a lot by source (S3, Kafka, Azure Blob, GCS,
filesystem, ...), format (CSV/JSON/Avro/Parquet) and optional transforms,
so this tool takes the complete statement text rather than trying to
model every variant as separate parameters. It only checks that the
statement actually starts with CREATE [OR REPLACE] PIPELINE before
running it. Creating a pipeline does not start it -- call start_pipeline
afterwards, or include FOREGROUND handling via start_pipeline.

Example create_pipeline_sql:
    CREATE PIPELINE my_pipeline AS
    LOAD DATA S3 's3://my-bucket/path/'
    CONFIG '{"region": "us-east-1"}'
    CREDENTIALS '{"aws_access_key_id": "...", "aws_secret_access_key": "..."}'
    INTO TABLE my_table
    FIELDS TERMINATED BY ',';

Args:
    create_pipeline_sql: The full CREATE PIPELINE ... statement.
    database: Database to create the pipeline in (defaults to the
        connection's configured database).
alter_pipelineA

Alter an existing pipeline from a full ALTER PIPELINE statement.

Commonly used to change the connection string/credentials or reset
offsets. Takes the full statement for the same reason as create_pipeline:
the set of alterable clauses is source-specific.

Args:
    alter_pipeline_sql: The full ALTER PIPELINE ... statement.
    database: Database the pipeline lives in (defaults to the
        connection's configured database).
start_pipelineA

Start a pipeline so it begins (or resumes) loading data.

Args:
    pipeline_name: Name of the pipeline to start.
    database: Database the pipeline lives in (defaults to the
        connection's configured database).
    foreground: If true, run synchronously and report rows loaded /
        errors in the result instead of returning immediately. Useful
        for a one-off load or for testing a pipeline end to end.
    limit_batches: Only valid with foreground=True: stop after this many
        batches instead of running indefinitely.
    if_not_running: Add IF NOT RUNNING so starting an already-running
        pipeline is a no-op instead of an error.
stop_pipelineA

Stop a running pipeline.

Args:
    pipeline_name: Name of the pipeline to stop.
    database: Database the pipeline lives in (defaults to the
        connection's configured database).
drop_pipelineA

Delete a pipeline. Running pipelines are stopped automatically before being dropped.

Args:
    pipeline_name: Name of the pipeline to drop.
    database: Database the pipeline lives in (defaults to the
        connection's configured database).
    if_exists: Add IF EXISTS so dropping a nonexistent pipeline is a
        no-op instead of an error.
test_pipelineA

Test an existing pipeline: extract and transform data without loading it into the table.

The pipeline must already exist and must be stopped first (SingleStore
errors if you test a running pipeline) -- call stop_pipeline before this
if needed. Nothing is written to the destination table; this is purely
for validating that the source/format/transform config works.

Args:
    pipeline_name: Name of the pipeline to test.
    database: Database the pipeline lives in (defaults to the
        connection's configured database).
    limit: Only pull this many rows/messages instead of testing the
        whole batch.
browser_linkA

Get a link that opens one of the interactive apps full-window in the user's web browser.

Use this when the user wants an app bigger than the chat allows or in
their browser. Give the user the returned URL as a clickable link. It
works on this machine only, until the MCP server restarts.

Args:
    tool: The app tool: pipeline_monitor, query_grid, schema_explorer, cluster_monitor or sql_editor.
    arguments: That tool's arguments, e.g. {"sql": "...", "database": "SASDP"}
        for query_grid or {"database": "SASDP", "table": "CARS"} for
        schema_explorer.
sql_editor_replyA

Send an answer to the chat panel of an open SQL Editor app.

Use this to answer a message that arrived from the SQL Editor (it starts
with "[SQL Editor <editor_id>]"), or when the user asks you to put SQL into
their open editor (the editor reports its id in the model context). The
message is plain text; put SQL in ```sql fenced blocks - each block gets
Replace / Insert / Copy buttons in the editor. Keep explanations short.
After calling this, reply briefly in the chat as well.

Args:
    editor_id: The editor's id, e.g. "e-4f9a2c".
    message: The answer, with SQL in ```sql fenced blocks.
list_connectionsA

List the saved SingleStore connections (no passwords) and which one is active.

All tools and apps use the active connection. The user manages them in the
Connections window (connections_window tool, or the workspace's Connect view).
use_connectionA

Switch the active SingleStore connection; all tools, apps and new notebook kernels then use it.

Args:
    name: Name of a saved connection (see list_connections).
restart_serverA

Restart the SingleStore MCP server so code and app changes load, without reconnecting.

Open apps keep working after a reload of the app; browser links made before the restart stop working.

Prompts

Interactive templates invoked by user choice

NameDescription
workspaceOpen the SingleStore Workspace (SQL editor, schema, pipelines, cluster).
explain_queryExplain a SingleStore query and suggest how to make it faster.
create_pipelineCreate a SingleStore pipeline from an S3 path, Kafka topic or other source.
pipeline_healthCheck all pipelines for errors, stalls and lag.
table_reportSummarize a table: size, storage, keys and data profile.
restartRestart the SingleStore MCP server to load code and app changes.

Resources

Contextual data attached and managed by the client

NameDescription
Pipeline MonitorLive status of SingleStore pipelines with start/stop/test controls
Query Results GridSortable, filterable, exportable grid of a read-only SQL query's results
Schema ExplorerBrowse SingleStore databases, tables, columns, shard/sort keys, DDL and sample rows
Cluster MonitorCPU, memory and disk usage per SingleStore node, and the queries running right now
SQL EditorSQL editor with SingleStore autocomplete, schema tree and results
SingleStore WorkspaceSQL editor with notebook, schema explorer, pipeline monitor and cluster monitor views
NotebookSQL and Python notebook on a Jupyter kernel
ConnectionsSaved SingleStore connections and the active one
Query HistoryEvery finished query on the cluster, filtered by runtime, with tuning recommendations
AlertsAlerts on long-running and failed queries, pipeline failures, memory, disk and nodes

TDQS

C2.8/5.0

Scored across 100 tools

Disambiguation2/5

Many tools overlap: run_sql, query_grid, and sql_editor_query all execute SQL; query_history_advisor and query_advisor_report both give table-design advice; list_connections/connections_state and use_connection/connection_activate duplicate functions. Descriptions clarify some context, but with 100 tools an agent faces multiple unclear boundaries and near-duplicates.

Naming Consistency3/5

All names use snake_case, but the pattern is inconsistent: verb_noun (list_tables), noun-only (schema_explorer), prefix_noun_action (sql_editor_save_file), and singular/plural mixing (connection_* vs connections_*). Mixed conventions but still readable.

Tool Count1/5

100 tools is an extreme mismatch for an MCP server, far beyond the typical 3-15 range. Many app-specific tools likely overwhelm the agent and dilute focus.

Completeness4/5

Core SingleStore surface is well covered: SQL execution, schema listing, pipeline CRUD/start/stop/test, notebook lifecycle, query history, alerts, and connections. Minor gaps like general query cancellation, user/permission management, and backup can be worked around with run_sql, but no full admin coverage.

Maintenance

ActivityMaintained
ResponsivenessNo issues