使用说明
MCP服务器——系统监视器
A. FastMCP 通过以下方式公开本地机器系统指标(CPU、内存、磁盘、网络、进程)的服务器 SSE(服务器发送事件),使其可供任何远程MCP客户端访问。
针对Apple Silicon(M4 MacBook Air)进行了优化,但可在以下支持的任何平台上运行 psutil.
目录
特性
| 工具 | 说明 |
|---|---|
get_system_load |
CPU百分比、每核使用率、平均负载、RAM和交换 |
get_disk_usage |
任何路径的磁盘总数/已使用/空闲 |
get_network_stats |
发送/接收的字节数、数据包计数、活动TCP连接 |
get_top_processes |
按CPU使用率排序的前N个进程 |
get_system_info |
操作系统、架构、主机名、核心数量、正常运行时间 |
运输: 上海证券交易所 --服务器可以通过HTTP从网络上的任何主机访问。
需求
- Python≥3.11
fastmcp >= 2.0.0psutil >= 6.0.0uvicorn >= 0.30.0
安装
此项目使用 紫外线 用于依赖性管理。
# Clone / enter the project directory
cd mcp-server
# Activate the pyenv environment
pyenv activate agent
# Install server dependencies (uv reads pyproject.toml)
uv sync
# (Optional) install client-side extras for local testing
uv sync --extra dev
无手册
venv需要创造--uv sync创建和管理.venv自动。 该项目的目标是agentpyenv环境(pyenv activate agent).
运行服务器
# Default: bind to all interfaces, port 8000
python server.py
# Custom host / port
python server.py --host 0.0.0.0 --port 9000
暴露的端点:
开发模式 (python server.py --传统SSE传输)
| 端点 | 描述 |
|---|---|
GET /sse |
SSE流——MCP客户端在此连接 |
POST /messages/ |
MCP消息端点 |
生产模式 (uvicorn server:app --可流式HTTP传输)
| 端点 | 描述 |
|---|---|
POST /mcp |
MCP流式HTTP端点(发送和接收) |
GET /health |
活体探测——返回 {"status": "ok"} |
GET /ready |
准备就绪探针——取样、返回 {"status": "ready"} |
可用工具
get_system_load()
返回CPU利用率、负载平均值和内存/交换统计数据。
{
"cpu_percent": 12.4,
"cpu_per_core": [8.1, 14.3, 10.0, 17.2],
"cpu_freq_mhz": 3200.0,
"load_avg_1m": 1.52,
"load_avg_5m": 1.78,
"load_avg_15m": 1.90,
"memory_total_gb": 16.0,
"memory_used_gb": 9.3,
"memory_available_gb": 6.7,
"memory_percent": 58.1,
"swap_total_gb": 4.0,
"swap_used_gb": 0.2,
"swap_percent": 5.0,
"timestamp": "2026-03-12T08:00:00+00:00"
}
get_disk_usage(path="/")
{
"path": "/",
"total_gb": 512.0,
"used_gb": 210.5,
"free_gb": 301.5,
"percent": 41.1
}
get_network_stats()
{
"bytes_sent_mb": 1024.5,
"bytes_recv_mb": 4096.2,
"packets_sent": 500000,
"packets_recv": 2000000,
"active_connections": 42
}
get_top_processes(limit=10)
返回最多到个的列表 limit (最多50个)按CPU百分比排序的进程。
get_system_info()
返回静态主机信息:操作系统、处理器、核心计数、正常运行时间。
客户端使用情况– langchain_mcp
安装(客户端)
pip install langchain-mcp-adapters langchain-openai python-dotenv
langchain-mcp-adapters船舶langchain_mcp.MCPToolkit.
基本示例
import asyncio
from langchain_mcp import MCPToolkit
from mcp import ClientSession
from mcp.client.sse import sse_client
SERVER_URL = "http://localhost:8000/sse" # change to remote IP as needed
async def main():
async with sse_client(SERVER_URL) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
toolkit = MCPToolkit(session=session)
await toolkit.initialize()
tools = toolkit.get_tools()
print("Available tools:", [t.name for t in tools])
# Call a tool directly
load_tool = next(t for t in tools if t.name == "get_system_load")
result = await load_tool.ainvoke({})
print("System load:", result)
asyncio.run(main())
使用LangGraph ReAct的代理示例
import asyncio
import os
from dotenv import load_dotenv
from langchain_mcp import MCPToolkit
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
from mcp import ClientSession
from mcp.client.sse import sse_client
load_dotenv() # expects OPENAI_API_KEY in .env
SERVER_URL = "http://localhost:8000/sse"
async def run_agent(query: str) -> None:
async with sse_client(SERVER_URL) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
toolkit = MCPToolkit(session=session)
await toolkit.initialize()
llm = ChatOpenAI(model="gpt-4o", temperature=0)
agent = create_react_agent(llm, toolkit.get_tools())
result = await agent.ainvoke({"messages": [("human", query)]})
for msg in result["messages"]:
print(f"[{msg.type}] {msg.content}")
asyncio.run(run_agent("What is the current CPU load and how much RAM is free?"))
连接到远程服务器
替换 localhost 使用服务器的IP地址或主机名:
SERVER_URL = "http://192.168.1.100:8000/sse"
确保端口可访问(防火墙/网络ACL允许8000上的TCP)。
配置
| CLI标志 | 默认值 | 说明 |
|---|---|---|
--host |
0.0.0.0 |
要绑定的接口(使用 127.0.0.1 仅适用于本地) |
--port |
8000 |
TCP端口 |
生产部署
使用生产ASGI服务器(uvicorn)指向模块级别 app 对象(a 斯塔雷特 由构建的应用程序 mcp.http_app()).
运输注意事项:生产模式使用 流式HTTP 运输(MCP规范,2024+年12月)。
端点从以下更改/sse(发展)到/mcp(生产)。
使用streamablehttp_client在客户端,而不是sse_client.
单一流程
pyenv activate agent
uv run uvicorn server:app --host 0.0.0.0 --port 8000
多工作器(建议用于并发)
pyenv activate agent
uv run uvicorn server:app --host 0.0.0.0 --port 8000 --workers 4
码头工人
# Build image
docker build -t mcp-server .
# Run container (port 8000 forwarded)
docker run -d -p 8000:8000 --name mcp-server mcp-server
# Check health
curl http://localhost:8000/health
curl http://localhost:8000/ready
这 Dockerfile 包括a HEALTHCHECK 民意调查指令 /health 每30秒。
生产客户端示例(流式HTTP)
import asyncio
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession
from langchain_mcp import MCPToolkit
SERVER_URL = "http://localhost:8000/mcp" # /mcp endpoint
async def main():
async with streamablehttp_client(SERVER_URL) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
toolkit = MCPToolkit(session=session)
await toolkit.initialize()
tools = toolkit.get_tools()
print("Tools:", [t.name for t in tools])
result = await tools[0].ainvoke({})
print(result)
asyncio.run(main())
反向代理(nginx/Caddy)后面
- 把玉米捆起来
127.0.0.1:8000并让代理处理TLS和公共入口。 - 转发
X-Forwarded-For和X-Forwarded-Proto标题。 - 添加
--proxy-headers --forwarded-allow-ips '*'向乌威康司令部报告。
发展
# Activate pyenv environment
pyenv activate agent
# Install all dependencies including dev extras
uv sync --extra dev
# Run server in reload mode via uvicorn (for development)
uv run uvicorn server:app --reload --host 0.0.0.0 --port 8000
要通过uv直接运行服务器(无需手动激活):
uv run python server.py
项目布局
mcp-server/
├── server.py # FastMCP server + all tools
├── pyproject.toml # Project metadata & dependencies
├── Dockerfile # Production container image
├── .gitignore # Git ignore rules
├── README.md # This file
└── .github/
└── copilot-instructions.md
