使用说明
MCP(模型上下文协议)——sysmon+MCP客户端
轻量级MCP服务器(sysmon)以及TypeScript MCP客户端(mcp-client)演示了将本地LLM(通过OpenAI兼容客户端)与一组系统和天气工具集成。服务器通过MCP协议公开工具,客户端通过stdio连接到正在运行的MCP服务器,将LLM请求转发到本地LLM端点,并通过MCP SDK执行工具调用。
状态:示例/演示代码。用于实验和扩展。
目录
- sysmon/:注册系统和天气相关工具的MCP服务器。
- mcp客户端/:一个TypeScript MCP客户端,连接到服务器,与本地LLM(与OpenAI兼容的API)对话,并协调工具调用。
关键依赖关系: @modelcontextprotocol/sdk, openai (客户端配置为本地LLM), systeminformation, zod, dotenv.
快速概览
- 这
sysmon服务器注册了以下工具(请参见sysmon/src/tools):get-system-info--CPU、RAM和网络统计数据使用systeminformation.list-processes--列出正在运行的进程。kill-process--通过PID终止进程。get-alerts-获取美国各州的活动天气警报(NWS API)。get-forecast-获取纬度/经度预报(NWS API)。
- 这
mcp-client连接到正在运行的MCP服务器(stdio传输),通过配置到本地LLM端点的OpenAI兼容客户端调用LLM,并将模型函数/工具调用映射到MCP工具调用。
需求
- Node.js(建议使用v18+)
- npm或纱线
- 与兼容的本地LLM端点
openai客户端(接受类似OpenAI的聊天完成界面的HTTP端点)。集LLM_BASE_URL指向它。
环境变量
创建一个 .env 文件位于存储库根目录或 mcp-client 运行客户端时。客户端使用的重要环境变量:
LLM_BASE_URL=http://localhost:11434/ # required — local LLM endpoint
API_KEY=sk-local-llm # optional — API key for local LLM
LLM_MODEL=llama3.1 # optional — model name passed to the LLM
SYSTEM_PROMPT= # optional — additional system prompt content
LOG_FILE=mcp-client.log # optional — client log file
服务器(sysmon)将工具使用日志写入 logs/tool-usage.log 在存储库工作目录中。
构建与运行
- 在repo根目录或每个包安装依赖项
# from repo root
cd sysmon
npm install
npm run build
cd ../mcp-client
npm install
npm run build
- 运行服务器(stdio传输)——这将启动通过stdio进行通信的MCP服务器:
# from repo root
node sysmon/build/index.js
# or if installed globally via the package's bin: ./sysmon/build/index.js
- 运行客户端并将其指向要生成/连接到的服务器脚本(客户端需要一个服务器脚本路径):
cd mcp-client
node build/index.js ../sysmon/build/index.js
# Then use the interactive chat loop in the client terminal
笔记:
- 客户
build/index.js需要指向MCP服务器脚本的路径;它将生成该脚本python3(为.py)或node(为.js).上面的示例运行构建的sysmonJS服务器。 - 客户端使用配置为与OpenAI兼容的客户端
LLM_BASE_URL这允许连接到呈现类似OpenAI的HTTP API的本地LLM服务器。
如何调用工具
- LLM可以请求
function/工具调用。客户端通过以下方式将这些函数调用转换为MCP工具调用@modelcontextprotocol/sdk客户。工具结果将在下一个消息周期中返回给LLM。 - 工具已在内部注册
sysmon/src/tools/registerSystemTools.ts每个处理者都住在SystemInfoTool.ts和WeatherTools.ts.
开发说明
- 添加新工具:
- 实现一个返回的处理程序
{ content: [{ type: 'text', text: '...' }] }(参见现有工具)。 - 在中注册
registerSystemTools.ts带着一个zod输入模式。
- 实现一个返回的处理程序
- 工具调用被包裹在
wrapToolHandler它将调用记录到logs/tool-usage.log. - 客户端日志记录:
mcp-client将运行时日志附加到mcp-client.log(可通过以下方式配置LOG_FILE).
安全和权限
- 这
kill-process该工具将尝试终止进程,并要求正在运行的用户具有适当的权限。小心使用。 - NWS API调用未经验证,但应遵守NWS API使用策略和
User-Agent要求。
贡献
- 欢迎发布问题和PR。保持更改的重点,并为新工具添加小示例或测试。
许可证
此存储库使用 ISC 许可证如包装中所示 package.json 文件夹。
