协议转换路由服务

MCPRouter是一款现代MCP协议路由器,提供stdio到HTTP的协议转换、细粒度权限管理和高性能路由聚合功能,适用于企业级应用集成。

  • by daixijun
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 daixijun/mcprouter

使用说明

MCP路由器-MCP路由器

🚀 现代MCP协议路由器 -通过企业级权限管理和智能路由无缝连接stdio和HTTP

✨ 核心亮点

🔄 MCP协议转换

  • stdio到HTTP转换:通过HTTP接口公开标准MCP服务器
  • 多传输协议支持:stdio和HTTP传输方法
  • 透明协议适配:无需对现有MCP服务器进行修改

🔐 细粒度权限管理

  • 基于令牌的访问控制:每个令牌的独立权限配置
  • 工具级授权:对单个工具访问权限进行精细控制
  • 安全令牌验证:持续时间比较,增强安全性

⚡ 高性能路由聚合

  • 智能请求路由:自动分发到相应的MCP服务器
  • 异步并发处理:支持高并发请求
  • 自动故障恢复:服务异常时自动重新连接
  • 实时监控仪表板:可视化系统状态显示

🖥️ 界面预览

实时监控仪表板

实时系统状态、活动连接监控和性能指标显示

服务器管理界面

MCP服务器生命周期管理、批处理操作和状态监控

令牌权限管理

创建和管理令牌,配置细粒度权限,查看使用统计数据

系统设置页面

网络配置、主题设置和系统首选项

🚀 特性

🔄 协议转换和路由

  • 多传输协议支持:stdio和HTTP
  • 协议转换:MCP stdio到HTTP接口
  • 智能请求路由:自动识别并路由到相应的服务器
  • 聚合服务:将多个MCP服务器合并到一个统一的接口中

🔐 权限管理系统

  • 许可证管理:令牌的动态创建、删除和更新
  • 工具级授权:对单个工具访问权限进行精细控制
  • 访问控制:
    • allowed_tools:精确控制可以访问哪些工具
    • allowed_resources:控制资源访问权限
    • allowed_prompts:控制提示模板访问权限
  • 安全功能:
    • 恒定时间令牌比较以增强安全性
    • 详细的审计日志记录
    • 向后兼容性(默认情况下禁用身份验证)

🎯 服务管理与监控

  • 生命周期管理:启动、停止、重新启动和配置MCP服务器
  • 自动发现:自动识别服务器提供的工具、资源和提示
  • 健康检查:实时监控服务状态
  • 性能指标:请求统计、响应时间、错误率

🛡️ 系统集成

  • 本地系统托盘:快速访问菜单
  • 自动启动:后台服务支持
  • 多主题:自动/亮/暗主题支持
  • 平台优化:macOS、Windows、Linux特定的优化
  • 灵活的配置:基于JSON的配置,支持导入/导出
  • 网络管理:本地IP地址发现和网络接口配置

🚀 快速开始

  1. 安装依赖项: pnpm install
  2. 发展模式: pnpm tauri dev
  3. 构建生产: pnpm tauri build

启动后,通过直观的web界面配置MCP服务器并管理权限。

推荐的 IDE 设置

建筑

后端(Rust/Tauri)

src-tauri/src/
├── main.rs              # Application entry point
├── lib.rs               # Tauri command registry and global state
├── commands/            # Tauri command handlers
│   ├── mod.rs
│   ├── config.rs        # Configuration management
│   ├── dashboard.rs     # Dashboard statistics
│   ├── mcp_server.rs    # MCP server operations
│   ├── settings.rs      # System settings
│   ├── token_management.rs  # Token management commands
│   └── tool.rs          # Tool management
├── config/              # Configuration layer
│   ├── mod.rs
│   ├── file_manager.rs  # Config file I/O
│   └── mcp_server_config.rs  # Server configuration models
├── mcp_manager.rs       # MCP server lifecycle management
├── mcp_client.rs        # MCP client connection handling
├── aggregator.rs        # Request routing and aggregation
├── token_manager.rs     # Token management system
├── session_manager.rs   # Session-level permission caching
├── auth_context.rs      # Authentication context and permission validation
├── connection_mapper.rs # HTTP to MCP connection mapping
├── types.rs             # Shared type definitions
└── error.rs             # Error handling

前端(React/TypeScript)

src/
├── components/          # Reusable UI components
│   ├── ErrorBoundary.tsx      # Error boundary wrapper
│   ├── Layout.tsx             # Main layout wrapper
│   ├── ServiceDetail.tsx      # Server detail view
│   ├── ToolManager.tsx        # Tool management interface
│   └── AboutModal.tsx         # About dialog
├── pages/               # Main application pages
│   ├── Dashboard.tsx          # System dashboard and statistics
│   ├── McpServerManager.tsx   # MCP server management
│   ├── Settings.tsx           # Application settings
│   └── TokenManagement.tsx    # Token management
├── services/            # API service layer
│   ├── api.ts                  # Tauri API client
│   ├── config-service.ts       # Configuration management
│   ├── dashboard-service.ts    # Dashboard statistics
│   ├── mcp-server-service.ts   # Server management
│   └── tool-service.ts         # Tool operations
├── types/               # TypeScript type definitions
│   └── index.ts
├── theme/               # Theme configuration
│   └── antd-config.ts
└── vite-env.d.ts        # Vite environment types

核心功能

  • 仪表板分析:实时系统统计、活动连接和健康监测
  • 服务器管理:全生命周期管理(创建、启动、停止、重新启动、配置)
  • 探索与发现:从连接的服务器自动发现工具、资源和提示
  • 配置管理:灵活的基于JSON的配置,支持导入/导出
  • 系统集成:本机系统托盘、自动启动和多主题支持
  • 网络管理:本地IP地址发现和网络接口配置
  • 传输协议:支持stdio、服务器发送事件(SSE)和HTTP传输

配置架构

MCPRouter使用灵活的基于JSON的配置系统,存储在 ~/.mcprouter/config.json:

  • 服务器配置:主机、端口、超时、连接限制和可选身份验证
  • MCP服务器:已配置的服务器列表,包括传输类型、命令和环境
  • 设置:主题、自动启动、系统托盘和注册表首选项
  • 日志记录:可配置的日志级别和文件输出

验证配置

为聚合器端点启用承载令牌身份验证:

{
  "server": {
    "host": "127.0.0.1",
    "port": 8000,
    "max_connections": 100,
    "timeout_seconds": 30,
    "auth": true,
    "bearer_token": "your-secret-token-here"
  }
}

安全最佳实践:

  • 使用加密随机令牌(建议使用32+个字符)
  • 将文件权限设置为 chmod 600 ~/.mcprouter/config.json 保护令牌
  • 使用HTTPS或仅绑定到本地主机(127.0.0.1)启用身份验证时
  • 令牌区分大小写,并使用恒定时间比较进行验证
  • 为了向后兼容,默认情况下禁用身份验证

客户端使用情况:

# Without authentication (default)
curl http://127.0.0.1:8000/mcp

# With authentication enabled
curl -H "Authorization: Bearer your-secret-token-here" \
  http://127.0.0.1:8000/mcp

令牌权限管理

MCPRouter支持对令牌进行细粒度的权限控制,允许您限制对特定工具、资源和提示的访问:

{
  "tokens": [
    {
      "name": "read-only-token",
      "token": "ro-secret-token-here",
      "allowed_tools": ["server/list_tools", "server/read_resource"],
      "allowed_resources": ["server/data/*"],
      "allowed_prompts": ["server/summary"]
    },
    {
      "name": "admin-token",
      "token": "admin-secret-token-here",
      "allowed_tools": ["*"],
      "allowed_resources": ["*"],
      "allowed_prompts": ["*"]
    }
  ]
}

权限模式:

  • * -允许访问所有工具/资源/提示
  • server/* -允许访问下的所有工具 server 命名空间
  • server/tool -仅允许访问特定工具
  • server/path/* -允许访问特定路径下的所有资源

权限验证:

  • 在HTTP和MCP协议层验证权限
  • 会话级缓存提供高性能验证
  • 用于安全监控的详细审计日志记录
  • 自动回退以拒绝未指定的权限

发展

先决条件

设置

# Clone the repository
git clone https://github.com/your-org/mcprouter.git
cd mcprouter

# Install dependencies
pnpm install

# Development mode (runs both Rust and web dev server)
pnpm tauri dev

# Build for production
pnpm tauri build

# Preview production build
pnpm tauri build && pnpm tauri build --debug

可用脚本

# Start development server
pnpm dev                    # Start Vite dev server only
pnpm tauri dev             # Start full Tauri app with dev server

# Build commands
pnpm build                 # TypeScript build + Vite build
pnpm tauri build           # Full production build (creates installers)

# Utility commands
pnpm preview               # Preview Vite build

项目结构

该项目采用模块化架构:

  • src-tauri/:使用Tauri框架的Rust后端
  • src/:React+TypeScript前端
  • src/components/:可重复使用的UI组件
  • src/pages/:主要应用程序视图
  • src/services/:用于后端通信的API服务层
  • src/types/:TypeScript类型定义

调试

# Enable debug logging
# Edit src-tauri/tauri.conf.json and set:
# "logging": { "level": "debug" }

# View logs (macOS/Linux)
tail -f ~/.local/share/mcprouter/logs/mcprouter.log

# View logs (Windows)
type %LOCALAPPDATA%\mcprouter\logs\mcprouter.log

贡献

  1. 分叉存储库
  2. 创建要素分支: git checkout -b feature-name
  3. 进行更改并彻底测试
  4. 以明确的信息承诺: git commit -m "feat: add new feature"
  5. 推叉并提交拉叉请求

技术栈

  • 后端:铁锈1.70+,牛磺酸2.x
  • 前端:React 19,TypeScript 5,Vite 7
  • 用户界面:蚂蚁设计5,顺风CSS 3
  • 图标:Lucide React
  • 平台:macOS、Windows、Linux