Skip to main content
Glama
aion-mcp

aion-mcp

by draygen

aion-mcp (mcpbuilder)

A Model Context Protocol server that gives an MCP client (Claude Desktop, Codex, etc.) a single set of tools for driving the AION assistant stack and the surrounding home fleet. It speaks MCP over stdio and is spawned on demand by the client — there is no long-running daemon to manage.

It is the client half of the aion-suite integration: aion-mcp calls aion-core (Flask, 127.0.0.1:5000), which in turn talks to Ollama and Postgres.

MCP client (Claude Desktop / Codex)
        │  stdio
        ▼
   aion-mcp  ──HTTP──▶  aion-core (Flask :5000)  ──▶  Ollama (GPU) + Postgres
        │
        └──SSH──▶  fleet machines (draydev / ec2) + Kali container

Tool groups

Tools are organized into modules under src/, exposing ~45 tools total:

Module

Tools

What it does

aion-api-tools.ts

aion_api_chat, aion_channels, aion_channel_history, aion_channel_presence, aion_activity, aion_memory_browse, aion_admin_*, aion_vast_*, aion_admin_network_run

AION Core HTTP API: service chat, channels/presence, activity feed, fact-memory browse, admin, and Vast.ai GPU orchestration

memory-tools.ts

memory + conversation/profile tools

Read/write AION's SQLite-backed memory and conversation history

chat-tools.ts

chat/image/model tools

Direct chat, image generation, and model endpoints

sonchat-tools.ts

sonchat_*

Bridge to the sonchat service

portal-tools.ts

portal_*

Portal service endpoints

fleet-tools.ts

fleet_status, fleet_run, fleet_review

Fan out agent runs across wsl / draydev / ec2 over SSH

kali-tools.ts

kali_*

Run security tooling inside a Kali Docker container over SSH

system-tools.ts

system_status, …

Local host/service status

Related MCP server: mcp-ssh-multi

Build & run

npm install
npm run build     # tsc → dist/
npm start         # node dist/index.js  (stdio server)
npm run dev       # tsx src/index.ts     (no build step)
npm run gateway   # node dist/fleet-gateway.js  (read-only fleet status over HTTP :5100)

Fleet gateway

fleet-gateway.ts is a tiny read-only HTTP service (localhost :5100) that exposes the same fleet_status probe used by the MCP fleet_status tool, so a web page can read machine/agent health even though the MCP server itself is stdio-only. It backs AION's /fleet topology page and chat control hook.

  • GET /health, GET /fleet/status — read-only, background-refreshed cache (fast page loads).

  • POST /fleet/run, POST /fleet/review — guarded writes wrapping fleet_run / fleet_review.

Writes are gated: if FLEET_GATEWAY_TOKEN is set they require a matching x-fleet-token header (the status probe stays open); set FLEET_GATEWAY_WRITE=off to disable writes entirely. AION stages a confirmation before calling the write endpoints. Config: FLEET_GATEWAY_PORT (5100), FLEET_GATEWAY_HOST (127.0.0.1), FLEET_GATEWAY_TTL_MS (120000), FLEET_GATEWAY_TOKEN, FLEET_GATEWAY_WRITE.

The compiled dist/ is committed so the server runs via npx/node dist/index.js without a build step on the client machine.

Configuration

All host-specific values and secrets come from the environment — nothing sensitive is committed. .env and claude_desktop_config.json are git-ignored; there are no hardcoded credential fallbacks (an unset secret disables the affected tool with a clear error rather than falling back to a real password).

Variable

Used by

Default

Notes

AION_HOST / AION_PORT

aion-api

127.0.0.1 / 5000

AION Core Flask API

AION_SERVICE_TOKEN

aion_api_chat

—

X-Aion-Service-Token for /api/service/chat; no user session needed. Required — chat is disabled if unset

AION_SESSION_TOKEN

session-scoped aion tools

—

Value of the aion_token cookie after logging in; required for channels/activity/memory/admin/vast tools

KALI_HOST / KALI_USER / KALI_PASS / KALI_IMAGE

kali

192.168.0.200 / draygen / — / kali-custom:latest

KALI_PASS required; kali tools return an error if unset

FLEET_DRAYDEV_HOST / FLEET_DRAYDEV_USER / FLEET_DRAYDEV_PASS

fleet

derived / draygen / —

draydev SSH; if no password/SSH string is configured the machine is skipped with a clear error

FLEET_EC2_SSH, FLEET_TIMEOUT_MS, FLEET_MAX_DEPTH

fleet

— / 180000 / 2

ec2 SSH string; per-run timeout; recursion guard on delegated fleet runs

Claude Desktop

Register the server in claude_desktop_config.json (kept local, not committed):

{
  "mcpServers": {
    "aion": {
      "command": "node",
      "args": ["/mnt/c/projects/mcpbuilder/dist/index.js"],
      "env": {
        "AION_SERVICE_TOKEN": "…",
        "AION_SESSION_TOKEN": "…"
      }
    }
  }
}

To get AION_SESSION_TOKEN: log in to AION at http://127.0.0.1:5000, open DevTools → Application → Cookies, and copy the aion_token value.

Security notes

  • No secrets in the repo: .env and claude_desktop_config.json are ignored and were scrubbed from history; committed source has no credential fallbacks.

  • aion_memory_browse and all session-scoped tools require AION_SESSION_TOKEN — they do not silently run unauthenticated.

  • kali_* and fleet_* run commands on remote hosts over SSH and are intended for the author's own lab/home fleet only.

Status

Built and tested working end-to-end against a live AION stack — see aion-suite/QA_MCP_AION_FLEET_REPORT.md (45 tools registered, service + session endpoints passing, fleet fan-out verified).

Available Tools

45 tools
aion_activityA

Get recent audit/activity events from Aion (joins, messages, logins, etc.). Requires AION_SESSION_TOKEN.

Inputs: limit.

aion_admin_network_runB

Run a network intelligence command (nmap, nikto, etc.) via Aion's admin panel. Requires AION_SESSION_TOKEN with admin access.

Inputs: command (required), target.

aion_admin_profile_rebuildA

Trigger a rebuild of Aion's cached system prompt profile (re-summarises facts with GPT-4o). Requires an admin session (AION_SESSION_TOKEN).

Inputs: no named parameters.

aion_admin_usersA

List all users registered in Aion. Requires an admin session (AION_SESSION_TOKEN).

Inputs: no named parameters.

aion_api_chatA

Send a message to Aion via the internal service chat endpoint (/api/service/chat). Uses the AION_SERVICE_TOKEN for auth — no user session required. Aion responds with full memory context injected.

Inputs: message (required), channel.

aion_channel_historyA

Fetch message history for a specific Aion channel. Requires AION_SESSION_TOKEN.

Inputs: channel (required), limit.

aion_channel_presenceA

Get active users in a specific Aion channel. Requires AION_SESSION_TOKEN.

Inputs: channel (required).

aion_channelsA

List all Aion chat channels. Requires AION_SESSION_TOKEN to be set.

Inputs: no named parameters.

aion_memory_browseA

Browse Aion's fact memory, optionally filtered by category. Requires AION_SESSION_TOKEN. Categories: preferences, family, work, hobbies, technical, goals, personal.

Inputs: category.

aion_queryA

Send a message to AION via its public REST API (port 3003). AION will respond with full memory context (facts + summaries) injected. Automatically falls back to a direct Ollama query (without memory) if the API is offline.

Inputs: message (required).

aion_vast_deployB

Deploy a new Vast.ai GPU instance via Aion. Requires AION_SESSION_TOKEN with vast/admin access.

Inputs: offer_id (required), image.

aion_vast_instancesA

List current Vast.ai GPU instances managed by Aion. Requires AION_SESSION_TOKEN with vast/admin access.

Inputs: no named parameters.

aion_vast_offersA

Browse available Vast.ai GPU offers. Requires AION_SESSION_TOKEN with vast/admin access.

Inputs: max_price.

aion_vast_stopA

Stop a running Vast.ai GPU instance. Requires AION_SESSION_TOKEN with vast/admin access.

Inputs: instance_id (required).

conversation_getA

Get the full message history of a specific AION conversation including all user and assistant turns.

Inputs: conversation_id (required).

conversation_listA

List recent AION conversations with titles, tool types, and auto-generated summaries.

Inputs: tool, limit.

fleet_reviewA

Fan out the same prompt (e.g. a diff to review, a design question) to multiple agents in parallel and return all responses side by side. Use for consensus code review or to get diverse model perspectives before deciding. Defaults to codex + agy (the reliable delegates).

Inputs: prompt (required), agents, machine, timeout_ms.

fleet_runA

Delegate a single prompt to another agent CLI (claude, codex, or agy) running headless on a fleet machine (wsl=local, draydev=dev VM, ec2=prod). Returns the agent's response. Use to farm a subtask to a different model, or to run work on a remote box. codex/agy can edit files and run commands in their sandbox; scope prompts accordingly.

Inputs: agent (required), prompt (required), cwd, model, +2 more.

fleet_statusA

Health-check the fleet: confirm each agent CLI (claude/codex/agy) runs headless & authenticated on each machine (wsl/draydev/ec2). Optionally narrow with machine/agent.

Inputs: agent, machine.

image_generateA

Generate an image using Fooocus (Stable Diffusion XL) running locally. Submits the job, polls until complete (up to 5 min), and returns the image URL/path.

Inputs: prompt (required), ratio, style, performance, +1 more.

jenn_get_memoriesA

Get memories about Jenn from AION's Jenn memory database. Optionally filter by category: biography, relationship, family, interests, life_events.

Inputs: category.

jenn_get_profileA

Get profile data about Jenn (Brian's wife) from AION's Jenn memory database.

Inputs: no named parameters.

kali_dir_enumA

Enumerate directories/files on a web server using gobuster with the common wordlist.

Inputs: url (required), wordlist.

kali_execA

Run an arbitrary shell command inside the Kali Docker container on Draydev. Use for tools not covered by other kali_* tools.

Inputs: command (required).

kali_nmapB

Run an nmap scan inside the Kali Docker container on Draydev. Returns port/service info.

Inputs: target (required), flags.

kali_statusA

Check that the Kali Docker container can be reached and return the Kali version / tool inventory.

Inputs: no named parameters.

kali_web_scanB

Run a Nikto web vulnerability scan against a URL using the Kali container.

Inputs: url (required).

kali_whoisB

Run a whois lookup for a domain or IP address via Kali.

Inputs: target (required).

memory_add_factA

Add a new fact to AION's long-term memory. This fact will be injected into every future AION conversation.

Inputs: fact (required), category (required).

memory_delete_factA

Delete a fact from AION's long-term memory by its ID. Use memory_get_facts first to find the ID.

Inputs: id (required).

memory_get_contextA

Get the full memory context that AION injects into its system prompt — the last 10 conversation summaries plus all user facts, formatted exactly as AION sees them. Useful for auditing what AION knows.

Inputs: no named parameters.

memory_get_factsA

Get user facts from AION's long-term memory. Facts are personal details learned from conversations: preferences, family, work, hobbies, technical skills, goals. Optionally filter by category.

Inputs: limit, category.

ollama_queryA

Send a raw prompt directly to Ollama, bypassing AION's persona and memory. Useful for model testing, one-off queries, or comparing model outputs.

Inputs: prompt (required), model, system, temperature.

openai_queryA

Send a raw prompt directly to OpenAI (GPT-4o by default), bypassing AION's persona and memory. Useful for one-off queries, comparing model outputs, or when Ollama is unavailable.

Inputs: prompt (required), model, system, temperature.

portal_healthA

Check the health of the SyncForge (MFT) portal — the Spring Boot service fronted by Nginx on port 8888. Returns status, version, and any reported subsystem health.

Inputs: no named parameters.

portal_nginx_checkA

Check if Nginx is responding on port 8888 (the public gateway for all Drayhub services). A quick connectivity probe to the root URL.

Inputs: no named parameters.

sonchat_activityA

Get SonChat activity log — join/leave/message events. Requires SONCHAT_ADMIN_KEY.

Inputs: limit.

sonchat_create_inviteB

Create a new SonChat invite token/link. Requires SONCHAT_ADMIN_KEY.

Inputs: label, max_uses, expires_in_days.

sonchat_healthA

Check if SonChat is online. Returns status and basic service info.

Inputs: no named parameters.

sonchat_invitesA

List all active invite tokens for SonChat. Requires SONCHAT_ADMIN_KEY.

Inputs: no named parameters.

sonchat_revoke_inviteA

Revoke/delete a SonChat invite token. Requires SONCHAT_ADMIN_KEY.

Inputs: token (required).

system_ollama_modelsA

List all locally available Ollama models with their sizes. Shows which models can be used with AION (AION_MODEL) and Nebula (NEBULA_MODEL).

Inputs: no named parameters.

system_statusA

Check the health of all Drayhub services: Ollama (LLM backend), Aion Flask API (port 5000), SonChat (port 3000), SyncForge/Portal via Nginx (port 8888), and Fooocus image generation. Returns online/offline status and latency for each.

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 45 tools

    Disambiguation2/5

    Several tools have overlapping purposes, notably memory_get_facts and aion_memory_browse both retrieve facts with category filters, and multiple query tools (aion_query, aion_api_chat, ollama_query, openai_query) send prompts to different backends but could confuse an agent. Most other tools are distinct, but this ambiguity is significant.

    Naming Consistency3/5

    Tool names generally follow a [domain]_[action] pattern with snake_case, but there are inconsistencies: memory_get_facts vs aion_memory_browse, aion_admin_profile_rebuild vs aion_admin_users, and some names are nouns (system_status) while others are verbs (fleet_run). The prefixes help but the pattern isn't uniform.

    Tool Count2/5

    45 tools is far above the typical 3-15 range, making the server unwieldy. While it covers many subdomains, the tool count is excessive and would benefit from splitting into focused servers.

    Completeness3/5

    The server covers a broad range of operations for AION memory, conversations, system health, and various services, but there are notable gaps such as no memory update, no conversation delete, and limited SonChat operations beyond invites. Core workflows are present, but the surface is uneven.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP server that gives AI assistants full SSH/SFTP remote operations — session management, command execution, interactive shells, file transfers, port forwarding, and system diagnostics.
      2
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      MCP server for managing multiple SSH servers via AI assistants, offering tools for remote command execution, file operations, and system monitoring.
      11
      25 PyPI
      2
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      MCP server enabling AI assistants to securely operate remote servers via persistent SSH sessions, with tools for command execution, file transfer, directory listing, and system monitoring.
      4
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      An MCP server for managing remote SSH servers, enabling AI agents to execute commands, transfer files, and perform deployment operations securely.
      MIT