CHATGPT_GO
一个基于Go的网关,可以发现本地安装的MCP(模型上下文协议)服务器,并通过自动生成的OpenAPI模式将它们暴露给单个自定义的ChatGPT GPT。将描述本地服务的YAML文件放入 mcp_servers 目录和网关将立即代理对它的请求,并更新GPT导入的架构。
特性
- ⚙️ 自动发现 –查看目录中新的/更新的YAML服务定义。
- 📄 动态OpenAPI生成 –服务于整合
openapi.json这总是反映了活动的MCP服务器。 - 🔁 反向代理 –将来自ChatGPT的操作请求转发到正确的本地服务,保留标头和查询参数。
- 🏷️ 服务元数据 –使用供应商扩展对每个操作进行注释(
x-service-name,x-service-address)因此,您可以将请求追溯到其来源。 - 🛡️ CORS友好 –回应
OPTIONS请求并允许跨源调用,使ngrok等隧道工具变得无痛。
入门指南
先决条件
- 转到1.21+
- (可选) 吸烟 或另一个隧道实用程序,以将网关暴露到互联网。
1.获取依赖项
go mod tidy2.启动示例MCP服务器(可选但推荐)
这些模拟服务位于 examples/ 并镜像示例YAML定义。
# Terminal 1 – Weather service
cd examples/weather_service
go run .# Terminal 2 – Todo service
cd examples/todo_service
go run .两个服务都在监听 localhost 港口(9001 和 9002).请随意使用相同的地址交换您自己的MCP服务器。
3.运行网关
go run .默认情况下,网关会监听 :8080 并观看 ./mcp_servers 目录。第一次运行附带了两个示例YAML文件:
mcp_servers/weather.yamlmcp_servers/todo.yaml
添加、编辑或删除该目录中的YAML文件,网关将自动重新加载,无需重新启动。
4.(可选)将网关暴露给ChatGPT
使用隧道服务使本地服务器可以从ChatGPT访问。例如ngrok:
ngrok http 8080注意公共URL(例如。 https://.ngrok-free.app).
5.配置您的自定义GPT
- 在以下位置创建或编辑GPT chat.openai.com.
- 打开 配置→ 行动 并选择 从URL导入.
- 粘贴网关架构URL:
https://.ngrok-free.app/openapi.json. - 保存GPT。现在,操作被路由到中描述的任何MCP服务器
mcp_servers/.
定义服务
服务定义是简单的YAML。每个文件代表一个MCP服务器,可以包含多个端点。示例(mcp_servers/weather.yaml):
serviceName: weather
serviceAddress: http://localhost:9001
description: "A service that returns the current weather for a city."
endpoints:
- path: /weather/{city}
method: GET
description: "Get the current weather for a specific city."
operationId: getWeatherForCity
parameters:
- name: city
in: path
description: "City to look up."
schema:
type: string端点支持:
- 路径、方法、描述和可选
operationId. - 路径和查询参数(路径参数根据需要自动标记)。
- 具有任意JSON模式片段的可选请求体。
根据需要添加任意数量的YAML文件;网关将它们合并到一个OpenAPI文档中,用发起服务标记每个操作。
配置参考
| 选项 | 描述 | 默认值 |
|---|---|---|
CHATGPT_GATEWAY_CONFIG | 用于监视YAML文件的目录。 | ./mcp_servers |
CHATGPT_GATEWAY_ADDR | 确切地址(host:port)对于HTTP服务器。 | *(未设置)* |
CHATGPT_GATEWAY_PORT | 端口(或 host:port)如果 CHATGPT_GATEWAY_ADDR 未设置。 | 8080 |
--config | CLI标志替代 CHATGPT_GATEWAY_CONFIG. | ./mcp_servers |
--addr | CLI标志替代 CHATGPT_GATEWAY_ADDR. | :8080 |
CLI标志覆盖环境变量。
网关的工作原理
- 服务YAML文件被解析为内存中的定义。
- 网关构建路由表(方法+路径→ 服务)。
- 在每个HTTP请求上(除了
/openapi.json),它会找到匹配的路由并将调用代理到服务的serviceAddress. - 这
/openapi.json端点返回一个合并的OpenAPI 3.1模式,ChatGPT使用该模式进行动作发现。
配置目录中的任何文件创建、修改、删除或重命名都会触发重新加载和模式重新生成。
开发技巧
- 通过直接运行网关启用详细日志记录(
go run .)--您将看到代理活动和文件监视器事件。 - 想为新的MCP服务器建模吗?复制一个示例YAML文件并调整元数据、端点和地址。
- 您可以在本地检查生成的OpenAPI文档 http://localhost:8080/openapi.json.
- 助手服务
examples/它们故意简单无状态,使其易于适应或替换。
黑客快乐!放下你的服务 mcp_servers/ 它们在开发人员模式下立即可供GPT使用。
