项目简介
ExMCP 是 Model Context Protocol (MCP) 的一个完整 Elixir 实现,旨在帮助 AI 模型(特别是大型语言模型 LLM)通过标准化的协议安全地访问本地和远程资源,并调用外部功能。它同时提供了客户端和服务器端的组件,支持多种传输方式,方便开发者在 Elixir 生态中构建符合 MCP 规范的应用和服务。
主要功能点
- 完整的 MCP 协议支持: 实现 MCP 协议的核心规范,包括资源、工具、Prompt 的管理与访问。
- 多种传输协议: 支持通过标准 I/O (stdio)、Streamable HTTP (含 SSE) 和 BEAM 进程间通信等方式进行数据传输。
- 资源管理: 允许服务器托管和提供结构化或非结构化的资源(如文件、数据接口),客户端可以按 URI 进行读取。支持资源更新订阅通知。
- 工具调用: 支持服务器注册工具,并描述其功能和参数(使用 JSON Schema),LLM 客户端可以通过协议调用这些工具执行特定任务。支持工具列表变化通知和工具调用进度通知。
- Prompt 模板: 服务器可以定义和管理可复用的 Prompt 模板,客户端可以根据需要获取并填充参数以生成用于 LLM 的 Prompt。支持 Prompt 列表变化通知。
- 双向通信: 协议支持客户端和服务器之间的双向请求和通知,例如服务器可以请求客户端进行 LLM 推理 (Sampling) 或向用户进行信息征询 (Elicitation)。
- 人机协作 (HITL): 提供机制支持敏感操作(如 LLM 推理、资源修改)需要用户审批的流程。
- 自动化特性: 支持自动重连、服务器发现、变更通知等高级功能。
- 安全性: 提供身份验证、TLS/SSL、CORS 等安全机制。
安装步骤
将 'ex_mcp' 添加到你的 Elixir 项目的 'mix.exs' 文件依赖列表中:
def deps do [ {:ex_mcp, "~> 0.2.0"} ] end
然后在项目目录下运行:
mix deps.get
服务器配置 (面向 MCP 客户端)
MCP 服务器通常由其开发者独立部署和运行。LLM 客户端应用需要知道如何找到并连接到这个服务器。连接信息通常以 JSON 格式配置,包含服务器的名称、协议版本以及连接方式等。
以下是客户端配置 ExMCP 服务器连接信息的一个示例(请注意,这是一个配置示例,不是需要用户直接运行的代码):
{ "name": "My Elixir MCP Server", "protocolVersion": "2025-03-26", "transport": { "type": "stdio", "command": ["/path/to/your/elixir/mcp_server_executable", "--config", "/path/to/server_config.json"], "args": [] }, "capabilities": { // 可选:客户端声明支持的能力,服务器据此调整行为 "sampling": {}, "roots": { "listChanged": true } } }
或者使用 HTTP 传输方式:
{ "name": "My Elixir MCP Server (HTTP)", "protocolVersion": "2025-03-26", "transport": { "type": "http", "url": "https://api.example.com/mcp" }, "capabilities": { // ... 客户端能力 }, "security": { "auth": {"type": "bearer", "token": "your-secret-token"}, "validateOrigin": true, "allowedOrigins": ["https://app.example.com"] } }
配置项说明:
- 'name': 服务器的友好名称。
- 'protocolVersion': 服务器支持的 MCP 协议版本 (例如 "2025-03-26", "draft")。
- 'transport': 定义连接方式。
- 'type': 传输类型 ("stdio" 或 "http")。
- 'command': (stdio 方式) 启动 MCP 服务器进程的命令及其参数数组。请替换为实际的服务器可执行文件路径或启动脚本。
- 'args': (stdio 方式) 传递给服务器启动命令的额外参数数组。
- 'url': (http 方式) MCP 服务器的 HTTP/HTTPS 端点 URL。
- 'security': (http 方式) 可选的安全配置,如认证令牌、源验证等。
- 'capabilities': 可选,客户端声明自己支持的 MCP 功能。
用户需要从 MCP 服务器的提供者那里获取准确的 'command' 或 'url' 等连接信息。
基本使用方法 (面向 MCP 客户端)
假设 MCP 服务器已按照其提供者的方式启动运行,并且客户端应用已获得正确的连接配置。客户端应用通常通过 ExMCP 提供的客户端库(或其他语言的 MCP 客户端库)与之交互。
- 连接到服务器: 客户端应用使用上文描述的配置信息启动一个 MCP 客户端连接。
- 初始化通信: 客户端与服务器进行初始化握手,协商协议版本和双方能力。
- 发现功能: 客户端可以请求服务器提供其支持的工具列表 ('tools/list')、资源列表 ('resources/list') 或 Prompt 列表 ('prompts/list')。
- 调用工具: 客户端向服务器发送 'tools/call' 请求,指定工具名称和参数,服务器执行工具并返回结果。
- 读取资源: 客户端向服务器发送 'resources/read' 请求,指定资源 URI,服务器返回资源内容。
- 获取 Prompt: 客户端向服务器发送 'prompts/get' 请求,指定 Prompt 名称和参数,服务器返回格式化好的 Prompt 消息列表。
- 处理服务器请求: 如果客户端支持 Sampling 或 Elicitation 能力,服务器可能会向客户端发送 'sampling/createMessage' 或 'elicitation/create' 请求,客户端负责与用户或 LLM 交互并返回结果。
- 处理通知: 客户端监听服务器发送的通知,如进度更新 ('notifications/progress')、资源更新 ('notifications/resources/updated') 或列表变更通知 ('notifications/lists/changed')。
ExMCP 库本身为 Elixir 开发者提供了方便的 API 来实现上述客户端和服务器端逻辑。
信息
分类
AI与计算