For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
主导航

定义工具

将插件使用场景转化为一组职责明确的 MCP 工具。

工具是插件的 MCP 服务器向 ChatGPT 和 Codex 提供的操作和数据。请在 构思使用场景之后、实现 服务器之前定义工具。

每个工具都应帮助用户达成目标。不要在未考虑用户会如何请求和使用这些功能的情况下,直接照搬内部 API。

将使用场景映射到工具

对于每个受支持的使用场景:

  1. 写明用户期望的结果。
  2. 列出产生该结果所需的信息。
  3. 确定服务器必须执行的读取、写入或外部操作。
  4. 将共同构成一项完整动作的操作归为一组。
  5. 如果操作的权限、安全风险或确认要求不同,请将其拆分。

例如,项目插件可以提供以下工具:

  • list_projects 用于查找项目。
  • get_project 用于查看单个项目。
  • create_project 用于创建项目。
  • update_project 用于更改项目详情。
  • archive_project 用于执行具有重大影响的状态变更。

将读取和写入行为分开,让模型和用户能够区分信息检索与更改状态的操作。

定义每个工具的契约

为每个拟议工具记录以下内容:

字段需要定义的内容
名称稳定且能体现操作的标识符。
标题简洁易懂的操作名称。
描述应触发该工具的用户目标和条件。
输入模式必需参数和可选参数、类型、允许的值及限制。
输出模式模型可以查看和复用的结构化字段。
授权服务器必须验证的账户、角色或资源访问权限。
副作用工具可以更改的数据或外部状态。
失败时的行为模型可以解释或从中恢复的错误。

使用明确的输入。不要依赖模型猜测标识符、账户范围或其他确保正确性所必需的值。

返回稳定的标识符和足够的结构化信息,以供后续调用使用。结果中不得包含机密信息、访问令牌、内部诊断信息或不必要的个人数据。

编写有助于选择工具的描述

模型通过工具描述判断工具是否适合某个请求。请描述用户意图,而不是实现细节。

好的描述应:

  • 说明工具的作用。
  • 解释何时使用该工具。
  • 明确该工具与类似工具的区别。
  • 指出重要限制或前提条件。

避免仅仅重复工具名称,或在描述中使用用户不了解的内部服务术语。

规划安全注解

根据实际行为设置注解。请参阅 MCP ToolAnnotations 模式, 了解这些提示的标准定义、默认值及相互作用:

  • 只有当工具无法更改状态时,readOnlyHint 才为 true
  • 当工具可能造成不可逆或难以逆转的结果时, destructiveHinttrue
  • 当工具访问公共互联网或 范围不受限定的外部实体时,openWorldHinttrue,其中也包括通过 网页搜索等只读操作进行访问的情况。范围明确的私有账户或工作空间 不会仅因托管在外部就被视为开放世界。

注解不能替代服务器端授权、输入验证或对具有重大影响的操作进行确认。

检查覆盖范围和边界

将拟议工具与完整的使用场景清单进行对照:

  1. 确认每个受支持的使用场景都有途径获得有用的结果。
  2. 找出不服务于任何已记录使用场景的工具。
  3. 检查是否缺少用户在执行写入操作前所需的读取操作。
  4. 验证对于不受支持的请求,系统会给出易于理解的限制说明,而不是以不安全的方式勉强处理。
  5. 测试两个相似工具的描述是否存在重叠,导致选择时发生混淆。

保留最终的工具计划,将其作为实现和评估的检查清单。 然后构建 MCP 服务器,并使用 具有代表性的输入、无效输入和未经授权的输入测试每个契约。