MCP协议服务器

一个基于Jakarta EE的Anthropic模型上下文协议(MCP)服务器实现,提供REST和Servlet两种运行时的集成方案。

  • by sinditech
  • Java
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 sinditech/sindi-ai-mcp-server

使用说明

辛迪人工智能mcp服务器

Anthropic模型上下文协议(MCP)服务器的Java实现。

此实现旨在以无缝的方式提供MCP协议和Jakarta EE应用程序之间的集成。

🏗️ 建筑

该项目分为几个模块,每个模块都有特定的用途:

核心模块

  • sindi-ai-mcp-server-spi:基本的服务器端MCP类、接口、注释和SPI定义
  • sindi-ai-mcp-server-runtime:SPI的运行时实现,用于运行时服务器注册和服务发现。
  • sindi-ai-mcp-server-features:生产就绪的MCP功能,通过一些例子展示了MCP的强大功能,即Jakarta EE方式。

有2个运行时实现:

  • runtime-rest:此模块包含RESTful MCP服务器端传输与Jakarta REST的实现。

    • sindi-ai-mcp-server-runtime-rest-base:下面提到的所有Jakarta REST实现使用的Jakarta REST基本包。
    • sindi-ai-mcp-server-runtime-rest-sse:MCP SSE传输的雅加达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流式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功能和客户端会话。

📖 例子

该项目包括MCP服务器的综合示例,见 examples/ 目录。有2个示例,每个示例都演示了MCP在其各种Jakarta EE服务器协议上的应用(它捆绑了 sindi-ai-mcp-server-features 模块,暴露各个Jakarta EE服务器协议上的MCP功能):

  • sindi-ai-mcp-server-rest:在REST协议上运行MCP服务器(与MCP功能捆绑在一起)。
  • sindi-ai-mcp-server-servlet:在Servlet协议上运行MCP服务器(与MCP功能捆绑在一起)。

🛠️ 如何运行示例

  1. Git克隆整个项目。
  2. 构建项目。
mvn clean package -e
  1. cd examples/sindi-ai-mcp-server-xxxx/,在哪里 xxxx 可以是 rest 或 servlet.

  2. 按如下方式运行应用程序:

mvn clean liberty:dev -e
  1. 打开一个新终端并启动MCP检查器。
npx -y @modelcontextprotocol/inspector@latest

浏览器应使用MCP Inspector自动打开。

  1. 复制链接并连接到您的MCP服务器。

对于苏格兰和南方能源公司,链接应该是 http://localhost:9080/sse. 对于Streamable HTTP,链接应该是 http://localhost:9080/mcp.

单击MCP检查器上的连接,开始测试您的MCP功能。

🤝 贡献

如果你想做出贡献,请查看 贡献.md.

📄 许可证

此项目根据Apache许可证2.0获得许可-请参阅 许可证 文件以获取详细信息。

🌟 入门指南

准备好将AI集成到您的企业Java应用程序中了吗?

  1. 探索示例:从MCP的具体示例开始 examples/ 目录。
  2. 阅读文档:查看单个模块文档,了解详细的配置选项
  3. 贡献:通过报告问题或提交拉取请求来帮助改进项目