Skip to content

11 — 平台 MCP / 工具 REST(Dify 等 Agent)

Dify 或其它 Agent 调用本平台知识库与待办时使用。身份绑定在 工具令牌,不是 HMAC,也不是门户登录 Token。

设计方案:doc/49-Dify接入与MCP开放.mddoc/51-通用单表GraphQL查询.md
未开通 client_credentials。平台表白名单 GraphQL 只读POST /api/open/mcp/graphql12 为 HMAC 通道);第三方库 JDBC 视图仍见 09

1. 鉴权

工具令牌由门户 AI 网关在用户已登录会话内签发(短期 opaque,存 Redis)。调用方请求:

http
Authorization: Bearer {toolToken}

服务端从令牌解析 username 与 scope。禁止用工具 Body 里的 username 做授权。

scope能力
mcp:kb:read知识检索 / 文档 / 文件(受文档 ACL)
mcp:matter:read当前用户待办
mcp:data:query平台表白名单 GraphQL 只读(叠加字段/行级权限)

时间窗:令牌 TTL 默认 1800 秒。过期须由网关重新签发。

2. 基路径

/api/open/mcp走门户 Session 拦截器)。

方法路径说明
POST/kb/search关键词检索当前用户可见文档
GET/kb/documents?docCode=文档详情
GET/kb/files?fileCode=文件下载(先过文档 ACL)
GET/matters/unread-count未读角标
GET/matters/page?view=事项分页(view 同门户)
GET/matters?matterId=事项详情(须为参与人或发起人)
POST/graphql平台表白名单 GraphQL(scope mcp:data:query

响应:知识/待办接口仍为门户 ApiResult/graphql 例外返回 GraphQL {data,errors}(见 12 §3.3)。其它接口鉴权失败 HTTP 200 + code=401/403(与开放 HMAC 习惯一致)或 401,以代码为准。

3. 知识可见范围

检索结果 = 已发布的 PLATFORM + SYSTEM + 本人 USER + 所在 TEAM 文档。他人 USER 文档不会出现。

4. 待办隔离

与门户 /api/portal/matters 相同:按 portal_matter_party.username / 发起人过滤。即使用户对模型说「查 B 的待办」,服务端仍只查令牌用户。

5. 与 HMAC / OAuth2 的边界

能力鉴权
第三方 推送 事项/知识HMAC(0206
任务中心用户委托OAuth2(03
Agent 读取 当前用户待办/知识本文工具令牌
Agent 读取 平台表白名单(GraphQL)本文工具令牌 + mcp:data:query
第三方系统批查平台表HMAC 12(须先申请审核)
/api/portal/**/api/system/**门户会话,工具令牌不可用

6. Dify 配置提示

工作区级 MCP 凭证无法按终端用户隔离。推荐 Chatflow HTTP 请求工具,Header:

text
Authorization: Bearer {{tool_token}}

tool_token 来自网关写入的会话 inputs,不要让模型生成。