在上一篇文章里,我们学习了MCP的入门操作,在这篇文章,我们使用MCP服务来解决我的一个实际需求。

我的博客是用jekyll部署的Github静态页面,当我完成一篇Obsidian笔记后,我需要手动将这篇笔记复制到本地的博客目录,由我的自动更新脚本auto_update来修改笔记的格式,为它添加顶部Front Matter。如果笔记里有图片,我还需要手动将图片复制到博客目录,并执行git操作推送到远程仓库。

这个过程太繁琐了,因此我想简化这个流程,于是借助Cursor写了一个新的自动化脚本blog_push_local.py,提供笔记路径和目标分类文件夹后,它会自动将源目录下的笔记和图片复制到目标路径,调用auto_update.py,然后执行git操作。

我在命令行输入以下命令,就会执行这个过程:

python blog_push_local.py "MCP QuickStart Guide" --dir=MCP

这个流程也可以借助MCP服务来完成。


1. 导入MCP服务器模块

安装mcp库:

pip install mcp

2. 创建MCP服务器实例

from mcp.server import FastMCP

# 初始化 MCP 服务器
mcp = FastMCP("blog_publisher", timeout=300) # 5分钟超时时间

其中第一个参数就是mcp服务的名称。

3. 将现有功能注册为MCP工具

工具 tools 允许服务器将函数暴露给客户端调用,并由LLMs执行。

在方法顶部添加 @mcp.tool()

# 将现有函数转换为MCP工具
@mcp.tool(name="blog")
def publish_to_blog(article_name: str, dir: str = "Android") -> str:

通过这种方式,客户端的tools 里就能看到可用的工具了,如下所示:

使用 tools/call 调用工具,服务器执行请求操作,并返回结果。

4. 添加服务器启动代码

完整代码见Github仓库 blog_push.py

5. 测试和部署

测试MCP服务器:

python blog_push.py

脚本会启动MCP服务器,并在控制台显示启动信息。

1. 配置Claude使用MCP服务

打开 Claude for Desktop , 点击左上角菜单 —— File —— Settings —— Developer

点击 Edit Config ,如果没有 claude_desktop_config.json 就会在 C:\Users\windows\AppData\Roaming\Claude 目录下自动创建 claude_desktop_config.json 文件。

打开 claude_desktop_config.json , 添加如下代码:

{
	"blog_publisher": {
		"command": "uv",
		"args": [
			"--directory",
			"T:\\PythonProject\\MCPServer",
			"run",
			"blog_push.py"
		]
	}
}

第一行 blog_publisher 是我们的服务名称,也就是在第二步中指定的。 下面是服务器运行路径。

任务管理器结束Claude,再重新打开Claude,就能看到配置成功了。

在上面图片里,我们看到的工具描述是通过如下方式添加的:

@mcp.tool(name="blog")
async def blog_command(article_name: str, dir: str = "_Android") -> str:
    """博客发布工具
    Args:
        article_name: 要发布的文章名称
        dir: 目标目录,默认为_Android
    """

同时在设置页里我们也可以看到有两个服务:

2. 在Claude使用服务

在对话框里输入:

blog MCP QuickStart Guide --dir=MCP
# 或
/tool blog MCP QuickStart Guide --dir=MCP

为什么我这么输入?

因为在我的blog服务里,我将工具命名为了blog ,在函数里添加了两个参数,一个接收 文件名,一个接收目标分类名称,其中:

  • blog : 工具名
  • MCP QuickStart Guide : 文章名
  • –dir :目标目录分类名

因此它会形成这样的Json格式:

{
	"dir": "MCP",
	"article_name": "MCP QuickStart Guide"
}

如果是第一次运行,会弹出以下对话框,点击 允许

最终输出结果:

我们在Claude成功调用了blog_publisher服务!

3. 在Cursor使用MCP服务

打开 Cursor设置 —— MCP —— Add new MCP server

它需要我们填写几个参数,在上一步的Claude配置里,我们在json文件中添加了如下配置:

{
	"blog_publisher": {
		"command": "uv",
		"args": [
			"--directory",
			"T:\\PythonProject\\MCPServer",
			"run",
			"blog_push.py"
		]
	}
}

在这里,我们将它复制过来即可。

  • Name : 服务名,也就是 blog_publisher .
  • Type : 选择 command
  • Command : uv --directory T:\PythonProject\MCPServer run blog_push.py

点击 Save 保存。

然后我们就能在Cursor看到已成功配置服务了,绿点表示已启用。

运行服务:

 python blog_push.py

接着我们来实际测试一下,在Claude聊天框输入:

/tool blog MCP服务示例:运行本地Python脚本,将文章推送到Github博客 --dir=MCP

选择 Agent , claude-3.7-thinking 模型。

返回结果如下:

虽然Cursor返回消息说因为超时而提交失败,但实际上我们的任务已经提供成功了,github上收到了新的提交:

把这个命令复制到 Claude 也试一下:

(完)