list_inventoriesLABSCO SUMMARY
Domain validation on the documentation server is a real security property, not a feature bullet.
A documentation tool that fetches whatever URL a model produces is a prompt-injection surface; restricting it to 50+ official Red Hat domains removes that class of problem, and the PDF-first strategy is what makes Red Hat's JavaScript-rendered pages readable at all. The four-server split is the other decision worth using: give an assistant only the lint and documentation servers and it can review automation without being able to run any of it.
What it is
A four-server suite covering Ansible Automation Platform, Event-Driven Ansible, ansible-lint and Red Hat's official documentation. Splitting them lets you run only what you need: the AAP server handles inventories, jobs, templates and projects plus Galaxy content discovery; the EDA server manages activations and rulebooks; the lint server validates playbooks, files and whole projects against quality profiles; and the documentation server fetches Red Hat content with domain validation, so only official Red Hat sources are reachable.
What you get
- AAP inventories and hosts listed, created and populated —
list_inventories,get_inventory,create_inventory,list_hosts,add_host_to_inventory - Jobs run from templates and followed to completion, with ad-hoc commands as the escape hatch —
run_job,job_status,job_logs,list_job_templates,create_job_template,run_adhoc_command - Projects created, listed and synced from source control, with the update job's status and logs —
create_project,list_projects,get_project,update_project,list_project_updates,get_project_update,get_project_update_logs - Event-Driven Ansible activations enabled, disabled, restarted and inspected, with rulebooks and decision environments —
list_activations,get_activation,create_activation,enable_activation,disable_activation,restart_activation,list_rulebooks,get_rulebook,list_decision_environments - Ansible content linted at every granularity — pasted playbook text, a file on disk, a role directory, or a whole project — with syntax-only checks for fast feedback and context-aware best-practice checking for dev, staging or production —
lint_playbook,lint_file,lint_role,validate_syntax,check_best_practices,analyze_project,list_rules,list_tags,get_ansible_lint_version - Galaxy collections and roles searched, with details and use-case-driven suggestions that take your existing AAP inventories into account —
search_galaxy_collections,search_galaxy_roles,get_collection_details,get_role_details,suggest_ansible_content - Red Hat documentation read and searched across 50+ validated official domains, with a PDF-first strategy that works around Red Hat's JavaScript rendering, and product and guide listings —
read_documentation,list_products,search_documentation,search_documentation_enhanced,search_with_web_guidance,smart_documentation_finder,get_product_guides,recommend_content
Requirements
An Ansible Automation Platform instance and a valid AAP API token with Write scope — create it under User Settings > Tokens, or through the tokens API endpoint. Python 3.11 or higher and uv sync (or pip install -e .) from a clone. AAP_TOKEN and AAP_URL are required for the AAP server, EDA_TOKEN and EDA_URL for the EDA server; the EDA token can be the same one. REDHAT_USERNAME and REDHAT_PASSWORD are optional and only needed for Red Hat Customer Portal content behind a subscription. Each of the four servers is registered separately in the client, so you can enable only the ones you need.
Setup effort
Build from source — git clone https://github.com/sibilleb/AAP-Enterprise-MCP-Server.git
USE CASES
Running a job and finding out why it failed
Launch the template, poll the job status, and read the logs — without opening the AAP web interface.
Reviewing a playbook before it goes anywhere near production
Lint the content with a production-appropriate profile, check the syntax, and analyse the whole project structure for what the file-level pass misses.
Finding the right collection instead of writing it yourself
Describe the use case and get suggested Galaxy content, then read the collection's details and installation instructions.
Answering a Red Hat question from official sources only
Search the validated domains, list the product's guides with version sorting, and read the page as a PDF where the HTML will not render.
49 tools
Listed in project docs. Your client may show a different list.
get_inventorycreate_inventorylist_hostsadd_host_to_inventoryrun_jobjob_statusjob_logslist_job_templatescreate_job_templatecreate_projectrun_adhoc_commandlist_projectsget_projectlist_project_updatesget_project_updateget_project_update_logsupdate_projectsearch_galaxy_collectionssearch_galaxy_rolesget_collection_detailsget_role_detailssuggest_ansible_contentlint_playbooklint_filelint_rolevalidate_syntaxcheck_best_practicesanalyze_projectlist_ruleslist_tagsget_ansible_lint_versionlist_activationsget_activationcreate_activationenable_activationdisable_activationrestart_activationlist_rulebooksget_rulebooklist_decision_environmentsread_documentationlist_productssearch_documentationsearch_documentation_enhancedsearch_with_web_guidancesmart_documentation_finderget_product_guidesrecommend_contentBEFORE YOU INSTALL
What to know first
Tools you get
49 tools named in the project's documentation.
Requires
- Python 3.11 or later
- AAP_TOKEN in your environment
- EDA_TOKEN in your environment
Optional
- REDHAT_PASSWORD in your environment
- REDHAT_USERNAME in your environment
INSTALLATION
Connect your client
You clone this one yourself.
Server setup
git clone https://github.com/sibilleb/AAP-Enterprise-MCP-Server.git
cd AAP-Enterprise-MCP-Server
uv syncMCP Clients
Claude Desktop, Cursor
{
"mcpServers": {
"ansible": {
"command": "uv",
"args": [
"--directory",
"<YOUR_PATH_TO_AAP_ENTERPRISE_MCP_SERVER>",
"run",
"ansible.py"
],
"env": {
"AAP_TOKEN": "<YOUR_AAP_TOKEN>",
"AAP_URL": "<YOUR_AAP_URL>/api/controller/v2"
}
},
"eda": {
"command": "uv",
"args": [
"--directory",
"<YOUR_PATH_TO_AAP_ENTERPRISE_MCP_SERVER>",
"run",
"eda.py"
],
"env": {
"EDA_TOKEN": "<YOUR_EDA_TOKEN>",
"EDA_URL": "<YOUR_AAP_URL>/api/eda/v1"
}
},
"ansible-lint": {
"command": "uv",
"args": [
"--directory",
"<YOUR_PATH_TO_AAP_ENTERPRISE_MCP_SERVER>",
"run",
"ansible-lint.py"
]
},
"redhat-docs": {
"command": "uv",
"args": [
"--directory",
"<YOUR_PATH_TO_AAP_ENTERPRISE_MCP_SERVER>",
"run",
"redhat_docs.py"
],
"env": {
"REDHAT_USERNAME": "<YOUR_REDHAT_USERNAME>",
"REDHAT_PASSWORD": "<YOUR_REDHAT_PASSWORD>"
}
}
}
}