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