5.8万星开源CRM Twenty,专为AI Agent而生

摘要
Twenty 是 GitHub 上约 5.8 万星的开源 CRM,官方定位是“为 AI 设计的 Salesforce 开源替代品”。它自带 AI 对话助手和工作流 Agent,并原生提供 MCP 服务,Claude Code、Cursor、ChatGPT 等 Agent 授权后,可以直接用自然语言读写客户数据。
背景:CRM 为什么需要“AI 原生”
传统 CRM 的问题很熟悉:贵、封闭、改一个字段要走一堆配置。想让 AI Agent 接进去,往往还要自己封装接口、处理鉴权、控制权限。
Twenty 的思路是把 CRM 当成“和代码库一起构建、发布、做版本管理的东西”。对象、字段、视图都能写成代码,AI 接入也是内置能力,而不是事后补丁。
核心优势
- MCP 服务开箱即用:每个工作区都有一个 MCP 端点,兼容 Claude Desktop、Claude Code、Cursor、ChatGPT 等客户端,支持 OAuth(推荐)和 API Key 两种鉴权。
- 权限继承,不会越权:OAuth 连接沿用登录用户的角色权限;API Key 则取决于你给它分配的角色,可以细到每个对象的读写权限。
- 工具调用设计得很克制:Agent 只需要两步,先用
learn_tools获取工具的参数结构,再用execute_tool执行。记录类操作的命名有固定语法,比如find_many_companies、update_one_opportunity,Agent 不用先“查目录”就能拼出来。 - 内置 AI 能力:对话助手能感知当前页面(说“这家公司”它就知道指哪个),工作流里可以挂 AI 动作和自主 Agent,用来做线索分类、数据补全、跟进邮件草稿等。
- 一切皆代码:用官方脚手架就能把对象、字段、视图定义成代码,再发布到工作区。
- 可自托管:Docker Compose 部署,数据留在自己手里,也有云版本。
面向人群
- 想给销售、客服流程接入 AI Agent,又不想把客户数据交给封闭 SaaS 的技术团队
- 正在用 Claude Code、Cursor 这类工具,希望“对着 CRM 说话”就能查数据、建记录的个人开发者
- 需要高度定制 CRM,并且希望定制内容能进 Git 做版本管理的团队
- 受够了传统 CRM 价格和封闭性的创业公司
使用方法
1. 先有一个工作区
最快的方式是注册云版本,不到一分钟就能起一个工作区;想自己掌控数据,就用官方的 Docker Compose 方案自托管。自托管时要保证环境变量 SERVER_URL 和实例的公网地址一致,MCP 的 OAuth 发现信息都由它生成。
SERVER_URL=https://twenty.yourcompany.com
2. 让 AI Agent 连上它
在 Twenty 的“设置 → MCP & APIs → MCP”里可以直接复制配置。以 OAuth 为例,把下面的配置放进 MCP 客户端(Claude Code 是项目下的 .mcp.json):
{
"mcpServers": {
"twenty": {
"type": "streamable-http",
"url": "https://{your-workspace-url}/mcp"
}
}
}
首次连接会自动弹出浏览器让你授权,不需要在配置文件里存任何密钥,令牌也会自动刷新。如果客户端不支持 OAuth,就在配置里加一个 Authorization: Bearer YOUR_API_KEY 请求头,API Key 在“设置 → MCP & APIs → API”里创建。
3. 直接说人话
连上之后,可以这样对 Agent 说:
- 列出最近创建的 5 家公司
- 在 Acme Corp 下新建联系人 Jane Doe
- 找出所有金额超过 1 万美元的未关闭商机
4. 进阶:把 CRM 当代码来写
用脚手架创建应用:
npx create-twenty-app my-app
用代码定义一个“商机”对象。注意对象和每个字段都要带一个固定不变的 universalIdentifier(任意 UUID 即可),SDK 靠它在多次同步、部署之间识别同一个实体,漏写会直接校验失败:
import { defineObject, FieldType } from 'twenty-sdk/define';
export default defineObject({
universalIdentifier: '3f1c2a6e-8b1d-4c57-9e2a-1d4b7a9c0e11',
nameSingular: 'deal',
namePlural: 'deals',
labelSingular: 'Deal',
labelPlural: 'Deals',
fields: [
{
universalIdentifier: '6a2d9f40-5c3e-4b8a-a1f7-2e9c4d8b7a01',
name: 'name',
label: 'Name',
type: FieldType.TEXT,
},
{
universalIdentifier: '9b7e1c32-4f6a-4d2b-8c5e-7a1f3b9d6c02',
name: 'amount',
label: 'Amount',
type: FieldType.CURRENCY,
},
{
universalIdentifier: 'c4d8a7b1-2e9f-4a6c-b3d5-8f1e6a2c9b03',
name: 'closeDate',
label: 'Close Date',
type: FieldType.DATE_TIME,
},
],
});
发布到自己的 Twenty 服务器(加 --private 是推到服务器自带的应用仓库,不加则默认发布到 npm):
npx twenty app:publish --private
如果你本身就在用编码 Agent 来开发,官方还提供了一套 Agent Skills,覆盖创建应用、开发应用、部署运维、发布上架,以及通过 MCP 连接工作区,在 Claude Code、Codex、Cursor 等工具里都能装:
npx skills add https://github.com/twentyhq/twenty/tree/agent-skills --list
使用前要留意的几点
- 许可证不是纯粹的宽松协议:项目主体是 AGPLv3,个别带有商业授权标记的文件属于企业版,部分软件包则是 MIT(包括 twenty-sdk、create-twenty-app 等应用开发工具链)。另外许可证里有一条“应用例外”:只通过官方 API 和 SDK 与 Twenty 交互、不修改其源码的应用,不会因此被 AGPL 传染,可以闭源。但如果你要改 Twenty 本体再做商用分发或对外提供服务,先读清楚仓库里的许可证说明。
- MCP 的权限要自己收紧:给 API Key 分配角色时按最小权限来,别让 Agent 默认拥有全部读写权。
- 工具目录别一次性全拉:全量工具列表有几百个操作,多数 Agent 会截断,按官方推荐的
learn_tools加execute_tool的流程走更稳。
我的看法
CRM 是最适合交给 AI Agent 的业务系统之一:数据结构清晰、操作高度重复、权限边界明确。Twenty 的价值不在于“又一个开源 CRM”,而在于它把 MCP、权限模型和代码化定制放在同一套设计里,Agent 接入的成本很低,出问题时的爆炸半径也可控。
如果你正想试试“让 Agent 管客户”,用云版本十分钟就能跑通;真要上生产,再迁到自托管也不迟。
项目地址:github.com/twentyhq/twenty