加载中

构建我们的 MCP 客户端的最后一步是实现提示功能。这使我们能够列出服务器上所有可用的提示,并检索将变量插入其中的特定提示。

实现列出提示

list_prompts 方法很简单。我们调用会话的列出提示方法并返回这些提示:

python
async def list_prompts(self) -> list[types.Prompt]:
    result = await self.session().list_prompts()
    return result.prompts

获取单个提示

get_prompt 方法更有趣,因为它处理参数插值。当我们请求特定提示时,我们会传递被注入到提示函数中的参数。例如,如果我们的服务器有一个期望 doc_id 参数的"format"提示,我们会在参数字典中提供该值:

python
async def get_prompt(self, prompt_name, args: dict[str, str]):
    result = await self.session().get_prompt(prompt_name, args)
    return result.messages

该方法返回的消息构成了一个可以直接输入给 Claude 的对话。

提示参数的工作原理

当您在 MCP 服务器中定义一个提示函数时,任何参数都会成为可用的插值变量。您传递给 get_prompt 的参数字典为这些参数提供值。然后服务器会生成完整的提示,并将您的值替换到相应的位置。

测试实现

实现完成后,您可以通过 CLI 测试提示。当您输入斜杠时,可用的提示会以命令的形式出现。选择像"format"这样的提示会提示您为任何必需的参数选择值(例如选择要格式化的文档)。然后系统会:

  1. 检索插入了您的参数的提示
  2. 将完整的提示发送给 Claude
  3. Claude 执行任何必要的工具调用以完成请求
  4. 返回格式化的结果

实践中的提示

提示定义了客户端可以调用的可重用用户和助手消息集。它们应该是高质量的、经过充分测试的,并且与您的 MCP 服务器的用途相关。可以将它们视为预构建的工作流,结合您服务器的工具和资源来完成特定任务。

提示系统在提示逻辑(在服务器上定义)和执行(由客户端和 Claude 处理)之间创建了清晰的分离。这使得创建复杂的多步骤工作流变得容易,用户可以通过简单的命令触发这些工作流。