Skip to main content
Glama

SaturnSQL

Server Details

Query Postgres, MySQL, SQL Server, Oracle, BigQuery, ClickHouse and Redshift from your AI client.

Ownership verified
Status
Healthy
Uptime
95.2% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.7/5.0

Scored across 11 tools

Disambiguation4/5

Most tools target clearly distinct resource+action pairs (schedule lifecycle vs. saved-query lifecycle vs. ad-hoc SQL). The one soft overlap is execute_query vs. export_query_results, since both run SQL and only the output format differs, but the descriptions make the distinction explicit enough that misselection is unlikely.

Naming Consistency5/5

Every tool follows a consistent snake_case verb_noun pattern (list_*, get_*, run_*, create_*, export_*). The only quirk is save_query serving as both create and update, which is a semantic merge rather than a naming inconsistency.

Tool Count5/5

Eleven tools is well within the ideal range and each maps to a concrete step in the workflow (discover connection, inspect schema, write/run SQL, save, export, schedule). Nothing appears redundant or padded.

Completeness3/5

The query side covers list/get/save/run but has no delete or explicit update path beyond save_query's id overload, and the schedule side has create/list/run-now but no update, pause, or delete schedule. Connection management is read-only (list_connections, get_schema), which may be out of scope but leaves agents unable to clean up or modify schedules and saved queries.

Available Tools

11 tools
create_scheduleCreate scheduleA
Destructive
Inspect

Schedule a saved query to run on a cron cadence and deliver to exactly one destination: Google Sheets or Slack. Each run executes the saved query's SQL, so this needs both the write and execute scopes.

NameRequiredDescriptionDefault
timezoneNoIANA timezone. Defaults to UTC.
createNewNoCreate a new spreadsheet named spreadsheetName.
sheetNameNoTab to write to.
startCellNoA1 notation. Defaults to A1.
savedQueryIdYesSaved query id from list_queries.
spreadsheetIdNoExisting spreadsheet to write to. Omit and set createNew with spreadsheetName to make a new one.
cronExpressionYes5-field cron expression, e.g. '0 9 * * 1' for Monday 9am.
includeHeadersNoWrite column names as the first row. Defaults to true.
slackChannelIdNoSlack channel to post to, instead of a spreadsheet.
spreadsheetNameNoName for a new spreadsheet when createNew is true.
slackChannelNameNoDisplay name of the Slack channel.
slackMessageTemplateNoMessage template for Slack. Omit to post the raw result.

Output Schema

NameRequiredDescription
scheduleYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=true, openWorldHint=true), so the description only needs to add context — and it does: required OAuth scopes and the fact that each run re-executes the saved query's SQL. It does not warn that writing to an existing spreadsheet at startCell/sheetName may overwrite prior output, which is a meaningful gap for a destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with no filler. The core action is front-loaded and the constraint and prerequisite follow in a logical order.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter creation tool with full schema coverage and an output schema, the description supplies the two things structured fields don't: auth scopes and destination exclusivity. Overwrite behavior on existing spreadsheets and whether schedules are editable afterward remain unaddressed but are secondary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns an extra point by stating the destination parameters are mutually exclusive (exactly one of Google Sheets or Slack), an exclusivity rule the schema itself does not encode.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (schedule a saved query), the trigger mechanism (cron cadence), and the output surfaces (Google Sheets or Slack). This clearly separates it from siblings like list_schedules and run_schedule_now.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context: it requires write and execute scopes and restricts delivery to exactly one destination. It does not explicitly name alternatives such as run_schedule_now for one-off execution, so the when-not guidance is incomplete rather than absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_queryRun SQLA
Destructive
Inspect

Run SQL against a connection and return rows. Connections in read-only mode accept a single SELECT, WITH or EXPLAIN statement.

NameRequiredDescriptionDefault
sqlYesThe SQL to run, in the connection's own dialect.
limitNoMaximum rows to return, 1 to 10000. Defaults to 1000.
connectionIdYesConnection id from list_connections.

Output Schema

NameRequiredDescription
resultNo
successNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and openWorldHint=false, so the safety profile is partly covered. The description adds the non-obvious single-statement restriction in read-only mode and that rows are returned, but it never warns that a non-read-only connection accepts writes or DDL, nor mentions timeouts, termination, or result truncation via limit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, and the core action is front-loaded before the conditional constraint. Nothing is repeated from the schema or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape explanation is not required, and the parameter schema is fully documented. However, for a destructive-flagged arbitrary-SQL executor, the description leaves out what happens on write connections, whether multiple statements are rejected, and any execution limits — meaningful gaps for this tool's risk profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all three parameters documented including the limit bounds/default and the connectionId source. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Run SQL against a connection and return rows") plus the statement types accepted in read-only mode. It is clearly distinguishable from run_saved_query or run_schedule_now by implication, but never names a sibling to make that routing explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The read-only-mode constraint (single SELECT, WITH or EXPLAIN) is a useful contextual guideline about when this form is accepted, but it is framed as a backend rule rather than usage guidance. Nothing tells the agent when to prefer run_saved_query, run_schedule_now, or export_query_results instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_query_resultsExport query resultsB
Destructive
Inspect

Run SQL and export the rows as csv, json, or xlsx. xlsx is returned base64-encoded.

NameRequiredDescriptionDefault
sqlYesThe SQL whose result to export.
limitNoMaximum rows. Omit on PostgreSQL and MySQL to export everything the query returns.
formatYesFile format of the export.
connectionIdYesConnection id from list_connections.

Output Schema

NameRequiredDescription
formatYes
contentYesThe file body: CSV or JSON text, or base64 for xlsx.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true and readOnlyHint=false, signaling that arbitrary SQL is executed with mutation potential. The description adds one genuinely non-schema behavior — that xlsx output is base64-encoded — but says nothing about how csv/json are delivered (inline vs. written to disk), whether writes are committed, or any size/timeout constraints on large exports.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, and the key operational detail (base64 xlsx) is placed front and center. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 explanation is not required, and the parameter list is fully covered by the schema. The remaining gap is the relationship to execute_query/run_saved_query, which the description never resolves for an agent choosing among four query-running siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented, including the useful note about omitting limit on PostgreSQL/MySQL. The description only restates the format enum and adds the base64 detail, so it neither needs to nor does add much parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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 SQL and export the rows') and enumerates the supported output formats, so the purpose is unambiguous. However, it never distinguishes itself from the obvious sibling execute_query, leaving the agent to infer why a separate export tool exists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to choose this over execute_query or run_saved_query, and no exclusions or prerequisites (e.g. 'use when you need a downloadable file rather than in-memory rows'). The only usage hint is implicit in the word 'export'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_queryGet saved queryA
Read-only
Inspect

Get a single saved query by id, including its SQL and declared variables.

NameRequiredDescriptionDefault
idYesSaved query id from list_queries.

Output Schema

NameRequiredDescription
idNo
sqlNo
nameNo
isSharedNo
updatedAtNo
variablesNoDeclared {{name}} variables, filled in by run_saved_query.
folderPathNo
connectionIdNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds that SQL and declared variables come back, which is modest extra context, but says nothing about what happens for a missing/invalid id or access scoping.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the resource and the returned contents; nothing extraneous and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 a one-param read-only tool needs little more. Only the error/not-found behavior is left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already explains the id parameter as coming from list_queries. The description only restates 'by id' without adding format, source, or error semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (a single saved query by id) and notes the payload includes SQL and declared variables, which distinguishes it from list_queries. It does not explicitly name the sibling it displaces, so 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: fetch one saved query when you have its id. The description gives no explicit when-to-use or when-not, and the pointer to list_queries for obtaining ids lives only in the schema, not the prose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_schemaGet schemaA
Read-only
Inspect

Get every table and column for a connection, to write SQL against the real structure.

NameRequiredDescriptionDefault
connectionIdYesConnection id from list_connections.

Output Schema

NameRequiredDescription
tablesYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered structurally. The description adds that the result is exhaustive ('every table and column'), which is useful, but says nothing about size limits, latency, or behavior on large/complex databases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the resource and scope, with the purpose clause appended. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering the safety profile, the description only needs to convey scope and intent, which it does ('every table and column'). It could mention prerequisites such as knowing the connectionId from list_connections or handling very large schemas, but nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single connectionId parameter is documented with a pointer to list_connections, so the schema does the work. The description only echoes 'for a connection' and adds no format or sourcing detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: retrieves every table and column for a connection, and adds the downstream intent (writing SQL against the real structure). It does not explicitly distinguish itself from siblings like list_connections or execute_query, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'to write SQL against the real structure' implies the call should precede query authoring, but it never states when not to use it or names an alternative tool. Usage is inferable rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_connectionsList connectionsA
Read-only
Inspect

List the database connections available in this SaturnSQL company. Start here: every other tool takes a connection id from this list.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
connectionsYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false), and the description adds genuinely new workflow context: that the output is the source of connection ids for all sibling tools. It does not discuss pagination or result size, but with an output schema present that burden is partly lifted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste, and the most actionable information (start here) is front-loaded after the purpose statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A zero-parameter, read-only listing with an output schema and annotations covering safety needs only purpose plus workflow position, both of which are provided. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to disambiguate; the baseline for zero-param tools applies. The description correctly implies an unfiltered, whole-company listing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('database connections') scoped to 'this SaturnSQL company', which distinguishes it from siblings like list_queries or list_schedules that list other entity types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Start here: every other tool takes a connection id from this list' explicitly tells the agent this is the first call in the workflow and why the other tools depend on it. No exclusion is needed because nothing else returns connection ids.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_queriesList saved queriesA
Read-only
Inspect

List the team's saved queries, with their SQL, folder and declared variables.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
queriesYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description usefully notes what each returned entry contains, but says nothing about result volume, pagination, or ordering across a potentially large team list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence that front-loads the verb and resource, then adds the useful detail about returned fields. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (zero params, read-only) and an output schema exists, so return values need not be spelled out. Only the lack of sibling differentiation and result-set size guidance keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (team's saved queries) and adds the meaningful payload contents (SQL, folder, declared variables). It does not explicitly distinguish itself from the sibling get_query, which retrieves a single query, 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.

Usage Guidelines2/5

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 get_query, run_saved_query, or save_query. The agent must infer from the name alone that this is the enumeration entry point.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schedulesList schedulesA
Read-only
Inspect

List the company's scheduled query exports, with cadence, destination and last-run status.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
schedulesYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the returned fields, but since an output schema exists that is partly redundant, and it says nothing about scoping, pagination, or result size.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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 useful field detail follows.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, no parameters, and read-only annotations, the description is nearly self-sufficient. The only missing context is scope/pagination behavior for a company-wide listing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters and a fully covered schema, so there is nothing for the description to disambiguate. Baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('scheduled query exports') and even names the fields surfaced (cadence, destination, last-run status). It implicitly separates itself from create_schedule and run_schedule_now, but never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: this is the discovery/read path versus create_schedule and run_schedule_now. There is no explicit when-to-use, when-not-to-use, or prerequisite statement, so an agent must infer the routing from the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_saved_queryRun saved queryC
Destructive
Inspect

Run a saved query, substituting its declared {{variables}} from the values supplied.

NameRequiredDescriptionDefault
idYesSaved query id from list_queries.
limitNoMaximum rows to return, 1 to 10000. Defaults to 1000.
valuesNoVariable values keyed by variable name, e.g. {"start": "2026-01-01"}. Omitted variables fall back to their saved defaults.
timeZoneNoIANA time zone for relative date variables such as today, e.g. Europe/Helsinki. Defaults to UTC.

Output Schema

NameRequiredDescription
resultNo
successNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false, which is surprising for something called 'Run a saved query', yet the description says nothing about side effects, whether the underlying query may write data, or what permissions are needed. With no annotations-level explanation of the risk, the description's silence on destructiveness is a significant gap (no contradiction, however).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tight, front-loaded sentence with no filler. It is efficient, though the terseness is partly under-specification rather than deliberate economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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 described, but for a destructive-flagged tool with a nested 'values' object and multiple competing siblings, the description leaves the agent without routing guidance or risk disclosure. It covers the mechanic of variable substitution and nothing else.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so id, limit, values, and timeZone are already fully documented, establishing a baseline of 3. The description's mention of variable substitution reinforces the 'values' parameter but adds no syntax or fallback behavior beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Run a saved query') plus a distinctive behavior: substituting declared {{variables}} from supplied values. That distinguishes it reasonably from save_query or list_queries, though it never names the nearest sibling, execute_query, so the reader must infer the difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance and never mentions alternatives such as execute_query or run_schedule_now, which are the obvious competing entry points. An agent must infer that a saved query id is required and that this is the ad-hoc execution path rather than the scheduled one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_schedule_nowRun schedule nowA
Destructive
Inspect

Trigger an existing schedule's export immediately, delivering to its already-configured destination.

NameRequiredDescriptionDefault
idYesSchedule id from list_schedules.

Output Schema

NameRequiredDescription
successNo
writtenRangeNoA1 range the export wrote to.
slackDeliveredNo
spreadsheetUrlNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already disclose that this is a non-read-only, open-world, destructive action, so the description is not the sole carrier of the safety profile. The description adds useful context that delivery goes to the schedule's already-configured destination, but it does not explain potential overwrite behavior, permissions, or other destructive implications beyond what the annotations state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted wording. It efficiently states the action, immediacy, and destination behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, the output schema exists, annotations cover the safety profile, and the input schema fully documents the only parameter. The description provides enough context for correct invocation, though it could have added a brief note about destructive side effects or prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single required 'id' parameter is documented as coming from list_schedules. The description does not add further meaning about the parameter beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Trigger an existing schedule's export') and clarifies that delivery goes to the already-configured destination. It clearly distinguishes this action from creating a schedule, but it does not explicitly name sibling alternatives such as run_saved_query or list_schedules.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'immediately' implies when to use the tool: when an existing schedule's export should run now rather than at its normal time. However, the description does not state when not to use it or name alternatives, leaving usage guidance 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.

save_querySave queryA
Destructive
Inspect

Save a new query to the team's library, or update an existing one by passing its id.

NameRequiredDescriptionDefault
idNoId of the saved query to overwrite. Omit to create a new one.
sqlYesThe SQL to save.
nameYesDisplay name in the query library.
folderPathNoSingle folder label to file it under; null or omitted for the root.
connectionIdNoConnection id from list_connections.

Output Schema

NameRequiredDescription
idNo
sqlNo
nameNo
isSharedNo
updatedAtNo
variablesNoDeclared {{name}} variables, filled in by run_saved_query.
folderPathNo
connectionIdNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered externally. The description adds useful context that the query is saved to a team library and that an existing query is updated by id, but it does not explain overwrite impact, permissions, or side effects in detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no waste. It efficiently communicates the core create-or-update behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a rich schema, full parameter descriptions, annotations, and an output schema, so the description need not restate return values or parameter details. It adequately explains the create/update duality, though it could say more about destructive overwrite behavior beyond what annotations provide.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented in the schema. The description only echoes the id-based update behavior and adds little parameter meaning beyond the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: save a query to the team's library, including both create and update modes. It is clear what the tool does, though it does not explicitly distinguish itself from siblings such as list_queries or run_saved_query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a useful internal rule: omit id to create, pass id to update. It does not explain when to use this tool instead of adjacent tools like run_saved_query or list_queries, so the usage guidance is implied rather than complete.

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.

  1. 11 tool updates
    • Addedcreate_schedule
    • Changedexecute_query2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "duration": {
        -        "description": "Execution time in milliseconds.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "fields": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": true,
        -              "properties": {
        -                "name": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "rowCount": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "rows": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": {},
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "One object per row, keyed by column name."
        -      },
        -      "truncated": {
        -        "description": "True when the row limit or memory cap cut the result short.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "duration": {
        +        "description": "Execution time in milliseconds.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "fields": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": {},
        +              "properties": {
        +                "name": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "rowCount": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "rows": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": {},
        +              "propertyNames": {
        +                "type": "string"
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "One object per row, keyed by column name."
        +      },
        +      "truncated": {
        +        "description": "True when the row limit or memory cap cut the result short.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedexport_query_results2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / limit / maximum
        Added value: +9007199254740991
    • Changedget_query2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / variables / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "name": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_schema3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / tables / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / tables / items / properties / columns / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "isPrimaryKey": {
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "nullable": {
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "isPrimaryKey": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "nullable": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "type": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedlist_connections1 field changed
      • changedOutput schema / properties / connections / items / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedlist_queries2 fields changed
      • changedOutput schema / properties / queries / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / queries / items / properties / variables / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "name": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Addedlist_schedules
    • Changedrun_saved_query3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / values / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / properties / result / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "duration": {
        -        "description": "Execution time in milliseconds.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "fields": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": true,
        -              "properties": {
        -                "name": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "rowCount": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "rows": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "additionalProperties": {},
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "One object per row, keyed by column name."
        -      },
        -      "truncated": {
        -        "description": "True when the row limit or memory cap cut the result short.",
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {
        +      "duration": {
        +        "description": "Execution time in milliseconds.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "fields": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": {},
        +              "properties": {
        +                "name": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "rowCount": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "rows": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "additionalProperties": {},
        +              "propertyNames": {
        +                "type": "string"
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "One object per row, keyed by column name."
        +      },
        +      "truncated": {
        +        "description": "True when the row limit or memory cap cut the result short.",
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Addedrun_schedule_now
    • Changedsave_query2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / variables / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "name": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "type": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  2. 8 tool updates
    • First observedexecute_query
    • First observedexport_query_results
    • First observedget_query
    • First observedget_schema
    • First observedlist_connections
    • First observedlist_queries
    • First observedrun_saved_query
    • First observedsave_query

Publisher details

Operator
Panda Capital Oy Ab · Publisher source
Vendor relationship
Unknown
Documentation
Unknown
Trust center
Unknown
Restrictions
Any paid plan · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to query business databases directly via natural language, with enforced read-only access and secure query limits. Supports SQLite and PostgreSQL, and works with any OpenAI-compatible model.
    0
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables natural language querying of SQL databases using AI, supporting multiple database types and automatic schema discovery.
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI clients to interact with PostgreSQL databases through natural language, translating requests into structured queries and returning results via a secure self-hosted server.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables LLM agents and AI applications to connect to and retrieve data from multiple database types such as PostgreSQL, MySQL, SQLite, BigQuery, Oracle, MS SQL, and Redshift through a unified API with schema normalization and query transformation.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources