项目简介
'haskell-mcp' 是一个 Haskell 语言实现的 MCP 服务器框架库。它提供了一套工具和结构,帮助开发者方便地定义 LLM 可调用的工具 (Tools) 和交互模板 (Prompts),并构建一个符合 MCP 协议标准的后端服务。这个服务可以通过标准输入输出 (Stdio) 等方式与 MCP 客户端(如支持 MCP 的 LLM 应用)进行通信,为 LLM 提供定制化的上下文信息和功能调用能力。
主要功能点
- 工具定义与执行: 允许开发者在 Haskell 中定义结构化的数据类型来表示 LLM 可以调用的外部功能(工具),并实现相应的函数来执行这些工具的逻辑。
- Prompt 定义与渲染: 允许开发者定义结构化的数据类型来表示 LLM 可使用的 Prompt 模板,并实现函数来根据数据生成最终的 Prompt 文本。
- MCP 协议处理: 封装了与 MCP 客户端进行通信的细节,自动处理 JSON-RPC 请求和响应的解析与发送。
- 标准输入输出 (Stdio) 支持: 内建支持通过程序的标准输入和标准输出与 MCP 客户端建立连接和交换信息。
- 服务器运行框架: 提供简单的函数,方便开发者将定义的工具和 Prompt 逻辑整合并启动为一个可运行的 MCP 服务器进程。
安装步骤
该项目本身是一个 Haskell 库,您需要在您的 Haskell 项目中将其作为依赖使用。
- 确保您的系统已安装 Haskell 开发环境,推荐使用 GHC 和构建工具 Cabal 或 Stack。
- 在您的 Haskell 项目的构建配置文件(例如 '.cabal' 文件或 'package.yaml' 文件)中,将 'haskell-mcp' 添加到您的依赖列表中。
- 使用 Cabal 或 Stack 构建并编译您的项目。这将生成一个可执行文件,作为您的 MCP 服务器。您也可以使用仓库提供的 Dockerfile 构建一个包含您服务器的可执行文件的 Docker 镜像。
服务器配置
为了让 MCP 客户端能够连接并启动您的 MCP 服务器,您需要在客户端中进行相应的配置。配置通常是一个 JSON 格式,包含一个或多个服务器的启动信息。
根据 'haskell-mcp' 仓库提供的示例,如果您使用 Docker 构建了镜像,配置信息大致如下:
- 服务器名称:'haskell-mcp'
- 启动命令 ('command'):'docker'
- 启动参数 ('args'):'["run", "--rm", "-i", "haskell-mcp:latest"]'
您需要在您的 MCP 客户端的用户配置中找到相应的 MCP 服务器配置项(通常是 'mcpServers' 字段),并添加类似以下结构的条目(请注意,这仅是配置的表示形式,不是需要运行的代码):
{ "mcpServers": { "haskell-mcp": { // 这是服务器的名称 "command": "docker", // 这是用于启动服务器进程的命令 "args": [ // 这是传递给启动命令的参数列表 "run", // docker run 命令 "--rm", // 容器停止后自动移除 "-i", // 保持标准输入打开,用于 Stdio 通信 "haskell-mcp:latest" // 要运行的 Docker 镜像名称和标签 ] } // 您可以在这里添加其他 MCP 服务器的配置 } }
如果您选择编译为原生可执行文件而不是 Docker 镜像,'command' 将是您的可执行文件路径,'args' 则是您程序可能需要的命令行参数。
基本使用方法
- 在您的 Haskell 项目中,导入 'haskell-mcp' 库。
- 定义用于表示 Prompt 和 Tool 的 Haskell 数据类型(例如使用 'data' 关键字)。
- 编写 Haskell 函数来实现处理这些 Prompt 和 Tool 的逻辑(例如,根据 Prompt 数据结构生成文本,或执行 Tool 数据结构代表的操作)。
- 在您的 'main' 函数中,使用 'haskell-mcp' 提供的函数(如 'runMcpServerStdIn'),传入您定义的 Prompt 和 Tool 数据结构、相应的执行函数等,来启动 MCP 服务器。
- 编译并构建您的 Haskell 项目。
- 在您的 MCP 客户端中配置服务器启动命令(参照“服务器配置”部分)。
- 启动 MCP 客户端,它会自动根据配置启动您的 Haskell MCP 服务器,并通过标准输入输出来进行通信。现在,您的 MCP 客户端可以向您的 Haskell 服务器发送请求,调用您定义的工具和 Prompt。
信息
分类
AI与计算