Show HN: Rocannon – Any Ansible module to MCP Tool, record sessions as playbooks Rocannon, a new open-source tool, converts any installed Ansible module or role into a typed MCP (Model Context Protocol) tool, enabling AI assistants like Claude Code and Cursor to drive real infrastructure via natural language. The tool also records sessions as standard Ansible playbooks and supports dry runs, check mode, and a CLI interface. Every installed Ansible module and role, as a typed MCP tool. Rocannon runs on your Ansible control node and turns it into an MCP server. At startup it reads ansible-doc and exposes every module you have installed plus any role with an argument spec as a typed tool, so an MCP client like Claude Code, Cursor, or your own agent can drive your real environment in plain English. The tool surface is whatever you have installed, one collection or a hundred. Claude Haiku driving Rocannon's typed Ansible tools against a real RHEL 9 host. pip install rocannon This brings ansible-core and ansible-runner with it. rocannon doctor checks the environment for anything missing. rocannon quickstart Scaffolds a localhost profile under .rocannon/ and prints the wiring for your MCP client Claude Code, Claude Desktop, Cursor plus a command to confirm the tools registered. Then ask your assistant something like "Gather facts from localhost and tell me the OS and kernel version." You don't need an LLM, though. The same tools are a shell: rocannon mcp doctor --profile .rocannon/quickstart.yml list registered tools rocannon repl --profile .rocannon/quickstart.yml operator shell Reflects your modules. Each installed module becomes a typed MCP tool, with parameters, types, defaults, and choices read from ansible-doc . Whatever you install shows up automatically. Reflects your roles. A role with a meta/argument specs.yml becomes a typed tool too; its arguments are the parameters, validated by ansible at run time. Carries the metadata. Tools get safety hints read-only vs destructive , collection and namespace tags, and a meta block with the module's documented requirements, return keys, and version, straight from ansible-doc . No lock-in. Record any session, from an agent or the CLI, to a standard Ansible playbook under .rocannon/playbooks/ that runs with plain ansible-playbook . Saved sessions also load back as MCP prompts. Dry runs. Modules that support check mode expose --check and --diff , both on the CLI and as MCP tool parameters. A CLI, too. Every module is a subcommand: rocannon ansible.builtin.copy --target h1 -i hosts --src a --dest b . : natural language to ad-hoc Ansible on a real RHEL 9 host, then replayed as a standard playbook. examples/case-study : the same agent driving a two-node Arista cEOS fabric, where the examples/containerlab arista.eos modules become tools.: Rocannon baked into an Ansible Execution Environment for a frozen, reproducible tool set. examples/execution-environment A profile is a YAML file declaring an inventory plus the modules and roles to expose: inventories: - ./hosts modules: - ansible.builtin - community.docker roles: optional - my ns.my coll.setup web roles path: ./roles optional, for standalone non-collection roles takes a module modules ansible.builtin.copy , a collection ansible.builtin , or a namespace community . Only modules become tools; filter and lookup plugins are skipped.takes a collection role by FQCN, or a standalone role by its directory name together with roles roles path which resolves against the profile's own directory . Roles without an argument spec are skipped.- Optional keys: ansible cfg , vault password file , extra envvars . Drop multiple profiles in .rocannon/profiles/ with a default.yml and switch at runtime via the rocannon list profiles , rocannon current profile , and rocannon use profile tools. Dependencies:modules with third-party Python libraries for example community.crypto needs cryptography , community.docker needs the docker SDK need them installed in the same environment as Rocannon. The quickstart inventory pins ansible python interpreter so localhost runs use it. rocannon quickstart scaffold a localhost profile and print client wiring rocannon