Void

Void

Void is a universal no-op MCP server that turns tool calls into freely shaped thinking spaces. It allows users to define custom tools with fixed results, enabling guided agent articulation and recursive self-correction.

Category
Visit Server

README

Void

Void is a universal no-op MCP server that turns tool calls into freely shaped spaces for thought. Descriptions and input schemas guide what an agent articulates, while configured results can cue recursive in-context self-correction.

Technically, you supply one or more MCP tool definitions as inline JSON or JSON files when launching Void. Each definition freely sets the tool's description and object-rooted input schema, along with its name and fixed result. Void advertises the description and schema unchanged, performs no work with the arguments, and returns the result verbatim. In mutable mode, an agent can create and remove the same kind of tool during the session through void_create_tool and void_remove_tool.

It uses the MCP TypeScript SDK v2 and serves stdio only.

Thinking with Void

examples/universal.json makes the loop explicit:

  1. Choose a form that suits the current move: a napkin, decision ledger, glassboard, test sweep, or something invented in the moment.
  2. Write the artifact into the tool call.
  3. React to that artifact in thinking and visible response text: say what became apparent and what changes because of it.
  4. Call Universal again with the improved understanding, continuing until the work settles.

examples/anything.json is the opposite extreme: an unrestricted object-shaped scratch space with no prescribed feedback. Use it when even naming the form would constrain the thought too early.

Tool definitions

Every input source must contain a top-level JSON array. Each item has this shape:

[
  {
    "name": "assumption_check",
    "description": "Stress-test the assumption most likely to break the current approach.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "assumption": {
          "type": "string",
          "description": "The load-bearing assumption."
        },
        "evidence": {
          "type": "string",
          "description": "What currently supports or contradicts it."
        },
        "change": {
          "type": "string",
          "description": "What you will change if it fails."
        }
      },
      "required": ["assumption", "evidence", "change"]
    },
    "result": "Now revise the approach around what you found."
  }
]

description is optional. name, inputSchema, and result are required. Tool names follow MCP's 1–128 character A-Z, a-z, 0-9, _, -, and . convention. An empty result string is valid.

The input schema is checked before the tool is registered and then advertised unchanged through tools/list. Void deliberately does not validate custom tool calls against it. Arguments that violate the advertised schema still receive the configured result.

Run

Pass one or more inline arrays, JSON files, or a mixture. Void concatenates their definitions in argument order and rejects duplicate names before starting the protocol transport. At least one definition source is required unless --mutable is enabled.

void-mcp ./base-tools.json ./project-tools.json '[{"name":"nope","inputSchema":{"type":"object"},"result":"Nope."}]'

Stdout belongs exclusively to MCP JSON-RPC. Startup errors and diagnostics go to stderr.

Claude Code

After running pnpm build, add a project-scoped .mcp.json and replace /absolute/path/to/void-mcp with this repository's absolute path:

{
  "mcpServers": {
    "void": {
      "type": "stdio",
      "command": "node",
      "args": [
        "/absolute/path/to/void-mcp/dist/src/cli.js",
        "/absolute/path/to/void-mcp/examples/universal.json"
      ]
    }
  }
}

Claude Code asks for approval before using a project-scoped MCP server. Open /mcp to inspect the connection and exposed Universal tool.

Live tools

Add --mutable to expose two management tools:

  • void_create_tool invites the agent to invent and register a new thinking tool for the lifetime of the server process.
  • void_remove_tool removes an ordinary tool present in the current session, whether loaded at startup or created live.
void-mcp --mutable

Mutable mode can start without any definition sources because its management tools can populate the server after startup. You can still pass startup definitions when useful. Created tools are ephemeral: an agent can try a first version, use it, remove it, and invent a better one without persisting the definition.

Creating or removing a tool emits notifications/tools/list_changed through the SDK. Management tools validate their own arguments because they mutate server state. They are reserved and cannot remove themselves.

Some clients expose a newly created tool only after the next turn boundary. This is client discovery behavior; the server registers the tool immediately.

For protocol debugging, --debug-log <file> appends structured JSONL events without writing to MCP stdout. The trace includes schemas and tool names, but only argument keys and configured-result lengths—not custom call values or result text.

void-mcp --mutable --debug-log ~/tmp/void-mcp/claude-code.jsonl ./tools.json

Without --mutable, neither management tool is exposed.

Development

pnpm install
pnpm check

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured