MCP LLM Gateway / MCP 大模型网关
OpenAI Responses API兼容网关,集成MCP服务器(本地文档/PDF KB+数据库MCP示例),并与 big-agi.com. 一个 OpenAI Responses API 兼容的网关,集成 MCP servers(本地 docs/PDF 知识库 + 数据库 MCP 示例),并兼容 big-agi.com。
\*\*与提供商无关的方向 今天网关说话 OpenAI型响应API 上游(OpenAI或任何兼容的端点)。 该设计旨在将来通过适配器扩展到其他上游提供商(例如Claude)。 当前网关上游使用 OpenAI 风格的 Responses API(OpenAI 或任何兼容 endpoint)。 设计上希望未来可通过适配层扩展更多上游(例如 Claude 等)。
______________________________________________________________________
Overview / 简介
本项目是一个 OpenAI API 风格的网关(重点支持 /v1/responses),并在本地通过 stdio 拉起一个或多个 MCP Server,在需要时执行 tool loop(工具调用循环):
- Docs/PDF 知识库 MCP(内置):
docs-kb-mcp-rs(Rust),用于检索本地索引(RAG / KB)。 - 数据库 MCP(示例):以 Oracle MCP 为例演示数据库工具链(schema 查询 + 只读 SQL),但网关本身不绑定特定数据库,未来可扩展更多 MCP server。
- 大AGI兼容:对 Responses streaming/事件结构做了更严格的兼容(尤其
function_call模式) - OpenAI API 兼容:暴露
/v1/responses、/v1/models等端点,便于 OpenAI SDK / 兼容客户端对接。
注意:目前主要面向 响应API。如果你的客户端只调用 /v1/chat/completions,需要额外适配或改用支持 Responses 的客户端。这个项目是一个 OpenAI风格的网关 (专注于 /v1/responses).它正在孕育 通过stdio连接一个或多个MCP服务器 并运行a 刀具回路 需要时:
- 文档/PDF KB MCP(捆绑):
docs-kb-mcp-rs(Rust)用于本地索引检索(RAG/KB)。 - 数据库MCP(示例):Oracle MCP用作示例集成(模式检查+只读SQL),但网关不与任何单个数据库绑定;稍后可以添加更多的MCP服务器。
- 大AGI兼容:更严格的响应流/事件兼容性(尤其是
function_call模式)。 - 兼容OpenAI API:暴露
/v1/responses,/v1/models等,用于OpenAI SDK和兼容客户端。
注意:此回购主要针对 响应API。如果您的客户只使用 /v1/chat/completions,您将需要额外的调整或使用支持响应的客户端。______________________________________________________________________
Features / 功能特性
- OpenAI 风格端点:
- POST /v1/responses - GET /v1/models - GET /health
- 三种模式(环境变量默认 + 单请求覆盖):
- 代理:尽量“原样”透传上游 Responses(流式逐事件透传) - 兼容:启用 MCP tools + tool loop(流式为 buffered 兼容输出) - 自动:根据请求特征自动选择 proxy/compat(默认)
- MCP 集成:
- 内置 docs KB MCP(stdio) - 数据库 MCP(以 Oracle 为例;可扩展更多 MCP server)
- 安全护栏(以数据库
run_sql_query工具为例):
- 只允许单条 SELECT/WITH - 自动包裹 ROWNUM 如果你只运行网关 + 已存在的索引文件,可能不会直接调用 pdftotext`;但为了完整能力(重新索引 PDF),建议安装。
索引器(kb-indexer-rs)依赖于外部 pdftotext 命令(通常来自Poppler工具)从PDF中提取文本。
如果只使用现有索引运行网关,则可能不直接需要 pdftotext。仍然建议使用完整的PDF索引功能。______________________________________________________________________
Repository Layout / 仓库结构
这是一个 Cargo workspace,包含三个 crate:
crates/gateway-openai:网关服务(HTTP,OpenAI Responses API 兼容 + MCP tool loop)crates/docs-kb-mcp-rs:本地 docs KB MCP server(stdio)crates/kb-indexer-rs:索引器(把 docs/PDF 等生成索引目录)
这是一个有三个板条箱的Cargo工作区:
crates/gateway-openai:网关服务器(HTTP、OpenAI响应兼容性+MCP工具循环)crates/docs-kb-mcp-rs:本地文档KB MCP服务器(stdio)crates/kb-indexer-rs:索引生成器(构建磁盘上的索引目录)
______________________________________________________________________
Build / 编译
Build release binaries / 构建 release 二进制
cargo build --release二进制文件通常位于:
target/release/gateway-openaitarget/release/docs-kb-mcp-rstarget/release/kb-indexer-rs
______________________________________________________________________
Configuration / 配置
1) 复制 .env.example / 复制 .env.example
cp .env.example .env2) Key environment variables / 关键环境变量
完整示例请看 .env.example。这里只强调最关键的几项。OPENAI_API_KEY(必填 / required)INDEX_DIR(必填 / required)DOCS_MCP_COMMAND(必填 / required)BIND_ADDR(建议本地配合 HTTPS 反代时用127.0.0.1:8000/建议使用本地HTTPS代理:127.0.0.1:8000)
______________________________________________________________________
HTTPS用于大AGI(凯迪拉克+mkcert)/大AGI使用 HTTPS(Caddy+mkcert)
本章节放在 Run / 运行 前面,方便你按顺序配置。\ 本节放在前面 跑 因此,您可以按顺序执行设置步骤。
Why HTTPS is recommended / 为什么推荐 HTTPS
当你在浏览器里使用 big-agi.com(HTTPS 页面)去访问本地网关时,现代浏览器可能会触发以下限制:
- 从 HTTPS 页面访问本地
http://127.0.0.1:8000可能出现混合内容/安全上下文限制 - Private Network Access(PNA)相关的预检与限制更严格
最稳妥的做法:网关仍然跑 HTTP(绑定 BIND_ADDR=127.0.0.1:8000),再用 Caddy 在本机提供 HTTPS 入口,并用 mkcert 生成并信任自签证书。
使用时 big-agi.com (HTTPS页面)调用您的本地网关,现代浏览器可能会强制执行:
- 调用时混合内容/安全上下文限制
http://127.0.0.1:8000来自HTTPS页面 - 更严格的专用网络接入(PNA)飞行前规则
最可靠的方法:保持网关打开 超文本传输协议 (绑定 BIND_ADDR=127.0.0.1:8000),然后使用 卡迪 揭露当地人 超文本传输安全协议 端点,带 证书制作工具 提供可信的本地证书。
______________________________________________________________________
步骤0:确保 .env matches the proxy plan / 第 0 步:确认 .env 配置与反代一致
确保你的 .env 包含(与 .env.example 建议):
BIND_ADDR=127.0.0.1:8000
CORS_ALLOW_ORIGINS=https://app.big-agi.com中文:CORS origin 需要允许 Big-AGI 的网页来源。\ 中文:CORS必须允许Big AGI的网络来源。
______________________________________________________________________
Step 1: Install mkcert + Caddy / 第 1 步:安装 mkcert + Caddy(macOS 示例)
brew install mkcert caddy(可选)如果您使用Firefox并希望它信任mkcert-certs:
brew install nss______________________________________________________________________
Step 2: Install the local CA (trust it) / 第 2 步:安装并信任本地 CA
mkcert -install- 中文:这一步会把 mkcert 的本地 CA 安装到 macOS Keychain 并设为受信任。
- 中文:这会将mkcert的本地CA安装到macOS Keychain中,并将其标记为受信任。
______________________________________________________________________
Step 3: Generate certificates / 第 3 步:生成证书
从您的项目根目录:
mkdir -p certs
cd certs
mkcert localhost 127.0.0.1 ::1
cd ..您应该得到类似于以下内容的文件:
certs/localhost+2.pemcerts/localhost+2-key.pem
提醒 / Note mkcert 的输出文件名可能随 host 数量变化;如果你想固定文件名,可使用-cert-file/-key-file参数自行指定。
______________________________________________________________________
Step 4: Caddy reverse proxy / 第 4 步:Caddy 反代配置
创建一个 Caddyfile 在repo根目录:
# Listen on https://localhost:8787
https://localhost:8787 {
tls certs/localhost+2.pem certs/localhost+2-key.pem
# Reverse proxy to the Rust gateway
reverse_proxy 127.0.0.1:8000
}奔跑球童:
caddy run --config Caddyfile验证(不应要求 -k 一旦信任):
curl -s https://localhost:8787/health______________________________________________________________________
Security note / 安全说明
- 中文:mkcert 只适合本机/内网开发环境,不建议用于公网生产环境。
- 中文:mkcert适用于本地/dev环境,不适用于公共生产部署。
______________________________________________________________________
Run / 运行
1) Build (if not built) / 1) 编译(若未编译)
cargo build --release2) 准备 .env / 2) 准备 .env
cp .env.example .env编辑 .env 并且至少设置:
OPENAI_API_KEYINDEX_DIRDOCS_MCP_COMMAND
3) Start the gateway / 3) 启动网关
./target/release/gateway-openai然后,您可以访问:
GET /healthGET /v1/modelsPOST /v1/responses
如果您如上所述启用了Caddy HTTPS代理,则您的浏览器友好端点为:
https://localhost:8787(通过Caddy)- 网关保持打开状态
http://127.0.0.1:8000(内部)
______________________________________________________________________
使用大AGI(big-agi.com) / 与 Big-AGI 对接(big-agi.com)
在 Big-AGI 的 provider 设置里选择 OpenAI(或兼容 OpenAI 的 provider),然后:
- Base URL:建议填
https://localhost:8787/v1(如果你启用了 Caddy HTTPS 反代) - API Key:可随意填写(网关默认不校验入站 key;上游访问使用
OPENAI_API_KEY) - Model:选择
UPSTREAM_MODEL或UPSTREAM_MODELS中的一个
在Big AGI中,选择一个OpenAI(或与OpenAI兼容的)提供者并设置:
- 基本URL:推荐
https://localhost:8787/v1(如果使用Caddy HTTPS代理) - API密钥:任意值(网关默认不验证入站密钥;上游使用
OPENAI_API_KEY) - 型号:从中选择一个
UPSTREAM_MODEL/UPSTREAM_MODELS
______________________________________________________________________
API Behavior Notes / API 行为说明
Supported endpoints / 支持的端点
POST /v1/responsesGET /v1/modelsGET /health
流模式(自动/代理/兼容)
您可以通过两种方式进行设置:
- env默认值:
GATEWAY_STREAM_MODE=auto|compat|proxy - 按请求覆盖:包括
gateway_stream_mode在JSON正文中
例子:
{
"model": "gpt-5.2",
"input": "hello",
"stream": true,
"gateway_stream_mode": "compat"
}- 代理模式:
- 不注入MCP工具 - 执行请求分配列表+输入净化+可选的web_search限制+强制 store=true - 流式传输:按原样传递SSE事件
- compat模式:
- 注入MCP功能工具 - 运行工具循环(提取 function_call → 调用MCP工具→ send function_call_output 逆流而上) - 流媒体:缓冲兼容性事件序列(+keepalive)
______________________________________________________________________
Database MCP safety / 数据库 MCP 安全建议(泛化)
即使网关做了工具 allowlist、SQL 过滤等限制,仍强烈建议:
- 数据库账号使用只读权限
- 网关与 DB MCP 部署在受控网络(内网/防火墙)
- 如果需要暴露给更多客户端,务必在 Caddy/Nginx 侧做鉴权(Basic Auth / Token / IP allowlist)
即使使用满配列表和SQL过滤,强烈建议:
- 使用 只读 数据库凭据
- 在受控网络(局域网/防火墙)中部署网关+DB MCP
- 如果暴露,则在Caddy/Nginx上强制执行身份验证(基本身份验证/令牌/IP分配列表)
