项目简介
'ibmi-mcp-server' 是一个专为IBM i系统设计的MCP服务器实现,旨在将IBM i的数据和功能以标准化的方式暴露给大型语言模型 (LLM) 客户端。它允许LLM应用通过JSON-RPC协议访问IBM i上的DB2数据库,执行SQL工具,并管理会话。服务器支持多种传输模式(如HTTP和Stdio),并提供认证机制,确保安全和可扩展的上下文服务。
主要功能点
- SQL 工具托管: 能够托管并执行针对IBM i DB2数据库的SQL查询工具,实现数据访问和操作。
- 资源管理: 统一管理IBM i上的各种资源,供LLM客户端查询和使用。
- LLM 交互支持: 通过标准化的JSON-RPC协议与LLM客户端通信,支持会话管理和能力声明。
- 多种传输协议: 支持HTTP和Stdio两种传输模式,方便不同类型的客户端集成。
- IBM i 认证: 提供基于IBM i凭据的HTTP认证机制,支持会话令牌生成和管理,实现安全的用户级访问。
- 灵活配置: 可通过环境变量或'.env'文件轻松配置数据库连接、认证模式、端口等。
- 容器化部署: 提供Docker和Podman部署配置,便于集成到现代化微服务架构中。
安装步骤
- 克隆仓库并安装依赖:
git clone https://github.com/IBM/ibmi-mcp-server.git cd ibmi-mcp-server/ npm install - 构建项目:
npm run build - 创建服务器配置文件'.env',并填写IBM i连接信息:
复制示例配置文件:
然后编辑 '.env' 文件,填入你的 IBM i DB2 连接详情:cp .env.example .env# IBM i DB2 for i Connection Settings # Required for YAML SQL tools to connect to IBM i systems DB2i_HOST=你的IBM_i_主机名 DB2i_USER=你的IBM_i_用户名 DB2i_PASS=你的IBM_i_密码 DB2i_PORT=8076 DB2i_IGNORE_UNAUTHORIZED=true - (可选)若要启用IBM i HTTP认证,需要生成RSA密钥对并配置'.env'文件:
首先生成密钥对:
在 '.env' 文件中添加或修改以下配置:mkdir -p secrets openssl genpkey -algorithm RSA -out secrets/private.pem -pkeyopt rsa_keygen_bits:2048 openssl rsa -pubout -in secrets/private.pem -out secrets/public.pem# Enable IBM i authentication system IBMI_HTTP_AUTH_ENABLED=true MCP_AUTH_MODE=ibmi # IBM i authentication settings IBMI_AUTH_KEY_ID=development IBMI_AUTH_PRIVATE_KEY_PATH=secrets/private.pem IBMI_AUTH_PUBLIC_KEY_PATH=secrets/public.pem # Security settings IBMI_AUTH_ALLOW_HTTP=true # 开发环境使用,生产环境请设为 false IBMI_AUTH_TOKEN_EXPIRY_SECONDS=3600 # Token lifetime (1 hour)
服务器配置示例 (MCP客户端所需)
MCP客户端需要配置MCP服务器的连接信息。以下是常见的配置参数及其说明,具体JSON格式取决于你使用的MCP客户端,请勿直接复制以下代码:
- 服务器名称 ('name'): 客户端用于标识此MCP服务器的唯一名称,例如 '"ibmi-mcp"'。
- 命令 ('command'): 如果客户端以本地进程方式启动MCP服务器,这是服务器可执行文件的路径和名称,例如 '"npx"' 或 '"node"'。
- 参数 ('args'): 启动服务器时传递给命令的命令行参数列表,例如 '["ibmi-mcp-server", "--tools", "/absolute/path/to/your/tools"]'。
- '/absolute/path/to/your/tools': 替换为您的SQL工具配置目录的绝对路径。
- URL ('url'): 如果客户端通过HTTP/HTTPS连接远程MCP服务器,这是服务器的端点URL,例如 '"http://localhost:3010/mcp"'。
- 类型/传输协议 ('type' / 'transport'): 客户端与服务器通信所使用的传输协议类型,例如 '"http"'(HTTP流传输)或 '"stdio"'(标准输入/输出)。
- 请求头 ('headers'): 用于HTTP认证的请求头,特别是在启用了IBM i HTTP认证时,例如 '{"Authorization": "Bearer YOUR_ACCESS_TOKEN_HERE"}'。
- 环境变量 ('env'): MCP服务器进程所需的环境变量列表,例如 '{"DB2i_HOST": "your-ibmi-host.com", "DB2i_USER": "your-username", "DB2i_PASS": "your-password", "DB2i_PORT": "8076", "MCP_TRANSPORT_TYPE": "stdio"}'。
基本使用方法
-
启动服务器:
- 通过HTTP模式启动(推荐开发使用,方便远程客户端连接):
npx ibmi-mcp-server --transport http --tools ./tools - 通过Stdio模式启动(适用于CLI工具或MCP Inspector等本地客户端):
请确保 '/absolute/path/to/tools' 是您的 'tools' 目录的绝对路径。npx ibmi-mcp-server --transport stdio --tools /absolute/path/to/tools
- 通过HTTP模式启动(推荐开发使用,方便远程客户端连接):
-
获取访问令牌(如果启用了IBM i HTTP认证): 在服务器启动后,可以使用提供的脚本获取访问令牌:
node get-access-token.js --verbose # 成功后,你将获得一个IBMI_MCP_ACCESS_TOKEN环境变量,可用于客户端请求的Authorization头。 -
在MCP客户端中连接和使用: 根据你使用的MCP客户端(如Claude Code, VSCode Copilot Chat, Gemini CLI等),按照其文档进行配置。通常你需要提供服务器的URL(HTTP模式)或启动命令(Stdio模式),并包含认证令牌(如果需要)。
示例:使用Python客户端连接并列出工具
import asyncio import os from mcp.client.streamable_http import streamablehttp_client from mcp import ClientSession async def main(): token = os.environ.get('IBMI_MCP_ACCESS_TOKEN') # 从环境变量获取令牌 headers = {"Authorization": f"Bearer {token}"} if token else {} # 连接到MCP服务器 async with streamablehttp_client("http://localhost:3010/mcp", headers=headers) as (read_stream, write_stream, _): async with ClientSession(read_stream, write_stream) as session: await session.initialize() # 初始化会话 tools = await session.list_tools() # 列出服务器上注册的所有工具 print(f"可用工具: {[t.name for t in tools.tools]}") # (可选)调用一个工具 # result = await session.call_tool("system_status", {}) # print(f"系统状态: {result}") if __name__ == "__main__": asyncio.run(main())
信息
分类
商业系统