Add atomic chat tool
/SKILLAdd Atomic Chat MCP server so the container agent can call local models served by the Atomic Chat desktop app via its OpenAI-compatible API.
--- name: add-atomic-chat-tool description: Add an Atomic Chat MCP server so that the container agent can call local models served by the Atomic Chat desktop app via its OpenAI-compatible API. --- # Add Atomic Chat Integration This skill adds a stdio-based MCP server that exposes models running in the local [Atomic Chat](https://github.com/AtomicBot-ai/Atomic-Chat) desktop app as tools for the container agent. Claude remains the orchestrator but can offload work to local models served by Atomic Chat on http://127.0.0.1:1337/v1 (OpenAI-compatible). Exposed tools: - atomic_chat_list_models : lists models currently available in Atomic Chat (GET /v1/models) - atomic_chat_generate : sends a prompt to a specified model and returns the response (POST /v1/chat/completions) Model management (download, delete) is handled through the Atomic Chat desktop UI : the app is a fork of Jan and manages its own model library. The skill ships the MCP server source code (and its tests) in this folder and copies them into the agent-runner tree during installation, then registers the server at index.ts and forwards host environment variables to container-runner.ts. Registering the server is sufficient to expose its tools:the agent’s allow-pattern (mcp__atomic_chat__*) is derived from the registered server name. ## Phase 1: Pre-flight ### Check if already applied Check if container/agent-runner/src/atomic-chat-mcp-stdio.ts exists. If it does, skip to Phase 3 (Configure). ### Check prerequisites Verify that Atomic Chat is installed and that its local API server is running. On the host: ``bash curl -s http://127.0.0.1:1337/v1/models | head ` If the request fails: 1. Install Atomic Chat from the [latest release](https://github.com/AtomicBot-ai/Atomic-Chat/releases) (macOS only for now : atomic-chat.dmg ). 2. Open the app. 3. Open **Settings → Local API Server** and make sure it's enabled on port 1337 . 4. Go to the **Hub** (or **Models**) tab and download at least one model (e.g. Llama 3.2 3B, Qwen 2.5 Coder 7B). 5. Load the model once by sending any message in Atomic Chat's UI to warm it up. ## Phase 2: Apply Code Changes ### Copy the skill's source and tests into both trees This skill reaches into both the container (Bun) tree and the host (Node) tree, so its files go into both, alongside the integration points they cover. `bash S=.claude/skills/add-atomic-chat-tool # Container (Bun) tree : the MCP server and the registration wiring test cp $S/atomic-chat-mcp-stdio.ts container/agent-runner/src/atomic-chat-mcp-stdio.ts cp $S/atomic-chat-registration.test.ts container/agent-runner/src/atomic-chat-registration.test.ts # Host (Node) tree : the env-forwarding helper and the wiring test cp $S/atomic-chat-env.ts src/atomic-chat-env.ts cp $S/atomic-chat-wiring.test.ts src/atomic-chat-wiring.test.ts ` ### Register the MCP server in the agent-runner Edit container/ agent -runner/src/ index.ts. Find the mcpServers object that currently looks like this: `ts const mcpServers: Record<string, { command: string; args: string[]; env: Record<string, string> }> = { nanoclaw: { command: 'bun', args: ['run', mcpServerPath], env: {}, }, }; ` Add an atomic_chat entry alongside nanoclaw : `ts const mcpServers: Record<string, { command: string; args: string[]; env: Record<string, string> }> = { nanoclaw: { command: 'bun', args: ['run', mcpServerPath], env: {}, }, atomic_chat: { command: 'bun', args: ['run', path.join(__dirname, 'atomic-chat-mcp-stdio.ts')], env: { ...(process.env.ATOMIC_CHAT_HOST ? { ATOMIC_CHAT_HOST: process.env.ATOMIC_CHAT_HOST } : {}), ...(process.env.ATOMIC_CHAT_API_KEY ? { ATOMIC_CHAT_API_KEY: process.env.ATOMIC_CHAT_API_KEY } : {}), }, }, }; ` atomic-chat-registration. test.ts asserts this entry is present and points at the server module : the tool only appears to the agent if it is registered here. ### Forward host env vars into the container The env-forwarding logic lives in the copied src/ atomic-chat-env.ts (atomicChatEnvArgs()), so the reach-in into buildContainerArgs` is a single call. Im