跳转至

Connector 与 MCP 工具层

核心定位

OrgReOrg 的工具层负责把分散在各部门业务系统中的能力封装为可权限控制、可审计、可复用的 Connector 和 MCP Server。

Agent / Workflow
  -> Tool Policy
  -> MCP Tool Gateway
  -> Department Connectors
  -> GitHub / 财务 / CRM / 项目管理 / 文档 / BI / 审计系统

MCP 是推荐的工具暴露协议,但不是唯一实现。已有内部 API、Webhook、数据库只读视图或 SaaS SDK 都可以被封装在 Connector 之后,对 Agent 只暴露稳定工具契约。

第一批 Connector

Connector 典型系统 第一批只读能力 高风险能力
github GitHub / GitHub Enterprise 搜索 repo、issue、PR、commit、CI 创建 PR、合并、触发部署
wecom / feishu 企业微信 / 飞书 身份、组织架构、消息上下文 群发通知、审批确认
finance 财务系统 / OA 查询预算、报销、合同、发票 提交报销、付款、修改预算
crm CRM / 客户成功系统 查询客户、商机、沟通记录 更新阶段、创建合同、外发邮件
project Jira / Linear / 禅道 / 飞书项目 查询任务、里程碑、负责人 修改状态、创建任务
docs Notion / 飞书云文档 / Confluence / Git 文档 搜索文档、读取版本 发布制度、修改知识库
bi BI / 数据仓库 / 指标平台 查询看板、指标、口径 修改指标口径、导出敏感数据
audit 审计日志 / SIEM / 内部风控 写入和查询审计记录 删除日志不允许暴露给 Agent

工具命名空间

工具名应该表达系统、对象和动作,避免模糊动词。

github.search_issues
github.get_pull_request
github.list_ci_runs

finance.get_budget
finance.search_invoices
finance.submit_expense_draft

crm.search_accounts
crm.get_opportunity
crm.update_opportunity_stage

docs.search
docs.get_document
docs.create_review_request

audit.write_event
audit.query_trace

命名空间的价值是让权限、审计、评测和日志聚合更简单。不要让不同部门 Connector 暴露同名但语义不同的工具。

工具契约

每个工具都应定义:

  • 输入 schema。
  • 输出 schema。
  • 权限要求。
  • 风险等级。
  • 是否只读。
  • 是否需要人工审批。
  • 错误码。
  • 审计字段。
  • 可引用证据字段。
  • 幂等键或防重复执行策略。

输出中至少包含:

source_system
object_type
object_id
updated_at
permission_scope
evidence_url_or_path
summary
raw_fields_allowed_for_current_user

风险分级

这里的 R0R4 是工具动作风险等级,不是运行时渐进披露的 D0D5

等级 类型 策略
R0 公开或部门内只读查询 可自动执行,记录日志
R1 受限只读查询 需要用户具备源系统权限
R2 低风险写入 创建草稿、评论、任务草案,可撤销
R3 中风险写入 修改状态、创建正式对象,需要规则校验
R4 高风险动作 付款、合并代码、删除、外发,必须人工确认

权限判断不能只依赖 Agent 提示词。工具网关必须在代码层验证用户、角色、部门、项目、对象权限和动作等级。

最小 Tool Gateway Safety Harness

当前 repo 已新增本地 tool_gateway_safety_harness,用合成工具验证 MCP / Connector 前的最低安全边界。

它当前覆盖:

  • 工具 allowlist。
  • schema hash 固定。
  • 用户 scope 检查。
  • R4 高风险动作 require_approval
  • R3 写操作 draft_only
  • URL / egress allowlist 和 metadata host 拦截。
  • 工具输出脱敏。
  • 审计日志不保存原始 token、cookie、password 或 private key。

这不是完整 MVC,也不是源系统权限模型。它的作用是在真实 GitHub、财务、CRM、企微等 Connector 接入前,先固定每个工具都必须经过的统一门禁。

详见:Tool Gateway Safety Harness

第一批已经接入的本地工具族是 SearchConnector

  • context.search
  • context.get_document
  • context.report_gap

这三个工具现在通过 SearchConnector Tool Gateway 验证 schema hash、scope 子集检查、输出后置过滤和 safe output,避免 Agent 直接自由访问检索对象。

第二批已经接入的本地工具族是 reviewed/promoted knowledge card:

  • knowledge_card.search
  • knowledge_card.reindex

它们通过 Knowledge Card Tool Gateway 验证 search 不绕过 context.search、team 用户不能扩大到 restricted scope、restricted card 的内容/路径/owner/对象 ID 不泄露,全局 reindex 只作为治理动作开放,以及本地 reindex queue 的 safe output 不泄漏路径、owner、reviewer 或内容 marker。

第三批已经固化的是外部 Connector action contract:

  • wecom.message.send
  • github.pr.checks
  • crm.update_opportunity_stage
  • github.merge_pull_request

它通过 External Connector Action Gateway 验证外部系统响应不能直接进入模型,允许执行或 draft-only 后只能写安全 writeback event;safe output 和 writeback 不暴露消息 ID、会话 ID、外部 URL、owner、业务对象 ID 或正文。

外部系统后续回调进入 Framework 时,再通过 Connector Callback Ledger 验证签名、时间窗、必填字段和幂等;重复回调不追加 ledger event,无效签名、过期时间戳和缺字段回调不落账。真实企微 / GitHub / CRM adapter 后续只替换 API 调用、签名 header、重试策略和字段映射,不改变这两层边界。

返回证据

Connector 不应只返回自然语言摘要。它应该返回结构化证据:

  • 原始系统对象 ID。
  • 可追溯 URL 或路径。
  • 字段级脱敏状态。
  • 更新时间。
  • 数据 owner。
  • 当前用户为何可见。
  • 是否来自缓存。

Agent 生成回答时应优先引用这些证据字段,避免把业务系统结果改写成无法追踪的“模型记忆”。

审计日志

每次工具调用至少记录:

  • 用户和组织身份。
  • Agent session / workflow run。
  • 工具命名空间和工具名。
  • 输入摘要和敏感字段 hash。
  • 输出摘要和对象 ID。
  • 权限判断结果。
  • 是否经过人工审批。
  • 运行时间、成本和错误码。
  • trace id。

审计工具本身也要纳入权限控制。Agent 可以写审计事件,但不能删除审计事件。

与 Anthropic Connector 思路的关系

Anthropic 的连接器与 MCP 方向说明了两个工程重点:一是工具可以通过远程 MCP Server 接入模型或 Agent,二是组织管理员需要对工具动作做 allow、approval、blocked 等限制。

OrgReOrg 的实现应把这些思想内化为平台能力:

  • Connector 是部门系统能力的封装边界。
  • MCP 是 Agent 调用工具的标准接口之一。
  • 工具权限是组织治理的一等对象。
  • 源系统权限仍然是底线,OrgReOrg 只能收窄权限,不能放大权限。

参考资料:

  • Anthropic MCP Connector 文档:https://docs.anthropic.com/en/docs/agents-and-tools/mcp-connector
  • Anthropic Connectors 权限说明:https://support.anthropic.com/en/articles/11176164-pre-built-web-connectors-using-remote-mcp