MCP Server
Connect AI agents to DealSurface through the Model Context Protocol. Research prospects, filter carriers by their book of business, map buying committees, and draft outreach through natural conversation.
What is MCP?
The Model Context Protocol (MCP) is an open standard for connecting AI assistants to external tools. The DealSurface MCP server (@dealsurface/mcp-server) wraps the REST API into a set of tools that any MCP-compatible AI agent can use.
When to use MCP vs REST
Use the MCP server when:
- Building an AI agent or conversational workflow
- Working in Claude Desktop or an MCP-compatible client
- You want the AI to decide which tools to call and in what order
- Prototyping a multi-step sales research workflow
Use the REST API when:
- Building a custom integration or script
- You need precise control over every API call
- Integrating with a CRM, dashboard, or automation platform
- Processing data in bulk
Available tools
The MCP server exposes 10 tools, each mapping to a REST API endpoint:
| Tool | REST endpoint | Credits |
|---|---|---|
| list_products | GET /products | Free |
| get_product | GET /products/:id | Free |
| list_prospects | GET /prospects | Free |
| get_prospect | GET /prospects/:ticker | Free |
| search_excerpts | GET /excerpts | Free |
| get_dealmap | GET /dealmap | Free |
| generate_dealmap | POST /dealmap/generate | 0-10 |
| override_stakeholder_role | PATCH /dealmap/node-role | Free |
| set_top_pick | PATCH /dealmap/node-top-pick | Free |
| craft_outreach | POST /outreach | 1 |
Upgrading to 2.0.0
Upgrade the package; nothing else changes
2.0.0 targets the v2 REST API, and v1 has been removed — so 0.2.x and earlier stop working, receiving 410 Gone with a message telling you to upgrade. Upgrade the package and you keep the same tool names, the same authentication, and the same client configuration.
The only removed input for an existing caller is framework_category on search_excerpts (also gone from every excerpt result). Everything else gains optional inputs and returns more data.
Release notes
2.3.02026-08-30minorInsurance-group family heads become first-class prospects. Additive fields; one behavior change in family representation.
- Behavior change: a scored private insurance group now represents its family in
list_prospectsunder the group's own ticker (previously a subsidiary's ticker carried the family row). Subsidiary tickers remain valid for direct lookup. - Group heads without their own filings serve blended subsidiary evidence:
search_excerptsreturns their excerpts with per-excerptsource_tickerandsource_company_nameattribution, andcraft_outreachworks for scored groups instead of returning 404. - New additive fields on prospect detail and excerpt responses:
evidence_scope(own | family | none) andfamily_role(head | member | standalone); group detail responses usenarrative_scope: "group".
2.2.02026-08-26minorHierarchical lines of business and union-premium targeting. Additive — no field was removed or renamed.
- The
lines_of_businessvocabulary grows to 43 filterable keys: the eight CIS policy-type splits (individual_life, group_life, individual_annuity, group_annuity, individual_accident_health, group_accident_health, medicare_supplement, long_term_care) plus the life / annuity / accident_health roll-ups, title, aggregate_write_ins and international. The split keys are populated once the CIS re-ingest has run for an environment and may return empty results until then. - Product target segments report
carrier_facts.union_premium(rank window or gross USD band measured across the union of the selected lines) and a widenedlicensed_footprintwithbandsandstates_any. Per-line premium fields remain for segments saved under the previous per-line contract. - Prospect detail CIS observations keep
line_of_businessas the roll-up key and addpolicy_line_of_business(for example individual_life). The premium block addsrollup_lines_of_business: roll-up keys whose policy-type splits are also present inby_line_of_business— a roll-up’s total contains its splits, so never sum the two together.
2.1.02026-08-17minorHuman-readable company names. The value of company_name has changed — no field was removed or renamed, but the text it returns is different.
company_namenow returns the name a person would use — Aflac rather than AMERICAN FAMILY LIFE ASSURANCE COMPANY OF COLUMBUS. It falls back to the filed name for companies that have not been through name resolution yet.- New
legal_namecarries the name the company files under. If you were matching oncompany_nameagainst filings or a CRM, switch to this field. - New
logo_domaingives a bare domain for the company logo, or null. Most companies have none; that is an ordinary state, not an error. - Applies to prospect lists, prospect detail, hierarchy children, the family pointer, and the DealMap chart. DealMap charts generated earlier report the new name too — it is resolved at request time, not stored.
2.0.12026-08-12patchAgent-guidance patch — descriptions and server instructions only, no tool or API behavior changes.
- Server-level MCP instructions (surfaced in the initialize handshake): agents are told to present fields with plain-English labels (“Buying Signal Score”, “Deal Score”) rather than raw identifiers, and to interpret
buying_signal_scorequalitatively: 1.0 means strong buying-signal indicators were found in the evidence, hedging proportionally down to 0 (none detected). get_prospectnow documents that only assessed subsidiaries resolve; an unassessedhierarchy.childrenticker returns 404 by design.search_excerptsnow documents thatkeywordmatches the excerpt’s tagged pain points, not the raw quote text.
2.0.02026-08-03breakingTargets the /api/v2 REST surface; the version number now tracks the API major. Requires v2 — /api/v1 has been removed, so 0.2.x stops working.
- Insurance filters on
list_prospects— lines of business, premium bands, licensed states, entity type, ownership, name search, and sorting — with the line, state, and sort vocabularies enum-validated in the tool schemas, so an invalid value is rejected client-side with the accepted set in front of the model. - Lists cover the full candidate universe with
assessment_statuslabels; unassessed rows carry null scores and rank last. - Premium and complaint data on every list row and prospect detail, including the family complaint index (complaint share ÷ premium share) and full per-year, per-line series.
- Subsidiary drill-down: pass any assessed
hierarchy.childrenticker back toget_prospect; DealMap and outreach tools resolve subsidiary tickers upward to the corporate family. - New tool
set_top_pick(wraps PATCH /dealmap/node-top-pick) completes the buying committee workflow. - Breaking:
framework_categoryremoved fromsearch_excerptsand from every excerpt result. - A rebuilding or out-of-date prospect projection now returns a clear not-ready failure instead of an empty list, so agents retry rather than concluding a product has no prospects.
0.2.02026-05-21Added optional include_disabled metadata access for list_products and get_product. Operational tools continue to use active products only.
0.1.32026-04-06Added get_dealmap, generate_dealmap, and override_stakeholder_role tools for buying committee mapping. Removed get_leads tool (use get_dealmap instead). Updated craft_outreach for role-aware personalization.
0.1.22026-04-03Improved tool descriptions for clarity.
0.1.12026-03-15Initial public release. Published to npm and MCP Registry.