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.
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:
- Choose a form that suits the current move: a napkin, decision ledger, glassboard, test sweep, or something invented in the moment.
- Write the artifact into the tool call.
- React to that artifact in thinking and visible response text: say what became apparent and what changes because of it.
- Call
Universalagain 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_toolinvites the agent to invent and register a new thinking tool for the lifetime of the server process.void_remove_toolremoves 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
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。