使用说明
MCP工具服务器(mcp_server.py)
这 mcp_server.py 脚本是一个异步服务器,旨在通过各种通信传输将Python函数作为“工具”公开。它利用了 FastMCP 用于管理工具和处理客户端交互的框架。服务器自带内置工具,支持从Python文件或目录动态加载自定义工具。
特性
- 多个传输:支持通过以下方式进行通信:
stdio:标准输入/输出,适用于直接命令行交互或与其他进程集成。sse:服务器发送事件,允许web客户端订阅工具输出(侦听http://<host>:<port>/sse).
- 内置工具:
echo:返回调用时使用的参数。health:报告服务器的运行状态(返回“就绪”)。
- 自定义工具加载:
- 从指定位置动态加载Python函数作为工具
.py包含以下内容的文件或目录.py文件夹。 - 每个工具文件必须精确定义一个函数作为工具公开。
- 支持在工具文件中导入。
- 从指定位置动态加载Python函数作为工具
- 可配置日志记录:
- 默认情况下,将INFO级别消息输出到控制台。
- 支持将详细的DEBUG级别日志记录到服务器应用程序和底层MCP SDK的指定文件中。
- 异步:内置
asyncio用于高效处理并发操作。
先决条件
- Python 3.x
- 这
mcpPython包(特别是mcp.server.fastmcp使用)。确保此包已安装在您的Python环境中。
命令行用法
剧情简介
python mcp_server.py [tools_paths...] [--log FILENAME] [--transport {stdio,sse}] [--port PORT]
选项
-
tools_paths(位置,零或更多)- Python工具文件或包含Python工具文件的目录的路径。
- 如果提供了目录,服务器将搜索
*.py文件(不包括以开头的文件_). - 例子:
./my_tool.py ./utils_directory - 默认值:无(如果没有提供路径,则只有内置工具可用)。
-
--log FILENAME- 启用指定文件的详细日志记录(应用程序和MCP SDK的DEBUG级别)。
- 包括工具调用、响应和内部操作的全部详细信息。
- 控制台仍将显示信息级别消息。
-
--transport {stdio|sse}- 要使用的通信传输。
stdio:使用标准输入/输出。sse:使用服务器发送的事件。服务器将监听0.0.0.0默认情况下。- 违约:
stdio
-
--port PORT- 用于SSE传输的端口号。
- 违约:
8080
工具加载
自定义工具是服务器可以公开的Python函数。
- 定义:每个Python文件(
.py)作为一个工具模块,应该只定义一个功能。此功能将注册为工具。函数的名称将是它的工具名称。 - 发现:
- 如果一条通往
.py如果提供了文件,服务器将尝试从该文件加载工具。 - 如果提供了目录的路径,服务器将扫描该目录以查找
.py文件(忽略以下文件__init__.py或任何以下划线开头的文件),并尝试从每个有效文件加载工具。
- 如果一条通往
- 进口:工具文件可以根据需要导入其他模块。服务器临时将工具的目录添加到
sys.path在装载过程中,以方便当地进口。
例子
1.创建自定义工具
例如,创建一个Python文件, calculator.py:
# calculator.py
def add(a: int, b: int) -> int:
"""
Adds two integers and returns the result.
"""
print(f"Tool 'add' called with a={a}, b={b}") # Example of internal tool logging
return a + b
2.运行服务器
a) 仅使用内置工具(stdio传输):
python mcp_server.py
服务器将启动,您可以与 echo 和 health 工具通过其标准输入/输出(详细信息取决于 FastMCP 客户端交互协议)。
b) 使用自定义工具(stdio传输):
python mcp_server.py calculator.py
现在 add 工具从 calculator.py 也将可用。
c) 使用工具目录和详细日志记录(stdio传输):
假设您有一个名为的目录 my_tools 包含 calculator.py 以及其他工具文件:
mkdir my_tools
mv calculator.py my_tools/
# You can add more .py tool files to my_tools/
python mcp_server.py my_tools --log server.log
服务器将从加载所有有效工具 my_tools 目录。详细日志将写入 server.log,并向控制台发送INFO消息。
d) 使用SSE传输:
python mcp_server.py calculator.py --transport sse --port 8888
服务器将在上启动并监听SSE连接 http://0.0.0.0:8888/sse。客户端可以连接到此端点以与 echo, health,以及 add 工具。
与服务器交互(概念)
您如何与工具交互取决于所选的运输方式和 FastMCP 客户端实现。
-
对于
stdio:您通常会向服务器的标准输入发送类似JSON-RPC的消息,并在其标准输出上接收响应。// Example conceptual input for stdio (actual format depends on FastMCP) // {"jsonrpc": "2.0", "method": "add", "params": {"a": 5, "b": 3}, "id": 1} -
对于
sse:客户端将连接到/sse终点。然后,服务器将推送工具调用和响应的消息。
日志记录
- 控制台:默认情况下,INFO级别消息打印到
stdout。这包括服务器启动消息、注册的工具和基本活动。 - 文件记录(
--log选项):- 为两者启用DEBUG级别的日志记录
mcp_server.py和那个mcpSDK。 - 这非常冗长,包括:
- 详细的工具调用参数和结果。
- 内部服务器操作。
- 来自MCP SDK的调试消息。
- 日志文件的格式如下:
%(asctime)s - %(name)s - %(levelname)s - %(message)s.
- 为两者启用DEBUG级别的日志记录
关机
按 Ctrl+C 优雅地关闭服务器。
