项目简介
Mai(My Artificial Intelligence)是一个旨在为大型语言模型(LLM)应用提供强大上下文服务框架的开源项目。它通过集成多个基于 Model Context Protocol (MCP) 构建的服务器,实现对文件操作、代码分析、天气查询、时间管理等多种功能的抽象和标准化。其核心组件包括:
- mai-wmcp:MCP Web 代理服务器,作为统一入口,负责启动和管理多个子 MCP 服务器,并将它们的工具和 Prompt 模板通过 REST API 暴露给客户端。
- mai-mcp-*:一系列独立的 MCP 服务器实现,例如 'mai-mcp-wttr' (天气服务)、'mai-mcp-code' (代码管理)、'mai-mcp-markdown' (Markdown 解析) 等,每个服务器提供特定的功能集。
- mai-tool:命令行客户端,用于查询和调用 'mai-wmcp' 暴露的工具和 Prompt 模板。
- mai:交互式 REPL 命令行客户端,提供了丰富的LLM交互功能,并可集成 'mai-wmcp' 提供的服务。
主要功能点
- 多服务器集成:能够同时启动和管理多个独立的 MCP 服务器,集中化管理其提供的功能。
- 工具自动化发现与注册:自动发现并注册所有托管 MCP 服务器提供的工具和 Prompt 模板。
- 统一 REST API 接口:通过 'mai-wmcp' 提供一个简化的 HTTP/REST API,用于访问所有 MCP 操作(如列出工具、调用工具、获取 Prompt 等)。
- 上下文数据管理:提供结构化的方式来访问和管理各类数据资源。
- LLM 外部功能调用:允许 LLM 通过调用注册的工具来执行外部操作或获取实时信息。
- Prompt 模板定义与渲染:支持定义可参数化的 Prompt 模板,以灵活适应不同的 LLM 交互场景。
- 多种输出格式:支持 JSON 或 Markdown 等格式的响应输出。
安装步骤
- 克隆仓库:
git clone https://github.com/trufae/mai.git cd mai - 编译项目:
运行 'make' 命令来编译所有二进制文件,包括 'mai-wmcp'、'mai-tool' 以及各个 'mai-mcp-*' 服务。
可选:运行 'make install' 可以创建符号链接,将编译后的二进制文件放置在系统 PATH 中,方便直接调用。makemake install
服务器配置
MCP 客户端(如 'mai-tool' 或其他兼容 MCP 协议的应用程序)通过 'mai-wmcp' 代理服务器来访问 Mai 提供的服务。因此,您需要启动 'mai-wmcp' 并指定它要托管的子 MCP 服务器。
-
启动 'mai-wmcp' 代理服务器:
'mai-wmcp' 默认监听 '8989' 端口,并将通过标准输入/输出(stdio)与它启动的子 MCP 服务器进行通信。
以下命令演示如何启动 'mai-wmcp' 并同时托管 'mai-mcp-wttr'(天气服务)和 'mai-mcp-code'(代码服务)这两个子 MCP 服务器:
./mai-wmcp "src/mcps/wttr/main" "src/mcps/code/main"- './mai-wmcp': 这是主要的 MCP 代理服务器程序,负责接收客户端请求并转发给子服务器。
- '"src/mcps/wttr/main"':这是一个子 MCP 服务器的启动命令,该服务器提供天气查询工具。客户端不需要直接配置其启动命令,'mai-wmcp' 会负责启动和管理。
- '"src/mcps/code/main"':这是另一个子 MCP 服务器的启动命令,该服务器提供文件操作、命令执行、代码分析等工具。客户端不需要直接配置其启动命令。
您还可以通过以下命令行参数自定义 'mai-wmcp' 的行为:
- '-p <端口号>':指定 'mai-wmcp' 监听的端口,默认为 '8989'。
- '-y':启用 Yolo 模式,跳过工具执行前的确认提示。
- '-d':启用调试日志,显示 HTTP 请求和 JSON 负载。
通过配置文件启动(可选): 您可以创建一个名为 '~/.mai-wmcp.json' 的配置文件,在其中定义要启动的 MCP 服务器列表:
{ "mcpServers": { "wttr": { "type": "stdio", "command": "path/to/mai-mcp-wttr", "args": [] }, "code": { "type": "stdio", "command": "path/to/mai-mcp-code", "args": [] } } }然后使用 'mai-wmcp -c <配置文件路径>' 命令启动 'mai-wmcp'。
基本使用方法
一旦 'mai-wmcp' 代理服务器及其子 MCP 服务器成功启动,您就可以使用 'mai-tool' 客户端与其进行交互。
-
列出所有可用的工具:
./mai-tool list # 或者获取 JSON 格式的工具列表 ./mai-tool -j list -
调用特定工具: 假设 'mai-mcp-wttr' 提供了 'getWeather' 工具,您可以通过 'mai-tool' 调用它。
./mai-tool call wttr/getWeather location=london # 如果工具名在所有托管服务中是唯一的,可以直接调用(mai-wmcp 会自动发现) ./mai-tool call getWeather location=london- 'wttr/getWeather':表示在名为 'wttr' 的服务器上调用 'getWeather' 工具。'wttr' 是 'mai-mcp-wttr' 进程在 'mai-wmcp' 中注册时的逻辑名称。
- 'location=london':传递给工具的参数。
-
列出所有可用的 Prompt 模板:
./mai-tool prompts list -
渲染并获取 Prompt 模板内容: 假设 'mai-mcp-gemcode' 提供了 'explain_code' Prompt 模板,您可以渲染它并传递参数。
./mai-tool prompts get gemcode/explain_code file_path=/src/main.go question="What does this function do?" -
使用 'mai' 客户端交互: 启动 'mai' 客户端后,可以使用 '/tool' 命令来调用通过 'mai-wmcp' 暴露的工具。
./mai >>> /set tools.use true # 启用工具调用功能 >>> What is the weather in Paris?
信息
分类
AI与计算