Foreman MCP 服务器

Foreman MCP 服务器是一个用于与 Foreman 实例交互的工具,支持远程执行任务和内容视图操作,适用于系统管理和自动化任务。

  • by theforeman
  • Python
  • 本地部署
  • 11 星标
  • 更新于
在 GitHub 查看 theforeman/foreman-mcp-server

使用说明

工头mcp服务器

如何跑步

将VSCode与Copilot一起使用

通过uv启动服务器

uv run foreman-mcp-server \
  --foreman-url https://foreman.example.com \
  --foreman-username $FOREMAN_USERNAME \
  --foreman-password $FOREMAN_PASSWORD \
  --log-level debug \
  --host localhost \
  --port 8080 \
  --transport stdio \
  --no-verify-ssl

如果未提供默认值:

  --foreman-url https://$hostname
  --log-level INFO
  --host '127.0.0.1'
  --port 8080
  --transport streamable-http
  --verify-ssl

使用自定义CA证书

如果您的Foreman实例使用自定义CA证书,您有几个选项:

  1. 使用 --ca-bundle 选项或 FOREMAN_CA_BUNDLE 环境变量:
uv run foreman-mcp-server \
  --foreman-url https://foreman.example.com \
  --foreman-username $FOREMAN_USERNAME \
  --foreman-password $FOREMAN_PASSWORD \
  --ca-bundle /path/to/ca-bundle.pem
  1. 将您的CA证书放置为 ./ca.pem 在工作目录中(自动检测):
cp /path/to/ca-bundle.pem ./ca.pem
uv run foreman-mcp-server \
  --foreman-url https://foreman.example.com \
  --foreman-username $FOREMAN_USERNAME \
  --foreman-password $FOREMAN_PASSWORD

通过podman启动服务器

首先,构建容器:

podman build -t foreman-mcp-server .

现在运行容器:

podman run -it -p 8080:8080 foreman-mcp-server \
  --foreman-url https://my-foreman-instance.something.somewhere \
  --log-level debug \
  --host localhost \
  --port 8080 \
  --transport streamable-http

在容器中使用自定义CA证书

要在容器中使用自定义CA证书,您可以将CA捆绑包装载到默认值 ca.pem 位置(自动检测)或指定自定义路径:

选项1:安装到默认位置(推荐)

# Standard container or UBI9 image - mount to /app/ca.pem
podman run -it -p 8080:8080 \
  -v /path/to/your-ca-bundle.pem:/app/ca.pem:ro,Z \
  foreman-mcp-server \
  --foreman-url https://my-foreman-instance.something.somewhere \
  --transport streamable-http

**Option 2: Mount to custom location**
```shell
podman run -it -p 8080:8080 \
  -v /path/to/your-ca-bundle.pem:/custom/ca.pem:ro,Z \
  foreman-mcp-server \
  --foreman-url https://my-foreman-instance.something.somewhere \
  --ca-bundle /custom/ca.pem \
  --transport streamable-http

配置VSCode

# settings.json
{
    "mcp": {
        "servers": {
            "foreman": {
                "url": "http://127.0.0.1:8080/mcp/sse",
                "type": "http",
                  "headers": {
                    "FOREMAN_USERNAME": "login",
                    "FOREMAN_TOKEN": "token"
                  }
            }
        }
    },
}

运行VSCode客户端

  • 按Ctrl+Shift+P
  • 选择MCP:列出服务器命令
  • 选择领班
  • 按启动服务器

在Copilot聊天中使用

  • 按Ctrl+Alt+I打开聊天
  • 在配置工具中,仅选择MCP工具
  • 聊天中可以列出提示,例如/mcp.foreman.basic_hosts_pending_sec_updates_static_report
  • 可以通过添加上下文来附加资源。..>MCP资源>资源

使用MCP检查器

与mcp检查器一起使用

  1. 以以下方式启动检查器 npx @modelcontextprotocol/inspector
  2. 打开 http://localhost:6274 在浏览器中
  3. 集 Type 到 Streamable HTTP 和 URL 到 http://localhost:8080/mcp
  4. 点击连接

在Linux上使用Claude桌面

注:这是高度实验性的。在运行CentOS Stream 9的虚拟机中测试。

安装

  • 遵循安装步骤https://github.com/bsneed/claude-desktop-fedora?tab=readme-ov文件#1 fedora-package-new
  • 如果它没有启动,试试`npm i-g electronic

配置

# ~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "foreman": {
      "command": "uv",
      "args": ["--directory", "/home/$USER/foreman-mcp-server", "run","foreman-mcp-server", "--transport", "stdio", "--foreman-username", "login", "--foreman-password", "password/token"],
    }
  }
}

要在Claude Desktop中使用自定义CA证书,请执行以下操作:

# ~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "foreman": {
      "command": "uv",
      "args": ["--directory", "/home/$USER/foreman-mcp-server", "run","foreman-mcp-server", "--transport", "stdio", "--foreman-username", "login", "--foreman-password", "password/token", "--ca-bundle", "/path/to/ca-bundle.pem"],
    }
  }
}

运行Claude客户端

这将启动UI应用程序,登录您的帐户。它将自动启动并连接到MCP服务器。

claude-desktop
  • 点击 + 按钮>从工头添加:>从服务器中选择任何提示和资源
  • 单击配置按钮从服务器中选择工具

远程执行功能

MCP服务器可以触发Foreman主机上的远程执行作业。此功能是 选择加入 出于安全原因,默认情况下禁用。

启用远程执行

要启用远程执行,您必须使用 --allowed-rex-features 选项或 FOREMAN_ALLOWED_REX_FEATURES 环境变量:

uv run foreman-mcp-server \
  --foreman-url https://foreman.example.com \
  --foreman-username $FOREMAN_USERNAME \
  --foreman-password $FOREMAN_PASSWORD \
  --allowed-rex-features "katello_errata_install,katello_package_install"

或者使用环境变量:

export FOREMAN_ALLOWED_REX_FEATURES="katello_errata_install,katello_package_install"
uv run foreman-mcp-server ...

运作原理

  1. 基于允许列表的安全:中仅明确列出了远程执行功能 --allowed-rex-features 可以被触发。任何使用不在列表中的功能的尝试都将被拒绝。

  2. 可用功能资源:配置允许的功能后,资源将在以下位置可用 foreman://remote_execution/allowed_features此资源返回有关每个允许功能的信息,包括:

    • 特征标签、ID、名称和描述
    • 关联的作业模板ID和名称
    • 任何错误(例如,如果Foreman中不存在该功能)
  3. 触发工具:The trigger_remote_execution_job 该工具仅在至少允许一个功能时启用。要使用它,AI代理应该:

    1. 阅读“允许的远程执行功能”资源以查看可用功能
    2. 为任务选择合适的功能
    3. 使用 call_foreman_api_get 读取功能的作业模板(resource: "job_templates", action: "show")查看它接受哪些输入
    4. 呼叫 trigger_remote_execution_job 使用特征标签、搜索查询和适当的输入

常见远程执行功能

以下是一些常用的远程执行功能标签:

功能标签 描述
katello_errata_install 在主机上安装勘误表
katello_package_install 在主机上安装软件包
katello_package_update 更新主机上的包
katello_package_remove 从主机中删除包
katello_host_tracer_resolve 解析Tracer检测到的服务

要在Foreman实例中查找所有可用功能,可以使用API:

curl -u $USER:$PASSWORD https://foreman.example.com/api/remote_execution_features

内容视图操作

MCP服务器可以发布、推广和增量更新内容视图。此功能是 选择加入 出于安全原因,默认情况下禁用。

启用内容视图操作

要启用内容视图操作,您必须使用 --allowed-cv-actions 选项或 FOREMAN_ALLOWED_CV_ACTIONS 环境变量:

uv run foreman-mcp-server \
  --foreman-url https://foreman.example.com \
  --foreman-username $FOREMAN_USERNAME \
  --foreman-password $FOREMAN_PASSWORD \
  --allowed-cv-actions "publish,promote,incremental_update"

或者使用环境变量:

export FOREMAN_ALLOWED_CV_ACTIONS="publish,promote,incremental_update"
uv run foreman-mcp-server ...

运作原理

  1. 基于允许列表的安全:仅在中明确列出的内容视图操作 --allowed-cv-actions 可以被触发。如果该选项未设置或为空,则禁用所有内容视图工具。

  2. 可用工具:当允许执行特定操作时,相应的工具将启用:

操作 工具 描述
publish publish_content_view 发布内容视图的新版本
promote promote_content_view_version 将内容视图版本推广到生命周期环境
incremental_update incremental_content_view_update 执行增量更新,向内容视图版本添加勘误表
  1. 使用流程:要使用内容查看工具,AI代理应:
    1. 使用 call_foreman_api_get 查找内容视图(资源: "content_views",行动: "index")
    2. 发布新版本 publish_content_view
    3. 升级版本 promote_content_view_version
    4. 使用 poll_task 监控任务进度