演示 MCP 服务与 Claude 桌面版或 LM Studio 的集成

AI 领域真是风头正劲,各种概念扑面而来,像 AGI, RAG, AI Agent, Agentic AI 等,目前的 MCP(Model Context Protocol, 模型上下文协议) 又随处可见。MCP 是 Anthropic 于 2024 年 11 月底推出的一种开放标准,旨在统一大模型与外部数据源和工具之间的通信协议。MCP 使用 LLM 应用能安全的访问和操作外部资源,轻松的实现了 Function Calling 的功能。

试想一下,以前问大语言模型一个复杂一点的计算题

12345 的 6.7 次方是多少?

光语言模型只会在自己的向量数据库里找简单的碰到过的计算题,如 100 的 2 次方,但看到偏门的计算就会出现幻觉了,因为它没有实际的计算引擎。下面是在 LM Studio 中使用 qwen2.5-7b-instruct-mlx 模型时的结果

该模型能够从问话中提取到要计算 12345 ** 6.7 的需求,也知道可以用 Python 的  12345 ** 6.7 来计算结果,但实际又不调用 Python 代码,所以最后的结果是错的。

在 Python 中

>> 12345 ** 6.7
2.5881552961584156e+27

差得十万八千里。既然模型能理解计算需求,这就可以调用外部工具来处理相应的计算,于是就有了 MCP。

本文不详细描述 MCP 架构,只需要大略的知道 LLM 应用能从对话中提取到将要与 MCP Server 的交互,如调用某个 MPC Server 相应的工具,资源,或 Prompt 信息,然后融合结果再与 LLM 模型交互。

MCP 是 Client/Server 架构,有 MCP Server 就有相应的 MCP Client, 它被集成在了一些工具当中。目前有不少工具内置了 MCP Client, 即支持 MCP Server 的接入能力,如 Claude Desktop, Cursor, Cline, LM Studio, Cherry Studio 等,更多 MCP Client 列表请见附录。

MCP 协议主要支持以下几种通信机制

  1. stdio(Standard input output, 标准输入输出): 作为 MCP Client 与 MCP Server 本地进程间的调用,启动子进程的方式
  2. SSE (Server Sent Events): 基于 HTTP, 浏览器流式输出,可用作实时聊天
  3. http: 单次请求响应,简单 REST 接口,适合测试,如 Postman, 或 MCP Inspector
  4. streamable-http: 请求,流式响应,类似 fetch() + chunked HTTP 响应。适用于 Chat UI, Agent 工具,多轮对话

它们的通信的协议格式都是 JSON-RPC 2.0, 只有第一种 stdio 不能用于远程通信,其他都行。

有一些网站列出了许多可用的 MCP Servers(见附录),有些要部署到本地用 stdio 连接,有一些可直接通过远程连接,比如集成到 Claude Desktop, Cursor, LM Studio 或自己的 AI 应用当中

我们总是有一些内部应用可与 AI 集成,所以需要自己的私有 MCP Server.下面就简单演示一下如何用 Python 创建自己的 MCP Server,并在 Claude Desktop 和 LM Studio 中使用。

Model Context Protocol Servers 页面中看到 MCP 官方提供了多种 SDK 方便我们写自己的 MCP Server,如 C# MCP SDK, Java MCP SDK, Kotlin MCP SDK, Python MCP SDK, Typescript MCP SDK. 当然只要遵循 MCP 的规范和  JSON-RPC 2.0 协议,可以用任何语言或框架实现自己 MCP Server.

这里直接用 MCP Python SDK,本文主要也是参考其中的例子。

实现 MCP Server

先要创建一个  mcp-server-demo 项目,并引入相关的依赖。现在流行 UV 这个 Python 的虚拟环境,依赖管理,构建工具,用 Rust 写的。用了下确实不一般,

真的是极速,平时有些项目就用 pip,有些用了 poetry, 尝试过 pdm, pdm 也开始拥抱 uv( Use uv (Experimental)), 不过感觉 pdm 没必要发展下去了,因为 uv 速度上与别的工具有断档的差距,而且功能上也很齐备。关于 uv 的安装这里就不介绍了。

uv init mcp-server-demo
cd mcp-server-yanbin-demo
uv add "mcp[cli]"

然后在该项目中创建 server.py, 内容为

MCP Inspector 调试

运行命令

uv run mcp dev server.py

它用打开默认浏览器,链接如 http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=0cacceedd3324989bbf4f6f4f2d9f4649a2e00f14acf139c5e05ab068cbbf6d9

在该 MCP Inspector 中看到 Command 为 uv, Arguments 为 run --with mcp mcp run server.py。刚打开页面时左侧 "Configuration" 下显示的是一个 "Connect" 按钮,点击 "Connect" 按钮就会显示 "Connected"。然后在右侧可浏览该 MCP Server 暴露的 Resources, Prompts, Tools 等接口,这里选择 Tools, "List Tools" 就显示 "sum" 和 "get_weather" 两个 tools, 在最右侧输入两个整数进行测试。

MCP Server 与 Claude Desktop 集成

用  MCP Inspector 验证可用后,再实际与 Claude Desktop 集成使用,本机为 macOS

运行命令 'uv run mcp install server.py', 然后看到相应的输出

uv run mcp install server.py
[07/13/25 21:51:32] INFO Added server 'Demo' to Claude config claude.py:136
INFO Successfully installed Demo in Claude app cli.py:485

说加了一个 "Demo" 配置到 Claude, "Demo" 是因为创建的 MCP Server 的名称,在 Python 代码中

mcp = FastMCP("Demo")

要让 Claude 能感知该 MCP Server 话,需要重启 Claude Desktop。而后在 Claude 中有三个地方可以看到该 MCP Server 的存在

其一,在 Claude Desktop 应用程序的 Settings 中,在 Developer 项中可以看到 Demo

并且显示了相应的  Command 和 Arguments, 如果点击 "Edit Config", 会指引到文件

~/Application Support/Claude/claude_desktop_config.json

内容为

所以手工编辑该文件也能为 Claude 指定 MCP Servers。

其二,还可以从用户的 Settings 的 Connectors 中看到 Demo (LOCAL)

点击右边的 "...", 从下拉中打开 "Tools and settings" 中看到该 Demo 相关的资源

其三,从聊天窗口的 "Search and tools" 按钮中可以看到 Demo

现在可以在 Claude 中问一个问题

please calculate 234 plus 888

这时候 Claude 会为安全起见,弹出一个对话框确认是否要调用 Demo 的 sum 方法来计算 234 + 888, 点击 "Allow always" 或 "Allow once"。而后 Claude 就会调用 MCP Server(Demo) 进行计算,接着又问了一个关 Chicago 天气的问题

How about the weather in city of Chicago?

同样会询问是否调用 Demo 的 get_weather, 下面的两个问题的截屏

Claude 会自动收缩对 MCP Server 的输入输出,这里把 sum 调用的输入输出展开了, get_weather 保持未展开状态,最后看到 Claude 的得到温度为 22 度的时候,还加了一句评论

The current weather in Chicago is 22°C (about 72°F). That's quite pleasant for a summer day!

如果是在公网上用  SSE 发布了一个 MCP Server(比如用下面的方式启动 MCP Server),如何在 Claude Desktop 中连接使用呢?

免费的 Claude 用户是没这个功能,每月 $17 的 Pro 用户支持

Connect any content or tool throught Integrations with remote MCP

如果 Pro 或更高级的  Claude 用户将可以用户的 Settings 中看到 "Integrations", 新加一个集成,填入 URL 类如 https://yanbin.app/sse 就能使用远程的 MCP Server。

LM Studio 中集成 MCP Server

还有像 Cheery Studio, LM Studio 等工具也支持与 MCP Server 的集成。LM Studio 自版本 0.3.17 开始支持连接 MCP Server,官方文档 Use MCP Servers,当前 LM Studio 版本为 0.3.18。

由于是本地运行模型,为支持 MCP Server 也要求选择的模型带有一个锤子图标

它用示 "This model has been trained for tool use". 我们这里选择模型 "qwen2.5-7b-instruct-mlx", 模型尺寸为  4.30 GB。

macOS 版,点右上角的像个反漏斗样的 'Show Settings' 图标,点击后变成折叠按钮,  然后在 "Program" 页(Power User 和 Developer 才有 Program),"Integrations  Install" 下拉选择  "Edit mcp.json", 就可以在中间编辑 "mcp.json" 文件 

我们同样贴入 ~/Application Support/Claude/claude_desktop_config.json 文件的内容,点击 "Save"  按钮后就会在右边看到新的 MCP Server "mcp/demo" 及解析出来的两个方法,并可选择是否每次都询问,还是总是允许。

测试一下

 

从对话中发现有调用相应 MCP Server 工具方法的情况会发起一个 Function Calling,无关的话题,仍然像往常一样。

如何远程连接 MCP Server,就不能用 stdio 了,要选择 sse 或 http, 或 streamable-http。但 mcp.server.fastmcp.FastMCP 只支持 stdio 和 sse, 并且在选择 sse 时不易改变主机和端口号。最好是使用单独安装的 fastmcp, 当前版本为 2.10.5

用 uv 安装组件

uv add fastmcp

写作时安装的是 fastmcp 2.10.5

然后 server.py 的

from mcp.server.fastmcp import FastMCP

改成

from fastmcp import FastMCP

这时候的启动代码就用

用 fastmcp 2.x 调用 mcp.run() 方法时就能指定 host, port 等参数,而不是只会启动在 localhost:8000 上。

启动 server.py 后,显示

[07/13/25 22:57:49] INFO   Starting MCP server 'Demo' with server.py:1448
                                                   transport 'sse' on
                                                   http://0.0.0.0:8000/sse/

如果选择 transport 为 http 或 streamable-http 时,显示的 http 或 streamable-http 的 URL 是

http://0.0.0.0:8000/mcp/

用 LM Studio 连接远程的 MCP Server 时,mcp.json 文件内容就是

如果 transport 为 http 或 streamable-http, url 是

http://0.0.0.0:8000/mcp/

Save 后得到同样的效果,只是把 STDIO 输入输出方式转变为 HTTP 调用远程 MCP 方式。

Postman 中测试 MCP Server

Postman 也与时俱进,加入了 GraphQL, AI, MCP, gRPC, WebSocket, Socket.IO, MQTT, Flow 等的支持

如果我们在  "New" 中选择 MCP,它可支持两种协议 STDIO 和 HTTP,在选择 STDIO 的情况,把之前 Claude Desktop  用的 ~/Application Support/Claude/claude_desktop_config.json 文件内容贴到 STDIO 右边的输入框就行,连接后可列出该 MCP Server 的  Tools, Prompts, Resources 资源,测试一下 Tools/sum 函数

Postman 连接远程 MCP Server 的方式与 LM Studio 的做法一样,也是要用 sse, http, 或 streamable-http 方式启动 MCP Server,然后在 Postman 中 MCP 选择 HTTP 时,只要输入 http://127.0.0.1:8000/sse 或对应于 http/streamable-http 的 http://127.0.0.1:8000/mcp 就能得到与上面同样的效果。 

后续话题

  1. 要在 Claude Desktop 中使用公共的 MCP Server 资源就得每月 $17
  2. 如果使用本地模型,使用任意的 MCP Server 都没有问题,但本地模型显然太弱,参数太多则太慢,参数多些也难比免费的 Claude, Open AI, Grok, Gemini 等模型
  3. 在使用 API Key 使用 ChatGPT 等服务时需进一步研究应如何集成 MCP Server 的服务
  4. 可以尝试用 FastAPI 来实现 MCP Server
  5. 进一步研究 MCP Server 的 resource 和 prompt 的用法

附录 MCP Servers 和 MCP Clients

MCP Servers:

  1. Awesome MCP Servers(https://mcpservers.org/)
  2. MCP Servers(https://mcp.so/)
  3. MCP Market(https://mcpmarket.com/)
  4. Smithery - Model Context Protocol Registry(https://smithery.ai/)
  5. MCP Marketplace(https://mcp.higress.ai/)
  6. MCP | Composio(https://mcp.composio.dev/)

MCP Clients:

  1. Awesome MCP Clients(https://github.com/punkpeye/awesome-mcp-clients?tab=readme-ov-file#clients)
  2. MCP Clients(https://www.pulsemcp.com/clients)
  3. MCP Clients(https://mcp.so/clients)

本文链接 https://yanbin.blog/demo-mcp-server-integrate-with-claude-desktop-or-lm-studio/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

guest

0 Comments
Inline Feedbacks
View all comments