Skip to main content
Glama
alludium

Harmonic MCP Server

by alludium

Harmonic MCP Server

MCP (Model Context Protocol) server for the Harmonic AI API - company and person enrichment for VC deal flow.

Features

This MCP server provides 13 tools for interacting with Harmonic's API:

Search Tools

  • harmonic_search_companies - Natural language search for companies (e.g., "AI startups in San Francisco")

  • harmonic_search_typeahead - Quick autocomplete search by company name or domain

  • harmonic_find_similar_companies - Find companies similar to a given company

Company Tools

  • harmonic_lookup_company - Look up company by domain, LinkedIn URL, or other identifiers

  • harmonic_get_company - Get full company details by ID

  • harmonic_get_company_employees - Get employees with filtering (founders, executives, etc.)

  • harmonic_get_company_connections - Find team network connections to a company

Person Tools

  • harmonic_lookup_person - Look up person by LinkedIn URL

  • harmonic_get_person - Get full person details by ID

Saved Search Tools

  • harmonic_list_saved_searches - List all saved searches/views

  • harmonic_get_saved_search_results - Get results from a saved search

  • harmonic_get_saved_search_net_new_results - Get only new results since last check (for deal flow monitoring)

  • harmonic_clear_saved_search_net_new - Mark net new results as "seen"

Related MCP server: Harmonic MCP Server

Installation

No installation required when using npx (see Usage below).

Optional: Global Install

npm install -g @alludium/harmonic-mcp-server

Optional: From Source

git clone https://github.com/alludium/harmonic-mcp-server.git
cd harmonic-mcp-server
npm install
npm run build

Configuration

Set your Harmonic API key as an environment variable:

export HARMONIC_API_KEY=your_api_key_here

When using with Claude Desktop or Claude Code, set the key in the MCP server configuration's env block (see Usage section below).

Usage

With Claude Desktop

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "harmonic": {
      "command": "npx",
      "args": ["-y", "@alludium/harmonic-mcp-server"],
      "env": {
        "HARMONIC_API_KEY": "your_api_key_here"
      }
    }
  }
}

With Claude Code

Add to your Claude Code MCP settings:

{
  "mcpServers": {
    "harmonic": {
      "command": "npx",
      "args": ["-y", "@alludium/harmonic-mcp-server"],
      "env": {
        "HARMONIC_API_KEY": "your_api_key_here"
      }
    }
  }
}

Development Mode

# Run with tsx for development
HARMONIC_API_KEY=your_key npm run dev

API Coverage

Based on the Harmonic API documentation, this MCP covers:

Endpoint

Tool

Type

GET /search/search_agent

harmonic_search_companies

Entry point

GET /search/typeahead

harmonic_search_typeahead

Entry point

GET /search/similar_companies/{id}

harmonic_find_similar_companies

Discovery

POST /companies

harmonic_lookup_company

Entry point

GET /companies/{id}

harmonic_get_company

Detail

GET /companies/{id}/employees

harmonic_get_company_employees

Detail

GET /companies/{id}/userConnections

harmonic_get_company_connections

Detail

POST /persons

harmonic_lookup_person

Entry point

GET /persons/{id}

harmonic_get_person

Detail

GET /savedSearches

harmonic_list_saved_searches

Entry point

GET /savedSearches:results/{id}

harmonic_get_saved_search_results

Detail

GET /savedSearches:netNewResults/{id}

harmonic_get_saved_search_net_new_results

Monitoring

POST /savedSearches:clearNetNew/{id}

harmonic_clear_saved_search_net_new

Monitoring

Response Formats

All tools support two response formats:

  • json (default): Structured data for programmatic use

  • markdown: Human-readable formatted output

Use the response_format parameter to switch between formats.

Rate Limiting

The Harmonic API has a rate limit of 10 requests per second. This MCP server implements automatic throttling and retry logic for rate-limited requests.

Error Handling

The server provides clear, actionable error messages:

  • 400: Bad request with parameter guidance

  • 401: Authentication failure with API key setup instructions

  • 404: Resource not found with alternative lookup suggestions

  • 429: Rate limit exceeded with retry guidance

  • 5xx: Server errors with wait/retry suggestions

Example Workflows

Find and Research a Company

1. harmonic_lookup_company { website_domain: "stripe.com" }
2. harmonic_get_company_employees { company_id: "142540", employee_group_type: "FOUNDERS_AND_CEO" }
3. harmonic_get_person { person_id: "person_id_from_step_2" }

Find Similar Companies

1. harmonic_search_companies { query: "fintech payment processing" }
2. harmonic_find_similar_companies { company_id: "id_from_step_1", size: 10 }
3. harmonic_get_company { company_id: "each_similar_company_id" }

Monitor Deal Flow

1. harmonic_list_saved_searches {}
2. harmonic_get_saved_search_results { search_id: "search_id_from_step_1", size: 50 }

License

MIT

Available Tools

13 tools
harmonic_clear_saved_search_net_newClear Saved Search Net New ResultsA
Idempotent

Mark all net new results as "seen" so they won't appear in future calls to harmonic_get_saved_search_net_new_results.

When to use: Call this AFTER you've processed net new results to reset the queue. Future calls to harmonic_get_saved_search_net_new_results will only return results that become new matches after this point.

Input:

  • search_id: The saved search ID

Workflow:

  1. harmonic_get_saved_search_net_new_results → get new matches

  2. Process/analyze the results

  3. harmonic_clear_saved_search_net_new → mark as seen

  4. Repeat on schedule

ParametersJSON Schema
NameRequiredDescriptionDefault
search_idYesSaved search ID or URN

TDQS

A4.5/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond annotations: it explains that this tool marks results as 'seen' to prevent them from appearing in future calls, which clarifies the 'reset' effect. Annotations provide hints (e.g., not read-only, idempotent, non-destructive), but the description enhances this by detailing the queue management aspect. No contradiction with annotations is present.

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

Conciseness5/5

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

The description is well-structured with clear sections (purpose, usage, input, workflow), front-loading the core action. Each sentence adds value without redundancy, such as explaining the tool's effect and integration in a workflow. 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.

Completeness5/5

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

Given the tool's moderate complexity (single parameter, no output schema), the description is complete: it covers purpose, usage guidelines, behavioral effects, and workflow integration. Annotations provide additional hints (e.g., idempotent), and the description fills gaps by explaining the 'reset' functionality, making it sufficient for an agent to use the tool effectively.

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

Parameters3/5

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

Schema description coverage is 100%, with the input schema fully documenting the 'search_id' parameter. The description adds minimal semantics by listing 'search_id' in the 'Input' section but does not provide additional meaning (e.g., format examples or sourcing guidance) beyond what the schema already states. This meets the baseline for high schema coverage.

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

Purpose5/5

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

The description explicitly states the specific action ('Mark all net new results as "seen"') and the resource ('saved search net new results'), clearly distinguishing it from sibling tools like harmonic_get_saved_search_net_new_results (which retrieves results) and harmonic_get_saved_search_results (which may retrieve all results). The purpose is precise and avoids tautology.

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

Usage Guidelines5/5

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

The description includes a dedicated 'When to use' section that explicitly states to call this tool 'AFTER you've processed net new results to reset the queue,' and it names the alternative tool (harmonic_get_saved_search_net_new_results) for comparison. It also provides a workflow with step-by-step guidance, making usage context clear and actionable.

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

harmonic_find_similar_companiesFind Similar CompaniesA
Read-onlyIdempotent

Find companies similar to a given company. Core use case for VCs: "I like this company, find me more like it."

What it does: Uses Harmonic's similarity algorithm to find companies with similar characteristics (industry, stage, business model, etc.).

Input:

  • company_id: Either numeric ID (e.g., "1") or full URN (e.g., "urn:harmonic:company:1")

Returns (JSON): { "data": ["urn:harmonic:company:763898", "urn:harmonic:company:11578442", ...], "count": number }

Next Steps: Use harmonic_get_company with each URN to get full company details.

Example workflow:

  1. Find a company you like: harmonic_lookup_company with domain

  2. Get similar: harmonic_find_similar_companies with that company's ID

  3. Get details: harmonic_get_company for each similar company

ParametersJSON Schema
NameRequiredDescriptionDefault
company_idYesCompany ID or URN to find similar companies for
sizeNoNumber of similar companies to return (default: 25, max: 1000)
response_formatNoOutput format: "json" or "markdown"json

TDQS

A4.7/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond what annotations provide: it explains the similarity algorithm ('characteristics like industry, stage, business model'), describes the return format in detail with JSON structure, and provides 'Next Steps' guidance. While annotations cover safety (readOnly, non-destructive, idempotent), the description adds practical implementation details. No contradiction with annotations exists.

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

Conciseness5/5

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

The description is well-structured with clear sections (What it does, Input, Returns, Next Steps, Example workflow), front-loads the core purpose, and every sentence earns its place by providing distinct value. It's comprehensive without being verbose, using bullet points and JSON examples efficiently.

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

Completeness5/5

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

Given the tool's moderate complexity, rich annotations, and 100% schema coverage, the description provides excellent completeness: it explains the algorithm, provides input examples, details the return format (compensating for no output schema), gives next steps, and includes a full workflow example. It covers all necessary aspects for an agent to understand and use this tool effectively.

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

Parameters4/5

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

With 100% schema description coverage, the baseline is 3, but the description adds meaningful context: it clarifies company_id accepts 'either numeric ID or full URN' with examples, explains the algorithm behind similarity matching, and provides workflow context that helps understand parameter usage. However, it doesn't add significant value beyond the well-documented schema for size and response_format parameters.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verb ('find') and resource ('companies similar to a given company'), and explicitly distinguishes it from siblings by mentioning the core VC use case and referencing harmonic_lookup_company and harmonic_get_company as complementary tools. It goes beyond the title to explain the algorithm and use case.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool versus alternatives through the 'Example workflow' section, which shows harmonic_lookup_company should be used first to find a company, then this tool for similarity, then harmonic_get_company for details. It also mentions this is the 'core use case for VCs' and references sibling tools by name.

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

harmonic_get_companyGet CompanyA
Read-onlyIdempotent

Get company details by ID with field filtering for optimal response size.

Input:

  • company_id: Numeric ID (e.g., "1") or full URN (e.g., "urn:harmonic:company:1")

  • include_fields: Optional array of fields to include (e.g., ["name", "funding", "headcount"])

Response sizes:

  • Default (basic fields): ~3KB per company

  • All fields: ~368KB per company (not recommended)

Default fields returned: name, description, website, headcount, location, funding, stage, founding_date, company_type, customer_type, contact, socials

When to use:

  • After harmonic_search_companies to get full details

  • After harmonic_find_similar_companies

  • When you have a company ID from another source

Note: Uses batch endpoint internally for proper field filtering. The GET endpoint ignores include_fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
company_idYesCompany ID or URN
include_fieldsNoSpecific fields to include (e.g., ["name", "funding", "headcount"])
response_formatNoOutput format: "json" or "markdown"json

TDQS

A4.7/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond annotations. While annotations cover read-only, open-world, idempotent, and non-destructive traits, the description discloses response size details (~3KB default, ~368KB all fields), field filtering mechanics, and the note about using a batch endpoint internally. This provides practical implementation insights not captured in annotations.

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

Conciseness5/5

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

The description is well-structured with clear sections (Input, Response sizes, Default fields, When to use, Note), front-loaded with the core purpose. Every sentence adds value—no fluff or repetition. It efficiently communicates essential information in a compact format.

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

Completeness5/5

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

Given the tool's complexity (3 parameters, no output schema) and rich annotations, the description is complete. It covers purpose, usage, parameters, behavioral details (response sizes, field filtering), and practical notes. The absence of an output schema is compensated by explaining default fields and response formats, making it sufficient for an agent to use the tool effectively.

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

Parameters4/5

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

With 100% schema description coverage, the baseline is 3. The description adds meaningful semantics: it clarifies company_id accepts both numeric IDs and full URNs with examples, explains include_fields for optimal response size with an example, and mentions default fields returned. However, it doesn't cover the response_format parameter, leaving a minor gap.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get company details by ID with field filtering for optimal response size.' It specifies the verb ('Get'), resource ('company details'), and key functionality ('field filtering'), distinguishing it from siblings like harmonic_search_companies (search) or harmonic_get_company_connections (connections).

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

Usage Guidelines5/5

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

The description explicitly provides usage guidelines under 'When to use:' with three specific scenarios: after harmonic_search_companies, after harmonic_find_similar_companies, or when you have a company ID from another source. This directly addresses when to use this tool versus alternatives, including named sibling tools.

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

harmonic_get_company_connectionsGet Team ConnectionsA
Read-onlyIdempotent

Find which team members have connections to a company. Key for warm introductions in VC deal flow.

What it does: Returns your team's network connections to people at the target company, showing who knows whom and how they're connected.

Returns: { "data": [ { "user_urn": "urn:harmonic:user:17115", "target_person_urn": "urn:harmonic:person:73639745", "target_person_email_address": "mike@harmonic.ai", "connection_sources": ["EMAIL", "LINKEDIN"] } ] }

Connection sources:

  • EMAIL: Connected via email correspondence

  • LINKEDIN: LinkedIn connection

  • CALENDAR: Met via calendar events

Use case: Before reaching out to a company, find if anyone on your team has a warm intro path.

ParametersJSON Schema
NameRequiredDescriptionDefault
company_idYesCompany ID or URN
firstNoNumber of connections to return (default: 10, max: 100)
afterNoCursor for pagination
response_formatNoOutput format: "json" or "markdown"json

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true. The description adds valuable context beyond annotations: it explains what 'connection_sources' mean (EMAIL, LINKEDIN, CALENDAR with definitions), specifies the return format with a detailed example, and clarifies the tool's purpose for 'warm introductions in VC deal flow.' While it doesn't mention rate limits or auth needs, it provides meaningful behavioral context that annotations don't cover.

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

Conciseness5/5

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

The description is well-structured with clear sections (What it does, Returns, Connection sources, Use case), front-loads the purpose, and every sentence adds value. It efficiently communicates key information without redundancy, making it easy for an agent to parse and understand.

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

Completeness5/5

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

Given the tool's moderate complexity (4 parameters, 100% schema coverage), rich annotations, and no output schema, the description provides excellent completeness. It explains the tool's purpose, usage context, return format with examples, connection source meanings, and practical application. This compensates well for the lack of output schema and gives the agent sufficient context to use the tool effectively.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters are documented in the schema. The description doesn't add any parameter-specific information beyond what's in the schema (e.g., it doesn't explain company_id format or pagination behavior). However, it implies the tool uses company_id to find connections, which aligns with schema documentation. Baseline 3 is appropriate when schema does the heavy lifting.

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

Purpose5/5

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

The description explicitly states the tool's purpose: 'Find which team members have connections to a company' and 'Returns your team's network connections to people at the target company, showing who knows whom and how they're connected.' This is a specific verb ('find'/'returns') + resource ('team members' connections to a company'), and it clearly distinguishes from siblings like harmonic_get_company (general company info) or harmonic_get_company_employees (employee list without connections).

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool: 'Before reaching out to a company, find if anyone on your team has a warm intro path.' It also distinguishes from siblings by focusing on connections rather than general company data or employee lists. The 'Use case' section clearly defines the 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.

harmonic_get_company_employeesGet Company EmployeesA
Read-onlyIdempotent

Get employees of a company with filtering options.

Input:

  • company_id: Numeric ID or URN

  • employee_group_type: Filter by role (ALL, FOUNDERS_AND_CEO, EXECUTIVES, FOUNDERS, LEADERSHIP, NON_LEADERSHIP, ADVISORS, NON_PARTNERS)

  • employee_status: Filter by status (ACTIVE, NOT_ACTIVE, ACTIVE_AND_NOT_ACTIVE)

Note: Filter values confirmed via API testing. Documentation had incorrect values (EMPLOYEES, CURRENT, PAST do not work).

Returns: Person URNs that you can use with harmonic_get_person to get full details.

Example Response (JSON): { "data": [ { "urn": "urn:harmonic:person:113554", "id": "113554" }, { "urn": "urn:harmonic:person:155348322", "id": "155348322" } ], "count": 72, "hasMore": false }

Common workflows:

  1. Get founders: employee_group_type="FOUNDERS_AND_CEO"

  2. Get leadership: employee_group_type="LEADERSHIP"

  3. Get former employees: employee_status="NOT_ACTIVE"

ParametersJSON Schema
NameRequiredDescriptionDefault
company_idYesCompany ID or URN
sizeNoNumber of employees to return (default: 10, max: 100)
pageNoPage number for pagination (0-indexed)
employee_group_typeNoFilter by employee type: ALL, FOUNDERS_AND_CEO, EXECUTIVES, FOUNDERS, LEADERSHIP, NON_LEADERSHIP, ADVISORS
employee_statusNoFilter by status: ACTIVE, ACTIVE_AND_NOT_ACTIVE, NOT_ACTIVE
response_formatNoOutput format: "json" or "markdown"json

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already provide excellent behavioral hints (readOnlyHint=true, destructiveHint=false, etc.), but the description adds valuable context beyond these. It discloses that 'Documentation had incorrect values' and provides tested filter values, which is crucial operational knowledge. It also describes the return format with an example response showing pagination (hasMore field) and data structure. While it doesn't mention rate limits or authentication needs, it adds significant practical guidance 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.

Conciseness4/5

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

The description is well-structured with clear sections (Input, Returns, Example Response, Common workflows) and front-loads the core purpose. Most sentences earn their place by providing practical guidance. However, the 'Note' about incorrect documentation values, while valuable, could be more concise, and the example response takes multiple lines that might be excessive for a description. Overall efficient but with minor verbosity.

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

Completeness5/5

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

Given the tool's complexity (6 parameters, filtering logic) and the absence of an output schema, the description provides excellent completeness. It explains what the tool returns ('Person URNs that you can use with harmonic_get_person'), shows a detailed example response with pagination indicators, provides workflow examples, and includes important operational notes about tested filter values. This adequately compensates for the lack of output schema and provides comprehensive context for agent usage.

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

Parameters3/5

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

With 100% schema description coverage, the schema already documents all 6 parameters thoroughly. The description adds some semantic context by explaining that company_id accepts 'Numeric ID or URN' (schema says 'Company ID or URN') and providing usage notes about filter values. However, it doesn't add substantial meaning beyond what's already in the schema descriptions and enum values. The baseline of 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get employees of a company with filtering options.' This is a specific verb ('Get') + resource ('employees of a company') + scope ('with filtering options'), which distinguishes it from sibling tools like harmonic_get_company (which gets company details) or harmonic_get_person (which gets individual person details). The description effectively communicates the tool's distinct function within the sibling set.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool through the 'Common workflows' section, which gives specific examples like getting founders, leadership, or former employees. It also mentions using the returned Person URNs with harmonic_get_person for full details, establishing a workflow relationship. However, it doesn't explicitly state when NOT to use this tool or name direct alternatives among siblings, which prevents a perfect score.

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

harmonic_get_personGet PersonA
Read-onlyIdempotent

Get full person details by ID. Use after getting person URNs from company employees.

Input:

  • person_id: Numeric ID (e.g., "161780079") or full URN (e.g., "urn:harmonic:person:161780079")

Returns same data as harmonic_lookup_person:

  • Full name and profile picture

  • Contact info (emails)

  • Location

  • Education history

  • Work experience with company links

When to use:

  • After harmonic_get_company_employees to get full details on each person

  • When you have a person ID from another Harmonic response

  • To expand on a person URN from search results

ParametersJSON Schema
NameRequiredDescriptionDefault
person_idYesPerson ID or URN
response_formatNoOutput format: "json" or "markdown"json

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds valuable context about what data is returned (full details including contact info, education, work experience) and clarifies the relationship with harmonic_lookup_person, enhancing behavioral understanding beyond annotations.

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

Conciseness5/5

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

The description is efficiently structured with clear sections (purpose, input, returns, when to use), uses bullet points for readability, and every sentence adds value without redundancy. It's appropriately sized and front-loaded with the core purpose.

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

Completeness5/5

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

Given the tool's moderate complexity, comprehensive annotations, and 100% schema coverage, the description provides complete context. It explains the tool's purpose, usage scenarios, parameter semantics, and return data, compensating for the lack of output schema by detailing what data is returned.

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

Parameters4/5

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

With 100% schema description coverage, the schema already documents both parameters well. The description adds meaningful context by providing concrete examples of person_id values ('161780079' and URN format) and clarifying that response_format controls output format, which complements the schema's enum description.

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

Purpose5/5

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

The description clearly states the specific action ('Get full person details by ID') and resource ('person'), distinguishing it from sibling tools like harmonic_lookup_person by emphasizing it's for use after obtaining IDs from other operations. The verb 'Get' combined with the resource 'person details' provides precise purpose.

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

Usage Guidelines5/5

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

The description explicitly provides when-to-use guidance in a dedicated section, listing three specific scenarios: after harmonic_get_company_employees, when you have a person ID from another response, and to expand on a person URN from search results. This clearly distinguishes usage from alternatives like harmonic_lookup_person.

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

harmonic_get_saved_search_net_new_resultsGet Saved Search Net New ResultsA
Read-onlyIdempotent

Get only NEW results from a saved search since your last check. This is the incremental/delta endpoint for monitoring deal flow.

PREREQUISITE: You must subscribe to the saved search via Harmonic web UI first. Returns 404 if not subscribed.

What "net new" means: Returns companies/people that have NEWLY matched your search criteria since you subscribed (or since new_results_since date). For example, if your search looks for companies with >100 headcount, this returns companies that recently grew past 100.

Input:

  • search_id: The saved search ID (get from harmonic_list_saved_searches)

  • size: Number of results (default: 3, max: 5)

  • cursor: Pagination cursor for more results

  • new_results_since: Optional UTC datetime (e.g., 2024-09-21T00:00:00Z)

Response sizes: ~27KB per result (same as regular results)

Workflow:

  1. Call this tool to get new matches

  2. Process the results

  3. Call harmonic_clear_saved_search_net_new to mark as "seen"

  4. Repeat on your monitoring schedule

Use cases:

  • Daily deal flow monitoring for investors

  • Trigger deep research agents on new matches

  • Alert on companies meeting investment criteria

ParametersJSON Schema
NameRequiredDescriptionDefault
search_idYesSaved search ID or URN
sizeNoNumber of results to return (default: 3, max: 5). Each result is ~27KB.
cursorNoPagination cursor from previous response
new_results_sinceNoUTC datetime (e.g., 2024-09-21T00:00:00Z) to filter results. Defaults to subscription date.
response_formatNoOutput format: "json" or "markdown"json

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds valuable behavioral context beyond annotations: it explains the prerequisite (subscription requirement with 404 error if not met), clarifies what 'net new' means with examples, specifies response sizes (~27KB per result), and outlines the workflow with the sibling tool 'harmonic_clear_saved_search_net_new'. No contradictions with annotations are present.

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

Conciseness5/5

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

The description is well-structured with clear sections (prerequisite, explanation of 'net new', input, response sizes, workflow, use cases), using bold headers for emphasis. Every sentence adds value—no redundant information. It is front-loaded with the core purpose and efficiently conveys necessary details without verbosity.

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

Completeness5/5

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

Given the tool's complexity (incremental results with prerequisites and workflow), the description is complete. It covers purpose, usage guidelines, behavioral traits (prerequisite, response sizes, workflow), and contextualizes parameters. Although there is no output schema, the description provides enough context (e.g., response sizes, use cases) for effective agent use. Annotations further enhance completeness by indicating safety and idempotency.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds marginal value by grouping parameters under an 'Input:' section and providing a brief explanation of 'new_results_since' (e.g., 'Optional UTC datetime'), but it doesn't introduce new semantics beyond the schema. However, it compensates by explaining the tool's purpose and workflow, which contextualizes parameter usage effectively.

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

Purpose5/5

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

The description explicitly states the tool's purpose: 'Get only NEW results from a saved search since your last check. This is the incremental/delta endpoint for monitoring deal flow.' It uses specific verbs ('get', 'monitoring') and distinguishes from sibling tools like 'harmonic_get_saved_search_results' by emphasizing the 'net new' incremental nature. The title reinforces this distinction.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool: 'This is the incremental/delta endpoint for monitoring deal flow.' It includes a prerequisite ('You must subscribe to the saved search via Harmonic web UI first'), workflow steps, and specific use cases (e.g., 'Daily deal flow monitoring for investors'). It clearly differentiates from regular search results tools by focusing on new matches since subscription.

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

harmonic_get_saved_search_resultsGet Saved Search ResultsA
Read-onlyIdempotent

Get results from a saved search. Returns full company/person data matching the search criteria.

WARNING: Response sizes are LARGE:

  • size=3 (default): ~81KB

  • size=5 (max): ~135KB

Field filtering does NOT work on this endpoint. Each result contains full company data (~27KB). Use pagination (cursor) for more results rather than large sizes.

Input:

  • search_id: The saved search ID (get from harmonic_list_saved_searches)

  • size: Number of results (default: 3, max: 5)

  • cursor: Pagination cursor for more results

Returns (for COMPANIES_LIST type): { "data": [ { "id": 65200417, "name": "Stealth Company (John Smith)", "description": "...", "headcount": 1, "funding": { "funding_total": 0, "funding_stage": "STEALTH" }, "location": { "city": "San Francisco", "country": "United States" }, "contact": { "primary_email": "john@example.com" } } ], "count": number, "totalAvailable": number, "hasMore": boolean, "nextCursor": string | null }

Use cases:

  • Monitor deal flow with pre-defined criteria

  • Get companies matching specific investment thesis

  • Track stealth companies or recent launches

ParametersJSON Schema
NameRequiredDescriptionDefault
search_idYesSaved search ID or URN
sizeNoNumber of results to return (default: 3, max: 5). Each result is ~27KB. Use pagination for more.
cursorNoPagination cursor from previous response
response_formatNoOutput format: "json" or "markdown"json

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true. The description adds valuable behavioral context beyond annotations: the WARNING about large response sizes (~81KB-135KB), that field filtering does NOT work, each result contains full company data (~27KB), and pagination guidance. It doesn't contradict annotations, but provides critical performance and data volume information not captured in structured fields.

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

Conciseness4/5

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

The description is well-structured with clear sections (WARNING, Input, Returns, Use cases) and front-loads key information. Every sentence adds value, though the detailed JSON example could be considered slightly verbose. However, given the complexity of the return data and lack of output schema, this detail is justified.

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

Completeness5/5

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

Given the tool's complexity (4 parameters, large data returns, pagination needs) and absence of an output schema, the description provides excellent completeness. It covers purpose, usage guidance, performance warnings, parameter semantics, detailed return format example, and practical use cases. The annotations provide safety information, while the description fills all other contextual gaps.

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

Parameters4/5

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

With 100% schema description coverage, the baseline is 3. The description adds meaningful context: it explains the practical implications of the 'size' parameter (response sizes in KB, default vs max), clarifies that 'search_id' comes from harmonic_list_saved_searches, and provides a detailed example of return data structure. While the schema documents parameters technically, the description adds practical usage semantics.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get results from a saved search. Returns full company/person data matching the search criteria.' It specifies the verb ('Get'), resource ('results from a saved search'), and distinguishes it from siblings like harmonic_list_saved_searches (which lists searches) and harmonic_search_companies (which performs new searches).

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool: 'Use pagination (cursor) for more results rather than large sizes.' It also implicitly distinguishes it from siblings by specifying it works with saved searches (search_id from harmonic_list_saved_searches) rather than performing new searches. The 'Use cases' section further clarifies practical applications.

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

harmonic_list_saved_searchesList Saved SearchesA
Read-onlyIdempotent

Get all saved searches accessible to your Harmonic account. Saved searches enable monitoring deal flow and tracking companies over time.

What it does: Returns all saved searches (also called "Saved Views" in Harmonic UI) that your team has created. Each saved search has specific filter criteria.

Returns: { "data": [ { "id": 141648, "name": "Stealth Feed", "type": "COMPANIES_LIST", "is_private": false, "created_at": "2024-10-10T18:48:38.438102", "updated_at": "2025-06-16T00:53:15.505131" } ], "count": number }

Search types:

  • COMPANIES_LIST: Search for companies

  • PERSONS: Search for people

Next steps: Use harmonic_get_saved_search_results with the search ID to get matching companies/persons.

Use cases:

  • List all team deal flow monitors

  • Find a specific saved search by name

  • Check when a search was last updated

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatNoOutput format: "json" or "markdown"json

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds valuable context about what 'saved searches' are ('enable monitoring deal flow and tracking companies over time'), their types (COMPANIES_LIST, PERSONS), and that they contain 'specific filter criteria', which goes 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.

Conciseness5/5

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

The description is well-structured with clear sections (What it does, Returns, Search types, Next steps, Use cases), front-loading the core purpose. Every sentence adds value without redundancy, efficiently covering purpose, output format, domain context, and usage guidance.

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

Completeness5/5

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

Given the tool's simplicity (1 optional parameter, no output schema but detailed return example provided), rich annotations, and clear sibling differentiation, the description is complete. It explains what saved searches are, their types, return structure, and next steps, leaving no gaps for the agent to understand and invoke this tool correctly.

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

Parameters3/5

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

With 100% schema description coverage for the single parameter (response_format), the schema already fully documents its purpose, enum values, and default. The description adds no additional parameter information, so it meets the baseline of 3 where the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the specific action ('Get all saved searches') and resource ('accessible to your Harmonic account'), distinguishing it from siblings like harmonic_get_saved_search_results which retrieves actual results. It explicitly notes these are also called 'Saved Views' in the UI, providing precise domain terminology.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool ('List all team deal flow monitors', 'Find a specific saved search by name', 'Check when a search was last updated') and directs to the alternative tool harmonic_get_saved_search_results for retrieving matching companies/persons. It clearly separates metadata listing from result retrieval.

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

harmonic_lookup_companyLookup CompanyA
Read-onlyIdempotent

Look up a company by domain, website URL, or social media URL. This is a READ operation (does not create data).

What it does: Finds and enriches a company profile by any of its known identifiers. Returns full company details including funding, headcount, location, and contact info.

Supported identifiers (use ONE):

  • website_domain: e.g., "harmonic.ai", "stripe.com"

  • website_url: Full URL like "https://www.stripe.com"

  • linkedin_url: LinkedIn company page

  • crunchbase_url: Crunchbase profile

  • pitchbook_url: Pitchbook profile

  • twitter_url: Twitter/X profile

  • instagram_url: Instagram profile

  • facebook_url: Facebook page

  • angellist_url: AngelList profile

Returns full company data including:

  • Basic info: name, description, logo

  • Contact: emails, primary_email, exec_emails

  • Funding: total amount, stage, investors, rounds

  • Social: LinkedIn, Twitter with follower counts

  • Metrics: headcount, web_traffic

Example Response (JSON): { "id": 1, "entity_urn": "urn:harmonic:company:1", "name": "Harmonic", "description": "...", "headcount": 67, "funding": { "funding_total": 30150000, "funding_stage": "SERIES_A", "investors": [...] }, "contact": { "primary_email": "max@harmonic.ai", "emails": [...] } }

HTTP 404 Note: If company not found, Harmonic may trigger background enrichment. Try again later or use a different identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault
website_domainNoCompany domain (e.g., "harmonic.ai", "stripe.com")
website_urlNoFull website URL
linkedin_urlNoLinkedIn company page URL
crunchbase_urlNoCrunchbase profile URL
pitchbook_urlNoPitchbook profile URL
twitter_urlNoTwitter/X profile URL
instagram_urlNoInstagram profile URL
facebook_urlNoFacebook page URL
angellist_urlNoAngelList profile URL
response_formatNoOutput format: "json" or "markdown"json

TDQS

A4.5/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond annotations: it explicitly states 'This is a READ operation (does not create data)' (reinforcing readOnlyHint), explains the HTTP 404 behavior with background enrichment, and provides rich details about return data structure. While annotations cover safety (readOnlyHint, destructiveHint) and idempotency, the description adds practical implementation details about response format and error handling.

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

Conciseness5/5

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

The description is well-structured with clear sections (What it does, Supported identifiers, Returns, Example, HTTP 404 Note), each earning its place. It's comprehensive yet efficient, with no redundant information. The front-loaded statement clearly establishes the tool's purpose before diving into details.

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

Completeness5/5

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

Given the tool's complexity (10 parameters, no output schema), the description provides excellent completeness: it explains what the tool does, how to use parameters, what data returns, includes a detailed example response, and covers error behavior. The annotations provide safety context, and the description fills all remaining gaps without needing an output schema.

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

Parameters4/5

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

With 100% schema description coverage, the baseline is 3. The description adds significant value by organizing parameters into 'Supported identifiers' with clear examples and the 'use ONE' constraint, plus explaining the response_format parameter's purpose. It provides semantic grouping and usage guidance that goes beyond the schema's individual parameter descriptions.

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

Purpose5/5

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

The description clearly states the specific verb ('look up', 'finds and enriches') and resource ('company profile') with explicit scope ('by domain, website URL, or social media URL'). It distinguishes from siblings like harmonic_search_companies by focusing on lookup by identifiers rather than search queries, and from harmonic_get_company by being identifier-based rather than ID-based.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('by domain, website URL, or social media URL') and mentions 'use ONE' identifier, which helps avoid misuse. However, it doesn't explicitly state when NOT to use it or name specific alternatives among the sibling tools, though the context implies it's for identifier-based lookup versus search-based approaches.

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

harmonic_lookup_personLookup PersonA
Read-onlyIdempotent

Look up a person by their LinkedIn URL. This is a READ operation (does not create data).

What it does: Finds and enriches a person's profile by their LinkedIn URL. Returns full profile including work history, education, contact info, and social links.

Input:

Returns: { "id": 161780079, "entity_urn": "urn:harmonic:person:161780079", "full_name": "Max Ruderman", "contact": { "emails": ["max@harmonic.ai"], "primary_email": "max@harmonic.ai" }, "location": { "city": "New York", "state": "New York", "country": "United States" }, "education": [ { "school": { "name": "Cornell University" }, "degree": "Bachelor of Science (B.S.)", "field": "Labor and Industrial Relations" } ], "experience": [ { "title": "Chief Executive Officer", "company": "urn:harmonic:company:1", "company_name": "Harmonic", "is_current_position": true, "start_date": "2022-07-01T00:00:00Z" } ] }

HTTP 404 Note: If person not found, Harmonic may trigger background enrichment. Try again later.

Use cases:

  • Research a founder or executive before a meeting

  • Find contact information for outreach

  • Verify a person's current role and company

ParametersJSON Schema
NameRequiredDescriptionDefault
linkedin_urlYesLinkedIn profile URL (e.g., "https://linkedin.com/in/username")
response_formatNoOutput format: "json" or "markdown"json

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds valuable behavioral context beyond annotations: it clarifies this is a 'READ operation (does not create data)', explains the HTTP 404 behavior (may trigger background enrichment with retry advice), and details the enrichment process and return data structure, enhancing the agent's understanding.

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

Conciseness4/5

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

The description is well-structured with clear sections (What it does, Input, Returns, HTTP 404 Note, Use cases), making it easy to parse. It is appropriately sized with no redundant information, though the detailed JSON example in 'Returns' could be slightly verbose; every sentence adds value, such as the enrichment and retry advice.

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

Completeness5/5

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

Given the tool's complexity (enrichment with potential background processes), rich annotations, and lack of output schema, the description is highly complete. It covers purpose, usage, behavioral traits (like 404 handling), parameter details, and example output, providing all necessary context for an agent to invoke the tool correctly without needing an output schema.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters (linkedin_url and response_format) well-documented in the schema. The description adds minimal value beyond the schema: it provides an example URL format for linkedin_url and lists return fields, but does not explain parameter interactions or usage nuances. Baseline 3 is appropriate given the schema's comprehensive coverage.

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

Purpose5/5

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

The description clearly states the specific action ('Look up a person by their LinkedIn URL') and resource ('person's profile'), distinguishing it from sibling tools like harmonic_get_person or harmonic_search_typeahead. It explicitly mentions enrichment and the type of data returned (work history, education, contact info, social links), providing a comprehensive understanding of its function.

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

Usage Guidelines4/5

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

The description includes a 'Use cases' section with specific scenarios (research before meetings, contact info for outreach, verifying roles), which provides clear context for when to use this tool. However, it does not explicitly state when NOT to use it or name alternatives (e.g., harmonic_get_person for non-LinkedIn-based lookups), missing full sibling differentiation.

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

harmonic_search_companiesSearch Companies (Natural Language)A
Read-onlyIdempotent

Search for companies using natural language queries. This is the primary entry point for discovering companies.

What it does: Searches Harmonic's database using AI-powered natural language understanding. You can describe what you're looking for in plain English.

Example queries:

  • "AI startups in San Francisco"

  • "fintech companies with Series A funding"

  • "B2B SaaS companies founded after 2020"

  • "healthcare startups in Boston with 50-100 employees"

Returns:

  • Company URNs (use harmonic_get_company to get full details)

  • Total count of matching companies

  • Query interpretation showing how your query was parsed

  • Pagination cursor for more results

Returns (JSON): { "data": [{ "urn": "urn:harmonic:company:123", "id": "123" }], "count": number, "totalAvailable": number, "hasMore": boolean, "nextCursor": string | null, "queryInterpretation": { "semantic": string, "faceted": [...] } }

Next Steps: Use the numeric ID from URN with harmonic_get_company for full company details.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural language search query (e.g., "AI startups in San Francisco", "fintech companies with Series A funding")
sizeNoNumber of results to return (default: 25, max: 1000)
similarity_thresholdNoMinimum similarity score 0.0-1.0 for filtering results
cursorNoPagination cursor from previous response
response_formatNoOutput format: "json" or "markdown"json

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds valuable behavioral context beyond annotations: it explains the AI-powered natural language understanding, pagination behavior with cursors, and the limited return format (URNs requiring harmonic_get_company for details). No contradiction with annotations exists.

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

Conciseness4/5

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

The description is well-structured with clear sections (What it does, Example queries, Returns, Next Steps) and efficiently conveys information. However, the JSON return example is somewhat redundant since there's no output schema, and the 'Returns' section repeats similar information in two formats, slightly reducing conciseness.

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

Completeness5/5

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

Given the tool's complexity (natural language search with 5 parameters), rich annotations (covering safety and idempotency), and lack of output schema, the description is highly complete. It explains the tool's purpose, usage, behavioral traits, return format, and integration with other tools, providing all necessary context for an AI agent to use it effectively.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents all 5 parameters. The description adds minimal parameter semantics beyond the schema—it provides example queries that illustrate the 'query' parameter usage but doesn't explain parameter interactions or additional context. This meets the baseline 3 when schema does the heavy lifting.

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

Purpose5/5

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

The description explicitly states 'Search for companies using natural language queries' with the specific verb 'search' and resource 'companies', clearly distinguishing it from sibling tools like harmonic_lookup_company (which appears to be a direct lookup) and harmonic_find_similar_companies (which likely operates on existing companies). The 'primary entry point for discovering companies' phrase further establishes its distinct role.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool ('primary entry point for discovering companies') and what to do next ('Use harmonic_get_company for full company details'). It distinguishes from alternatives by emphasizing natural language queries versus more specific lookup tools in the sibling list, though it doesn't explicitly name when NOT to use it.

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

harmonic_search_typeaheadSearch Companies (Typeahead)A
Read-onlyIdempotent

Quick autocomplete search for companies by name or domain. Use this for fast lookups when you know part of the company name.

What it does: Returns company matches ranked by relevance. Lower ranking_score = better match.

Example queries:

  • "Harmonic" - finds companies with Harmonic in the name

  • "stripe.com" - finds by domain

  • "Str" - partial name search

Returns (JSON): { "data": [ { "entity_urn": "urn:harmonic:company:1", "text": "Harmonic", "ranking_score": 10.0 } ], "count": number }

When to use:

  • Quick lookup by known company name

  • Autocomplete suggestions

  • Finding company by domain

When NOT to use:

  • Complex searches with multiple criteria (use harmonic_search_companies instead)

  • Searching by funding stage, location, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesCompany name, partial name, or domain to search (e.g., "Harmonic", "stripe.com")
response_formatNoOutput format: "json" or "markdown"json

TDQS

A4.4/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond annotations: it explains the ranking system ('Lower ranking_score = better match'), provides example queries showing partial matching behavior, and describes the return format with a JSON example. While annotations cover safety (readOnly, non-destructive), the description adds practical implementation details that help the agent understand how to interpret results.

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

Conciseness4/5

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

The description is well-structured with clear sections (What it does, Example queries, Returns, When to use, When NOT to use) that make information easy to find. While comprehensive, some sections could be more concise - the JSON example is detailed but necessary for clarity. Overall, most sentences earn their place by adding distinct value.

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

Completeness5/5

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

For a search tool with comprehensive annotations (readOnly, openWorld, idempotent) and 100% schema coverage, the description provides excellent contextual completeness. It explains the tool's behavior, provides concrete examples, shows the return format, and gives clear usage boundaries. The absence of an output schema is compensated by the detailed JSON example in the description.

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

Parameters3/5

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

With 100% schema description coverage, the schema already documents both parameters thoroughly. The description adds marginal value through example queries that illustrate the 'query' parameter usage ('Harmonic', 'stripe.com', 'Str'), but doesn't provide additional semantic context beyond what's in the schema. This meets the baseline expectation when schema coverage is complete.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('quick autocomplete search', 'returns company matches') and resources ('companies by name or domain'). It explicitly distinguishes from sibling harmonic_search_companies by stating this is for 'fast lookups when you know part of the company name' versus 'complex searches with multiple criteria'.

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

Usage Guidelines5/5

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

The description provides explicit guidance with dedicated 'When to use' and 'When NOT to use' sections. It lists specific use cases (quick lookup, autocomplete suggestions, finding by domain) and explicitly names the alternative tool (harmonic_search_companies) for complex searches, giving clear boundaries for tool selection.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv1.0.0
    • First observedharmonic_clear_saved_search_net_new
    • First observedharmonic_find_similar_companies
    • First observedharmonic_get_company
    • First observedharmonic_get_company_connections
    • First observedharmonic_get_company_employees
    • First observedharmonic_get_person
    • First observedharmonic_get_saved_search_net_new_results
    • First observedharmonic_get_saved_search_results
    • First observedharmonic_list_saved_searches
    • First observedharmonic_lookup_company
    • First observedharmonic_lookup_person
    • First observedharmonic_search_companies
    • First observedharmonic_search_typeahead

TDQS

A4.4/5.0

Scored across 13 tools

Disambiguation4/5

Most tools have distinct purposes, but some overlap exists. For example, harmonic_get_company and harmonic_lookup_company both retrieve company details, though one uses an ID and the other uses external identifiers. Similarly, harmonic_search_companies and harmonic_search_typeahead both search for companies, but with different query styles. The descriptions help clarify these distinctions, preventing major confusion.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case, starting with 'harmonic_' as a prefix. Examples include harmonic_get_company, harmonic_search_companies, and harmonic_list_saved_searches. This uniformity makes the tool set predictable and easy to navigate, with no deviations in naming conventions.

Tool Count5/5

With 13 tools, the server is well-scoped for its domain of company and person data retrieval, search, and monitoring in a VC context. Each tool serves a specific function, such as fetching details, searching, or managing saved searches, and none appear redundant or unnecessary for the intended workflows.

Completeness4/5

The tool set covers core CRUD-like operations for the domain, including lookup, search, retrieval, and monitoring workflows. Minor gaps exist, such as no explicit update or delete tools for saved searches or companies, but these are likely handled outside the MCP scope. The tools support key use cases like deal flow monitoring and network analysis without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to interact with Apollo.io API for sales and marketing activities. Provides tools to search for companies and contacts, enrich person and organization data, and manage accounts with comprehensive lead generation capabilities.
    11
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides access to Harmonic.ai's API for searching and retrieving detailed information about companies and professionals. Supports company searches by domain or query, people searches, saved search results, and employee listings with pagination.
    2
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with the Apollo.io API to search global databases and enrich company and person data. It facilitates managing contacts and accounts, retrieving tech stacks, and finding job postings through natural language.
    22
    1
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Exposes Apollo.io API functionalities as MCP tools for people and organization enrichment, search, and job postings. Enables natural language interaction with Apollo.io data.
    5
    16
    -