图:React Native MCP 代理界面显示聊天屏幕(左)和带有 MCP Bridge 连接状态及 Gemini API 配置的设置屏幕(右)
作者:
Arash Ahmadi, Sarah S. Sharif, 和 Yaser M. Banad*
美国俄克拉荷马大学电气与计算机工程学院
*通讯作者:bana@ou.edu
如果您希望在工作中引用此研究项目,请引用我们的论文:
@article{ahmadi2025mcp,
title={MCP Bridge: 一个轻量级、与大语言模型无关的REST代理,用于模型上下文协议服务器},
author={Ahmadi, Arash and Sharif, Sarah and Banad, Yaser M},
journal={arXiv 预印本 arXiv:2504.08999},
year={2025}
}
MCP Bridge 是一个轻量级、快速且与大语言模型无关的代理,它连接到多个模型上下文协议(MCP)服务器,并通过统一的 REST API 暴露它们的功能。它使任何平台上的客户端都能利用 MCP 功能,而无需执行过程约束。与 Anthropic 的官方 MCP SDK 不同,MCP Bridge 是完全独立的,设计用于与任何大语言模型后端一起工作,这使其具有适应性、模块化和未来性,适用于各种部署。通过可选的风险级别执行,它提供了细粒度的安全控制——从标准执行到确认工作流程和 Docker 隔离——同时保持与标准 MCP 客户端的向后兼容性。
补充这个服务器端基础设施的是两种不同的智能客户端实现:
这两个客户端都通过智能的大语言模型驱动接口实现了与 MCP 工具的自然语言交互,这些接口支持多步推理以处理复杂操作、安全确认工作流程处理以及增强可用性的可配置显示选项。MCP Bridge 的多功能服务器端能力和这些智能客户端界面共同创建了一个强大的生态系统,用于开发复杂的由大语言模型驱动的应用程序。
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ React Native │ │ Python │ │ 其他客户端 │
│ MCP 代理 │ │ Gemini 代理 │ │ │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
│ │ │
│ ▼ │
│ ┌───────────────────────┐ │
└──────────►│ │◄─────────┘
│ REST API │
│ │
└───────────┬───────────┘
│
▼
┌───────────────────────┐
│ │
│ MCP Bridge │
│ │
└───────────┬───────────┘
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ MCP 服务器 │ │ MCP 服务器 │ │ MCP 服务器 │
│ (STDIO) │ │ (STDIO) │ │ (SSE) │
└─────────────┘ └─────────────┘ └─────────────┘
# 安装依赖
npm install express cors morgan uuid
# 启动服务器
node mcp-bridge.js
# 安装依赖
pip install google-generativeai requests rich
# 启动代理
python llm_test.py
# 导航到 React Native 应用目录
cd reactnative-gamini-mcp-agent
# 安装依赖
npm install
# 启动开发服务器
npx expo start
Python MCP-Gemini 代理是一个命令行客户端,它连接到 MCP Bridge 并使用 Google 的 Gemini 大语言模型来处理用户请求并执行 MCP 工具命令。它专为桌面环境和开发人员工作流设计。
Python MCP-Gemini 代理支持几个命令行选项:
使用方法:llm_test.py [-h] [--hide-json] [--json-width JSON_WIDTH] [--mcp-url MCP_URL] [--mcp-port MCP_PORT]
MCP-Gemini 代理,具有可配置设置
选项:
-h, --help 显示此帮助信息并退出
--hide-json 隐藏工具执行的 JSON 结果
--json-width JSON_WIDTH
JSON 输出的最大宽度(默认:100)
--mcp-url MCP_URL 包括协议和端口的 MCP Bridge URL(默认:http://localhost:3000)
--mcp-port MCP_PORT 覆盖 MCP Bridge URL 中的端口(默认:使用 --mcp-url 中的端口)
# 使用默认设置的基本用法
python llm_test.py
# 隐藏 JSON 结果以获得更干净的输出
python llm_test.py --hide-json
# 连接到自定义 MCP Bridge 服务器
python llm_test.py --mcp-url http://192.168.1.100:3000
# 连接到不同端口
python llm_test.py --mcp-port 4000
# 调整 JSON 宽度显示以获得更好的格式
python llm_test.py --json-width 120
React Native MCP 代理是一个现代的跨平台移动应用程序,它通过简洁、用户友好的界面提供对 MCP 工具的直观访问。使用 Expo 和 React Native Paper 构建,它提供了一个暗主题的 Material Design 3 界面,优化了 iOS 和 Android 平台。
该应用会自动发现可用的 MCP 工具,并为复杂的多步操作提供上下文辅助。
MCP Bridge 通过项目根目录中的名为 mcp_config.json 的 JSON 文件进行配置。这是一个基本 MCP 配置示例:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/directory"],
"riskLevel": 2
},
"slack": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-slack"],
"env": {
"SLACK_BOT_TOKEN": "your-slack-token",
"SLACK_TEAM_ID": "your-team-id"
},
"riskLevel": 1
}
}
}
MCP Bridge 提供了一个干净且直观的 REST API 来与连接的服务器进行交互。以下是可用端点的分解:
| 端点 | 方法 | 描述 |
|---|---|---|
/servers | GET | 列出所有连接的 MCP 服务器 |
/servers | POST | 启动一个新的 MCP 服务器 |
/servers/{serverId} | DELETE | 停止并移除一个 MCP 服务器 |
/health | GET | 获取 MCP Bridge 的健康状态 |
/confirmations/{confirmationId} | POST | 确认中等风险级别的请求执行 |
| 端点 | 方法 | 描述 |
|---|---|---|
/servers/{serverId}/tools | GET | 列出特定服务器的所有工具 |
/servers/{serverId}/tools/{toolName} | POST | 执行特定工具 |
/servers/{serverId}/resources | GET | 列出所有资源 |
/servers/{serverId}/resources/{resourceUri} | GET | 检索特定资源内容 |
/servers/{serverId}/prompts | GET | 列出所有提示 |
/servers/{serverId}/prompts/{promptName} | POST | 使用参数执行提示 |
POST /servers/filesystem/tools/list_directory
Content-Type: application/json
{
"path": "."
}
Python MCP-Gemini 代理提供:
React Native MCP 代理提供:
MCP Bridge 实现了一个可选的风险等级系统,提供了对服务器执行行为的控制。风险等级有助于管理在执行潜在敏感的 MCP 服务器操作时的安全性和资源问题。
| 级别 | 名称 | 描述 | 行为 |
|---|---|---|---|
| 1 | 低 | 标准执行 | 直接执行,无需确认 |
| 2 | 中 | 需要确认 | 客户端必须确认执行才能处理 |
| 3 | 高 | 需要 Docker 执行 | 服务器在隔离的 Docker 容器中运行 |
风险等级是可选的,为了向后兼容。您可以在 mcp_config.json 中配置风险等级:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/directory"],
"riskLevel": 2
},
"slack": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-slack"],
"env": {
"SLACK_BOT_TOKEN": "your-slack-token",
"SLACK_TEAM_ID": "your-team-id"
},
"riskLevel": 1
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "your-github-token"
},
"riskLevel": 3,
"docker": {
"image": "node:18",
"volumes": ["/tmp:/tmp"],
"network": "host"
}
}
}
}
Python MCP-Gemini 代理和 React Native 代理都会自动处理此确认流程,在需要时提示用户批准。
✅ UV 包管理器支持:解决了加载基于 UV(Python)的 MCP 服务器的问题。MCP Bridge 现在可以正确初始化并通信使用 UV 包管理器的 Python MCP 服务器,解决了之前与基于 UV 的工具链的兼容性问题。
📱 React Native MCP 代理:添加了一个全面的移动应用程序,具有:
🔧 增强的工具执行:改进了所有客户端的多步推理能力
🛡️ 安全改进:增强了风险等级确认流程,改善用户体验
📊 更好的错误处理:更强大的错误处理和恢复机制
MCP Bridge 在人工智能和开发社区中获得了认可,被收录在学术研究、行业安全分析、专业讨论和技术出版物中。这些认可突显了我们轻量级、与大语言模型无关的代理解决方案的实际价值和现实世界的影响。
<img src="./assets/citations1 (837x224).png" alt="arXiv 研究论文引用" width="650"/>*[被此论文引用:从提示注入