Skip to main content
Glama
andyhorvitz

gong-nl-db-mcp

by andyhorvitz

gong-nl-db-mcp

Read-only Claude Desktop access to the BairesDev gong-nl-db Cloud SQL Postgres instance.

This is an MCP server that colleagues install on their Mac. Once set up, they can ask Claude Desktop questions like "what tables are in gong-nl-db?" or "show me last week's top 10 accounts by call volume" and Claude will query the database directly — always read-only, always audited to their personal @bairesdev.com identity.


For colleagues (one-time setup, ~3 minutes)

You need:

That's it — the installer handles everything else.

macOS

Open Terminal and paste:

curl -LsSf https://raw.githubusercontent.com/andyhorvitz/gong-nl-db-mcp/main/scripts/install.sh | bash

Windows

Open PowerShell (search "PowerShell" in the Start menu) and paste:

irm https://raw.githubusercontent.com/andyhorvitz/gong-nl-db-mcp/main/scripts/install.ps1 | iex

Both installers will:

  1. Install uv (tiny Python runner) if you don't have it.

  2. Install Google Cloud SDK if you don't have it.

  3. Prompt you to sign in to Google — use your @bairesdev.com account.

  4. Register the gong-nl-db MCP server in Claude Desktop's config.

Restart Claude Desktop and try asking it: "List the schemas in gong-nl-db."

If you get a permissions error, ping Andy — he needs to grant your Google account access to the Cloud SQL instance (see the owner setup section below).

Troubleshooting

CERTIFICATE_VERIFY_FAILED / SSL errors in Claude Desktop's logs

This is the most common failure. The installer pins the server to Python 3.12 (--python 3.12 in the Claude Desktop config), which avoids the issue entirely on a fresh install. If you hit it anyway (e.g. you installed before this fix):

# 1. Clear the cached old package
uv cache clean gong-nl-db-mcp

# 2. Re-run the installer to update your Claude Desktop config
curl -LsSf https://raw.githubusercontent.com/andyhorvitz/gong-nl-db-mcp/main/scripts/install.sh | bash

# 3. Fully quit and reopen Claude Desktop (⌘Q, not just close the window)

serviceusage.services.use permission error / list_schemas hangs

The ADC quota project isn't set. Run:

# macOS
gcloud auth application-default set-quota-project planar-ray-494004-b8

# Windows (PowerShell)
gcloud auth application-default set-quota-project planar-ray-494004-b8

Then restart Claude Desktop. The installer now does this automatically, so a fresh install won't hit this.

"Could not determine IAM DB username"

You either aren't logged in or logged in with the wrong account. Run:

# macOS
gcloud auth application-default login

# Windows (PowerShell)
gcloud auth application-default login

Use your @bairesdev.com account when the browser opens, then restart Claude Desktop.

Failed to spawn process: No such file or directory

Claude Desktop launches with a stripped PATH that excludes ~/.local/bin (where uv installs its tools by default). Fix: symlink uvx into a directory Claude Desktop can see, then re-run the installer:

sudo ln -sf "$(which uvx)" /usr/local/bin/uvx
curl -LsSf https://raw.githubusercontent.com/andyhorvitz/gong-nl-db-mcp/main/scripts/install.sh | bash

The installer now writes the absolute path to uvx into the config automatically, so a fresh install won't hit this.

MCP server not appearing in Claude Desktop

  • macOS: Check ~/Library/Logs/Claude/ for errors. Verify the entry exists in ~/Library/Application Support/Claude/claude_desktop_config.json under mcpServers.gong-nl-db.

  • Windows: Check %APPDATA%\Claude\logs\ for errors. Verify the entry exists in %APPDATA%\Claude\claude_desktop_config.json under mcpServers.gong-nl-db.

Windows: PowerShell says "running scripts is disabled"

Run this once in PowerShell as Administrator, then retry the installer:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

What you can do

Claude will have these tools available under the gong-nl-db MCP server:

Tool

What it does

list_schemas

Show non-system schemas

list_tables(schema)

Show tables/views in a schema

describe_table(table, schema)

Show columns, types, nullability

sample_rows(table, schema, limit)

Return up to 50 sample rows

run_query(sql, limit)

Run a read-only SELECT / WITH / set-op (max 1000 rows)

explain_query(sql)

Return the query plan

search_transcripts(query, ...)

Full-text keyword search across transcript segments (FTS/GIN index)

user_activity(host_email, ...)

Per-rep daily call stats from the mv_user_daily materialized view

semantic_search(query, ...)

Meaning-based search using Vertex AI embeddings — finds conceptually related transcript chunks even without exact word matches

What you can't do

Every query is checked against a read-only allow-list before it reaches the database. Attempting INSERT, UPDATE, DELETE, DROP, TRUNCATE, COPY, CALL, VACUUM, SET, etc. will be rejected. Even if that layer somehow let a write through, the Postgres role you connect as only has SELECT grants and the transaction is explicitly READ ONLY. Four layers of defense — you are not going to accidentally drop prod.


Related MCP server: PostgreSQL MCP Server for Claude Desktop

For the owner (Andy): initial Cloud SQL setup

This is a one-time-per-instance setup. After this, each new colleague just needs the per-user steps below.

1. Enable IAM database authentication on the instance

gcloud sql instances patch gong-nl-db \
  --database-flags=cloudsql.iam_authentication=on,cloudsql.enable_pgaudit=on,pgaudit.log=read

2. Create the read-only Postgres role

Connect as a superuser (e.g. via cloud-sql-proxy + psql):

CREATE ROLE readonly_analysts;
GRANT CONNECT ON DATABASE <db> TO readonly_analysts;
GRANT USAGE ON SCHEMA public TO readonly_analysts;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_analysts;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
    GRANT SELECT ON TABLES TO readonly_analysts;
ALTER DATABASE <db> SET default_transaction_read_only = on;

Repeat the GRANT USAGE / GRANT SELECT / ALTER DEFAULT PRIVILEGES block for each additional schema you want to expose.

3. For each colleague (e.g. alice@bairesdev.com)

# GCP IAM — lets them authenticate to the instance
gcloud projects add-iam-policy-binding <PROJECT_ID> \
  --member=user:alice@bairesdev.com --role=roles/cloudsql.client
gcloud projects add-iam-policy-binding <PROJECT_ID> \
  --member=user:alice@bairesdev.com --role=roles/cloudsql.instanceUser

# Cloud SQL — registers them as an IAM DB user on the instance
gcloud sql users create alice@bairesdev.com \
  --instance=gong-nl-db --type=cloud_iam_user

Then, in Postgres:

GRANT readonly_analysts TO "alice@bairesdev.com";

4. Configure the installer

Edit scripts/install.sh and replace the REPLACE_ME placeholders with:

  • INSTANCE_CONNECTION_NAME<project>:<region>:gong-nl-db

  • DB_NAME — the Postgres database name

Commit, push to main. Next colleague who re-runs the one-liner picks up the new config.


Development

uv venv --python 3.12
uv pip install -e ".[dev]"
.venv/bin/pytest                       # run the safety test suite

Test the MCP server locally against a running Cloud SQL Auth Proxy or the live instance:

INSTANCE_CONNECTION_NAME=... DB_NAME=... \
  .venv/bin/gong-nl-db-mcp    # speaks MCP over stdio

Releasing

Tag-driven: git tag v0.2.0 && git push --tags triggers .github/workflows/release.yml, which publishes to PyPI. Colleagues' uvx gong-nl-db-mcp@latest picks it up automatically.

The safety guarantee

src/gong_nl_db_mcp/safety.py is the statement-level allow-list. Any change to that file must go through PR review. The file's git history is the audit trail for the read-only guarantee. See tests/test_safety.py for the allow/deny corpus.

Available Tools

9 tools
describe_tableA

Describe a table's columns, types, and nullability. Use this before writing a query against an unfamiliar table.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYes
schemaNopublic

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 discloses the output scope (columns, types, nullability) but does not mention whether it is a read-only operation, any potential errors, or performance considerations. This 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.

Conciseness5/5

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

The description is two sentences long and front-loaded with the core action. Every word earns its place, with no unnecessary 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?

The tool is simple, and the output schema presumably defines the return format, so the description does not need to explain return values. It covers the purpose, usage, and basic behavior. It is complete enough for a straightforward describe operation.

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

Parameters2/5

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

The schema description coverage is 0%, and the description does not explain the 'table' or 'schema' parameters. While 'table' is implied, 'schema' (with a default of 'public') is not mentioned at all, so the description fails to compensate for the lack of parameter documentation.

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?

The description clearly states the tool's purpose: to describe a table's columns, types, and nullability. This is a specific action on a specific resource, and it distinguishes itself from sibling tools like 'list_tables' (which lists tables) and 'sample_rows' (which returns data).

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?

The description explicitly says 'Use this before writing a query against an unfamiliar table,' which provides clear context for when to use the tool. However, it does not mention when not to use it or explicitly compare to alternatives, but this is sufficient for a simple introspection tool.

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

explain_queryA

Return the Postgres query plan for a SELECT statement. Useful for debugging slow queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/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 burden of disclosing behavior. It does not state whether the query is actually executed (e.g., EXPLAIN vs. EXPLAIN ANALYZE), whether it is read-only, or what permissions are required. This lack of disclosure is a significant gap.

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 concise sentences that front-load the core purpose and then add a use case. Every word earns its place, with no redundancy or filler.

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 presence of an output schema covers return values, but the description misses important context such as whether the plan is estimated or actually executed, any prerequisites, or limits. While simple, the tool's behavior is under-specified for a no-annotation case.

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?

The schema has only 'sql' with no description, and the description adds that it must be a SELECT statement, which is a key constraint. However, it does not explain syntax, options, or edge cases, so it provides only partial compensation for the 0% schema coverage.

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?

The description clearly states the tool's function: 'Return the Postgres query plan for a SELECT statement.' This is specific and distinguishes it from siblings like run_query (which executes queries) and describe_table (which describes table structures).

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?

The description says 'Useful for debugging slow queries,' providing clear context for when to use the tool. However, it does not explicitly name alternatives or state when not to use it, 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.

list_schemasA

List non-system schemas in the gong-nl-db database. Call this first when exploring.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosure. It reveals that the tool filters out system schemas, which is a meaningful behavioral trait beyond simply listing schemas. It does not state return format, but the output schema exists to cover that, and 'list' implies read-only.

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 short sentences, front-loaded with the action and resource. Every word earns its place ('non-system', database name, and the usage hint), with no redundancy.

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?

Given the tool's simplicity (0 parameters, output schema present), the description is complete: it states what the tool does, its scope, and when to call it. No further behavioral or result details are necessary.

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?

There are zero parameters, so the baseline is 4. The description correctly avoids any parameter details since there are none to explain.

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?

The description uses a specific verb ('List') and clearly specifies the resource ('non-system schemas in the gong-nl-db database'). It distinguishes from sibling tools like list_tables by targeting schemas rather than tables, and the scope 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 Guidelines4/5

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

The explicit instruction 'Call this first when exploring' provides clear context for when to use the tool. It does not mention alternatives or exclusions, but for a simple discovery tool, this guidance is sufficient.

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 schema. Use list_schemas first to find valid schema names. Defaults to 'public'.

ParametersJSON Schema
NameRequiredDescriptionDefault
schemaNopublic

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Without annotations, the description carries the transparency burden. It discloses that the tool defaults to 'public' and enumerates both tables and views, adding behavioral context beyond a generic listing tool. However, it does not mention permissions or whether system schemas are included, leaving some ambiguity.

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, succinct and front-loaded: first states the purpose, second provides usage guidance. No wasted words.

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 listing tool with an output schema, the description adequately covers what it does, the default behavior, and prerequisite tool. It doesn't mention potential filtering or permissions, but these are not critical given the tool's simplicity.

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 0%, but the description compensates by explaining the schema parameter's default ('public') and directing users to list_schemas for valid values. This adds meaning beyond the schema's default value, though not extensive.

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?

The description clearly states the tool lists tables and views in a schema, using the specific verb 'List' and resource 'tables and views'. It distinguishes from siblings like list_schemas and describe_table by focusing on schema-level object enumeration.

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?

It explicitly instructs to use list_schemas first to find valid schema names, providing an alternative tool for schema discovery. It also notes the default schema, giving guidance on when no parameter is needed. This is clear usage context without needing exclusions.

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

run_queryA

Run a read-only SQL query against gong-nl-db. Only SELECT, WITH (terminating in SELECT), and set-operation queries are allowed — any INSERT/UPDATE/DELETE/DDL is rejected before the query reaches the database. Results are capped at limit rows (max 1000).

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries full disclosure responsibility. It explicitly states the tool is read-only, describes rejection behavior for non-query statements (INSERT/UPDATE/DELETE/DDL), and discloses result capping at limit (max 1000). This fully covers safety and side-effect profile.

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 primary purpose, and every clause adds essential information about allowed queries, rejection, and result limits. No wasted words.

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?

For a SQL runner with 2 parameters and an existing output schema, the description covers all critical behaviors: allowed query types, rejection, and row cap. It does not need to explain return values (output schema exists) or enumerate every possible query. The description is complete for safe and correct invocation.

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 0%, so the description must add meaning. It explains the limit parameter's role in capping results and specifies a maximum (1000), which the schema does not. The sql parameter is self-evident from the description, though not elaborated further. This meaningfully compensates for the lack of schema descriptions.

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?

The description clearly states the tool runs a read-only SQL query against a specific database (gong-nl-db), with a specific verb and resource. It distinguishes from siblings by framing the tool as the direct SQL execution option, while siblings are schema exploration or semantic tools.

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?

The description defines clear usage boundaries: only SELECT, WITH (terminating in SELECT), and set-operation queries are allowed, with a 1000-row cap. It implies this is for read-only analysis, but does not explicitly name alternative tools for other operations (e.g., semantic search). This is clear context without explicit exclusions.

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

sample_rowsA

Return up to limit sample rows from a table (max 50). Useful for getting a feel for the data shape before running real analytical queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
tableYes
schemaNopublic

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/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. It discloses the row limit (max 50) but does not explicitly state that the operation is read-only, safe, or how sampling is performed (e.g., random vs. arbitrary). It implies non-destructive use but does not explicitly confirm the behavioral profile.

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 every sentence adds value. No waste or repetition.

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 and the description covers its main purpose and constraint. However, it omits the `schema` parameter and does not explicitly confirm read-only behavior. Given an output schema exists, return-value documentation is not needed, so the description is mostly complete but has a couple of minor gaps.

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 0%, so the description must compensate. It explains the `limit` and `table` parameters, but the `schema` parameter is not mentioned at all. This partial compensation places it at a mid-level score.

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?

The description clearly states the tool 'Return up to `limit` sample rows from a table', using a specific verb and resource. It also differentiates from sibling tools like run_query (full query execution) and describe_table (schema inspection) by emphasizing the 'sample' aspect.

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?

The description gives clear context on when to use the tool: 'before running real analytical queries'. It implies the alternative is to use a real query tool, but does not explicitly name alternatives or exclusion cases, 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.

search_transcriptsA

Full-text search across transcript_segments. Prefer this over ILIKE when searching for phrases in calls — it uses the GIN FTS index and is ~100x faster. Returns matching segments joined to call metadata. query supports websearch syntax: "pricing objection", pricing OR discount, -competitor. since / until are ISO-8601 dates or timestamps (optional). host_email filters to calls owned by one user (optional).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
sinceNo
untilNo
host_emailNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the behavioral disclosure burden. It explains the internal mechanism (GIN FTS index), return content (matching segments joined to call metadata), query syntax (websearch), and filtering options (since/until/host_email). This goes well beyond a simple 'search' statement.

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 compact yet information-dense: purpose in one clause, usage guidance in one sentence, and parameter syntax in one final sentence. There is no filler, and critical details are front-loaded. Every sentence serves a distinct purpose without redundancy.

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?

For a search tool with 5 parameters and an output schema, the description covers all essential aspects: what it searches, when to use it, how it behaves, and what each parameter means. The existence of an output schema relieves the need to describe return fields, and the description successfully equips an agent 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.

Parameters5/5

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

Despite the schema having no property descriptions, the description adds rich meaning to 4 of 5 parameters: query (websearch syntax with examples), since/until (ISO-8601 format), and host_email (filters by owner). Only limit is left to schema, but its default is visible and self-explanatory, so the description compensates admirably.

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?

The description opens with 'Full-text search across transcript_segments', which clearly states the tool's function and target resource. It further distinguishes itself from alternatives by highlighting the GIN FTS index and speed advantage, making its purpose unambiguous in the context of sibling tools.

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?

It provides explicit guidance: 'Prefer this over ILIKE when searching for phrases in calls' and explains why (GIN FTS index, ~100x faster). This gives clear when-to-use direction and explicitly names an alternative (ILIKE), satisfying the criterion for explicit alternatives and usage context.

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

user_activityA

Per-user daily call activity from the mv_user_daily materialized view — answers questions like 'how many calls did X have this week', 'avg talk ratio by person last month'. Filter by host_email (single user) or leave blank for team view. since/until are ISO-8601 dates (inclusive / exclusive). Returns one row per (host, date).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sinceNo
untilNo
host_emailNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full responsibility. It discloses the data source (materialized view), date semantics (inclusive/exclusive), return shape (one row per host+date), and filter behavior. It does not mention limit behavior or potential data staleness explicitly, but the materialized view hint and detailed row semantics cover most important behavioral aspects for a query 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?

The description is a compact single paragraph that front-loads the core purpose, uses clear punctuation (em dashes) to separate concerns, and includes illustrative examples without becoming verbose. Every sentence adds value.

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 description covers the data source, filtering options, date boundaries, and output granularity, which is largely sufficient for an agent to select and invoke it. The availability of an output schema likely covers column details, but the unexplained limit parameter leaves a small completeness gap for correct invocation in scenarios needing large result sets.

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 0%, so the description must fully explain parameters. It explains host_email (single user vs team), and since/until with ISO-8601 and inclusive/exclusive formatting. However, it does not describe the limit parameter at all, which is a gap given the absence of schema descriptions.

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?

The description clearly identifies the tool as providing per-user daily call activity from the mv_user_daily materialized view, with specific examples of questions it answers. It distinguishes itself from generic query and search sibling tools by focusing on user-centric call metrics.

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?

The description gives clear context for when to use the tool (e.g., 'how many calls did X have this week'), and explains the host_email filter for single-user vs team view. However, it does not name alternative sibling tools or explicitly state when not to use this tool, so it lacks exclusions but has strong usage context.

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

TDQS

A4.2/5.0
Disambiguation5/5

Each tool serves a distinct purpose: schema exploration, table inspection, sampling, query execution, query planning, keyword search, semantic search, and user activity. The two transcript search tools are clearly differentiated by their descriptions (FTS keyword vs. semantic meaning), and all other tools have non-overlapping boundaries.

Naming Consistency4/5

Most tools follow a clear verb_noun pattern (e.g., list_schemas, describe_table, search_transcripts), but user_activity and semantic_search deviate from this pattern, making naming slightly inconsistent. However, the names remain intuitive and readable.

Tool Count5/5

With 9 tools, the set is well-scoped for a database MCP server, covering schema exploration, data sampling, query execution, and specialized search/analysis. No clutter or redundancy; each tool earns its place.

Completeness4/5

The tool set covers the full analytical workflow: discover schemas/tables, inspect columns, sample data, run queries, explain slow queries, and perform targeted transcript/activity searches. The generic run_query provides an escape hatch for any missing operations, though a few niche endpoints like a direct user list are absent, which is a minor gap.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides Claude Desktop with secure access to multiple database connections, allowing users to query MySQL, PostgreSQL, SQLite, and SQL Server databases directly through natural language.
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables Claude Desktop to interact with PostgreSQL databases through natural language for schema exploration, data analysis, and query execution. Users can search schemas, describe tables, and perform read or write operations without needing to write manual SQL.
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables querying and managing a CRM database through natural language conversations with Claude Desktop.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/andyhorvitz/gong-nl-db-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server