gong-nl-db-mcp
Allows read-only querying of a Google Cloud SQL Postgres database with tools for listing schemas, tables, describing columns, sample rows, and running read-only SQL queries.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gong-nl-db-mcpshow me the top 10 accounts by call volume last week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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:
Claude Desktop (download)
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 | bashWindows
Open PowerShell (search "PowerShell" in the Start menu) and paste:
irm https://raw.githubusercontent.com/andyhorvitz/gong-nl-db-mcp/main/scripts/install.ps1 | iexBoth installers will:
Install
uv(tiny Python runner) if you don't have it.Install Google Cloud SDK if you don't have it.
Prompt you to sign in to Google — use your
@bairesdev.comaccount.Register the
gong-nl-dbMCP 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-b8Then 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 loginUse 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 | bashThe 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.jsonundermcpServers.gong-nl-db.Windows: Check
%APPDATA%\Claude\logs\for errors. Verify the entry exists in%APPDATA%\Claude\claude_desktop_config.jsonundermcpServers.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 CurrentUserWhat you can do
Claude will have these tools available under the gong-nl-db MCP server:
Tool | What it does |
| Show non-system schemas |
| Show tables/views in a schema |
| Show columns, types, nullability |
| Return up to 50 sample rows |
| Run a read-only SELECT / WITH / set-op (max 1000 rows) |
| Return the query plan |
| Full-text keyword search across transcript segments (FTS/GIN index) |
| Per-rep daily call stats from the |
| 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=read2. 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_userThen, 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-dbDB_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 suiteTest 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 stdioReleasing
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 toolsdescribe_tableA
Describe a table's columns, types, and nullability. Use this before writing a query against an unfamiliar table.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| schema | No | public |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | public |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| table | Yes | ||
| schema | No | public |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| since | No | ||
| until | No | ||
| host_email | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
semantic_searchA
Semantic / meaning-based search across call transcript chunks using Vertex AI embeddings (text-embedding-005) and cosine similarity. Use this when the user asks to find calls 'about' a topic or concept — e.g. 'calls where pricing came up', 'conversations about churn risk', 'mentions of competitor X'. Unlike search_transcripts (FTS keyword matching), this finds conceptually related content even without exact word matches. since/until are ISO-8601 dates (optional). host_email filters to one rep's calls (optional). limit caps results 1–20 (default 10).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| since | No | ||
| until | No | ||
| host_email | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with no annotations, the description discloses meaningful behavior: uses Vertex AI text-embedding-005 and cosine similarity, finds conceptually related content without exact matches, and specifies optional filters. It doesn't mention error cases or performance limitations, but the key behavioral characteristics are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured, with every sentence providing essential information: mechanism, use cases, differentiation from sibling, and parameter constraints. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description needn't detail return values. It covers the tool's purpose, technology, use cases, distinctions from alternatives, and all parameter ranges/behaviors, making it complete for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description carries the full burden. It explains all parameter semantics: since/until are ISO-8601 dates (optional), host_email filters to one rep's calls, limit caps results 1–20 (default 10). This adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly identifies a specific verb+resource: semantic search across call transcript chunks. It explicitly contrasts with search_transcripts (FTS keyword matching), distinguishing its purpose from its sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use: 'Use this when the user asks to find calls about a topic or concept' with concrete examples. It also names the alternative tool and explains the key difference, making the choice between semantic_search and search_transcripts unambiguous.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ||
| until | No | ||
| host_email | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
Query 40 databases from Claude, ChatGPT, or Cursor — on any device. Read-only, encrypted, audited.
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Ask data questions in natural language. Get SQL, insights, and charts from your databases.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides Claude Desktop with secure access to multiple database connections, allowing users to query MySQL, PostgreSQL, SQLite, and SQL Server databases directly through natural language.
- FlicenseNot gradedqualityDmaintenanceEnables 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.
- AlicenseAqualityDmaintenanceConnects Claude to any PostgreSQL database, enabling schema exploration, query execution, and performance analysis through natural conversation.7141MIT
- FlicenseNot gradedqualityDmaintenanceEnables querying and managing a CRM database through natural language conversations with Claude Desktop.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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