这是一个更大的 Jakarta EE AI Chatbot 项目的其中一步 (step-09-mcp),专门用于演示如何构建一个符合 Model Context Protocol (MCP) 标准的服务器端应用。该服务器托管了一系列工具,允许兼容 MCP 的 LLM 客户端通过标准协议与后端的图书商店服务交互。

主要功能点

  • MCP 协议实现: 实现了 MCP 协议,能够与支持 MCP 的 LLM 客户端进行通信(通常通过标准输入/输出或 HTTP/WebSocket)。
  • 工具托管与调用: 托管了一组用于访问图书商店功能的工具(例如,搜索图书、获取图书详情、列出图书类别、更新图书库存等)。
  • 后端服务集成: 作为 MCP 层,它通过 REST 客户端与另一个 Jakarta EE 后端服务(图书商店 REST API)进行交互,执行具体的业务操作。

安装步骤

  1. 克隆仓库: 将 'llm-jakarta' 仓库克隆到本地。
  2. 安装依赖: 确保系统已安装 Java 17 或更高版本,以及 Maven 构建工具。
  3. 启动数据库: 该项目(特别是其依赖的图书商店后端)需要 PostgreSQL 数据库。推荐使用仓库 'deploy' 目录下的 Docker Compose 文件启动数据库:
    cd llm-jakarta/deploy
    docker-compose up -d
  4. 进入 MCP 服务器目录: 切换到包含 MCP 服务器代码的目录:
    cd llm-jakarta/step-09-mcp/step-09-mcp-server
  5. 设置环境变量: 配置数据库连接所需的环境变量。请根据您的数据库设置进行调整,以下是默认示例(与 Docker Compose 对应):
    export PGDATABASE=bookstore
    export PGUSER=bookstore
    export PGPASSWORD=bookstore
    export PCHOST=localhost
    export PGPORT=5432
    如果 MCP 服务器的更广泛配置需要(例如连接 LLM API 用于其他目的,尽管图书工具本身不直接使用),您可能还需要设置 'export OPENAI_API_KEY=your-api-key-here'。
  6. 启动 MCP 服务器: 使用 Maven Wrapper 启动基于 Quarkus 的 MCP 服务器:
    ./mvnw clean package quarkus:dev
    服务器启动后,它将在标准输入/输出(stdio)上等待 MCP 客户端连接和发送 JSON-RPC 请求。

服务器配置 (供 MCP 客户端使用)

为了让兼容 MCP 的 LLM 客户端能够连接并使用此服务器,您需要在客户端的配置中指定以下信息。这些信息通常以 JSON 格式提供:

  • 服务器名称 (serverName): 一个描述性名称,例如 "Jakarta EE MCP Bookstore Tool Server"。
  • 启动命令 (command): 用于启动此 MCP 服务器进程的命令。在此示例中是 './mvnw'。
  • 启动参数 (args): 启动命令的参数列表。对应于开发模式启动,应为 '["clean", "package", "quarkus:dev"]'。
  • 工作目录 (workingDirectory): 执行启动命令时客户端需要切换到的目录。应指定为 'llm-jakarta/step-09-mcp/step-09-mcp-server' 在您的文件系统中的绝对或相对路径。
  • 环境变量 (env): 服务器进程运行时需要设置的环境变量映射。至少应包含数据库连接信息,例如 '{"PGDATABASE": "bookstore", "PGUSER": "bookstore", "PGPASSWORD": "bookstore", "PGHOST": "localhost", "PGPORT": "5432"}'。如果需要连接 LLM,也请包含 'OPENAI_API_KEY'。
  • 传输协议 (transport): 服务器与客户端通信使用的协议。根据项目描述(提及 Goose for MCP stdin),通常配置为 'stdio'。

基本使用方法

服务器启动后,它不会提供一个 Web 界面供人类用户直接交互。它是为 LLM 客户端设计的后台服务。一个配置正确的 MCP 客户端(如 Goose 或其他支持 MCP 的客户端)将:

  1. 通过执行配置的 'command' 和 'args' 来启动 MCP 服务器进程。
  2. 使用配置的 'transport'(例如 stdio)与服务器建立通信。
  3. 向服务器发送 JSON-RPC 请求来:
    • 查询服务器支持的功能 ('mcp.capability.list')。
    • 获取所有可用工具的列表和描述 ('mcp.tool.list')。
    • 调用特定的图书商店工具,例如通过 'mcp.tool.execute' 发送包含工具名称(如 'searchBooks')和参数的请求。
  4. 接收服务器返回的 JSON-RPC 响应,其中包含工具执行的结果或错误信息。

LLM 客户端通常会利用这些工具来获取实时信息或执行操作,从而增强其回答问题的能力。

信息

分类

开发者工具