Gong MCP Server
The Gong MCP Server provides programmatic access to Gong.io sales call data through the Model Context Protocol, enabling AI assistants to query and analyze recorded conversations.
Core Capabilities:
List and search calls - Browse calls with date range filtering, workspace filtering, call IDs, and call hosts (primary users), with pagination support
Get call details - Access comprehensive information including participants, topics, trackers, and action items
Access call transcripts - Retrieve full speaker-attributed, timestamped transcripts with optional character offset and maximum length for pagination
Get AI-generated summaries - Obtain call summaries with key points, topics, and action items
List workspace users - View all users with details like name, email, title, and avatar URLs, with pagination support
Access user resource - Directly fetch a markdown-formatted list of all users via
gong://usersURI
Key Use Cases:
Analyze sales call conversations and performance
Extract specific information from transcripts
Track action items and follow-ups from customer conversations
Monitor team activities and search historical call data
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Gong MCP Serverlist my Gong calls from 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 MCP Server
An MCP (Model Context Protocol) server that provides access to your Gong.io data. Query calls, transcripts, users, keyword trackers, and more directly from Claude or any MCP-compatible client.
Tools Quick Reference
Tool | Description |
List calls with date/workspace filtering | |
Get metadata for a specific call | |
AI summary: key points, topics, action items | |
Full speaker-attributed transcript (paginated) | |
Rich call search — participant, customer, tracker, scope, duration, title, and more | |
Find calls involving a specific account/company by email domain | |
Find calls linked to specific CRM Opportunities | |
Free-text keyword search across transcript sentences | |
List keyword trackers (competitors, topics, etc.) | |
List workspaces and get IDs for use in other tools | |
List public call library folders | |
Get calls saved in a specific library folder | |
Get a specific user's profile | |
Search/filter users by IDs or creation date | |
List all workspace users |
Related MCP server: gong-mcp
Response Size & Context Limits
search_calls can return a lot of data. Under the hood it:
Auto-paginates up to ~5000 calls (50 API pages) per query
Applies client-side filters (participant, customer, tracker, duration, etc.) after pagination
Returns a rich per-call format (metadata + summary + topics + participants) by default
Guardrails built in:
If the formatted output would exceed
MAX_MCP_OUTPUT_LENGTH(default50000chars, configurable via env var), the tool automatically falls back to a compact table with a warning. You still get every call ID and title — drill in withget_call_summaryon specific ones.include: ["outline"]is expensive (~80KB per call). Avoid it in multi-call searches.Tracker data is filtered to only show trackers matching your
trackersfilter (or non-zero trackers if no filter) — no more walls of(0x)noise.
If your query hits the output cap, narrow it:
Tighten
fromDateTime/toDateTimeAdd
scope: "External"orscope: "Internal"Add
minDuration: 600to skip short no-showsAdd
customerNameortrackersfilterDrop heavy
includeoptions likeoutline
Prerequisites
Node.js 18+ or Docker
Gong API credentials (Access Key and Secret)
Log into Gong as an admin
Go to Company Settings → Ecosystem → API
Click Create API Key
Save both the Access Key and Secret (the secret is only shown once)
Option 1: npx (no install required)
npx gongio-mcpOption 2: Global npm install
npm install -g gongio-mcp
gongio-mcpOption 3: From source
git clone https://github.com/JustinBeckwith/gongio-mcp.git
cd gongio-mcp
npm install
npm run build
node dist/index.jsOption 4: Docker (build locally)
git clone https://github.com/JustinBeckwith/gongio-mcp.git
cd gongio-mcp
docker build -t gongio-mcp .
docker run --rm -i \
-e GONG_ACCESS_KEY=your-access-key \
-e GONG_ACCESS_KEY_SECRET=your-secret-key \
gongio-mcpSet your Gong credentials as environment variables:
export GONG_ACCESS_KEY="your-access-key"
export GONG_ACCESS_KEY_SECRET="your-secret-key"Or pass them inline:
GONG_ACCESS_KEY=your-key GONG_ACCESS_KEY_SECRET=your-secret npx gongio-mcpClaude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
Using npx:
{
"mcpServers": {
"gong": {
"command": "npx",
"args": ["gongio-mcp"],
"env": {
"GONG_ACCESS_KEY": "your-access-key",
"GONG_ACCESS_KEY_SECRET": "your-secret-key"
}
}
}
}Using Docker:
{
"mcpServers": {
"gong": {
"command": "docker",
"args": ["run", "--rm", "-i",
"-e", "GONG_ACCESS_KEY",
"-e", "GONG_ACCESS_KEY_SECRET",
"gongio-mcp"],
"env": {
"GONG_ACCESS_KEY": "your-access-key",
"GONG_ACCESS_KEY_SECRET": "your-secret-key"
}
}
}
}Claude Code
Using npx:
claude mcp add gong -e GONG_ACCESS_KEY=your-key -e GONG_ACCESS_KEY_SECRET=your-secret -- npx gongio-mcpUsing Docker (after docker build -t gongio-mcp .):
claude mcp add gong -e GONG_ACCESS_KEY=your-key -e GONG_ACCESS_KEY_SECRET=your-secret -- docker run --rm -i -e GONG_ACCESS_KEY -e GONG_ACCESS_KEY_SECRET gongio-mcpAvailable Tools
List calls with optional date range and workspace filters. Returns minimal call metadata (ID, title, date, duration).
Parameters:
Parameter | Required | Description |
| No | Start date in ISO 8601 format (e.g., |
| No | End date in ISO 8601 format (e.g., |
| No | Filter calls by workspace ID (use |
| No | Pagination cursor for next page |
Get the URL, timing, direction, scope, system, and other metadata for one call. Faster than get_call_summary when you only need call metadata.
Parameters:
Parameter | Required | Description |
| Yes | Gong call ID (numeric string) |
Get an AI-generated summary including brief overview, key points, topics, action items, and detailed outline. This is the recommended way to understand a call — use get_call_transcript only if you need exact quotes.
Parameters:
Parameter | Required | Description |
| Yes | Gong call ID (numeric string) |
Get the raw transcript with speaker attribution. Transcripts are paginated (default 10KB) to prevent context overflow — use maxLength and offset to navigate.
Parameters:
Parameter | Required | Description |
| Yes | Gong call ID (numeric string) |
| No | Maximum characters to return (default: 10000, max: 100000) |
| No | Character offset to start from for pagination (default: 0) |
Search calls with advanced filters including participant lookup, customer name search, and rich content selection. Automatically paginates through all results and returns participant info, brief summary, and topics by default.
Parameters:
Date & workspace
Parameter | Description |
| Start date in ISO 8601 format |
| End date in ISO 8601 format |
| Filter by workspace ID (use |
| Array of specific call IDs to retrieve |
Host / participant
Parameter | Description |
| Host user IDs (server-side) |
| Host emails (case-insensitive) |
| Exclude these host user IDs |
| Any participant (host/attendee/invitee) user IDs |
| Exclude calls where any participant has these user IDs |
| Any participant emails (case-insensitive) |
| Exclude calls where any participant has these emails |
Content & customer
Parameter | Description |
| Fuzzy match against CRM account name, external email domains, and titles |
| Substring match on call title (case-insensitive) |
| Calls where matching tracker(s) fired (count > 0). Workspace-specific — use |
Metadata
Parameter | Description |
|
|
|
|
| Conferencing platform (e.g., |
| Language code (e.g., |
| Minimum duration in seconds |
| Maximum duration in seconds |
Response shape
Parameter | Description |
| Additional data to return — see table below |
include options:
Value | What it adds | Size |
| AI-extracted key points as bullets | ~5KB/call |
| Keyword/smart tracker hits with counts | ~3KB/call |
| AI-curated highlight clips grouped by theme | ~3KB/call |
| Talk time per participant | ~1KB/call |
| Public comments left on the call | varies |
| CRM account/opportunity linkage (HubSpot, Salesforce) | ~1KB/call |
| Full section-by-section outline with items | ~80KB/call (large) |
| Audio/video URLs (valid 8 hours) | ~3KB/call |
Defaults (always returned): participants, brief summary, and topics — ~3KB per call.
Filter behavior notes:
Filters combine with AND logic.
primaryUserIds+participantUserIdscompose: primary narrows server-side, participant post-filters.customerNamematches any of: CRM account Name field, external participant email domain, or call title (case-insensitive substring).trackersnames are workspace-specific — callget_trackersfirst to see what's configured. Match is case-insensitive substring (so"competitor"matches both"Competitors"and"Competitor Mentions").When
trackersfilter is set, the relevant tracker content is auto-included and the output shows only the trackers you asked about. Without a filter, only non-zero trackers are shown.An empty result returns
"No calls found"rather than an error.
See Response Size & Context Limits for how large-result fallback works.
Find calls involving a specific account or company by matching the email domains of external participants. The Gong API does not natively support filtering by account name (a known gap) — this tool fetches calls in the date range and post-filters on parties[].emailAddress. Auto-paginates the underlying /v2/calls/extensive endpoint up to maxCalls.
Use this when:
A prospect has multiple email domains (
acme.com,acme.io, regional TLDs) and you need them allYou need to join external enrichment data (e.g., "all prospects on Klaviyo" from BuiltWith / Clearbit / a vendor-stack graph) — resolve to a domain list upstream and pass it here
Domain-based matching is more reliable than CRM Account names that drift across systems
Parameters:
Parameter | Required | Description |
| Yes | Email domains, e.g. |
| No | Start date in ISO 8601 format |
| No | End date in ISO 8601 format |
| No | Filter by workspace ID |
| No | Pre-narrow by call host user IDs (faster, server-side) |
| No | Also match where a CRM Account context object name contains a domain root (e.g. |
| No | Max calls to fetch & filter (default: 500, max: 5000). Auto-paginates underlying API. |
| No | Pagination cursor (advanced) |
Cost note: This is fetch-then-filter. A 90-day window with no other narrowing typically pages through 1–5 API calls. Combine with primaryUserIds to bound cost on long ranges.
Find calls linked to specific CRM Opportunities by ID or name substring. Requires Gong-CRM integration (Salesforce / HubSpot) — calls without CRM linkage will not match.
Use this when:
You want every call on a specific deal —
opportunityIds: ["006xxxxx"]is the most precise optionOpportunity names are descriptive (e.g.
"Acme Q4 Renewal") and you want fuzzy matching across renamed/duplicated opportunities
Parameters:
Parameter | Required | Description |
| At least one of | CRM Opportunity IDs (e.g., Salesforce 18-character IDs) |
| At least one of | Name substrings (case-insensitive) matched against the Name field of Opportunity context objects |
| No | Start date in ISO 8601 format |
| No | End date in ISO 8601 format |
| No | Filter by workspace ID |
| No | Pre-narrow by call host user IDs |
| No | Max calls to fetch & filter (default: 500, max: 5000) |
| No | Pagination cursor (advanced) |
Cost note: Uses the same fetch-then-filter pattern as search_calls_by_account. CRM context lookup adds no extra API calls — it rides on the same /v2/calls/extensive request with context: "Extended".
Free-text keyword search across call transcript sentences within a bounded date range. Two-phase: (1) /v2/calls/extensive narrows the call set by date + optional primaryUserIds / domains, (2) /v2/calls/transcript fetches transcripts for the narrowed set and returns sentence-level matches with speaker attribution and timestamps.
Prefer Gong Trackers for recurring terms. For competitor names, ESP/tech terms (Klaviyo, Braze, Iterable, Postscript, Attentive, Sendgrid, Customer.io, etc.), and other terms you'll search for repeatedly — set them up as Gong Trackers in the UI (one-time, ~30 minutes for ~20 terms). Then use get_trackers + search_calls + get_call_summary instead. Trackers are server-side, the cost is dramatically lower, and they surface counts and timestamps natively. Use search_transcripts for ad-hoc one-offs.
Cost guard: Date ranges greater than 30 days require additional narrowing via primaryUserIds or domains. A 6-month unbounded scan would burn API quota and is rejected at the schema level.
Parameters:
Parameter | Required | Description |
| Yes | Keywords to search for. Each must be at least 2 characters. |
| Yes | Start of date window (ISO 8601). |
| Yes | End of date window (ISO 8601). |
| Required if window > 30 days and | Narrow to calls hosted by these users before scanning |
| Required if window > 30 days and | Narrow to calls with external parties from these domains before scanning |
| No | Filter by workspace ID |
| No | Default |
| No | Default |
| No | Max calls to scan (default: 500). |
| No | Max sentence matches returned per call (default: 10) — prevents context overflow on calls with many hits. |
Returns: Sentence-level matches grouped by call, including speaker name and affiliation (when available), keyword matched, timestamp (mm:ss), and the sentence snippet.
List all keyword tracker definitions including tracked phrases, affiliation (whose speech is tracked), and filter queries. Explains tracker hits visible in get_call_summary output.
Parameters:
Parameter | Required | Description |
| No | Filter trackers by workspace ID (use |
List all Gong workspaces with their IDs and names. Use these IDs as filters in list_calls, search_calls, get_trackers, and other tools. Most companies have 1–3 workspaces (e.g., by region or product line).
Parameters: None
Get a specific user's profile including name, email, title, phone, and settings. Useful for resolving user IDs returned from call data.
Parameters:
Parameter | Required | Description |
| Yes | Gong user ID (numeric string) |
Search and filter users by IDs or creation date. More flexible than list_users for resolving specific user IDs from call data in bulk.
Parameters:
Parameter | Required | Description |
| No | Array of specific user IDs to look up |
| No | Filter users created after this datetime (ISO 8601) |
| No | Filter users created before this datetime (ISO 8601) |
| No | Pagination cursor |
List all Gong users in your workspace. Returns name, email, and title for each user.
Parameters:
Parameter | Required | Description |
| No | Pagination cursor |
| No | Whether to include user avatar URLs |
List all public Gong call library folders for a workspace. Returns folder IDs and names used with get_library_folder_calls. Private and archived folders are not returned.
Parameters:
Parameter | Required | Description |
| Yes | Workspace ID to list folders for (use |
Get all calls saved in a specific Gong library folder. Returns call IDs, titles, curator notes, and snippet timing for clips. Call IDs can be passed directly to get_call_summary or get_call_transcript.
Parameters:
Parameter | Required | Description |
| Yes | Library folder ID (numeric string, from |
Available Resources
Returns a markdown-formatted list of all users in your Gong workspace. Useful for resolving user IDs found in call data.
Parameters: None
Example Prompts
Once connected to Claude, you can ask:
"List my Gong calls from last week"
"Get the details for call 123456789"
"Show me a summary of call 123456789"
"Get the transcript for call 789012"
"What workspaces do we have in Gong?"
"What keywords is Gong tracking for competitors?"
"What call library folders do we have in Gong?"
"Show me the calls in the 'Best Discovery Calls' library folder"
"Who are all the users in our Gong workspace?"
"Search for calls hosted by Justin (user ID 232255198215877499) in July 2025"
"Look up these user IDs: 111, 222, 333"
"Show me all calls from the past 60 days with anyone at acme.com or acme.io"
"Find every call attached to opportunity 006xxxxx"
"Find Q3 calls where prospects mentioned Klaviyo or Braze, narrowed to John's calls"
Contributing
Interested in contributing? Check out CONTRIBUTING.md for development setup, testing instructions, and guidelines.
The repository includes gong-openapi.json — a local copy of the Gong API OpenAPI spec. It's useful as a reference when adding new tools: use it to look up endpoint paths, parameter names, and response shapes without leaving your editor. The latest spec can be downloaded from the Gong API documentation.
Available Tools
15 toolsget_callARead-only
Get metadata for a specific Gong call including URL, direction, scope, system, and duration. Faster than get_call_summary when you only need call metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| callId | Yes | Gong call ID (numeric string up to 20 digits) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is clear. The description adds value by disclosing the performance characteristic (faster than get_call_summary) and listing the specific metadata fields returned, which are behavioral traits beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that communicates purpose, content, and usage guidance without any wasted words. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple metadata retrieval tool with one parameter and read-only annotations, the description is largely complete. It lists the key fields returned and provides a usage hint. Minor gap: no output schema exists, so the response structure is not fully specified, but the listed fields mitigate this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single callId parameter, including a pattern and description. The description does not add any extra meaning about the parameter, so the baseline of 3 is appropriate since the schema already fully documents it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get metadata for a specific Gong call' with a specific verb and resource, and enumerates the metadata fields (URL, direction, scope, system, duration). It distinguishes from siblings by noting it is faster than get_call_summary when only metadata is needed, making it unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance: use this tool when only call metadata is needed, and names the alternative get_call_summary as a slower option. This meets the 'explicit when/alternatives' criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_call_summaryARead-only
Get an AI-generated summary of a single call including brief overview, key points, topics, action items, and detailed outline. This is the recommended way to understand a call - use get_call_transcript only if you need exact quotes.
| Name | Required | Description | Default |
|---|---|---|---|
| callId | Yes | Gong call ID (numeric string up to 20 digits) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds the 'AI-generated' nature, implying non-deterministic output, but doesn't disclose additional behavioral traits like potential latency or variability. This is acceptable given the annotations, but minimal beyond them.
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 purpose, and every clause adds value. There is no redundant phrasing or filler, making it highly efficient.
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 simple one-parameter schema, the presence of readOnly/openWorld annotations, and the absence of an output schema, the description is complete. It explains what the summary includes and offers clear usage guidance relative to sibling tools, so an agent can invoke it correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter callId is fully documented in the schema with type, pattern, and description. The tool description does not add any extra meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get an AI-generated summary of a single call' and enumerates the summary components (brief overview, key points, topics, action items, detailed outline). It also distinguishes itself from the sibling get_call_transcript, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance: 'This is the recommended way to understand a call - use get_call_transcript only if you need exact quotes.' This tells the agent when to use this tool and when to prefer an alternative, which is excellent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_call_transcriptARead-only
Get the raw transcript for a single call with speaker-attributed text. Only use this when you need exact quotes - prefer get_call_summary for understanding call content. Transcripts are truncated by default (10KB) to prevent context overflow - use maxLength and offset to paginate.
| Name | Required | Description | Default |
|---|---|---|---|
| callId | Yes | Gong call ID (numeric string up to 20 digits) | |
| offset | No | Character offset to start from (default: 0). Use to paginate through long transcripts. | |
| maxLength | No | Maximum characters to return (default: 10000, ~10KB). Longer transcripts are truncated with pagination info. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds meaningful behavioral details: default truncation to 10KB and pagination mechanism to avoid context overflow. This goes beyond annotations, though it stops short of describing the full return schema.
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 concise sentences. The first states purpose; the second provides usage and behavioral caveats. No superfluous content, front-loaded with action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with excellent annotations and a fully descriptive schema, the description covers purpose, when to use, and pagination behavior. The implied return format (speaker-attributed text) is sufficient given the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents all three parameters (100% coverage). The description adds value by explaining the rationale for truncation (context overflow prevention) and the pagination workflow, which reinforces the semantics of maxLength and offset.
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 retrieves a raw transcript with speaker-attributed text for a single call. It explicitly distinguishes itself from get_call_summary by specifying use cases (exact quotes vs. understanding content).
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: 'Only use this when you need exact quotes' and names the preferred alternative (get_call_summary). Also explains when and how to paginate (maxLength/offset) for long transcripts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_folder_callsARead-only
Get all calls saved in a specific Gong library folder. Returns call IDs, titles, curator notes, and snippet timing. Use list_library_folders to find folder IDs. Call IDs can be passed to get_call_summary or get_call_transcript.
| Name | Required | Description | Default |
|---|---|---|---|
| folderId | Yes | Library folder ID (numeric string, from list_library_folders) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is known. The description adds meaningful behavioral detail by specifying the returned fields (call IDs, titles, curator notes, snippet timing) and stating 'all calls' in a folder, which implies full retrieval. This goes beyond what annotations provide, though it doesn't mention pagination or rate limits. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, return fields, usage prerequisites/downstream. Front-loaded with the action, then details. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one required parameter, no output schema, read-only annotations). The description covers purpose, parameter source, returned fields, and how the output integrates with other tools. Given the complexity, this is complete enough for 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?
Schema description coverage is 100%: the folderId parameter is fully described as 'Library folder ID (numeric string, from list_library_folders)' with a regex pattern. The tool description repeats this source ('Use list_library_folders to find folder IDs') but adds no new meaning beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get all calls saved in a specific Gong library folder.' It uses a specific verb (Get) and resource (calls in a library folder), and distinguishes itself from siblings like list_calls by the folder scoping. It also lists the returned data (call IDs, titles, curator notes, snippet timing), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on prerequisites: 'Use list_library_folders to find folder IDs.' It also suggests downstream usage: 'Call IDs can be passed to get_call_summary or get_call_transcript.' While it does not explicitly name an alternative to avoid, the folder-specific scope clearly implies when this tool is appropriate vs. list_calls. Fairly 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.
get_trackersARead-only
List keyword tracker definitions configured in a workspace, including every tracked phrase and which side is tracked (company/customer). Call this before using the trackers filter on search_calls so you know what names exist — workspace admins set these up and naming varies (e.g., "Competitors" vs "Competitor Mentions"). Also useful to explain tracker hits that appear in call summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Filter trackers by workspace ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's 'List' operation is consistent. It adds valuable context beyond annotations: naming varies by workspace, admins configure these, and it includes which side is tracked. This helps the agent understand potential variability in the data without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence followed by a short 'Also useful' clause. It front-loads the core purpose and keeps the additional guidance relevant. Slightly verbose due to the example of naming variations, but earns its place by clarifying a real-world ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (one optional parameter) and no output schema, the description is complete. It states what is returned (every tracked phrase and side tracked), when to call it (before search_calls with trackers filter), and why it's useful (explaining tracker hits). No critical context is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers workspaceId with a description ('Filter trackers by workspace ID') and pattern, so schema coverage is 100%. The tool description adds context that trackers are 'configured in a workspace' but does not clarify behavior when workspaceId is omitted beyond the schema's optional status. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List keyword tracker definitions configured in a workspace, including every tracked phrase and which side is tracked (company/customer).' It uses a specific verb ('List') and identifies the resource ('keyword tracker definitions'), fully distinguishing it from sibling tools like search_calls or get_call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Call this before using the trackers filter on search_calls so you know what names exist' and 'Also useful to explain tracker hits that appear in call summaries.' This clarifies when to use it and its relationship to search_calls, giving the agent concrete context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_userARead-only
Get a specific user profile including name, email, title, phone, and settings. Use to resolve user IDs returned from call data.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | Gong user ID (numeric string up to 20 digits) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds the list of fields returned and the use case, but no additional behavioral traits such as error handling or rate limits. Given the annotations, this is sufficient 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 concise sentences. The first sentence specifies the action and result, the second gives the primary use case. No unnecessary 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 read tool with one parameter and no output schema, the description conveys the purpose, the data returned, and the typical use case. It does not need to explain return structure because the fields are listed. The annotations further clarify safety. Overall, it is complete for 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 description covers 100% of the parameter (userId: 'Gong user ID (numeric string up to 20 digits)'). The description does not add format or constraints beyond the schema, though it does provide context that the ID comes from call data. This context is minor, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a specific user profile and lists the included fields (name, email, title, phone, settings). It distinguishes itself from sibling tools like list_users and search_users by specifying the use case of resolving a specific user ID from call 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 provides a clear usage context: 'Use to resolve user IDs returned from call data.' This tells the agent when to use this tool, but does not explicitly exclude alternatives or mention any other tools, 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_callsARead-only
List Gong calls with optional date filtering. Returns minimal call metadata (ID, title, date, duration). Use get_call_summary for details or get_call_transcript for full transcript.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor for fetching next page of results | |
| toDateTime | No | End date/time filter in ISO 8601 format (e.g., 2024-01-31T23:59:59Z). Must be after fromDateTime if both specified. | |
| workspaceId | No | Filter calls by workspace ID (numeric string up to 20 digits) | |
| fromDateTime | No | Start date/time filter in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Must be before toDateTime if both specified. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and open-world hints. The description adds value by specifying the return payload is minimal metadata (ID, title, date, duration) and that date filtering is supported, giving context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are front-loaded with the core purpose, followed by return info and alternative guidance. Every sentence contributes meaningful content 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?
The description sufficiently covers the tool's purpose, return behavior, and alternatives for a listing function. Pagination and workspace filtering are documented in the schema, and the annotations cover safety and world assumptions, making it complete for tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all four parameters with detailed descriptions, so the baseline is 3. The description only mentions 'optional date filtering', which adds no new semantic detail beyond what the schema already provides for fromDateTime/toDateTime.
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?
Clearly states it 'List Gong calls' with a specific verb and resource. The mention of 'optional date filtering' scopes the functionality, and the directive to use get_call_summary or get_call_transcript for other needs distinguishes it from 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?
Provides explicit alternatives for when details or transcripts are needed, guiding tool selection. However, it does not explicitly mention when to use list_calls versus search_calls or other search variants, so it falls short of a full exclusion set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_library_foldersARead-only
List all public Gong call library folders for a workspace. Returns folder IDs and names to use with get_library_folder_calls. Use list_workspaces to find workspace IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | Yes | Workspace ID to list folders for (use list_workspaces to find IDs) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description's additional note that it lists 'all public' folders adds scoping behavior. It also discloses that the return includes folder IDs and names, which is useful given no output schema. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, and no filler. Every sentence contributes either the action, the output, or the prerequisite.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter list operation with good annotations, the description fully covers purpose, output, and usage context. The relationship to get_library_folder_calls and list_workspaces gives adequate integration guidance. No output schema exists, so the description appropriately covers return content.
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 100%, with workspaceId well-described including the hint to use list_workspaces. The tool description repeats this hint but adds no new parameter semantics. Baseline 3 is appropriate because the schema carries the burden.
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') with a clear resource ('public Gong call library folders') and scope ('for a workspace'). It also distinguishes itself from siblings by explaining the output's purpose ('to use with get_library_folder_calls'), making it clear this is a lookup tool for folder IDs.
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 clearly states a prerequisite ('Use list_workspaces to find workspace IDs') and provides downstream context ('to use with get_library_folder_calls'). It doesn't explicitly contrast with alternative tools like list_calls, but the context makes the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersARead-only
List all Gong users in the organization. Returns name, email, title, and user IDs. Useful when you need a Gong user ID for search_calls filters like primaryUserIds, though for most "find calls by this person" cases you can pass their email directly to primaryUserEmails or participantEmails instead.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor for fetching next page of results | |
| includeAvatars | No | Whether to include user avatar URLs in the response |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description need not restate safety. It adds return-field info but does not disclose pagination behavior or whether deactivated users are included. The added value is modest, consistent with a simple read-only list 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?
Two sentences only. The first states purpose and return fields; the second gives usage guidance and alternatives. Every word earns its place, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema and good annotations, the description covers return fields and usage context. It lacks explicit mention of pagination mechanics, though the cursor parameter implies it, making it nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (cursor and includeAvatars have descriptions), so the baseline is 3. The description does not add extra meaning to the parameters beyond what the schema already provides, so no higher score is warranted.
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 all Gong users in the organization, specifies return fields (name, email, title, user IDs), and distinguishes from siblings like get_user and search_users by emphasizing the 'all users' scope and its role in providing IDs for search_calls filters.
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 says when to use the tool (need a Gong user ID for search_calls filters) and provides a concrete alternative for most cases (pass email directly to primaryUserEmails/participantEmails), giving clear when/why guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspacesARead-only
List all Gong workspaces with their IDs and names. Use workspace IDs as filters in list_calls, search_calls, get_trackers, and other tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating the operation is safe and non-destructive. The description adds value by specifying that it returns 'all' workspaces and includes 'IDs and names,' which complements the openWorldHint by confirming the complete dataset is exposed. It does not detail pagination or authentication, but for a read-only list with no parameters, this level of transparency is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant words. The first sentence immediately states the core action and output. The second sentence provides practical guidance on using the results, earning its place. It is front-loaded and easily scannable, exemplifying concise and structured documentation.
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 (no parameters, no output schema), the description is complete. It tells the user what the tool does, what it returns, and how to use the returned data. The sibling context reinforces that workspace IDs are needed for filtering other tools, and this description fully addresses that context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so schema coverage is trivially 100%. The baseline for 0 params is 4, and the description adds no parameter-specific meaning since there are none. The description appropriately focuses on the output, and the lack of parameters needs no further explanation.
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 with a specific verb and resource: 'List all Gong workspaces with their IDs and names.' It effectively distinguishes itself from sibling tools like list_users and list_calls by focusing on workspaces. The addition of 'with their IDs and names' clarifies the output scope, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when this tool is useful: 'Use workspace IDs as filters in list_calls, search_calls, get_trackers, and other tools.' This provides clear context on how to apply the results. However, it does not explicitly mention when not to use it or name alternative tools, though no other sibling lists workspaces, so the guidance is sufficient but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_callsARead-only
Search Gong calls with rich filters. The primary tool for narrowing down calls before drilling in with get_call_summary or get_call_transcript.
Supported filters:
When: fromDateTime, toDateTime (ISO 8601). Always prefer a date range — unbounded queries pull every call in the workspace.
Who hosted: primaryUserIds, primaryUserEmails, excludePrimaryUserIds.
Who participated (host OR attendee OR invitee): participantUserIds, participantEmails, excludeParticipantUserIds, excludeParticipantEmails.
Customer/topic: customerName (CRM account name, email domain, or title substring), titleContains, trackers (see note below).
Metadata: scope (External/Internal), direction, system (Zoom/Meet/…), language (eng/jpn/…), minDuration and maxDuration in seconds.
Output shape: include (array of keyPoints, trackers, highlights, speakers, comments, context, outline, media). Parties + brief + topics are always returned.
Behavior:
Auto-paginates up to ~5000 calls. If a user asks for a broad question, guide them to narrow with a date range, scope, minDuration, or customerName first.
trackers filter does case-insensitive substring match on tracker names. Names are workspace-specific — call get_trackers first to see what's configured before guessing.
When the rich output would exceed the output cap, the tool auto-falls back to a compact table showing all IDs/titles. Use get_call_summary on specific IDs to go deeper.
Filters compose with AND logic (primaryUserIds + customerName = hosted by user X on customer Y calls).
Usage pattern: narrow with search_calls → drill into specific calls with get_call_summary (AI summary) or get_call_transcript (exact quotes).
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Filter by call scope: External (customer-facing), Internal (team), or Unknown. | |
| system | No | Filter by conferencing system (e.g., "Zoom", "Google Meet"). Case-insensitive substring match. | |
| callIds | No | Filter by specific call IDs. Array of numeric strings. | |
| include | No | Additional per-call data beyond the defaults (parties, brief, topics). Start lean and add fields as needed — each extra field multiplies response size by number of calls. Options: keyPoints (~5KB/call), trackers (~3KB/call, auto-added when trackers filter is used), highlights (~3KB/call), speakers (talk time, ~1KB/call), comments (varies), context (CRM links, ~1KB/call), outline (~80KB/call, AVOID unless you need full structure of one call), media (audio/video URLs). | |
| language | No | Filter by language code (e.g., "eng", "jpn"). Case-insensitive exact match. | |
| trackers | No | Filter calls where at least one matching tracker fired (count > 0). Tracker names are matched case-insensitive substring and vary by workspace — call get_trackers first to discover what is configured. | |
| direction | No | Filter by call direction: Inbound, Outbound, Conference, or Unknown. | |
| toDateTime | No | End date/time filter in ISO 8601 format (e.g., 2024-01-31T23:59:59Z). Strongly recommended alongside fromDateTime. Must be after fromDateTime if both specified. | |
| maxDuration | No | Maximum call duration in seconds. | |
| minDuration | No | Minimum call duration in seconds. Useful for filtering out no-shows or misfired meetings. | |
| workspaceId | No | Filter calls by workspace ID (numeric string up to 20 digits) | |
| customerName | No | Filter by customer/account name (case-insensitive substring match). Searches CRM account name, external participant email domains, and call titles. | |
| fromDateTime | No | Start date/time filter in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Strongly recommended — without a date range, the tool pulls every call in the workspace. Must be before toDateTime if both specified. | |
| titleContains | No | Filter calls whose title contains this substring (case-insensitive). | |
| primaryUserIds | No | Filter by primary user IDs (call hosts only, server-side). Use participantUserIds to find calls where a user was any participant. | |
| participantEmails | No | Filter by participant email addresses (case-insensitive). Matches calls where any participant has a matching email. | |
| primaryUserEmails | No | Filter by host email (case-insensitive). Alternative to primaryUserIds when you have emails instead of user IDs. | |
| participantUserIds | No | Filter by participant user IDs. Matches calls where any participant (host, attendee, or invitee) has a matching Gong user ID. Requires a date range for optimal performance. | |
| excludePrimaryUserIds | No | Exclude calls hosted by these user IDs. | |
| excludeParticipantEmails | No | Exclude calls where any participant has a matching email (case-insensitive). | |
| excludeParticipantUserIds | No | Exclude calls where any participant has a matching user ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, the description reveals auto-pagination up to ~5000 calls, automatic fallback to a compact table when output exceeds caps, AND-composition of filters, case-insensitive tracker matching, and performance implications of the include fields. This is rich behavioral disclosure.
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 long but appropriately structured: a one-line purpose, grouped filter list, behavioral notes, and a usage pattern. Headings and bullets make it scannable, and every section adds actionable guidance beyond the schema.
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 complexity (21 parameters, no output schema), the description covers return shape (always-returned fields, output size behavior), pagination limits, fallback behavior, and performance guidance. It gives the agent everything needed to decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning beyond the schema by grouping filters (e.g., 'Who hosted', 'Who participated'), warning about unbounded date ranges, recommending get_trackers first, and providing size estimates for include options (e.g., outline ~80KB/call). These are practical semantic additions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Search Gong calls with rich filters' and identifies itself as 'the primary tool for narrowing down calls before drilling in with get_call_summary or get_call_transcript.' This clearly distinguishes it from siblings like list_calls and the account/opportunity-specific search 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 explicitly frames the tool as the primary narrowing step and names get_call_summary and get_call_transcript as follow-up alternatives. It does not explicitly exclude related search tools like search_calls_by_account, but it gives strong contextual guidance for when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_calls_by_accountARead-only
Find calls involving a specific account/company by matching email domains of external participants. The Gong API does not natively support filtering by account name — this tool fetches calls in the date range and post-filters on parties[].emailAddress. Auto-paginates up to maxCalls. For external tech-stack joins (e.g., "all calls with prospects on Klaviyo"), resolve domains upstream and pass them here.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor (advanced). | |
| domains | Yes | Email domains (e.g., ["acme.com", "acme.io"]). A call matches if any external participant has an email at one of these domains. | |
| maxCalls | No | Maximum calls to fetch and filter (default: 500). Auto-paginates underlying API. | |
| toDateTime | No | End date/time in ISO 8601 format. | |
| workspaceId | No | Filter by workspace ID. | |
| fromDateTime | No | Start date/time in ISO 8601 format. | |
| primaryUserIds | No | Pre-narrow by call host user IDs (faster, server-side). | |
| matchCrmAccount | No | Also match calls where a CRM Account context object name contains a domain root (e.g., "acme" from "acme.com"). Requires CRM integration. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds valuable behavior beyond that: it fetches calls and post-filters on parties[].emailAddress, and auto-paginates up to maxCalls. It also discloses the API limitation. This is more than the bare minimum, though it doesn't mention performance implications or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, implementation detail, and use-case extension. The description is front-loaded with the main purpose and contains no fluff or repetition of schema fields.
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 8 parameters, full schema coverage, and annotations that establish safety, the description covers the core algorithm, pagination behavior, and an advanced use case. It does not specify default date ranges or what happens when no date range is provided, but the schema covers those details. Overall, it's sufficiently complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema descriptions are detailed for each parameter. The description adds some relational context (e.g., domains matching parties[].emailAddress, auto-pagination tied to maxCalls) but mostly reinforces what the schema already states. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find calls involving a specific account/company by matching email domains of external participants.' It clearly distinguishes this tool from siblings like list_calls and search_calls_by_opportunity by its domain-based account matching approach.
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 explains when to use this tool (account/company domain filtering) and notes that the Gong API doesn't natively support account-name filtering, giving context for the workaround. It also mentions a specific external tech-stack use case. However, it doesn't explicitly contrast with sibling tools such as search_calls or search_calls_by_opportunity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_calls_by_opportunityARead-only
Find calls linked to specific CRM Opportunities by ID or name substring. Requires Gong-CRM integration (Salesforce/HubSpot) — calls without CRM linkage will not match. Provide opportunityIds OR opportunityNames (or both).
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | ||
| maxCalls | No | Max calls to fetch and filter (default: 500). | |
| toDateTime | No | End date/time in ISO 8601 format. | |
| workspaceId | No | Filter by workspace ID. | |
| fromDateTime | No | Start date/time in ISO 8601 format. | |
| opportunityIds | No | CRM Opportunity IDs (e.g., Salesforce 18-character IDs). | |
| primaryUserIds | No | Pre-narrow by call host user IDs. | |
| opportunityNames | No | Opportunity name substrings (case-insensitive). Matches if the Opportunity Name field contains any of these. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses the prerequisite of CRM integration and the fact that non-linked calls won't match, which is a behavioral limitation not implied by the schema. It does not contradict the annotations and adds useful context about matching semantics.
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 purpose, then immediately covers prerequisites and parameter usage. Every clause earns its place, and there is no redundant restatement of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with no output schema, the description covers the essential usage context: what it finds, the required integration, and parameter relationships. It omits pagination and workspace filtering details, but those are adequately described in the schema, so the description is sufficiently complete for this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has high coverage (88%) and already describes each parameter individually. The description adds critical relational semantics by stating 'Provide opportunityIds OR opportunityNames (or both)', which clarifies the mutual exclusivity that is not evident from the schema alone.
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 'Find' and clearly identifies the resource 'calls' filtered by 'CRM Opportunities' via ID or name substring. It distinguishes itself from siblings like search_calls_by_account by focusing on opportunities, and the mention of 'calls without CRM linkage will not match' adds operational context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a clear prerequisite ('Requires Gong-CRM integration') and the matching condition ('calls without CRM linkage will not match'), and instructs to provide opportunityIds OR opportunityNames. However, it does not explicitly name alternative tools for non-CRM scenarios, so it lacks explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_transcriptsARead-only
Free-text keyword search across call transcripts within a bounded date range. Use for ad-hoc searches like "calls mentioning competitor X". For recurring terms, prefer setting up Gong Trackers in the UI and using search_calls + get_call_summary — Trackers are server-side and dramatically cheaper. Date ranges > 30 days require additional narrowing via primaryUserIds or domains. Returns sentence-level matches with speaker attribution and timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | No | Narrow to calls with external parties from these email domains before scanning. | |
| keywords | Yes | Keywords to search for. Whole-word, case-insensitive by default. | |
| maxCalls | No | Max calls to scan (default: 500). | |
| wholeWord | No | Match whole words only. Default true (recommended). | |
| toDateTime | Yes | REQUIRED. End of date window (ISO 8601). | |
| workspaceId | No | ||
| fromDateTime | Yes | REQUIRED. Start of date window (ISO 8601). | |
| caseSensitive | No | Match keywords case-sensitively. Default false. | |
| primaryUserIds | No | Narrow to calls hosted by these users before scanning. | |
| maxMatchesPerCall | No | Max sentence matches returned per call (default: 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds valuable behavioral context: it returns sentence-level matches with speaker attribution and timestamps, and it mentions the >30-day narrowing requirement (a performance/scope behavior). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, usage/alternative guidance, and a critical constraint plus output summary. No fluff, front-loaded with the core action. It is concise yet information-dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description communicates the return format ('sentence-level matches with speaker attribution and timestamps') and the key scoping constraint. It also differentiates from 14 siblings. Minor gaps include lack of pagination details or error behavior, but for a read-only search tool with a well-annotated schema, this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 90%, so most parameters are already described. The description adds meaning beyond the schema by tying keywords to an ad-hoc use case, and by specifying that primaryUserIds/domains are required for narrowing when date ranges exceed 30 days—a constraint not evident from the individual parameter descriptions. This enriches the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb+resource: 'Free-text keyword search across call transcripts within a bounded date range.' It explicitly differentiates from sibling tools by framing this as the ad-hoc transcript search while pointing to search_calls + get_call_summary for recurring tracker-based searches. The example 'calls mentioning competitor X' concretely illustrates the intended use.
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 when-to-use ('Use for ad-hoc searches') and when-not-to-use ('For recurring terms, prefer... Trackers'), naming specific alternative tools. It also gives a critical operational constraint ('Date ranges > 30 days require additional narrowing via primaryUserIds or domains') that informs parameter decisions. This is model-tier guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_usersARead-only
Search and filter users by IDs or creation date. More flexible than list_users for resolving specific user IDs from call data.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor for fetching next page | |
| userIds | No | Specific user IDs to look up | |
| createdToDateTime | No | Filter users created before this datetime (ISO 8601) | |
| createdFromDateTime | No | Filter users created after this datetime (ISO 8601) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile and incomplete-result behavior. The description adds the filtering-by-IDs-or-creation-date capability but does not disclose additional behavioral specifics like pagination mechanics or response format. Given the annotations, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary verb and resource, and includes a comparative clause for differentiation. Every word earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with four optional parameters and no output schema, the description sufficiently conveys its core purpose and use case, and the annotations cover safety and open-world behavior. It does not explicitly mention pagination, but openWorldHint already signals that. The description is complete enough for most scenarios, though adding a note about pagination would make it fully comprehensive.
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 100%, so the schema already documents all four parameters. The description mentions 'IDs or creation date' which loosely maps to the userIds and createdFrom/ToDateTime params, but it does not add syntax or format detail beyond what the schema provides. Baseline of 3 is warranted.
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: 'Search and filter users by IDs or creation date.' It also differentiates from the sibling tool list_users by noting it is 'More flexible than list_users for resolving specific user IDs from call data,' which provides a specific and distinct purpose.
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 names an alternative (list_users) and specifies when this tool is preferable: for resolving specific user IDs from call data. This provides clear guidance on when to use this tool versus list_users, fulfilling the 'when/when-not/alternatives' criterion.
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.
17 tool updates
v1.0.1- Added
get_call - Removed
get_call_details - Added
get_call_summary - Added
get_call_transcript - Added
get_library_folder_calls - Added
get_trackers - Removed
get_transcripts - Added
get_user - Changed
list_calls6 fields changed- added
Input schema / properties / cursor / minLengthAdded value: +1 - changed
Input schema / properties / fromDateTime / descriptionPrevious value: -"Start date/time filter in ISO 8601 format (e.g., 2024-01-01T00:00:00Z)"New value: +"Start date/time filter in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Must be before toDateTime if both specified." - added
Input schema / properties / fromDateTime / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$" - changed
Input schema / properties / toDateTime / descriptionPrevious value: -"End date/time filter in ISO 8601 format (e.g., 2024-01-31T23:59:59Z)"New value: +"End date/time filter in ISO 8601 format (e.g., 2024-01-31T23:59:59Z). Must be after fromDateTime if both specified." - added
Input schema / properties / toDateTime / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$" - added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Filter calls by workspace ID (numeric string up to 20 digits)", + "pattern": "^\\d{1,20}$", + "type": "string" +}
- Added
list_library_folders - Changed
list_users2 fields changed- added
Input schema / properties / cursor / minLengthAdded value: +1 - added
Input schema / properties / includeAvatarsAdded value: +{ + "description": "Whether to include user avatar URLs in the response", + "type": "boolean" +}
- Added
list_workspaces - Changed
search_calls26 fields changed- changed
Input schema / properties / callIds / descriptionPrevious value: -"Filter by specific call IDs"New value: +"Filter by specific call IDs. Array of numeric strings." - added
Input schema / properties / callIds / items / patternAdded value: +"^\\d{1,20}$" - removed
Input schema / properties / cursorRemoved value: -{ - "description": "Pagination cursor for fetching next page of results", - "type": "string" -} - added
Input schema / properties / customerNameAdded value: +{ + "description": "Filter by customer/account name (case-insensitive substring match). Searches CRM account name, external participant email domains, and call titles.", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / directionAdded value: +{ + "description": "Filter by call direction: Inbound, Outbound, Conference, or Unknown.", + "enum": [ + "Inbound", + "Outbound", + "Conference", + "Unknown" + ], + "type": "string" +} - added
Input schema / properties / excludeParticipantEmailsAdded value: +{ + "description": "Exclude calls where any participant has a matching email (case-insensitive).", + "items": { + "format": "email", + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / excludeParticipantUserIdsAdded value: +{ + "description": "Exclude calls where any participant has a matching user ID.", + "items": { + "pattern": "^\\d{1,20}$", + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / excludePrimaryUserIdsAdded value: +{ + "description": "Exclude calls hosted by these user IDs.", + "items": { + "pattern": "^\\d{1,20}$", + "type": "string" + }, + "type": "array" +} - changed
Input schema / properties / fromDateTime / descriptionPrevious value: -"Start date/time filter in ISO 8601 format"New value: +"Start date/time filter in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Strongly recommended — without a date range, the tool pulls every call in the workspace. Must be before toDateTime if both specified." - added
Input schema / properties / fromDateTime / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$" - added
Input schema / properties / includeAdded value: +{ + "description": "Additional per-call data beyond the defaults (parties, brief, topics). Start lean and add fields as needed — each extra field multiplies response size by number of calls. Options: keyPoints (~5KB/call), trackers (~3KB/call, auto-added when trackers filter is used), highlights (~3KB/call), speakers (talk time, ~1KB/call), comments (varies), context (CRM links, ~1KB/call), outline (~80KB/call, AVOID unless you need full structure of one call), media (audio/video URLs).", + "items": { + "enum": [ + "keyPoints", + "trackers", + "highlights", + "speakers", + "comments", + "context", + "outline", + "media" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / languageAdded value: +{ + "description": "Filter by language code (e.g., \"eng\", \"jpn\"). Case-insensitive exact match.", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / maxDurationAdded value: +{ + "description": "Maximum call duration in seconds.", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / minDurationAdded value: +{ + "description": "Minimum call duration in seconds. Useful for filtering out no-shows or misfired meetings.", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / participantEmailsAdded value: +{ + "description": "Filter by participant email addresses (case-insensitive). Matches calls where any participant has a matching email.", + "items": { + "format": "email", + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / participantUserIdsAdded value: +{ + "description": "Filter by participant user IDs. Matches calls where any participant (host, attendee, or invitee) has a matching Gong user ID. Requires a date range for optimal performance.", + "items": { + "pattern": "^\\d{1,20}$", + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / primaryUserEmailsAdded value: +{ + "description": "Filter by host email (case-insensitive). Alternative to primaryUserIds when you have emails instead of user IDs.", + "items": { + "format": "email", + "type": "string" + }, + "type": "array" +} - changed
Input schema / properties / primaryUserIds / descriptionPrevious value: -"Filter by primary user IDs (the call hosts)"New value: +"Filter by primary user IDs (call hosts only, server-side). Use participantUserIds to find calls where a user was any participant." - added
Input schema / properties / primaryUserIds / items / patternAdded value: +"^\\d{1,20}$" - added
Input schema / properties / scopeAdded value: +{ + "description": "Filter by call scope: External (customer-facing), Internal (team), or Unknown.", + "enum": [ + "External", + "Internal", + "Unknown" + ], + "type": "string" +} - added
Input schema / properties / systemAdded value: +{ + "description": "Filter by conferencing system (e.g., \"Zoom\", \"Google Meet\"). Case-insensitive substring match.", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / titleContainsAdded value: +{ + "description": "Filter calls whose title contains this substring (case-insensitive).", + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / toDateTime / descriptionPrevious value: -"End date/time filter in ISO 8601 format"New value: +"End date/time filter in ISO 8601 format (e.g., 2024-01-31T23:59:59Z). Strongly recommended alongside fromDateTime. Must be after fromDateTime if both specified." - added
Input schema / properties / toDateTime / patternAdded value: +"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$" - added
Input schema / properties / trackersAdded value: +{ + "description": "Filter calls where at least one matching tracker fired (count > 0). Tracker names are matched case-insensitive substring and vary by workspace — call get_trackers first to discover what is configured.", + "items": { + "minLength": 1, + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Filter calls by workspace ID (numeric string up to 20 digits)", + "pattern": "^\\d{1,20}$", + "type": "string" +}
- Added
search_calls_by_account - Added
search_calls_by_opportunity - Added
search_transcripts - Added
search_users
5 tool updates
v1.0.0- First observed
get_call_details - First observed
get_transcripts - First observed
list_calls - First observed
list_users - First observed
search_calls
TDQS
Scored across 15 tools
Most tools have clearly distinct purposes, but search_calls and search_calls_by_account overlap somewhat since search_calls already supports customerName filtering via email domain. However, the custom account search tool explicitly explains its unique post-filtering role, reducing confusion.
All tools follow a consistent verb_noun pattern using snake_case: list_*, get_*, search_*. Multi-word names like search_calls_by_account and get_library_folder_calls are consistent with this pattern. There are no mixed conventions or vague verbs.
15 tools is within the well-scoped range for a comprehensive read-only API integration. Each tool covers a specific need such as call search, summary, transcript, user lookup, trackers, workspaces, and library folders, without unnecessary bloat.
The tool set covers the full lifecycle of exploring Gong call data: searching/filtering calls, retrieving metadata/summaries/transcripts, resolving users, managing trackers, and accessing library folders. There are no obvious dead ends—every tool feeds into others or serves a standalone purpose.
Maintenance
Related MCP Connectors
Gong MCP — wraps the Gong API v2 (OAuth)
Read calls, contacts, users, teams and numbers; tag calls and create or update contacts.
- RulebaseOAuthco.rulebase
CX ops: read conversations, calls and QA evaluations from Zendesk, Freshdesk, Five9 and more.
AI call analysis and voice agents for sales teams. Signup, usage, agents and call data over MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables integration with Gong's sales platform through MCP, providing access to tools and services for sales engagement tracking and analytics.1MIT
- AlicenseAqualityDmaintenanceMCP server for the Gong API, enabling search and retrieval of calls, transcripts, attendees, next steps, and more.7535 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables querying Gong calls and transcripts through natural language, allowing users to list calls with date filtering and retrieve detailed transcripts with participant context.MIT
- AlicenseAqualityDmaintenanceProvides tools to access Gong call data, including listing calls, retrieving details and transcripts, searching across transcripts, and listing users.510 npmMIT