How to Connect Claude to Your CRM with MCP

Manuk Minasyan · · 11 min read
How to Connect Claude to Your CRM with MCP

You can have Claude reading and writing your Relaticle CRM in about two minutes on Claude Code, or a few minutes more when connecting Claude.ai or Claude Desktop through OAuth. Once connected, Claude can search your companies, people, opportunities, tasks, and notes; read full record detail; and create, update, or delete records directly, using the same custom fields your team already configured. This is the setup guide: what the connection actually gives you, how to wire it up from each client, what the 37 tools can and can't do, and, the part most guides skip, exactly how writes behave once Claude has access.

The canonical reference for every detail below lives at relaticle.com/developers/mcp. This post is the narrative walkthrough; that page is the one to bookmark for exact tool schemas and troubleshooting.

What the connection gives you

MCP (Model Context Protocol) is the open standard that lets an AI assistant call real tools against a real system, instead of you pasting data back and forth between a chat window and your CRM. Relaticle runs an MCP server at mcp.relaticle.com that exposes your workspace to any MCP-capable client.

Once you connect it, Claude can:

  • Search and list companies, people, opportunities, tasks, and notes, with filtering, sorting, and pagination
  • Fetch a single record with full detail and its relationships (a company's contacts, an opportunity's linked tasks, and so on)
  • Create, update, and soft-delete records in any of those five entity types
  • Read and write your team's custom fields, not just the built-in ones
  • Attach or detach tasks and notes to companies, people, and opportunities, and assign tasks to team members
  • Read a schema resource per entity so it knows your exact field codes and option values before it writes anything

Every one of those operations is scoped to a single workspace: the one you picked when you authorized the connection. Claude cannot see or touch a different team's data through the same token.

Connect from Claude (web and desktop)

Relaticle's MCP server supports two authentication methods, and which one you use depends on the client.

OAuth (recommended for Claude.ai and Claude Desktop). Add Relaticle as a custom connector using the MCP endpoint URL, https://mcp.relaticle.com, or your own domain if you're self-hosting. Because the server supports OAuth 2.1 with Dynamic Client Registration, Claude registers itself automatically and walks you through a one-click consent screen: you pick the workspace this connector should use, approve access, and you're connected. There's no token to copy or paste.

That workspace choice is permanent for the connector. If you need it pointed at a different team, revoke the connector and reconnect rather than trying to switch it in place. Access tokens issued this way last 30 days and refresh tokens last 90; Claude refreshes them in the background, so you shouldn't notice the expiry once it's set up.

Personal access token (an alternative for Claude Desktop, and the only option for clients without OAuth support). Create one from Relaticle: log in, click your avatar in the top-right corner, select Access Tokens, click Create, and copy the token. It's shown once. Then add this to your Claude Desktop configuration file (claude_desktop_config.json):

{
  "mcpServers": {
    "relaticle": {
      "type": "streamable-http",
      "url": "https://mcp.relaticle.com",
      "headers": {
        "Authorization": "Bearer YOUR_TOKEN"
      }
    }
  }
}

The Access Tokens page in Relaticle settings with the Create form and AI Connectors list

Every connector you've authorized, OAuth or token-based, shows up under Settings → Access Tokens → AI Connectors, along with which workspace it's bound to and a Revoke button.

ChatGPT, briefly: its custom connectors also support OAuth Dynamic Client Registration, so the setup is the same shape as Claude.ai. Relaticle's search and fetch tools are built specifically to pair with ChatGPT's Company Knowledge feature. search returns canonical URLs, and fetch resolves one of those URLs back into a full record, which is the exact contract that feature expects.

Connect from Claude Code

Claude Code doesn't need a config file edit. Create a personal access token the same way as above (Settings → Access Tokens → Create), then run:

claude mcp add relaticle \
  --transport streamable-http \
  https://mcp.relaticle.com \
  --header "Authorization: Bearer YOUR_TOKEN"

That's the whole setup. Claude Code will list relaticle among its available MCP servers, and the same 37 tools that work in Claude.ai and Desktop are available in your terminal sessions.

Client Connection method Typical setup time
Claude.ai (web) OAuth custom connector, Dynamic Client Registration ~2 minutes
Claude Desktop OAuth custom connector, or config file plus personal access token ~2-5 minutes
Claude Code claude mcp add CLI plus personal access token ~2 minutes
ChatGPT OAuth custom connector, Dynamic Client Registration ~2 minutes

What Claude can do (the tools)

The server exposes 37 tools. One is identity (who-ami-tool, which returns the authenticated user, current team, team members, and the token's abilities, a useful first call to sanity-check a new connection). Two are cross-entity discovery (search and fetch, described above). Five work at the workspace level rather than on a single record: get-crm-schema-tool and list-custom-fields-tool for field discovery, get-crm-summary-tool for record counts and pipeline totals, aggregate-opportunities-tool for pipeline amounts grouped by stage or company, and list-activity-tool for who changed which record and what the field-level difference was. The remaining 29 are CRUD and relationship management across five entities:

  • Companies: list/search, get, create (requires name), update, delete
  • People (contacts): list/search, get, create (requires name, optional company_id), update, delete
  • Opportunities (deals): list/search, get, create (requires name, optional company_id/contact_id), update, delete
  • Tasks: the standard five, plus attach-task-to-entities-tool and detach-task-from-entities-tool to link a task to companies, people, and opportunities, or assign/unassign team members, without clearing existing links
  • Notes: the standard five, plus attach/detach to companies, people, and opportunities

List tools accept search, filter (including your custom fields, with operators like eq, gt, contains, and in), sort, per_page, and page. Create and update tools accept a custom_fields object for anything beyond the built-in fields. Relaticle's opportunity records, for example, ship with stage, amount, and close_date as custom fields out of the box, which is exactly the kind of thing a "review my pipeline" prompt needs to filter and sort on.

Custom fields are where the five schema resources come in. Before writing to an entity, Claude reads relaticle://schema/company (or /people, /opportunity, /task, /note) to learn the exact field codes and option values your team has configured. Get this wrong and the write is rejected outright: unknown field codes don't get silently dropped, they fail validation. There's also a built-in CRM Overview prompt that returns record counts and recently created companies and people, a reasonable way to start a session before asking for anything more specific.

who-ami-tool JSON response showing user, team, team members and token abilities

Writes & safety

This is the part worth getting right before you connect anything with write access.

Relaticle has two different places an AI can write to your CRM, and they behave differently. Inside the app, the dashboard chat assistant proposes writes: when you ask it to create or update a record, it builds a proposal card and waits for you to click approve before anything is saved to the database. That's a PendingAction, a real row that sits in a pending state until a human acts on it.

MCP is not that. When Claude calls create-company-tool, update-opportunity-tool, or any other write tool, it runs through the same action class the rest of the app uses to make that change, and the change is committed the moment the tool call returns. There's no proposal, no card, no separate approval step sitting in between. The safety net for MCP writes is the same one you'd expect from any API you hand to an agent: validation, authorization checks against Relaticle's normal policies, and the scope of the token you gave it, not a human-in-the-loop gate baked into the protocol.

That distinction matters for how you think about connecting Claude at all. A few things soften it in practice:

  • Delete is soft. Every delete tool soft-deletes; nothing is permanently gone, and records can be recovered. Delete tools are also flagged as destructive in their MCP metadata, which a well-behaved client can use to add its own confirmation step. Worth checking your client's settings if you want that extra prompt.
  • Every MCP write is attributed. Records created or updated through MCP are tagged with a distinct source ("MCP Agent"), separately from ones made through the chat assistant, the API, or the web UI, so you can tell them apart later.
  • Token scope is where you actually control this. OAuth connectors (Claude.ai, Claude Desktop's one-click flow, ChatGPT) get a single scope that authorizes the whole toolset. The finer control there is which workspace the connector can reach, chosen once at consent and fixed until you revoke it. Personal access tokens are more granular: when you create one, you check off which abilities it gets (read, create, update, delete), so a token meant for a read-only reporting workflow can be minted without write access at all, separately from a token you trust with full CRUD.

If you want Claude to have full read and write access to run real workflows, that's exactly what this is built for. If you'd rather it only look and never touch, create a token scoped to read only and use that instead. The same tools work; the write ones just get rejected.

Self-hosted setup

None of this is cloud-only. A self-hosted Relaticle install runs the identical MCP server, the same tools, with no separate deploy step or feature to turn on. If you haven't set MCP_DOMAIN, the server is reachable at {APP_URL}/mcp right out of the Docker image; set that variable if you'd rather serve it at its own subdomain. Personal access tokens work exactly as described above, and OAuth runs the same Passport-backed flow against your own domain once you've configured it.

The only thing that changes on a self-hosted instance is which URL you point your client at. Swap https://mcp.relaticle.com for your own {APP_URL}/mcp in the config snippets above, or for your MCP_DOMAIN if you set one. Everything else, including the direct-write behavior described in the previous section, is identical to Relaticle's hosted plan. For the full deploy walkthrough, see the self-hosting guide, or our blog walkthrough on self-hosting an AI-native CRM covering Docker, Coolify, and Dokploy.

Example workflows

A few things worth trying once you're connected, all built from tools the server actually has:

  1. Pipeline review. "Show me every opportunity in the Negotiation/Review stage, sorted by amount, and flag any that don't have a close date set." This is a single list-opportunities-tool call filtering on the stage custom field, sorting on amount, with close_date read back per record.
  2. Data entry after a call. "I just got off a call with Acme Corp. Create the company, add Jane Doe as a contact with the job title VP of Sales, and log a note summarizing what we discussed." Three tool calls: create-company-tool, then create-people-tool with company_id and the job_title custom field, then create-note-tool with company_ids and people_ids set directly, since note creation accepts those links up front and no separate attach call is needed.
  3. Unblocking a stalled deal. "Look at the notes on the Acme opportunity and tell me what's holding it up, then update the close date if we agreed on one in the call." Reads through list-notes-tool/get-note-tool, writes back through update-opportunity-tool.
  4. Weekly summary. "Give me an overview of the CRM, then list any companies created this week and tasks that are overdue." Starts from the built-in CRM Overview prompt, follows up with filtered list-companies-tool and list-tasks-tool calls.
  5. Follow-up tasks. "Create a task to follow up with John next week, assign it to me, and link it to the Acme company and opportunity." One create-task-tool call, then attach-task-to-entities-tool with assignee_ids, company_ids, and opportunity_ids in the same request.
  6. Reassigning overdue work. "Find tasks that are more than a week overdue and move them from Sarah to me." A filtered list-tasks-tool call, then detach-task-from-entities-tool to remove the old assignee and attach-task-to-entities-tool to add the new one.

A Claude conversation running a pipeline review through list-opportunities-tool

None of these need you to explain your schema first. Claude reads it from the schema resources the first time it needs a field code. If something doesn't work the way you expect, or you want the full tool reference, relaticle.com/developers/mcp has the complete list, and relaticle.com/help covers general account and workspace questions that aren't MCP-specific.

Related posts