项目简介

这是一个基于Model Context Protocol (MCP) 实现的应用后端,专门用于与HashiCorp Nomad集群进行交互。它将Nomad的各项管理功能抽象为标准的MCP工具,并暴露Nomad集群的状态和配置作为MCP资源,使大型语言模型 (LLM) 客户端能够理解和操作Nomad环境。

主要功能点

  • 作业管理: 查看、获取、运行、停止、重启和扩缩Nomad作业。
  • 部署管理: 查看和获取部署详情。
  • 命名空间管理: 列出、创建和删除命名空间。
  • 节点管理: 列出、获取节点详情,以及控制节点的排空(drain)和资格(eligibility)状态。
  • 分配管理: 列出、获取分配详情,并停止分配。
  • 变量管理: 列出、获取、创建和删除Nomad变量。
  • 卷管理: 列出、获取和删除Nomad卷。
  • ACL 管理: 管理访问控制列表 (ACL) 代币、策略和角色,并支持ACL引导。
  • 日志获取: 获取特定任务的日志。
  • 资源访问: 提供对Nomad作业模板、节点状态、分配日志、作业历史等信息的标准化访问。
  • 多种传输: 支持Stdio和SSE (Server-Sent Events) 传输协议。
  • 安全认证: 支持基于Nomad代币的身份验证。

安装步骤

  1. 安装 Go 语言: 确保您的系统安装了 Go 1.18 或更高版本。请参考 Go官方安装指南
  2. 克隆仓库:
    git clone https://github.com/kocierik/mcp-nomad.git
    cd mcp-nomad
  3. 安装依赖:
    go mod tidy
  4. 构建服务器:
    go build -o mcp-nomad main.go
    这将在当前目录下生成一个名为 'mcp-nomad' (或 'mcp-nomad.exe' on Windows) 的可执行文件。

MCP客户端配置

此服务器设计为由支持MCP的LLM客户端(如Claude等)启动和连接。客户端需要配置如何启动此服务器进程并与之通信。以下是一个示例配置(JSON格式),您可以根据实际安装路径和Nomad集群地址进行调整:

{
  "mcpServers": {
    "nomad_mcp": {
      "command": "/path/to/your/mcp-nomad", // 替换为实际的可执行文件路径
      "args": [
        "-transport=stdio", // 或 "sse",取决于客户端和服务器的连接方式
        "-port=8080",       // 如果使用 SSE 传输,指定端口
        "-nomad-addr=http://localhost:4646" // 替换为您的Nomad服务器地址
      ],
      "env": {
        "NOMAD_TOKEN": "${NOMAD_TOKEN}" // 如果您的Nomad集群启用了ACL,需要Nomad代币,可以从环境变量读取或直接配置
      }
    }
  }
}
  • 'command': 服务器可执行文件的完整路径。
  • 'args': 传递给服务器进程的命令行参数。
    • '-transport': 指定MCP传输协议('stdio' 或 'sse')。
    • '-port': 如果使用 'sse' 传输,指定服务器监听的端口。
    • '-nomad-addr': 指定要连接的Nomad服务器地址。
  • 'env': 传递给服务器进程的环境变量,例如Nomad认证所需的 'NOMAD_TOKEN'。

基本使用方法

一旦通过您的MCP客户端配置并启动了此服务器,LLM客户端就可以:

  1. 发现能力: 客户端会自动发现服务器注册的工具、资源和Prompt模板。
  2. 调用工具: 客户端可以通过JSON-RPC调用服务器提供的工具,例如调用 'list_jobs' 工具来获取Nomad作业列表,或者调用 'run_job' 来提交新的作业。
  3. 读取资源: 客户端可以通过URI访问服务器提供的资源,例如读取 'nomad://jobs/{job_id}/spec' 来获取特定作业的规范。
  4. 使用Prompt模板: 客户端可以使用服务器定义的Prompt模板来引导与用户的交互,例如使用 'job_management' 模板来协助用户执行作业相关的任务。

LLM客户端将根据用户意图,自动选择并调用合适的工具或访问资源,并通过服务器与Nomad集群进行交互。

信息

分类

开发者工具