1. 项目概述当ChatGPT学会“使用工具”如果你和我一样在过去一年里深度使用过各类AI助手尤其是ChatGPT那你一定经历过这样的场景你问它“今天北京的天气怎么样”它会告诉你“作为一个AI模型我无法访问实时数据但你可以通过天气网站查询”。或者你想让它帮你分析一下刚下载的CSV文件它也只能表示爱莫能助。这种“知道一切却做不了任何事”的割裂感是当前大语言模型LLM应用落地时最核心的痛点之一。xncbf/chatgpt-mcp这个项目正是为了解决这个痛点而生。简单来说它是一个为ChatGPT或其他兼容OpenAI API的模型设计的模型上下文协议Model Context Protocol, MCP服务器实现。你可以把它理解为一个“工具包”或“外挂大脑”让原本只能“空想”的ChatGPT突然拥有了“动手”的能力——它可以读取你电脑上的文件、执行你授权的命令、查询数据库甚至控制智能家居。这个项目的核心价值在于它遵循了由Anthropic等公司推动的MCP标准提供了一套开箱即用的服务端实现让你能快速、安全地为你的AI助手扩展出无限可能。这个项目适合谁首先是AI应用开发者。如果你想为自己的产品集成一个“超级智能体”让AI不仅能对话还能真正操作后台系统那么MCP是你必须了解的协议而这个项目是一个极佳的起点和参考实现。其次是重度AI用户和技术爱好者。厌倦了在ChatGPT和各类工具间反复切换通过搭建自己的MCP服务器你可以打造一个专属的、全能型的AI副驾驶让它直接帮你处理本地任务。最后对于学习AI工程化、Agent智能体架构的同学来说这是一个绝佳的、贴近工业级标准的学习案例。接下来我将以一个实践者的角度带你彻底拆解这个项目。我们不仅会弄懂它是什么更要搞清楚它为什么这么设计以及如何亲手搭建并扩展它让它为你所用。2. 核心架构与MCP协议深度解析要理解chatgpt-mcp我们必须先搞懂它背后的基石——Model Context Protocol (MCP)。你可以把MCP想象成AI世界的“USB协议”。在USB协议出现之前电脑连接打印机、键盘、U盘都需要各自专用的接口和驱动混乱且低效。MCP的目标就是为AI模型电脑和外部工具外设之间定义一套统一、安全、高效的通信标准。2.1 MCP协议的三层核心设计MCP协议的设计非常精巧主要围绕三个核心概念展开资源Resources、工具Tools和提示词模板Prompts。chatgpt-mcp项目就是对这三类概念的服务器端实现。2.1.1 资源Resources赋予AI“眼睛”资源代表了AI可以读取的“数据”。在chatgpt-mcp的默认实现中就包含了file文件和sqlite数据库等资源。例如当你问AI“帮我总结一下/home/user/report.md的内容”AI背后的MCP客户端如Claude Desktop会通过标准化的URI如file:///home/user/report.md向chatgpt-mcp服务器请求这个资源。服务器收到请求后读取文件内容并以纯文本或结构化数据如JSON的形式返回给AI模型。注意资源是“只读”的。这是MCP一个非常重要的安全设计原则。AI可以“看”资源但不能直接“改”资源。修改操作必须通过“工具”来完成这为权限控制提供了清晰的边界。2.1.2 工具Tools赋予AI“双手”工具代表了AI可以执行的“动作”。这是MCP最强大的部分。在chatgpt-mcp中内置了诸如command执行系统命令、filesystem_write写文件等工具。AI在思考后如果认为需要执行某个操作比如“请创建一个名为todo.txt的文件”它会生成一个结构化的工具调用请求发送给MCP服务器。服务器则负责在受控的环境下执行这个动作并将结果成功或失败附带输出信息返回给AI。工具调用通常包含输入参数Input Schema这类似于函数的参数定义。例如command工具需要一个command字符串参数。这确保了AI传递的信息是结构化和可验证的。2.1.3 提示词模板Prompts赋予AI“预设技能”提示词模板可以理解为预定义的、可参数化的对话开场白或任务指令。它允许服务器端提供一些复杂的、多步的交互模板。例如一个“代码审查”提示词模板可以预设好让AI以某种固定格式和角度去审查用户随后提供的代码片段。在chatgpt-mcp中这部分功能可能作为扩展点存在让开发者能够封装更复杂的AI工作流。2.2chatgpt-mcp的服务器角色与通信机制chatgpt-mcp项目本质上是一个MCP 服务器Server。它的工作模式是标准的客户端-服务器C/S架构但这里的客户端通常是集成了MCP协议的AI应用前端比如Claude Desktop、Cursor IDE或者任何你自己开发的、兼容MCP的客户端。通信流程通常如下连接建立MCP客户端如你的ChatGPT界面插件通过标准输入输出stdio或HTTP等传输层与chatgpt-mcp服务器进程建立连接。能力协商连接成功后服务器会向客户端“广告”自己支持哪些资源、工具和提示词模板。这就像一个新外设插入电脑时说“嗨我是一个打印机我能打印彩色的。”会话交互用户与AI对话。AI根据对话内容决定是否需要调用工具或读取资源。请求-响应AI通过客户端向服务器发起标准化请求如resources.read,tools.call。服务器执行相应操作读文件、跑命令并返回结果。结果整合AI接收到工具执行的结果后将其作为上下文的一部分生成最终的回答给用户。整个通信过程使用JSON-RPC 2.0协议消息格式严格遵循MCP规范定义。这种标准化确保了不同团队开发的MCP服务器和客户端可以无缝互操作这也是生态能够繁荣的基础。为什么选择MCP而不是其他方案在MCP之前为AI扩展功能多是“各自为政”。OpenAI的Function Calling、LangChain的Tools、AutoGPT的插件……都是私有或半私有的方案。MCP由Anthropic牵头并得到了包括Google、 NVIDIA、GitHub等巨头的支持旨在成为一个开放、中立的行业标准。chatgpt-mcp基于此标准开发意味着其兼容性和未来潜力更大不会被单一厂商绑定。3. 环境准备与项目部署实操理论讲得再多不如动手跑起来。我们来看看如何将chatgpt-mcp这个“引擎”安装并启动起来。这里我假设你使用的是 macOS 或 Linux 系统Windows用户可以通过WSL获得类似体验并具备基本的命令行操作能力。3.1 基础环境搭建首先确保你的系统已经安装了Node.js版本18或以上和npmNode.js的包管理器。这是运行该项目的基础。# 检查Node.js和npm版本 node --version npm --version如果未安装建议通过 nvm Node Version Manager来安装和管理Node.js版本这对于同时处理多个项目非常方便。接下来我们需要获取chatgpt-mcp的源代码。通常这类项目会托管在GitHub上。# 克隆项目仓库到本地 git clone https://github.com/xncbf/chatgpt-mcp.git cd chatgpt-mcp进入项目目录后第一件事是安装项目依赖。使用 npm 即可npm install这个过程会读取项目根目录下的package.json文件并下载所有必需的JavaScript库如用于进程通信、文件操作、协议实现的库。如果网络状况不佳可以考虑配置npm镜像源。实操心得依赖安装的坑有时某些原生模块native addons在安装时需要编译这要求你的系统具备Python和C编译环境如python3,make,g。在macOS上你可能需要安装Xcode Command Line Tools (xcode-select --install)。在Ubuntu/Debian上可能需要build-essential包。如果安装失败请仔细查看错误日志通常它会明确告诉你缺少什么。3.2 配置详解与安全第一原则安装完依赖后先别急着运行。MCP服务器的核心在于配置而配置的核心在于安全。chatgpt-mcp通常通过一个配置文件可能是config.json,config.js或环境变量来定义暴露哪些资源和工具以及它们的权限范围。让我们假设项目提供了一个config.example.json作为示例。你需要复制一份并修改它cp config.example.json config.json打开config.json你可能会看到类似下面的结构{ resources: { files: { rootPath: /Users/YourName/Documents/AI_Workspace, readOnly: true }, sqlite: { databasePath: /Users/YourName/data.db } }, tools: { command: { allowedCommands: [ls, cat, pwd, date], workingDirectory: /tmp }, filesystem_write: { allowedPaths: [/Users/YourName/Documents/AI_Workspace/temp] } } }这是你需要打起十二分精神的地方每一个配置项都关系到你的系统安全。resources.files.rootPath这定义了AI可以访问的文件系统根目录。绝对不要设置为/系统根目录或你的家目录/home/yourname。最佳实践是创建一个专用于AI工作的目录例如~/AI_Workspace并将所有你愿意让AI读取的文件放在这里。这遵循了“最小权限原则”。resources.files.readOnly强烈建议在初次使用时设置为true。这意味着AI只能读不能写。等你完全信任其行为后再考虑开放写权限。tools.command.allowedCommands这是命令执行工具的白名单。只添加你完全理解且无害的命令。像rm -rf /、sudo、dd这类危险命令永远不应该出现在这里。初期可以只给ls列目录、pwd显示当前路径、cat查看小文件内容等查询类命令。tools.command.workingDirectory命令执行的默认工作目录。设置为一个临时或安全的路径避免命令在敏感目录下执行。tools.filesystem_write.allowedPaths文件写入工具允许的路径。应该是一个极其受限的、专门用于接收AI生成文件的目录比如~/AI_Workspace/outputs。我的安全配置黄金法则在沙盒中开始。你可以使用Docker或虚拟机来首次运行MCP服务器将其与宿主主机隔离。即使配置失误影响范围也仅限于沙盒环境。3.3 启动服务器与连接测试配置完成后就可以启动服务器了。查看项目的package.json文件通常会在scripts部分找到启动命令例如{ scripts: { start: node server.js } }那么启动命令就是npm start # 或者直接 node server.js如果一切正常你应该会在终端看到服务器启动的日志比如“MCP Server started on stdio”或监听某个端口的信息。此时服务器正在等待客户端连接。如何测试连接最直接的方法是使用一个MCP客户端。目前最流行的当属Claude Desktop应用。在其设置中你可以找到配置MCP服务器的选项。你需要填入服务器的连接信息。对于chatgpt-mcp这种使用stdio通信的服务器在Claude Desktop中的配置可能类似于一个本地命令{ mcpServers: { my-local-tools: { command: node, args: [/absolute/path/to/chatgpt-mcp/server.js], env: { NODE_ENV: development } } } }配置完成后重启Claude Desktop。在对话界面你应该能看到一个新的“工具”图标或类似提示表明MCP服务器已连接。此时你可以尝试对Claude说“请列出我AI工作空间根目录下的文件。” 如果配置正确Claude会调用chatgpt-mcp的文件资源并返回目录列表。注意事项首次连接时Claude Desktop等客户端可能会提示你“是否允许服务器执行命令”。请务必仔细阅读提示内容确认是你刚启动的服务器后再授权。这是客户端提供的又一层安全防护。4. 核心功能模块拆解与扩展开发现在服务器已经跑起来了我们能用它做什么更重要的是如果我们不满足于内置功能该如何为其“添砖加瓦”本章节将深入chatgpt-mcp的代码内部解析其核心模块并手把手教你如何开发一个自定义工具。4.1 内置工具与资源实战分析以项目内置的command工具和file资源为例我们看看它们是如何实现的。file资源读取流程当AI需要读取file:///path/to/file时客户端会发送一个resources.read请求。服务器端在chatgpt-mcp中会有相应的请求处理器Handler。这个处理器会 a.解析URI从file://协议中提取出实际的文件路径。 b.权限校验检查该路径是否在配置允许的rootPath之下防止路径遍历攻击如../../../etc/passwd。 c.读取文件使用Node.js的fs模块同步或异步读取文件内容。 d.内容处理根据文件类型可能进行简单处理如文本文件直接返回二进制文件可能编码为Base64或拒绝读取。 e.返回结果将内容或错误信息封装成MCP标准响应格式发回客户端。command工具执行流程AI决定执行命令发送tools.call请求参数为{“name”: “command”, “arguments”: {“command”: “ls -la”}}。服务器的工具调用处理器会 a.参数验证检查请求的name是否为已注册工具并验证arguments是否符合预定义的JSON Schema例如command参数必须是字符串。 b.安全审查检查命令是否在配置的allowedCommands白名单中。这里通常不是简单的字符串完全匹配而是需要更智能的解析。例如白名单是[“ls”]那么ls -la应该被允许但ls /etc; rm -rf /则应该被拒绝。实现一个安全的命令解析器是难点所在。c.执行环境设置在配置的workingDirectory下通过Node.js的child_process.spawn或exec来创建子进程执行命令。 d.收集输出捕获子进程的标准输出stdout、标准错误stderr和退出码exit code。 e.返回结果将执行结果封装返回。好的实现还会设置执行超时防止恶意或异常命令无限挂起。4.2 开发一个自定义工具以“查询天气”为例假设我们想让AI能查询实时天气这就需要创建一个新的MCP工具。以下是详细的开发步骤4.2.1 定义工具接口JSON Schema首先我们需要定义这个工具长什么样它叫什么名字需要什么参数这对应MCP协议中的工具“声明”。在项目的合适位置例如src/tools/weather.js我们创建这个工具的定义// src/tools/weather.js const weatherTool { // 工具的唯一标识名AI将通过这个名字来调用 name: get_weather, // 工具的描述帮助AI理解何时使用此工具 description: Get the current weather for a given city., // 输入参数的JSON Schema定义 inputSchema: { type: object, properties: { city: { type: string, description: The name of the city, e.g., Beijing or New York. }, units: { type: string, enum: [metric, imperial], description: The unit system for temperature. metric for Celsius, imperial for Fahrenheit., default: metric } }, required: [city] // city是必填参数 } };4.2.2 实现工具执行逻辑接下来实现当AI调用这个工具时服务器端实际要执行的代码。这通常是一个异步函数。// 继续在 src/tools/weather.js 中 async function executeWeatherQuery(args, context) { const { city, units metric } args; const apiKey process.env.WEATHER_API_KEY; // 从环境变量读取API密钥 if (!apiKey) { throw new Error(Weather API key is not configured. Please set the WEATHER_API_KEY environment variable.); } // 构建请求URL这里以OpenWeatherMap API为例 const url https://api.openweathermap.org/data/2.5/weather?q${encodeURIComponent(city)}units${units}appid${apiKey}; try { const response await fetch(url); if (!response.ok) { throw new Error(Weather API request failed with status: ${response.status}); } const data await response.json(); // 从API响应中提取我们需要的信息 const temperature data.main.temp; const condition data.weather[0].description; const humidity data.main.humidity; // 将结果格式化为对AI友好的文本 return { content: [ { type: text, text: The current weather in ${city} is ${condition}. Temperature is ${temperature}°${units metric ? C : F}, humidity is ${humidity}%. } ] }; } catch (error) { // 错误处理将错误信息清晰地返回给AI return { content: [ { type: text, text: Failed to fetch weather for ${city}: ${error.message} } ], isError: true }; } } // 将定义和执行函数导出 module.exports { tool: weatherTool, execute: executeWeatherQuery };4.2.3 注册工具到服务器最后我们需要在服务器的主文件例如server.js或专门的注册模块中导入并注册这个新工具。// 在 server.js 或类似的主文件中 const { weatherTool, executeWeatherQuery } require(./src/tools/weather); // 假设项目有一个用于注册工具的函数 registerTool registerTool({ definition: weatherTool, // 工具定义 handler: executeWeatherQuery // 执行函数 });4.2.4 配置与环境变量别忘了我们的工具需要API密钥。绝对不要将密钥硬编码在代码中。应该使用环境变量。# 在启动服务器前设置环境变量 export WEATHER_API_KEYyour_openweathermap_api_key_here # 然后启动服务器 npm start同时更新你的配置文件将这个新工具列入允许使用的清单如果配置中有相关白名单。4.2.5 测试自定义工具重启MCP服务器和你的客户端如Claude Desktop。现在当你问AI“今天北京天气怎么样”时AI应该能识别出需要调用get_weather工具并自动使用city: “Beijing”作为参数发起请求。你将在对话中看到实时的天气结果。开发心得工具设计的艺术描述要清晰description和参数description至关重要。它们是AI决定是否以及如何调用工具的主要依据。写得越精准AI使用得就越准确。错误处理要友好工具执行总会出错网络问题、API限制、无效输入。你的错误信息应该能帮助AI理解发生了什么从而让它能给用户一个合理的解释或者尝试其他方案。结果格式化返回给AI的结果最好是简洁、结构化的文本。避免返回原始的、复杂的JSON。让AI做它擅长的事理解和生成语言而不是做数据解析。考虑速率限制如果你的工具调用外部API务必在代码中加入速率限制和重试逻辑防止滥用导致API密钥被封。通过这个例子你可以举一反三开发出查询股票、发送邮件、管理日历、控制智能家居等任何你能想到的工具将ChatGPT真正打造成你的个人全能助手。5. 高级应用场景与架构思考当你掌握了基础部署和自定义开发后chatgpt-mcp能玩的格局就打开了。它不再是一个简单的脚本而可以成为你AI原生应用架构中的核心组件。5.1 场景一构建企业级内部知识库助手很多公司都有大量的内部文档Confluence、Wiki、SharePoint、各种PDF报告。员工查找信息效率低下。你可以利用chatgpt-mcp构建一个安全的内网助手。资源扩展开发一个confluence资源适配器。它通过Confluence API将空间Space、页面Page映射为MCP资源URI如confluence://team/docs/page/1234。当AI需要参考某份文档时它直接请求该URI你的服务器就去拉取内容并返回。工具扩展开发一个jira_create_issue工具。员工可以直接对AI说“根据刚才讨论的API故障在Jira上创建一个高优先级的Bug单分配给后端团队并把刚才的日志摘要附上。” AI调用你的工具自动填充表单并创建工单。安全隔离将MCP服务器部署在内网配置严格的资源访问范围只能访问特定的Confluence空间、Jira项目。客户端如一个内部Web聊天界面通过内网连接。这样数据不出域安全可控。架构优势通过MCP标准协议你前端界面的AI交互部分用什么UI框架、用什么LLM和后端的工具/资源服务完全解耦。你可以随时更换前端的LLM比如从GPT-4换成Claude 3或者增加新的后台工具而无需重写整个系统。5.2 场景二个人自动化工作流中枢对于开发者或知识工作者可以将chatgpt-mcp作为个人自动化流程的“大脑”。监听与触发结合cron或系统事件监听让MCP服务器定期执行任务。例如每天早上9点自动读取你的日历calendar资源获取当天会议然后调用email工具给参会人发送议程提醒。复杂工作流编排AI可以串联多个工具。你只需要说“帮我分析上个月的服务器日志找出错误最多的Top 5总结成一份报告并保存到我的周报目录下。” AI会自行规划调用log_reader工具获取日志 - 调用analyze_errors工具或自己分析- 调用filesystem_write工具生成报告。与本地软件集成开发工具与本地应用交互。例如一个photoshop_automate工具接收“将/input/image.jpg裁剪为正方形应用滤镜保存到/output”的指令然后通过Photoshop的脚本接口如ExtendScript来实现。实操技巧状态管理MCP协议本身是无状态的但复杂工作流可能需要状态。一个简单的模式是让工具将中间状态写入一个由文件资源管理的临时文件或者使用一个简单的键值存储工具。AI在后续步骤中可以读取这些状态信息。5.3 性能、安全与生产化部署考量当你想把chatgpt-mcp用于更严肃的场景时以下几个问题必须考虑5.3.1 性能优化连接池如果客户端请求量大单个服务器进程可能成为瓶颈。可以考虑将服务器设计为无状态的并使用连接池管理后端资源如数据库连接。缓存策略对于资源读取如文件、API数据可以引入缓存层如Redis。特别是那些不常变的数据避免重复IO或网络请求。异步处理对于耗时的工具调用如训练一个模型不要让HTTP请求一直阻塞。可以改为异步模式工具调用立即返回一个任务ID然后通过另一个资源或工具来查询任务结果。5.3.2 安全加固重中之重身份认证与授权在生产环境绝对不能允许未经认证的连接。MCP协议支持传输层安全TLS和多种认证方式。你需要为你的服务器实现客户端认证例如通过API密钥、JWT令牌或双向TLS证书。输入验证与沙箱化对所有来自客户端的输入资源URI、工具参数进行严格的验证和清洗。对于命令执行工具考虑使用Docker容器或nsjail等沙箱技术将工具执行隔离在一个资源受限、无网络或受限网络的环境中。审计日志记录所有的资源访问和工具调用请求包括时间、用户或会话、操作内容和结果。这对于事后审查、问题排查和合规性至关重要。5.3.3 生产部署架构一个典型的生产部署可能如下[用户] - [负载均衡器] - [多个 MCP 服务器实例] - [内部服务/数据库] | | [认证网关] [共享缓存 (Redis)] [审计日志中心]使用PM2或Kubernetes来管理Node.js进程实现高可用和自动重启。使用Nginx或API网关做反向代理处理TLS终止、限流和基础路由。将配置如API密钥、白名单存储在环境变量或配置中心如HashiCorp Consul而非代码文件中。6. 常见问题与故障排查实录在实际搭建和使用chatgpt-mcp的过程中你几乎一定会遇到下面这些问题。我把它们和我的解决方案记录下来希望能帮你节省大量时间。6.1 连接与通信问题问题1服务器启动了但客户端如Claude Desktop连接不上提示“无法连接到服务器”或超时。检查点1传输方式匹配吗MCP支持stdio和HTTP(s)等多种传输方式。确保你的服务器启动的模式和客户端配置的连接方式一致。如果服务器是stdio模式客户端配置就应该是命令调用如果是HTTP模式客户端配置就应该是URL。检查点2权限问题特别是stdio模式。确保启动客户端的用户有权限执行你配置的服务器启动命令。在类Unix系统上检查脚本是否有可执行权限 (chmod x)。检查点3端口冲突或防火墙HTTP模式。如果服务器监听localhost:8080检查该端口是否被其他程序占用 (lsof -i:8080)以及系统防火墙是否阻止了连接。排查方法首先在服务器启动命令后增加调试日志确认它确实在监听。其次尝试用最简单的客户端如netcat或telnet对于HTTP手动连接看是否能建立TCP链接。最后查看客户端和服务器的日志文件通常会有更详细的错误信息。问题2连接成功但客户端显示“未发现可用工具”。原因服务器在初始化过程中工具注册可能失败了或者服务器在向客户端“广告”自己能力时出现了错误。排查查看服务器启动日志确认你的自定义工具模块是否被正确加载是否有语法错误导致整个注册过程中断。一个常见的错误是工具定义JSON Schema不符合MCP规范导致序列化失败。6.2 工具调用执行问题问题3AI调用了工具但返回“Permission denied”或“Tool not allowed”。原因这是安全配置在起作用。说明AI尝试调用的工具或命令不在你的配置白名单中。解决仔细检查你的配置文件config.json中对应工具的白名单allowedCommands,allowedPaths等。确保你允许了AI试图执行的具体操作。在放宽权限前请务必理解其安全风险。问题4工具执行超时或无响应。原因工具执行的操作太耗时如网络请求慢、执行复杂计算或者工具代码中存在死循环。解决在工具实现中增加超时机制对于任何可能耗时的操作网络请求、子进程使用Promise.race或类似机制设置超时。优化工具逻辑检查工具是否在等待一个永远不会发生的事件。查看服务器日志工具执行时的console.log或错误信息会输出在这里是定位问题的关键。示例为网络请求添加超时async function callAPIWithTimeout(url, options, timeoutMs 10000) { const controller new AbortController(); const timeoutId setTimeout(() controller.abort(), timeoutMs); try { const response await fetch(url, { ...options, signal: controller.signal }); clearTimeout(timeoutId); return response; } catch (error) { clearTimeout(timeoutId); if (error.name AbortError) { throw new Error(Request to ${url} timed out after ${timeoutMs}ms); } throw error; } }6.3 资源访问问题问题5AI无法读取某个文件提示“Resource not found”或“Access denied”。检查点1路径映射确认AI请求的URI如file:///home/user/doc.txt是否正确地映射到了服务器配置的rootPath下的真实路径。注意URI的编码和绝对路径问题。检查点2文件系统权限运行MCP服务器的进程用户如node是否有权限读取目标文件使用ls -l检查文件权限和所有者。检查点3路径遍历攻击防护你的服务器代码是否正确地阻止了像file:///allowed/root/../../../etc/passwd这样的恶意路径确保在拼接路径后使用path.resolve并检查结果是否仍在允许的根目录内。6.4 与AI模型的协作问题问题6AI不理解该在什么时候调用我的工具或者调用时参数总是不对。原因这通常不是MCP服务器的问题而是工具定义description和inputSchema不够清晰导致的。AI模型如GPT-4依赖于这些元数据来理解工具的功能和使用方式。优化技巧描述要具体不要写“处理文件”要写“读取指定文本文件的内容并返回前1000个字符”。参数描述要示例化在参数的description字段中给出明确的例子。例如description: “The city name in English, e.g., ‘London’, ‘New York’. Do not use Chinese characters.”使用enum限制选项如果参数只有几个固定值一定要用enum列出这能极大提高AI调用的准确性。进行“提示词工程”有时你需要在用户提问的层面引导AI。例如在系统的初始提示词System Prompt中明确告诉AI“你拥有文件读写能力当用户提到查看、编辑或创建文件时你可以主动使用相应的工具。”问题7AI频繁调用同一个工具即使不需要。原因可能是工具的描述过于宽泛或者AI的“思维链”出现了偏差。解决优化工具描述使其应用场景更精确。同时可以在客户端层面设置一些限流规则或者让AI在调用工具前先简要说明为什么调用这可以通过提示词实现由用户确认后再执行这是一种“人机协同”的安全模式。经过以上六个章节的拆解从协议原理到环境搭建从核心功能到扩展开发再到高级应用和问题排查我相信你已经对xncbf/chatgpt-mcp这个项目有了立体而深入的理解。它不仅仅是一个代码仓库更是一把钥匙打开了将大型语言模型从“对话天才”转变为“实干专家”的大门。