๐ AWX MCP - AI-Powered AWX/AAP/Ansible Automation
An industry-standard MCP server for AWX/AAP/Ansible Tower automation, enabling seamless integration between AI tools and automation platforms.
The AWX MCP Server connects AWX, Ansible Automation Platform (AAP), and Ansible Tower to AI tools. This allows AI agents and assistants to manage job templates, launch and monitor jobs, manage inventories and projects, and automate infrastructure workflows through natural language interactions.
Designed for developers aiming to integrate their AI tools with AWX/AAP/Tower automation capabilities.
โจ Supports AWX (open source), AAP (Red Hat), and Ansible Tower (legacy) - same API, same features!
๐ Quick Start
Installation Methods
You have three ways to install and run the AWX MCP Server:
| Method |
Best For |
Installation |
| ๐ฆ PyPI (pip) |
Quick install, production use |
pip install awx-mcp-server |
| ๐ง From Source |
Customization, development, enterprise forks |
Clone from GitHub, edit code |
| ๐ณ Docker |
Containerized deployment, teams |
docker run surgexlabs/awx-mcp-server |
โ For customization and running from your own repository, see INSTALL_FROM_SOURCE.md
Option 1: PyPI Installation (Recommended for Quick Start)
Install from PyPI
pip install awx-mcp-server
python -m awx_mcp_server --version
Configure for VS Code
Edit VS Code settings.json (Ctrl+, โ Search "chat.mcp"):
{
"mcpServers": {
"awx": {
"command": "python",
"args": ["-m", "awx_mcp_server"],
"env": {
"AWX_BASE_URL": "https://your-awx.com"
},
"secrets": {
"AWX_TOKEN": "your-awx-token"
}
}
}
}
Restart VS Code and the MCP server will be available in Copilot Chat.
Option 2: Install from Source (For Customization)
Perfect for: Forking, customization, enterprise deployments, contributing
Quick install:
git clone https://github.com/SurgeX-Labs/awx-mcp-server.git
cd awx-mcp-server/awx-mcp-python/server
python -m venv venv
source venv/bin/activate
pip install -e .
python -m awx_mcp_server --version
VS Code configuration (use venv Python):
{
"mcpServers": {
"awx": {
"command": "/path/to/awx-mcp-server/awx-mcp-python/server/venv/bin/python",
"args": ["-m", "awx_mcp_server"],
"env": {
"AWX_BASE_URL": "https://your-awx.com"
},
"secrets": {
"AWX_TOKEN": "your-token"
}
}
}
}
๐ Full Guide: See INSTALL_FROM_SOURCE.md for:
- Forking the repository
- Making customizations to the code
- Running from your own fork/repository
- Building custom Docker images from source
- Enterprise deployment and CI/CD
Option 3: Remote Server Mode (Team/Enterprise)
Prerequisites
- Python 3.10+
- AWX/Ansible Tower instance
- (Optional) Docker or Kubernetes
Quick Start with Docker
cd awx-mcp-python/server
docker-compose up -d
Quick Start with Python
cd awx-mcp-python/server
pip install -e .
awx-mcp-server env list
awx-mcp-server start --host 0.0.0.0 --port 8000
CLI Usage
awx-mcp-server templates list
awx-mcp-server jobs launch "Deploy App" --extra-vars '{"env":"prod"}'
awx-mcp-server jobs get 123
awx-mcp-server jobs stdout 123
awx-mcp-server projects list
awx-mcp-server projects update "My Project"
awx-mcp-server inventories list
REST API Usage
curl -X POST http://localhost:8000/api/keys \
-H "Content-Type: application/json" \
-d '{"name": "chatbot", "tenant_id": "team1", "expires_days": 90}'
curl http://localhost:8000/api/v1/job-templates \
-H "X-API-Key: awx_mcp_xxxxx"
curl -X POST http://localhost:8000/api/v1/jobs/launch \
-H "X-API-Key: awx_mcp_xxxxx" \
-H "Content-Type: application/json" \
-d '{"template_name": "Deploy App", "extra_vars": {"env": "prod"}}'
curl http://localhost:8000/api/v1/jobs/123 \
-H "X-API-Key: awx_mcp_xxxxx"
curl http://localhost:8000/api/v1/jobs/123/stdout \
-H "X-API-Key: awx_mcp_xxxxx"
Kubernetes Deployment
cd server/deployment/helm
helm install awx-mcp-server . \
--set replicaCount=3 \
--set autoscaling.enabled=true \
--set taskPods.enabled=true
See: server/README.md for detailed guide
โจ Features
Primary: MCP Server (Industry Standard) โญ RECOMMENDED
Standard MCP implementation using STDIO transport (like Postman MCP, Claude MCP)
Use Case: AI assistants (GitHub Copilot, Claude, Cursor) + AWX automation
Features:
- โ
Works with any MCP client (Copilot, Claude, Cursor, Windsurf, etc.)
- โ
Industry standard pattern (STDIO transport)
- โ
Simple installation:
pip install git+https://github.com/USERNAME/awx-mcp-server.git
- โ
Portable across all MCP-compatible tools
- โ
18+ AWX operations (templates, jobs, projects, inventories)
Best For: AI-powered automation, natural language AWX control, any MCP client
Optional: VS Code Extension (UI Enhancement)
Optional UI features for VS Code users
Use Case: VS Code users who want additional UI (sidebar views, tree providers)
Features:
- โ
Sidebar with AWX instances, jobs, metrics
- โ
Tree view of AWX resources
- โ
Configuration webview
- โ
Auto-configures MCP (or respects manual setup)
Best For: VS Code users wanting rich UI alongside MCP functionality
๐ป Usage Examples
Integrate with Custom Chatbot
import httpx
class AWXChatbot:
def __init__(self, api_key: str, base_url: str = "http://localhost:8000"):
self.api_key = api_key
self.base_url = base_url
self.headers = {"X-API-Key": api_key}
async def handle_message(self, user_message: str):
"""Process user message and call AWX API"""
if "list templates" in user_message.lower():
return await self.list_templates()
elif "launch" in user_message.lower():
template_name = self.extract_template_name(user_message)
return await self.launch_job(template_name)
elif "job status" in user_message.lower():
job_id = self.extract_job_id(user_message)
return await self.get_job(job_id)
async def list_templates(self):
async with httpx.AsyncClient() as client:
response = await client.get(
f"{self.base_url}/api/v1/job-templates",
headers=self.headers
)
return response.json()
async def launch_job(self, template_name: str, extra_vars: dict = None):
async with httpx.AsyncClient() as client:
response = await client.post(
f"{self.base_url}/api/v1/jobs/launch",
headers=self.headers,
json={"template_name": template_name, "extra_vars": extra_vars}
)
return response.json()
async def get_job(self, job_id: int):
async with httpx.AsyncClient() as client:
response = await client.get(
f"{self.base_url}/api/v1/jobs/{job_id}",
headers=self.headers
)
return response.json()
chatbot = AWXChatbot(api_key="awx_mcp_xxxxx")
response = await chatbot.handle_message("list all job templates")
Integrate with Slack Bot
from slack_bolt.async_app import AsyncApp
import httpx
app = AsyncApp(token="xoxb-your-token")
awx_api_key = "awx_mcp_xxxxx"
awx_base_url = "http://localhost:8000"
@app.message("awx")
async def handle_awx_command(message, say):
text = message['text']
if "launch" in text:
template = extract_template(text)
async with httpx.AsyncClient() as client:
response = await client.post(
f"{awx_base_url}/api/v1/jobs/launch",
headers={"X-API-Key": awx_api_key},
json={"template_name": template}
)
job = response.json()
await say(f"โ
Job launched! ID: {job['id']}, Status: {job['status']}")
๐ Documentation
Installation & Setup
- Install from PyPI - Quick install with
pip install awx-mcp-server
- Install from Source - Fork, customize, and run from your own repository
- OS Compatibility - Windows, macOS, and Linux installation and configuration
Platform Support
- AAP Support Guide - Complete guide for Ansible Automation Platform, AWX, and Ansible Tower
Deployment Architectures
- Deployment Architecture - Single-user vs Team/Enterprise deployment options
- Remote Deployment Guide - Docker, Kubernetes, and cloud deployment
- Dual-Mode Quick Start - Quick reference for choosing deployment mode
Advanced Features (Planned)
- Vault Integration - HashiCorp Vault, AWS Secrets Manager, Azure Key Vault support (v2.0.0)
- Implementation Status - Current features and roadmap
Additional Resources
- MCP Copilot Setup - VS Code MCP configuration
- Quick Reference - Common commands and examples
- AWX MCP Query Reference - Natural language query examples
๐ง Technical Details
Available AWX Operations
Both VS Code extension and web server support all 16 operations:
Environment Management
env_list - List all configured AWX environments
env_test - Test connection to AWX environment
env_get_active - Get currently active environment
Job Templates
list_job_templates - List all job templates (with filtering)
get_job_template - Get template details by name/ID
Jobs
list_jobs - List all jobs (filter by status, date)
get_job - Get job details by ID
job_launch - Launch job from template
job_cancel - Cancel running job
job_stdout - Get job output/logs
job_events - Get job events (playbook tasks)
Projects
list_projects - List all projects
project_update - Update project from SCM
Inventories
list_inventories - List all inventories
get_inventory - Get inventory details
Project Structure
awx-mcp-python/
โโโ vscode-extension/ # VS Code extension with GitHub Copilot
โ โโโ src/ # Extension TypeScript source
โ โโโ package.json # Extension manifest
โ โโโ README.md # Extension guide
โ โโโ CHANGELOG.md
โ
โ
โโโ server/ # Standalone web server
โ โโโ src/awx_mcp_server/
โ โ โโโ cli.py # CLI commands (468 lines)
โ โ โโโ http_server.py # FastAPI REST API
โ โ โโโ mcp_server.py # MCP server integration
โ โ โโโ monitoring.py # Prometheus metrics
โ โ โโโ task_pods.py # Kubernetes task pods
โ โ โโโ clients/ # AWX clients (self-contained)
โ โ โโโ storage/ # Config & credentials
โ โ โโโ domain/ # Models & exceptions
โ โโโ deployment/
โ โ โโโ docker-compose.yml # Docker Compose stack
โ โ โโโ Dockerfile # Container image
โ โ โโโ helm/ # Kubernetes Helm chart
โ โโโ pyproject.toml
โ โโโ README.md
โ
โโโ tests/ # Shared test suite
โโโ test_*.py
โโโ conftest.py
Architecture
VS Code Extension Architecture
โโโโโโโโโโโโโโโโโโโ
โ VS Code IDE โ
โ โ
โ โโโโโโโโโโโโโ โ stdio โโโโโโโโโโโโโโโโ
โ โ GitHub โโโโผโโโโtransportโโโโถโ MCP Server โ
โ โ Copilot โ โ (local) โ (shared) โ
โ โ Chat โโโโผโโโโโโโโโโโโโโโโโ 16 Tools โ
โ โโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโ
โ โ โ
โ โโโโโโโโโโโโโ โ โ
โ โ @awx Chat โ โ โ
โ โParticipantโ โ โผ
โ โโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโ โ AWX โ
โ Instance โ
โโโโโโโโโโโโโโโโ
Flow:
- User types
@awx list templates in Copilot Chat
- Extension sends MCP request to local server via stdio
- MCP server calls AWX REST API
- Results returned to Copilot Chat
- AI formats response naturally
Web Server Architecture
โโโโโโโโโโโโโโโโ REST API โโโโโโโโโโโโโโโโ
โ Chatbot โโโโโโโโโโโโโโโโโโโโโโถโ FastAPI โ
โ /Custom App โ (HTTP/JSON) โ Server โ
โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโ REST API โ
โ Slack Bot โโโโโโโโโโโโโโโโโโโโโโถโ
โโโโโโโโโโโโโโโโ โ
โ
โโโโโโโโโโโโโโโโ CLI โ
โ Terminal โโโโโโโโโโโโโโโโโโโโโโถโ
โ Scripts โ (commands) โ
โโโโโโโโโโโโโโโโ โ
โ
โโโโโโโโดโโโโโโโโ
โ โ
โ Clients โ
โ REST + CLI โ
โ โ
โโโโโโโโฌโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโ
โ AWX โ
โ Instance โ
โโโโโโโโโโโโโโโโ
Flow:
- Client (chatbot/CLI) sends HTTP request with API key
- FastAPI server authenticates request
- Server calls AWX API via composite client
- Results returned as JSON
- Client formats for end user (Slack, terminal, etc.)
Security
VS Code Extension
- Credentials stored in VS Code secure storage
- Local server only (no network exposure)
- Environment-based isolation
Web Server
- API key authentication (SHA-256 hashed)
- Multi-tenant isolation
- Configurable key expiration
- HTTPS recommended for production
- Environment variables for secrets
Deployment Options
For VS Code Extension
- Install extension from .vsix file
- MCP server runs automatically when VS Code starts
- No additional infrastructure needed
For Web Server
Development
cd server
pip install -e .
awx-mcp-server start
Production - Docker
cd server
docker-compose up -d
Includes: Server, Prometheus, Grafana
Production - Kubernetes
cd server/deployment/helm
helm install awx-mcp-server . \
--set autoscaling.enabled=true \
--set taskPods.enabled=true \
--set ingress.enabled=true
Features:
- Horizontal Pod Autoscaling (HPA)
- Task pods (ephemeral Job per operation)
- Prometheus monitoring
- Ingress support
Development
Prerequisites
- Python 3.10+
- Node.js 18+ (for VS Code extension)
- Docker (optional)
- Kubernetes cluster (optional)
Setup Development Environment
git clone https://github.com/your-org/awx-mcp.git
cd awx-mcp/awx-mcp-python
cd shared
pip install -e ".[dev]"
cd ../server
pip install -e ".[dev]"
cd ../vscode-extension
npm install
cd ../tests
pytest -v
Running Tests
cd server
pytest tests/ -v --cov
cd tests
pytest test_mcp_integration.py -v
Building VS Code Extension
cd vscode-extension
npm run package
Monitoring (Web Server)
Access monitoring dashboards:
- Prometheus: http://localhost:9090
- Grafana: http://localhost:3000 (admin/admin)
- Metrics Endpoint: http://localhost:8000/prometheus-metrics
Available Metrics
awx_mcp_requests_total - Total requests by tenant/endpoint
awx_mcp_request_duration_seconds - Request latency
awx_mcp_active_connections - Active connections per tenant
awx_mcp_tool_calls_total - MCP tool invocations
awx_mcp_errors_total - Error count by type
๐ค Contributing
We welcome contributions! Please:
- Fork the repository
- Create a feature branch
- Make your changes with tests
- Submit a pull request
Code Style
- Python: Follow PEP 8, use type hints
- TypeScript: Follow ESLint rules
- Write tests for new features
- Update documentation
๐ License
MIT License - see LICENSE file
๐ Support
- Issues: https://github.com/your-org/awx-mcp/issues
- Discussions: https://github.com/your-org/awx-mcp/discussions
- Documentation: See README files in subdirectories
๐ Quick Reference
VS Code Extension Commands
Ctrl+Shift+P โ AWX: Configure Environment
Ctrl+Shift+P โ AWX: Test Connection
Ctrl+Shift+P โ AWX: Switch Environment
- In Copilot Chat:
@awx <your command>
Web Server CLI Commands
awx-mcp-server start
awx-mcp-server env list
awx-mcp-server templates list
awx-mcp-server jobs launch "Template"
awx-mcp-server jobs get 123
awx-mcp-server projects list
awx-mcp-server inventories list
Web Server API Endpoints
POST /api/keys # Create API key
GET /api/v1/environments # List environments
GET /api/v1/job-templates # List templates
POST /api/v1/jobs/launch # Launch job
GET /api/v1/jobs/{id} # Get job
GET /api/v1/jobs/{id}/stdout # Get output
GET /api/v1/projects # List projects
GET /api/v1/inventories # List inventories
GET /health # Health check
GET /prometheus-metrics # Metrics
GET /docs # API documentation
Made with โค๏ธ for AWX automation and AI integration