MCP 介绍
MCP 是function call 的升级版,之前function call, 各家可自由定义,MCP 给function call 加上了中间件,统一标准,方便使用者在前端调用。
MCP 是由Host, client,server,resources 4部分组成。
- Host 是各种大模型客户端,如Claude desktop,cursor,windsur.
- client是客户端。
- server 是服务端,提供实际服务。由它来访问resources.
- resources 可以是本地资源,远程资源。
这种分层的协议,方便的进行权限控制。
MCP 接入的方式
MCP 聚合网站有很多
- 有cluade官方的,github.com/modelcontex…
- Awesome MCP Servers: github.com/punkpeye/aw…
- mcp.so
- smithery smithery.ai/ (服务稳定)
- 这些网站列举大量的MCP服务。下面按实现工具的不同分类如下:
网络
"mcpServers": {
"time": {
"url": "http://xxx/mcp",
}
}
uv
这是一种python实现的接入方式,需要安装python,uv, 下载python的client实现代码。如claude 官方实现的mcp, 都是用这种方式实现的。
"mcpServers": {
"time": {
"command": "uv",
"args": ["--directory", "/path/to/src","run","server.py"]
}
}
uv是类似pip的python包管理工具,速度比pip快。
npx
这是前端node实现的接入方式,需要安装node,npx, 下载js的client代码。
"mcpServers": {
"time": {
"command": "npx",
"args": ["-y","mcprouter"]
}
}
npx与node类似,是前端实现包管理的工具,好处在于它不需要安装就可以直接使用。
docker
这是docker 实现的接入方式,需要安装docker, 用docker run的方式实现
"mcpServers": {
"time": {
"command": "docker",
"args": ["run", "-i", "--rm", "mcp/time"]
}
}
以上四种接入的方式,厂商的服务,一般都会有多种的接入方式,可选择方便的方式接入。
自定义服务端
- fastapi是python中开发api库,实现mcp接入,非常方便。
from fastapi import FastAPI
from fastapi_mcp import add_mcp_server
from datetime import datetime
import uvicorn
app = FastAPI()
# 创建 MCP 服务器并启用高级配置
mcp_server = add_mcp_server(
app,
mount_path="/mcp",
name="My API MCP",
describe_all_responses=True, # 显示所有可能的响应模式
describe_full_response_schema=True# 提供完整 JSON Schema
)
# 额外添加一个 MCP 工具(获取服务器时间)
@mcp_server.tool()
async def get_server_time() -> str:
return datetime.now().isoformat()
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8002)
- 使用官方sdk
import json
import httpx
from typing import Any
from mcp.server.fastmcp import FastMCP
# 初始化 MCP 服务器
mcp = FastMCP("WriteServer")
USER_AGENT = "write-app/1.0"
@mcp.tool()
async def write_file(content: str) -> str:
"""
将指定内容写入本地文件。
:param content: 必要参数,字符串类型,用于表示需要写入文档的具体内容。
:return:是否成功写入
"""
return "已成功写入本地文件。"
if __name__ == "__main__":
# 以标准 I/O 方式运行 MCP 服务器
mcp.run(transport='sse')
注意事项
-
在windows中使用,启动客户端时,以管理员方式启动, 否则可能无法启动。启动后,会弹出cmd 窗口,这窗口不能关。
-
有时按配置写好后,不起作用。需要会调试,MCP Inspector就是这种工具,
npx @modelcontextprotocol/inspector node path/to/server/index.js args... npx @modelcontextprotocol/inspector uv --directory path/to/server run package-name args...
问题
在使用npx -y @modelcontextprotocol/server-sequential-thinking 这种方式时,单独在窗口中可以启动,放到cursor中不行。