使用说明
MCP Linux 健康示例
一个最小的 模型上下文协议(MCP) 示例使用:
server.py— 一个暴露Linux健康检查工具(磁盘、CPU、内存/交换空间)的MCP服务器client.py— 一个通过(某种方式)连接的Python客户端 可流式传输的HTTP(此处为句子的延续或补充说明,具体翻译需结合上下文,但基于给出的部分,可翻译为):,列出工具,并进行呼叫health_summary
Auth 是一个简单的共享(系统/服务) 承载令牌(或称访问令牌) 在HTTP层进行了检查。
这是什么?
- MCP 定义了智能体/大型语言模型(LLMs)如何发现和调用外部(资源/功能) 工具 遵循一致的协议。
- 此示例通过MCP发布了三个工具:
disk_space(path="/")cpu_usage(mode="instant"|"percpu"|"loadavg", sample_ms=200)memory_swap()- 一个更便捷的工具:
health_summary(path="/")
该 客户 展示了如何连接、列出工具以及调用 health_summary。
要求
- Python 3.10及以上版本
- Linux(工具使用
psutil针对Linux API;它们“大多”在其他地方也能工作,但loadavg等指标是围绕Linux设计的
安装依赖项:
pip install "mcp[cli]" uvicorn psutil starlette
快速入门
1) 设置一个共享令牌并运行服务器
export MCP_BEARER_TOKEN='super-secret' # choose your own
uvicorn server:app --host 0.0.0.0 --port 8000
默认情况下,MCP 端点位于 /mcp。
2) 运行客户端
export MCP_URL="http://localhost:8000/mcp"
export MCP_BEARER_TOKEN="super-secret"
python client.py
你应该会看到类似这样的内容:
Available tools:
• disk_space — Report disk usage...
• cpu_usage — CPU usage...
• memory_swap — Memory and swap usage...
• health_summary — Convenience tool...
Calling health_summary…
== DISK ==
path: / used: 42 GB / 100 GB (42%)
mounts: 3 total
== CPU ==
overall: 7.3% (cpus: 8)
== MEMORY ==
mem: used 6 GB / 31 GB (22%)
swap: used 0 GB / 2 GB (0%)
配置
环境变量:
MCP_BEARER_TOKEN— 服务器和客户端均需满足此要求。MCP_URL— 客户目标(默认:http://localhost:8000/mcp)。
(简而言之)它是如何工作的
-
JSON-RPC 2.0 是基本消息格式。
-
MCP 添加了生命周期(初始化,关闭),工具发现(
tools/list), 和工具调用 (tools/call)在那之上。 -
我们使用MCP SDK的 可流式传输的HTTP 两端运输:
server.py通过(某种方式)暴露一个ASGI应用mcp.streamable_http_app()。client.py与……相连/关联streamablehttp_client(...)和一个ClientSession。
认证: 一个微型的ASGI封装器用于检查 Authorization: Bearer <token> 标题为 /mcp* 请求并将其他任务直接委托给MCP应用程序。(所有非HTTP事件,包括 寿命直接通过,以确保MCP任务组被正确初始化。)
定制工具
所有工具都装饰着 @mcp.tool() 并返回可序列化的JSON有效载荷。
以同样的方式添加你自己的函数;它们会自动显示在 tools/list。
示例(草图):
@mcp.tool()
def hostname() -> str:
import socket
return socket.gethostname()
故障排除
500(人/元等,根据上下文确定具体单位)在 POST /mcp 在……期间 initialize()
- 确保服务器 不是 被封装在消耗/阻塞流式数据主体的中间件中。
- 这个示例避免了使用Starlette的路由/挂载功能;我们仅使用了一个微小的ASGI网关来包裹,以保持生命周期的完整性。
401 未授权
- 检查一下
MCP_BEARER_TOKEN双方的对决。 - 确认您的客户是否选择了正确的路径:
MCP_URL=http://<host>:8000/mcp。
Windows 客户端连接到 Linux 服务器
- 那没问题。服务器会收集相关的指标 服务器 主机;客户端可以在任何能够访问到它的地方运行。
需要TLS/JWT/OAuth2吗?
- 将MCP应用置于反向代理(Caddy/NGINX/API网关)后端,并在那里终止TLS/认证,或者扩展ASGI网关。
制作备注(可选)
- 跑
uvicorn位于一个进程管理器(systemd、supervisord)和一个TLS代理之后。 - 考虑实施速率限制和结构化日志记录。
- 如果您需要更多的终端节点(例如。,
/healthz在MCP ASGI应用之前添加一个代理/路由器,而不是将其挂载在应用内部。
