Harmonic MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HARMONIC_API_KEY | Yes | Your Harmonic API key, used to authenticate with Harmonic AI services. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| harmonic_search_companiesA | 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:
Returns:
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. |
| harmonic_search_typeaheadA | 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:
Returns (JSON): { "data": [ { "entity_urn": "urn:harmonic:company:1", "text": "Harmonic", "ranking_score": 10.0 } ], "count": number } When to use:
When NOT to use:
|
| harmonic_find_similar_companiesA | 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:
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:
|
| harmonic_lookup_companyA | 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):
Returns full company data including:
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. |
| harmonic_get_companyA | Get company details by ID with field filtering for optimal response size. Input:
Response sizes:
Default fields returned: name, description, website, headcount, location, funding, stage, founding_date, company_type, customer_type, contact, socials When to use:
Note: Uses batch endpoint internally for proper field filtering. The GET endpoint ignores include_fields. |
| harmonic_get_company_employeesA | Get employees of a company with filtering options. Input:
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:
|
| harmonic_get_company_connectionsA | 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:
Use case: Before reaching out to a company, find if anyone on your team has a warm intro path. |
| harmonic_lookup_personA | 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:
|
| harmonic_get_personA | Get full person details by ID. Use after getting person URNs from company employees. Input:
Returns same data as harmonic_lookup_person:
When to use:
|
| harmonic_list_saved_searchesA | 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:
Next steps: Use harmonic_get_saved_search_results with the search ID to get matching companies/persons. Use cases:
|
| harmonic_get_saved_search_resultsA | Get results from a saved search. Returns full company/person data matching the search criteria. WARNING: Response sizes are LARGE:
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:
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:
|
| harmonic_get_saved_search_net_new_resultsA | 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:
Response sizes: ~27KB per result (same as regular results) Workflow:
Use cases:
|
| harmonic_clear_saved_search_net_newA | 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:
Workflow:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 13 tools
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.
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.
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.
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.