MCP协议网关

一个可配置的MCP网关,将后端HTTP能力暴露为LLM客户端的MCP工具,实现协议适配和动态工具生成。

  • by Makiato1999
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 Makiato1999/MCP-Gateway

使用说明

MCP网关工作区

概述

此存储库目前以 ai-mcp-gateway 项目:一个可配置的MCP网关,将后端HTTP功能作为LLM客户端的MCP工具公开。

在较高层次上,该项目位于MCP客户和下游服务之间:

MCP Client / LLM
    -> MCP Gateway (this project)
        -> Database-driven gateway/tool/protocol config
        -> Downstream HTTP services

网关在北行侧使用MCP/JSON-RPC,在南行侧使用配置驱动的HTTP调用。 它不仅仅是一个本地硬编码的MCP服务器。其核心价值是协议适配:

  • 基于会话的SSE通信
  • JSON-RPC请求分派
  • 动态的 tools/list 从数据库映射生成
  • tools/call 转换为下游HTTP请求
  • 网关级路由 gatewayId

仓库的规划

存储库当前包含:

  • ai-mcp-gateway/ 主要的多模块Spring Boot项目。
  • NOTE.md 更广泛的学习笔记和实施演练。
  • data/ 开发过程中使用的本地数据相关文件。

ai-mcp-gateway 结构

ai-mcp-gateway 被组织为一个多模块Maven项目:

  • ai-mcp-gateway-api 公共API合同,如 IMcpGatewayService.
  • ai-mcp-gateway-app Spring Boot引导模块和应用程序配置。
  • ai-mcp-gateway-trigger HTTP控制器入口点。
  • ai-mcp-gateway-case 会话编排和基于节点的管道。
  • ai-mcp-gateway-domain MCP协议对象、会话服务和消息处理程序。
  • ai-mcp-gateway-infrastructure DAO、存储库适配器和下游HTTP调用适配器。
  • ai-mcp-gateway-types 共享枚举、常量和异常。

当前核心能力

截至目前的实施,主要项目已经形成了一个有意义的MCP网关框架:

  • initialize 解析MCP初始化请求并返回网关感知服务器元数据。
  • tools/list 根据数据库映射记录动态构建工具模式。
  • tools/call 解析工具调用请求,查找下游协议配置,调用HTTP服务,并将结果包装回MCP响应格式。
  • SSE会话生命周期 支持会话创建、基于接收器的消息推送、心跳和清理。

主要运行时流程

北向运行时流为:

GET /{gatewayId}/mcp/sse
    -> create session
    -> return SSE stream

POST /{gatewayId}/mcp/sse?sessionId=...
    -> accept JSON-RPC message
    -> deserialize outer JSON-RPC envelope
    -> dispatch by method
    -> handle initialize / tools/list / tools/call / resources/list
    -> push JSON-RPC response back through SSE sink

目前最重要的消息处理程序是:

  • InitializeHandler
  • ToolsListHandler
  • ToolsCallHandler

数据库模型

网关由四个主要表支持:

  • mcp_gateway 网关标识和元数据。
  • mcp_gateway_auth 网关级身份验证信息。
  • mcp_protocol_registry 工具注册和下游HTTP协议配置。
  • mcp_protocol_mapping 用于构建工具模式的字段级MCP映射记录。

其中, mcp_protocol_mapping 是结构上最有趣的桌子。它使用以下方式存储一棵扁平的田间树:

  • parent_path
  • mcp_path
  • field_name
  • mcp_type
  • is_required

这允许项目重建嵌套的JSON模式 tools/list.

本地开发

MySQL

  • 通过以下方式启动MySQL ai-mcp-gateway/docs/dev-ops/docker-compose-environment.yml
  • 使用以下方式初始化架构:
    • ai-mcp-gateway/docs/dev-ops/mysql/sql/ai_mcp_gateway.sql
    • 或分支对齐备份SQL ai-mcp-gateway/docs/dev-ops/bak/

应用

  • Spring Boot的入口点是 ai-mcp-gateway/ai-mcp-gateway-app/src/main/java/com/makiatox/ai/Application.java
  • 控制器入口点为 McpGatewayController
  • 会话消息分派发生在 SessionMessageService

测试模式

有两个有用的测试级别:

  • 项目内部测试 当前项目中的测试处理程序、存储库和协议程序集。
  • 端到端MCP测试 使用外部演示客户端和下游演示HTTP服务来验证整个链:
Demo ApiTest
    -> ai-mcp-gateway
        -> downstream demo HTTP server
    -> ai-mcp-gateway
    -> Demo ApiTest

文档指针

  • 根水平 NOTE.md 更广泛的实施说明。
  • ai-mcp-gateway/README.md 详细的分阶段说明以及项目特定摘要。
  • ai-mcp-gateway/docs/dev-ops/ SQL、Docker Compose和应用程序脚本。

项目定位

描述这个项目的最佳方式是:

配置驱动的MCP网关,暴露MCP北向并适应HTTP南向。

从客户端的角度来看,它看起来像一个MCP服务器。 从实现的角度来看,它的行为很像传统的API网关/协议适配器层,MCP作为其外部契约。