๐ ไธบMCP็ๆ็ณป็ปๆไพ้ซๆง่ฝๅ่ฎฎ่ฝฌๆขใๆๅก็ฎก็ใ้ดๆๅๆต้ๆฒป็็ๅฎๆด่งฃๅณๆนๆก
MCP GatewayๆฏไธไธชๅบไบSpring Boot 3.x็ไผไธ็บงAPI็ฝๅ ณ็ณป็ป๏ผไธ้จไธบModel Context Protocol (MCP)ๆๅกๆไพ็ปไธ็ๆฅๅ ฅใ็ฎก็ๅไปฃ็ๅ่ฝใ็ณป็ป้็จๆจกๅๅๆถๆ่ฎพ่ฎก๏ผ็กฎไฟ้ซๅฏๆฉๅฑๆงใๅฏ็ปดๆคๆงๅๅฎๅ จๆงใ
- ๐ ็ปไธ้ดๆ: ๆฏๆๅฏ้ฅ่ฎค่ฏใIP็ฝๅๅใ่ทฏๅพ็ฝๅๅ
- ๐ ้ซๆง่ฝไปฃ็: ๅบไบWebFluxๅๅบๅผๆถๆ๏ผๆฏๆๅผๆญฅ่ฏทๆฑๅค็
- ๐ ๆๅกๆฒป็: ๆๅกๅ็ฐใๅฅๅบทๆฃๆฅใ็ป่ฎก็ๆง
- ๐ก๏ธ ๆต้ๆงๅถ: ๅค็ปดๅบฆ้ๆตใ็ๆญ้็บง
- ๐พ ๆฐๆฎๆไน ๅ: MySQLๅญๅจ้ ็ฝฎๆฐๆฎ๏ผRedis็ผๅญ็ญ็นๆฐๆฎ
- ๐ ๅฎๆถ็ๆง: ๆๅก่ฐ็จ็ป่ฎกใๆง่ฝ็ๆง
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Client Applications โ
โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ HTTP/HTTPS Requests
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MCP Gateway โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Auth โ โ Proxy โ โ Management โ โ
โ โ Module โ โ Module โ โ Module โ โ
โ โ โ โ โ โ โ โ
โ โ - ๅฏ้ฅ่ฎค่ฏ โ โ - ๅ่ฎฎ่ฝฌๆข โ โ - ๆๅก็ฎก็ โ โ
โ โ - IP็ฝๅๅ โ โ - ่ฏทๆฑไปฃ็ โ โ - ้
็ฝฎ็ๆ โ โ
โ โ - ่ฐ็จ่ฎฐๅฝ โ โ - ๆต้็ป่ฎก โ โ - ๅฏ้ฅ็ฎก็ โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MCP Protocol
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Backend MCP Services โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Weather โ โ HR โ โ File โ โ
โ โ Service โ โ Service โ โ Service โ โ
โ โ :8081 โ โ :8082 โ โ :8083 โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- ๅ็ซฏๆกๆถ: Spring Boot 3.5.4, Spring WebFlux
- ๆฐๆฎๅบ: MySQL 8.0+ (ไธปๅญๅจ), Redis 6.0+ (็ผๅญ)
- ORMๆกๆถ: MyBatis
- ๆๅปบๅทฅๅ ท: Maven 3.8+
- JDK็ๆฌ: Java 17+
- ๅฎนๅจๅ: Docker (ๅฏ้)
mcp-gateway/
โโโ auth/ # ้ดๆๆจกๅ
โ โโโ src/main/java/
โ โ โโโ org/jdt/mcp/gateway/auth/
โ โ โโโ config/ # ่ฎค่ฏ้
็ฝฎ็ฑป
โ โ โโโ filter/ # ่ฎค่ฏ่ฟๆปคๅจ
โ โ โโโ service/ # ่ฎค่ฏๆๅกๅฎ็ฐ
โ โ โโโ tool/ # ่ฎค่ฏๅทฅๅ
ท็ฑป
โ โโโ pom.xml
โโโ proxy/ # ไปฃ็ๆจกๅ
โ โโโ src/main/java/
โ โ โโโ org/jdt/mcp/gateway/proxy/
โ โ โโโ config/ # ไปฃ็้
็ฝฎ็ฑป
โ โ โโโ ctl/ # RESTๆงๅถๅจ
โ โ โโโ handler/ # ่ฏทๆฑๅค็ๅจ
โ โ โโโ service/ # ไปฃ็ๆๅกๅฎ็ฐ
โ โ โโโ scheduler/ # ๅฎๆถไปปๅก่ฐๅบฆๅจ
โ โโโ pom.xml
โโโ management/ # ็ฎก็ๆจกๅ ๐
โ โโโ src/main/java/
โ โ โโโ org/jdt/mcp/gateway/management/
โ โ โโโ ManagementApp.java # ไธปๅฏๅจ็ฑป
โ โ โโโ config/ # ้
็ฝฎ็ฑป
โ โ โโโ ctl/ # RESTๆงๅถๅจ
โ โ โโโ service/ # ไธๅกๆๅกๅฑ
โ โโโ src/main/resources/
โ โ โโโ application.yml # ็ฎก็ๆจกๅ้
็ฝฎๆไปถ
โ โโโ pom.xml
โโโ core/ # ๆ ธๅฟๅ
ฑไบซๆจกๅ
โ โโโ src/main/java/
โ โ โโโ org/jdt/mcp/gateway/core/
โ โ โโโ entity/ # ๅฎไฝ็ฑป๏ผๆฐๆฎๅบๆ ๅฐ๏ผ
โ โ โโโ dto/ # ๆฐๆฎไผ ่พๅฏน่ฑก
โ โ โโโ tool/ # ้็จๅทฅๅ
ท็ฑป
โ โ โโโ exception/ # ่ชๅฎไนๅผๅธธ็ฑป
โ โโโ pom.xml
โโโ persist/ # ๆฐๆฎๆไน
ๅๆจกๅ
โ โโโ src/main/java/
โ โ โโโ org/jdt/mcp/gateway/
โ โ โโโ mapper/ # MyBatis Mapperๆฅๅฃ
โ โโโ pom.xml
โโโ ddl.sql # ๆฐๆฎๅบๅปบ่กจ่ๆฌ
โโโ pom.xml # ไธปPOMๆไปถ
โโโ README.md # ้กน็ฎ่ฏดๆๆๆกฃ
# ๅๆจกๅๅ
ณ็ณป่ฏดๆ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Frontend/Client โ
โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโ
โ โ โ
โผ โผ โผ
โโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
โ Auth โ โ Proxy โ โ Management โ
โ Module โโโโโบโ Module โโโโโบโ Module โ
โ :8080 โ โ :8080 โ โ :9080 โ
โโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
โ โ โ
โ โโโโโโโโโโผโโโโโโโโโ โ
โ โ โ โ โ
โผ โผ โผ โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Core Module โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ
โ โ Entity โ โ DTO โ โ Tool โ โ
โ โ Classes โ โ Classes โ โ Classes โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Persist Module โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ
โ โ MyBatis โ โ Mapper โ โ Database โ โ
โ โ Config โ โ Interfaces โ โ Scripts โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- ็ซฏๅฃ: 8080๏ผ้ๆๅจProxyๆจกๅไธญ๏ผ
- ๅ่ฝ: ๆไพ็ปไธ็่ฎค่ฏๅ้ดๆๆๅก
- ็นๆง: ๅฏ้ฅ่ฎค่ฏใIP็ฝๅๅใ่ทฏๅพ็ฝๅๅใ่ฐ็จๆฅๅฟ่ฎฐๅฝ
- ็ซฏๅฃ: 8080
- ๅ่ฝ: ้ซๆง่ฝ็MCPๅ่ฎฎไปฃ็่ฝฌๅ
- ็นๆง: ๅบไบWebFluxๅๅบๅผๆถๆใ่ฏทๆฑ็ป่ฎกใๆต้็ๆง
- ็ซฏๅฃ: 9080
- ๅ่ฝ: MCPๆๅกๅ็จๆทๆ้็็ฎก็็้ข
- ๆ ธๅฟAPI:
- MCPๆๅก็ฎก็๏ผๆๅกๆณจๅใๆดๆฐใ็ถๆ็ฎก็
- ่ฎค่ฏๅฏ้ฅ็ฎก็๏ผๅฏ้ฅ็ณ่ฏทใๆค้ใ็ปญๆ
- ้ ็ฝฎ็ๆ๏ผSpring AI MCP Client้ ็ฝฎๆไปถ็ๆ
- ๅ่ฝ: ๆไพๅ ฑไบซ็ๅฎไฝ็ฑปใDTOๅๅทฅๅ ท็ฑป
- ๅ
ๅซ:
- Entity: ๆฐๆฎๅบๅฎไฝๆ ๅฐ็ฑป
- DTO: API่ฏทๆฑ/ๅๅบๅฏน่ฑก
- Tool: ้็จๅทฅๅ ท็ฑป๏ผๅฆๅฏ้ฅ็ๆๅจ๏ผ
- ๅ่ฝ: ๆฐๆฎๆไน ๅๅฑๆฝ่ฑก
- ๆๆฏ: MyBatis + MySQL + Redis
- ๅ ๅซ: Mapperๆฅๅฃใๆฐๆฎๅบ่ฟๆฅ้ ็ฝฎ
- JDK 17+
- Maven 3.8+
- MySQL 8.0+
- Redis 6.0+
git clone <repository-url>
cd mcp-gateway
# ๅๅปบๆฐๆฎๅบ
mysql -u root -p -e "CREATE DATABASE mcp_gateway CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# ๅฏผๅ
ฅ่กจ็ปๆ
mysql -u root -p mcp_gateway < ddl.sql
ไฟฎๆนๅๆจกๅ็application.yml
้
็ฝฎ๏ผ
spring:
datasource:
url: jdbc:mysql://localhost:3306/mcp_gateway
username: your_username
password: your_password
data:
redis:
host: localhost
port: 6379
# ็ผ่ฏๆดไธช้กน็ฎ
mvn clean compile
# ๆๅ
mvn clean package
# ๅฏๅจไปฃ็ๆจกๅ
java -jar proxy/target/proxy-0.0.1-SNAPSHOT.jar
# ๅฏๅจ็ฎก็ๆจกๅ
java -jar management/target/management-0.0.1-SNAPSHOT.jar
# ๆฃๆฅไปฃ็ๆๅก
curl http://localhost:8080/mcp/health
# ๆฃๆฅ็ฎก็ๆๅก
curl http://localhost:9080/api/management/services
curl -X POST http://localhost:9080/api/management/services \
-H "Content-Type: application/json" \
-d '{
"serviceId": "weather-service",
"name": "ๅคฉๆฐๆฅ่ฏขๆๅก",
"description": "ๆไพๅ
จ็ๅคฉๆฐๆฅ่ฏขๅ่ฝ",
"endpoint": "http://localhost:8081",
"status": "ACTIVE",
"maxQps": 1000
}'
curl -X POST http://localhost:9080/api/management/auth-keys/apply \
-H "Content-Type: application/json" \
-d '{
"userId": "user001",
"serviceId": "weather-service",
"remarks": "ๅผๅๆต่ฏไฝฟ็จ"
}'
curl -X POST http://localhost:9080/api/management/config/yaml \
-H "Content-Type: application/json" \
-d '{
"userId": "user001",
"serviceIds": ["weather-service"],
"baseUrl": "http://localhost:8080"
}'
# ไฝฟ็จ็ๆ็ๅฏ้ฅ่ฎฟ้ฎๆๅก
curl "http://localhost:8080/mcp/weather-service/api/weather?city=Beijing&key=YOUR_AUTH_KEY"
jdt:
mcp:
auth:
enabled: true
authType: db # ๆฏๆ: db, staticKey
validKeys:
- "admin-key-jdt"
whitelist:
- "/health"
- "/actuator/**"
enableIpWhitelist: false
allowedIps:
- "127.0.0.1"
- "::1"
jdt:
mcp:
proxy:
timeout: 300s
maxInMemorySize: 262144 # 256KB
connectTimeout: 5s
readTimeout: 30s
enableStatistics: true
enableRequestLogging: true
# ไปฃ็ๆๅกๅฅๅบทๆฃๆฅ
curl http://localhost:8080/mcp/health
# ็ฎก็ๆๅกๅฅๅบทๆฃๆฅ
curl http://localhost:9080/actuator/health
# ๆฅ็ๆๅกๅฎๆถ็ป่ฎก
curl http://localhost:8080/mcp/stats/weather-service/realtime
# ๆฅ็ๆๅกๅๅฒ็ป่ฎก
curl http://localhost:8080/mcp/stats/weather-service
logging:
level:
org.jdt.mcp.gateway: INFO
file:
name: logs/gateway.log
FROM openjdk:17-jdk-slim
COPY proxy/target/proxy-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]
-
ๆฐๆฎๅบ่ฟๆฅๆฑ ่ฐไผ
spring: datasource: hikari: maximum-pool-size: 50 minimum-idle: 10
-
JVMๅๆฐ่ฐไผ
java -Xms2g -Xmx4g -XX:+UseG1GC -jar app.jar
-
Redis้ซๅฏ็จ
spring: data: redis: cluster: nodes: - redis1:6379 - redis2:6379 - redis3:6379
่ฏฆ็ป็APIๆๆกฃ่ฏทๅ่ๅๆจกๅ็README๏ผ
-
่ฎค่ฏๅคฑ่ดฅ
- ๆฃๆฅ่ฎค่ฏๅฏ้ฅๆฏๅฆๆญฃ็กฎ
- ็กฎ่ฎคๆๅกๆฏๅฆๅคไบๆฟๆดป็ถๆ
- ้ช่ฏIP็ฝๅๅ้ ็ฝฎ
-
ไปฃ็่ถ ๆถ
- ๆฃๆฅๅ็ซฏๆๅกๆฏๅฆๆญฃๅธธ
- ่ฐๆดไปฃ็่ถ ๆถ้ ็ฝฎ
- ็กฎ่ฎค็ฝ็ป่ฟ้ๆง
-
ๆฐๆฎๅบ่ฟๆฅ้ฎ้ข
- ๆฃๆฅ่ฟๆฅๆฑ ้ ็ฝฎ
- ้ช่ฏๆฐๆฎๅบๆ้
- ็กฎ่ฎค้ฒ็ซๅข่ฎพ็ฝฎ
- ็ฎๅmanagementๅproxy็น็็ไปฃ็
- ๆดๅฎๅ็ๆๆ ้้ๅ่ฝ
- ๅขๅ ๆต้ๆงๅถๆจกๅ
- Fork ้กน็ฎ
- ๅๅปบๅ่ฝๅๆฏ (
git checkout -b feature/AmazingFeature
) - ๆไบคๆดๆน (
git commit -m 'Add some AmazingFeature'
) - ๆจ้ๅฐๅๆฏ (
git push origin feature/AmazingFeature
) - ๆ Pull Request ๐
- v0.0.1-SNAPSHOT: ๅๅง็ๆฌ๏ผๅ ๅซๅบ็ก็่ฎค่ฏใไปฃ็ๅ็ฎก็ๅ่ฝ
ๅฆๆไฝ ๅจไฝฟ็จ่ฟ็จไธญ้ๅฐ้ฎ้ข๏ผๅฏไปฅ้่ฟไปฅไธๆนๅผ่ทๅๆฏๆ๏ผ
- ๆไบค [GitHub Issue]
- ๅ้้ฎไปถ่ณ: 876989946@qq.com
Made with โค๏ธ by JDT Team