Tools8 min

aki-mcp-sv 1.11: down to one process, AI self-reads onboarding

aki-mcp-sv 1.10 collapses 4 Node processes into 1, rewrites the filesystem tool natively, drops RAM to ~72.6MB; 1.11 lets AI self-read onboarding docs on first connect.

aki-mcp-sv 1.11: down to one process, AI self-reads onboarding

aki-mcp-sv 1.11.0 (2026-08-23) is the newest release since the 1.9 article: 1.10.0 collapses 4 parallel Node processes into 1, replaces two third-party packages (mcp-hub, the official filesystem MCP server) with hand-written code in this repo, and re-measures RAM baseline from the ground up; 1.11.0 lets the AI self-read the MCP onboarding doc on the very first connect session instead of pasting the full text into the manual instruction prompt.

Why collapse 4 processes into 1?

Before 1.10.0, streamable-bridge.js talked to mcp-hub — a separate child process — over an SSE handshake, and mcp-hub in turn spawned another filesystem process from the @modelcontextprotocol/server-filesystem package. These three intermediate layers existed only to route tool calls between child processes.

1.10.0 removes both mcp-hub and the child filesystem process: scripts/tools-server.js now builds a single McpServer running in-process, and streamable-bridge.js talks to it directly over the MCP SDK's own InMemoryTransport — no more SSE handshake, no more child process to watch for crashes. Tool names served externally are unchanged (still the local__ prefix), so no existing connection needs reconfiguring.

What changed in the native filesystem tool rewrite?

scripts/filesystem-mcp.js replaces the third-party package with 7 hand-written tools: read_text_file, write_file, edit_file, create_directory, move_file, get_file_info, list_allowed_directories. Symlink safety is preserved the way the old package did it — realpath containment checking, ported from its own validatePath().

The real practical difference: the allowed folder list is now read directly from setting.json via roots.js, so a folder edit in the panel takes effect on the very next call — previously only shell and search had this live-reload behavior, while filesystem still needed an "Apply to file tools" click and a full hub restart. That button, along with "Restart hub", is now gone from the panel since neither does anything meaningful any more.

  • Dropped from the tool set as redundant or with no evidence of real use: read_file (a deprecated alias), list_directory/list_directory_with_sizes/directory_tree/search_files (superseded by find_path/search_content), read_multiple_files, read_media_file.
Note

RAM baseline measured at 1.10.0: single process, idle after boot, ~92MB RSS — over the plan's ~40MB target. Root cause isolated by importing each subsystem incrementally and reading process.memoryUsage(): bare Node plus zod alone is already ~40MB (the original target, met); importing the MCP SDK's McpServer/Server on its own adds +27MB, because types.js eagerly builds zod schemas for the entire MCP protocol — resources, prompts, sampling, elicitation, tasks, 215 definitions total — not just the tools/* capability this server actually uses, and the SDK exports no lighter subpath for that. This project's own 5 tool modules add only ~3MB combined. The remaining ~22MB came from update-check.js's boot-time fetch() call, which lazily initializes Node's whole bundled undici client on first use anywhere in the process — fixed by rewriting it directly on node:https. Final measured result: 92MB → 72.6MB RSS. The remaining gap to the 40MB target is a fixed cost of depending on the official MCP SDK, not something this repo's own code can shrink further — ~72-76MB is the realistic floor while depending on that SDK.

Smaller changes in 1.10.0

Verified against a real npm start on 2026-08-21 (8 repeated initialize calls with no session ID still opened exactly one shared session, a ChatGPT-style OAuth DCR round-trip ran end-to-end from /register through a refresh grant, and a folder added in the panel took effect on the very next call):

  • Real Claude/Grok/ChatGPT/Gemini logos replace plain text labels in the panel, next to each connector tab.
  • The read-only git allowlist widens with ls-remote, describe, shortlog, merge-basels-remote is pre-allowed only with zero extra arguments, since git's ext:: transport helper can turn a repository/URL argument into arbitrary process execution.
  • Fixed .jpg/.jpeg being served with the wrong Content-Type (missing from scripts/http.js's MIME map; browsers had been rendering it anyway via content sniffing).
  • Fixed the staleness status file ~/.aki/aki-mcp-status.json not being written back to disk right after a version refresh in the panel — it previously only updated in-memory state.
  • The donate QR code is now responsive instead of a fixed 118px box.

1.11.0 — AI self-reads onboarding on first connect

The pasted instruction prompt was already near ChatGPT's 1,500-character cap. 1.11.0 solves "fit more guidance without breaking the cap" with a single pointer line instead of pasting the full text: docs/ref/mcp-intro.md (the live-plan pattern, cross-account continuity) is read by the AI exactly once, gated by the ~/.aki/mcpsv/intro.json flag — later sessions don't re-read it. Measured: 1,141/1,500 characters before this line was added, 1,292/1,500 after.

Fixed alongside it: ~/.aki/aki-mcp-status.json — the file the AI reads at session start to know which version is installed — previously computed its path outside the app's own USER_DIR; it now joins from the same USER_DIR as every other piece of userData. GitHub Release notes were near-empty: the release workflow used to derive content only from merged PRs, but this repo commits straight to trunk, so the body was footer-only; it now extracts the tagged version's own CHANGELOG.md section plus a Full Changelog compare-link footer against the previous tag. .env config was decided to stay, not be removed.

Neither 1.10.0 nor 1.11.0 changes how clients connect — the local__* tool names, MCP URL, and OAuth 2.1 authentication are all unchanged from the project introduction. See the whitelist architecture analysis for why this server is safe to expose to the internet, or the 1.9 article for the standalone-launcher install path.

Related