将 Claude Code 作为 MCP 服务
为范围明确的 Claude 编码任务构建 MCP 封装,限定工作区与权限,验证单个只读结果后再开放远程访问。

Claude Code 没有“一键变成 MCP 服务器”的内置模式
Claude Code 通常扮演 MCP 客户端:它连接服务器并调用工具。若要通过 MCP 对外提供 Claude 编码能力,需要自行构建一层服务器封装,暴露任务型工具,并在后端调用获批的程序化执行方式。任务简单、一次调用即结束的原型,可以使用 Claude Code print 模式;需要流式输出、会话、Hook、自定义工具和更完整生命周期控制的服务,则更适合 Claude Agent SDK。
提供带严格参数结构的 explain_repository、review_diff 或 plan_fix。通用 run_any_prompt 会隐藏真实意图,削弱策略控制。
服务器应把不透明的 workspace ID 映射到获批目录。不要接受任意文件系统路径,也不要让提示词决定工作目录。
明确允许与禁止工具、权限模式、模型、最大轮次、总超时、输出上限、取消和产物保留规则。
先把一个只读 STDIO 工具验证稳定,再考虑 HTTP、身份验证、多租户、队列、持久化和横向扩容。
先设计信任边界,再设计工具目录
MCP 服务器不是一个透明的协议转接器,而是调用方与高权限编码智能体之间的策略执行点。Claude 可能读取源码、运行命令、修改文件或访问网络,因此封装层必须验证调用者身份,授权工作区与任务,校验每个参数,创建隔离执行环境,并规范化结果。服务器没有明确授予的能力,不应通过任何间接方式落到 Claude 手中。
| 层级 | 职责 | 危险捷径 | 所需证据 |
|---|---|---|---|
| MCP 接口 | 稳定工具名、说明、类型化输入和受限输出。 | 只提供一个可传任意参数的通用提示词工具。 | 结构测试与兼容性契约。 |
| 策略 | 调用方、租户、工作区、动作、工具和网络授权。 | 只靠系统提示词要求“注意安全”。 | 明确的允许或拒绝决定及理由。 |
| 执行 | 隔离进程或容器、固定工作区、干净环境和资源限制。 | 在共享主机上继承开发者长期账号运行。 | 镜像或版本、挂载、身份、限制和启动时间。 |
| 智能体 | 使用选定工具与指令执行范围明确的任务。 | 为了无人值守方便而跳过权限检查。 | 模型、轮次、工具调用、权限事件和状态。 |
| 结果 | 结构化状态、摘要、发现、产物和安全诊断。 | 直接返回原始日志、密钥或无限量仓库内容。 | 任务 ID、时间、产物哈希和脱敏记录。 |
有意识地选择执行接口
适合小型原型或彼此独立的批处理任务。claude -p 可返回文本、JSON 或流式 JSON,也支持最大轮次和明确工具策略等限制。
如果服务需要程序化会话、流式事件、自定义工具、权限回调、Hook、会话恢复或一致的应用层控制,更适合使用 Agent SDK。
如果真实需求是面向客户、具备持久会话的托管智能体,而不是自己运维 MCP 封装,应评估托管式产品。
实现一条受控的请求到结果链路
建议从 review_diff 这类只读工具开始。输入可以包含获批 workspace ID、基准修订、目标修订、审查类别和最大问题数,但不应允许调用方传入任意 Shell 命令、环境变量块、文件路径、模型参数或权限覆盖;这些控制项必须由服务器掌握。
使用封闭结构解析输入,拒绝未知字段,规范化修订版本,限制字符串与数组长度,并通过允许列表解析工作区。校验失败时直接返回协议错误,不要调用 Claude。
为任务分配 ID、临时可写目录、执行身份、截止时间、输出预算和取消令牌。只读分析应把获批源码以只读方式挂载,除非工具契约明确允许编辑。
策略和响应格式由服务器指令固定,已校验任务数据放入边界清晰的字段。仓库内容和调用方文本都属于不可信数据,不能借此扩大权限。
使用 print 模式时,指定结构化输出、最大轮次、允许与禁止工具以及合适权限模式;使用 SDK 时,通过选项和权限回调落实同样边界。
把内部事件映射为少量状态,例如排队、运行、等待批准、完成、取消或失败。脱敏密钥、主机绝对路径、原始环境数据和无关源码。
返回类型化问题、摘要、变更文件列表、测试结果、产物引用和终态,并附工作区修订与产物哈希,便于客户端核验分析对象。
关键规则:不要把 --dangerously-skip-permissions 当成自动化方案。服务不能通过删除边界来替代交互确认;应使用权限回调、批准工具、预授权只读工具集或任务级策略。
本地行为可预测后,再开放远程访问
STDIO 的边界最小:客户端启动进程,也不会对外开放监听端口。远程 Streamable HTTP 服务器则会变成分布式、多用户执行服务,需要在工具发现前完成身份验证,并具备逐工具授权、受保护资源元数据、租户隔离、会话管理、请求与输出限制、队列、取消、背压和安全停机。仅有 TLS 并不能替代这些控制。
| 运行风险 | 控制措施 | 测试 |
|---|---|---|
| 重复执行 | 幂等键与服务端任务记录。 | 超时时重试相同请求,确认只产生一个任务。 |
| 任务失控 | 轮次、总时长、CPU、内存、磁盘、输出与费用上限。 | 制造循环和超大输出,确认终止与清理。 |
| 跨租户访问 | 隔离身份、工作区挂载、会话存储、缓存和日志。 | 尝试访问另一租户的工作区和会话 ID。 |
| 客户端断连 | 取消策略、租约、心跳和脱离任务规则。 | 在每个阶段断开连接,检查任务结局。 |
| 密钥泄露 | 最小环境、密钥代理、脱敏和出站白名单。 | 植入测试密钥,确认结果和日志均不出现。 |
| 部分失败 | 终态、产物提交协议、清理和恢复能力。 | 写入中途终止进程,确认不会返回模糊成功。 |
记录决策,不要记录整个工作区
- 记录调用方、租户、工具、结构版本、工作区 ID、不可变修订、策略决定、任务 ID、模型、时长、工具调用数、状态和产物标识。
- 默认不要保留原始提示词、源码文件、环境变量块、命令输出或模型轨迹。确需诊断保留时,应明确声明、最小化、加密并设置期限。
- 健康检查应与 MCP 端点分开,而且不能泄露租户、路径、凭据、提示词或当前任务内容。
- 固定并逐步升级经过测试的版本。Claude Code 或 Agent SDK 更新属于执行引擎变更,需要兼容性与安全测试。
把外部能力留在高权限封装之外
编码服务应只专注于获批仓库和开发任务。这个主题没有准确对应的 QVeris Tool 或 Provider 页面,因此 CTA 使用通用产品入口。如果工作流需要外部 API 或实时数据,应把它定义为单独的能力边界,先在 QVeris 文档 中审查接入模型,再到 QVeris演练场 独立验证。
- 编码与外部调用应使用不同凭据、策略、日志和批准规则。
- 只把带来源的最小结果传入编码任务,不要向高权限智能体提供宽泛供应商凭据。
- 保留供应商、时间、单位、参数和结果标识,让后续代码决策可以审计。
将 Claude Code 封装为 MCP 服务常见问题
不能假设存在一键服务器模式。应围绕受支持的程序化路径(如 print 模式或 Claude Agent SDK)自行构建 MCP 封装。
它会把多类风险折叠进一个不透明调用。任务型工具的结构、权限、测试、费用上限和预期输出都更清楚。
小型独立任务使用 print 模式;需要会话、流式输出、Hook、自定义工具、权限回调或服务级生命周期时使用 Agent SDK。
可以,但必须明确设计写入契约、隔离可写工作区、批准流程、验证、测试、产物处理和回退。首个里程碑仍应只读。
STDIO 行为已可预测,并且身份验证、授权、隔离、配额、取消、审计和事件响应都准备好之后。
使用服务端生成、绑定租户与工作区的 session ID,并明确过期、恢复、并发、存储、删除和客户端断连行为。
参考资料与下一步
Claude Code CLI 参考
Claude Code 程序化使用
Claude Agent SDK 概览
Anthropic 智能体托管指南
Claude Code 权限
QVeris MCP Server 文档
QVeris演练场
