MCP服务器(基于GraphQL的模型上下文协议)
这个项目演示了一个SpringBoot应用程序,它集成了模型上下文协议(MCP)和GraphQL API。它作为管理作者和书籍的后端,将其功能作为“工具”公开,可由大型语言模型(LLM)通过MCP调用。
特性
- GraphQL API:公开GraphQL查询和突变以进行管理
Author和Book实体。 - 模型上下文协议(MCP)集成:允许LLM通过SSE与应用程序的功能(“工具”)进行交互。
- LLM的工具调用:GraphQL操作被公开为使用Spring AI的LLM的可调用工具
@Tool注释。 - 数据库持久性:使用Spring Data JPA与MySQL和Liquibase进行数据库管理。
- 响应式Web(WebFlux):利用Spring WebFlux进行SSE传输,为MCP提供无阻塞、高效的通信通道。
使用的技术
- Spring Boot:主要应用框架。
- spring-boot-starter-webflux:SSE的反应式web堆栈。 - spring-boot-starter-graphql:用于构建GraphQL API。 - spring-boot-starter-data-jpa:用于数据库交互。
- 模型上下文协议(MCP)SDK:
mcp-bom,mcp-spring-webflux - 春季AI:
spring-ai-bom,spring-ai-model,spring-ai-mcp(用于工具调用集成)。 - MySQL:关系数据库。
- 液化碱:数据库架构迁移工具。
- 龙目:减少样板代码(getter、setter、构造函数)。
先决条件
在运行此应用程序之前,请确保已安装以下内容:
- Java 17
- 梅文
- MySQL服务器:MySQL的运行实例。
- 邮递员 或用于测试的任何其他API客户端。
入门指南
按照以下步骤在本地设置和运行应用程序:
1.克隆存储库
git clone https://github.com/anastasiia-peleshok/new-mcp-server.git
cd new-mcp-server2.数据库设置
- 创建MySQL数据库:
为此应用创建新的数据库(例如。, mcp_db).
CREATE DATABASE mcp_server;- 配置应用程序属性:
打开 src/main/resources/application.properties 并配置MySQL数据库连接详细信息。替换 your_username 和 your_password 使用您的MySQL凭据。
# MySQL Database Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/mcp_db
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# JPA Configuration
spring.jpa.hibernate.ddl-auto=none # Liquibase will handle schema
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
# Liquibase Configuration
spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.yaml
# MCP Transport Configuration (choose one: stdio or sse)
# For HTTP/SSE communication (recommended for client interaction)
transport.mode=sse
# For standard input/output communication (e.g., for direct process interaction)
#transport.mode=stdio备注:The transport.mode=sse 属性对于启用MCP通信的SSE端点至关重要。
3.运行应用程序
您可以使用Maven运行应用程序:
mvn spring-boot:run应用程序将于启动 http://localhost:8080.
用法
1.GraphQL端点
应用程序在以下位置公开GraphQL端点 http://localhost:8080/graphql。您可以发送 POST 请求此端点以执行GraphQL查询和突变。
GraphQL查询示例(使用Postman或curl):
- 统一资源定位符:
http://localhost:8080/graphql
- 方法:
POST
- 标头:
- Content-Type: application/json
- 正文(原始JSON):
query { listAuthors { id firstName lastName } }
GraphQL突变示例(使用Postman或curl):
- 统一资源定位符:
http://localhost:8080/graphql
- 方法:
POST
- 标头:
- Content-Type: application/json
- 正文(原始JSON):
mutation { createAuthor(firstName: "John", lastName: "Doe") { id firstName lastName } }2.MCP(模型上下文协议)端点
用于SSE通信的MCP服务器端点位于 http://localhost:8080/mcp/message.
此端点专为LLM(大型语言模型)或其他MCP兼容客户端设计,用于连接和调用公开的“工具”。这些工具是你的GraphQL查询和突变,用注释 @Tool (来自Spring AI),允许客户端了解它可以发出什么请求以及使用什么参数。
可用的MCP工具
以下是作为MCP服务器工具公开的GraphQL操作列表:
查询工具:
getAuthor:按ID获取作者getBook:按ID获取图书listAuthors:列出所有作者listBooks:列出所有书籍getBooksByAuthor:按作者ID获取书籍getAuthorsByBook:按图书ID获取作者
突变工具:
createAuthor:创建并保存新作者updateAuthor:更新现有作者deleteAuthor:按ID删除作者createBook:创建并保存新书updateBook:更新现有书籍deleteBook:按ID删除书籍addAuthorToBook:将作者添加到书中removeAuthorFromBook:从书中删除作者addBookToAuthor:将书籍添加到作者removeBookFromAuthor:从作者处删除书籍
______________________________________________________________________
