Read-only tools, a prompt and resources.
MCP AIOM gives your agent five tools to list, read and version-check the rules and to load a skill's instructions, plus a loading prompt and a catalogue of documents.
Three tools list, read and version-check the content, aiom_skill loads a skill's instructions, and aiom_load returns the loading protocol. All five are read-only: nothing they return is written or run. Content kinds are framework, specification, skill, script and template.
The read-only tool aiom_load takes {} and returns the same loading protocol as the prompt in an instructions field. The built-in collection serves framework 0.22.0. Use the tool when prompt invocation is unavailable. Explicitly call aiom_check_version with the workspace declaration, and use aiom_list_content followed by aiom_read_content when resources are unavailable. The built-in framework has kind framework and name framework, without .md. These missing client capabilities alone do not mean the server is unreachable.
Find a document and read it by name.
| Tool | Use it to | Parameters |
|---|---|---|
aiom_list_content | List the content this server can serve, each item with its name, kind and address, plus a count. Unlike the resource list it also includes skills, so use it to discover what exists. | kind (optional: framework, specification, skill, script or template; omit for all) |
aiom_read_content | Read content by its kind and exact name; Long documents come back in continued chunks. A name miss is a failed result, so list first. | kind (required), name (required), offset (optional; use returned next_offset) |
Why: list, then read what you need. The tools reject unknown properties and invalid kinds, and discover names from the listing rather than deriving them from filenames, because the built-in and directory collections name things differently.
Compare the workspace with the served framework.
| Tool | Use it to | Parameters |
|---|---|---|
aiom_check_version | Compare the framework version your workspace declares with the one this server provides. You get both versions, whether they match and a suggested next step; a mismatch is a normal result that proposes a migration, and nothing is ever migrated for you. | framework_version (or its alias version), read from the workspace's .aiom.yaml |
Why: the server cannot read your workspace, so the agent passes the declared version in. Whitespace and one pair of surrounding quotes are ignored. A match means identical text, not a compatible range. If the served collection has no VERSION, the tool fails with this server does not know its own framework version.
Read a skill's instructions in order.
| Tool | Use it to | Parameters |
|---|---|---|
aiom_skill | Return a skill's instructions, or one of its files, as text, for clients that cannot read skills natively; long text can be read in pieces. Operators can hide this tool, but hiding it does not restrict access. | name (required), offset (character offset, default 0), path (a file relative to the skill) |
Why: a long skill arrives in chunks of at most 40,000 characters, split at a heading or line where it can. While truncated: true is returned, repeat with the returned next_offset; do not guess the offset. path reads also use 40,000-character chunks and returned offsets. Generic content reads use 64,000-character chunks. Paths with .. or a backslash are rejected. Fetched text is never written to disk.
A client that implements the MCP skills extension does not need the wrapper. The server declares io.modelcontextprotocol/skills in its initialize response, and skills/list and skills/get then answer natively: skills/list returns up to 50 skills per page with a nextCursor, and skills/get takes a uri exactly as listed. Whether a client uses them is its own setting.
One loading prompt and a catalogue of documents.
| Item | What it is |
|---|---|
aiom_load (prompt) | Takes no arguments. Tells the agent the loading order: workspace declarations first, then .aiom.yaml, an explicit version check, the framework, the specifications the configuration selects, and the skills. It is static guidance, not an approval |
aiom://framework/framework | The framework document |
aiom://specification/<name> | One specification, with nested names where the collection has them |
aiom://script/<name> | One script, as text |
skill://<name>/<file> | One file inside a skill, read through resources/read; taken from skills/list, never from the resource list |
Why: the resource list is the catalogue for clients that read resources directly. Reading a URI the server does not serve returns an invalid-parameters error with Resource not found.
The server enforces a 1 MiB per-file byte ceiling, catalogue and name limits, a shared 30-per-minute tool allowance and a 60-second tool deadline. Wait for refill after a rate-limit failure and resume at the same offset. Native resources and skills do not consume that allowance, but still share content and storage bounds. See the complete limits and recovery.
What you can change.
| Setting | Default | Effect |
|---|---|---|
MCP_AIOM_CONTENT_ROOT | unset | Serve this directory instead of the built-in collection; a missing or empty directory does not fall back |
MCP_AIOM_DISABLE_SKILL_WRAPPER | unset | Any value, even 0, hides aiom_skill from tool discovery; native skills are unaffected |
MCP_AIOM_ALLOW_LOCAL_OVERRIDE or --allow-local-override | off | Makes the loading prompt say a local specification may take precedence; the server never reads your workspace |
--transport | stdio | stdio or unix; HTTP is not offered |
Keep the client-launched stdio setup for a first use. For a Unix socket, use a private directory that only your account can enter and do not use the default path under /tmp. Settings are read when the server starts, so restart it after changing one.