使用说明
ansible-ollama_mcphost
用于配置的可组合Ansible角色 奥拉玛 和那个 mcphost CLI。该角色支持安装和清理流程、可选的GPU启用、多个模型提供程序和灵活的MCP服务器配置 测试.
特性
- 灵活的模型提供者支持:Ollama、OpenAI、Anthropic、谷歌
- 多种MCP服务器类型:内置(文件系统、bash、http)、本地(基于命令)和远程(基于URL)
- MCP服务器的自动发现:从标准目录自动发现和配置MCP服务器
- 从以下位置发现服务器
roles/ansible-ollama_mcphost/mcp_servers/(装运示例)和~/mcp_servers/ - SLE16支持:通过自动存储库配置明确支持SUSE Linux Enterprise 16.0
- 示例配置:现成的示例(文件系统、bash命令、web fetcher、RISU代理等)已经上线
roles/ansible-ollama_mcphost/mcp_servers/ - GPU支持:Ollama的可选GPU加速(ROCm、CUDA)
- 全面配置:完全支持所有mcphost配置选项
快速开始
安装
选项1:运行剧本(推荐)
deploy.yml 包含一切。只需运行它——不需要编辑文件或手动连接角色路径(捆绑 ansible.cfg 已将Ansible指向此结账)。放置在以下位置的每个MCP服务器 roles/ansible-ollama_mcphost/mcp_servers/ (或 ~/mcp_servers)自动拾取:
git clone https://github.com/Spectro34/ansible-ollama_mcphost.git
cd ansible-ollama_mcphost
ansible-playbook deploy.yml
选项2:参考你自己的剧本中的角色
如果要从其他剧本或CI作业中调用角色,请将其克隆到已存在的目录中 ANSIBLE_ROLES_PATH 或者在运行Ansible时临时扩展路径:
git clone https://github.com/Spectro34/ansible-ollama_mcphost.git
cd ansible-ollama_mcphost
ANSIBLE_ROLES_PATH=$(pwd):${ANSIBLE_ROLES_PATH:-$HOME/.ansible/roles} \
ansible-playbook your-playbook.yml
基本用法
标准流程(交互式CLI包装器):
./deploy.sh
包装器会引导您完成每个核心设置(模型标签、GPU切换、自动发现、,
MCP服务器、API密钥、系统提示)。按接受默认值 进入,或通过
标志(例如。, ./deploy.sh --model qwen2.5:14b --enable-gpu --servers filesystem).
跑 ./deploy.sh --help 查看每个选项以及如何向
ansible-playbook.
当你完成简短的问卷后,脚本只需简单地发送到
ansible-playbook deploy.yml 使用收集到的设置。
对于CI/CD高级用户:
ansible-playbook deploy.yml
简单的剧本不再能引发思考;它从中读取所有内容 -e 覆盖或
默认值如下所示。默认情况下,它安装Ollama+mcphost并写入 ~/.mcphost.yml,
但是 它不启用任何MCP服务器 直到你设置 auto_discover=true 或
通过传递列表 -e "mcp_servers=['filesystem']"。这使首次运行保持可预测性。
需要覆盖某些内容吗?通过 -e 运行Ansible时的值,例如:
ansible-playbook deploy.yml \
-e "mcp_servers=['filesystem','bash-commands']" \
-e "model=qwen2.5:14b" \
-e "gpu_enabled=true" \
-e "gpu_runtime=cuda"
注: 存储库附带了随时可用的MCP服务器示例 roles/ansible-ollama_mcphost/mcp_servers/.将您自己的服务器放入该目录(或 ~/mcp_servers)并重新运行剧本以自动获取它们。
核心业务
./deploy.sh--交互式、默认仅使用CPU的Ollama和 不 MCP服务器,直到您选择加入。./deploy.sh --no-prompt --model qwen2.5:14b --enable-gpu --servers filesystem--跳过问题,通过CLI标志驱动一切。ansible-playbook deploy.yml -e "mcp_servers=['filesystem','bash-commands']"--直接运行Ansible(CI友好)。ansible-playbook deploy.yml -e "gpu_enabled=true" -e "gpu_runtime=cuda"--明确启用GPU加速。ansible-playbook deploy.yml -e "ollama_state=absent" -e "mcphost_state=absent"--删除以前安装的所有内容。
将任意数量的 -e 覆盖以匹配您的环境;否则将使用默认值。
添加MCP服务器(简易工作流)
该角色支持从多个来源自动发现MCP服务器:
-
角色
roles/ansible-ollama_mcphost/mcp_servers/目录:YAML格式服务器配置(例如。,roles/ansible-ollama_mcphost/mcp_servers/bash-example/config.yml) -
用户的
~/mcp_servers/目录:以YAML格式自定义用户定义的服务器 工作流程示例: -
在下面创建(或复制)MCP服务器目录
roles/ansible-ollama_mcphost/mcp_servers/:cd roles/ansible-ollama_mcphost/mcp_servers/ mkdir my-server # Optional: copy files into my-server/ or drop an existing checkout there存储库已经附带了现成的示例,例如
filesystem,bash-commands,web-fetcher,以及risu-agent,因此您可以立即部署,而无需添加任何新内容。只有当您想添加自己的服务器时,才需要创建目录。 -
创建一个
config.yml每个服务器的文件:cat > my-server/config.yml <<'YAML' my-server: type: "local" command: ["./run-server.sh"] cwd: "{{ server_dir }}" description: "Example custom server" YAML -
部署-然后在系统提示时选择所需的服务器(CLI包装器):
cd ../../../.. ./deploy.sh # or drive it non-interactively ./deploy.sh --no-prompt --servers "bash,filesystem"
When the script prompts you, answer **“y”** to auto-discover every server, or
type the specific server names (e.g., `my-server,filesystem`) to enable only those.
Tip: entering `risu-agent` automatically expands to
`risu-agent-filesystem,risu-agent-bash`, so you only need to type the friendly alias once.
**Config File Format (`config.yml`):**
- Each `config.yml` should be in **mcphost's native format** - just the server configuration dictionary
- The file should contain only the server config, not wrapped in `mcpServers:` (the role handles that)
- Use `{{ server_dir }}` for paths relative to the server directory (automatically replaced)
- Use `${env://VAR_NAME}` for environment variable substitution in server environment variables
- The server name (key) should match the directory name or be unique
- See [roles/ansible-ollama_mcphost/mcp_servers/README.md](roles/ansible-ollama_mcphost/mcp_servers/README.md) for detailed examples
**API Keys:**
- **Recommended:** Use Ansible Vault to encrypt API keys in playbooks or variable files
```bash
# Create encrypted variable file
ansible-vault create group_vars/all/vault.yml
# Add: mcphost_provider_api_key: "your-encrypted-key"
# Or encrypt inline in playbook
mcphost_provider_api_key: !vault |
$ANSIBLE_VAULT;1.1;AES256
6638643965396631613264626361396530...
- 备选方案: 使用环境变量:
export OPENAI_API_KEY="your-key"然后设置mcphost_provider_api_key_env_var: "OPENAI_API_KEY" - 不太安全: 直接设置:
mcphost_provider_api_key: "your-key-here"(不建议用于生产) - Ollama通常不需要API密钥(使用本地服务器)
看 roles/ansible-ollama_mcphost/mcp_servers/README.md 了解详细的MCP服务器配置。
RISU单主机工作流程
roles/ansible-ollama_mcphost/mcp_servers/risu-agent/ 打包了两个内置的MCP服务器,使LLM能够交互式运行RISU诊断:
risu-agent-filesystem--只读访问RISU安装(通过RISU_AGENT_ROOT)以及/tmp用于读取RISU JSON输出risu-agent-bash--执行RISU命令(risu -l,risu --list-plugins等)和可理解的补救策略
它包含在默认的自动发现过程中,因此运行 ansible-playbook deploy.yml 够了。运行 仅 RISU代理助手,通过 -e "mcp_servers=['risu-agent-filesystem','risu-agent-bash']" (或直接输入 risu-agent 当CLI包装器询问服务器名称时)。
部署后,运行 mcphost 交互式地要求LLM运行RISU诊断。LLM将使用可用的MCP工具执行RISU命令并分析结果。
默认情况下,辅助对象指向 /usr/share/risu (与包装布局相匹配)。如果您有自定义结账,请设置 RISU_AGENT_ROOT=/path/to/risu 跑步前先穿好衣服 mcphost.
看 roles/ansible-ollama_mcphost/mcp_servers/risu-agent/README.md 详细说明。
SLE16安装
ansible-playbook examples/sle16-example.yml
看 安装.md 了解详细的安装说明。
需求
- 答案2.9或更高
- 目标系统:SLES 16.0+、openSUSE、EL 8/9、Fedora、Ubuntu、Debian
- 对于SLE16:访问SUSE客户中心或OBS存储库
角色变量
包管理
| 变量 | 默认值 | 描述 |
|---|---|---|
package_auto_refresh |
true |
在zypper主机上自动刷新包元数据(带密钥导入) |
package_refresh_command |
["zypper", "--non-interactive", "--gpg-auto-import-keys", "refresh"] |
刷新包时使用的命令 |
sle16_mcp_repo_enabled |
true |
在SLES 16+上自动添加SLE16 MCP存储库 |
sle16_mcp_repo_url |
"https://download.opensuse.org/repositories/science:/machinelearning:/mcp/SLE_16.0/science:machinelearning:mcp.repo" |
SLE16 MCP存储库URL |
sle16_mcp_repo_name |
"science:machinelearning:mcp" |
SLE16 MCP存储库名称 |
Ollama配置
| 变量 | 默认值 | 描述 |
|---|---|---|
ollama_state |
present |
present 为了安装, absent 删除 |
ollama_package_name |
"ollama" |
要安装的包名称 |
ollama_binary_path |
"/usr/bin/ollama" |
OLAMA二进制文件的路径 |
ollama_service_name |
"ollama" |
系统服务名称 |
ollama_host |
"localhost" |
Ollama服务主机 |
ollama_service_port |
11434 |
Ollama服务港口 |
ollama_model |
"gpt-oss:20b" |
默认型号标签 |
ollama_pull_models |
["gpt-oss:20b"] |
安装过程中要拉动的型号列表 |
ollama_gpu_enabled |
false |
启用GPU加速(选择加入,默认禁用) |
ollama_gpu_runtime |
"rocm" |
GPU运行时间: "rocm" 或 "cuda" |
ollama_cleanup_models |
true |
删除模型时 ollama_state=absent |
ollama_cleanup_data |
true |
删除数据目录时 ollama_state=absent |
ollama_cleanup_config |
true |
删除配置时 ollama_state=absent |
ollama_cleanup_binary |
true |
在以下情况下移除包装 ollama_state=absent |
mcphost配置
管理配置。 每次运行都会重写
~/.mcphost.yml使用以下值加上发现的MCP服务器。调整这些变量(或编辑templates/mcphost-config.yml.j2)如果你需要不同的默认值。
基本设置
| 变量 | 默认值 | 描述 |
|---|---|---|
mcphost_state |
present |
present 为了安装, absent 删除 |
mcphost_package_name |
"mcphost" |
要安装的包名称 |
mcphost_executable |
"mcphost" |
mcphost可执行文件名 |
mcphost_config_path |
"{{ ansible_env.HOME }}/.mcphost.yml" |
mcphost配置文件的路径 |
型号/提供商设置
| 变量 | 默认值 | 描述 |
|---|---|---|
mcphost_model_provider |
"ollama" |
引导时使用的提供程序 |
mcphost_model_name |
"{{ ollama_model }}" |
引导时使用的模型名称 |
mcphost_provider_url |
"http://{{ ollama_host }}:{{ ollama_service_port }}" |
提供商URL |
mcphost_provider_api_key |
"" |
API密钥(可选) |
mcphost_provider_api_key_env_var |
"" |
从中读取API键的环境变量名称 |
mcphost_tls_skip_verify |
false |
跳过TLS验证 |
mcphost_temperature |
0.7 |
默认温度 |
mcphost_max_tokens |
4096 |
默认最大令牌数 |
mcphost_top_p |
0.95 |
默认top-p |
mcphost_top_k |
40 |
默认top-k |
mcphost_stop_sequences |
[] |
默认停止顺序 |
mcphost_max_steps |
0 |
默认工具调用步骤 |
mcphost_stream |
true |
启用流媒体 |
mcphost_debug |
false |
启用调试日志记录 |
mcphost_system_prompt |
"" |
内联系统提示 |
mcphost_system_prompt_file |
"" |
系统提示文件 |
需要不同的默认值吗? 编辑
.mcphost.yml运行后或调用时调整以下变量ansible-playbook.
MCP服务器配置
| 变量 | 默认值 | 描述 |
|---|---|---|
mcphost_mcp_servers |
[] |
手动MCP服务器定义 |
mcphost_mcp_servers_auto_discover |
true |
自动发现MCP服务器 |
mcphost_mcp_servers_dirs |
["{{ role_path }}/mcp_servers", "{{ lookup('env', 'HOME') }}/mcp_servers"] |
用于搜索MCP服务器配置文件的目录 |
mcphost_mcp_servers_filter |
[] |
自动发现时的可选过滤器 |
mcphost_servers_base_path |
"" |
用于解析相对路径的基本目录 |
mcphost_cleanup_package |
false |
当状态=缺失时卸载包 |
遗留变量(已弃用)
| 变量 | 默认值 | 描述 |
|---|---|---|
mcphost_local_servers |
[] |
传统本地服务器定义(使用 mcphost_mcp_servers 相反) |
mcphost_endpoints |
[] |
传统远程端点定义(使用 mcphost_mcp_servers 相反) |
MCP服务器类型
这 mcphost_mcp_servers 变量接受服务器定义列表。每个服务器都必须有一个 name 和 type 现场。
内置服务器
内置服务器集成到mcphost中。可用的内置服务器:
fs(文件系统):文件系统操作bash:Bash命令执行http:HTTP请求
内置服务器配置
mcphost_mcp_servers:
- name: "filesystem_tmp"
type: "builtin"
builtin_name: "fs" # Required: "fs", "bash", or "http"
options: # Optional: server-specific options
allowed_directories: ["/tmp", "/home/user/documents"]
allowed_tools: # Optional: restrict available tools
- "read_file"
- "write_file"
- "list_directory"
文件系统服务器选项:
allowed_directories:服务器可以访问的目录列表
文件系统服务器工具:
read_file:读取文件内容write_file:写入文件list_directory:列出目录内容
本地服务器
本地服务器通过命令执行作为单独的进程运行。
本地服务器配置
mcphost_mcp_servers:
- name: "monitor"
type: "local"
command: ["mcp-server-monitor"] # Required: command and arguments
cwd: "/opt/monitor" # Optional: working directory
environment: # Optional: environment variables
DEBUG: "true"
API_KEY: "${env://MCP_API_KEY}" # Use environment variable substitution
description: "System monitoring server" # Optional: description
注: 使用 ${env://VAR_NAME} 配置文件中环境变量替换的语法。
远程服务器
远程服务器通过HTTP/HTTPS连接到MCP服务器。
远程服务器配置
mcphost_mcp_servers:
- name: "remote-server"
type: "remote"
url: "https://api.example.com/mcp" # Required: server URL
description: "Remote MCP server" # Optional: description
示例播放手册
该角色包括几个示例剧本 examples/ 目录:
注: 基本示例(最小、监控、内置、RISU代理等)已经存在 roles/ansible-ollama_mcphost/mcp_servers/.将其他服务器放到那里(或下面) ~/mcp_servers)并重新运行剧本以启用它们。
SLE16示例
# examples/sle16-example.yml
- hosts: localhost
become: true
roles:
- role: ansible-ollama_mcphost
sle16_mcp_repo_enabled: true
ollama_model: "gpt-oss:20b"
mcphost_mcp_servers:
- name: "filesystem"
type: "builtin"
builtin_name: "fs"
options:
allowed_directories: ["/tmp"]
OpenAI提供商
# examples/openai-example.yml
- hosts: localhost
roles:
- role: ansible-ollama_mcphost
ollama_state: absent
mcphost_model_provider: "openai"
mcphost_model_name: "gpt-4"
mcphost_provider_url: "https://api.openai.com/v1"
# Set API key via environment variable: export OPENAI_API_KEY="your-key"
mcphost_mcp_servers:
- name: "filesystem"
type: "builtin"
builtin_name: "fs"
options:
allowed_directories: ["/tmp"]
远程服务器
# examples/remote-server-example.yml
- hosts: localhost
roles:
- role: ansible-ollama_mcphost
mcphost_mcp_servers:
- name: "filesystem"
type: "builtin"
builtin_name: "fs"
options:
allowed_directories: ["/tmp"]
- name: "remote-server"
type: "remote"
url: "https://api.example.com/mcp"
description: "Remote MCP server"
可用示例
该角色包括以下示例剧本:
examples/sle16-example.yml:SLE16特定配置和存储库设置examples/openai-example.yml:OpenAI提供者配置examples/remote-server-example.yml:远程MCP服务器配置examples/ansible-runner.yml:Ansible Runner MCP服务器集成examples/risu-agent.yml:RISU诊断助手(文件系统+bash助手)
需要更多吗?在下面添加您自己的MCP服务器 roles/ansible-ollama_mcphost/mcp_servers/ (或 ~/mcp_servers)然后重新运行剧本——它们将自动合并。
部署类型
1.地方发展
与Ollama进行本地开发的最低设置:
- hosts: localhost
roles:
- role: ansible-ollama_mcphost
ollama_model: "gpt-oss:20b"
mcphost_mcp_servers:
- name: "filesystem"
type: "builtin"
builtin_name: "fs"
options:
allowed_directories: ["/tmp"]
2.GPU制作
GPU加速的生产设置:
- hosts: gpu-servers
become: true
roles:
- role: ansible-ollama_mcphost
ollama_gpu_enabled: true
ollama_gpu_runtime: "cuda" # or "rocm"
ollama_pull_models:
- "qwen2.5:32b"
- "gpt-oss:20b"
mcphost_temperature: 0.3
mcphost_max_tokens: 8192
3.云提供商集成
使用云提供商API(OpenAI、Anthropic、谷歌):
- hosts: localhost
roles:
- role: ansible-ollama_mcphost
ollama_state: absent
mcphost_model_provider: "openai"
mcphost_model_name: "gpt-4"
mcphost_provider_api_key: "{{ vault_openai_api_key }}" # From Ansible Vault
4.多服务器MCP设置
连接到多个MCP服务器(本地和远程):
- hosts: localhost
roles:
- role: ansible-ollama_mcphost
mcphost_mcp_servers:
- name: "filesystem"
type: "builtin"
builtin_name: "fs"
options:
allowed_directories: ["/tmp"]
- name: "monitor"
type: "local"
command: ["mcp-server-monitor"]
- name: "remote-api"
type: "remote"
url: "https://api.example.com/mcp"
5.RISU代理示例
RISU代理助手(文件系统+受约束的bash服务器)已经存在于此存储库中
roles/ansible-ollama_mcphost/mcp_servers/risu-agent/.禁止克隆或
需要额外的设置——只需运行标准剧本。
# Deploy with every bundled MCP server (RISU agent included)
ansible-playbook deploy.yml
# Limit the deployment to only the RISU agent helpers
ansible-playbook deploy.yml \
-e "mcp_servers=['risu-agent-filesystem','risu-agent-bash']"
部署后,运行 mcphost 交互式地要求LLM运行RISU诊断。
需要专门的剧本吗?使用 examples/risu-agent.yml:
- hosts: localhost
become: true
roles:
- role: ansible-ollama_mcphost
ollama_gpu_enabled: true # Optional
ollama_gpu_runtime: "rocm" # or "cuda"
mcphost_mcp_servers_auto_discover: true
# RISU agent servers are discovered automatically from
# roles/ansible-ollama_mcphost/mcp_servers/risu-agent/
# Set RISU_AGENT_ROOT to point at a different checkout if needed.
设置 RISU_AGENT_ROOT 环境变量(或编辑以下文件
roles/ansible-ollama_mcphost/mcp_servers/risu-agent/)如果你需要帮手
检查不同的RISU校验。
6.SLE16企业部署
带有示例配置的SLE16特定部署:
- hosts: sle16-servers
become: true
roles:
- role: ansible-ollama_mcphost
sle16_mcp_repo_enabled: true
ollama_model: "gpt-oss:20b"
mcphost_mcp_servers:
- name: "filesystem"
type: "builtin"
builtin_name: "fs"
options:
allowed_directories: ["/tmp"]
安全最佳实践
-
API密钥:切勿在行动手册中硬编码API密钥。用途:
- Ansible保险库(推荐):加密变量文件中的API密钥看 examples/vault-api-key-example.yml 举一个完整的例子。
# Create encrypted variable file ansible-vault create group_vars/all/vault.yml # Add: mcphost_provider_api_key: "your-api-key-here" # Run playbook with vault password ansible-playbook playbook.yml --ask-vault-pass # Or: ansible-playbook playbook.yml --vault-password-file ~/.vault_pass - 环境变量:
export OPENAI_API_KEY="key"然后使用mcphost_provider_api_key_env_var: "OPENAI_API_KEY" - 运行时变量:
--extra-vars "mcphost_provider_api_key=key"(不太安全)
- Ansible保险库(推荐):加密变量文件中的API密钥
-
文件系统访问:始终将文件系统服务器限制到特定目录:
options: allowed_directories: ["/tmp", "/home/user/documents"] -
工具限制:尽可能限制可用工具:
allowed_tools: ["read_file", "list_directory"] # Read-only -
TLS验证:切勿在生产环境中禁用TLS验证:
mcphost_tls_skip_verify: false # Always false in production
处理器
Reload Ollama daemon:跑步systemctl daemon-reload并在GPU配置更改时重新启动Ollama服务
标签
| 标签 | 目的 |
|---|---|
ollama |
瞄准Ollama的任务 |
mcphost |
针对mcphost任务 |
install |
运行安装/配置步骤 |
cleanup |
删除堆栈和配置 |
依赖项
没有。
许可证
麻省理工学院
