返回市场
访问点

访问点

作者:sxhxliang146 星标更新:2025-10-30

项目介绍

MCP 访问点

MCP 访问点 是一个轻量级协议转换网关工具,旨在在传统 HTTP 服务与 MCP(模型上下文协议)客户端之间建立通信桥梁。它使 MCP 客户端能够直接与现有的 HTTP 服务进行交互,而无需对服务器端接口进行任何修改。

<p align="center"> <a href="./README.md"><img alt="英文版" src="https://img.shields.io/badge/English-4578DA"></a> <a href="./README_CN.md"><img alt="简体中文版" src="https://img.shields.io/badge/简体中文-F40002"></a> <a href="https://deepwiki.com/sxhxliang/mcp-access-point"><img src="https://deepwiki.com/badge.svg" alt="咨询DeepWiki"></a> <a href="https://zread.ai/sxhxliang/mcp-access-point"><img alt="中文文档" src="https://img.shields.io/badge/中文文档-4578DA"></a> </p>

管理仪表板

简介

该项目基于 Pingora 构建——这是一个超高性能的网关代理库,能够支持大规模请求代理服务。Pingora 已被用于构建处理 Cloudflare 平台核心流量的服务,多年来一直以每秒超过 4000 万次请求的速度提供服务。它已成为支持 Cloudflare 平台上大量流量的技术基石。

HTTP 到 MCP

此模式允许像 Cursor Desktop 这样的客户端通过 SSE 与远程 HTTP 服务器通信,即使这些服务器本身不支持 SSE 协议。

  • 示例设置包括两个服务:
    • 服务 1 在本地运行于 127.0.0.1:8090
    • 服务 2 在远程运行于 api.example.com
  • 通过 MCP 访问点,这两个服务可以转换为 MCP 服务,而无需进行任何代码修改。
  • 客户端通过 MCP 协议与 服务 1服务 2 进行通信。MCP 访问点会自动区分 MCP 请求并将其转发到相应的后端服务。
graph LR
   A["Cursor Desktop"] <--> |SSE| B["MCP 访问点"]
   A2["其他桌面"] <--> |可流式传输的 HTTP| B["MCP 访问点"]
   B <--> |http 127.0.0.1:8090| C1["现有 API 服务器"]
   B <--> |https//api.example.com| C2["现有 API 服务器"]
  
   style A2 fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px
   style A fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px
   style B fill:#e6e6af,stroke:#333,color:black,stroke-width:2px
   style C1 fill:#e6ffe6,stroke:#333,color:black,stroke-width:2px
   style C2 fill:#e6ffd6,stroke:#333,color:black,stroke-width:2px

传输类型(规范)

目前支持 SSE可流式传输的 HTTP 协议:

  • ✅ 可流式传输的 HTTP(无状态) 2025-03-26

    • 所有服务:ip:port/mcp
    • 单个服务:ip:port/api/{service_id}/mcp
  • ✅ SSE 2024-11-05

    • 所有服务:ip:port/sse
    • 单个服务:ip:port/api/{service_id}/sse

使用 IP:PORT/sse 对应 SSE 使用 IP:PORT/mcp 对应 可流式传输的 HTTP

支持的 MCP 客户端

核心功能

  • 协议转换:无缝转换 HTTP 和 MCP 协议
  • 零侵入集成:与现有 HTTP 服务完全兼容
  • 客户端增强:使 MCP 客户端能够直接调用标准 HTTP 服务
  • 轻量级代理:最小化架构,高效协议转换
  • 多租户:每个租户独立配置和端点
  • 运行时配置管理:动态配置更新,无需重启服务
  • 管理 API:RESTful API 实现实时配置管理

快速开始

安装

# 从源码安装
git clone https://github.com/sxhxliang/mcp-access-point.git
cd mcp-access-point
cargo run -- -c config.yaml

# 使用 inspector 调试(先启动服务)
npx @modelcontextprotocol/inspector node build/index.js
# 访问 http://127.0.0.1:6274/
# 选择 "SSE" 并输入 0.0.0.0:8080/sse,然后点击连接
# 或者选择 "可流式传输的 HTTP" 并输入 0.0.0.0:8080/mcp

多租户支持

MCP 访问网关支持多租户,每个租户可以配置多个 MCP 服务,可通过以下方式访问:

  • /api/{mcp-service-id}/sse(对于 SSE)
  • /api/{mcp-service-id}/mcp(对于可流式传输的 HTTP)

示例配置:

# config.yaml 示例(支持多个服务)

mcps:
  - id: service-1 # 通过 /api/service-1/sse 或 /api/service-1/mcp 访问
    ... # 服务配置
  - id: service-2 # 通过 /api/service-2/sse 或 /api/service-2/mcp 访问
    ... # 服务配置
  - id: service-3 # 通过 /api/service-3/sse 或 /api/service-3/mcp 访问
    ... # 服务配置

要同时访问所有服务,请使用:

  • 0.0.0.0:8080/mcp(可流式传输的 HTTP)
  • 0.0.0.0:8080/sse(SSE)

配置详情

  1. -c config.yaml
    • -c(或 --config)指定配置文件路径(config.yaml)。
    • 此文件定义了 MCP 访问点将代理和转换的 API。

config.yaml 示例

配置文件支持多租户,允许独立配置上游服务和路由规则,适用于每个 MCP 服务。关键配置项包括:

  1. mcps - MCP 服务列表

    • id: 唯一的服务标识符,用于生成访问路径
    • upstream_id: 关联的上游服务 ID
    • path: OpenAPI 规范文件路径。支持本地文件(例如 config/openapi.json)和远程 HTTP/HTTPS URL(例如 https://petstore.swagger.io/v2/swagger.json)。支持 JSON 和 YAML 格式。
    • routes: 自定义路由配置(可选)
    • upstream: 上游服务特定配置(可选)
  2. upstreams - 上游服务配置

    • id: 上游服务 ID
    • nodes: 后端节点地址及其权重
    • type: 负载均衡算法(roundrobin/random/ip_hash)
    • scheme: 上游协议(http/https)
    • pass_host: HTTP Host 头处理
    • upstream_host: 覆盖 Host 头值

完整配置示例:

# config.yaml 示例(支持多个服务)
mcps:
  - id: service-1 # 唯一标识符,可通过 /api/service-1/sse 或 /api/service-1/mcp 访问
    upstream_id: 1
    path: config/openapi_for_demo_patch1.json # 本地 OpenAPI 规范路径

  - id: service-2 # 唯一标识符
    upstream_id: 2
    path: https://petstore.swagger.io/v2/swagger.json # 远程 OpenAPI 规范

  - id: service-3 
    upstream_id: 3
    routes: # 自定义路由
      - id: 1
        operation_id: get_weather
        uri: /points/{latitude},{longitude}
        method: GET
        meta:
          name: 获取天气
          description: 通过坐标获取天气信息
          inputSchema: # 可选输入验证
            type: object
            required:
              - latitude
              - longitude
            properties:
              latitude:
                type: number
                minimum: -90
                maximum: 90
              longitude:
                type: number
                minimum: -180
                maximum: 180

upstreams: # 必需的上游配置
  - id: 1
    headers: # 发送到上游服务的头部
      X-API-Key: "12345-abcdef"        # API 密钥
      Authorization: "Bearer token123" # Bearer 令牌
      User-Agent: "MyApp/1.0"          # 用户代理
      Accept: "application/json"       # 接受头部
    nodes: # 后端节点(IP 或域名)
      "127.0.0.1:8090": 1 # 格式:地址:权重

  - id: 2 
    nodes:
      "127.0.0.1:8091": 1

  - id: 3 
    nodes:
      "api.weather.gov": 1
    type: roundrobin # 负载均衡算法
    scheme: https # 协议
    pass_host: rewrite # Host 头处理
    upstream_host: api.weather.gov # 覆盖 Host

要运行 MCP 访问网关并使用配置文件:

cargo run -- -c config.yaml

通过 Docker 运行

本地快速启动

# 注意:替换 /path/to/your/config.yaml 为实际路径
docker run -d --name mcp-access-point --rm \
  -p 8080:8080 \
  -e port=8080 \
  -v /path/to/your/config.yaml:/app/config/config.yaml \
  ghcr.io/sxhxliang/mcp-access-point:main

构建 Docker 镜像(可选)

  • 安装 Docker
  • 克隆仓库并构建镜像
# 克隆仓库
git clone https://github.com/sxhxliang/mcp-access-point.git
cd mcp-access-point

# 构建镜像
docker build -t liangshihua/mcp-access-point:latest .
  • 运行 Docker 容器
# 使用环境变量(服务在主机上运行)
# 注意:替换 /path/to/your/config.yaml 为实际路径

docker run -d --name mcp-access-point --rm \
  -p 8080:8080 \
  -e port=8080 \
  -v /path/to/your/config.yaml:/app/config/config.yaml \
  liangshihua/mcp-access-point:latest

环境变量

  • port: MCP 访问点监听端口(默认:8080)

典型用例

  • 渐进式架构迁移:促进从 HTTP 到 MCP 的逐步过渡
  • 混合架构支持:在 MCP 生态系统中重用现有 HTTP 基础设施
  • 协议兼容性:构建同时支持两种协议的混合系统

示例场景: 当基于 MCP 的 AI 客户端需要与遗留 HTTP 微服务交互时,MCP 访问网关充当中间件层,实现无缝协议转换。

感谢 @limcheekin 编写了一篇带有实际示例的文章:https://limcheekin.medium.com/building-your-first-no-code-mcp-server-the-fabric-integration-story-90da58cdbe1f

运行时配置管理

MCP 访问点现在支持通过 RESTful 管理 API 动态配置管理,允许您在不重启服务的情况下更新配置。

管理 API 功能

  • 实时配置更新:即时修改上游、服务、路由和其他资源
  • 依赖验证:更改前自动验证资源依赖关系
  • 批量操作:原子执行多个配置更改
  • 配置验证:应用更改前的干运行模式验证
  • 资源统计:监控和跟踪配置状态

管理 API 配置

在您的 config.yaml 中添加以下内容以启用管理 API:

access_point:
  admin:
    address: "127.0.0.1:8081"  # 管理 API 监听地址
    api_key: "your-api-key"    # 可选的 API 密钥用于身份验证

管理 API 端点

资源管理

  • GET /admin/resources - 获取资源摘要和统计信息
  • GET /admin/resources/{type} - 列出特定类型的全部资源
  • GET /admin/resources/{type}/{id} - 获取特定资源
  • POST /admin/resources/{type}/{id} - 创建新资源
  • PUT /admin/resources/{type}/{id} - 更新现有资源
  • DELETE /admin/resources/{type}/{id} - 删除资源

高级操作

  • POST /admin/validate/{type}/{id} - 验证资源配置
  • POST /admin/batch - 执行批量操作
  • POST /admin/reload/{type} - 重新加载特定资源类型
  • POST /admin/reload/config - 从文件重新加载完整配置(默认为 config.yaml)。可选 JSON 体:{ "config_path": "path/to/config.yaml" }

支持的资源类型

  • upstreams - 后端服务器配置
  • services - 服务定义
  • routes - 路由规则
  • global_rules - 全局插件规则
  • mcp_services - MCP 服务配置
  • ssls - SSL 证书配置

管理 API 示例

创建新的上游

curl -X POST http://localhost:8081/admin/resources/upstreams/my-upstream \
  -H "Content-Type: application/json" \
  -d '{
    "id": "my-upstream",
    "type": "RoundRobin",
    "nodes": ["127.0.0.1:8001", "127.0.0.1:8002"],
    "timeout": {
      "connect": 5,
      "read": 10,
      "send": 10
    }
  }'

创建服务

curl -X POST http://localhost:8081/admin/resources/services/my-service \
  -H "Content-Type: application/json" \
  -d '{
    "id": "my-service",
    "upstream_id": "my-upstream",
    "hosts": ["api.example.com"]
  }'

批量操作

curl -X POST http://localhost:8081/admin/batch \
  -H "Content-Type: application/json" \
  -d '{
    "dry_run": false,
    "operations": [
      {
        "operation_type": "create",
        "resource_type": "upstreams",
        "resource_id": "batch-upstream",
        "data": {
          "id": "batch-upstream",
          "type": "Random",
          "nodes": ["192.168.1.10:8080"]
        }
      },
      {
        "operation_type": "create",
        "resource_type": "services",
        "resource_id": "batch-service",
        "data": {
          "id": "batch-service",
          "upstream_id": "batch-upstream"
        }
      }
    ]
  }'

获取资源统计信息

curl http://localhost:8081/admin/resources

管理仪表板 UI

  • 路由:GET /admin 提供内置仪表板 (static/admin_dashboard.html)。
    1. mcp_services,2) ssls,3) global_rules,4) routes,5) upstreams,6) services
  • 每张卡片显示 count 和从 API 响应中提取的格式化的 last_updated

从文件重新加载配置

# 使用默认 config.yaml
curl -X POST http://localhost:8081/admin/reload/config \
  -H "Content-Type: application/json" \
  -H "x-api-key: your-api-key"

# 或指定不同的配置路径
curl -X POST http://localhost:8081/admin/reload/config \
  -H "Content-Type: application/json" \
  -H "x-api-key: your-api-key" \
  -d '{"config_path": "./config.yaml"}'

测试管理 API

使用提供的测试脚本来验证管理 API 功能:

# 将测试脚本设为可执行
chmod +x test-admin-api.sh

# 运行全面的 API 测试