by mhenry3164
A Model Context Protocol (MCP) server for Twenty CRM integration. Enables natural language interactions with your CRM data through Claude and other AI assistants. Supports CRUD operations, dynamic schema discovery, and advanced search across people, companies, tasks, and notes.
# Add to your Claude Code skills
git clone https://github.com/mhenry3164/twenty-crm-mcp-serverGuides for using ai agents skills like twenty-crm-mcp-server.
Last scanned: 8/30/2026
{
"issues": [
{
"type": "npm-audit",
"message": "fast-uri: fast-uri vulnerable to host confusion via backslash authority introducer",
"severity": "high"
},
{
"type": "npm-audit",
"message": "hono: Hono: ReDoS in CORS middleware via Access-Control-Request-Headers",
"severity": "medium"
}
],
"status": "WARNING",
"scannedAt": "2026-08-30T09:48:00.176Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}twenty-crm-mcp-server is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by mhenry3164. A Model Context Protocol (MCP) server for Twenty CRM integration. Enables natural language interactions with your CRM data through Claude and other AI assistants. Supports CRUD operations, dynamic schema discovery, and advanced search across people, companies, tasks, and notes. It has 100 GitHub stars.
twenty-crm-mcp-server returned warnings in SkillsLLM's automated security scan. It has no critical vulnerabilities, but review the flagged issues in the Security Report section before adding it to your workflow.
Clone the repository with "git clone https://github.com/mhenry3164/twenty-crm-mcp-server" and add it to your Claude Code skills directory (see the Installation section above).
twenty-crm-mcp-server is primarily written in JavaScript. It is open-source under mhenry3164 on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh twenty-crm-mcp-server against similar tools.
No comments yet. Be the first to share your thoughts!
Requires a passing catalog security scan. Resolve the flagged issues and resubmit to enable featuring.
โ ๏ธ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Transform your CRM into an AI-powered assistant
A Model Context Protocol server that connects Twenty CRM with Claude and other AI assistants, enabling natural language interactions with your customer data.
๐ Quick Start โข ๐ ๏ธ Tools โข ๐ Search & Filtering โข ๐ณ Docker โข ๐ค Contributing
filter grammar (ilike matching), not the nonexistent search paramfirstName/email/amount are converted to Twenty's name/emails/amount composite shapes on writestartingAfter/endingBefore) plus raw filter, orderBy and depth passthrough on every list toolpersonId/companyId/opportunityId when creating and the target links are created for youRetry-After), structured error messagesGet your Twenty CRM API key: in Twenty, go to Settings โ API & Webhooks (under Developers) and generate a key.
Configure your MCP client.
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"twenty-crm": {
"command": "npx",
"args": ["-y", "github:mhenry3164/twenty-crm-mcp-server"],
"env": {
"TWENTY_API_KEY": "your_api_key_here",
"TWENTY_BASE_URL": "https://api.twenty.com"
}
}
}
}
Claude Code:
claude mcp add twenty-crm -e TWENTY_API_KEY=your_api_key_here -e TWENTY_BASE_URL=https://api.twenty.com -- npx -y github:mhenry3164/twenty-crm-mcp-server
Or clone and run from source:
git clone https://github.com/mhenry3164/twenty-crm-mcp-server.git
cd twenty-crm-mcp-server
npm install
then point your client at node /path/to/twenty-crm-mcp-server/index.js.
| Variable | Required | Default | Description |
|---|---|---|---|
TWENTY_API_KEY |
โ | โ | API key from Settings โ API & Webhooks |
TWENTY_BASE_URL |
https://api.twenty.com |
Your instance URL if self-hosted | |
TWENTY_DEFAULT_CURRENCY |
USD |
Currency code used when none is given for money fields |
Once configured, use natural language to interact with your Twenty CRM:
"List the first 10 people in my CRM"
"Create a new person named John Doe with email john@example.com at Acme (company id ...)"
"Create a $12,000 opportunity called 'Acme renewal' in PROPOSAL stage"
"Add a note about today's call and attach it to the Acme company record"
"Create a follow-up task due Friday assigned to Sam, linked to the deal"
"Search people, companies and opportunities for 'blockchain'"
| Category | Tools |
|---|---|
| People | create_person, get_person, update_person, list_people, delete_person |
| Companies | create_company, get_company, update_company, list_companies, delete_company |
| Opportunities | create_opportunity, get_opportunity, update_opportunity, list_opportunities, delete_opportunity |
| Notes | create_note (with record targets), get_note, update_note, list_notes, delete_note |
| Tasks | create_task (with record targets + assignee), get_task, update_task, list_tasks, delete_task |
| Batch | batch_create_people, batch_create_companies (up to 60 records) |
| Workspace | list_workspace_members (for task assignment) |
| Metadata | get_metadata_objects, get_object_metadata |
| Search | search_records (across people, companies, opportunities, notes, tasks) |
Twenty stores identity/contact/money data in composite fields. This server accepts flat parameters and maps them to the shapes the API expects:
| You pass | Twenty receives |
|---|---|
firstName, lastName |
name: { firstName, lastName } |
email |
emails: { primaryEmail, additionalEmails: [] } |
phone |
phones: { primaryPhoneNumber, ... } |
linkedinUrl / xUrl / domainName |
{ primaryLinkUrl, ... } link composites |
amount: 12000 + currencyCode |
amount: { amountMicros: 12000000000, currencyCode } |
body (notes/tasks) |
bodyV2: { markdown } |
address (string) |
address: { addressStreet1, ... } (or pass a full address object) |
Anything else โ including your workspace's custom fields โ passes through untouched.
Note on company revenue: the field is
annualRecurringRevenueon most deployed Twenty versions andannualRevenueon Twenty v2.x+. Both parameters are supported; use the one that matches your instance (checkget_object_metadataforcompaniesif unsure).
Twenty's REST API has no search or offset query params โ this server builds real filters instead:
search on list tools becomes a case-insensitive ilike filter across sensible fields per object (people: first/last name + email; companies: name + domain; opportunities/notes/tasks: name/title).filter accepts Twenty's raw filter grammar for anything more specific:
createdAt[gte]:2026-01-01or(city[eq]:Austin,city[eq]:Dallas)emails.primaryEmail[ilike]:%@acme.comeq, neq, in, containsAny, is, gt, gte, lt, lte, startsWith, endsWith, like, ilike; combine with and(...), or(...), not(...). Use field[is]:NULL / NOT_NULL for empty checks.orderBy: e.g. createdAt[DescNullsLast] (directions: AscNullsFirst, AscNullsLast, DescNullsFirst, DescNullsLast).pageInfo.endCursor โ pass it as startingAfter for the next page. limit max is 200.depth: 0 (default) or 1 to include first-level related records.docker build -t twenty-crm-mcp-server .
{
"mcpServers": {
"twenty-crm": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "TWENTY_API_KEY", "-e", "TWENTY_BASE_URL", "twenty-crm-mcp-server"],
"env": {
"TWENTY_API_KEY": "your_api_key_here",
"TWENTY_BASE_URL": "https://api.twenty.com"
}
}
}
}
npm install
npm test # unit tests (node --test, no network needed)
npm start # run the stdio server
v2.0.0 fixes writes and search against the actual Twenty API. Breaking changes:
offset was removed from list tools (Twenty's REST API never supported it) โ use cursor pagination (startingAfter).body now maps to bodyV2.markdown; position params were dropped.PATCH (Twenty's documented verb) instead of PUT.{ records, pageInfo, totalCount? } instead of the raw API envelope.This project is community-supported โ the maintainer no longer runs Twenty day-to-day, so bug reports and PRs from active Twenty users are especially welcome and get reviewed and merged. See CONTRIBUTING.md.
v2.0.0 builds on excellent community work: composite-field mapping (#4 by @zaks), filter-based search (#6 by @studio7A, #8 by @InDebted-Growth), opportunity tools (#7 by @tarikhennen), and patterns from the forks by @BCJonkhout, @archie1492, @ndrkltsk and @atilladeniz.
MIT โ see LICENSE.