foreman-mcp-server 0.4.2
MCP server for Foreman host management and infrastructure automation
License: MIT
Requires Python: >=3.10
Keywords: mcp, foreman, infrastructure, automation

# 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)