-
项目简介 本项目是一个基于Model Context Protocol (MCP) 的服务器实现,专注于动态管理和暴露工具组。它通过Java注解将普通Java接口方法注册为可供大型语言模型 (LLM) 调用的工具,并支持将这些工具进行逻辑分组。服务器能够处理同步和异步工具调用,并通过Unix域套接字 (UDS) 提供通信能力,为LLM应用提供一个可扩展的工具服务框架。
-
主要功能点
- MCP工具集成: 允许开发者将Java方法快速转换为LLM可调用的工具。
- 动态工具注册与管理: 支持在运行时动态添加和移除工具,提高了系统的灵活性。
- 工具分组: 引入工具分组概念,便于组织和管理大量工具,提升LLM发现和使用工具的效率。
- 同步与异步支持: 同时支持同步和基于Reactor Mono的异步工具执行,满足不同场景的需求。
- JSON Schema生成: 自动为工具的输入和输出参数生成JSON Schema,方便LLM理解和使用。
- UDS传输: 采用Unix域套接字进行客户端与服务器通信,提供高效的本地进程间通信。
-
安装步骤 本项目主要由Java语言编写,并使用OSGi组件模型。要运行此项目,您需要:
- Java环境: 确保您已安装Java开发工具包 (JDK) 8或更高版本。
- Maven: 确保您已安装Apache Maven,用于构建项目。
- 克隆仓库:
git clone https://github.com/ECF/MCPToolGroups.git cd MCPToolGroups - 构建项目:
mvn clean install - 运行OSGi容器: 本项目是OSGi bundles的集合。您需要一个OSGi容器(如Apache Karaf或Eclipse Equinox)来部署和运行这些bundles。通常,'mvn clean install'会构建所有必要的JAR文件,您可以手动将它们部署到OSGi容器中,或者查找项目中可能包含的启动脚本。具体的OSGi容器启动和bundle部署方法请参考您选择的OSGi容器的文档。
例如,如果使用Maven 'bundle'插件并配置了OSGi运行时,可以直接运行(具体命令可能需要根据项目构建配置调整):
一旦OSGi容器启动并部署了所有项目bundles,MCP服务器组件 ('SyncMcpToolGroupServerComponent' 和 'AsyncMcpToolGroupServerComponent') 将会自动激活并监听Unix域套接字。# 示例命令,实际启动命令需根据您的OSGi容器和部署方式调整 # java -jar org.eclipse.osgi.jar -console # 然后在OSGi控制台中安装和启动相关bundles
-
服务器配置 MCP客户端需要配置MCP服务器的启动命令和参数,以便与其建立连接和通信。以下是一个MCP客户端连接到此MCP服务器的示例配置(JSON格式),以及对各个字段的解释:
{ "serverName": "example-sync-uds-transport-server", "command": "/path/to/java", "args": [ "-jar", "/path/to/your/osgi-launcher.jar", "-Dcom.composent.ai.mcp.examples.toolgroup.mcpserver.socketPath=s.socket" // 其他OSGi启动参数和bundle路径,以确保服务正确启动 ], "transport": { "type": "uds", "socketPath": "s.socket" } }- 'serverName': 服务器的名称,例如 'example-sync-uds-transport-server'。
- 'command': 启动Java运行时环境的命令,通常是'/path/to/java'。
- 'args': 启动MCP服务器所需的命令行参数列表。这通常包括:
- '-jar /path/to/your/osgi-launcher.jar': 启动OSGi容器的JAR文件路径。
- '-Dcom.composent.ai.mcp.examples.toolgroup.mcpserver.socketPath=s.socket': 指定MCP服务器用于同步通信的Unix域套接字文件路径('s.socket'表示在当前工作目录下)。
- (异步服务器类似,可能使用'a.socket'作为其'socketPath')
- 其他OSGi启动和bundle加载相关的参数,确保所有必要的项目bundles被正确加载和激活。
- 'transport': 定义客户端与服务器通信所使用的传输协议。
- 'type': 传输协议类型,这里是'"uds"'(Unix Domain Socket)。
- 'socketPath': Unix域套接字文件的路径,与服务器端配置的路径一致。
-
基本使用方法
- 启动服务器: 按照上述安装步骤,成功构建并启动OSGi容器,确保'SyncMcpToolGroupServerComponent'和'AsyncMcpToolGroupServerComponent'已激活。这将创建Unix域套接字文件(例如's.socket'和'a.socket')。
- MCP客户端连接: 使用支持MCP协议的客户端(如示例中的'McpSyncClientComponent',或者其他语言的MCP客户端库),配置上述的JSON信息以连接到服务器。
- 列出可用工具: 客户端可以通过调用 'listTools' 方法来发现服务器上所有已注册的工具及其描述。LLM可以使用这些描述来理解工具的功能和参数。
- 调用工具: 客户端可以根据需要调用特定的工具。例如,调用示例中的'add'工具:
服务器会执行对应的Java方法(如'add(5.1, 6.32)'),并将结果通过MCP协议返回给客户端。异步工具的调用方式类似,客户端会收到一个Mono(反应式流)来处理结果。// 示例代码片段,实际客户端调用方式可能因语言和库而异 // 假设 client 是一个已连接的 MCP 客户端实例 // client.callTool(new CallToolRequest("com.composent.ai.mcp.examples.toolgroup.api.ExampleToolGroup.add", Map.of("x", "5.1", "y", "6.32")));
信息
分类
AI与计算