{"repo":"ConardLi/mcp-client-nodejs","free":true,"listed":false,"github":"https://github.com/ConardLi/mcp-client-nodejs","clone":"git clone https://github.com/ConardLi/mcp-client-nodejs.git","description":"Node.js Client Implementation for Model Context Protocol (MCP)","language":"TypeScript","stars":101,"topics":[],"license":null,"category":"mcp-servers","readme_excerpt":"项目介绍 MCP Client 是一个基于 Model Context Protocol 的 Node.js 客户端实现（使用 Function Calling），它允许您的应用连接到各种 MCP 服务器，并通过大语言模型（LLM）与这些服务器交互。MCP（模型上下文协议）是一个开放协议，用于标准化应用程序向 LLM 提供上下文的方式。 核心特性 - 支持连接任何符合 MCP 标准的服务器 - 支持兼容 OpenAI API 格式的 LLM 能力 - 自动发现和使用服务器提供的工具 - 完善的日志记录系统，包括 API 请求和工具调用 - 交互式命令行界面 - 支持工具调用和结果处理 系统要求 - Node.js 17 或更高版本 - LLM API 密钥（暂不支持 Ollama） - 磁盘空间用于存储日志文件（位于 logs/ 目录） 安装 1. 克隆仓库 2. 安装依赖 所需依赖项： - @modelcontextprotocol/sdk - openai - dotenv - typescript（开发依赖） - @types/node（开发依赖） 3. 配置环境变量 复制示例环境变量文件并设置您的 LLM API 密钥： 然后编辑 .env 文件，填入您的 LLM API 密钥、模型提供商 API 地址、以及模型名称： 4. 编译项目 使用方法 要启动 MCP 客户端，您可以使用以下几种方式： 1. 直接指定服务器脚本路径 其中 是指向 MCP 服务器脚本的路径，可以是 JavaScript (.js) 或 Python (.py) 文件。 2. 使用配置文件 其中 是配置文件中定义的服务器名称， 是包含服务器定义的 JSON 文件的路径。 3. 使用 npm 包（npx） 您可以直接通过 npx 运行这个包，无需本地克隆和构建： 注意：需要在当前运行目录的 .env 配置模型相关信息 示例 直接连接 JavaScript MCP 服务器： 直接连接 Python MCP 服务器： 使用配置文件连接服务器： 使用 npx 运行： 工作原理 1. 服务器连接 ：客户端连接到指定的 MCP 服务器 2. 工具发现 ：自动获取服务器提供的可用工具列表 3. 查询处理 ： - 将用户查询发送给 LLM - LLM 决定是否需要使用工具 - 如果需要，客户端通过服务器执行工具调用 - 将工具结果返回给 LLM - LLM 提供最终回复 4. 交互式循环 ：用户可以不断输入查询，直到输入\"quit\"退出 日志系统 MCP Client 包含一个全面的日志系统，详细记录所有关键操作和通信。日志文件保存在 logs/ 目录中，以 JSON 格式存储，方便查询和分析。 日志类型 - LLM 的请求和响应 - 记录与 LLM API 的所有通信 - 工具调用和结果 - 记录所有工具调用参数和返回结果 - 错误信息 - 记录系统运行期间的任何错误 日志命名和格式 日志文件连统命名为 [index] [log type] YYYY-MM-DD HH:MM:SS.json ，包含序号、日志类型和时间戳，方便按时间顺序查看整个会话。 架构设计 MCP Client 基于模块化的客户端-服务器架构： - 传输层 ：使用 Stdio 传输机制与服务器通信 - 协议层 ：使用 MCP 协议处理请求/响应和工具调用 - 模型层 ：通过 OpenAI SDK 提供 LLM 能力 核心组件 - MCPClient 类 ：管理服务器连接、处理查询和工具调用 - Client 对象","default_branch":null,"files":null,"tree":[],"storefront":"/r/ConardLi","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/ConardLi/mcp-client-nodejs/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}