导航菜单

  • 1.什么是MCP
  • 2.架构概览
  • 3.理解MCP服务器
  • 4.理解MCP客户端
  • 5.版本控制
  • 6.连接本地MCP服务器
  • 7.连接远程MCP服务器
  • 8.构建MCP服务器
  • 9.构建MCP客户端
  • 10.SDKs
  • 11.理解MCP中的授权
  • 12.安全最佳实践
  • 13.MCP Inspector
  • 14.规范
  • 15.关键变更
  • 16.架构
  • 17.基础协议概述
  • 18.生命周期
  • 19.传输
  • 20.授权
  • 21.取消
  • 22.Ping
  • 23.进度
  • 24.任务
  • 25.根
  • 26.采样
  • 27.引导
  • 29.提示
  • 30.资源
  • 31.工具
  • 32.补全
  • 33.日志
  • 34.分页
  • 35.模式参考
  • Keycloak
  • 28.服务器功能
  • 1. 什么是补全?
  • 2. 本章你将学到
  • 3. 典型流程
  • 4. 能力
  • 5. 协议消息
    • 5.1 请求补全(completion/complete)
    • 5.2 引用类型
    • 5.3 补全结果
  • 6. 流程示意
  • 7. 数据结构
    • 7.1 请求(CompleteRequest)
    • 7.2 响应(CompleteResult)
  • 8. 错误处理
  • 9. 实现建议
  • 10. 安全要点

1. 什么是补全? #

补全(Completions)是 MCP 服务器为 提示 和 资源 的参数提供的自动建议,类似 IDE 的代码补全。用户填写参数时,服务器根据当前输入和已填参数,返回上下文相关的候选值。

协议版本:2025-11-25

通俗理解 说明
参数建议 用户输入「py」→ 服务器建议 python、pytorch、pyside 等
上下文感知 可结合已填参数(如 language: python)给出更精准建议
交互式 通常以下拉菜单、弹出列表等形式展示,协议不强制 UI 形态

2. 本章你将学到 #

  • 补全的能力声明与协议消息
  • 如何请求补全(单参数、多参数上下文)
  • 引用类型(提示 vs 资源)
  • 补全结果、错误处理与实现建议

3. 典型流程 #

用户选择 code_review 提示,在「语言」参数框输入「py」→ 客户端发 completion/complete,指定 ref/prompt + code_review,argument: { name: "language", value: "py" } → 服务器返回 ["python", "pytorch", "pyside"] → 客户端以下拉列表展示,用户选「python」。若还有「框架」参数,用户输入「fla」时,客户端在 context.arguments 中带上 language: "python",服务器据此返回 ["flask"]。

4. 能力 #

服务器必须声明 completions 能力:

{
  "capabilities": {
    "completions": {}
  }
}

5. 协议消息 #

5.1 请求补全(completion/complete) #

单参数示例:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "completion/complete",
  "params": {
    "ref": { "type": "ref/prompt", "name": "code_review" },
    "argument": { "name": "language", "value": "py" }
  }
}

响应:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "completion": {
      "values": ["python", "pytorch", "pyside"],
      "total": 10,
      "hasMore": true
    }
  }
}

多参数上下文示例:

用户已选 language: "python",正在填「框架」参数,输入「fla」:

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "completion/complete",
  "params": {
    "ref": { "type": "ref/prompt", "name": "code_review" },
    "argument": { "name": "framework", "value": "fla" },
    "context": {
      "arguments": { "language": "python" }
    }
  }
}

响应:

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "completion": {
      "values": ["flask"],
      "total": 1,
      "hasMore": false
    }
  }
}

5.2 引用类型 #

类型 说明 示例
ref/prompt 按名称引用 提示 {"type": "ref/prompt", "name": "code_review"}
ref/resource 引用 资源 URI 模板 {"type": "ref/resource", "uri": "file:///{path}"}

5.3 补全结果 #

字段 说明
values 建议数组,最多 100 项,按相关性排序
total 可选,匹配总数
hasMore 是否存在更多结果

6. 流程示意 #

sequenceDiagram participant U as 用户 participant C as 客户端 participant S as 服务器 U->>C: 输入参数 "py" C->>S: completion/complete S-->>C: ["python", "pytorch", "pyside"] C-->>U: 下拉展示 U->>C: 选 "python",再输入 "fla" C->>S: completion/complete (context: language=python) S-->>C: ["flask"] C-->>U: 下拉展示

7. 数据结构 #

7.1 请求(CompleteRequest) #

字段 要求 说明
ref 必须 PromptReference 或 ResourceReference
argument 必须 { name, value },当前正在补全的参数
context.arguments 可选 已填参数名到值的映射,用于多参数上下文

7.2 响应(CompleteResult) #

字段 说明
completion.values 建议数组,最多 100 项
completion.total 可选,匹配总数
completion.hasMore 是否有更多结果

8. 错误处理 #

错误码 情况
-32601 方法未找到(未声明补全能力)
-32602 无效提示名、无效 URI、缺少必需参数
-32603 内部错误

9. 实现建议 #

角色 建议
服务器 按相关性排序;实现模糊匹配;速率限制;验证输入
客户端 对快速连续请求防抖;适当缓存结果;妥善处理缺失/不完整结果

10. 安全要点 #

要点 说明
验证输入 必须验证所有补全请求参数
速率限制 必须实施适当限制
敏感建议 必须控制对敏感建议的访问
信息泄露 必须防止基于补全的信息泄露
← 上一节 31.工具 下一节 33.日志 →

访问验证

请输入访问令牌

Token不正确,请重新输入