项目简介
本仓库实现了一个基于 Elixir 的 MCP 服务器框架,能够在应用内以进程内方式提供资源管理、工具注册以及 Prompts 的渲染与执行能力,并通过 JSON-RPC 风格的请求/响应与客户端通信。核心目标是为 LLM 客户端(如 Claude Code 的相关工作流)提供标准化的上下文、工具执行能力以及可扩展的提示模板机制。
主要功能点
- 支持 MCP 协议的核心能力:处理资源读取、工具调用、提示模板获取等请求,并返回标准的 JSON-RPC 异步/同步响应。
- in-process MCP 服务器:在 Elixir 应用内直接启动和注册服务器,无需外部可执行进程,方便嵌入式集成和测试。
- 资源、工具、提示模板的注册与管理:通过模块化工具定义(use ClaudeAgentSDK.Tool、deftool 等)来扩展功能。
- 与 Claude Code CLI 的控制协同:提供对 CLI 控制协议的路由与 JSON-RPC 响应能力,便于与现有 Claude Code 生态链集成。
- 简化的 MCP 服务器暴露方式:通过 Options.mcp_servers 将服务器注入到应用,客户端可按服务器名称进行连接与交互。
安装步骤
- 在 Mix 项目中添加依赖(示例版本,实际以仓库发布为准):
- claude_agent_sdk 版本接入
- 获取依赖并编译:
- mix deps.get
- mix compile
- 配置 MCP 服务器(在应用启动阶段将服务器暴露给客户端)
- 将服务器通过 Options.mcp_servers 注入到客户端配置中(详细配置见下方服务器配置示例)
- 启动应用
- 启动 Elixir 应用后,MCP 服务器将就绪,客户端即可通过 JSON-RPC 方式与之交互
服务器配置
以下为 MCP 客户端连接该服务器时所需的配置信息示例(以 JSON 表达,含 server name、command、args 等字段;用于描述如何连接一个在应用内运行的 MCP 服务器,实际客户端无需执行命令启动该服务器,因为它在同一应用进程中运行)。说明:本 MCP 服务器在当前进程内部运行,不需要外部命令启动;command 字段标记为 in-process,args 为空列表,表示无外部启动参数。
{ "server": { "name": "calculator", "version": "1.0.0", "tools": ["MyTools.Add"] }, "command": "in-process", "args": [] }
注释说明:
- server.name 对应示例中的服务器名称(如 README 示例中的 calculator 服务)。
- server.version 对应服务器版本,便于版本对齐和兼容性判断。
- server.tools 列出该服务器暴露的工具集合,在客户端可据此进行工具发现和调用。
- command 与 args 针对本实现为内嵌进程使用,表示无需外部启动命令,客户端仅作连接描述,不需要实际执行。
基本使用方法
- 定义工具并注册到 MCP 服务器(在应用中使用 ClaudeAgentSDK.Tool、deftool 等进行定义)。
- 使用 ClaudeAgentSDK.create_sdk_mcp_server/1 创建服务器实例,并将其注入到 Options.mcp_servers 中:
- 将服务器名称、版本、工具清单等信息通过配置暴露给客户端。
- 启动 Elixir 应用后,客户端即可通过 MCP 协议向服务器发起请求(读取资源、调用工具、获取 Prompts 等),服务器返回标准的 JSON-RPC 响应。
- 如需要扩展,可通过 RFC 义的工具定义、Hooks、Permissions 等机制进一步增强服务器能力。
注意:MCP 客户端不需要执行外部命令来启动服务器,因为服务器是在当前 Elixir 应用进程中运行的。上述配置仅用于描述连接信息与服务器能力。
信息
分类
AI与计算