模型上下文协议工具集

一个轻量级的MCP服务器和TypeScript客户端,用于集成本地LLM与系统和天气工具,适用于本地LLM实验和扩展。

  • by hetparekh21
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 hetparekh21/mcp

使用说明

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 在存储库工作目录中。

构建与运行

  1. 在repo根目录或每个包安装依赖项
# from repo root
cd sysmon
npm install
npm run build

cd ../mcp-client
npm install
npm run build
  1. 运行服务器(stdio传输)——这将启动通过stdio进行通信的MCP服务器:
# from repo root
node sysmon/build/index.js
# or if installed globally via the package's bin: ./sysmon/build/index.js
  1. 运行客户端并将其指向要生成/连接到的服务器脚本(客户端需要一个服务器脚本路径):
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).上面的示例运行构建的 sysmon JS服务器。
  • 客户端使用配置为与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 文件夹。