关于 sindi-ai-mcp-server
面向 Jakarta EE 应用的 Java MCP 服务端实现,提供组件化结构,并支持 REST 与 Servlet 运行时。开发者可通过注解或管理器注册工具、提示词、资源和资源模板。
主要功能
- 01模块化服务端组件
- 02REST 与 Servlet 运行时
- 03SSE 与 Streamable HTTP 传输
- 04注解注册 MCP 功能
- 05支持工具、提示词与资源
适用场景
- 01将 MCP 功能集成到 Jakarta EE 应用
- 02通过 REST 或 Servlet 部署 MCP 服务端
- 03为 Java 服务注册工具、提示词和资源
MCP 相关
该项目实现 MCP 服务端,并通过 REST 或 Servlet 传输向 MCP 客户端提供工具、提示词、资源及资源模板。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
sindi-ai-mcp-server
Anthropic 的 Model Context Protocol(MCP)服务端 Java 实现。
此实现旨在以无缝方式将 MCP 协议集成到 Jakarta EE 应用中。
🏗️ 架构
项目由多个模块组成,每个模块各司其职:
核心模块
sindi-ai-mcp-server-spi:服务端 MCP 基础类、接口、注解和 SPI 定义sindi-ai-mcp-server-runtime:SPI 的运行时实现,用于运行时服务注册和服务发现。sindi-ai-mcp-server-features:适用于生产环境的 MCP 功能,并附带一些示例,展示以 Jakarta EE 方式使用 MCP 的强大能力。
包含 2 种运行时实现:
-
runtime-rest:此模块包含基于 Jakarta REST 的 RESTful MCP 服务端传输实现。sindi-ai-mcp-server-runtime-rest-base:以下所有 Jakarta REST 实现使用的 Jakarta REST 基础包。sindi-ai-mcp-server-runtime-rest-sse:MCP SSE 传输的 Jakarta REST 实现。sindi-ai-mcp-server-runtime-rest-streamable-http:MCP Streamable HTTP 传输的 Jakarta REST 实现。
-
runtime-servlet:此模块包含基于 Jakarta Servlet 的 Web MCP 服务端传输实现。sindi-ai-mcp-server-runtime-servlet-sse:MCP SSE 传输的 Jakarta Servlet 实现。sindi-ai-mcp-server-runtime-servlet-streamable-http:MCP Streamable HTTP 传输的 Jakarta Servlet 实现。
🚀 快速开始
1. 添加依赖
你需要在应用中选择 Servlet 或 REST 运行时(不能同时选择两者,否则可能导致端点冲突)。
在 pom.xml 中添加所需依赖。
- 对于 Servlet:
<dependency>
<groupId>za.co.sindi</groupId>
<artifactId>sindi-ai-mcp-server-runtime-servlet</artifactId>
<version>${project.version}</version>
</dependency>
- 对于 REST:
<dependency>
<groupId>za.co.sindi</groupId>
<artifactId>sindi-ai-mcp-server-runtime-rest</artifactId>
<version>${project.version}</version>
</dependency>
2. 定义 MCP 功能服务
MCP 功能可以注册在普通 POJO 或 CDI 管理的 Bean 上。
支持以下 MCP 功能:
Tools:支持在方法上使用@Tool、@ToolArgument注解。也支持 LangChain4J 工具注解。方法返回值必须为String类型。Prompts:支持在方法上使用@Prompt、@PromptArgument注解。方法返回值必须为PromptMessage或PromptMessage[]类型。Resource:支持在方法上使用@Resource注解(必须提供uri注解属性)。方法返回值必须为ResourceContents[]类型(可以是BlobResourceContents或TextResourceContents类型)。Resource template:支持在方法上使用@ResourceTemplate注解(必须提供uri注解属性)。方法返回值必须为ResourceTemplate[]类型。
如果需要更具编程性的方式,可以将相应的管理器注入 MCP 服务运行时,并通过回调处理程序注册 MCP 功能:
ToolManager:用于注册工具。PromptManager:用于注册提示词。ResourceManager:用于注册资源和资源模板。
此外,还可以注入以下 MCP 资源:
MCPLogger:向客户端会话记录 MCP 日志(若已启用)。MCPContext:MCP 上下文,提供手动注册 MCP 功能以及客户端会话的能力。
📖 示例
项目在 examples/ 目录中提供了全面的 MCP 服务示例。共有 2 个示例,分别展示如何在不同的 Jakarta EE 服务协议上使用 MCP(这些示例包含 sindi-ai-mcp-server-features 模块,并在相应的 Jakarta EE 服务协议上公开 MCP 功能):
sindi-ai-mcp-server-rest:在 REST 协议上运行 MCP 服务(包含 MCP 功能)。sindi-ai-mcp-server-servlet:在 Servlet 协议上运行 MCP 服务(包含 MCP 功能)。
🛠️ 如何运行示例
- 克隆整个项目。
- 构建项目。
mvn clean package -e
-
执行
cd examples/sindi-ai-mcp-server-xxxx/,其中xxxx可以是rest或servlet。 -
按如下方式运行应用程序:
mvn clean liberty:dev -e
- 打开一个新终端并启动 MCP Inspector。
npx -y @modelcontextprotocol/inspector@latest
浏览器应自动打开 MCP Inspector。
- 复制链接并连接到 MCP 服务。
对于 SSE,链接应为 http://localhost:9080/sse。
对于 Streamable HTTP,链接应为 http://localhost:9080/mcp。
在 MCP Inspector 中点击连接,然后开始测试 MCP 功能。
🤝 参与贡献
如果你想参与贡献,请参阅 CONTRIBUTING.md。
📄 许可证
本项目采用 Apache License 2.0 许可协议,详情请参阅 LICENSE 文件。
🌟 快速入门
准备好将 AI 集成到你的企业 Java 应用程序中了吗?
- 浏览示例:从
examples/目录中的 MCP 专用示例开始。 - 阅读文档:查看各模块的文档,了解详细的配置选项。
- 参与贡献:报告问题或提交拉取请求,帮助改进项目。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。