Skip to main content
Glama
otterstax

The OtterStax MCP Server

Official
by otterstax

OtterStax MCP server

An MCP server for OtterStax, the federated SQL server. It lets an AI agent (Claude Code, Claude Desktop, Codex, opencode, …) discover the data behind OtterStax — MySQL/MariaDB, PostgreSQL, ClickHouse, S3 and Kafka — and query it with SQL.

The server runs locally over stdio and talks to OtterStax over its PostgreSQL wire protocol.

Configuration

Variable

Default

OTTERSTAX_URL

postgresql://localhost:8817

PostgreSQL-wire address of the OtterStax server

OtterStax does not check credentials, so the URL needs only host and port. The server runs any SQL you send it: point it only at an OtterStax you are allowed to change.

Related MCP server: dbrex

Install

Requires Node.js 22 or newer (Claude Desktop ships its own).

Claude Desktop

Download otterstax-mcp.mcpb and open it: Claude Desktop installs it and asks for the OtterStax URL.

Or add it to claude_desktop_config.json:

{
  "mcpServers": {
    "otterstax": {
      "command": "npx",
      "args": ["-y", "@otterstax/mcp"],
      "env": { "OTTERSTAX_URL": "postgresql://localhost:8817" }
    }
  }
}

Claude Code

claude mcp add otterstax -e OTTERSTAX_URL=postgresql://localhost:8817 -- npx -y @otterstax/mcp

Codex

codex mcp add otterstax --env OTTERSTAX_URL=postgresql://localhost:8817 -- npx -y @otterstax/mcp

or in ~/.codex/config.toml:

[mcp_servers.otterstax]
command = "npx"
args = ["-y", "@otterstax/mcp"]
tool_timeout_sec = 600   # Codex stops a tool after 60 s by default; federated queries can take longer

[mcp_servers.otterstax.env]
OTTERSTAX_URL = "postgresql://localhost:8817"

opencode

In opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "otterstax": {
      "type": "local",
      "command": ["npx", "-y", "@otterstax/mcp"],
      "environment": { "OTTERSTAX_URL": "postgresql://localhost:8817" }
    }
  }
}

Tools

Tool

What it does

execute_sql(sql)

Runs any statement. Returns {columns, rows, row_count}; row_count is rows returned, or rows affected for DML.

explain_query(sql)

Runs EXPLAIN <sql>. OtterStax builds without EXPLAIN support return their error.

list_databases()

Connection aliases (kind: "connection") and local engine databases (kind: "local").

list_schemas(database)

<db> (MySQL/ClickHouse) or <db>.<schema> (PostgreSQL) inside a connection.

list_tables(database?, schema?)

Tables and views under the full names to use in SQL, e.g. sales.ops.orders.

describe_table(table)

Columns with SQL types and nullability.

search_objects(object_type, pattern, detail_level, limit)

Finds tables or columns by LIKE pattern. summary/full on tables also count rows (one COUNT(*) per match).

table_stats(table, columns?)

Row count and per-column distinct count, NULL count, MIN and MAX in one query.

Errors come back as tool errors (isError: true) with {error, code}, where code is the SQLSTATE OtterStax sent. If OtterStax goes down, the next call reconnects on its own.

The server also gives the agent OtterStax's SQL rules (table naming, date handling, query shapes that are known to crash the engine) as MCP server instructions.

Development

npm install
npm run build            # dist/index.js, one self-contained file
npm test                 # unit tests
npm run test:integration # against a live OtterStax, see below
npm run build:mcpb       # otterstax-mcp.mcpb

Integration tests expect the OtterStax quick start on localhost:8817:

cd otterstax/examples/quick_start && docker compose up -d

They restart the qs-otterstax container once to check reconnection.

License

Apache-2.0

Available Tools

8 tools
describe_tableB

Columns of a table with their SQL types and nullability.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesFull table name from list_tables, e.g. sales.ops.orders

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the return payload (column names, SQL types, nullability), which implicitly communicates a read-only metadata operation. It says nothing about behavior on a missing table, permission requirements, or output volume, so the disclosure is partial.

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 short sentence that front-loads the essential information with zero filler. Nothing in it is redundant or padding.

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 simple one-parameter metadata read with no output schema, the description adequately explains what comes back (columns, types, nullability). It could be more complete by noting that all columns are returned or that it errors on an unknown table, but the core need is covered.

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%, so the single 'table' parameter is already fully documented in the schema, including the 'sales.ops.orders' naming convention. The description adds no syntax or format meaning beyond what structured data provides, which is the baseline case for a well-covered 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?

Names the resource (a table) and precisely what is returned — columns with SQL types and nullability — which distinguishes it from siblings like table_stats or list_tables. However, it uses a noun phrase with no verb and never explicitly contrasts itself with the other metadata tools.

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 when-to-use guidance, no prerequisite stated (the fact that the table name should come from list_tables lives only in the schema), and no mention of alternatives such as table_stats for row-level metrics. 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.

execute_sqlA

Run any SQL statement on OtterStax (SELECT, DDL, DML, COPY, CREATE SOURCE/STREAM). Tables must be fully qualified: alias.db.table or alias.db.schema.table. Returns {columns, rows, row_count}; all values come back as text or JSON numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesThe SQL statement to run

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses supported statement categories, the fully qualified table requirement, and the return shape, but omits important behavioral details such as permission requirements, mutation side effects, transaction behavior, and result limits.

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 two sentences, front-loaded with the core action and supported statement types, then the qualification rule and return shape. No sentence 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?

Given one parameter, no annotations, and no output schema, the description is largely complete: it covers purpose, statement types, qualification requirements, and return shape. It stops short of covering safety or error behavior for arbitrary SQL execution, but the core calling information is present.

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 parameter is already documented at baseline. The description adds meaningful semantics beyond the schema: tables must be fully qualified as alias.db.table or alias.db.schema.table, and it previews the return structure.

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: running SQL statements on OtterStax. Lists supported statement types (SELECT, DDL, DML, COPY, CREATE SOURCE/STREAM), which helps distinguish it from metadata siblings like list_tables and explain_query, though it does not explicitly name alternatives.

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 implies usage for executing SQL, but does not say when to prefer execute_sql over siblings such as explain_query or describe_table, nor does it provide exclusions or prerequisites beyond the qualification rule.

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

explain_queryB

Show the plan of a statement (EXPLAIN ). The OtterStax build you talk to may not support EXPLAIN yet; then this returns the server's error.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesThe statement to explain

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose one non-obvious behavioral trait: deployments lacking EXPLAIN support return the server's error rather than failing silently. However, it says nothing about the return shape (text plan vs rows), read-only safety, or whether the statement is actually executed, which matters for a tool taking arbitrary SQL.

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?

Two compact sentences with the core purpose front-loaded and the caveat trailing; no filler. Slightly terse given the missing return-format detail, but nothing is wasted.

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?

There is no output schema, so the description should explain what comes back; it gestures at this (a plan, or the server's error) but doesn't describe the plan's format or whether the query runs. Adequate but with a clear gap for a single-param diagnostic tool.

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 there is only one parameter ('sql', documented as 'The statement to explain'), so the schema already does the work. The description adds only the EXPLAIN framing via '<sql>', which is not meaningfully more than the schema provides.

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 (show the plan) and resource (a statement), and the parenthetical '(EXPLAIN <sql>)' pins down the exact SQL operation being wrapped. It doesn't explicitly differentiate itself from the sibling execute_sql, but an agent can infer the distinction from 'plan' vs execution.

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 implies when the tool is relevant (diagnosing a statement's plan) and warns about the unsupported-EXPLAIN case, but never says when to prefer it over execute_sql or list/describe siblings. Usage is only implied, not spelled out.

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

list_databasesA

List OtterStax databases. kind 'connection' is a registered backend (MySQL/PostgreSQL/ClickHouse) whose tables are named .. or ...; kind 'local' is an engine database.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses the two 'kind' categories and the alias-based naming pattern for connection backends, but it does not state that this is a pure read with no side effects, nor whether results are paginated or ordered.

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?

Front-loaded with the purpose, followed by two dense clauses that each carry real information. It is tight, though the second clause packs a lot of dotted-name syntax into one sentence.

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 no output schema, the description must hint at the return shape; it does so by explaining the 'connection' vs 'local' kinds and the naming format of backend tables. It stops short of describing the actual result structure (e.g., names plus kind fields).

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 the baseline is 4. The description's discussion of 'kind' describes returned data rather than an input, so there is nothing further for it to document on the parameter side.

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 ('List OtterStax databases') and then defines the two distinct kinds of database it can return, which clearly separates it from siblings like list_schemas and list_tables.

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: an agent can infer this is the entry point for discovering databases before drilling into schemas/tables, but the description never says when to call it versus list_schemas or search_objects, nor any preconditions.

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

list_schemasA

List the schemas inside a database: '' for a MySQL/ClickHouse connection, '.' for a PostgreSQL one. A local database has none.

ParametersJSON Schema
NameRequiredDescriptionDefault
databaseYesDatabase name from list_databases

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses that local databases return no schemas and that result naming differs by engine, but says nothing about permissions, pagination, or return shape.

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 tight sentence that front-loads the action and immediately follows with the engine-specific convention and the empty-result case. 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?

For a simple, annotation-free read tool with a single documented parameter and no output schema, the description supplies the key nuances (engine-dependent naming, empty case for local DBs). It is nearly complete, lacking only error/permission behavior.

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% and the single parameter is well documented as coming from list_databases. The description adds real value beyond the schema by explaining the '<db>' vs '<db>.<schema>' input convention depending on the connection type.

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 (schemas inside a database), and the format hints ('<db>' vs '<db>.<schema>') clarify what a schema means per engine. It does not explicitly differentiate itself from siblings like list_tables or list_databases, but the resource is unambiguous.

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 through the naming-format parenthetical and the 'A local database has none' note. There is no explicit when-to-use vs list_databases/list_tables guidance, nor any statement about prerequisites beyond the required 'database' parameter.

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

list_tablesB

List tables and views under the full SQL names to use in execute_sql.

ParametersJSON Schema
NameRequiredDescriptionDefault
schemaNoOnly this schema, as list_schemas shows it
databaseNoOnly this database

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden and discloses very little. It doesn't say whether an unfiltered call (0 required params) returns every table in every database, whether results are truncated or paginated, or what permissions are needed. Only the fact that both tables and views are returned is extra behavior disclosed.

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?

A single sentence, front-loaded with the verb and resource, with no filler. The phrase 'under the full SQL names' is slightly awkward but every clause carries meaning.

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?

The tool is simple: two optional params and no output schema, so the agent must rely on the description for return shape, which it only partially supplies ('full SQL names'). Listing tables and views is conveyed, but result shape and behavior on unfiltered calls remain unspecified.

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 both optional filters ('schema', 'database') are already documented in the schema, making 3 the baseline. The description adds nothing about the filters' syntax or scoping behavior 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?

The description names a specific verb and resource ('List tables and views') and adds scope with 'full SQL names', which separates it from list_schemas and list_databases. It does not explicitly name the sibling tools it is distinguished from, but the resource wording is enough for an agent to tell them apart.

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?

'to use in execute_sql' implies a workflow (find names, then query), which is useful implied usage. However, it gives no explicit guidance on when to prefer search_objects or describe_table, nor on when filters should be applied.

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

search_objectsA

Search tables or columns by name across all databases with a LIKE pattern. detail_level: names (minimal), summary (tables: column and row counts; columns: type), full (tables: also columns and indexes). summary/full on tables run COUNT(*) on each match.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results
patternNoLIKE pattern (% = any chars, _ = one char), case-insensitive%
object_typeYesObject type to search
detail_levelNoDetail: names, summary, fullnames

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses a non-obvious cost trait — that summary/full on tables run COUNT(*) per match — which is exactly the kind of performance signal an agent needs. It does not restate safety/auth profile, but search is self-evidently a read.

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?

Front-loaded with the core action, then the detail_level semantics, then the cost caveat. Dense and mostly waste-free, though the detail_level sentence is a run-on that could be tightened.

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 no output schema, the description must convey return content, and it largely does via the detail_level breakdown for both tables and columns. The main gap is the absent usage guidance versus sibling listing tools, which is a routing rather than a completeness defect.

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 above baseline by expanding detail_level beyond the schema's terse "Detail: names, summary, full", spelling out what each level actually returns for tables vs columns. It does not add much for pattern or limit beyond the schema.

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 (search) and resource (tables or columns by name) plus scope (across all databases) and mechanism (LIKE pattern). This clearly separates it from list_tables/describe_table/table_stats siblings, which enumerate or describe rather than pattern-search.

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?

Use case is implied by the pattern-based search framing, but the description never says when to prefer this over siblings like list_tables or describe_table, nor any exclusions or prerequisites. An agent must infer routing on its own.

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

table_statsA

Profile a table in one query: row count and, per column, distinct count, NULL count, MIN and MAX. Without columns every column is profiled, which scans the whole table on its backend.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesFull table name from list_tables
columnsNoOnly these columns

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does add a genuine behavioral trait: omitting 'columns' profiles every column and scans the whole table on the backend, which is an important cost signal. It omits auth requirements and any rate/pagination limits, but the scan warning is substantive.

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, the core output list front-loaded, followed immediately by the cost caveat. No filler and nothing to cut.

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 no output schema, the description adequately enumerates the return values and explains both parameters' behavior, including the omitted-columns default. Minor gaps remain around the scan's practical implications, but an agent has what it needs to call it.

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, but the description adds meaning beyond the schema by explaining the default behavior when 'columns' is omitted ('every column is profiled'), which the schema's 'Only these columns' does not state.

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 ('Profile') and resource ('a table'), and enumerates exactly what is computed: row count plus per-column distinct, NULL, MIN and MAX. This clearly separates it from describe_table, though it does not name that sibling to make the contrast 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 caveat about omitting columns implies the intended usage and cost, but there is no explicit statement of when to reach for this tool versus describe_table or execute_sql. Usage is inferred rather than guided.

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. 8 tool updatesv0.0.0
    • First observeddescribe_table
    • First observedexecute_sql
    • First observedexplain_query
    • First observedlist_databases
    • First observedlist_schemas
    • First observedlist_tables
    • First observedsearch_objects
    • First observedtable_stats

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation4/5

Each tool has a fairly clear role: discovery (list_databases/list_schemas/list_tables/describe_table), execution (execute_sql), planning (explain_query), and profiling (table_stats). However, execute_sql can already run any statement including EXPLAIN, so explain_query overlaps, and search_objects versus list_tables/describe_table have partially overlapping lookup purposes.

Naming Consistency4/5

Seven of eight tools follow a clean verb_noun pattern (explain_query, execute_sql, list_databases, list_schemas, list_tables, describe_table, search_objects). table_stats deviates to a noun_noun form, a minor inconsistency but still readable.

Tool Count5/5

Eight tools is well-scoped for a SQL database engine, covering discovery, execution, planning, and profiling without redundancy. Each tool earns its place.

Completeness4/5

The surface covers exploration (databases, schemas, tables, columns, search) plus execution, explain, and profiling, which is strong for a query engine. Minor gaps like query cancellation or session/connection management are absent but not blocking for typical agent workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to execute SQL queries and introspect PostgreSQL schemas, tables, and indexes with read-only safety by default. Supports optional write operations and works with Claude, LangChain, and other agents via stdio or HTTP transports.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to query MySQL, ClickHouse, Trino, and S3-compatible object stores through the same local daemon used by VSCode, including running SQL from files and browsing buckets.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to query and explore PostgreSQL and MySQL clusters from a single main configuration, with dynamic per-database routing, automatic database discovery and sync, table/schema inspection, and hierarchical write-rule protection that can block or allow specific SQL mutation operations.
    58 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to query Postgres, BigQuery and DuckDB read-only through policy-checked SQL, with AST-based guards that refuse writes and dangerous functions, column masking on the way out, and an audit log of every query. Also exposes schema browsing and query-planning tools so agents can see allowed tables, columns and costs before running anything.
    MIT