内容
# Void
Void 是一个通用的无操作 MCP 服务器,它将工具调用转化为自由形状的思想空间。描述和输入模式引导智能体表达内容,而配置的结果可以提示递归的上下文自我修正。
技术上,您可以在启动 Void 时提供一个或多个 MCP 工具定义为内联 JSON 或 JSON 文件。每个定义都可以自由设置工具的描述和基于对象的输入模式,以及工具的名称和固定的结果。Void 原样宣传描述和模式,不对参数执行任何操作,并逐字返回结果。在可变模式下,智能体可以通过 `void_create_tool` 和 `void_remove_tool` 在会话期间创建和删除同类型的工具。
它使用 MCP TypeScript SDK v2 并且仅提供 stdio 服务。
## 与 Void 思考
[`examples/universal.json`](examples/universal.json) 使得循环显式:
1. 选择适合当前步骤的表单:草图、决策账本、玻璃板、测试扫描或当下创造的某种东西。
2. 将制品写入工具调用中。
3. 在思考和可见的响应文本中对该制品做出反应:说明变得明显的内容和因此而发生的变化。
4. 使用改进的理解再次调用 `Universal`,直到工作稳定。
[`examples/anything.json`](examples/anything.json) 是相反的极端:一个无限制的、对象形状的临时空间,没有预先规定的反馈。在甚至命名表单过早约束思维时使用它。
## 工具定义
每个输入源必须包含一个顶级 JSON 数组。每个项目都有以下结构:
```json
[
{
"name": "assumption_check",
"description": "对最可能破坏当前方法的假设进行压力测试。",
"inputSchema": {
"type": "object",
"properties": {
"assumption": {
"type": "string",
"description": "承载负荷的假设。"
},
"evidence": {
"type": "string",
"description": "当前支持或反对它的证据。"
},
"change": {
"type": "string",
"description": "如果它失败,您将更改的内容。"
}
},
"required": ["assumption", "evidence", "change"]
},
"result": "现在根据您发现的内容修改方法。"
}
]
```
`description` 是可选的。`name`、`inputSchema` 和 `result` 是必需的。工具名称遵循 MCP 的 1–128 个字符 `A-Z`、`a-z`、`0-9`、`_`、`-` 和 `.` 约定。空结果字符串是有效的。
输入模式在工具注册之前进行检查,然后通过 `tools/list` 原样宣传。Void 故意不对自定义工具调用进行验证。违反宣传模式的参数仍然会收到配置的结果。
## 运行
传递一个或多个内联数组、JSON 文件或两者的混合。Void 按参数顺序连接它们的定义,并在启动协议传输之前拒绝重复的名称。除非启用 `--mutable`,否则至少需要一个定义源。
```sh
void-mcp ./base-tools.json ./project-tools.json '[{"name":"nope","inputSchema":{"type":"object"},"result":"Nope."}]'
```
标准输出完全属于 MCP JSON-RPC。启动错误和诊断信息会输出到标准错误流。
### Claude 代码
运行 `pnpm build` 后,添加项目范围的 `.mcp.json` 并将 `/absolute/path/to/void-mcp` 替换为此存储库的绝对路径:
```json
{
"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 代码在启动项目范围的 MCP 服务器之前会请求批准。打开 `/mcp` 以检查连接和暴露的 `Universal` 工具。
## 实时工具
添加 `--mutable` 以公开两个管理工具:
- `void_create_tool` 邀请智能体为服务器进程的生命周期创造和注册新的思考工具。
- `void_remove_tool` 删除当前会话中存在的普通工具,无论是在启动时加载还是实时创建。
```sh
void-mcp --mutable
```
可变模式可以在没有定义源的情况下启动,因为其管理工具可以在启动后填充服务器。您仍然可以在需要时传递启动定义。创建的工具是短暂的:智能体可以尝试第一个版本,使用它,删除它,并创造一个更好的版本,而不持久化定义。
创建或删除工具会通过 SDK 发出 `notifications/tools/list_changed`。管理工具验证它们自己的参数,因为它们会改变服务器状态。它们是保留的,不能删除自己。
一些客户端仅在下一个回合边界之后才会公开新创建的工具。这是客户端发现行为;服务器会立即注册工具。
对于协议调试,`--debug-log <file>` 会将结构化的 JSONL 事件追加到文件中,而不会写入 MCP 标准输出。跟踪信息包括模式和工具名称,但仅包括参数键和配置结果长度 — 不包括自定义调用值或结果文本。
```sh
void-mcp --mutable --debug-log ~/tmp/void-mcp/claude-code.jsonl ./tools.json
```
在没有 `--mutable` 的情况下,两个管理工具都不会被公开。
## 开发
```sh
pnpm install
```
```sh
pnpm check
```