# Foreman MCP Server [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Pylint](https://github.com/InfraMCP/foreman-mcp-server/actions/workflows/pylint.yml/badge.svg)](https://github.com/InfraMCP/foreman-mcp-server/actions/workflows/pylint.yml) [![Safety Security Scan](https://github.com/InfraMCP/foreman-mcp-server/actions/workflows/safety-scan.yml/badge.svg)](https://github.com/InfraMCP/foreman-mcp-server/actions/workflows/safety-scan.yml) [![Dependency Security Check](https://github.com/InfraMCP/foreman-mcp-server/actions/workflows/dependency-security.yml/badge.svg)](https://github.com/InfraMCP/foreman-mcp-server/actions/workflows/dependency-security.yml) MCP server for Foreman host management and infrastructure automation. ## Features - List and search hosts from Foreman - Get detailed host information - Search by location, OS, and environment - Generic configuration via environment variables ## Installation ### From PyPI (Recommended) ```bash pip install foreman-mcp-server ``` ### From Source ```bash git clone https://github.com/rorymcmahon/foreman-mcp-server.git cd foreman-mcp-server pip install -e . ## Configuration Set the following environment variables: - `FOREMAN_URL`: Base URL of your Foreman instance (e.g., `https://foreman.example.com`) - `FOREMAN_USERNAME`: Foreman username - `FOREMAN_PASSWORD`: **Personal Access Token** (not your web login password - create this in User Administration → Personal Access Tokens) - `FOREMAN_VERIFY_SSL`: Whether to verify SSL certificates (default: `true`) ### Required Permissions The user account needs the following minimum permissions to use all MCP server tools: | Resource Type | Permission | Purpose | |---------------|------------|---------| | Host | `view_hosts` | List and search hosts, get host details and status | | Organization | `view_organizations` | List organizations | | Location | `view_locations` | List locations | | Hostgroup | `view_hostgroups` | List and search by hostgroups | | Subnet | `view_subnets` | List subnets and get subnet details | | Domain | `view_domains` | List domains and get domain details | | SmartProxy | `view_smart_proxies` | List smart proxies and get proxy details | ### Recommended Roles Instead of assigning individual permissions, you can use these built-in roles: | Role | Description | Recommended For | |------|-------------|-----------------| | **Viewer** | Read-only access to most Foreman resources | General monitoring and inventory queries | | **Ansible Tower Inventory Reader** | Specific permissions for inventory access | Automated systems integration | | **Organization admin** | Full access within assigned organizations | Organization-specific administration | **Note**: The "Viewer" role provides the most appropriate permissions for this MCP server's read-only operations. ## MCP Configuration Add to your MCP client configuration: ```json { "foreman-mcp-server": { "command": "foreman-mcp-server", "env": { "FOREMAN_URL": "https://foreman.example.com", "FOREMAN_USERNAME": "your-username", "FOREMAN_PASSWORD": "your-password", "FOREMAN_VERIFY_SSL": "true" } } } ``` ## Available Tools ### Host Management - `list_hosts(search, per_page, page)` - List hosts with optional search - `get_host(host_id)` - Get detailed host information - `get_host_status(host_id)` - Get status information for a specific host ### Host Search Functions - `search_hosts_by_location(location, per_page)` - Search by location - `search_hosts_by_os(os_name, per_page)` - Search by operating system - `search_hosts_by_environment(environment, per_page)` - Search by environment - `search_hosts_by_hostgroup(hostgroup, per_page)` - Search by hostgroup - `search_hosts_by_fact(fact_name, fact_value, per_page)` - Search by custom facts ### Infrastructure Information - `list_organizations(per_page)` - List all organizations - `list_locations(per_page)` - List all locations - `list_hostgroups(per_page)` - List all hostgroups - `list_subnets(per_page)` - List all subnets - `get_subnet(subnet_id)` - Get detailed subnet information - `list_domains(per_page)` - List all domains - `get_domain(domain_id)` - Get detailed domain information - `list_smart_proxies(per_page)` - List all smart proxies - `get_smart_proxy(proxy_id)` - Get detailed smart proxy information ### OS Management - `list_operatingsystems(per_page)` - List all operating systems - `get_operatingsystem(os_id)` - Get detailed operating system information - `list_architectures(per_page)` - List all architectures - `get_architecture(arch_id)` - Get detailed architecture information - `list_media(per_page)` - List all installation media - `get_media(media_id)` - Get detailed installation media information ### Content Management - `list_content_views(per_page)` - List all content views - `get_content_view(cv_id)` - Get detailed content view information - `list_repositories(per_page)` - List all repositories - `get_repository(repo_id)` - Get detailed repository information - `list_lifecycle_environments(per_page)` - List all lifecycle environments - `get_lifecycle_environment(env_id)` - Get detailed lifecycle environment information ## Development ```bash pip install -e ".[dev]" pytest ``` ## Support - [GitHub Issues](https://github.com/rorymcmahon/foreman-mcp-server/issues) - [Changelog](CHANGELOG.md)