Releases: voidmind-io/voidmcp
Release list
v0.0.10
Highlights
Hot-reload. The running voidmcp serve process now picks up server add/remove performed by voidmcp add/remove in another terminal — no restart required. Plus sharpened LLM-facing descriptions that push harder for chained execute_code instead of sequential tool calls.
Hot-reload across processes
Before v0.0.10, voidmcp add filesystem ... in a second terminal was invisible to the running serve until you restarted it. Now:
- A background goroutine polls the SQLite store every
--watch-interval(default5s,0disables) - Added / removed server names are applied to the in-memory registry
notifications/tools/list_changedis sent after any diff so compatible clients re-fetch automatically
Design:
- Self-healing: transient
newTransport/ListToolsfailures are not stubbed into memory — the next tick retries automatically - TOCTOU-safe vs the in-process
add_mcptool: watcher re-checks under write lock and drops its own transport ifAddwon the race - Interval clamp:
--watch-intervalbelow1sis rejected (footgun guard) - Panic-safe: the watcher goroutine recovers + logs, never dies mid-run
Name-level diff only — changing an auth token still needs remove + add.
LLM-facing polish
execute_codedescription now carries a STRONG PREFERENCE block telling the model to chain multiple downstream MCP calls inside a single execution instead of making sequential tool calls (one round-trip vs N)- New PATTERNS section shows
Promise.allSettledfan-out and sequentialtry/catchcontinue-on-error examples searchdescription explicitly reminds the model to useexecute_codeafter discovering signatures
Install
go install github.com/voidmind-io/voidmcp/cmd/voidmcp@v0.0.10Full Changelog: v0.0.9...v0.0.10
v0.0.9
Highlights
This release hardens VoidMCP's security posture, sharpens the search-first discovery flow, and cleans up the LLM-facing surface based on external reviews (Gemini, Codex) plus internal audits.
Security
- Persisted bearer token is now encrypted at rest with AES-256-GCM (per-setting AAD)
--tokenandVOIDMCP_TOKENenforce a 32-character minimum- New
VOIDMCP_TOKENenv var avoids exposing the token via/proc/cmdline add_mcpno longer acceptsauth_token/auth_header— authenticated and stdio servers are CLI-only to keep credentials out of the LLM context and block prompt-injection exfiltration- HTTP
401/403responses from upstream MCPs surface a clear CLI workaround to the model
Search & discovery
- Search limit raised to 50 with an explicit truncation indicator
- Server names are now matched alongside tool names; empty query or
"*"browses everything - Inferred output schemas are loaded into search results so TypeScript return types reflect the real response shape (not
Promise<any>) - Server and tool names that are not valid JS identifiers (hyphens, etc.) are rendered with bracket notation —
tools["my-server"]["do-thing"](...)— matching the runtime proxy
LLM ergonomics
list_mcpsreturns each server's tool-name array (the description already promised this)execute_codereturns structured JSON (result,logs,tool_calls) instead of free-form text- Tool descriptions reworked to make the search-first workflow obvious
Transport
- HTTP transport automatically re-initializes once on
ErrSessionExpiredinstead of failing the call
Install
go install github.com/voidmind-io/voidmcp/cmd/voidmcp@v0.0.9Or grab a binary from the assets below.
Full Changelog: v0.0.8...v0.0.9
v0.0.8
v0.0.7
VoidMCP v0.0.7
Breaking changes
--schema-thresholdflag removed. Search-first is now the only mode.
Features
- Search-first default:
execute_codeno longer inlines TypeScript definitions. The LLM always callssearch()first to discover tool signatures, then writes code. This ensures tools from newly added servers are immediately discoverable. - Server name matching:
search("sqlite")returns all tools from that server.search("*")browses all tools across all servers. - Improved tool descriptions: All 5 tools rewritten for LLM clarity with concrete examples, return format descriptions, and workflow guidance.
- Promise<any> guidance:
execute_codedescription explains thatPromise<any>means the tool hasn't been called yet, and suggests usingconsole.log()to inspect the shape.
Fixes
- v0.0.3: Windows key file permission check
- v0.0.4: execute_code chaining emphasis
- v0.0.5: Output schema inference + response unwrapping
- v0.0.6: notifications/tools/list_changed
Install / Update
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/voidmind-io/voidmcp/main/install.sh | shWindows (PowerShell):
irm https://raw.githubusercontent.com/voidmind-io/voidmcp/main/install.ps1 | iexKnown limitation
Claude Code does not yet handle notifications/tools/list_changed (#4118). After adding a new MCP server, use search() to discover its tools immediately - no restart needed. Schema inference results (typed return values) appear after restarting the session.
v0.0.6
v0.0.5
VoidMCP v0.0.5
Features
- Output schema inference: VoidMCP learns tool return types on first use. After a tool is called, its TypeScript def changes from
Promise<any>to the actual inferred type (e.g.Promise<{ items: Array<{ id: number; title: string }> }>) - Response unwrapping: MCP ToolResult wrapper (
{content:[{type:"text",text:"..."}]}) is automatically stripped. JS code receives the actual value directly — no moreresult.content[0].text - Schema TTL: inferred schemas refresh after 7 days (configurable via
--schema-ttl). Expired schemas stay visible — the LLM never falls back toPromise<any>for a tool that was called at least once
Fixes
- Windows: key file permission check skipped (no POSIX bits on Windows)
- Windows:
SIGTERMreplaced withKillfor child process cleanup execute_codedescription emphasizes chaining with concrete example- Scan errors in schema store no longer silently swallowed
unwrapToolResultonly matches real MCP ToolResult shapes (not coincidentalcontentfields)- Object inference capped at 64 properties (prevents OOM from pathological responses)
- Schema capture capped at 1 MB per response
- Empty array items use valid JSON Schema (
{}instead of{"type":"any"})
Install / Update
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/voidmind-io/voidmcp/main/install.sh | shWindows (PowerShell):
irm https://raw.githubusercontent.com/voidmind-io/voidmcp/main/install.ps1 | iexv0.0.4
v0.0.3
VoidMCP v0.0.3
Fixes
- Windows: key file permission check skipped (Windows has no POSIX permission bits)
- Windows: replaced
SIGTERMwithKillfor child process cleanup (SIGTERM unavailable on Windows)
Install / Update
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/voidmind-io/voidmcp/main/install.sh | shWindows (PowerShell):
irm https://raw.githubusercontent.com/voidmind-io/voidmcp/main/install.ps1 | iexIf upgrading from v0.0.1/v0.0.2 on Windows, delete ~/.voidmcp/ first to clear the key file that caused the startup error.
v0.0.2
VoidMCP v0.0.2
Fixes
- Windows PowerShell install script: fixed architecture detection (
$env:PROCESSOR_ARCHITECTUREinstead of .NETRuntimeInformation) .gitignoreno longer excludescmd/voidmcp/directory
Install
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/voidmind-io/voidmcp/main/install.sh | shWindows (PowerShell):
irm https://raw.githubusercontent.com/voidmind-io/voidmcp/main/install.ps1 | iexThen:
claude mcp add --transport stdio voidmcp -- voidmcp serve --stdioSee README for full documentation.
v0.0.1
VoidMCP v0.0.1
One MCP to orchestrate them all.
VoidMCP is a standalone MCP server that gives your AI agent Code Mode - write and execute JavaScript that orchestrates multiple MCP tools in a single WASM-sandboxed execution.
Tools
add_mcp- register HTTP MCP servers at runtime (stdio via CLI)remove_mcp- unregister a serverlist_mcps- show all servers with status and toolssearch- find tools by keyword across all registered serversexecute_code- run JavaScript in a WASM sandbox with access to all tools
Highlights
- QuickJS in WASM - sandboxed JS execution with no host access
- HTTP + stdio transport - connect to remote and local MCP servers
- Tiered schema exposure - full TypeScript defs for small tool sets, search-first for large ones
- Encrypted credential storage - AES-256-GCM with per-server AAD
- Localhost-only HTTP with bearer token auth
- 170 tests, 85%+ coverage
Install
go install github.com/voidmind-io/voidmcp/cmd/voidmcp@latest
Or download a binary below.
Quick start
# Claude Code
claude mcp add --transport stdio voidmcp -- voidmcp serve --stdio
# Claude Desktop - add to config:
{ "mcpServers": { "voidmcp": { "type": "stdio", "command": "voidmcp", "args": ["serve", "--stdio"] } } }Built by the team behind VoidLLM.