MCP统一接口服务

一个为多个MCP(机器对话协议)服务器提供统一管理和交互接口的服务,具备强大的认证和访问控制功能。

  • by DmitryBe
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 dmitrybe/mcp-facade

使用说明

MCP立面

一个功能强大的外观服务,为管理和与多个MCP(机器对话协议)服务器交互提供统一的接口。它充当代理与各种MCP服务器通信的单一入口点,同时提供强大的身份验证和访问控制。

目录

特性

  • 统一接入点:多个MCP服务器的单一接口
  • 服务器管理:注册、更新和管理多个MCP服务器
  • 工具管理:发现所有注册服务器上的工具并与之交互
  • 认证:基于JWT的身份验证,具有细粒度的访问控制
  • 访问规则:工具级别的可配置访问规则
  • 健康监测:内置健康检查端点
  • 数据库后端:PostgreSQL用于存储服务器配置和访问规则

在本地运行它

运行MCP服务器(示例)

注意:如果您有mcp服务器,可以跳过此步骤。

cd mcp-facade/mcp-servers

uv sync
source .venv/bin/activate
uv pip install -e .

# start mcp servers
uv run src/mcp_servers/main.py

运行MCP外观

# Clone the repository
git clone https://github.com/yourusername/mcp-facade.git
cd mcp-facade/mcp-facade

# Install dependencies
pnpm i

# Set up environment variables
cp .env.example .env
# Edit .env with your configuration

# Start the service
pnpm dev

添加配置

# add echo 
curl -X POST http://localhost:3001/api/mcp/servers \
  -H "Content-Type: application/json" \
  -d '{
    "name": "echo",
    "url": "http://127.0.0.1:3003/echo/mcp"
  }'

# add math
curl -X POST http://localhost:3001/api/mcp/servers \
  -H "Content-Type: application/json" \
  -d '{
    "name": "math",
    "url": "http://127.0.0.1:3003/math/mcp"
  }'

与一起使用 oap-langgraph-tools-agent

# clone fork (with disabled auth)
git clone git@github.com:DmitryBe/oap-langgraph-tools-agent.git
cd oap-langgraph-tools-agent

# install deps 
uv sync
source .venv/bin/activate

# run langfraph server locally
langgraph dev

# open url
open https://smith.langchain.com/studio/?baseUrl=http://127.0.0.1:2024

# create assistant with configuration
MCPConfig
    url: http://localhost:3000/api
    tools: echo, add, subtract, multiply, divide

# start a thread by asking somehting like: compute 2 * 5 - 3

API文档

服务器管理

通过以下端点管理您的MCP服务器:

列出所有服务器

curl http://localhost:3001/api/mcp/servers | jq .

按名称获取服务器

curl http://localhost:3001/api/mcp/servers/echo | jq .

创建服务器

curl -X POST http://localhost:3001/api/mcp/servers \
  -H "Content-Type: application/json" \
  -d '{
    "name": "echo",
    "url": "http://127.0.0.1:3003/echo/mcp"
  }'

更新服务器

curl -X PUT http://localhost:3001/api/mcp/servers/echo \
  -H "Content-Type: application/json" \
  -d '{
    "url": "http://127.0.0.1:3003/echo/mcp"
  }'

删除服务器

curl -X DELETE http://localhost:3001/api/mcp/servers/echo

工具管理

列出可用工具

curl http://localhost:3000/api/mcp/tools | jq .

调用工具

curl -N -X POST http://localhost:3000/api/mcp \
  -H "Accept: application/json, text/event-stream" \
  -H "Connection: keep-alive" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "tools/call",
    "params": {
      "name": "echo",
      "arguments": {
        "message": "Hello, world!"
      }
    }
  }'

访问控制

该服务支持工具级别的细粒度访问控制。可以使用不同的规则类型配置访问规则:

  • WILDCARD:允许所有人访问
  • SCOPE:需要特定的OAuth作用域
  • USER_ID:仅限于特定用户ID

列出所有访问规则

curl http://localhost:3001/api/access-rules | jq .

获取工具规则

curl http://localhost:3001/api/access-rules/by-tool/echo | jq .

创建访问规则

# Allow everyone
curl -X POST http://localhost:3001/api/access-rules/by-tool/echo \
  -H "Content-Type: application/json" \
  -d '{"ruleType": "WILDCARD", "value": null}'

# Require specific scope
curl -X POST http://localhost:3001/api/access-rules/by-tool/add \
  -H "Content-Type: application/json" \
  -d '{"ruleType": "SCOPE", "value": "openid"}'

更新访问规则

curl -X PUT http://localhost:3001/api/access-rules/2 \
  -H "Content-Type: application/json" \
  -d '{"ruleType": "USER_ID", "value": "1,2,3"}'

删除访问规则

curl -X DELETE http://localhost:3001/api/access-rules/3

MCP协议

该服务实现了用于工具交互的MCP协议。以下是一些常见的操作:

初始化连接

curl -N -X POST http://localhost:3001/api/mcp \
  -H "Accept: application/json, text/event-stream" \
  -H "Connection: keep-alive" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-03-26",
      "capabilities": {},
      "clientInfo": {
        "name": "ExampleClient",
        "version": "1.0.0"
      }
    }
  }'

列出工具

curl -N -X POST http://localhost:3000/api/mcp \
  -H "Accept: application/json, text/event-stream" \
  -H "Connection: keep-alive" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list"
  }' | jq -R 'select(startswith("data: ")) | .[6:] | fromjson'

Ping服务器

curl -N -X POST http://localhost:3001/api/mcp \
  -H "Accept: application/json, text/event-stream" \
  -H "Connection: keep-alive" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "ping"
  }' | jq -R 'select(startswith("data: ")) | .[6:] | fromjson'

认证

该服务使用JWT(JSON Web令牌)进行身份验证。将JWT令牌包含在 Authorization 经过身份验证的请求的标头:

curl -H "Authorization: Bearer your.jwt.token" http://localhost:3001/api/mcp/tools

贡献

欢迎投稿!请随时提交拉取请求。