singlestore-mcp-server
A local MCP server for SingleStore that supports SQL, pipeline management, and interactive data apps from Claude, VS Code, or a standalone workspace.
Run SQL and inspect schemas with
run_sql,list_databases,list_tables, anddescribe_table.Manage SingleStore Pipelines: create, alter, start, stop, test, drop, list, get status, and get DDL.
Open interactive apps: Schema Explorer, Pipeline Monitor, Query Grid, SQL Editor, Notebook, Cluster Monitor, Query History, and Alerts.
Explore schemas visually: databases, tables/views, storage type, row counts, sizes, columns, keys, DDL, and previews.
Monitor pipelines: state, source, batches, lag, errors; start/stop/test from the UI.
Run read-only queries into a sortable/filterable grid with CSV export, or use the SQL Editor for autocomplete, charts, history, and file open/save.
Use the Notebook for SQL/Python/SAS/text cells on a Jupyter kernel, pandas DataFrames, charts,
%sqlmagics, and.ipynbfiles.Chat with Claude inside the SQL Editor and Notebook for read-only DB checks and insertable SQL/Python.
Save and switch among several SingleStore connections, with password/JWT/Helios SSO/Microsoft Entra ID auth.
Use slash commands/skills like
/singlestore-workspace,/singlestore-notebook,/singlestore-explain-query,/singlestore-pipeline-health, and/singlestore-restart.Run the workspace standalone without Claude via a desktop shortcut or browser, and connect to Helios or self-managed clusters.
Provides tools for interacting with SingleStore, including running SQL statements, listing databases and tables, describing table schemas, and managing SingleStore Pipelines for continuously loading data from sources like S3, Kafka, Azure, GCS, and filesystems.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@singlestore-mcp-serverList all databases and show the schema of the users table."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
singlestore-mcp-server
A local MCP server for SingleStore that runs in stdio mode from Claude Code, Claude Desktop or VS Code, and works with SingleStore Helios and self-managed clusters alike.
For how it's built and how it connects to SingleStore, Claude, SAS Viya and identity providers, see docs/ARCHITECTURE.md.
What it does
SQL and schema tools: run SQL, list databases and tables, describe tables, so Claude can query and explain your data.
Pipelines as first-class tools: create, alter, start, stop, test, drop and inspect SingleStore Pipelines (S3, Kafka, Azure, GCS, filesystem).
Interactive apps in Claude (MCP Apps), combined in one SingleStore Workspace with a left-hand rail:
SQL Editor: autocomplete for SingleStore SQL, functions and your schema; results grid; Open/Save
.sqlfiles; procedure-aware statements.Notebook: SQL, Python and text cells on a Jupyter kernel; SQL results become pandas DataFrames; charts;
%sql/%%sqlmagics;.ipynbfiles compatible with SingleStore Notebooks; several notebooks as tabs.Schema Explorer, Pipeline Monitor, Cluster Monitor (CPU, memory, disk per node and running queries) and a Query Grid.
Claude inside the apps: a chat panel in the SQL Editor and the Notebook that checks the database (read-only) and answers with SQL / Python you can insert with one click.
Slash commands:
/singlestore-workspace,/singlestore-notebook,/singlestore-table-report,/singlestore-pipeline-health, … and/singlestore-restartto reload the server without reconnecting.Several SingleStore connections: save connections (passwords in the OS credential store) and switch the active one from the workspace or by asking Claude.
Standalone workspace: the same apps in their own window from a desktop shortcut, with no Claude subscription needed (only the Claude chat needs Claude); see Using the workspace without Claude.
Related MCP server: mysql-mcp-server
How it's built
It's built on official SDKs rather than reimplementing protocol or driver code:
mcp— the official Model Context Protocol Python SDK. It handles the stdio transport, JSON-RPC framing, tool-schema generation (MCPServer) and the MCP Apps extension.singlestoredb— SingleStore's own official Python client. It handles the actual database connection.@modelcontextprotocol/ext-apps— the official MCP Apps browser client, vendored and inlined into the interactive UIs (see SingleStore Workspace).
Everything in src/singlestore_mcp is glue: a
pooled connection wrapper (db.py) and a set of MCP
tools (server_impl.py), including first-class
tools for Pipelines (SingleStore's mechanism for continuously loading
data from S3/Kafka/Azure/GCS/filesystem sources), which the official
mcp-server-singlestore package does not expose as dedicated tools.
Because it connects over the plain MySQL wire protocol via host/port/user/ password, it works identically against SingleStore Helios (cloud) and self-managed SingleStore clusters — there's no dependency on the Management API or browser OAuth.
Tools
General:
run_sql— run any SQL statementlist_databases,list_tables,describe_table
Pipelines:
list_pipelines,pipeline_status,get_pipeline_ddlcreate_pipeline,alter_pipeline(take a full statement — pipeline syntax varies too much by source/format to model as parameters)start_pipeline(background orFOREGROUND, with optional batch limit)stop_pipeline,drop_pipeline,test_pipeline
Interactive apps (see SingleStore Workspace): sql_editor (opens the
SingleStore Workspace), notebook, pipeline_monitor, query_grid,
schema_explorer, cluster_monitor.
Other:
browser_link: a link that opens an app full-window in your browsersql_editor_reply: send SQL or an answer into an open SQL Editor's chatrestart_server: reload the server's code and apps without reconnectinglist_connections,use_connection: see the saved SingleStore connections and switch the active one
Slash commands
Command | What it does |
| Open the SingleStore Workspace, e.g. |
| Open a notebook |
| Explain a query, run |
| Build a pipeline from an S3 path / Kafka topic (asks before creating) |
| Check all pipelines for errors, stalls and lag |
| Size, storage, keys and data profile of a table |
| Restart the server so code and app changes load |
These are Claude Code skills, in claude-skills/: copy
the folders to ~/.claude/skills/ to use them.
The server also offers the same commands as MCP prompts
(/singlestore:workspace, /singlestore:restart, …). The Claude Code
desktop app adds an "(MCP)" label to those that it then refuses to send, so
use the skills there; other clients can use the prompts.
Restarting without reconnecting
The process Claude starts is a small relay (supervisor.py)
that runs the real server as a child process. The restart_server tool (or
/singlestore:restart) replaces that child, replays the MCP handshake and
tells Claude that the tools, prompts and resources changed, so Python and app
changes load in a few seconds without touching /mcp. Browser links made
before a restart stop working. Set SINGLESTORE_MCP_NO_SUPERVISOR=1 to run
the server without the relay.
SingleStore Workspace
In hosts that support MCP Apps (e.g. Claude), the server's apps open as interactive windows in the chat. In other hosts the same tools return a normal text result.
The apps are combined in the SingleStore Workspace. A slim rail on the left switches between its views:
View | What it's for |
SQL | SQL Editor: write and run SQL, with autocomplete and Claude |
Notebook | Notebook: SQL and Python cells on a Jupyter kernel |
Schema | Schema Explorer: databases, tables, columns, keys |
Pipelines | Pipeline Monitor: state, progress and errors of pipelines |
Cluster | Cluster Monitor: CPU, memory, disk per node and running queries |
Connect (bottom of the rail) | Connections: saved SingleStore connections and the active one |
Opening it
Ask Claude ("open the SingleStore workspace"), or use
/singlestore-workspace(optionally with a database and view, e.g./singlestore-workspace SASDP notebook).The tool behind it is
sql_editor(database?, sql?, view?, table?);viewissql,notebook,schema,pipelinesorcluster.Outside Claude: in your browser or as a desktop app, see Browser and desktop window.
Working with it
Each view loads the first time you open it and keeps its state when you switch; hidden views pause their auto-refresh.
Views hand work to each other, e.g. Query in grid in the Schema view opens the table's query in the SQL view and runs it.
The database dropdowns refresh themselves (when opened, after
CREATE/DROP DATABASE, and with ↻).⤢ Full screen (where the host supports it) and ↗ Open in browser sit at the bottom of the rail.
Buttons that run tools go through Claude, which may ask you to approve them; statements that change data also ask in the app first.
SQL Editor
Writing and running SQL
Schema tree on the left; editor on top, results grid below (drag the divider to resize).
Autocomplete for SQL and SingleStore keywords, built-in functions (with signatures), your functions and procedures, databases, tables and columns.
Ctrl+Enter runs the statement at the cursor, or the selection. Reads run right away; statements that change data or schema ask first.
Understands
CREATE PROCEDURE / FUNCTION … BEGIN … ENDbodies,DECLAREsections andDELIMITER //scripts as one statement.History of recent statements; results export to CSV.
Chart (next to Table above the results) charts any result: bar (grouped or stacked), line, area, scatter or pie. It picks X and Y for you (a date or text column on X, the numeric columns on Y); you can change them, combine repeated X values (sum, average, count, min, max), split one measure into series by a column, sort, hide series in the legend and download the chart as SVG. Style picks the look: SingleStore, SAS, Classic, Colorblind-safe, Pastel, Ocean or Dark (remembered for all charts). Re-running the same query keeps the chart. Drawn as plain SVG, so it works without internet access.
Files
Open, Save (Ctrl+S) and Save as open a file browser: folders, plus shortcuts to the SQL folder, Documents, Desktop, Downloads and Home.
Files can live anywhere under your user folder; the SQL folder (
Documents\SingleStore SQLby default) is where the browser starts.The header shows the file name and ● for unsaved changes; replacing a file asks first.
Browse computer… uses the browser's own file picker; Download saves through the browser (works in the browser window; Claude may block it).
Chat with Claude
The Claude button opens a chat panel on the right.
Claude sees the editor's SQL and last result, checks the database (read-only), and answers with SQL that you Replace, Insert or Copy into the editor with one click. If the editor is empty, the answer's SQL goes straight in.
Answer here in the editor (default) uses the in-app assistant; in the Claude chat sends the question to the chat box instead (you click Send there).
Notebook
Cells
SQL cells run against SingleStore. The result shows as a grid and becomes the pandas DataFrame
df(and a named variable if you fill in result →). Several statements per cell are fine; writes ask first.Python cells run on an IPython (Jupyter) kernel with pandas (
pd), matplotlib (inline charts) andconn(a SingleStore connection).SAS cells run SAS code (DATA steps, PROCs, PROC SQL) on your SAS Viya, with the ODS output and the log (errors and warnings counted, the log opens when there are errors). See SAS cells below.
Text cells are Markdown with embedded HTML, as in Jupyter (styled headers, images, alert boxes); scripts are stripped.
Shift+Enter runs and moves on, Ctrl+Enter runs, Alt+Enter runs and adds a cell. The header has Run all, interrupt ■ and restart ↻, plus the kernel's status.
SQL from Python (SingleStore Notebooks compatible)
rows = %sql SELECT …returns rows (rows[0][1],pd.DataFrame(rows),rows.DataFrame());%sql name << SELECT …stores the result inname.%%sql [name <<]cells, and{{ variable }}to insert Python values.connection_url(andSINGLESTOREDB_URL, used bys2.connect()/s2.create_engine()) follows the database selected in the notebook.Magics and Python writes run without the app's confirmation, as in Jupyter.
Notebooks and files
Several notebooks open as tabs, each with its own kernel. New opens a new tab; Open loads into a new tab unless the current one is empty. Closing a tab stops its kernel (unsaved tabs need a second click).
Saved as standard
.ipynbfiles, with SQL cells as%%sqland SAS cells as%%sascells, so they open in Jupyter / VS Code and SingleStore Notebooks, and SingleStore's example notebooks open here.
Python environment and packages
Python runs in its own environment,
~/.singlestore-mcp/notebook-env, installed withuvthe first time (the notebook offers an Install button). It has what SingleStore's examples expect: pandas, matplotlib, singlestoredb, SQLAlchemy with the SingleStore dialect, ibis, scikit-learn, and SAS's Python packages: saspy, swat (CAS), DLPy (sas-dlpy), sasctl and sasoptpy.Packages lists what's installed (with filter) and installs more.
%pip install …and!pip install …in a cell also install into this environment. Restart the kernel (↻) after installing.The environment is shared by every notebook, by Claude and by the desktop window, and survives restarts.
Windows specifics handled for you:
pandarallel'sparallel_applyruns as plainapply, and Hugging Face downloads use plain HTTPS (its newer download method stalls on some corporate networks).Code runs with your user rights on this machine, like any local Jupyter. Kernels stop after 30 idle minutes; SQL cells fetch at most 100,000 rows.
SAS cells (SAS Viya)
Set up once in Connect → SAS Viya: the Viya address, the compute context (e.g. SAS Studio compute context; Test lists them) and Sign in. Sign-in uses your own Viya account (OAuth with Viya's built-in
vscodeclient): SAS Logon opens in the browser and shows a code to paste once; after that the sign-in renews itself. If you already signed in with the SAS Viya MCP server or the SAS Viya CLI, that sign-in is reused.+ SAS adds a SAS cell. The code runs in a SAS Compute session on Viya (one per notebook, started on the first SAS cell, which takes about half a minute; restart the kernel for a fresh one).
SingleStore from SAS: each session gets the library S2 on the notebook's SingleStore database (SAS/ACCESS to SingleStore, engine
SSTORE), so a DATA step canset s2.mytable;or writedata s2.newtable;. The password isn't echoed to the SAS log. This needs a password connection (not JWT / SSO); the libref name can be changed in the settings.Let Viya read SingleStore directly. SAS reads and writes SingleStore itself through S2 (and SAS/ACCESS pushes
WHEREclauses and PROC SQL down to SingleStore); CAS reads it through a SingleStore-backed caslib (SAS Data Connector to SingleStore / SpeedyStore). Don't pull SingleStore data into the notebook's Python and upload it to Viya: that round trip through your machine is slow and unnecessary. Claude in the notebook follows the same rule.From Python:
sas_session()is the saspy session,cas_session()a swat CAS connection (use it with DLPy) andsasctl_session()a sasctl session, all signed in with the same Viya sign-in.sas_to_dfanddf_to_sasexist for small, local results only.Claude in the notebook knows about SAS cells and suggests them in ```sas blocks with an Insert SAS cell button.
Claude
The Claude button opens a chat panel that sees the notebook's cells and outputs, checks the database (read-only) and answers with SQL or Python you insert as a new cell, or use to replace the selected one.
Connections
The Connect view (also the connections_window tool) manages saved
SingleStore connections. One connection is active at a time: every view,
Claude's tools and new notebook kernels use it. The rail's tooltip shows which
one.
+ New connection: name, host, port, user, password, default database, TLS on/off, or a full connection URL.
TLS certificates: a CA certificate (PEM) to verify the server, with Browse… and Use SingleStore Helios CA (downloads SingleStore's
singlestore_bundle.pemto~/.singlestore-mcponce), Verify the server's certificate, and optional client certificate + key. Helios requires the CA (otherwise: "1251: No SSL detected"). Only the file paths are saved. For the Environment variables connection useSINGLESTORE_SSL_CA,SINGLESTORE_SSL_CERT,SINGLESTORE_SSL_KEYandSINGLESTORE_SSL_VERIFY. Test tries it before saving; Save and connect makes it active right away.Authentication: Password, JWT token (paste a token from your identity provider, for users created
IDENTIFIED WITH authentication_jwt; stored like a password, and the card shows how long it stays valid) or Browser SSO (SingleStore Helios): Sign in opens SingleStore's sign-in page in your browser, and the token is cached until it expires, or Microsoft Entra ID (SSO): no app registration needed, just your UPN as the user (tenant, client ID and scope are optional). Sign in first uses the account you're signed in to Windows / macOS with (on an Entra-joined laptop usually without any prompt), otherwise Microsoft's sign-in page in the browser; after that, tokens are renewed silently, also inside running notebook kernels. One sign-in serves all views, notebook kernels and Claude. Token logins need TLS (for Helios: Use SingleStore Helios CA). When a token expires, new connections ask you to sign in again or paste a new token; for the Environment variables connection setSINGLESTORE_CREDENTIAL_TYPE=jwtand put the token inSINGLESTORE_PASSWORD.Each saved connection has Connect, Test, Edit and Delete.
Your existing
SINGLESTORE_*settings appear as the built-in, read-only connection Environment variables, so nothing changes until you add more.After a switch, the Schema, Pipelines and Cluster views reload and the SQL Editor refreshes its databases. Open notebooks keep their kernel (and variables) on the old connection until you restart it; they offer a Restart kernel now button.
Claude can switch too:
list_connectionsanduse_connection(name)(e.g. "switch to the test cluster").
Where things are stored: the connection list (no passwords) in
~/.singlestore-mcp/connections.json. Passwords go to the operating system's
credential store via keyring: Windows
Credential Manager, macOS Keychain or the Secret Service on Linux. Where there
is none (e.g. a headless Linux server) they go to an encrypted file in
~/.singlestore-mcp whose key only your user account can read. Passwords are
never sent back to the app. Secrets too large for Windows Credential Manager
(Entra ID tokens) go to ~/.singlestore-mcp/secrets-large.enc, encrypted with
a key kept in Credential Manager.
Setting up Microsoft Entra ID logins (self-managed cluster). No app
registration is needed: by default the sign-in uses Microsoft's Azure CLI
public client (available in every tenant) and requests the Azure OSS
database token (https://ossrdbms-aad.database.windows.net), the same token
Azure Database for MySQL / PostgreSQL accept for Entra logins. Only the
cluster needs setting up (its nodes must reach login.microsoftonline.com):
SET GLOBAL jwks_endpoint = 'https://login.microsoftonline.com/<tenant ID>/discovery/keys';
SET GLOBAL jwks_username_field = 'upn';
CREATE USER 'jonas@company.com'@'%' IDENTIFIED WITH authentication_jwt REQUIRE SSL;
GRANT SELECT ON mydb.* TO 'jonas@company.com'@'%';Then in Connections: Microsoft Entra ID (SSO), your UPN as the user, TLS
on → Save → Sign in. After a sign-in whose test fails, the card shows
the exact jwks_endpoint, jwks_username_field and user the cluster needs.
Use the
/discovery/keys(v1) key list: the database tokens are v1 tokens, and the keys in the/discovery/v2.0/keyslist carry a v2 issuer that doesn't match them, so the cluster rejects the token.The database user must be spelled exactly as in the token's
upn, upper and lower case included (e.g.'Jane.Doe@company.com'@'%'); after Sign in, the connection takes the token's spelling.SET GLOBAL jwks_require_audience = 'https://ossrdbms-aad.database.windows.net';makes the cluster accept only tokens issued for database logins.Entra's signing keys sign tokens for every app in the tenant, and SingleStore maps tokens to users by the user-name claim only, so create database users only for people who should have access.
upnis only issued for verified domains, which is why it's the default rather thanpreferred_username.Some tenants block the Azure CLI app with conditional access. Then register an app of your own (public client, redirect URIs
http://localhostandms-appx-web://Microsoft.AAD.BrokerPlugin/<client ID>, an exposed API scope) and enter its client ID; tokens then come forapi://<client ID>/.default.
Schema Explorer, Pipeline Monitor, Cluster Monitor, Query Grid
App (tool) | What it shows and does |
Schema Explorer | Databases → tables with row counts and sizes; per table the columns, DDL (shard / sort keys) and a row preview. Ask Claude and Query in grid. |
Pipeline Monitor | Every pipeline's state, source → table, progress (files loaded / Kafka lag), latest batches and errors. Start / Stop (with confirmation), Test, error details, Ask Claude, auto-refresh. |
Cluster Monitor | Per node SingleStore CPU (against its core limit), memory and disk with a 15-minute CPU chart (all / aggregators / leaves), plus the queries running now. Refreshes every 5 s. |
Clean up | Finds the work tables SAS jobs leave behind ( |
Query History | Every finished query the cluster traced: when, how long, user, database, rows, success / error, and a probable Source (SAS CAS, SAS in-database). Filter on runtime (1 s and up), period, user, database, status, type, source and text; sort by time, duration or rows. Select a query for its full SQL and Get tuning recommendations. Tabs Queries, Trends and Advisor. Its own History item in the workspace rail. |
Alerts | Alerts the server raises while it watches the cluster in the background: queries running too long, slow or failed queries, failed pipeline batches and pipeline errors, node memory and disk over a threshold, nodes not online. Edit the rules, acknowledge, clear. Its own Alerts item in the workspace rail, with a red badge counting the unacknowledged alerts. |
Query Grid | Read-only results as a sortable, filterable grid with CSV export; the SQL can be edited and re-run. Writes are refused. |
TEST PIPELINE loads no data, but a failed test is still recorded in the
pipeline's batch history and error log.
Clean up lives in the Schema Explorer (the 🧹 Clean up button in its
header, or ask Claude to "clean up the SAS work tables"). It scans all
databases except the system ones (information_schema, memsql, cluster,
sys, mysql, performance_schema) in two rounds of queries, whatever the
number of tables:
Name patterns: one per line, a pattern and a label, e.g.
_dm* SAS DM.*and?are wildcards, case-insensitive. The defaults are_dm*,_flw*,SASTMP*and_tmp*. Optionally it also offers every table not created or altered for N days. The settings are kept in~/.singlestore-mcp/cleanup.json.Last used is the most recent query in the query history that names the table (see Query History above; only queries above its duration threshold are recorded, so "never seen" is no guarantee). Tables used or created in the last N days (default 7), and tables that a view depends on, are marked risky.
Dependent views block a table's drop unless you tick them in the confirmation; they are then dropped first.
Dropping: select tables (or Select all / Select not risky), then the confirmation lists the exact statements and the total size. Each object is dropped with its own
DROP TABLE IF EXISTS \db`.`table`` and gets its own result (dropped / error). Dry run is on until you turn it off: it only shows the statements. The server checks everything again before dropping.Every drop is logged (time, cluster user, Windows user, connection, table, rows, size, result) to
~/.singlestore-mcp/cleanup-log.jsonl; the panel shows the recent entries.
Query History needs SingleStore's query history (event tracing) turned on once, by an admin:
CREATE EVENT TRACE Query_completion WITH (Query_text = on, Duration_threshold_ms = 1000);Its tuning recommendations work without Claude. For the selected run they combine:
the run itself: rows returned or written,
SELECT *, no filter,CREATE TABLE … AS SELECTwithout a shard key, errors such as unreachable Kafka brokers;the plan cache: disk spilling, time queued by workload management, memory, plan warnings, outdated statistics;
EXPLAIN(compiles the statement without running it): missing column statistics (with theANALYZEcommands), broadcasts, reshuffles, nested-loop joins, filtered scans of tables without a sort key;the tables' shard and sort keys.
Ask Claude answers right in the panel: like the SQL Editor's assistant, Claude Code runs in the background with read-only database access, gets the query, the findings, the plan and the table definitions, and can check things itself (row counts, cardinality). This also works in the desktop window and the browser. Only without Claude Code installed does it fall back to the Claude chat.
The Advisor tab (also the query_advisor_report tool) looks at the whole
history instead of one query. It EXPLAINs every distinct query (about 5
seconds for a few hundred) to see which columns each one filters, joins and
groups on, weights them by how long those queries ran, and suggests per table:
a SORT KEY on the columns most query time filters on, so whole segments are skipped;
a SHARD KEY on the join / group-by columns when data is reshuffled or broadcast. Only columns with enough distinct values qualify (checked against the optimizer's statistics), so it never suggests a key that would skew the partitions;
REFERENCE tables for small tables that get broadcast;
indexes for filtered rowstore tables, and ANALYZE for missing statistics.
Keys can't be changed in place, so each suggestion comes with statements that
build a copy with the new keys from the table's own definition
(CREATE TABLE … ; INSERT … SELECT) and, commented out, swap the names. A
Workload card lists queries returning millions of rows, large SELECT *
queries and the most frequent errors.
Source column
The Queries tab guesses where a statement came from, from its SQL:
SAS CAS: contains
binary_serializationorPARALLELISM_LEVEL="SEGMENT"(SAS SpeedyStore / CAS loading or pushing down through the cluster);SAS in-database: reads or writes tables named
_dm…,_flw…orSASTMP…(SAS work tables created in the database);empty otherwise.
It's a heuristic, shown as "probably" in the detail panel, and a filter (Source: All / SAS CAS / SAS in-database / Other).
Trends
The cluster's query history is a ring buffer: older runs drop out. The server
keeps a summary of every traced run in a local SQLite file,
~/.singlestore-mcp/query_history.db: when it finished, how long it ran, user,
database, success / error code, type, rows, and its query shape (the SQL
with literals replaced, identified by its first 400 characters) with a short
sample. Nothing else is copied. It's updated whenever the history list loads
and on every Alerts check, and only reads events newer than the last copy, so
it's cheap. Each row records which cluster (host:port) it came from, and the
Trends tab only shows the active connection's cluster.
The Trends tab shows, per day (7 days, 30 days, 90 days, 1 year) or per hour for the last 48 hours:
the number of queries, the total runtime, failures, and the p95 duration (bars and a line, hover for the values). Click a bar to list the queries behind it, slowest first (on the Failures chart, only the failed ones). Click a query to open it in the Queries tab with its full SQL, tuning recommendations and Ask Claude, as long as the cluster's history still has it; older runs show the start of their SQL;
Slower than before: query shapes whose median duration in the last 7 days is at least 1.5× and 1 s more than in the 7 days before, with the run counts of both weeks;
New heavy queries: shapes first seen in the last 7 days with more than a minute of runtime in total.
Click a shape to see its runs in the Queries tab (as long as the cluster's
history still has them). Only queries the cluster traced are counted, i.e.
those over the event trace's Duration_threshold_ms (1 s in the setup above).
Before/after check
When the Advisor suggests a new SORT KEY, SHARD KEY or a REFERENCE
table, it builds a copy of the table (e.g. cars_big_240_sorted). Once you've
built it, Compare with new table checks whether it actually helps:
Accept or change the new table's name and press Find queries. The app checks that the table exists (otherwise it says to build it first), then picks the heaviest read-only query shapes (
SELECT/WITHonly; neverINSERT,UPDATE,DELETE, DDL orSELECT … INTO) from the history that read the table, and shows each one with the table name replaced (qualified and unqualified, with or without backticks; string literals, comments and other tables' columns are left alone). Nothing runs yet.Pick the queries, the number of runs per table (default 3) and the timeout per query (default 120 s), and press Run comparison. A confirmation says exactly what will run and roughly how long it takes.
Each query runs as
SELECT COUNT(*) AS n FROM (<query>) AS _q, so no rows are streamed to the client, alternating old / new table. The result per query: the old and new median (server time: wall time minus one network round trip), the speed-up, and whether both tables returned the same number of rows. A query over the timeout is cancelled withKILL QUERY(only after checking that its connection still runs this comparison's statement). Stop ends the comparison early.
Because of the COUNT(*) wrapper, the database may skip columns a query only
returns: the check times filtering, joining and grouping (what keys change),
not producing the output. Differences under about 10 % are noise. The
comparison's own statements are tagged and never appear in the history.
Alerts
While the server runs (inside Claude, or the desktop workspace), a background
thread checks the cluster every 60 seconds (configurable, minimum 15). Each
check runs a few read-only information_schema queries in parallel, takes
about a second, and is tagged so it never shows up
in the history, the Cluster Monitor or the alerts themselves. A check that
fails never affects the server; if every check fails, a "can't reach the
cluster" alert says so.
Rule (default) | Source | Alert |
Query running longer than 60 s |
| one alert per running query, active until it finishes |
Finished query slower than 300 s | new | one alert per query shape, with a count |
Failed queries | new | one per error code and query shape, with a count |
Pipelines |
| per pipeline (and error code) |
Node memory above 85 % of |
| per node, active while above |
Disk above 90 % |
| per node and mount, active while above |
Node not online |
| per node, active while not online |
Every rule can be switched off and its threshold changed in the view. An alert is kept once, with first / last seen and a count, so a long-running query or a full disk is one alert, not one a minute. Acknowledge one or all; an alert that happens again after being acknowledged comes back unacknowledged. Clear acknowledged / Clear all remove them; the list keeps the newest 300. On the first check against a cluster it starts from "now", so old failures in the history don't flood the list. Check now runs the checks at once.
Rules, settings and alerts are stored in ~/.singlestore-mcp/alerts.json
(shared by the server Claude starts and the desktop workspace; a change in one
is picked up by the other). SINGLESTORE_MCP_ALERTS=0 turns the background
checks off.
The workspace rail shows the number of unacknowledged alerts as a red badge (it reads the server's in-memory state every 30 seconds; no cluster queries). With Notify me on, the workspace also shows a browser notification for new alerts, after you allow notifications in the browser (it asks on your next click in the workspace). That works in the browser and the desktop window; in the Claude app the badge is the signal.
Claude in the apps
The chat panels in the SQL Editor and the Notebook are answered by the server itself, by running Claude Code headless with your own Claude login: no API key, no Send click in the chat, and it also works in the browser and desktop window.
What it can do: read the schema and run read-only queries (through its own MCP server with only
list_databases,list_tables,describe_tableandread_query). It has no shell or file access and can't change data: it gives you statements to review and run.Speed: Fast (Haiku), Balanced (Sonnet, medium effort; default) or Thorough (Opus, high effort).
Knows SingleStore: every question includes the SingleStore SQL skill (
SKILL.md), key learnings such as case-sensitive names and procedure syntax. Add to it as you find pitfalls.Quick answers: each editor / notebook keeps one Claude process running (started when you open the panel), so questions don't wait for Claude Code to start; follow-ups keep the conversation. Idle processes close after 10 minutes. Progress and a Stop button show while it works.
Needs Claude Code installed and logged in (
claude, then/login, once). It uses your Claude plan like any other Claude Code session.
Browser and desktop window
↗ Open in browser reopens the current view full-window in your browser,
for when the chat column is too narrow. Claude also posts this link under each
app, and the browser_link tool makes one on request. Links work on this
machine only and stop working when the server restarts.
The workspace also runs without Claude, in its own window:
uv run python scripts/make_shortcut.py --database SASDPcreates a SingleStore Workspace desktop shortcut. It starts the app server
on 127.0.0.1 and opens the workspace in an Edge app window (--browser for
your default browser). Clicking it again opens another window; after a code
update it replaces the running server; it stops 5 minutes after the last
window closes. It needs the SINGLESTORE_* settings as user environment
variables. Full guide, including installing on a new machine:
Using the workspace without Claude.
In the browser and desktop window, actions such as Start / Stop pipeline don't go through Claude's approval prompt (the apps' own confirmations still apply), and chat answers come from the in-app assistant.
Settings
All optional, as environment variables of the MCP server:
Variable | Default | What it does |
|
| Folder the file browser starts in |
| your user folder | Extra folders Open / Save may use (separated by |
|
| Where the notebook environment and app state live |
| (own environment) | Use an existing Python for notebooks instead |
|
| Max rows a notebook SQL cell fetches |
| GitHub raw hosts | Image hosts allowed in notebook text cells inside Claude |
|
| Claude Code executable for the in-app assistant |
|
| The Balanced assistant profile |
|
| Seconds before an answer is abandoned |
|
| Database connections in the server's pool |
| off | Run without the restart relay |
~/.singlestore-mcp is used rather than %LOCALAPPDATA% because Windows gives
the Claude desktop app a private copy of that folder, so Claude and the desktop
window would otherwise use different notebook environments.
How the apps work (for developers)
The model gets a compact text summary of each app's result (e.g. the first 20 rows); the full data goes to the app only. Helper tools the apps call for refreshes and drill-downs are app-only, so they don't clutter the model's tool list.
Layout:
src/singlestore_mcp/apps/has one<name>.py(tools) +<name>.html(UI) per app, sharedshared.js/shared.css, and vendored libraries invendor/(the official ext-apps client and a CodeMirror bundle built byscripts/build_codemirror), inlined so the apps need no internet access.The workspace is a small MCP Apps host for its views: each view runs in its own sandboxed iframe (loaded through a tool call, so hosts can't serve a stale page after a restart), and the workspace relays its tool calls, messages and model context to the real host.
Notebook kernels run in the notebook environment through
notebook_bridge.py, driven bynotebook_kernel.py.Every page carries a build stamp (hover the Notebook title) to spot an outdated page.
Dev host: scripts/dev_host.py is a local stand-in for Claude. It starts
the real server over stdio, renders an app and speaks the MCP Apps protocol
to it, against your real cluster.
uv run python scripts/dev_host.py --port 8765Open http://127.0.0.1:8765, pick a tool, give JSON arguments, Run. Each run
starts a fresh server, so Python and HTML edits show up on reload. The right
panel shows the protocol log and anything the app sends to the chat. Add
&debug=1 to the URL to give the iframe same-origin access (appDoc() in
the console returns the app's document) for scripted testing.
Using the workspace without Claude
The SingleStore Workspace also runs as a standalone desktop app: a small local web server plus a browser window, talking directly to SingleStore. No Claude subscription, Claude app or MCP client is needed for it. Only the Claude chat panels need Claude.
Quick install (Windows, one command)
Open PowerShell (or press Win+R) and run:
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/jonasliesas/singlestore-mcp-server/master/install.ps1 | iex"No administrator rights needed. install.ps1:
installs uv, which brings Python 3.12;
downloads the program to
%USERPROFILE%\singlestore-workspace(with git if available, otherwise as a ZIP);installs the dependencies;
creates a SingleStore Workspace shortcut on the desktop and in the Start menu;
opens the workspace. On the first start it opens on Connections, where you add your cluster (password, JWT, Helios SSO or Microsoft Entra ID).
Run the same command again to update. Options (pass them with
& ([scriptblock]::Create((irm <url>))) -Notebook -Database SASDP, or run a
downloaded install.ps1 with them):
Option | What it does |
| database the shortcut opens in |
| also install the notebook's Python environment now (about 150 MB) |
| install somewhere else |
| install from a local copy of the project (share, USB stick), not from GitHub |
| also register the MCP server and skills with Claude Code, if installed |
| don't open the workspace at the end |
| remove the program and shortcuts (keeps connections, files and notebooks) |
The manual steps below do the same by hand.
What works and what doesn't
Feature | Without Claude |
SQL Editor: autocomplete, run SQL, results, history, CSV export | ✅ |
SQL files: Open / Save / Save as, file browser | ✅ |
Notebook: SQL, Python and text cells, charts, | ✅ |
Notebook Python environment and the Packages panel | ✅ (installed with |
Schema Explorer, Pipeline Monitor (incl. Start / Stop / Test), Cluster Monitor, Query Grid | ✅ |
Database list refresh, full-window layout | ✅ |
Claude chat panels (SQL Editor, Notebook) | ❌ need Claude Code logged in to a Claude account; without it the panel shows a message and nothing else is affected |
Ask Claude buttons (Schema Explorer, Pipeline Monitor) | ❌ hand the question to the Claude chat, which the standalone window doesn't have; the button says so |
Slash commands, asking Claude in a chat | ❌ need a Claude client |
Other MCP clients (e.g. VS Code with GitHub Copilot) can still use the server's tools, but show plain text results instead of the apps.
What you need
Windows with Microsoft Edge (for the app window). On macOS / Linux the standalone app also works with
--browser, but the desktop shortcut script is Windows-only.uv, which installs Python 3.12 and all dependencies for you. No separate Python installation is needed.
Git, or download the repository as a ZIP from GitHub.
Network access to your SingleStore cluster (default port 3306) and, for the first notebook setup, to the Python package index (PyPI).
1. Install
git clone https://github.com/jonasliesas/singlestore-mcp-server.gitcd singlestore-mcp-serveruv syncuv sync creates .venv in the project folder with Python 3.12 and the
server's dependencies.
2. Connection settings
The app reads the same settings as the MCP server, from user environment variables (Windows: Settings → System → About → Advanced system settings → Environment Variables → User variables):
Variable | Example | Required |
|
| yes (or |
|
| yes |
| your password | yes |
|
| no (default 3306) |
|
| no: default database |
|
| no: only if your cluster has no TLS |
|
| no: instead of the separate variables |
Enter the password in the Environment Variables dialog rather than with
setx in a terminal, so it doesn't end up in your shell history. Windows
picks up new variables in newly started programs, so set them before creating
the shortcut, or sign out and in again afterwards.
3. Create the desktop shortcut
uv run python scripts/make_shortcut.py --database SASDPThis creates a SingleStore Workspace shortcut with a database icon on your
desktop. To find it from the Start menu too, copy it to
%APPDATA%\Microsoft\Windows\Start Menu\Programs. Options:
--database SASDP: database to start in--view notebook: open on another view (sql,notebook,schema,pipelines,cluster)--name "SingleStore Notebook": shortcut name (make several shortcuts for different databases or views)
Without a shortcut, start it from the project folder with
.venv\Scripts\pythonw.exe -m singlestore_mcp.workspace_app --database SASDP
(add --browser to use your default browser instead of an Edge window).
4. First start
Double-click the shortcut. A window opens with the workspace, usually on the SQL view. The first start takes a few seconds; the server runs in the background without a console window.
Open the Notebook view. The first time, it offers to Install the notebook's Python environment (about 150 MB, a minute or two). Later starts skip this.
Pick your database in the dropdowns and start working.
Everything you create is stored on your machine: SQL files and notebooks in
Documents\SingleStore SQL (or wherever you save them), the notebook
environment in ~/.singlestore-mcp.
Day to day
Several windows: clicking the shortcut again while it runs opens another window on the same server (fast; notebooks and kernels are shared).
Stopping: close the windows. The server stops by itself 5 minutes after the last window closes, along with any notebook kernels.
Updating: run
git pullanduv syncin the project folder. The next click on the shortcut notices the new code and restarts the server (this also restarts notebook kernels).Packages for notebooks: use the notebook's Packages panel or
%pip install …in a cell; restart the kernel (↻) afterwards.
Troubleshooting
Symptom | What to do |
Nothing happens on double-click | Run the command from step 3 with |
"Couldn't connect" / errors in every view | Check the |
Window shows "Not found" | An old server is still running from an earlier version; close all windows, wait a few seconds and click the shortcut again. |
Notebook says the environment is missing | Click Install in the notebook; it needs |
A new package isn't found in a notebook | Restart the kernel (↻); check |
Model downloads (Hugging Face) hang | Already handled: downloads use plain HTTPS. If you're behind a proxy, set |
Security notes
The server listens on
127.0.0.1only, and every window uses a secret link; other machines and other web sites can't use it.It uses your SingleStore user's permissions. Statements that change data ask for confirmation in the SQL Editor and in SQL cells; Python cells and
%sqlrun as written, as in Jupyter.Notebook code runs with your Windows user rights, like any local Jupyter.
Setup
Uses uv to manage the Python environment,
pinned to Python 3.12 via .python-version:
cd singlestore-mcp-server
uv syncThis creates .venv/ and installs everything from uv.lock.
Then give the server your SingleStore credentials. Supported variables (see
.env.example):
Variable | Required | Notes |
| yes* | |
| no | default |
| no | default |
| no | |
| no | default database for queries |
| no | set |
| yes* | alternative to the above: |
* set either SINGLESTORE_HOST or SINGLESTORE_URL.
How you wire these in depends on which MCP client you're using — the two below are unrelated mechanisms, use whichever matches your setup.
Claude Code (in VS Code, or the terminal)
There are two ways to register the server with Claude Code — pick one. They're independent; you don't need both.
Option A: project-scoped, via .mcp.json (already done)
.mcp.json at the project root already registers the server,
scoped to this project only:
{
"mcpServers": {
"singlestore": {
"command": "uv",
"args": ["run", "--directory", ".", "singlestore-mcp-server"],
"env": {
"SINGLESTORE_HOST": "${SINGLESTORE_HOST}",
"SINGLESTORE_USER": "${SINGLESTORE_USER}",
"SINGLESTORE_PASSWORD": "${SINGLESTORE_PASSWORD}",
"SINGLESTORE_DATABASE": "${SINGLESTORE_DATABASE:-}",
"SINGLESTORE_SSL_DISABLED": "${SINGLESTORE_SSL_DISABLED:-false}"
}
}
}
}Claude Code doesn't have an interactive "prompt me for the secret" flow the
way VS Code Copilot Chat does. Instead, the ${VAR} syntax above is expanded
from your actual shell/OS environment when Claude Code starts, so the
value never has to live in this tracked file — set the real variables
(Windows: System Properties → Environment Variables, or
setx SINGLESTORE_PASSWORD hunter2, then restart the terminal/VS Code so it
inherits the change) and .mcp.json stays safe to commit as-is.
Once the env vars are set, open this folder in VS Code with the Claude
Code extension (or run claude from a terminal cd'd into this folder) and
the singlestore server connects automatically — there's no separate mode
toggle to flip. Because the registration lives in this folder's .mcp.json,
it's only picked up when Claude Code's working directory is this project;
opening a different folder won't see it.
Option B: user-scoped, via claude mcp add (available everywhere)
To make the server available from any project — not just when this folder
is open — register it once at the user level instead, from a terminal (the
CLI reads your already-exported SINGLESTORE_* variables and bakes their
current values into the stored config, since claude mcp add doesn't do the
${VAR} expansion .mcp.json does):
claude mcp add singlestore -s user \
-e SINGLESTORE_HOST="$SINGLESTORE_HOST" \
-e SINGLESTORE_USER="$SINGLESTORE_USER" \
-e SINGLESTORE_PASSWORD="$SINGLESTORE_PASSWORD" \
-- uv run --directory "C:\path\to\singlestore-mcp-server" singlestore-mcp-server(Swap $SINGLESTORE_HOST etc. for literal values on Windows PowerShell,
where $VAR bash-expansion inside a bash-tool call won't apply — or just
type the real host/user/password in place of those placeholders.) If you
later rotate the password, re-run the same command — claude mcp add
overwrites an existing entry with the same name.
Either way
Run /mcp inside a Claude Code session to check the singlestore server's
connection status and see the tools it exposes. If you just registered it
(either option) in a session that's already running, its tools won't appear
until you restart that session — MCP servers are only loaded at startup.
Claude Desktop
Claude Desktop (the standalone app, not Claude Code) uses a different,
app-level config file — there's no per-project .mcp.json support and no
${VAR} expansion, so credentials have to be written into the file as
literal values.
Open the config file for your OS (create it if it doesn't exist yet — or in the Claude Desktop app, go to Settings → Developer → Edit Config, which creates and opens it for you):
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Add a
singlestoreentry tomcpServers, merging with whatever's already there rather than replacing the whole file:{ "mcpServers": { "singlestore": { "command": "uv", "args": [ "run", "--directory", "C:\\Users\\norjni\\claude code\\singlestore-mcp-server", "singlestore-mcp-server" ], "env": { "SINGLESTORE_HOST": "10.104.80.126", "SINGLESTORE_USER": "admin", "SINGLESTORE_PASSWORD": "your-actual-password-here", "SINGLESTORE_SSL_DISABLED": "false" } } } }Use an absolute path for
--directory(Desktop doesn't run this from the project folder the way VS Code does), and escape backslashes as\\on Windows. On macOS the path would look like/Users/you/singlestore-mcp-server.Quit Claude Desktop completely and reopen it — config changes only take effect on a full restart, not just closing the window.
Click the "Add files, connectors, and more" (+) control in the message box, open Connectors → Manage connectors, and confirm
singlestoreis listed and connected.
Since this file stores the password in plain text, treat it like any other
credentials file — don't commit it or share it, and rotate the password if
it ever leaks. Logs for debugging a failed connection live in
%APPDATA%\Claude\logs\mcp-server-singlestore.log (Windows) or
~/Library/Logs/Claude/mcp-server-singlestore.log (macOS).
VS Code + GitHub Copilot Chat
If you're using Copilot Chat's own MCP support instead, .vscode/mcp.json
registers the server for that. Copilot Chat does support an interactive
prompt via an inputs block + ${input:<id>} placeholders (VS Code pops a
masked input box on first start and caches the value), which is the closest
equivalent to Claude Code's env-var approach above — see the comments in
that file. Switch Copilot Chat's mode dropdown to Agent for the
server's tools to show up; they're invisible in Ask/Edit mode.
Manual smoke test
SINGLESTORE_HOST=127.0.0.1 SINGLESTORE_USER=root SINGLESTORE_PASSWORD=pw \
uv run singlestore-mcp-serverThis starts the stdio server and blocks waiting for JSON-RPC on stdin — that
hang is expected; it means it's up. Use the MCP Inspector
(npx @modelcontextprotocol/inspector uv run singlestore-mcp-server)
for interactive testing instead of talking to stdin by hand.
Example: an S3 pipeline
create_pipeline(create_pipeline_sql="""
CREATE PIPELINE orders_pipeline AS
LOAD DATA S3 's3://my-bucket/orders/'
CONFIG '{"region": "us-east-1"}'
CREDENTIALS '{"aws_access_key_id": "...", "aws_secret_access_key": "..."}'
INTO TABLE orders
FIELDS TERMINATED BY ','
""")
start_pipeline(pipeline_name="orders_pipeline")
pipeline_status(pipeline_name="orders_pipeline")Available Tools
100 toolsalertsAlertsARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safety profile, and the description adds real behavior: the tool returns a browser_url and instructs how to surface it as a clickable link. It also conveys the breadth of what the server watches in the background. It stops short of describing pagination, latency, or how the acknowledge/clear affordances are triggered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and resource, and the parenthetical enumeration is informative rather than padded. The trailing browser_url rendering instruction is slightly operational noise but useful enough to keep.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the returned browser_url and its intended use, and by summarizing the view's contents. Nothing critical is missing for a parameterless view-open tool, though the relationship to alerts_data/alerts_badge remains unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and schema coverage is 100%, so the baseline of 4 applies. There is no parameter behavior left to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Open the Alerts view') and enumerates the alert categories it surfaces (long queries, failed pipelines, node memory/disk thresholds, nodes offline). This clearly distinguishes it as a view-opening tool, but it does not explicitly differentiate itself from siblings like alerts_data or alerts_badge.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent can infer this opens the Alerts UI, but there is no explicit when-to-use versus alternatives (alerts_data, alerts_check_now, alerts_badge) or any stated preconditions. An agent must guess whether it wants the view or the underlying data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alerts_ackBIdempotent
Acknowledge alerts by id, or all of them.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | ||
| ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, establishing the mutation and safety profile. The description adds only the scope of acknowledgment and says nothing about side effects, reversibility, or permission requirements beyond what the annotations cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It delivers the core action and scope immediately, which is appropriate for a simple two-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with annotations covering safety, the description is minimally viable but leaves gaps around id format and parameter interaction. It does not explain return values, though no output schema exists to relieve that burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates partially by mapping 'by id' to the ids parameter and 'or all of them' to the all parameter. It does not specify id format, null handling, or what happens if both parameters are supplied, so it is adequate but incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Acknowledge alerts,' and clarifies scope with 'by id, or all of them.' It does not explicitly distinguish this tool from related siblings like alerts_clear or alerts_update, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the two acknowledgment modes (by id or all) but offers no guidance on when to use this tool versus alternatives such as alerts_clear or alerts_update. There are no exclusions or contextual conditions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alerts_badgeARead-only
Unacknowledged alert count for the workspace rail (in-memory state only; cheap to poll).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered structurally. The description adds real behavioral context beyond that: the value is in-memory state only (possibly stale / not a server fetch) and is cheap to poll, which tells the agent about cost and freshness characteristics it could not get from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the resource, the UI context, and the freshness/cost caveat in parentheses. No filler, nothing redundant, and the most decision-relevant detail leads.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only badge counter with no output schema, the description covers purpose, cache semantics, and cost profile. The only minor gap is that it does not state the return type (a bare integer count), though 'count' strongly implies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing parameter-related for the description to clarify or omit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and verb-like outcome: the count of unacknowledged alerts, scoped to the workspace rail UI. That distinguishes it from siblings such as alerts_data or alerts (which presumably return the alerts themselves) without naming them explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'cheap to poll' implicitly endorses repeated/frequent invocation, which is genuine usage guidance. However, it never states when to prefer this over alerts_data, alerts, or alerts_check_now, nor any condition under which to avoid it, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alerts_check_nowARead-only
Run every enabled check now (read-only queries) and return the new state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true annotation already establishes the safety profile, so the description's '(read-only queries)' largely restates structured data. It does add that all enabled checks are triggered and that the new state is returned, but says nothing about cost, duration, rate limits, or whether it modifies alert state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, and the key action ('Run every enabled check now') is front-loaded before the read-only qualifier and the return value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema and a readOnly annotation, the description covers the essential behavior. Return values need not be enumerated since no output schema exists, though a note on expected latency or side effects on alert state would have made it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and schema coverage is 100%, so there is nothing for the description to disambiguate. Baseline 4 applies for a no-param tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: run every enabled check now and return the new state, including the read-only nature of the queries. It is clear what the tool does, though it does not explicitly contrast itself with siblings like alerts_update or alerts_ack.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Run every enabled check now' implies forcing an immediate refresh versus waiting for scheduled checks, which is a useful usage cue. However, no alternatives are named and there is no explicit when/when-not guidance relative to alerts, alerts_data, or alerts_update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alerts_clearBIdempotent
Remove alerts from the list (all, or only the acknowledged ones).
| Name | Required | Description | Default |
|---|---|---|---|
| acknowledged_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is largely covered structurally. The description adds the all-vs-acknowledged scope, but it never says whether a cleared alert is gone permanently or merely hidden from the list, nor whether the clearance is server-side or view-only — the one behavioral question an agent actually has here. The "Remove" wording also sits in tension with destructiveHint=false and is never reconciled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the verb first and the scope qualifier in parentheses; nothing is wasted. It is arguably too terse for a mutation tool, but it is structurally clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter tool with no output schema and annotations covering the safety profile, the description covers purpose and parameter meaning adequately. It is missing the durability/irreversibility note, which is the one piece of context an agent would want before invoking a removal operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter. It does: "all, or only the acknowledged ones" fully explains what acknowledged_only=true vs false (the default) means, which is the only parameter. It stops short of naming it, but the semantics are unambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ("Remove") and resource ("alerts from the list"), and the parenthetical clarifies the scope of the removal. It is clear on its own, but it makes no reference to any sibling (e.g., alerts_ack, alerts_update), so an agent gets no help distinguishing this from the other alert-mutating tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical "all, or only the acknowledged ones" hints at the two operating modes, but there is no guidance on when to clear versus acknowledge (alerts_ack) or update (alerts_update), nor any statement of preconditions. The agent must infer when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alerts_dataBRead-only
Alerts, rules and checker status for the Alerts view (no cluster queries).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares this a safe read, so the behavioral bar is lower. The description adds real context by stating the scope covers alerts/rules/checker status and excludes cluster queries, though it says nothing about return shape, freshness, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the scope exclusion is tacked on efficiently. It is a fragment rather than a full sentence, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param, no-output-schema read tool this covers the essentials: it says what data is returned and what is out of scope. It stops short of describing the return contents or how the alerts/rules/checker status are structured, which the absent output schema would otherwise require.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema requires no semantic elaboration. Baseline 4 applies; there is nothing for the description to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It names the resources (alerts, rules, checker status) and scopes them to the Alerts view, which is more specific than a tautology. However, it lacks a clear verb (fetch/list) and does not distinguish itself from the sibling `alerts` tool, so an agent can't fully disambiguate from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(no cluster queries)' hints at an exclusion and effectively routes cluster data to `cluster_monitor_data`, which is a small piece of guidance. But there is no explicit when-to-use, no named alternative, and no prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alerts_updateBIdempotent
Change alert rules ({name: {enabled, seconds, percent}}) and settings ({interval_s, notify}).
| Name | Required | Description | Default |
|---|---|---|---|
| rules | No | ||
| settings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, so the mutation and idempotency profile is covered structurally. The description adds the field shape but omits whether updates are partial or full replacements and what permissions are needed, so it adds only modest behavioral value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no waste, front-loading the verb and resource. The dense brace notation is efficient, though slightly cryptic without further explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with two optional params and no output schema, the description gives the payload structure but leaves gaps: no mention of partial vs. full replacement behavior, no defaults, and no permission context. Adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden and does list the nested fields (enabled, seconds, percent, interval_s, notify). However it only names them without explaining their meaning or valid ranges, leaving the semantics of each field unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Change) and resources (alert rules and settings), and even sketches the payload shape. It is clear what the tool does, though it does not explicitly differentiate itself from sibling alert tools like alerts_ack or alerts_clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this tool versus the other alert siblings (alerts, alerts_ack, alerts_clear), nor any prerequisite or scope guidance. The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | ||
| alter_pipeline_sql | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral transparency burden. It discloses the requirement for a full statement and that alterable clauses are source-specific, which is valuable. However, it does not mention permissions, reversibility, effects on a running pipeline, or the destructive potential of resetting offsets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-sentence purpose, a short use-case expansion, and a clear Args block. Every sentence earns its place; there is no repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with an output schema, the description covers the essential usage: what SQL to supply, what the database parameter does, and why a full statement is needed. It lacks some safety/permission context, but the core calling contract is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates by defining alter_pipeline_sql as 'The full ALTER PIPELINE ... statement' and explaining that database defaults to the connection's configured database. This adds meaning beyond the bare property names and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Alter' and the resource 'existing pipeline', and specifies that it operates from a full ALTER PIPELINE statement. It distinguishes itself from siblings like create_pipeline and drop_pipeline by mentioning it changes connection strings/credentials or resets offsets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete use cases ('change the connection string/credentials or reset offsets') and explains why a full statement is required, referencing create_pipeline for the same rationale. It does not explicitly state when not to use this tool or list alternatives, but the common-use framing provides clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_pageBRead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds genuine behavioral context beyond that: results are not cached by hosts (unlike resources/read) and reflect changes immediately after restart_server. This is useful operational context not present in the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, with the core purpose front-loaded before the caching caveat. No wasted text, though the parenthetical slightly interrupts flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with an output format implicitly being HTML, the description covers purpose and caching behavior adequately. However, with no output schema and an undocumented uri parameter at 0% coverage, the agent lacks the information needed to supply a valid uri.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'uri' parameter has 0% schema coverage and the description provides no format, example, or enumeration as to which page URIs are valid. 'One of this server's app pages' gives only a vague domain hint and does not compensate for the documentation gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('HTML of one of this server's app pages') and clarifies its role ('the workspace loads its views with this'). It distinguishes itself somewhat from resources/read by contrasting caching behavior, though it does not differentiate from the many sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The caching contrast with resources/read implies a reason to prefer this tool for live views that must reflect changes after restart_server, but there is no explicit when-to-use or when-not-to-use statement. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_linkARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | ||
| arguments | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries the extra burden and does add meaningful traits: the link is non-persistent ('works on this machine only, until the MCP server restarts') and the result must be presented as a clickable link. It does not cover failure modes or whether the referenced app must already be open/authenticated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, followed by a single usage sentence and an Args block. Every sentence carries information an agent needs, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is unnecessary, and the description correctly tells the agent how to use the returned value. Combined with the enumerated tool values and argument examples, it is nearly complete for a 2-parameter tool; only edge behavior (invalid tool, persistence failure) is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it enumerates the accepted app names for 'tool' (pipeline_monitor, query_grid, schema_explorer, cluster_monitor, sql_editor) and gives concrete example payloads for 'arguments'. It stops short of full compensation because it doesn't state the full argument contract for each target app or what happens with an unknown tool name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and outcome ('Get a link that opens one of the interactive apps full-window in the user's web browser'), which is clear enough to separate it from direct query/editor tools. It does not explicitly contrast with the nearby sibling 'app_page', so sibling differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete trigger: 'Use this when the user wants an app bigger than the chat allows or in their browser', plus a follow-up instruction to hand the returned URL to the user as a clickable link. No alternatives or when-not conditions are named, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cleanup_work_tablesClean up work tablesARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and the description corroborates this precisely, explaining nothing is dropped by the call and only the user can drop from the panel. It adds substantial context beyond the annotation: the dry-run mode, the log, the per-table metadata shown, and the returned browser_url that should be posted as a clickable link.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action in the first sentence, then supporting detail. The middle paragraph is dense but each clause (name patterns, per-table columns, confirmation flow) earns its place; the description runs long for a panel-opening tool but wastes little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description carries the full burden and does so: it covers what the panel shows, what the call does and does not do, and how to handle the returned browser_url. Nothing an agent needs to invoke or present the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline for a parameterless tool is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Open the Schema Explorer's Clean-up panel for leftover SAS work tables.' The closing clarification ('Nothing is dropped by this call; only the user can drop from the panel') implicitly separates it from sibling tools like schema_explorer_cleanup_drop, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear when-to-use trigger: 'Use this when the user wants to find or clean up leftover, temporary or SAS work tables.' It does not name the alternative tools (schema_explorer_cleanup_scan/settings/drop) or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cluster_monitorCluster MonitorARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds real behavioral context beyond that: the view auto-refreshes, and the result carries a browser_url intended to be posted as a clickable link under the app, which is important for correct agent behavior. It does not describe limits such as refresh interval or whether the browser view persists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose, then usage, then output-handling instructions. Every sentence earns its place and the actionable browser_url instruction is not buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument, read-only UI-opening tool with no output schema, the description supplies everything needed: what is displayed, when to invoke it, and what to do with the returned browser_url. The absence of an output schema is compensated for by naming the key return field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema description coverage, the baseline is 4; there is nothing to document. The description correctly adds no parameter noise.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Open a live monitor of the SingleStore cluster') and enumerates exactly what is shown: per-node CPU/memory/disk and currently running queries. It is immediately clear what the tool does, though it never differentiates itself from the sibling cluster_monitor_data, so an agent must infer which one to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when the user wants to see cluster load, resource usage or what is running' gives a clear triggering condition. It provides no explicit exclusion or alternative-tool routing (e.g. cluster_monitor_data), so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cluster_monitor_dataCRead-only
Refresh data (including CPU history) for the Cluster Monitor app.
| Name | Required | Description | Default |
|---|---|---|---|
| include_internal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares this as a safe read, so the description doesn't need to restate that. 'Refresh' is a read-style operation consistent with the annotation, and adding 'including CPU history' gives a useful hint about content. It still omits what exactly is refreshed, whether it hits the network, or what the call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the key scope detail front-loaded. It is well-sized, though its brevity edges toward under-specification given the unexplained parameter rather than pure conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and an undocumented optional parameter, the description does too little. It neither explains include_internal nor describes the shape of the returned data beyond the passing mention of CPU history.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the sole parameter include_internal is never mentioned in the description. With the schema silent and the description silent, an agent has no idea what toggling include_internal does, so the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Refresh) and resource (data for the Cluster Monitor app), plus a concrete scope detail (CPU history). However, it never distinguishes itself from the sibling cluster_monitor tool or clarifies its relationship to it, so an agent must infer the division of labor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use, when-not-to-use, or alternative pointer. The phrase 'for the Cluster Monitor app' hints at context but gives no condition telling an agent when to call this versus cluster_monitor or pipeline_monitor_data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connection_activateA
Make a saved connection the active one, and test it (token connections may need a sign-in first).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark it non-read-only and non-destructive; the description adds real behavior beyond that by disclosing that activation also performs a connection test and that token-based connections may require a sign-in step first. It still does not say what happens on a failed test or whether the previous active connection is affected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with the primary action front-loaded and the caveat demoted to a parenthetical. No filler, though the caveat sentence could be slightly sharper about the required sign-in flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation with no output schema, the description covers the core action and one prerequisite, which is the minimum viable. It omits failure behavior, state side effects on the previously active connection, and any permissions requirement, so it is adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single 'name' property is undocumented. The phrase 'a saved connection' weakly implies the parameter is the name of a previously saved connection, but the description adds no format or lookup details to compensate for the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (activate) and resource (saved connection), and adds the secondary effect of testing it. It is distinguishable from connection_test or connection_save, but it never names the closest sibling use_connection, so the boundary is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb rather than stated. The parenthetical about token connections needing a sign-in hints at the connection_sso_sign_in prerequisite, but there is no explicit when-to-use/when-not guidance relative to use_connection or connection_test.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connection_deleteADestructive
Delete a saved connection and its stored password.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds genuine value beyond them by disclosing a second destroyed artifact – the stored password – which the annotations cannot convey. It still omits whether the deletion is permanent or recoverable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no filler, and the destructive outcome is front-loaded. Nothing could be trimmed without losing signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with clear annotations and no output schema, the description covers the essentials. The remaining gap is failure/irreversibility behavior, which is a minor omission at this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single 'name' parameter, so the description carries the burden. It implies the parameter identifies a saved connection, which is meaningful, but adds no matching rules, case sensitivity, or error behavior for an unknown name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (delete) and resource (saved connection), so an agent can immediately tell it apart from connection_save, connection_test, or connection_activate. It stops short of explicitly contrasting itself with the closest siblings, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisite (e.g. that the connection must be saved/inactive), and no mention of the alternative workflows (cleanup_work_tables, connection_save) in the sibling list. The agent must infer all routing from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connection_helios_caA
Download SingleStore's CA bundle (needed for Helios / TLS) to ~/.singlestore-mcp once; returns its path.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so safety is partly covered; the description adds meaningfully beyond that by disclosing the write target ('~/.singlestore-mcp'), the one-time nature ('once'), and the return value (the path). It does not mention overwrite behavior if the file already exists, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and resource, containing destination, purpose, cardinality, and return value with no wasted words. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter setup tool with no output schema, the description covers what it fetches, where it writes, that it need only run once, and what it returns. Adding a note about the return type or overwrite handling would make it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to disambiguate, and it correctly introduces no phantom arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Download SingleStore's CA bundle') plus the destination and purpose ('needed for Helios / TLS'). No sibling tool performs this setup action, so no differentiation is required, and an agent can immediately tell what this does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'needed for Helios / TLS' gives a clear trigger condition for when this tool is required. It does not name alternatives or exclusions, but no competing CA-bundle tool exists among the siblings, so the context is sufficient without that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connection_saveB
Create or update a saved connection. password None keeps the stored one; "" removes it.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | ||
| activate | No | ||
| password | No | ||
| original_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a non-destructive write. The description adds genuinely useful behavioral detail about the password sentinel (None preserves the stored value, empty string clears it), which is not derivable from the schema. It still omits permission/auth requirements and any indication of what happens to unmentioned profile fields on update.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the operation and followed immediately by the one non-obvious parameter rule. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with a nested profile object, zero schema coverage, and no output schema, the description is far too thin. The password rule is a good start, but 'profile' contents, 'activate' semantics, and 'original_name' behavior are all missing, leaving the agent unable to construct a correct call from the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description must carry the load and only explains the password sentinel. The nested 'profile' object, 'activate', and 'original_name' (likely the rename key) are left entirely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (create or update) and resource (saved connection), making the upsert nature of the operation explicit. It is distinguishable from connection_delete and connection_activate, though it does not name those siblings directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus siblings like connection_activate, use_connection, or connection_delete, and no prerequisites or context are given. The agent must infer that this is the persistence step for a connection profile.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only tell the agent this is non-read-only and non-destructive. The description adds real behavioral context beyond that: it opens a page in the user's browser (interactive, requires user presence) and blocks waiting for a token with a stated 2-minute timeout. That is valuable for an agent deciding whether to call it synchronously.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and scope, then the mechanism and timeout. No wasted words; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema tool the description covers action, mechanism, and timeout, which is decent. It omits prerequisites (does the connection need to exist/be activated first?), what the token result looks like, and failure modes (timeout behavior).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the sole required parameter 'name' carries no description. The description does not clarify whether 'name' is the connection name, the SSO provider, or something else, so it fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (browser sign-in) and resource (SSO connections), and narrows scope to Helios or Microsoft Entra ID. It does not explicitly contrast with sibling sign-in tools like sas_viya_sign_in or connection_activate, so sibling differentiation is only partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'for SSO connections (Helios or Microsoft Entra ID)' implies when this applies, but there is no explicit when-to-use/when-not guidance and no named alternative for non-SSO connections (e.g., connection_activate). Usage is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connections_stateBRead-only
Saved connections, the active one and where passwords are stored.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description does add one genuinely useful behavioral detail — that the response exposes where passwords are stored, which is a security-relevant disclosure — but it says nothing about freshness, whether it reflects live server state, or what the snapshot contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and free of filler, which is good, but it is a trailing noun fragment rather than a front-loaded statement of action, so an agent skimming it gets a topic rather than a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and only a readOnlyHint annotation, the call surface is trivial and the description is arguably sufficient to invoke it. However, it does not distinguish this snapshot from the many overlapping connection-related siblings, leaving routing ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. Schema coverage is nominally 100% and there is nothing for the description to clarify on inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a noun phrase ('Saved connections, the active one and where passwords are stored') rather than a verb+resource statement — it never says it retrieves or returns anything. It hints at scope (saved connections, active connection, credential storage) but gives no clear differentiation from siblings like list_connections, use_connection, or connections_window.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites, and no reference to any alternative tool. The agent must infer that this is a state-snapshot call from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connections_windowSingleStore connectionsARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true is consistent with merely opening a window, so no contradiction. The description adds genuinely useful behavioral context beyond the annotation: the result carries a ``browser_url`` and it should be surfaced as a clickable link under the app, which tells the agent what to expect and do after invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short paragraphs, front-loaded with the core action, followed by the view identity and output-handling note. Reasonably tight, with only slight redundancy between 'Connections window' and 'Connections view of the SingleStore Workspace'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless window-opening tool with no output schema, the description covers what it opens, what it is, and the key return value handling (browser_url -> clickable link). Adequate; only explicit sibling differentiation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. There are no argument semantics to explain and the description correctly adds none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Open') and resource ('the Connections window') and enumerates the capabilities it exposes (add, edit, test, switch connections). It does not explicitly distinguish itself from siblings such as connection_test or connection_activate, so the agent must infer that this opens a UI surface rather than performing an operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (opening a connection-management window and posting the returned browser_url as a link) but never states when to pick this over alternatives like connection_test, connection_activate, or connections_state. Guidance is present but implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connection_testCRead-only
Try a connection: a saved one by name, or the settings from the form.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| profile | No | ||
| password | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, which matches the 'try' semantics and raises no contradiction. The description adds the useful behavioral detail that the call accepts either a saved connection reference or ad-hoc form settings, but it says nothing about what success/failure looks like, whether `password` is required for one mode, or any side effects (e.g., does it activate the connection?).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the two-mode distinction is right up front. It is arguably under-specified rather than over-long, but as written nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no output schema and only a read-only hint in annotations, the description should explain the two input paths more concretely (which params pair with which mode) and what the call returns on success or failure. As it stands, key operational details are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and none of the three parameters are documented in the schema. The description hints that `name` refers to a saved connection and that `profile` corresponds to 'the settings from the form', but `password` is never mentioned and the relationship/mutual exclusivity between `name` and `profile` is left ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It conveys the resource (a connection) and the operation (testing it), and distinguishes two input modes: a saved connection by `name` versus form-supplied settings. The verb 'try' is informal and the tool is not differentiated from nearby siblings like `connection_activate`, `connection_sso_sign_in`, or `sas_viya_test`. Purpose is inferable but not sharp.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no named alternative. An agent cannot tell from the text whether this is a prerequisite step before `connection_activate`, an alternative to `sas_viya_test`, or a purely diagnostic call. The only routing hint is the implicit name-vs-form distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | ||
| create_pipeline_sql | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does so well by revealing that the tool only checks for the 'CREATE [OR REPLACE] PIPELINE' prefix before running, and that the pipeline is not started automatically. These are meaningful non-obvious behaviors beyond the basic 'create' action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: it leads with the action, explains why the design is statement-based, states critical behavioral caveats, and includes a representative example. Every section serves a purpose and there is minimal redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, validation behavior, start semantics, and parameter meanings, and an output schema exists to describe return values. It does not mention error cases or permission requirements, but for this tool the provided context is sufficient for correct use and routing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains create_pipeline_sql as the full statement text, provides a concrete example, and clarifies that database defaults to the connection's configured database. This adds real meaning beyond the parameter names and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a new pipeline from a full CREATE PIPELINE statement.' It clearly distinguishes this tool from siblings like start_pipeline, drop_pipeline, and alter_pipeline by focusing on creation from a complete statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent that creating a pipeline does not start it, and directs it to call start_pipeline afterwards. It also explains why the tool takes a full statement rather than structured parameters, which gives context for when it is appropriate. It does not state when not to use alternatives like run_sql, but the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| database | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral context. 'Show' indicates a read-only inspection, and the default-database note adds useful behavior when the parameter is omitted. However, it does not explicitly state that no data is modified, what happens on a missing table, or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, followed by a minimal Args section. There is no filler; every line adds information about the operation or its parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter introspection tool with an output schema available, the description covers the action and all argument semantics, including the database fallback. It lacks explicit usage guidance and behavioral caveats, but those gaps are minor given the tool's simplicity and the output schema's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates by documenting both parameters. It adds real meaning beyond the schema by clarifying that omitting database falls back to the connection's configured database, which is not inferable from the schema's null default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Show column definitions for a table.' This clearly distinguishes the tool from siblings like list_tables (which lists tables) and run_sql (which executes arbitrary SQL), even though no sibling is named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to use this tool versus alternatives such as run_sql or list_tables. The intended use is only implied by the verb 'Show,' and there is no mention of when not to use it or which sibling to prefer for broader schema exploration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | ||
| if_exists | No | ||
| pipeline_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It usefully reveals the automatic stopping of running pipelines and that if_exists turns failure into a no-op. It does not explicitly warn that deletion is permanent or mention permission requirements, but the core side effects are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the primary purpose in the first sentence. The Args block is organized and every sentence contributes useful guidance with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential operation, side effects, and parameter semantics, and an output schema exists so return-value documentation is not required. It is nearly complete, though a brief note about irreversibility would have fully closed the gap for a destructive action with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates by explaining all three parameters: pipeline_name's role, database's default to the connection database, and if_exists's no-op behavior. This adds real meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Delete a pipeline,' a specific verb and resource that clearly identifies the operation. It also notes that running pipelines are stopped automatically, which differentiates dropping from simply stopping a pipeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for permanent removal and explains that running pipelines are stopped as part of the drop. However, it does not explicitly contrast drop_pipeline with stop_pipeline or state when dropping is inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
files_browseARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | sql | |
| path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description still adds real behavioral context: the default path target and the allowed-root restriction that determines whether a browse will be rejected. It omits return ordering, pagination, and what an out-of-root error looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and return content, then defaults and constraints. The kind mapping is the only detail worth its length; the blank-line-wrapped formatting is slightly awkward but wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter, read-only listing tool with no output schema, the description covers action, return contents, default argument behavior, and the access boundary. Reasonably complete; it just lacks return-shape and error-condition detail that an agent navigating a file tree might want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are no enums, so the description carries the full burden — and it largely does: it maps kind="sql" to .sql files and kind="notebook" to .ipynb files, and explains that path defaults to the SQL folder. It stops short of specifying path format (absolute vs relative) or what values kind accepts beyond the two examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List a folder for the file browser") and enumerates exactly what is returned: subfolders plus .sql or .ipynb files filtered by `kind`. That is precise enough to picture the operation, though it never names a sibling tool it should be preferred over.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful context ("`path` defaults to the SQL folder") and a hard precondition (only folders inside the user's home, the SQL folder, or SINGLESTORE_MCP_FILE_ROOTS can be browsed), which tells the agent when calls will succeed. But it never says when to pick this over notebook_files / sql_editor_files or what to do instead, so usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | ||
| pipeline_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Get' implies a read-only retrieval and the database default is disclosed, but the description does not state behavior for missing pipelines, permissions, or whether any side effects occur. It does not contradict the absence of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well organized: one clear purpose sentence followed by a brief, relevant Args list. Every sentence adds useful information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter retrieval tool, the description covers the return value, the required parameter, and the optional parameter's default behavior. It does not cover error cases or explicitly route between siblings, but the output schema supplies additional structure and the use case is straightforward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description documents both parameters. The database parameter explanation ('defaults to the connection's configured database') adds real meaning beyond the schema's nullable default of null, which is valuable because the schema itself has no property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') with a precise resource ('full CREATE PIPELINE statement') and outcome ('reproduces an existing pipeline'). This clearly distinguishes it from siblings like create_pipeline, drop_pipeline, and list_pipelines.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case is implied: you call this when you need the DDL to reproduce an existing pipeline. However, the description does not explicitly mention alternatives or when not to use it, leaving the agent to infer the choice from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_connectionsARead-only
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the bar is lower, and the description still adds real value: no passwords are returned and the active connection affects all tools and apps. That is behavioral context an agent cannot get from the annotation alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Sentence one front-loads the action and its output constraints; the following two sentences each add distinct context (the significance of 'active' and where management lives). No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-format detail is unnecessary, and the description covers scope, semantics of the active flag, and the sibling for management. Only minor edge behavior (e.g., empty connection list) is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case; there is nothing for the description to disambiguate. Schema coverage of 100% means no compensating detail is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (saved SingleStore connections) and adds meaningful scope: passwords are excluded and the active connection is flagged. It is clearly distinguishable from mutation siblings like connection_activate/connection_save, though it never directly contrasts itself with the close-named connections_state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Routes the agent: this tool is for reading the connection list, while management happens in the Connections window (connections_window tool or the Connect view). That gives a clear division of labor, but there are no explicit when-not conditions or a named alternative for related reads like connections_state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_databasesA
List all databases visible to the connected user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that results depend on the connected user's visibility, implying permission-based filtering and no modifications. Although no annotations exist, the read-only nature of a list action is sufficiently conveyed by the verb 'List'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence front-loads the action and resource, with the scope qualifier placed at the end. Every word earns its place; there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, an existing output schema, and a simple read-only enumeration, the description covers everything an agent needs to invoke the tool correctly. The user-visibility qualifier is a useful contextual detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters and the input schema is empty. There are no parameter semantics for the description to clarify, so it correctly remains brief.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), a clear resource ('databases'), and an explicit scope ('visible to the connected user'). It is easily distinguishable from sibling tools like list_tables and list_pipelines because it names the object type directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternative guidance is provided, but the operation's purpose is self-evident: it enumerates databases, which is a distinct step from listing tables or pipelines. The context is clear and there are no exclusions or preconditions to state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| database | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description itself must convey behavioral expectations. It does disclose the key output trait—returning pipeline states (Running/Stopped/Error)—which is useful. However, it does not mention that this is a read-only operation, whether permissions are required, or what happens with an invalid or missing database. It is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The primary purpose is front-loaded, and the parameter explanation is minimal and directly useful. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with one optional parameter and an output schema present, the description is nearly complete. It gives the resource, scope, state categories, and default parameter behavior. It could be improved by noting the absence of side effects, but this is a minor gap given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema description coverage is 0%, the description fully explains the one parameter: database is the target database and defaults to the connection's configured database. This adds real semantic value beyond the schema's type/default fields and compensates for the lack of schema-level documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List all') and a clear resource ('pipelines in a database'), and it differentiates itself from the more specific pipeline_status sibling by explicitly covering all pipelines and their current state. This is unambiguous and lets an agent understand the exact scope of the tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: whenever you need the full set of pipelines and their states in a database. It does not explicitly contrast this with pipeline_status or other read-only siblings, nor does it give exclusions. The default-database note is helpful context but not a full usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesA
List tables (and views) in a database.
Args:
database: Database to list tables from (defaults to the connection's
configured database).
| Name | Required | Description | Default |
|---|---|---|---|
| database | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It usefully notes that views are included and that the database parameter defaults to the connection's configured database. It does not mention permissions, output sorting, or whether system tables are included, but the 'list' wording strongly implies a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the core purpose, and adds an Args section only where it adds value. Every sentence earns its place and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter and an output schema available, the description covers the essential details: what is listed, the target database, and the default behavior. It is slightly incomplete only in not routing the agent to sibling tools for related tasks like listing databases or describing a specific table.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines 'database' as a nullable string with default null and 0% schema description coverage. The description compensates by explaining the parameter means 'Database to list tables from' and clarifying the default behavior. This goes beyond the schema, though it could still specify expected format or accepted values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('List') and resource ('tables (and views) in a database'), making the tool's purpose immediately clear. It is naturally distinguished from sibling tools like list_databases and describe_table because it explicitly targets tables/views within a database.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need to list tables or views from a database. However, it does not explicitly mention alternatives or exclusions, such as using list_databases to discover available databases or describe_table for individual table details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebookSingleStore NotebookARead-only
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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| database | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint=true, and the description adds real behavioral context: Python cells get pandas, matplotlib and a `conn` connection, SQL results become DataFrames, and the result carries a `browser_url` that should be posted as a clickable link. It does not explain session lifetime, kernel startup side effects, or persistence behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Efficient and front-loaded, opening with the verb+resource before elaborating on execution semantics. The middle paragraph is slightly dense but each sentence carries information the agent needs; nothing is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description discloses the key return artifact (browser_url) and how to use it, and it covers both zero-required parameters. Minor gap: it doesn't clarify what happens to an existing notebook vs. a new one, or the relationship to the kernel-control siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden, and it does: `name` is a notebook file with an example ('sales.ipynb') plus the omit-to-create semantics, and `database` is scoped to SQL cells and flagged case-sensitive. That is meaningfully more than the bare anyOf string schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Open a SingleStore notebook') and explains what the resource is: SQL and Python cells on a Jupyter kernel, stored as .ipynb in the user's SQL folder. It even names an equivalence with a sibling ('the Notebook view ... sql_editor with view="notebook"'), though it never differentiates itself from the very similar notebook_open/notebook_run siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than stated: the args section gives 'omit for a new notebook' for name, which tells the agent how to trigger new-notebook creation, and the browser_url instruction implies a UI-flow. But there is no explicit when-to-use / when-not-to-use versus notebook_open, notebook_run or sql_editor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_askARead-only
Ask the in-app assistant about the notebook; the reply arrives in the notebook's inbox (sql_editor_inbox).
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | ||
| profile | No | ||
| question | Yes | ||
| notebook_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already covering the safety profile, the valuable addition here is the asynchronous delivery behavior: the answer is not returned inline but lands in sql_editor_inbox. That is a real behavioral trait the annotations do not convey. It omits auth, rate-limit, or kernel-requirement details, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler: verb first, resource next, delivery destination last. Nothing is repeated from the name or schema, and no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the critical async-retrieval behavior and points at the sql_editor_inbox sibling for fetching the reply, which is the most important missing piece for an agent. It still leaves the 'context' and 'profile' parameters and any execution prerequisites unexplained, so it is only minimally complete for a 4-parameter tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across all 4 parameters, so the description is the only place semantics could be supplied. It mentions only implicitly the notebook and question, and says nothing at all about the optional 'context' or 'profile' parameters, leaving half the surface undocumented in both schema and prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ("Ask") and a specific resource (the in-app assistant about the notebook), so the agent knows exactly what the tool does. It does not explicitly distinguish itself from closely named siblings like sql_editor_ask, query_history_ask, or notebook_assistant_warm, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: stating that the reply arrives in the notebook inbox (sql_editor_inbox) signals an asynchronous, fire-and-retrieve pattern and gives the agent the follow-up tool. However, there is no explicit when-to-use vs. when-not guidance and no named alternative among the many sibling ask/assistant tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_assistant_warmARead-only
Start the notebook's assistant process ahead of the first question (no model call).
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | ||
| notebook_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description is consistent with that. It adds real value beyond the annotation by disclosing 'no model call', telling the agent this is a free, latency-optimizing action rather than an inference request. It does not address idempotency or prerequisites, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the action first and the crucial qualifier ('no model call') in parentheses. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple pre-warm tool with annotations covering the safety profile and no output schema, the core intent is conveyed. However, the unexplained 'profile' parameter and the unstated behavior when the notebook is not open leave it only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description mentions no parameters at all. The required notebook_id is at least obvious from the name, but the optional 'profile' parameter is completely undocumented in both the schema and the description, leaving a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Start the notebook's assistant process') and clarifies the trigger point ('ahead of the first question'). It implicitly separates itself from notebook_ask via that timing cue, though it never names the sibling it is a precondition for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Ahead of the first question' clearly conveys when to use it: as a pre-warm before asking. There are no exclusions or explicit pointer to notebook_ask, so the routing is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_environmentBRead-only
Status of the notebook Python environment (and install progress).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The `readOnlyHint` annotation already signals a safe read operation, so the bar is lower. The description adds that it covers install progress, which is useful context beyond the annotation, but it does not explain what the status response contains or whether it is a blocking or polling call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, and the core resource is front-loaded. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only status tool with no output schema, the description is adequate to identify the endpoint, but it leaves gaps: it doesn't clarify the relationship to `notebook_environment_install` or what the returned status includes. Given the crowded sibling set, a bit more routing context would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the schema has nothing to document. Baseline for zero parameters is 4; the description does not need to add parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource (notebook Python environment) and what it reports (status plus install progress), so an agent knows this is a read-only status check. It does not explicitly differentiate itself from sibling `notebook_environment_install` or `notebook_packages`, which is the main gap for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as `notebook_environment_install` for triggering installs or `notebook_packages` for package listing. Usage is only faintly implied by the word 'Status'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_environment_installA
Create the notebook Python environment (ipykernel, pandas, matplotlib, singlestoredb) with uv.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a non-destructive mutation. The description usefully adds the package list and the installer (uv), but says nothing about idempotency, overwrite behavior on an existing environment, or expected duration for a dependency install.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the action first and the package set in parentheses. No filler, nothing that could be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description could reasonably explain the result of the install (success signal, whether packages are verifiable afterward). For a mutation tool with zero parameters, the description is adequate but leaves the post-install state and failure modes unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no schema to compensate for; the baseline for 0 params is 4. The description's package list is informational rather than parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb (Create) and resource (notebook Python environment) and enumerates the exact packages installed, so an agent knows what it produces. It does not explicitly distinguish itself from the nearby sibling notebook_packages_install, which is the main remaining ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: 'Create the environment' suggests running this when the notebook environment does not yet exist, versus notebook_packages_install for adding packages to an existing one. However, no alternative is named and no precondition (e.g., environment must not already exist) is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_filesBRead-only
The .ipynb notebooks in the SQL folder, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares this is a safe read, so the description only needs to add context. It contributes the result ordering ('newest first'), which is genuine behavioral information, but says nothing about which folder path is used, whether results are paginated or truncated, or how entries are represented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Every clause (file type, folder, ordering) carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument read tool with a readOnlyHint annotation this is close to sufficient, but with no output schema the description would ideally convey what a returned entry looks like or how to act on it. As written, an agent knows scope and ordering but not the shape of the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and schema coverage is 100%, so there is nothing for the description to compensate for. Baseline 4 applies for a parameterless call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (.ipynb notebooks), its location (the SQL folder), and its ordering (newest first), so an agent can tell roughly what it returns. It lacks an explicit action verb like 'list', and it does not distinguish itself from neighbors such as files_browse, sql_editor_files, or notebook_open that also surface notebook files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this over the many adjacent listing tools (files_browse, sql_editor_files, notebook_open). The 'SQL folder' scope is the only implicit usage cue, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_kernel_controlB
Interrupt, restart or shut down the notebook's kernel (action: interrupt | restart | shutdown).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| notebook_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false; they do not tell the agent that restart/shutdown discard all in-memory variables and kernel state. The description adds no such behavioral context, nor any note on permissions or what the caller observes afterward. With annotations providing minimal coverage, the description leaves a real gap for a state-altering operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb set, with the action enumeration in parentheses. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, the description covers the action domain adequately, and the annotations carry the (thin) safety profile. It still omits notebook_id semantics and the state-loss consequences of restart/shutdown, which an agent needs to choose this tool responsibly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the action parameter has no enum in the schema, so naming 'action: interrupt | restart | shutdown' in prose is genuinely additive. However, notebook_id is left entirely undefined, and there is no indication of what notebook_id should reference or the failure mode for an unknown id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a concrete verb set (Interrupt, restart, shut down) against a specific resource (the notebook's kernel), and even enumerates the accepted action values. It is clearly distinguishable from notebook_kernel_start and notebook_kernel_state by implication, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The action list conveys what operations exist but not when to use each one (e.g. interrupt vs restart when a cell is stuck, or shutdown when freeing memory). No alternatives, prerequisites, or when-not-to-use conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_kernel_startARead-only
Start the notebook's Python kernel ahead of the first cell (no code runs).
| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is partly covered. The description usefully clarifies '(no code runs)', which explains why a kernel-start operation is non-destructive, but says nothing about idempotency if a kernel is already running, latency, or whether the notebook must be open. Adds some context beyond annotations, not rich context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the scoping clarification sits in a tight parenthetical rather than bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description covers the essentials of what the tool does and its non-destructive nature. It omits prerequisites (must the notebook be open?) and behavior when a kernel already exists, which are relevant for a kernel lifecycle tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description never addresses notebook_id, so it adds no meaning beyond the schema. However, with a single, self-evidently named identifier parameter, the practical risk of misinterpretation is low, so an adequate-but-minimal 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Start the notebook's Python kernel') and adds the timing nuance 'ahead of the first cell'. It is distinguishable from notebook_run (which runs code) and notebook_kernel_state, though it does not explicitly name those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'ahead of the first cell' implies the use case: pre-warming the kernel before executing cells. It never explicitly states when to use this instead of notebook_run or notebook_kernel_control, leaving the routing to inference from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_kernel_stateBRead-only
The notebook kernel's state: stopped, starting, idle, busy, error or dead.
| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares this is a safe read, so the bar is lower. The description adds genuine value by listing the six possible states (stopped, starting, idle, busy, error, dead), which tells the agent what to expect back. It does not explain how states transition, whether the call blocks, or what happens for an unknown notebook_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the states front-loaded and zero filler. It is minimal without being wasteful, though the fragment omits any verb tying it to an action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description partially fills the return-value gap by enumerating the state values, which is the key thing an agent needs. However it omits any guidance on usage, error behavior, or how the state maps to next actions, leaving notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter (notebook_id) is left entirely unexplained in the description. The name is fairly self-evident, but the description does nothing to compensate for the missing schema documentation as the rubric requires at low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (the notebook kernel's state) and enumerates the exact possible values it can take, so an agent knows it is a state-read, not a start/stop/control action. It is a noun phrase rather than a verb, and it does not name the sibling tools it differs from (notebook_kernel_start, notebook_kernel_control), but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no alternatives named. An agent can infer it should be called to check kernel status before running a notebook, but the description never says so, nor does it mention polling or when to prefer notebook_poll.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_openBRead-only
Read one .ipynb notebook from the SQL folder.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safe-read profile, so the description only needs to add scope. It adds that the notebook comes from the 'SQL folder' and that exactly one is returned, but says nothing about what 'reading' yields (content vs. handle) or size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero filler. The verb and scope lead, and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the burden of explaining the return value, which it does not — an agent cannot tell whether it gets notebook JSON, raw text, or a handle. For a read tool whose result drives the next call, this is a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the single 'name' parameter is undocumented anywhere. The description hints it is a notebook name located in the SQL folder, but gives no format, extension expectation, or path semantics to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: read one .ipynb notebook from the SQL folder. This distinguishes it from notebook_run (execution) and notebook_files (listing), though it doesn't name those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no alternatives named. An agent must infer that this opens a single notebook by name, with no indication of prerequisites or when to prefer it over notebook_files or notebook.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_packagesBRead-only
Packages installed in the notebook Python environment (name, version, summary, core).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful context by naming the fields returned, which partially compensates for the absent output schema, but it says nothing about scope (which kernel/environment it reflects) or whether results are cached/live.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact, front-loaded fragment with no filler; the resource comes first and the returned fields follow. It is appropriately sized, though a fragment rather than a full sentence limits it slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param, read-only tool with no output schema, listing the return fields is the main thing an agent needs, and the description supplies it. Minor gaps remain around which environment/kernel is being reported and any pagination or size limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. There is no parameter meaning to clarify and the description correctly does not invent any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (packages installed in the notebook Python environment) and enumerates the returned fields (name, version, summary, core). The implicit 'list' verb and the word 'installed' distinguish it from the sibling notebook_packages_install, though the naming contrast is not stated explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no pointer to alternatives. With siblings like notebook_packages_install and notebook_environment present, the description should say when to call this versus those, and it does not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_packages_installB
Install packages (space-separated names with optional version pins) into the notebook environment.
| Name | Required | Description | Default |
|---|---|---|---|
| packages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the mutation profile is partly covered. The description adds input-format context (space-separated, optional pins) but says nothing about whether the environment must restart, whether installs take effect immediately, or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with zero filler and the resource, format, and target all conveyed compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter install tool with no output schema and annotations covering the safety profile, it is adequate but thin. It omits what success looks like, restart/refresh requirements, and behavior on failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 0% schema description coverage, the description carries the full burden and does so by explaining the syntax: space-separated names with optional version pins. That is meaningful guidance beyond the bare string type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear specific verb 'Install' plus resource 'packages' and target scope 'into the notebook environment'. However, it does not distinguish itself from the similarly-named sibling notebook_environment_install, which an agent could easily confuse with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no exclusions. The sibling set contains notebook_environment_install and notebook_packages, yet the description offers nothing about which to pick or under what conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_pollBRead-only
New output of a running (or finished) cell since output index after.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| run_id | Yes | ||
| cleared | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation, and the description adds incremental polling semantics by mentioning 'since output index after' and 'running (or finished) cell'. It does not describe return format, pagination, rate limits, or error behavior, so it is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for the tool's simple polling purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a polling tool with three parameters at 0% schema coverage and no output schema, the description does not explain run_id, cleared, return values, or polling behavior. It is too incomplete for an agent to invoke confidently without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain all three parameters. It only clarifies the 'after' index meaning; run_id and cleared are left undocumented in both schema and description, leaving significant gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states that the tool returns new output from a running or finished cell since a given output index, which is a specific resource and operation. It does not explicitly differentiate itself from siblings like notebook_run or notebook, but the polling intent is clear from the name and phrasing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided on when to use this tool, when not to use it, or which alternatives exist. A reader can infer it is for polling after a cell run, but the description leaves all usage context to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_runADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| source | Yes | ||
| database | No | ||
| cell_type | Yes | ||
| confirmed | No | ||
| notebook_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that SQL results become a DataFrame named 'df' (and 'name' if given), that data/schema-changing statements return 'needs_confirmation' unless 'confirmed', and that SAS runs in the SAS Viya session with libref S2 mapped to the notebook database. This is exactly the kind of mutation-confirmation and side-effect context the destructiveHint annotation alone cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and return pointer, then structures the rest by cell_type, so every line earns its place. Slightly dense but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-param mutation tool with no output schema, it covers return value (run id), the confirmation flow, and per-type behavior adequately. It stops short of describing failure behavior or setup prerequisites, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry the load, and it explains cell_type values thoroughly, plus name, confirmed, and the database mapping via libref S2. notebook_id and source are left implicit, so it compensates well but not completely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run one notebook cell in its kernel') and immediately distinguishes itself from sibling notebook_poll by noting it returns a run id to poll with it. An agent can differentiate it from notebook_open/notebook_save/notebook_ask without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Points clearly to the follow-up step ('poll with notebook_poll') and enumerates how each cell_type is handled, giving strong usage context. However, it does not state prerequisites (e.g., that a kernel must be started via notebook_kernel_start) or when to prefer this over siblings like notebook_ask, so guidance is strong but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_saveC
Save a notebook (nbformat 4 JSON) as a .ipynb file in the SQL folder.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| notebook | Yes | ||
| overwrite | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the write-but-not-destructive profile is already covered. The description adds the useful facts that the payload must be nbformat 4 JSON and that the file lands in the SQL folder, but it never explains what happens when a file with the same name already exists, despite an overwrite parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no padding; the verb and resource come first and the qualifiers follow. It is appropriately sized, though terse enough that it underspecifies rather than over-explains.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with a nested-object parameter, an undocumented overwrite flag, no param descriptions, and no output schema, the description is too thin. An agent lacks the information needed to call it safely when an existing file is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden, but it only indirectly clarifies the notebook parameter's format (nbformat 4 JSON). The name parameter and the overwrite flag, including its default of false, are left entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (save) and resource (notebook), and adds format (nbformat 4 JSON) and destination (.ipynb in the SQL folder), which lets an agent distinguish it from notebook_run or notebook_open. It does not, however, differentiate it from closely related siblings like notebook_files or sql_editor_save_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives such as notebook_files or notebook_open, nor any precondition guidance. Usage must be inferred entirely from the name and the mention of the SQL folder.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pipeline_errorsCRead-only
Most recent errors for one pipeline, for the Pipeline Monitor app.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| database | Yes | ||
| pipeline_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true annotation already establishes this is a safe read. The description adds ordering ('most recent') and scope ('one pipeline'), but says nothing about rate limits, what error fields are returned, or how the limit interacts with ordering — useful context that is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no filler. It is efficient, though the terseness contributes to the gaps in other dimensions rather than being purely a virtue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, 0% parameter documentation, and only a readOnly annotation, the description is too thin for a tool that requires two identifiers and exposes a limit. It omits return shape, identifier semantics, and limit behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and adds essentially nothing about the three parameters. It does not explain that pipeline_name and database are required, nor what limit controls (default 25), nor the relationship between the two required identifiers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource: retrieving the most recent errors for a single pipeline. An agent can tell this returns error data, but it never distinguishes itself from closely related siblings like pipeline_monitor_data or pipeline_status, leaving some ambiguity about which to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus pipeline_monitor, pipeline_monitor_data, pipeline_status, or test_pipeline. 'For the Pipeline Monitor app' is context about the domain, not a usage condition or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pipeline_monitorPipeline MonitorARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| database | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true, the safety profile is already covered, yet the description adds genuinely useful context: the view offers start/stop/test buttons and auto-refresh, and the result carries a browser_url. That pre-empts confusion about whether this tool itself mutates anything. It does not mention permissions or any limits, so it is not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the usage trigger, then result handling, then args — a sound ordering. Slightly padded and it mixes prose with a Python-style 'Args:' block, but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, no-output-schema tool, the description covers purpose, trigger, the shape of the return (browser_url) and the parameter's semantics. There is no material gap an agent would need filled before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden for the single optional parameter — and it does: 'Limit to one database. Omit to show pipelines in all databases.' Scope and default behavior are both fully specified, leaving nothing ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Open an interactive monitor of SingleStore pipelines') and immediately scopes it to the visual/interactive surface, not raw data. The phrase 'see or manage pipelines visually' implicitly separates it from text-based siblings such as list_pipelines and pipeline_status. An agent can route to it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('Use this when the user wants to see or manage pipelines visually') and even post-call guidance ('post it as a clickable link right under the app'). It never names the sibling it replaces for non-visual cases, so the when-not is left to inference rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pipeline_monitor_dataCRead-only
Refresh data for the Pipeline Monitor app.
| Name | Required | Description | Default |
|---|---|---|---|
| database | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says the tool 'refreshes data', which connotes a state-changing operation (reloading/regenerating data), while the annotations declare readOnlyHint=true. That is a direct conflict about whether the tool mutates anything. The description also adds no other behavioral context (auth needs, cost, side effects), so it fails the one job it had here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with no padding, which is structurally clean. However, the brevity is under-specification rather than economy: the one sentence conveys almost no actionable information, so it does not fully earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with an undocumented parameter, no output schema, and only a single readOnlyHint annotation, the description is far too thin. It leaves the agent unable to resolve the read/write ambiguity, the meaning of the 'database' argument, or when this is preferable to pipeline_monitor or pipeline_status.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional 'database' parameter has no schema description (0% coverage), and the description never mentions it at all. The agent cannot tell whether 'database' scopes which database's pipeline data is refreshed, whether omitting it means all databases, or what values are valid. The description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a verb (refresh) and an object (data for the Pipeline Monitor app), so the general intent is graspable. But it never says what 'refresh' concretely does or what data is involved, and it does nothing to distinguish itself from siblings like pipeline_monitor, pipeline_status, or pipeline_errors. Purpose is vague rather than tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus pipeline_monitor, pipeline_status, or any other sibling. No preconditions, no exclusions, no alternatives are named. The agent is left to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | ||
| pipeline_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the transparency burden. It signals a read-only lookup through 'Get the current state' and discloses the important edge behavior of returning an empty row list when the pipeline doesn't exist. It doesn't discuss permissions or rate limits, but for a status-read tool the key behavior is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence adds value: action, equivalence, missing-pipeline behavior, and the two parameters. The key semantics are front-loaded before the args detail, with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple two-parameter lookup with an output schema available, so return details need not be repeated. The description fully equips an agent to select and call the tool correctly, including the optional database context and empty-result behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no property descriptions (0% coverage), so the Args section must compensate. It explains pipeline_name as the lookup key and database as the owning database with a useful default tied to the connection's configured database, adding meaning beyond the bare names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific action and resource: 'Get the current state of one pipeline by name.' The SHOW PIPELINES equivalence and the 'single pipeline' phrasing clearly separate it from list_pipelines.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys this is for a targeted single-pipeline lookup and that a missing name yields an empty list rather than an error. It does not explicitly name list_pipelines as the alternative for retrieving all pipelines, so the when-not-to-use guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_advisor_reportQuery advisorBRead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries most of the burden, and it delivers: it discloses that every distinct query is EXPLAINed (compiled, not run), that weighting is by query runtime, and that it has a UI side effect of opening the Query History app on its Advisor tab. It does not mention cost/latency or caching behavior for the expensive compile pass.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the deliverable, then the mechanism, then the browser_url usage note. Three tight sentences with no filler; the output-formatting instruction is slightly operational but genuinely useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by naming the key return value (browser_url) and its intended use, plus the analysis method. The only real gap is the undocumented refresh parameter and any note that the first run is costly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'refresh' has 0% schema description coverage and is never mentioned in the description. Whether it forces recomputation versus returning a cached advisor report is left entirely to inference, which matters given the described expense of EXPLAINing all history.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (recommend table design changes from query history) and enumerates the concrete outputs: SORT KEY, SHARD KEY, reference-table candidates, indexes, missing statistics, workload issues. An agent can tell what it produces, though it never explicitly distinguishes itself from the sibling query_history_advisor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It describes scope ('the whole query history') but gives no when-to-use guidance, no prerequisites, and no direction on choosing it over the many sibling advisor/tuning tools (query_history_advisor, query_history_tuning, query_history_trends). The only routing hint is that it opens the Advisor tab.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_gridQuery Results GridARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| database | No | ||
| max_rows | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the readOnlyHint annotation: the exact accepted statement types (SELECT/WITH/SHOW/DESCRIBE/DESC/EXPLAIN), the single-statement and no SELECT...INTO constraints, the fact that the agent receives only a 20-row summary while the user sees all rows, and the browser_url return value. These are consequential traits an agent could not derive from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then usage, then constraints, then args in a clean block; nearly every sentence earns its place. It runs slightly long, and the grid-editing aside ('user can also edit and re-run the query') is ancillary to the agent's task.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains the return shape (summary, first 20 rows, browser_url, truncation flag), which is strong. The one meaningful gap is not explaining how the agent obtains the full result set (e.g., via query_grid_rows), which matters given the deliberate 20-row cap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden, and it does: sql is documented as a single read-only statement, database as defaulting to the connection's configured database, and max_rows with its valid range (1-10000), default (1000), and truncation-flag behavior. All three parameters gain meaning beyond the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Run a read-only SQL query and show the results in an interactive grid') and differentiates itself from the read-text sibling run_sql. An agent can identify the tool's role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use conditions (browse/sort/filter/export results, or results too large to read as text) and a when-not with a named alternative (writes, DDL, or when you just need a value -> run_sql). It does not mention the closely-related query_grid_rows sibling, which is presumably the way to fetch beyond the summarized rows, leaving that routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_grid_rowsBRead-only
Full rows of an earlier query_grid result, for the Query Results Grid app.
| Name | Required | Description | Default |
|---|---|---|---|
| result_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a safe read, and the description adds that it returns full rows rather than a preview, plus its association with the Query Results Grid app. It omits behaviors an agent would want before calling: result expiration, row limits, pagination, or error behavior for an invalid result_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the core information front-loaded and no filler. The trailing clause about the Query Results Grid app is the one piece of mild padding, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the agent still lacks the return shape beyond 'full rows', any size or pagination expectations, and failure modes for missing or expired results. Coverage is adequate but leaves visible gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden for result_id. Saying the rows come from 'an earlier query_grid result' does tell the agent where to obtain the id, but it gives no format, validity window, or reuse semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (full rows) and its provenance (an earlier query_grid result), which implicitly separates it from the sibling query_grid tool that produces the result. It is a noun phrase rather than an explicit verb, but an agent can still tell what the call returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Referring to 'an earlier query_grid result' implies the prerequisite that a query_grid call must run first and supply result_id, which is useful context. However, it never states when to prefer this over query_grid itself or what happens if the result is stale, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_historyQuery HistoryARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tab | No | queries | |
| hours | No | ||
| min_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, but the description adds substantial context beyond that: the underlying data source (event tracing, information_schema.MV_TRACE_EVENTS), the ring-buffer/local-copy caveat for the trends tab, and an explicit instruction to render browser_url as a clickable link. It does not cover permissions or failure behavior, so it is not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then usage, then a clearly labeled Args block, then the return-value note. Every section earns its place, though the prose is on the longer side and the tab explanation is dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly fills the gap by describing the browser_url return value and how to present it, and all three parameters are documented. For a read-only view-opening tool this is close to complete, with only error/permission behavior unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the entire burden and does so: min_seconds minimum of 1, hours meaning 'last N hours' with default 'everything in the history', and full semantics for all three tab values including what the trends and advisor tabs compute. This fully compensates for the undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Open the Query History') and precisely enumerates the content returned (runtime, user, database, result) with a min-runtime filter. It distinguishes itself from cluster_monitor but does not explicitly differentiate from the closely named siblings query_history_trends, query_history_advisor, query_history_data, and query_history_event, which the tab parameter arguably overlaps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use ('when the user asks about slow / long-running queries or jobs over time') and an explicit contrast with the alternative ('the Cluster Monitor shows only what's running now'). The when/when-not routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_advisorBRead-only
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).
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safety profile, so the bar is lower. The description usefully adds that it EXPLAINs every distinct query 'without running it', clarifying it does not execute the workload. It does not, however, disclose the cost/time implications of EXPLAINing an entire history or any caching behavior, which matters for this kind of workload-wide analysis.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the purpose front-loaded and the enumerated outputs kept compact. The parenthetical '(without running it)' is load-bearing, not filler. Nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description adequately conveys the category of returned advice but says nothing about the refresh parameter, result format, or whether the analysis is expensive/long-running. Adequate for the core purpose, incomplete around parameters and operational cost.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter (refresh, default false) is not addressed anywhere in the description. The description therefore leaves the agent to infer the meaning and effect of refresh entirely from its name, failing to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific output (table-design advice) and enumerates the covered artifact types — sort keys, shard keys, reference tables, indexes, statistics, workload findings — plus the source scope (whole query history). An agent can tell what it produces, though it does not name or distinguish itself from likely-overlapping siblings like query_history_tuning or query_advisor_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never states when to choose this tool over the many adjacent siblings (query_history_tuning, query_advisor_report, query_history_assistant). There are no conditions, prerequisite statements, or exclusions — only an implicit sense that it is an advisory/analysis tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_answerCRead-only
Claude's in-app answer for one query (or its progress while it works).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this is a safe read. The description adds genuine value by noting the call may return 'progress while it works', alerting the agent to a partial/in-flight result. However, it says nothing about how the key is obtained or how often to poll.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with the key idea (in-app answer plus progress state) front-loaded and no filler. Slightly cryptic, but every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no meaningful annotations beyond readOnly, so the description should explain the return shape (answer vs. progress indicator), how to obtain the key, and polling expectations. It covers only the high-level purpose, leaving a documented async tool under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single required 'key' parameter, so the description carries the full burden. It implies the key identifies a query, but gives no format, source, or uniqueness semantics, leaving the agent unable to know what value to pass.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (Claude's in-app answer for one query) and hints at an async/progress state, but the verb is only implied and the resource description ('one query') is vague. It does not distinguish this tool from siblings like query_history_ask or query_history_assistant, which an agent must disambiguate on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the sibling that presumably initiates or cancels this workflow (query_history_ask / query_history_ask_cancel). The agent gets no routing signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_askBRead-only
Ask Claude, in the app, how to tune one query from the history; poll query_history_answer for the reply.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| profile | No | ||
| question | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is non-mutating, so the safety profile is covered. The description adds valuable non-obvious behavior beyond annotations: the operation is asynchronous and its result must be retrieved from a separate tool. It still omits whether the question is required, expected latency, or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the action front-loaded and the follow-up step appended. No wasted words, though it is arguably too terse for a 3-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The async ask-then-poll pattern is the key non-obvious element and it is covered, with no output schema to explain. Still, with 0% schema coverage and a required 'key' parameter completely undocumented, the definition is not fully sufficient to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters. The description only loosely gestures at 'one query from the history' (the key) and says nothing about the profile or question parameters, so it fails to compensate for the undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: ask Claude, in the app, how to tune one query from the history. It is distinguishable from siblings like query_history_answer (the reply side) and query_advisor_report, though it does not explicitly name the sibling it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the async workflow by directing the agent to poll query_history_answer for the reply, which is genuinely useful routing. However, it never says when to prefer this over query_history_assistant, query_history_advisor, or sql_editor_ask.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_ask_cancelCRead-only
Stop Claude's in-app answer for one query.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint=true, which is arguably in tension with a 'stop/cancel' verb (though cancelling a stream need not mutate stored data). The description says nothing about what happens to the pending answer, whether it is discarded or partially returned, or whether the cancel is idempotent, so the behavioral burden is largely unmet.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler; the action and scope lead the sentence. It is efficient, though the brevity comes at the cost of the missing detail noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a cancellation tool with an undocumented required key, no output schema, and only a readOnlyHint annotation, the description leaves the agent guessing about target identity and post-cancel behavior. It is not sufficient on its own.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single required parameter 'key' has 0% schema description coverage and the description never explains it — the agent cannot tell whether it is a query ID, an answer ID, or a session key. With low coverage the description was expected to compensate and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (stop) and a specific object (Claude's in-app answer for one query), which is more precise than a bare name restatement. It does not differentiate itself from the near-identical sibling sql_editor_ask_cancel, nor from query_history_ask/query_history_answer, so an agent must infer the pairing from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance at all: it does not say to call this only while an answer is still generating, nor that it is the query-history counterpart of sql_editor_ask_cancel. The agent gets no condition that selects this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_assistantCRead-only
Whether Claude can answer in the app (Claude Code installed).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true annotation already establishes this is a safe read. The description adds almost nothing beyond that — it doesn't state what the tool inspects, what happens when Claude Code is not installed, or what the caller should do with the result. No contradictions with annotations, but very little added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short, but this is under-specification rather than conciseness — a single cryptic fragment that fails to convey the operation. Brevity here costs clarity rather than earning it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description must carry the full burden of explaining what the tool returns (presumably a capability/availability flag) and when to invoke it. It does neither, leaving the agent unable to predict the return value or usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics for the description to explain; the baseline for a 0-param tool applies. Nothing is missing on this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Whether Claude can answer in the app (Claude Code installed)' is a sentence fragment that never names a verb or resource — it is unclear whether the tool checks capability, enables an assistant, or reports installation state. It does not distinguish itself from the many sibling assistant tools such as query_history_assistant_warm or sql_editor_assistant. An agent cannot confidently tell what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this tool, when not to, or which sibling to prefer. With many near-named alternatives (query_history_assistant_warm, query_history_ask, query_history_answer), the absence of routing guidance is a serious gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_assistant_warmARead-only
Start the screen's Claude process ahead of the first question (no model call).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful behavioral context with '(no model call)', telling the agent this preloads a process without incurring inference, but it says nothing about latency, cost, or what the warm-up actually achieves. Modest value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the core action first and the key caveat (no model call) parenthesized. Zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only warm-up call with no output schema, the description is close to sufficient: it says what it does and that no model call happens. It could say a bit more about expected effect or whether it is safe to call repeatedly, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 per the rubric; there is nothing to document in the schema and the description correctly implies no input is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (start/preload the screen's Claude process) and clarifies it performs no model call, which distinguishes it from the actual assistant siblings like query_history_assistant and query_history_ask. It does not explicitly differentiate itself from the other _warm variants (sql_editor_assistant_warm, notebook_assistant_warm), but the resource and action are clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'ahead of the first question' implies when to invoke it (before asking), giving usable context, but it does not state that the tool is optional, when NOT to use it, or how it relates to the other _warm tools. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_compare_cancelCRead-only
Stop a running comparison (the statement running now is cancelled too).
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the tool stops/cancels running work, which is an action with side effects, yet the annotations declare readOnlyHint=true. That is a direct inconsistency: the agent is told this is a side-effect-free read while the text describes terminating live statements. The extra detail about the in-flight statement being cancelled is useful, but it is precisely what contradicts the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the action verb front-loaded and the side effect appended in parentheses. Nothing is wasted and it is easily scanned. It is not padded, though it is arguably too terse to be fully useful rather than 'concise'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-changing cancel operation with no output schema and no meaningful annotation support, the definition leaves key questions unanswered: what happens to partial comparison results, what the tool returns on success or on an already-terminated job, and whether job_id must reference a live job. The one behavioral detail given (the running statement is also cancelled) is helpful but insufficient for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is exactly one parameter, job_id, and schema description coverage is 0% — the schema gives only a type and title. The description makes no attempt to explain what job_id is, where to obtain it (e.g., from query_history_compare_start or query_history_compare_status), or what format it takes. With one undocumented parameter, the description fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb (stop) with a specific resource (a running comparison), and the parenthetical clarifies exactly what gets stopped: the statement running now. An agent can distinguish it from query_history_compare_start and query_history_compare_status without opening a schema. It stops short of naming siblings explicitly, so it is clear but not maximally differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys the implied scenario (a comparison is running and you want to halt it) but offers no explicit 'when to use this vs. alternatives' guidance. It never says whether the job_id comes from query_history_compare_start, whether query_history_compare_status should be checked first, or what happens if the job already finished. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_compare_candidatesBRead-only
The heaviest read-only queries in the history that read table (database.table), with the table name
replaced by new_table (nothing is run).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| table | Yes | ||
| new_table | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint is already declared and the description reinforces it with 'nothing is run,' which is a useful confirmation that the substitution is a dry run. Beyond that it doesn't disclose result ordering semantics or what 'heaviest' is measured by (duration, cost, rows).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with no filler. The core action leads, and the clarifying parentheticals follow, though parsing the nested quotes and backticks takes some effort.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should indicate what comes back. It implies the returned queries have their table name rewritten, but it never says the result is a list of candidate queries bounded by 'limit,' leaving the return shape to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It partially does: it documents that 'table' uses a database.table format and that 'new_table' replaces the table name in the matched queries. The 'limit' parameter (default 8) is never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (find the heaviest read-only queries in history) and resource (queries reading a given table), and clarifies the table-name substitution. It reads as a candidate-selection step ahead of query_history_compare_start, but it doesn't explicitly name or distinguish itself from that sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. With siblings like query_history_compare_start, query_history_compare_status and query_history_compare_cancel in the same family, the agent must infer that this tool feeds the comparison workflow rather than starting it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_compare_startBRead-only
Run the selected candidate queries against the original and the new table (wrapped in COUNT(*)),
alternating, runs times each. Poll query_history_compare_status.
| Name | Required | Description | Default |
|---|---|---|---|
| runs | No | ||
| table | Yes | ||
| shapes | Yes | ||
| new_table | Yes | ||
| timeout_s | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations supply readOnlyHint=true and openWorldHint=false, and running COUNT(*) queries is consistent with that read-only profile. The description adds useful behavior the annotations don't cover: the alternating execution and the ``runs`` repetition count, and the polling requirement implies an asynchronous job. It stops short of disclosing whether the runs happen server-side, expected runtime, or timeout behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler, front-loading the core action before the follow-up poll instruction. The backtick around runs adds a small readability hiccup but otherwise the structure is efficient and well-ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter async comparison tool with no output schema and only minimal annotations, the description covers the start-and-poll lifecycle adequately but leaves the required `shapes` parameter and timeout semantics unexplained. An agent can launch the job but must guess at the meaning of a required argument.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, so the description carries the full burden and only partially delivers. It references ``runs`` explicitly and implicitly maps 'original and the new table' to table/new_table, but says nothing about the required `shapes` parameter or `timeout_s`, leaving two parameters completely undocumented in both schema and prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Run) and resource (the selected candidate queries against the original and new table), plus the mechanical detail that queries are wrapped in COUNT(*). It distinguishes itself from siblings like query_history_compare_candidates and query_history_compare_status by naming the run-then-poll workflow. Lacks an explicit statement of the end goal (performance/correctness comparison), which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Poll query_history_compare_status' names the required follow-up tool, giving implied workflow guidance. However there is no explicit statement of when to use this versus the other compare_* siblings, nor any precondition (e.g. that candidates must be selected first). Usage is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_compare_statusCRead-only
Progress and results of a before/after comparison.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this as a safe read, and the description adds only the bare hint that a result may be partial via the word 'progress'. It says nothing about terminal states, whether polling is expected, or what happens for an unknown job_id, so it adds little beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence fragment with no filler — appropriately sized. It is front-loaded but under-specified rather than concise in the informative sense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should explain what 'progress' and 'results' look like and when the job is done, but it does not. Combined with zero parameter documentation, it is not sufficient for an agent to call this correctly in a polling loop.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter job_id has 0% schema description coverage and the description says nothing about it — not where the id comes from (presumably query_history_compare_start) nor its format. The description does not compensate for the documentation gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase names the resource (a before/after comparison) and what is returned (progress and results), so the purpose is inferable. But there is no verb, and it never says this is a status poll for a job started by a sibling such as query_history_compare_start, so it does not distinguish itself from query_history_compare_candidates or query_history_compare_cancel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no mention of alternatives, and no statement that this is the polling step following query_history_compare_start. The agent must infer the entire workflow from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_dataCRead-only
Refresh the Query History list.
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | ||
| limit | No | ||
| min_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safe-read profile is known, but the description adds nothing beyond that: it does not explain what 'refresh' does (re-query, cache reload?), what range is affected, or what the list contains. For a data-fetching tool the description contributes almost no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is terse rather than padded, but the terseness comes at the cost of under-specification for a 3-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three undocumented parameters, no output schema, and no guidance distinguishing it from numerous query_history siblings, the description is not complete enough for an agent to call the tool correctly beyond guessing defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the three parameters (hours, limit, min_ms) are completely undocumented. The description mentions no parameters at all, so it fails to compensate for the coverage gap; an agent cannot know what hours/limit/min_ms control.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb ('Refresh') and resource ('Query History list'), so the basic action is discernible. However, it does not differentiate from the many sibling tools such as query_history, query_history_event, or query_history_trends, leaving the agent unsure how this 'list refresh' differs from those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the many query_history_* siblings, and no exclusions or prerequisites. The usage context is only vaguely implied by the word 'refresh'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_eventBRead-only
One query from the history with its full SQL and details.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description is consistent with a safe read. It adds that the response includes full SQL and details, which is useful, but says nothing about permissions, error behavior when the key is unknown, or payload size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no filler and the core payload front-loaded. It is efficient, though arguably too terse given the gaps elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so the description should clarify the return; it partially does ('full SQL and details'). However, the one required parameter is unexplained, leaving the definition inadequate for correct invocation in some cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage on the single required 'key' parameter, the description carries the burden and fails to explain what a key is (query ID, hash, index, composite?). 'One query from the history' only hints at it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (one query from the history) and the payload (full SQL and details), which is enough to distinguish it from list-oriented siblings like query_history or query_history_data. It lacks an explicit verb, but retrieval of a single item is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus query_history, query_history_data, query_history_advisor, or the many other query_history_* siblings. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_trend_runsBRead-only
The queries behind one Trends bar (a day "YYYY-MM-DD" or an hour "YYYY-MM-DD HH"), slowest first.
| Name | Required | Description | Default |
|---|---|---|---|
| bucket | Yes | ||
| failed_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this is a safe read. The description adds the return ordering ('slowest first') and the bucket granularity, which is useful behavior beyond the annotation, but it says nothing about result size, limits, or how failed_only filters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that identifies the resource, the bucket union type, and the sort order with no waste. Slightly terse but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description needn't explain returns since it already states ordering. It covers the critical bucket format, yet the failed_only parameter goes unexplained and there is no note on result volume for a potentially large drill-down query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does document the required bucket format (day 'YYYY-MM-DD' or hour 'YYYY-MM-DD HH'), which is genuinely valuable, but failed_only is left entirely undecoded in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific resource (the queries behind one Trends bar) and scope, distinguishing it from the sibling query_history_trends which produces the bar itself. An agent can tell this is the drill-down tool, though it uses a noun phrase rather than an explicit verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'behind one Trends bar' – the agent infers it is called after viewing a trend, for a specific bucket. There is no explicit when-to-use, no exclusions, and no reference to how failed_only changes the selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_trendsBRead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safe-read profile is covered. The description adds useful context by noting the data comes from a local copy of history and includes a week-over-week slowdown comparison, but it omits return format, pagination, auth details, and how the local copy may differ from live data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that lists the returned metrics efficiently. It is appropriately sized and contains no filler, though it could be slightly clearer with punctuation around the final comparison clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional parameter and no output schema, the description conveys what data is returned and the comparison baseline. However, it leaves parameter semantics unaddressed and gives no routing guidance among the many sibling query_history tools, so it is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter (days) with 0% schema description coverage, and the description never mentions it or its default of 30. Unlike a zero-parameter tool, this single parameter meaning is left entirely unstated, so the description does not compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific analytical output: daily/hourly query counts, runtime, failures, p95, plus slower query shapes versus the prior week. It clearly identifies the resource (query history trends) but does not name or distinguish itself from sibling tools like query_history, query_history_data, or query_history_tuning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is given, despite many sibling query_history_* tools. The output description implies trend analysis, but the agent receives no criteria for choosing this tool over query_history_compare_candidates, query_history_advisor, or query_history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_history_tuningBRead-only
Tuning recommendations for one query from the history (EXPLAIN, plan cache statistics, table design).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read. The description adds useful context by naming the analysis content returned (EXPLAIN, plan cache statistics, table design), but says nothing about permissions, cost, or how the key is obtained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with the core purpose stated first and details in parentheses. No wasted text, though it could carry slightly more load given the gaps elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully hints at the return content, and the readOnly annotation covers safety. However, for a tool whose only input is an undocumented key, it leaves the agent without enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'key' parameter. The phrase 'one query from the history' only loosely implies that key identifies a query; it provides no format, source, or example, so the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Tuning recommendations for one query from the history'. The parenthetical names the concrete artifacts returned (EXPLAIN, plan cache statistics, table design). It does not explicitly distinguish itself from siblings like query_history_advisor or query_advisor_report, so it's clear but not differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives, despite several closely related siblings (query_history_advisor, query_advisor_report, query_history_ask). Only the implicit 'one query from the history' scope hints at usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_serverAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: running apps survive, browser links created before the restart break, and reconnection is not required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the purpose front-loaded and no filler. The second sentence ('after a reload of the app') is slightly awkward and mixes 'reload' with 'restart', which mildly clouds the state consequence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The description covers the key operational side effects (session survival, link invalidation, no reconnect), though it does not say whether in-flight queries or active connections are interrupted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a param-free tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Restart the SingleStore MCP server') plus the reason ('so code and app changes load'). No sibling tool performs a restart, so the agent can identify it immediately from the name-and-description pair.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear trigger condition — restart is for loading code/app changes. It does not state when NOT to restart or name any alternative, so it falls short of explicit routing, but the 'why' is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| database | No | ||
| max_rows | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral transparency burden. It clearly indicates the tool executes arbitrary SQL, includes DML/DDL, returns results, and clarifies that max_rows only truncates returned rows without limiting statement processing. It stops short of explicitly warning that arbitrary DDL/DML may be destructive or require elevated permissions, though this is strongly implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: purpose first, routing guidance second, then a clear Args list. Every sentence earns its place, and there is no redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for an arbitrary-SQL tool of this complexity. It covers scope, exclusions, parameter behavior, and output-truncation semantics. An output schema exists to define return values, and sibling-tool differentiation is handled explicitly, so an agent has enough to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must fully explain the parameters. It does: sql is 'the statement to execute,' database defaults to the connection's configured database, and max_rows 'truncate[s] returned rows' without affecting how many rows the statement processes. This adds meaningful semantics beyond the sparse schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Run one arbitrary SQL statement against SingleStore and return the results.' It also distinguishes itself from pipeline-specific tools by explicitly listing what types of SQL it is for versus what should go to sibling pipeline tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use this for SELECT/DML/DDL that isn't pipeline-specific.' It also names the excluded category and gives a reason to prefer alternatives: pipeline tools 'validate the statement type and are easier to call correctly.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sas_viya_saveC
Save the SAS Viya address, compute context, certificate check and SingleStore libref.
| Name | Required | Description | Default |
|---|---|---|---|
| settings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the write-but-not-destructive profile is covered. Beyond restating the fields being written, the description says nothing about where settings persist, whether it overwrites prior values, what happens on failure, or any auth requirement for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the verb first and the affected fields after; no filler. It is efficient, though the enumerated list reads slightly like a field dump rather than oriented guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, an opaque nested settings object at 0% coverage, and no annotation beyond the safety hints, the description leaves too much unresolved: persistence scope, overwrite behavior, success/failure outcomes, and its relation to sas_viya_state are all unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 0%, but the schema is a bare nested object with additionalProperties=true and no documented fields. The description does compensate somewhat by naming the semantic contents of settings (address, compute context, certificate check, libref), though it omits structure and expected value formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Save') and enumerates the exact settings persisted (address, compute context, certificate check, SingleStore libref), so its purpose is clear. It does not differentiate itself from the adjacent sas_viya_state / sas_viya_sign_in siblings, which is the only gap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus sas_viya_state, sas_viya_test, or the sign-in/sign-out siblings, and no prerequisites or exclusions. Usage is only implied from the 'save' verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sas_viya_sign_inA
Without code: open SAS Logon in the browser. With code: finish signing in with the code SAS Logon shows.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool is not read-only and not destructive. The description adds important behavioral context: it opens a browser and defines a two-step flow. It still omits auth details, token handling, and error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the two cases, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the core two-step flow for a simple sign-in tool with no output schema. Missing sibling context and any mention of prerequisites or failure modes, but complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has no parameter description (0% coverage), so the description must compensate. It explains that `code` is the value shown by SAS Logon and that its absence triggers a browser-open flow, adding meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (sign in to SAS Viya) and clearly distinguishes two modes based on the presence of `code`. Does not differentiate from siblings like `sas_viya_sign_out` or `connection_sso_sign_in`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when to call without `code` (open browser) and with `code` (finish sign-in), giving clear context for each mode. Does not mention alternative tools or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sas_viya_sign_outC
Forget the SAS Viya sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the safety profile is partly covered, but the description adds nothing beyond that: it does not say whether credentials or tokens are actually discarded, whether other sessions are affected, or what side effects follow. For a state-changing session tool this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, front-loading the action. It is efficient, though borderline under-specified rather than truly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool the description is minimally viable, but it omits anything about post-conditions or interactions with the sibling SAS Viya session tools. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema imposes no semantic burden and the baseline is 4. There is nothing for the description to clarify on the parameter side.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description conveys that the tool ends a SAS Viya session, and the name plus the phrase 'sign-in' make the resource recognizable. However, 'Forget' is a metaphorical verb that leaves ambiguous whether it clears cached credentials, revokes a token, or merely drops session state. It does not explicitly distinguish itself from sas_viya_sign_in or sas_viya_state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to invoke this versus sas_viya_sign_in, sas_viya_save, or sas_viya_state, nor any statement of prerequisites (e.g. must already be signed in). The agent must infer the trigger condition from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sas_viya_stateBRead-only
SAS Viya settings and sign-in status (for SAS cells in notebooks).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description's burden is low. It adds the useful fact that sign-in status is among the returned information, but says nothing about whether a prior sign-in is required or what happens when unauthenticated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler, front-loaded on the resource. It is efficient, though its brevity borders on under-specification rather than purposeful conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description carries most of the explanatory load, and it omits any indication of the return shape (what settings, what status values) or dependency on a prior sign-in. It is adequate to identify the tool but leaves real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to clarify beyond what the empty schema already conveys. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (SAS Viya) and the specific information returned (settings and sign-in status), and the parenthetical scopes it to SAS cells in notebooks. It lacks an explicit verb and does little to distinguish itself from siblings such as sas_viya_test or sas_viya_sign_in, but the purpose is nonetheless clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus sas_viya_sign_in, sas_viya_sign_out, or sas_viya_test. The parenthetical hints at the applicable context (SAS cells in notebooks) but gives no explicit trigger or prerequisite for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sas_viya_testARead-only
Check the SAS Viya sign-in and compute context (lists the compute contexts; starts no SAS session).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already covering the safety profile, the description earns credit for adding real behavioral context: it lists compute contexts and, importantly, that it starts no SAS session. That non-obvious side-effect disclosure is exactly what annotations cannot convey. It stops short of 5 by not stating auth prerequisites or what happens when not signed in.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tightly written sentence with the scope front-loaded and a parenthetical that adds the key constraint. Every clause earns its place with zero padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only test tool with no output schema, the description covers purpose, the non-obvious no-session behavior, and the return shape ('lists the compute contexts'). It is essentially complete; only auth/prerequisite context could be added.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to clarify and the baseline is 4. No parameter syntax or format needs documenting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check) and resource (SAS Viya sign-in and compute context), then narrows it with 'lists the compute contexts; starts no SAS session.' That makes the tool's actual output concrete rather than tautological. It does not name any sibling (e.g. sas_viya_state or sas_viya_sign_in) to differentiate itself, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'starts no SAS session' implies this is a lightweight diagnostic check rather than the session-starting sign_in tool, giving implied usage. However, it names no alternative and gives no explicit when-to-use / when-not-to-use condition against the four sibling sas_viya_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schema_explorerSchema ExplorerARead-only
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`.
| Name | Required | Description | Default |
|---|---|---|---|
| table | No | ||
| database | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds real behavioral context beyond that: it is interactive, the user can browse freely and ask follow-up questions, and it returns a browser_url meant to be posted as a clickable link. It does not mention pagination or size limits on the preview, but the UI-opening behavior is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then capabilities, then usage routing, then return-value handling, then args. Information-dense with minimal filler; the Args block is slightly repetitive of the prose but still earns its place as structured detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description explains the key return artifact (browser_url) and how to present it. Combined with the full capability and parameter coverage, an agent has everything needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the load and does so: it explains that database pre-selects a database (case-sensitive) and that omitting it starts at the database list, and that table pre-selects within database and requires database. The cross-parameter dependency and case-sensitivity are both stated, though the failure behavior when table is given without database is left implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Open an interactive Schema Explorer for the SingleStore cluster') and then enumerates exactly what it displays (databases, tables/views, storage type, row counts, shard/sort keys, DDL, preview). It distinguishes itself from the list-oriented siblings by framing itself as a visual browsing tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use ('when the user wants to explore, browse or understand the schema visually') and a when-not-to-use with named alternatives ('For a plain list of tables or columns inside your own reasoning, list_tables / describe_table are cheaper'). The routing decision is fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schema_explorer_cleanup_dropADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| views | No | ||
| tables | Yes | ||
| dry_run | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag it as destructive, and the description adds substantive behavior beyond them: server-side re-checks, refusal of system databases, dependent-view skipping unless the view is passed in 'views', and dry_run returning statements only. This is exactly the kind of safety disclosure an agent needs before a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the drop action and constraint behavior, then an Args block. Every sentence contributes; only minor redundancy in restating the panel context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, 3-param tool with no output schema, the description covers action, guardrails, params, and dry-run behavior. The return format of the non-dry-run path is not described, but that is a minor gap given the annotations carry the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the param burden and does so well: 'tables' and 'views' get an example shape ({"database": "SASDP", "name": "_dmallchars"}) and 'dry_run' is explained. It omits that dry_run defaults to true, which the schema supplies, keeping it just short of 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Drop the selected work tables ... for the Clean-up panel') with an implementation detail (one DROP TABLE IF EXISTS per table). An agent can tell what it does, though it does not explicitly differentiate itself from siblings like cleanup_work_tables or schema_explorer_cleanup_scan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Clean-up panel' framing and the dry_run mode imply when it is used, and the view-handling rule implies prerequisites, but there is no explicit when-to-use/when-not or named alternative. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schema_explorer_cleanup_scanARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| save | No | ||
| patterns | No | ||
| recent_days | No | ||
| older_than_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, and the description adds genuinely new behavior: tables used/created recently are 'flagged as risky,' and save persists settings to ~/.singlestore-mcp/cleanup.json. It still does not describe the return shape (e.g., list of table names vs. a report), but for an annotated read-only tool this is useful added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-sentence purpose followed by a compact per-parameter list; each line carries parameter meaning rather than filler. The 'Args:' docstring style is slightly awkward but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should say what the scan returns, and it only hints at 'risky' flags without describing the result structure or how the two age filters combine. Everything needed to invoke it correctly is present, but the read side is under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it largely succeeds: it documents the pattern object shape ('{"pattern": "_dm*", "kind": "SAS DM"}'), shell-style case-insensitive matching, the omit-for-saved default, and the persistence path for save. The rough edge is that 'kind' is never explained and the interaction between older_than_days and recent_days is only loosely described.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Find leftover work tables by name pattern (and age), for the Schema Explorer's Clean-up panel.' An agent can tell this is the discovery/scan step of the clean-up flow. It does not explicitly disambiguate itself from sibling tools like schema_explorer_cleanup_drop or cleanup_work_tables, but the verb 'Find' implies non-destructive scanning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: it belongs to the Clean-up panel and 'Omit for the saved ones' tells the agent when to leave patterns out. There is no explicit when-not or comparison to alternative siblings (e.g., schema_explorer_cleanup_settings, cleanup_work_tables, schema_explorer_cleanup_drop).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schema_explorer_cleanup_settingsCRead-only
Read (or change the dry-run default of) the Clean-up settings, plus recent log entries.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, yet the description explicitly advertises a state change ('or change the dry-run default of'). This directly contradicts the read-only annotation, so the agent cannot trust either signal about whether calling the tool mutates configuration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the primary read behavior and the parenthetical qualification kept short. Nothing is padded, though the compressed phrasing contributes to the read/write ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It states the read scope and mentions log entries as part of the return, which is reasonable given there is no output schema. It is incomplete on the mutation side: no prerequisites, no indication of what changing the dry-run default affects, and no guidance on required permissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single dry_run parameter, so the schema supplies only a title and default. The description partially compensates by framing dry_run as a 'default' to be changed rather than a per-call flag, but it never explains what true/false/null values mean or how they interact with the settings read.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Read ... the Clean-up settings') and even brackets the write variant, which is enough to separate it from siblings like schema_explorer_cleanup_scan and schema_explorer_cleanup_drop. It is slightly muddled by the parenthetical, but an agent can tell what the tool targets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given, and none of the cleanup siblings (scan, drop, cleanup_work_tables) are referenced as alternatives. The agent is left to infer from the name alone when this settings tool is appropriate versus the scan/drop tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schema_explorer_databasesARead-only
List databases with table/view counts, for the Schema Explorer app.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares this is a safe read, so the description's main added value is the mention of table/view counts, which hints at the returned shape in the absence of an output schema. It says nothing about ordering, pagination, or scope limits (all databases vs. a connection), which for a listing tool would be worth one more clause.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the most useful information (what is listed and what comes with it) appears immediately. Nothing could be trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is the only signal about return values, and it does name the returned counts, which is the right instinct. It stops short of describing the full result shape or how this feeds into the sibling tables/table/preview tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate beyond what the empty schema already conveys. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('List databases') plus added value ('with table/view counts') and an app scope ('for the Schema Explorer app'). It does not, however, distinguish itself from the sibling list_databases or explain its relationship to schema_explorer_tables, so an agent still has to infer which lister to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for the Schema Explorer app' implies this is the entry point to the schema_explorer_* family, which is weak but real usage context. There is no explicit when-to-use / when-not-to-use statement and no mention of the alternative list_databases tool, so routing between the two remains ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schema_explorer_previewBRead-only
First rows of a table or view, for the Schema Explorer app.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| table | Yes | ||
| database | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description's burden is lighter. It adds the useful fact that output is a limited 'first rows' sample, but says nothing about how the limit is enforced, whether it can be slow on large tables, or what the returned rows look like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the essential operation comes first with no preamble or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A three-parameter tool with 0% schema coverage and no output schema needs the description to explain database/table/limit semantics and the shape of returned rows. The description is silent on all three parameters, leaving an agent to guess at argument meaning and result format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden and it largely fails. 'table or view' loosely hints at the table argument, but database and limit are never explained, and the default-50 limit is left for the agent to infer from the word 'first'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'First rows of a table or view' clearly conveys the resource and the previewing operation, and 'for the Schema Explorer app' situates it. It stops short of distinguishing it from near-siblings like query_grid_rows, schema_explorer_table, or run_sql, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this preview versus run_sql, query_grid, or schema_explorer_table. The only hint is the app-scoping clause, which implies but does not state usage conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schema_explorer_tableBRead-only
Columns, keys, DDL and stats of one table, for the Schema Explorer app.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| database | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description usefully discloses what comes back (columns, keys, DDL, stats), which matters because there is no output schema, but it says nothing about behavior on missing tables or invalid database names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight phrase with zero filler, and the payload contents are front-loaded before the app qualifier. It is a fragment rather than a sentence, which slightly reduces clarity but wastes nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only tool with no output schema, listing the returned artifacts is enough to call it correctly, and annotations cover safety. However, the absence of any guidance versus describe_table and the total silence on parameter meaning leave real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both required parameters (database, table) have 0% schema description coverage, and the description does not compensate at all — it never explains whether names are qualified, case-sensitive, or how the database relates to the table. The names are self-evident, which prevents a 1, but no added meaning is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the specific resource (one table) and enumerates the returned artifacts (columns, keys, DDL, stats), so an agent knows exactly what data this yields. It does not differentiate itself from the near-identical sibling describe_table, which also appears to describe a single table.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as describe_table or schema_explorer_tables. The only context is the phrase 'for the Schema Explorer app', which names a scope but does not tell the agent when to pick this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schema_explorer_tablesBRead-only
Tables and views of one database with storage type, rows and size, for the Schema Explorer app.
| Name | Required | Description | Default |
|---|---|---|---|
| database | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe, non-mutating read, so the bar is lower. The description usefully adds that results include storage type, row counts and size, but says nothing about pagination, result limits, or behavior for an unknown/inaccessible database name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the resource comes first and the returned attributes follow. It is efficient, though the trailing 'for the Schema Explorer app' is context an agent can do little with.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing tool this is roughly adequate: the description covers what is returned, which matters since there is no output schema. It falls short on how to identify the database and whether results are bounded or paginated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter and 0% schema description coverage, the schema itself provides no meaning for 'database'. The description only implies that the value selects one database ('of one database'), adding minimal semantics; it does not specify name format, case sensitivity, or whether an ID or display name is expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete resource (tables and views of one database) and enumerates the attributes returned (storage type, rows, size), so an agent knows exactly what it produces. It does not, however, distinguish itself from near-neighbors like list_tables or schema_explorer_table, leaving the agent to guess which listing tool is appropriate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool, when not to, or which sibling to prefer (list_tables vs schema_explorer_table vs schema_explorer_databases). The 'Schema Explorer app' phrase hints at a UI context but gives no actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sql_editorSingleStore WorkspaceARead-only
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`.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | No | ||
| view | No | sql | |
| table | No | ||
| database | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint=true, which is consistent with opening a UI view. The description adds genuinely non-obvious behavior: the embedded chat panel delivers messages tagged '[SQL Editor <id>]' that must be answered with sql_editor_reply, and the result carries a browser_url that should be posted as a clickable link. It stops short of disclosing session/auth or lifecycle behavior, but this is well beyond what the annotation provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then scope, routing, behavioral quirks and args in a logical order. Every sentence carries information, though the rail-navigation enumeration is slightly verbose for an agent that mainly needs the routing and arg details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing the return shape ('The result includes browser_url') and the required follow-up action. Combined with full parameter documentation, the view enum, and the sibling routing rules, an agent has everything needed to invoke and post-process this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and no enums are declared, so the description carries the entire burden, and it delivers: it enumerates all eight valid values for view (sql, notebook, schema, pipelines, cluster, history, alerts, connections), documents the table argument as conditional on view='schema', notes database is case-sensitive, and warns that sql is not run automatically.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Open the SingleStore workspace: an interactive SQL editor plus views') and immediately enumerates what the workspace contains (Schema Explorer, Pipeline Monitor, Cluster Monitor). It distinguishes itself from the closest siblings by naming run_sql and query_grid and giving the condition that selects each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit selection criteria: 'Use this when the user wants to write, edit or run SQL themselves, or wants the combined workspace,' followed by explicit routing rules ('to run a query for your own reasoning use run_sql; to show results use query_grid'). The chat-panel routing to sql_editor_reply is also spelled out, so both the when and the when-not are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sql_editor_askCRead-only
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".
| Name | Required | Description | Default |
|---|---|---|---|
| sql | No | ||
| profile | No | ||
| database | No | ||
| question | Yes | ||
| selected | No | ||
| editor_id | Yes | ||
| last_result | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile. The description adds a genuinely useful behavioral detail: the reply is delivered asynchronously to the editor's inbox rather than returned inline. Beyond that it says nothing about auth, latency, or lifecycle, so it is only modestly additive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core purpose front-loaded and no wasted wording. Efficiently sized, though the profile sentence is somewhat loosely attached.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with zero schema coverage, no output schema, and minimal annotations, the description explains almost none of the inputs (only 'profile') and does not describe what the caller receives. The async inbox pointer helps but does not close the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 7 parameters, so the description carries the full burden. It only explains one parameter ('profile' with fast/balanced/thorough), leaving sql, database, question, selected, editor_id, and last_result completely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Answer a SQL Editor chat question') and clarifies the delivery channel ('reply arrives in the editor's inbox'). It is clear what the tool does, but it does not differentiate itself from close siblings such as sql_editor_assistant, sql_editor_inbox, or notebook_ask.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use / when-not guidance and no routing to alternatives among the many sibling ask/assistant/inbox tools. The only conditional guidance concerns the 'profile' parameter, not tool selection, so the agent is left to infer when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sql_editor_ask_cancelBRead-only
Stop the in-app answer that is running for one SQL Editor.
| Name | Required | Description | Default |
|---|---|---|---|
| editor_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, which gives the agent a safety signal, but cancelling an in-flight generation does change server-side process state, so the hint is at least in tension with the tool's behavior and the description does nothing to clarify it. It also omits what happens on cancel (partial answer retained? error raised? idempotent if already finished?).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the action verb first and no filler; nothing is wasted. It is efficient but so terse that the brevity shades into under-specification rather than crispness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter control tool with no output schema, the description covers the basic intent. It is still missing the id's origin, behavior when no answer is running, and any differentiation from the other two cancel tools, which is material given this crowded sibling set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% — editor_id carries only a bare title — so the description is the only source of parameter meaning, and it adds almost none. Saying "one SQL Editor" hints that the parameter identifies an editor but gives no format, source, or how to obtain the id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Stop") and resource ("the in-app answer that is running") scoped to a single SQL Editor, so an agent can tell it is a cancellation tool rather than a query or answer tool. It falls short of 5 because it never names its counterpart sql_editor_ask, leaving the pairing implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "that is running" implies the usage condition (an answer is in flight) but never states it as a rule or says what to do if nothing is running. With three cancel-shaped siblings in the list (sql_editor_ask_cancel, query_history_ask_cancel, query_history_compare_cancel), the description relies on "SQL Editor" alone to disambiguate the domain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sql_editor_assistantCRead-only
Whether the SQL Editor can answer questions in the app (Claude Code installed).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe, non-mutating call, so the description needs to add operational context it does not: what the check actually returns, whether it is cheap or triggers a subprocess/install detection, or whether it caches. The parenthetical hints at an environment dependency but never explains the resulting behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no padding, so nothing needs trimming. It is slightly under-specified rather than bloated, and the fragment phrasing is terse but front-loads the subject.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must convey what the caller gets back (a boolean? a status object?) and does not. For a capability check whose result determines whether the agent should attempt sql_editor_ask, this leaves the core contract unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. No parameter meaning is needed or missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the subject (SQL Editor's ability to answer questions) but is phrased as a noun clause rather than a verb+resource statement, so it never says this is a status/availability check. It is distinguishable from siblings only by inference, and the parenthetical '(Claude Code installed)' is ambiguous about whether it is a cause, condition, or dependency.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus sql_editor_assistant_warm, sql_editor_ask, or sql_editor_reply. The agent is left to guess whether this is a precondition check, a health probe, or a capability query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sql_editor_assistant_warmARead-only
Start the editor's assistant process ahead of the first question (no model call).
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | ||
| editor_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this operation does not mutate user data. The description adds useful behavioral context by clarifying that no model call occurs, but does not explain what warming entails, whether editor_id must reference an existing editor, or any latency/initialization side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the action and followed by the key timing and no-model-call qualifiers. No words are wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter warm-up tool with a readOnlyHint and no output schema, the description covers the essential action and timing. However, it leaves the optional profile parameter and the required editor_id semantics unexplained, which is a notable gap for an agent invoking it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning, and it does not. It never mentions editor_id or profile; only the property name 'editor_id' and the resource phrase 'editor's assistant' make the required parameter minimally inferable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: starting the SQL editor's assistant process, with the temporal qualifier 'ahead of the first question' and the behavioral note 'no model call.' It clearly distinguishes a warm-up call from an actual question call by implication, but does not explicitly name the sibling sql_editor_assistant as the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: call this before the first question to warm the assistant. It does not state when not to use it or explicitly contrast it with sql_editor_assistant, but the intended timing is clear enough for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sql_editor_executeBDestructive
Run any single statement the user confirmed in the SQL Editor app (writes and DDL included).
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| database | No | ||
| max_rows | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds useful context beyond that — writes and DDL are permitted, and it is limited to a single confirmed statement — but says nothing about permissions, transactions, side effects, or limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and scoped by the parenthetical. Every clause carries information; nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, write-capable tool with no output schema and zero parameter documentation, the description is too thin. It does not say what happens on failure, whether execution is transactional, how database context is resolved, or what max_rows truncation means.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all three parameters (sql, database, max_rows), so the description bears the full burden and gives almost nothing. 'Single statement' loosely constrains the sql argument, but database selection and the max_rows default of 1000 are entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Run) and resource (a single SQL statement) with an explicit scope qualifier: single statement, user-confirmed in the SQL Editor app. It distinguishes itself from the many query_/pipeline siblings by that single-statement scope, though it never names the closest alternative (run_sql).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies when to use it (a statement the user has already confirmed) and imposes an implicit constraint (one statement at a time, no batches), but gives no explicit alternatives or when-not-to-use guidance despite siblings like run_sql, sql_editor_query, and sql_editor_ask existing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sql_editor_filesBRead-only
The .sql files in the SQL Editor's folder, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read. The description adds one genuine behavioral trait beyond the annotations: results are ordered newest first. It says nothing else notable (no filtering, pagination, or scope limits), so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, and the ordering detail is placed at the end where it is easy to skim. It is a noun phrase rather than a verb-led sentence, which is slightly less front-loaded than ideal but wastes nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool with no output schema, the description covers what the result set is and how it is ordered, which is enough to invoke it correctly. A note on scope (all .sql files vs. only the user's) or a pointer to a sibling for other file types would have made it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool is 4. The description correctly implies no arguments are needed by describing a bare folder listing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (the .sql files in the SQL Editor's folder) and an ordering guarantee, so an agent knows exactly what comes back. It does not differentiate itself from near-siblings such as files_browse, notebook_files, or sql_editor_inbox, leaving ambiguity about which listing tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use statement, no prerequisites, and no mention of alternatives despite several overlapping listing tools in the sibling set. The 'SQL Editor's folder' phrase implies context but does not route the agent explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sql_editor_inboxBRead-only
Replies sent to one SQL Editor's chat panel, newer than after.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| editor_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile (non-mutating read) is covered. The description usefully adds the incremental-read behavior ('newer than after') and the single-editor scoping, but says nothing about ordering, result limits, or whether unread vs all replies are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the scope constraint front-loaded; no filler. The stray double-backtick around 'after' is a minor formatting blemish rather than wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with no output schema, the description is minimally viable: it identifies what comes back and the filter. It still omits return shape/ordering and pagination expectations, which an agent needs to poll correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the load. It explains 'after' (only replies newer than this value) and implies editor_id selects the chat panel, but adds no detail on type/format (e.g., timestamp vs message id) or the default-0 behavior implied by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely ('replies sent to one SQL Editor's chat panel') and the scope filter ('newer than after'), which separates it from the write-side sibling sql_editor_reply. It is clear to an agent what content this tool surfaces, though the retrieval verb ('list'/'fetch') is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus alternatives such as sql_editor_reply (posting a reply) or sql_editor_ask. The agent must infer the polling/read-back use case entirely from the name and the 'after' filter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sql_editor_open_fileBRead-only
Read one .sql file from the SQL Editor's folder.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true annotation already establishes this is a safe read, and the description confirms the read behavior plus scopes it to the SQL Editor's folder. It does not disclose error behavior for a missing/non-.sql file, whether the file loads into an editor session, or any return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is appropriately sized, though it leaves no room for the routing or parameter detail an agent would benefit from.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with annotations covering safety, the description is minimally adequate. It omits fileName format expectations and what happens on failure, and there is no output schema to explain what reading returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only one parameter and 0% schema description coverage, the description carries the burden, and it does add meaning: the 'name' argument is the filename of a .sql file located in the SQL Editor's folder. It does not clarify whether the extension must be included or how paths are handled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (one .sql file) with a location qualifier (the SQL Editor's folder). An agent understands the operation, but the description does not differentiate this from siblings like sql_editor_files or sql_editor_save_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternative tools are named. The agent must infer from the name alone that this opens a single file rather than listing files (sql_editor_files) or saving one (sql_editor_save_file).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sql_editor_queryARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| database | No | ||
| max_rows | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true; the description adds real behavioral value by explaining that data/schema-changing statements are not rejected but returned as 'needs_confirmation' and that the app prompts the user before calling sql_editor_execute. It stays silent on return format, row-limit behavior, and error semantics, which keeps it out of the top tier.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short lines with the action statement front-loaded and the exception path immediately after. Every sentence earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The confirmation-flow behavior is well covered, but for a tool with zero schema description coverage and no output schema, the description leaves the caller guessing on 'database' selection and 'max_rows' truncation behavior — the one real gap in an otherwise tidy definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0% for three parameters, the description is the only place semantics could be supplied, and it mentions none of them. It never tells the agent how to use 'sql', what 'database' selects or defaults to, or what 'max_rows' (default 1000) bounds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Run') plus scope ('read-only statement') and locates it in a specific app ('SQL Editor'). It implicitly distinguishes itself from sql_editor_execute by declaring the read-only boundary, so an agent can route between them without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear usage context: read-only statements go here, and mutating statements are diverted to sql_editor_execute via the app's confirmation flow. It does not address when to prefer this over the many other query-running siblings (run_sql, sql_editor, query_grid), so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sql_editor_replyARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | ||
| editor_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=true annotation, the description discloses real rendering behavior: the message is plain text, and ```sql fenced blocks become Replace/Insert/Copy buttons in the editor. That is useful operational context not captured by annotations or schema. It does not cover failure modes (invalid or closed editor_id), and there is mild tension between a 'Send' action and readOnlyHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action in sentence one, then usage, then output-format guidance, then the follow-up instruction. All sentences earn their place, though the phrasing is slightly verbose and could be tightened without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The description covers what the tool does, when to call it, how to format the payload, and the required follow-up chat message. Only error/precondition behavior (editor not open, bad id) is left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and neither property has a schema description, so the description carries the burden and largely delivers: editor_id is explained with a concrete example ('e-4f9a2c') and message is characterized as plain text with SQL in fenced blocks. Format details beyond that (allowed length, escaping) are absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Send an answer to the chat panel of an open SQL Editor app.' The added routing rule ('answer a message that arrived from the SQL Editor... [SQL Editor <editor_id>]') makes the scope unambiguous, though no sibling (e.g. sql_editor_ask) is named for direct contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete triggers for use: answering a message that starts with '[SQL Editor <editor_id>]', and when the user asks you to place SQL into their open editor. It also specifies a post-call step ('reply briefly in the chat as well'), but names no alternative tool to use instead in other situations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| name | Yes | ||
| overwrite | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the description is not carrying the full safety burden. It meaningfully adds the overwrite gate and the 'exists' result string, telling the agent that a collision will not silently clobber the file. It does not disclose success-return shape or folder/auth details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and immediately followed by the one behavior an agent could get wrong. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and three undocumented parameters, the description covers the mutation semantics but not the return values on success, the file naming rules, or where the SQL Editor folder resolves to. Adequate for the core call, incomplete around edges.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains `overwrite` well (default replacement gated by the flag) and implies the roles of `name` and `sql`, but gives no format details such as whether the extension is auto-appended or whether paths are accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: saving the editor's SQL as a .sql file into the SQL Editor's folder. This is clearly distinguishable from file-oriented siblings like sql_editor_open_file or sql_editor_files, but the description never names an alternative to route against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrase 'the editor's SQL', which frames it as an in-editor save action, and the overwrite clause hints at the intended flow. There is no explicit when-not-to-use or referenced alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sql_editor_schemaBRead-only
Tables, columns and routines of one database, for the SQL Editor's tree and autocomplete.
| Name | Required | Description | Default |
|---|---|---|---|
| database | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered, but the description adds nothing behavioral beyond that – no note on result size, whether all objects are returned, latency, or caching. For a potentially large catalog read it discloses none of its operational traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though its brevity is partly the cause of the missing parameter and behavioral detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one param, read-only, no output schema), yet the description leaves the parameter format and the shape/size of the returned catalog undocumented. Adequate but with clear gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single required 'database' parameter has 0% schema description coverage, and the description only alludes to 'one database' without saying whether it takes a name, identifier, or connection-qualified reference. The description does not compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete deliverable – tables, columns and routines of one database – so an agent knows exactly what comes back. It does not, however, distinguish this from closely named siblings such as schema_explorer_tables, schema_explorer_table, list_tables or describe_table, and the SQL-Editor/tree framing is the only differentiator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for the SQL Editor's tree and autocomplete' implies the intended use context, but there is no explicit when-to-use statement and no mention of alternatives like schema_explorer or describe_table. The agent must infer which schema-listing tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | ||
| foreground | No | ||
| limit_batches | No | ||
| pipeline_name | Yes | ||
| if_not_running | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It explains the synchronous vs. immediate-return distinction, the constraint that limit_batches only works in foreground, and that if_not_running turns a start into a no-op instead of an error. This is strong behavioral disclosure, though it does not cover potential failure modes or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a clear one-sentence purpose followed by a concise parameter list. Every line adds information, and the most important behavior is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the sibling set, the description covers the essential behavior and parameter semantics. It could be slightly more complete by explicitly contrasting with test_pipeline or pipeline_status, but for this tool's complexity it is quite sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. It explains all five parameters, including the database default, the meaning of foreground, the conditional validity of limit_batches, and the effect of if_not_running. This goes well beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Start a pipeline so it begins (or resumes) loading data.' This clearly distinguishes start_pipeline from siblings like stop_pipeline, create_pipeline, or pipeline_status, and even adds the nuance that starting can resume an existing pipeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical usage context, noting that foreground mode is 'Useful for a one-off load or for testing a pipeline end to end.' It does not explicitly name alternatives or say when not to use this tool, so it misses the top tier, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | ||
| pipeline_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only repeats the action 'stop a running pipeline' and describes parameters. It does not disclose whether stopping is reversible, whether it interrupts in-flight work, what happens to pipeline state, or whether permission is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely compact, front-loads the core action in the first sentence, and then lists parameters in a structured Args block with no filler or redundant elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with an output schema, the description is close to sufficient, but the lack of behavioral transparency and any guidance about verifying pipeline state creates a gap. An agent could invoke the tool correctly, but it would not know what to expect beyond the fact that the pipeline is stopped.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does add meaning for the database parameter by explaining that it 'defaults to the connection's configured database,' which the schema's null default does not convey. The pipeline_name explanation is largely a restatement of the property name, but for two parameters the overall semantics are adequately covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Stop a running pipeline.' This clearly distinguishes the tool from siblings like create_pipeline, start_pipeline, drop_pipeline, and alter_pipeline, so an agent can identify the correct operation without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'running' implies the tool should be used only on pipelines that are currently active, but the description does not explicitly say when to use this tool versus alternatives. It does not mention checking pipeline_status first, nor does it contrast stopping with dropping or restarting a pipeline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| database | No | ||
| pipeline_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and handles it well. It explicitly discloses that nothing is written to the destination table, that testing a running pipeline causes a SingleStore error, and that the pipeline must already exist and be stopped. These are important behavioral traits beyond what the schema shows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, then prerequisites, then side effects, then parameter details. Every sentence adds value, and the length is appropriate for a tool with nontrivial preconditions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no schema-level parameter descriptions, the description covers all essential context: prerequisites, error condition, side-effect-free behavior, and parameter semantics. The output schema exists to describe return values, so the description does not need to explain them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description documents all three parameters with meaningful semantics: pipeline_name identifies the pipeline, database defaults to the connection's configured database, and limit restricts how many rows/messages are pulled. This fully compensates for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Test an existing pipeline') plus the key behavioral distinction ('without loading it into the table'), which clearly separates it from start_pipeline, stop_pipeline, and create_pipeline. It also states the validation goal, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit preconditions: the pipeline must already exist and must be stopped first, and it directly tells the agent to call stop_pipeline before this if needed. It also clarifies the tool's use case ('purely for validating source/format/transform config works'), which helps an agent decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only tell the agent this is not read-only and not destructive; the description adds the genuinely important behavioral fact that the switch is global and retroactively affects all tools, apps, and new notebook kernels. That is meaningful context beyond the structured fields, though it does not cover persistence across sessions or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence carrying the action and its consequence, plus a minimal Args block. Nothing is wasted and the highest-value information comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the annotations cover the safety profile. The global side-effect disclosure fills the main gap, but the tool's relationship to connection_activate (the one ambiguity that could cause a wrong tool choice) is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the burden, and it does partially: it defines 'name' as the name of a saved connection and routes to list_connections for discovery. It does not state the format, case sensitivity, or failure behavior on an unknown name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Switch the active SingleStore connection') and goes further by naming the effect on the environment. It is clear on its own, but it never distinguishes itself from the similarly-named sibling 'connection_activate', which an agent would plausibly confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Points the agent to list_connections for valid names, which is useful implied usage, but says nothing about when to prefer this over connection_activate, connection_save, or connection_sso_sign_in, nor any prerequisites for switching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
76 tool updates
v0.8.1- Added
alerts - Added
alerts_ack - Added
alerts_badge - Added
alerts_check_now - Added
alerts_clear - Added
alerts_data - Added
alerts_update - Added
app_page - Added
cleanup_work_tables - Added
cluster_monitor - Added
cluster_monitor_data - Added
connection_activate - Added
connection_delete - Added
connection_helios_ca - Added
connection_save - Added
connection_sso_sign_in - Added
connection_test - Added
connections_state - Added
connections_window - Added
files_browse - Added
list_connections - Added
notebook - Added
notebook_ask - Added
notebook_assistant_warm - Added
notebook_environment - Added
notebook_environment_install - Added
notebook_files - Added
notebook_kernel_control - Added
notebook_kernel_start - Added
notebook_kernel_state - Added
notebook_open - Added
notebook_packages - Added
notebook_packages_install - Added
notebook_poll - Added
notebook_run - Added
notebook_save - Added
query_advisor_report - Added
query_history - Added
query_history_advisor - Added
query_history_answer - Added
query_history_ask - Added
query_history_ask_cancel - Added
query_history_assistant - Added
query_history_assistant_warm - Added
query_history_compare_cancel - Added
query_history_compare_candidates - Added
query_history_compare_start - Added
query_history_compare_status - Added
query_history_data - Added
query_history_event - Added
query_history_trend_runs - Added
query_history_trends - Added
query_history_tuning - Added
restart_server - Added
sas_viya_save - Added
sas_viya_sign_in - Added
sas_viya_sign_out - Added
sas_viya_state - Added
sas_viya_test - Added
schema_explorer_cleanup_drop - Added
schema_explorer_cleanup_scan - Added
schema_explorer_cleanup_settings - Added
sql_editor - Added
sql_editor_ask - Added
sql_editor_ask_cancel - Added
sql_editor_assistant - Added
sql_editor_assistant_warm - Added
sql_editor_execute - Added
sql_editor_files - Added
sql_editor_inbox - Added
sql_editor_open_file - Added
sql_editor_query - Added
sql_editor_reply - Added
sql_editor_save_file - Added
sql_editor_schema - Added
use_connection
11 tool updates
v0.2.0- Added
browser_link - Added
pipeline_errors - Added
pipeline_monitor - Added
pipeline_monitor_data - Added
query_grid - Added
query_grid_rows - Added
schema_explorer - Added
schema_explorer_databases - Added
schema_explorer_preview - Added
schema_explorer_table - Added
schema_explorer_tables
13 tool updates
v0.1.0- First observed
alter_pipeline - First observed
create_pipeline - First observed
describe_table - First observed
drop_pipeline - First observed
get_pipeline_ddl - First observed
list_databases - First observed
list_pipelines - First observed
list_tables - First observed
pipeline_status - First observed
run_sql - First observed
start_pipeline - First observed
stop_pipeline - First observed
test_pipeline
TDQS
Scored across 100 tools
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.
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.
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.
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
Related MCP Connectors
Connect to PlanetScale databases, branches, schema, query insights, and execute SQL
Browse, query, and administer your managed WaveHouse + ClickHouse projects (schema, pipes, policy).
- toolsOAuthcom.streamkap
Streamkap CLI & MCP server - manage CDC pipelines, sources, destinations, and transforms
Create, manage, and query your Google Cloud SQL resources.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides a lightweight MySQL database interface via stdio, enabling query execution, data manipulation, schema inspection, and connection testing using FastMCP tools.3MIT
- AlicenseCqualityCmaintenanceEnables executing SQL queries, managing databases, and switching between multiple project environments via MCP, without requiring a local MySQL client.14683 npm1MIT
- AlicenseAqualityAmaintenanceEnables Oracle Database schema introspection and SQL execution over stdio, letting MCP hosts list tables, describe columns, and run SQL—read-only by default with opt-in writes.316 npmMIT
- AlicenseAqualityCmaintenanceEnables MCP clients to interact with a 达梦 DM8 database over stdio, providing read-only queries, schema exploration, and optional gated write/DDL operations with strict safety checks.916 npmApache 2.0