在MCP服务器中添加提示

在上一篇文章中,我建立了一个本地MCP服务器并添加了一些工具到服务器中。在这篇文章中,我们将为该服务器添加提示。

在MCP服务器中添加提示

在我的上一篇文章中,我建立了一个本地MCP服务器并添加了一些工具到服务器中。在这篇文章中,我们将为该服务器添加提示。

这是上一篇博客中的文件结构。但是在这里,我为此创建了两个新文件。

.  
├── 📁 venv/  
├── 📄 helpers.py  
├── 📄 server.py  
├── 📄 prompts.py          # 新文件  
├── 📄 prompt_builder.py   # 新文件  
└── 📄 tools.py

如果你没有设置环境,请按照我在上一篇文章中提到的方式设置开发环境。之后你可以从这里继续。为了这个教程,我将创建两个提示并将它们添加到MCP服务器中,并在Claude桌面中使用它们。

1、创建提示

我要创建一个用于修复代码中错误的提示和另一个用于润色文本的提示。首先让我们看一个MCP提示的示例,以了解提示的结构。

from mcp.server.fastmcp.prompts import Prompt  
from mcp.server.fastmcp.prompts.base import PromptArgument  

example_prompt = Prompt(  
    name="PROMPT_NAME",  
    description="PROMPT_DESCRIPTION",  
    arguments=[  
        PromptArgument(  
            name="ARGUMENT_NAME",  
            description="ARGUMENT_DESCRIPTION",  
            required="OPTIONAL_OR_REQUIRED"  
        )  
    ],  
    fn="FUNCTION_FOR_BUILDING_THE_PROMPT"  
)

提示参数就像提示中的占位符。用户可以在使用提示时向这些值提供输入。一个提示可以有多个提示参数或零个参数。我们还可以通过更改required参数的值来使提示参数成为必需或可选的。

好的,现在你对MCP提示的结构有了一个概念。让我们创建我们的提示。第一个是用于润色文本的提示。这个提示的作用是当我们给Claude桌面一些文本时,它会润色文本。这个提示没有参数。

# prompts.py  
  
from mcp.server.fastmcp.prompts import Prompt  
from mcp.server.fastmcp.prompts.base import PromptArgument  
from prompt_builder import PromptBuilder  
  
text_refinement_prompt = Prompt(  
    name="refine-the-text",  
    description="润色给定的文本",  
    arguments=[],  
    fn=PromptBuilder.text_refinement_prompt_fn,  
)

现在让我们创建第二个提示。这个提示有两个参数。这个提示是为了修复给定代码片段中的问题。第一个参数是输入使用的框架。这个参数是必需的。第二个参数是一个可选参数,用于输入错误消息。

bugfix_prompt = Prompt(  
    name="fix-the-issue",  
    description="修复给定代码片段中的问题",  
    arguments=[  
        PromptArgument(  
            name="framework",  
            description="代码片段中使用的框架",  
            required=True  
        ),  
        PromptArgument(  
            name="issue",  
            description="代码片段中的问题"  
        ),  
    ],  
    fn=PromptBuilder.bugfix_prompt_fn  
)

好了,我们已经完成了创建提示的工作,但我们还没有创建提示函数。

2、创建提示函数

让我们创建一个PromptBuilder类并在其中定义提示函数。这些函数不一定需要放在类中,但我更喜欢这样组织代码以便更好地管理。

# prompt_builder.py  
  
from textwrap import dedent  
  
  
class PromptBuilder:  
  
    @staticmethod  
    def text_refinement_prompt_fn():  
        return dedent(  
            f"""  
            重写给定的文本以修正语法错误。   
            使其更具可读性。   
            但不要改变意义和写作风格。  
            """  
        )  
  
    @staticmethod  
    def bugfix_prompt_fn(framework, issue=""):  
        return dedent(  
            f"""  
            作为经验丰富的{framework}开发者。   
            研究给定的代码并修复错误。   
            错误:{issue}  
            """  
        )    

第一个函数生成一个“refine-the-text”提示,不需要任何参数。因此,该函数本身没有参数,只是返回要提供给LLM的提示。第二个函数构建一个“fix-the-issue”提示,它有两个参数,一个是必需的,另一个是可选的。相应地,该函数有两个参数,第一个是必需的,第二个是可选的,与提示结构一致。这些参数通过f字符串插入到提示中的占位符中。实际上,这些提示函数负责动态构造最终的提示。

3、添加到MCP服务器

现在,让我们将我们的提示添加到我们在上一篇文章中创建的服务器中。

from mcp.server.fastmcp import FastMCP  
from prompts import bugfix_prompt, text_refinement_prompt  
  
# 初始化FastMCP服务器  
mcp = FastMCP("Weather-Server")  
  
# 将提示附加到服务器  
mcp.add_prompt(bugfix_prompt)  
mcp.add_prompt(text_refinement_prompt)  
if __name__ == "__main__":  
    # 初始化并运行服务器  
    mcp.run()

4、连接到Claude桌面

JSON配置无需更改。与之前相同。创建JSON配置文件。在以下位置创建JSON文件。C:\Users\USER>\AppData\Roaming\Claude\claude_desktop_config.json

{  
    "mcpServers": {  
        "weather": {  
            // 在虚拟环境中运行Python命令  
            // 虚拟环境内Python可执行文件的绝对路径  
            "command": "<PATH_TO_ENVIRONMENT>\\venv\\Scripts\\python",  
            "args": [  
                // server.py的绝对路径  
                "<PATH_TO_SERVER>\\server.py"   
            ]  
        }  
    }  
}

我在我的上一篇文章中解释过这个配置。所以这篇文章中我不再详细说明。创建配置文件后,重启Claude桌面。

重启Claude桌面后,你会看到一个名为“从MCP附加”的按钮。点击它,然后点击“选择集成”。

在这个下拉菜单中,你可以看到你在MCP中创建的提示在这里列出。现在让我们看看如何使用它们。首先,让我们尝试“fix-the-issue”提示。如果你点击它,你会看到一个弹出窗口像这样

它会询问你在提示中定义的提示参数。填写这些参数并提交。它将作为附件添加到Claude桌面中。现在你可以给聊天输入框中的其余提示。

其他MCP提示与此类似。唯一的区别是它们不会询问参数。它们会立即作为附件添加到聊天中。

5、结束语

我们可以将这些MCP提示用作模板。如果你使用Claude桌面进行重复任务,可以为此创建MCP提示。这样,你就不用手动输入提示了。你可以简单地从MCP服务器中检索它。此外,你可以将所有提示存储在一个集中位置。


原文链接:Adding Prompts to MCP Server

汇智网翻译整理,转载请标明出处