MCP 接口
Linker 内置了一个 MCP(Model Context Protocol,模型上下文协议)服务,让支持 MCP 的 AI 客户端与智能体(如 Claude Desktop、Cursor、Cline、各类 AI Agent 框架)能够直接连接 Linker,并通过自然语言读写业务数据。
一、为什么要有这个
过去要让外部系统使用 Linker 的数据,需要对接 开放 API:开发者要先拿到 API Key、阅读接口文档、写代码拼接请求体和条件,再解析返回结果。这条路对程序员很顺,但对「想在对话框里直接问一句『帮我查一下本月新增的客户』」的场景来说,门槛偏高。
MCP 是 AI 应用连接外部系统的开放标准。Linker 实现 MCP 服务端后:
- AI 客户端即插即用:在客户端里配置一次连接信息,AI 就能自己发现 Linker 有哪些实体、字段和可用操作,无需你写任何对接代码。
- 用自然语言操作业务数据:你可以直接说「把客户张三的电话改成 139xxxx」「列出状态为成交的订单」,AI 会选择合适的工具并填好参数去执行。
- 沿用既有权限体系:MCP 与开放 API 共用同一套 API Key 与用户权限,AI 能看能改的范围,和 Key 所绑定用户在系统里完全一致。
简单说,MCP 把 Linker 变成「AI 可读可写」的系统,是开放 API 之上更面向智能体、更低接入成本的通道。
与开放 API 的关系
开放 API 面向「写代码集成」的开发者;MCP 面向「AI 客户端 / 智能体」自动调用。两者底层一致、鉴权同源。如果你要做定时同步或深度定制逻辑,仍可用开放 API;如果只是让 AI 帮你在 Linker 里查数据、改字段,用 MCP 更省事。
二、前置条件:先准备 API Key
MCP 接口位于 /open/mcp,属于对外开放接口,必须通过 API Key 鉴权。
API Key 的创建与权限说明,请参考 开放 API 的「获取 API Key」一节:
- 由系统管理员在「系统设置 → 开放 API」创建;
- 创建时指定 绑定用户,该 Key 的可见范围、操作权限与该用户完全一致;
- Key 值仅在创建时完整显示一次,请立即保存。
权限决定一切
MCP 工具执行时的「当前用户」就是 API Key 绑定的用户。绑定用户看不到的数据、没有权限的实体或字段,AI 同样访问不到;写入操作也受该用户权限约束。涉及实体 / 字段结构的「管理类」工具,还要求绑定用户具备管理员权限。
三、连接配置
Linker 的 MCP 服务基于 Streamable HTTP 传输协议,连接参数如下:
| 项 | 值 |
|---|---|
| 传输协议 | Streamable HTTP |
| 服务地址 | http(s)://<host>:<port>/open/mcp |
| 鉴权 | 请求头 X-Api-Key: <your-api-key> |
默认应用端口为 18000,因此本地部署时的地址通常为:
http://localhost:18000/open/mcp在各 AI 客户端中接入
不同客户端的配置格式略有差异,但都需要填齐上面三项信息(地址 + 传输方式 + 请求头里的 API Key)。以通用的 MCP 客户端配置为例:
{
"mcpServers": {
"linker": {
"type": "http",
"url": "http://localhost:18000/open/mcp",
"headers": {
"X-Api-Key": "sk-xxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}- 若你的客户端使用
mcp.json/settings形式的配置,请按该客户端文档填入相同的 URL 与 headers; - 自托管部署请把
localhost:18000换成实际可访问的域名或 IP; - 连接成功后,客户端会自动拉取下方所有工具,AI 即可开始调用。
四、提供的工具能力
Linker MCP 提供的工具分为四类:元数据查询、数据读写、明细记录、结构管理(管理员)。字段一律使用「实体 / 字段内部名称」,调用数据类工具前,建议先用元数据工具确认内部名称。
4.1 元数据查询
用于让 AI 先「认识」你的系统结构,避免猜字段名。
| 工具 | 作用 |
|---|---|
list_entities | 列出所有可操作实体,含显示名、内部名称、主键字段、名称字段 |
get_entity_metadata | 获取某实体的完整元数据 |
list_fields | 列出实体的字段(内部名、显示名、类型、是否可创建 / 修改、引用实体) |
list_field_types | 列出 Linker 支持的字段类型及其显示名 |
list_cascade_fields | 列出可用于查询和引用的级联字段(含引用字段路径) |
get_field_options | 获取下拉 / 多选字段的全部选项值 |
resolve_entity_name | 按实体「显示名」反查它的内部名称 |
resolve_field_name | 按字段「显示名」反查它在某实体下的内部名称 |
4.2 数据读写
| 工具 | 作用 |
|---|---|
query_records | 分页查询某实体的业务记录,支持指定返回列、排序、回收站开关,以及可选的过滤条件 |
get_record | 按记录 ID 查询单条记录 |
save_record | 新增或修改一条记录;请求体不含 ID 为新增,含 ID 为更新(仅更新传入字段) |
batch_save_records | 按同一实体批量新增 / 修改记录 |
query_records 的过滤条件 condition 为原生 SQL 条件片段(字段使用内部名称),例如 status = 2 AND createdTime > '2025-01-01'。可省略;如提供,必须是合法的条件表达式。
save_record 的字段值使用内部名称;ID 与字典值均以字符串传入。需要同时保存明细时,可在值中附带 DETAILS 数组(每个元素为一条明细记录)。
4.3 明细记录
| 工具 | 作用 |
|---|---|
get_detail_records | 根据主记录 ID,查询指定明细实体的关联记录 |
4.4 结构管理(仅管理员)
这类工具会修改数据库结构(建表、加列、删表、删列),仅当 API Key 绑定用户为管理员时可用,且部分操作不可逆。
| 工具 | 作用 | 风险 |
|---|---|---|
save_entity_metadata | 保存 / 创建 / 修改实体结构 | 会改动库表 |
delete_entity_metadata | 删除自定义实体及其数据表 | 不可逆 |
save_field_metadata | 保存 / 新增 / 修改字段 | 会改动库列 |
delete_field_metadata | 删除自定义字段及其数据库列 | 不可逆 |
4.5 删除操作(不可逆)
| 工具 | 作用 | 风险 |
|---|---|---|
delete_records | 按记录 ID 列表删除记录 | 不可逆 |
delete_records_by_condition | 按条件批量删除记录 | 不可逆 |
删除务必二次确认
删除类工具(按 ID、按条件、删字段、删实体)均不可逆。AI 在执行前会向你确认,请务必核对实体、字段与条件范围后再放行;批量按条件删除尤其要确认条件不会误删。
五、典型使用流程
一个完整、安全的对话式操作通常遵循以下步骤:
- 确认结构:让 AI 先调用
list_entities/list_fields,弄清实体和字段的内部名称;如只知道显示名,用resolve_entity_name/resolve_field_name反查。 - 读取验证:用
query_records/get_record查看数据,确认要操作的对象与字段值。 - 执行写入:用
save_record/batch_save_records新增或修改;需要改结构时由管理员用 4.4 类工具。 - 回查确认:写入后再查一次,确认结果符合预期。
示例对话:
你:帮我把客户「张三科技」的负责人改成「李四」,电话改成 13900001234。
AI(内部):
resolve_entity_name("客户")→ 得到内部名Customerlist_fields("Customer")→ 确认有owner、phone、customerNamequery_records("Customer", ["customerId","customerName"], "customerName = '张三科技'")→ 拿到记录 IDsave_record("Customer", { "customerId": "...", "owner": "李四", "phone": "13900001234" })→ 返回更新后的 ID- 向你汇报「已更新客户张三科技」。
六、权限与安全建议
- 最小权限原则:为 AI 集成单独创建一个系统用户,按实际用途分配角色,再绑定到 API Key,避免使用管理员账号(除非确实需要结构管理工具)。
- Key 等同长期凭证:API Key 一旦泄露,相当于把对应用户的账号权限交给了他人。请妥善保管,不要写入前端代码或提交到公共仓库;不再使用时及时在「开放 API」页面禁用或删除。
- 删除前确认:不可逆的删除与结构变更,AI 会先征求你确认;你也可以先在测试环境验证工具行为。
- 数据边界清晰:AI 只能访问绑定用户权限范围内的数据,跨实体引用、回收站、审批等约束与系统行为一致。
七、常见问题
Q:连接失败,客户端报 401? A:通常是 API Key 缺失、已禁用或已过期。检查连接配置中的 X-Api-Key 请求头,并到「系统设置 → 开放 API」确认该 Key 状态。
Q:AI 说「找不到这个实体 / 字段」? A:MCP 工具使用内部名称(如 Customer、customerName),不是界面上显示的中文名。让 AI 先调 list_entities / list_fields,或用 resolve_entity_name / resolve_field_name 反查。
Q:为什么有些工具调不了? A:结构管理与删除类工具受绑定用户权限约束;若非管理员,相关工具会被权限拦截。请确认 API Key 绑定的是具备相应权限的用户。
Q:MCP 和开放 API 选哪个? A:让 AI 客户端 / 智能体自动操作数据,用 MCP;自行编写代码、做定时任务或深度集成,用 开放 API。
相关阅读
如果你想了解 MCP 在实际业务里能解决什么问题、如何落地,可以继续看下面几篇:
- 让 AI 帮你批量维护客户数据:销售月末 5 分钟干完的活 — 月末批量调状态、销售离职批量改负责人、批量清理演示客户等日常数据维护场景。
- 老板让 IT 配自动化?让 AI 自己写 — 用 AI 配合同到期提醒、商机自动派单、数据锁定规则等自动化与权限规则。
- AI 数据助手:让 Linker 数据听你说话 — 元数据查询、数据读写、明细记录三类工具的能力清单与典型场景。
- AI 业务配置助手:让 Linker 跟着业务长 — 事件执行器、数据锁定、表单布局、结构管理四类工具的能力清单与适用企业。
