• 项目简介 本项目是一个基于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组件模型。要运行此项目,您需要:

    1. Java环境: 确保您已安装Java开发工具包 (JDK) 8或更高版本。
    2. Maven: 确保您已安装Apache Maven,用于构建项目。
    3. 克隆仓库:
      git clone https://github.com/ECF/MCPToolGroups.git
      cd MCPToolGroups
    4. 构建项目:
      mvn clean install
    5. 运行OSGi容器: 本项目是OSGi bundles的集合。您需要一个OSGi容器(如Apache Karaf或Eclipse Equinox)来部署和运行这些bundles。通常,'mvn clean install'会构建所有必要的JAR文件,您可以手动将它们部署到OSGi容器中,或者查找项目中可能包含的启动脚本。具体的OSGi容器启动和bundle部署方法请参考您选择的OSGi容器的文档。 例如,如果使用Maven 'bundle'插件并配置了OSGi运行时,可以直接运行(具体命令可能需要根据项目构建配置调整):
      # 示例命令,实际启动命令需根据您的OSGi容器和部署方式调整
      # java -jar org.eclipse.osgi.jar -console
      # 然后在OSGi控制台中安装和启动相关bundles
      一旦OSGi容器启动并部署了所有项目bundles,MCP服务器组件 ('SyncMcpToolGroupServerComponent' 和 'AsyncMcpToolGroupServerComponent') 将会自动激活并监听Unix域套接字。
  • 服务器配置 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域套接字文件的路径,与服务器端配置的路径一致。
  • 基本使用方法

    1. 启动服务器: 按照上述安装步骤,成功构建并启动OSGi容器,确保'SyncMcpToolGroupServerComponent'和'AsyncMcpToolGroupServerComponent'已激活。这将创建Unix域套接字文件(例如's.socket'和'a.socket')。
    2. MCP客户端连接: 使用支持MCP协议的客户端(如示例中的'McpSyncClientComponent',或者其他语言的MCP客户端库),配置上述的JSON信息以连接到服务器。
    3. 列出可用工具: 客户端可以通过调用 'listTools' 方法来发现服务器上所有已注册的工具及其描述。LLM可以使用这些描述来理解工具的功能和参数。
    4. 调用工具: 客户端可以根据需要调用特定的工具。例如,调用示例中的'add'工具:
      // 示例代码片段,实际客户端调用方式可能因语言和库而异
      // 假设 client 是一个已连接的 MCP 客户端实例
      // client.callTool(new CallToolRequest("com.composent.ai.mcp.examples.toolgroup.api.ExampleToolGroup.add", Map.of("x", "5.1", "y", "6.32")));
      服务器会执行对应的Java方法(如'add(5.1, 6.32)'),并将结果通过MCP协议返回给客户端。异步工具的调用方式类似,客户端会收到一个Mono(反应式流)来处理结果。

信息

分类

AI与计算