ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

MCP官方文档翻译实战:术语表、工作流与版本管理全解析

MCP官方文档翻译实战:术语表、工作流与版本管理全解析

最近我把 MCP 官方开发文档完整过了一遍译了,就是大家常说的“MCP 文档翻译”那套东西。MCP 全称 Model Context Protocol,模型上下文协议,做 AI 应用开发的朋友最近应该没少听到这个词。它解决的核心问题很实在:让大模型能标准化、安全地接入外部工具和数据源。协议本身已经有完整的官方文档体系,但中文资料大多又散又旧,术语翻得五花八门,版本动不动就落后,所以我自己动手把开发文档(Documentation)这一块系统地翻译了一遍。这篇博客不聊什么翻译理论,就讲我实际动手过程中碰到的取舍、踩过的坑、以及沉淀下来的流程。不管你打算自己翻、带人翻,还是只想把官方文档彻底吃透,这里面的思路应该能直接用。

1. 翻译前的整体设计与思路拆解

1.1 MCP 协议到底是什么,为什么要专门啃官方文档

先对齐一下基础认知。MCP 的设计目标,是给 AI 应用与外部系统之间,提供一个类似“USB-C 接口”的统一标准。以前接一个工具写一套自定义协议,接一个数据源写一套解析逻辑,现在通过 MCP 这套标准协议,把资源(Resource)、工具(Tool)、提示词模板(Prompt)这些能力暴露出来,模型侧和工具侧各做一个适配就能互相通信。

官方开发文档覆盖的内容不是一份简单的 API 手册,而是从架构设计到协议规范的一整套说明。我印象比较深的结构有:How it works / Architecture、Transport(传输层)、Core primitives(资源、工具、提示词三个核心原语)、Security(安全模型)、Versioning(版本策略)、以及各语言 SDK 的说明。其中架构和核心原语这两块是理解整个协议的关键,Security 和 Versioning 容易被跳过,但真正落地的时候不读懂会吃大亏。

为什么要专门去翻译它,而不是看二手解读?我个人的体会是,MCP 是一个协议,协议的准确性极其敏感。二手文章通常会为了通俗牺牲精确,比如把“sampling”解释成“模型抽样”,把“capability negotiation”说成“功能协商”,意思方向上没错,但到了对接实现时,字段名、流程、边界条件只要差一点,调试成本就直线上升。官方文档是唯一能同时保证准确性和权威性的来源。

1.2 为什么不能直接扔给机器翻译

有人会觉得,现在翻译工具都这么强了,把官方文档扔进去,几分钟出来一堆中文,为什么还要人工去啃?我可以直接说,用机器翻译做粗稿,完全没问题;但想直接发布,问题很多。

第一个问题在术语一致性。MCP 文档里大量出现 client、server、host、resource、tool、prompt、transport、capability、sampling、lifecycle 这些词。机器翻译会随着上下文随机切换译法,比如 transport 一会翻“传输”一会翻“传送”一会翻“传输层”;capability 一会“能力”一会“功能”一会“性能”。读者看一篇长文档的时候,同一个术语前后叫法不一致,理解成本会急剧增加。技术文档翻译的“信达雅”,第一优先级是“信”,而术语统一是“信”的基本前提。

第二个问题在句法处理。英文技术文档喜欢用被动语态、后置定语、长从句。机器翻译有时候能处理好,有时候会把一段话翻得又长又扭,比如“The server might also provide sampling capabilities to allow the client to perform model inference”机器直译成“服务器可能也提供采样能力以允许客户端执行模型推理”,对是对,但欠打磨。人工精修至少能把话说得像个中国人写的。

第三个问题是上下文理解。文档里的前后引用、潜在的前提条件、代码块内外的呼应,机器翻译不会在意。比如某段话说“tools are typically used when the client needs to perform an action”,这里的“typically”暗示了工具与前面对资源的差别,翻译成“通常”还是“一般”虽然区别不大,但整段的语气和逻辑承转需要人工去把握。

我的结论是:机器翻译用在工作流的“初翻”环节,人的精力放在术语控制、句法精修、上下文核对这三个环节上。这样效率和质量才能同时保住。

1.3 翻译范围和优先级怎么定

官方文档是个大工程,别想着一次性全翻完。我一开始也贪多,把 Introduction、Tutorial、SDK 文档全部列入清单,结果发现自己连架构部分都还没吃透,越翻越觉得地基不稳。后来我把范围重新规划成了两个批次。

第一批,面向“理解协议”的文档,优先级最高:

  • How it works 和 Architecture(理解 MCP 的整体框架)
  • Core primitives(Resources / Tools / Prompts,MCP 的核心抽象)
  • Transports(stdio 与 HTTP,理解连接方式)
  • Security(安全边界和信任模型)
  • Versioning(协议版本演进逻辑)

第二批,面向“上手开发”的文档:

  • 各语言 SDK 的说明
  • Quickstart 教程
  • API 参考类内容

这个顺序不是随便定的。先把原理性的东西翻透,后面翻 SDK 和教程时你会发现大量术语可以复用,术语表越用越稳。反过来如果先翻教程,你大概率会在中途反复回来翻架构文档,效率很低。实际操作时,我给第一批定的目标是“全文精翻,每一句都过脑子”,第二批则允许在标准段落上适当精简,保留一切字段名、接口名、配置项和步骤说明。

还有一个规划要点:每篇文档要标注原文版本号和翻译日期。MCP 目前还在快速演进,文档更新频繁,没有版本标注,后续维护时根本不知道哪里需要重翻。这个细节很多人一开始会忽略,等到上游更新了你才后悔。

2. 核心细节解析与实操要点

2.1 术语表:一切翻译工作的地基

做技术文档翻译,术语表不是可选项,是必需品。MCP 文档的术语量不算夸张,但涉及很多“在英文里日常、在协议里特殊”的词。我建术语表时,把词条分成了三类:保留原文、标准化翻译、语境译法。

保留原文的词主要是 Client、Server、Host、Resource、Tool、Prompt、Transport 这类。原因很简单:中文开发者在交流时本身就习惯说“client/server”“resource”“tool”,这些词强行翻译反而增加认知负担。比如把 Tool 翻成“工具”没问题,但你在代码里看到的字段名还是 tool,文档句子说的是“工具”,引用代码时又是“tool”,读者要来回切换。更糟的是 Server 翻译成“服务端”也好,“服务器”也好,总有一批人不适应。我的选择是:协议层面的核心角色词全部保留英文首字母大写,正文里第一次出现时加一次中文解释,后面直接用英文。

标准化翻译的词,指的是那些中文社区已经有共识译法的:

  • capability:能力/能力声明
  • initialization:初始化
  • lifecycle:生命周期
  • sampling:采样
  • confirmation / approval:确认/批准
  • permission:权限
  • context:上下文
  • origin:来源(安全模型里强调请求来源)
  • identity:身份

语境译法的词,需要结合上下文判断,比如:

  • expose:暴露/对外提供
  • advertise:声明/告知(能力协商场景下)
  • bind:绑定/监听(传输层场景)
  • scope:作用域/范围
  • session:会话/连接

术语表建好之后,务必放到待翻译文档的根目录,每次翻译前先读一遍。协作翻译时这就是团队的“宪法”,任何人有新增术语的提议都要走更新流程。我在翻译中后期发现 transport 在最早期被我翻成了“传送”,后来统一改成“传输层”,为了这个不一致,整整花了一下午做全文检索替换。术语表做得越早,这种冤枉活越少。

2.2 协议文体的语气与半技术词处理

MCP 官方文档是典型的协议文档,用词比普通技术博文更严谨,有大量 RFC 风格的强制性用语。最典型的是 MUST、SHOULD、MAY 这类词,翻译时必须固定:

  • MUST:必须
  • MUST NOT:禁止/不得
  • SHOULD:应当
  • SHOULD NOT:不应当
  • MAY:可以
  • REQUIRED:必填/必需的
  • OPTIONAL:可选

这套翻译规范不能随心所欲地换词。因为协议文档中这几个词的语气强度差异在语义上很重要,“必须”是硬性要求,“应当”是默认推荐但允许例外,“可以”是纯可选。中文读者习惯上对“应该”和“必须”的敏感度不一样,如果整篇都用“应该”处理,等于抹掉了协议强制的边界。我在翻译时会给这些词做高亮,在 markdown 里直接加粗,让中文读者一眼看到约束强度。

除了这些大写强约束词,还有一批“软性提示词”也需要统一风格:

  • Note that...:注意,……
  • It is important to...:需要特别注意的是……
  • Typically...:通常/一般情况下……
  • In practice...:实际使用中……
  • That is... / i.e. / e.g.:即/例如

这类词不建议翻得太硬,比如“It is important to”如果每次都翻成“重要的是”,句子会显得很生硬。我通常翻成“需要注意的是”,既保持了提示语气,又符合中文文档习惯。还有一个细节:原文里大量的“will”和“shall”,在协议文档里表示的是一种契约性的未来行为,比如“The server will handle the request”,这里翻“将处理”或“会处理”都可以,但全篇建议统一用“会”,不然两种译法混着用,读者会问到底是时态还是承诺。

2.3 代码、JSON Schema 与链接的处理策略

翻译文档时最容易出错的地方其实不是文本,而是代码块和配置文件。我的处理原则是:能不动就不动。

首先是代码块。MCP 官方文档里有大量 TypeScript、Python、JSON-RPC 示例,这些代码块的内容,包括变量名、函数名、URL 路径、请求方法、协议字段,一律逐字保留。注释可以翻译,但前提是翻译后仍能对齐上下文。举个例子:

// 初始化 MCP 客户端并连接到本地服务器 const client = new McpClient({ name: "example", version: "1.0.0" }); await client.connect(serverTransport);

注释翻译的好处是中文读者扫一眼就懂,但我踩过一个坑:原文注释描述的是某个具体流程节点,翻译时我自作聪明地加了一句自己的解释,结果导致读者把注释和代码对应到错误的顺序上。技术文档翻译不要“夹带私货”,注释忠于原文即可,补充说明属于批注的范畴,要单独写,别混进注释里。

其次是 JSON Schema。MCP 文档中很多地方用 JSON Schema 描述工具输入参数、资源请求参数。这里字段名绝对不能动,比如minLength、properties、required、$ref这种,翻不翻译都是它。描述性字段 description 的值可以翻译,因为那是给人读的。但注意,翻译 description 时要核对格式:JSON 里多一个逗号、少一个引号都会导致整个 schema 解析失败。我的经验是,翻译完一个 schema 块后,要用工具做一次 JSON 格式校验,别等读者拿去用的时候才发现坏了。

最后是链接和版本号。文档里的内链不能随便改成中文路径,MCP 文档站有固定的 URL 结构,改了链接就是制造死链。版本号、发布号、协议版本号全部原样保留,比如2025-03-26这个日期版本号,翻译成“2025年3月26日”反而会在检索和对照时造成麻烦。

3. 实操过程与核心环节实现

3.1 翻译工作流与协作工具选型

一个人翻还是团队翻,工作流差别很大。我单独翻的时候用的是轻量流程:官方文档仓库 fork 一份到本地,建分支,翻译,提交,推送,再和上游同步。协作翻译时,流程要重一些,需要加入审校环节。

我建议的团队协作流程是这样:

  1. 译者抽取任务,按章节认领
  2. 初翻稿提交到共享库
  3. 技术审校检查术语表执行情况、代码块完整性和协议准确性
  4. 终审做语言润色,处理长句和语感问题
  5. 合并发布前,整体跑一遍“术语一致性检查和死链检查”

工具选型上不搞花活。文本编辑直接用支持 Markdown 的编辑器就行,版本管理用 Git,协作仓库用一个共享平台,关键是每个译者必须严格遵守同一份术语表和风格指南。如果团队跨时区,需要引入异步协作机制,我实际用的是一个共享表格来跟踪每个文档的翻译状态:未开始、翻译中、待审校、已发布。状态流转看着简单,真正跑起来比什么都管用。

有的朋友问要不要用翻译记忆工具。我的建议是:别一上来就上重工具,先用电子表格做术语表,把风格指南写成文档,比任何工具都有效。等文档量堆到几万字以上,再考虑引入翻译记忆工具,让机器帮你查重句和半句,那时候性价比才划算。

3.2 一个段落的完整翻译复盘

说再多原则,不如拿一段原文完整拆一遍。我随手还原一段类似官方文档的句子,演示我的处理过程:

原文(英文):An MCP server is the component that provides capabilities to clients. It exposes resources, tools, and prompts through a transport layer and must handle requests following the JSON-RPC 2.0 specification.

初译稿:一个 MCP 服务器是向客户端提供能力的组件。它通过传输层暴露资源、工具和提示词,并且必须按照 JSON-RPC 2.0 规范处理请求。

对照术语表回看,这里的“MCP 服务器”“能力”“客户端”“传输层”“资源”“工具”“提示词”都触发了术语处理规则。我的术语表规定,核心角色词保留英文并首字母大写,所以第一步改成:

修订稿:MCP Server 是为 Client 提供能力的服务端组件,通过传输层暴露 Resource、Tool、Prompt 三类原语,必须按 JSON-RPC 2.0 规范处理请求。

对比初译稿和修订稿,有四处变化:

  • “服务器”改回“Server”,“客户端”改回“Client”,保持全文一致
  • “资源、工具和提示词”改成“Resource、Tool、Prompt 三类原语”,因为这个句式在原文中强调的是协议原语,而不仅仅是三个概念
  • 拆掉了“一个…是…”的定语后置结构,改成“为 Client 提供能力”,更顺
  • 删掉了“并且”,用“必须”承接,语气更干脆

这段改编规模不大,但效果明显。翻译不是逐字对应,而是理解原文语义后重新组织中文,同时确保术语和格式不跑偏。特别是在“must handle requests”这里,我保留了“必须”的强调语气,这是协议约束的一部分。

再举一个长难句例子。原文类似这样的结构:Client 在通过某个 transport 与 Server 建立连接之前,应该先完成 initialization 握手,否则 server capabilities 可能未被正确声明。这种句子在英文里就是一个长句,译成中文时如果照搬语序,会显得特别绕。处理方式是拆成两到三句,先讲前提,再讲动作,补上因果连接词:

译后:Client 与 Server 通过 transport 建立连接前,应当先完成 initialization 握手。否则,Server 的能力声明可能不完整,后续请求存在失败风险。

这里“否则”把条件和后果拆成两个半句,比硬塞进一个长句清晰得多。翻译技术文档,最忌讳的就是“尊重原文”尊重到中文没法读。

3.3 版本管理与持续跟进

MCP 协议还在快速演进,翻译成了一次不等于一劳永逸。我第一次翻译完成不到两周,上游就更新了传输层的描述,把旧的 SSE 方案替换成了新的 Streamable HTTP。如果我当时没有记录原文版本,根本不知道哪些章节已经过时。

我的做法是给每个翻译文档的头部加一个元信息块:

> 原文版本:2025-03-26 > 翻译日期:2025-04-10 > 翻译状态:待同步上游更新

然后建一个 changelog 文件,记录每次上游更新的 diff 摘要和翻译侧的响应动作。上游仓库的提交历史和 release notes 是跟踪更新的两个主要入口,我会定期去翻这两处。发现版本变化后,第一步先对比原文 diff,判断是术语调整、内容新增,还是结构重构。小改动用批注跟进,大改动直接安排重翻对应章节。

个人维护的话,建议每半年过一次全文,把代翻的内容标记出来。如果是团队协作,还需要一个机制保证“上游更新—任务分配—翻译跟进—合并发布”这个闭环跑通。我见过很多翻译项目死在“无人跟进更新”这一步,所以版本管理从第一天就要立起来。

4. 常见问题与排查技巧实录

4.1 术语漂移:翻到后面忘了前面

翻译过半时最容易出现的问题,是同一个英文词在文档前半和后半用了不同译法。我遇到最典型的案例就是“transport”。文档开头讲“transport layer”,我翻成“传输层”,后面讲“transport implementation”我顺手翻成“传送实现”。等审校时发现,文章里的“传输”和“传送”混着出现,读者十有八九会当作两个不同概念。

解决这类问题,没有技巧,就是靠术语表和全文检索。每完成一个章节,抽出关键词列表做全文搜索,逐一点开核对上下文。这里提醒一句:替换的时候要有上下文判断,别无脑全局替换,特别是同一个词在不同章节代表不同含义时,粗暴替换会制造新错误。

4.2 长句难句拆解的三板斧

复杂长句是翻译时的硬骨头。我总结了三板斧,实测好用:

第一板斧,先找主干。遇到一个长句,先忽略所有修饰成分,把主语、谓语、宾语拎出来。英文的修饰成分再复杂,主干通常是清晰的。

第二板斧,拆成短句。主干拎出来后,把后置定语、原因状语、条件状语各自拆成独立短句,中文的习惯是“先说条件、再说结果,或者先说完一个观点、再补另一个观点”,宁可句子短一点、多两句,也不要一句话写五行。

第三板斧,加括号补充。有些关系代词引导的从句拆开以后会显得突兀,可以用括号把补充信息括起来,比如“Client(通常运行在宿主应用中)与 Server 保持长连接”,既不影响主干,又能保留附加信息。

处理长句的核心思路只有一个:让中文读者能以最短的路径把语义完整接收,而不是复刻英文的语法结构。

4.3 上游文档更新怎么追踪

我在前文提过,自己曾因上游更新没有及时跟进,导致翻译稿使用了过时的传输层规范。这种情况在协议快速演进期非常常见。MCP 的文档版本更新往往不带“deprecated”标记,旧章节还在,新章节已经出现,你不主动对比就会漏。

我养成的排查习惯是:每次翻译前,先看上游仓库最近一周的提交记录和 release notes;发现文档变更时,用版本对比工具查看 diff,先看 top-level 结构变化,再看具体描述变化。如果只是措辞调整,批量跟进即可;如果是协议行为变化,比如握手流程增加字段,那相关章节必须立刻重翻。

另外,建议翻译版也用一个独立仓库维护,保留上游链接和版本快照。谁哪天问起“这个文档翻的是哪一版”,你直接打开页面头部就能回答。这种可追溯性,在技术翻译项目里就是专业度的一大标志。

4.4 新手高频踩坑速查表

最后整理一份速查表,都是新手做 MCP 文档翻译最容易犯的错,我早期全部踩过。

问题典型表现解决方案
术语不一致同一个 transport 翻成“传输/传送/传输层”最早建立术语表,定稿后全文检索核对
代码被错误翻译变量名、字段名被中文化代码块逐字保留,只允许翻译注释且不夹带私货
JSON Schema 损坏翻译 description 时多/漏标点翻译后做一次 JSON 格式校验
强约束语气被弱化所有 MUST 都变成“应该”固定 MUST/SHOULD/MAY 的译法并加粗
链接被本地化内部链接换成自制路径链接原样保留,仅在旁边补充中文说明
忽略版本标记翻译稿无法对应上游版本文档头部标注版本号和翻译日期
长句硬译中文一句话几十个字找主干、拆短句、括号补充
忽略内容更新上游已更换协议规范,翻译照旧定期跟踪上游提交与 release notes

这份表是我实际反复踩过的坑整理出来的,能让你少走不少弯路。翻译这份开发文档的过程中,我最大的收获反而不是英语变好了,而是逼着我把 MCP 协议的每个细节都看了一遍。有些设计——比如为什么 Tool 调用前需要用户确认、为什么初始化握手要协商能力、为什么传输层要抽象成多个实现——之前读英文原文时都是一扫而过,真正落到翻译上,不得不想清楚每个词背后的机制。翻译是逼迫你精读的最好理由。如果你也想通过啃官方文档来入门 MCP,我的建议是,别贪多,先把 Architecture 和 Core primitives 这两节吃透,配上术语表和版本记录,后面无论你自己做开发还是继续翻译,都会顺手很多。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进