Overview
The Model Context Protocol is an open standard that lets AI assistants (Claude, GPT, Cursor, custom agents) safely invoke external tools. The @honecrm/mcp-server package runs a Hone CRM MCP server on your own machine, with 65 tools for deals, contacts, companies, pipelines, tags, activities, insights, relationships and commitments.
Point your AI client at the server once, and the model can list, create, update, and analyze CRM data on your behalf without leaving the chat.
Most setups should use the hosted server instead. It needs no install, it also has the inbox tools, and claude.ai and Claude Desktop sign in to it with your Hone CRM account. For Claude, Claude Code, Cursor and Codex, the full guide is Connect your AI tools. This page covers the npm package.
Package
@honecrm/mcp-serverTransport
JSON-RPC over stdioInstall
The server runs on Node.js 18 or later and has no native dependencies. MCP clients start it themselves with npx, so there is nothing to install first. To check that it starts, run it by hand with your key:
Run via npx (recommended)
export HONECRM_API_KEY=hone_xxxx export HONECRM_BASE_URL=https://api.honecrm.com/v1 npx -y @honecrm/mcp-server
It prints [MCP] Hone CRM MCP Server starting with 65 tools... on stderr and then waits for a client on stdin. Stop it with Ctrl+C.
Install globally
npm install -g @honecrm/mcp-server
Then run honecrm-mcp in place of npx -y @honecrm/mcp-server, with the same two variables set.
Authentication
The MCP server authenticates to the Hone CRM REST API with an API key, the same keys the SDKs and CLI use. Create one in Settings → Developer → API Keys and scope it narrowly: read-only where possible, or restricted to specific resources (deals:read, contacts:write, etc.).
HONECRM_API_KEY.Tool calls inherit the API key's scopes. If a tool tries to mutate something the key isn't allowed to touch, the backend returns FORBIDDEN and the MCP server surfaces the error back to the model.
Client setup
Pick your MCP client and copy the setup below. Replace hone_xxxx with your API key, and restart the client after editing its config file.
~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
%APPDATA%\Claude\claude_desktop_config.json (Windows){
"mcpServers": {
"honecrm": {
"command": "npx",
"args": [
"-y",
"@honecrm/mcp-server"
],
"env": {
"HONECRM_API_KEY": "hone_xxxx",
"HONECRM_BASE_URL": "https://api.honecrm.com/v1"
}
}
}
}To connect these clients to the hosted server instead, follow Connect your AI tools.
Verify it works
After restarting your client, open a new conversation and try:
The model should call list_deals with status: 'active', sort client-side, and report results. If you don't see the tool invocation, double-check the config file path, the API key, and your client's MCP-tool permissions.
Available tools
65 tools across 15 categoriesEvery tool wraps a REST endpoint on the public API. Input schemas follow JSON Schema; the full schema (types, enums, required fields) is advertised via tools/list at connection time, so modern clients show parameter docs inline. The hosted server has these and more, including the inbox tools.
Full CRUD on sales deals, including pipeline and stage transitions.
list_dealsList deals with optional filters (stage, status, search, teamId, pipelineId)get_dealRetrieve a single deal by IDcreate_dealCreate a deal: name, value, contact, pipeline, stage, tags, customFieldsupdate_dealUpdate an existing deal; stage is validated against the pipelinedelete_dealDelete a deal permanentlyManage contact records linked to deals and companies.
list_contactsList contacts with search, company and team filtersget_contactRetrieve a single contact by IDcreate_contactCreate a contact; requires at least one identifierupdate_contactUpdate contact fields; replaces the identifiers array if provideddelete_contactDelete a contact permanentlyComposite tools for managing a contact’s identifier list (email, phone, linkedin, etc.).
add_contact_identifierAppend a new identifier (normalized and deduplicated)update_contact_identifierChange value, label, or primary status of an existing identifierdelete_contact_identifierRemove an identifier; refuses if it would leave the contact with noneset_primary_identifierMark one identifier as primary and unset primary on the othersManage company records with firmographic enrichment.
list_companiesList companies with search, industry and domain filtersget_companyRetrieve a single company by IDcreate_companyCreate a company: name, domain, industry, website, tags, customFieldsupdate_companyUpdate company fieldsdelete_companyDelete a company permanentlyCreate custom deal pipelines (sales, recruiting, fundraising, etc.).
list_pipelinesList all pipelines (the default Sales pipeline is created on first access)get_pipelineRetrieve a single pipeline by IDcreate_pipelineCreate a custom pipeline with named stages (open / won / lost)update_pipelineRename, reorder, or add stages; removing a stage with active deals failsdelete_pipelineDelete a pipeline; use force=true to move its deals to the default firstAccount-level tag registry with merge and bulk-assignment.
list_tagsList all tags, optionally filtered by groupget_tagRetrieve a tag by IDcreate_tagCreate a tag (name is normalized: lowercased, trimmed, spaces → dashes)update_tagUpdate tag name, color, description, or groupdelete_tagDelete a tag (requires confirm=true if in use)merge_tagsMerge source tag into target tag; source is deletedadd_entity_tagsApply tags to a contact, deal, or company; creates unknown tagsremove_entity_tagsRemove tags from a contact, deal, or companyLog and manage interactions on deals, contacts and companies.
list_activitiesList activities, filtered by deal, contact or companyget_activityRetrieve a single activity by IDlog_activityLog an activity (call, email, meeting, message, etc.)upsert_conversationLog or update a messaging thread (email, SMS, LinkedIn, Slack and more); one row per threadupdate_activityUpdate user-created activities; system-generated ones are read-onlydelete_activityDelete a user-created activityTrack recurring themes across contacts, deals, and activities (objections, feature requests, etc.).
list_insightsList insights, filtered by priority, category, status or linked entityget_insightRetrieve an insight by IDcreate_insightCreate an insight with category, priority, and optional linked entitiesupdate_insightAppend linked entities, bump the occurrence count, change priority or statusdelete_insightDelete an insightText search across the CRM records above.
searchSearch deals, contacts, and companies. It matches text, not meaning.The relationships Hone CRM builds from your inbox, with risk and the fields it infers.
query_relationshipsList relationships, priority-ranked; filter by kind, or by risk (e.g. risk="gte:0.5")get_relationshipRetrieve a single relationship by IDcreate_relationshipCreate a relationship from a map of roles to entity IDsupdate_relationshipUpdate participants, kind, or value estimateexplain_relationship_riskA written explanation of why a relationship is at risk (metered)correct_relationship_inferencePin a human correction to an inferred field: temperature, stage, momentum, risk, cadence or next actionWhat was promised in email threads: who owes what to whom.
list_commitmentsList commitments, filtered by status, owner, thread or intentget_commitmentRetrieve a single commitment by IDcreate_commitmentRecord a commitment by handupdate_commitment_statusMove a commitment to a new status, or mark it as wrongly extractedWhere an email address or other identifier was seen, and how far to trust it.
get_identifier_evidenceEvery identifier on an entity, with its evidence band and the sightings behind itrecord_identifier_observationRecord one sighting of an identifier: where and when it was seenretract_identifier_observationWithdraw a sighting; the row is kept and marked withdrawnStanding decisions that a value must not be written to a record again.
list_entity_fact_dismissalsWhat may not be written back to an entitydismiss_entity_factKeep a value from being written to an entity again (people only, not agent keys)lift_entity_fact_dismissalAllow a dismissed value to be written again (people only)GitHub repository prospects, and the ideal customer profile that ranks them.
list_repo_prospectsList GitHub repository prospects, ranked by company fit and engagementpromote_prospectTurn a prospect into a tracked contact; safe to repeatget_icpYour organization’s ideal customer profileYour plan and the free trial. Billing is console-only, so a key bound to an agent is refused.
get_subscriptionYour plan: the tier in effect, band allowances per seat, and whether the trial is running or availablestart_trialStart the no-card 7-day Pro trial; one per account (people only, not agent keys)Environment variables
| Variable | Required | Default | Description |
|---|---|---|---|
| HONECRM_API_KEY | Yes | None | API key used for all requests |
| HONECRM_BASE_URL | No | https://api.honecrm.com/v1 | The REST base, including /v1. Override it for staging or local development. |
Protocol details
- Transport
- JSON-RPC 2.0 framed one message per line on stdio
- Protocol version
2024-11-05- Capabilities
- Tools only (no prompts or resources yet)
- Methods
initialize,tools/list,tools/call
The server never touches your database directly. All tool calls flow through theREST APIusing the standard Authorization: Bearer header. Rate limits, scopes, and audit logging apply identically to MCP and direct API traffic.
Troubleshooting
Client doesn't list any tools
Confirm the client loaded the config (restart it fully, not just the window). Then run the server by hand with the commands under Install; you should see [MCP] Hone CRM MCP Server starting with 65 tools... on stderr. If it exits with HONECRM_API_KEY environment variable is required, the key did not reach it.
401 / UNAUTHORIZED from tool calls
The API key is missing, revoked, or malformed. Create a new key in Settings → Developer and update the env var. Keys must start with hone_.
403 / FORBIDDEN on a specific tool
Your API key doesn't include the required scope. Either broaden the key's scopes, or create a separate key specifically for the agent.
429 / RATE_LIMIT_EXCEEDED
The agent is calling faster than your tier allows. See rate limits for the per-tier request-per-minute ceilings.
Tool hangs or times out
Check your network. The server calls the REST API at HONECRM_BASE_URL, which is api.honecrm.com unless you set it.