Skip to main content
Glama

@reachpad/mcp

reachpad 让 Claude、Codex 和其他编码代理在持久化工作区中构建全栈应用,并通过链接分享,无需单独部署。工作区是一台由代理自行操作的云端开发计算机:一个仓库、一个文件系统、已安装的依赖和构建状态,这些在多次调用之间都得以保留,而不是一个会遗忘的临时沙箱。进程是例外;见下文。

这是 MCP 服务器。它让 Claude、ChatGPT、Cursor、OpenCode 或你自己的代理创建环境、在其中运行命令、分叉它,并在之后返回,无需开发者为其保持笔记本电脑开启。

  • 它是持久的。 暂停后磁盘会被密封;下一次调用从该密封状态启动,文件、安装和 git 状态完好,而不是重新构建。进程是例外:启动总是冷启动。

  • 它可以分叉。 从一个准备好的状态进行二十次尝试,每次只花费一个增量,而不是二十次重建——因为环境是快照链,而不是一台机器。

  • 它可以开箱即用地保守秘密。 代理凭证在边界处代表你被调用,其值永远不会进入环境、日志或存储。相反,写入环境的凭证在那里是可读的,这是设计使然。

  • 它与代理无关。 REST API 是规范的;此服务器、SDK 和 CLI 都是它的翻译。带上你自己的代理。

API 是产品边界,而不是 Web UI:reachpad.dev。

安装

npx -y @reachpad/mcp          # stdio, for a local client

在 Claude Code 中:

claude mcp add reachpad -e REACHPAD_IDENTITY_CREDENTIAL=… -- npx -y @reachpad/mcp

Related MCP server: Uten Agent Terminal MCP

两种传输,一种实现

npx @reachpad/mcp                                  # stdio
REACHPAD_MCP_HTTP_PORT=8722 npx @reachpad/mcp      # streamable http

stdio 是本地客户端与之通信的方式;Streamable HTTP 是远程连接器与之通信的方式。相同的工具,相同的行为——是添加而不是分叉,因为一个表面的两种实现正是它们漂移的方式。

HTTP 端对 GET 返回 405:这里的每个工具都是请求/响应,规范允许拒绝服务器发起的流,而不是为永远不会到来的流量保持连接打开。没有会话——没有任何跨调用保留的东西是重启无法重建的。而且它不携带自己的凭证:任何授权 HTTP 请求的东西就是授权 reachpad 的东西。

配置

变量

含义

REACHPAD_ENDPOINT

你的 reachpad 主机。对除回环以外的任何地址使用明文 http:// 会在套接字打开之前被拒绝。

REACHPAD_IDENTITY_CREDENTIAL

你的每用户凭证。它命名一个账户,不能代表其他账户——服务器从凭证自身的记录中获取身份,而不是从请求中获取。

REACHPAD_API_KEY

可选,按环境范围限定且可撤销。设置后,run_command 使用它,无需身份交换。

REACHPAD_MCP_HTTP_PORT

提供 HTTP 而不是 stdio。

REACHPAD_MCP_HTTP_HOST

默认 127.0.0.1。此进程桥接到带有你凭证的控制平面,因此将其绑定到外部世界是一个有意的决定,需要位于终止 TLS 的代理之后。

REACHPAD_MCP_HTTP_TOKEN

不记名令牌,以恒定时间比较。如果缺失,任何能到达该端口的调用者都被授权,服务器会在 stderr 上说明这一点。

REACHPAD_MCP_ALLOWED_ORIGINS

逗号分隔。携带未列出 Origin 的请求会被拒绝——浏览器无法伪造它,这关闭了 DNS 重绑定。完全没有 Origin 的是非浏览器客户端,被允许。

如果设置了多个凭证,最窄的生效,被拒绝的凭证绝不会在更宽的凭证下重试——回退将是没有人选择执行的权限提升。

工具

工具

作用

get_credit_balance()

剩余计算积分。一个积分运行一个标准环境一分钟。

create_environment(repo?, ref?, name?)

一个新环境,可选地将仓库克隆到 $HOME/work。省略时 reachpad 生成其显示名称。

list_environments()

你的环境以及每个环境有多少个分叉

get_environment(environment)

它从什么启动:其头部快照、日志位置和分叉树

run_command(environment, argv, cwd?, env?, timeout_ms?)

一个命令、其退出代码和输出。暂停的环境会恢复以服务它。

checkpoint_environment(environment, name?)

从最后一个密封快照分叉;原始环境不受影响

expose_port(environment, port, check?)

将端口开放到 Web 并获取到达它的链接。每个端口幂等。

list_ports(environment)

此环境已打开的端口,最旧的在前,及其链接

revoke_port(environment, port)

关闭一个端口。稍后重新打开会生成一个不同的链接。

delete_environment(environment)

将其归档并释放计划槽位。不会删除任何内容——快照和历史记录都会保留。

这里故意没有: 在环境内启动代理。它在 reachpad 的路线图中,但尚未在集群中——一个总是失败的工具会浪费模型的一轮,并让它不信任其余部分,所以此服务器不宣传任何它无法提供的东西。

端口链接是什么,不是什么

在把链接交给别人之前值得一读,因为其中没有一项可以从 URL 中发现:

  • 任何登录 Reachpad 并拥有链接的人都可以打开它。 它不是私有 URL,也不是安全 URL。把它当作预览部署。

  • 链接是地址,不是副本。 在同一端口上重启应用,同一链接会提供新版本。

  • 运行中的进程不会在暂停后存活。 环境冷启动时文件完好,但没有任何运行,因此暂停后链接会返回错误,直到有东西再次监听该端口。访问者的请求会唤醒暂停的环境;它不会重启其中的任何东西。

  • expose_port 之后会拨号该端口,并告诉你是否有响应,因为指向没有服务的端口的链接看起来和正常工作的链接完全一样。传递 check: false 以跳过它——拨号会恢复暂停的环境。

  • 只有 REACHPAD_API_KEY 时,密钥必须是 --role owner。 collaborator 密钥会被拒绝:列出会交回实时令牌,而令牌是一种能力。

它构建所依据的规则

这些是流式执行 API 的幼稚客户端误导模型的方式,以及这个服务器如何替代。

  • 未终止的流是 UNKNOWN,绝不是成功。 如果响应在没有终止事件的情况下结束,工具会以这些词说明。它不是零退出,代理绝不能凭此重试非幂等命令。

  • 它的截止时间比服务器的更宽松,因此服务器端的答案总是赢得竞争。先放弃的客户端会把“你的构建完成了”变成“未知”,数字是从服务器镜像的,而不是猜测的。

  • 拒绝携带补救措施,而不是代码。 在计划限制时,你会得到限制、当前计数以及该做什么——数字来自服务器,因为硬编码在客户端中的限制在你计划改变的那一刻就是谎言。

  • 结果是句柄,而不是负载。 输出被尾部截断,并标明丢弃的字节数。构建日志可能有数兆字节,而如此大小的 MCP 结果会摧毁调用者的上下文窗口。

  • 拒绝是结果,而不是传输错误,因此模型可以读取并采取行动。只有未知的工具才是协议错误。

测试

node --test 'test/*.test.mjs'

无需网络和凭证。协议套件将随附的服务器作为子进程启动,并通过其 stdio 与真实套接字上的桩控制平面进行真实的 JSON-RPC 通信,因此测试中的任何内容都不是内部导入。一个测试针对真实的 reachpad 运行相同的流程,并在未配置端点时跳过。

仓库

此仓库是源代码。它故意与 reachpad 后端分离:此代码是公开的,发布到 npm,其发布工作流持有发布权——这些都不应属于与控制平面相同的仓库。这里没有任何内容可以读取后端的源代码,后端中也没有任何作业将文件复制到这里。

两个服务器常量在 src/client.js 中镜像——执行宽限期和默认执行超时。镜像常量通常会腐烂;这个不会,因为后端自己的 CI 会获取这个已发布的包,并在它们不一致时失败。检查位于数字可能改变的地方。

Available Tools

7 tools
checkpoint_environmentFork environmentAInspect

Fork an environment from its last sealed snapshot into a new one. The original is untouched. This is how you try several approaches from one prepared state — the fork costs a delta, not a rebuild.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName for the fork.
environmentYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint=false, destructiveHint=false) only partially cover behavior; the description adds crucial detail that the original environment is untouched and explains the delta-based cost. This goes beyond the annotations by specifying what is not modified and the resource implication, enhancing transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two succinct sentences: the first states the core action, the second explains the purpose and cost. No redundant phrasing, perfectly front-loaded, and every sentence earns its place. Ideal conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with 2 params, no output schema, and partial annotations, the description adequately covers functionality, usage context, and non-destructive behavior. It does not mention the return value, but that is not critical given the lack of an output schema and the simplicity of the operation. Overall, complete enough for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (only 'name' has a description). The description does not add extra meaning to the 'environment' parameter beyond the implied source, and 'name' is already described as 'Name for the fork.' Since coverage is moderate, the description adds minimal value beyond what the schema already provides, so a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action (fork an environment from its last sealed snapshot into a new one) and differentiates from siblings by emphasizing the 'original is untouched' and the purpose of trying multiple approaches. The verb 'fork' is specific and the resource (environment) is explicit, with a clear scope (last sealed snapshot).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for use ('try several approaches from one prepared state') and hints at cost advantages ('costs a delta, not a rebuild'), but does not explicitly name alternative tools or state when not to use it. Still, the rationale is sufficiently clear for an agent to decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_environmentCreate environmentAInspect

Create a persistent development environment: a filesystem and processes that survive between calls. Optionally clone a git repository into it. Returns the environment id used by every other tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoOptional branch or tag to check out.
nameNoOptional display name. Reachpad generates one when omitted.
repoNoOptional git URL to clone into /work. Must be reachable without credentials unless the account has a mirror for it.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations: persistence across calls, optional git cloning, and the return value. This complements annotations like openWorldHint=true (cloning) and readOnlyHint=false (creation). It does not mention resource/credit implications or failure modes, but covers the core behavioral contract well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the essential function, and no filler. It efficiently communicates persistence, optional cloning, and the return id—every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential facts for a creation tool with no output schema: what is created, persistence, optional repo cloning, and the return id. It does not discuss edge cases like clone failures, name conflicts, or costs, but given the moderate complexity and strong schema/annotations, it is sufficiently complete for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (ref, name, repo) are already documented structurally. The description's mention of optional repository cloning adds a small layer of meaning, but it does not enrich parameter semantics beyond what the schema provides, matching the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Create') and clearly identifies the resource ('persistent development environment') with defining traits: a filesystem and processes that survive between calls. It also distinguishes from siblings by noting the returned environment id is used by every other tool, making the tool's role as the foundational creation step unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool by stating it returns the environment id used by every other tool, establishing it as the prerequisite step. However, it does not explicitly name alternatives or state when not to use it (e.g., prefer run_command for existing environments), so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_environmentArchive environmentA
DestructiveIdempotent
Inspect

Archive an environment, freeing the plan slot it holds. Nothing is deleted: its snapshots and history survive, it simply stops counting as live and can no longer be used.

ParametersJSON Schema
NameRequiredDescriptionDefault
environmentYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description significantly expands on the annotations by explaining what happens: the environment is no longer usable, its plan slot is freed, and its snapshots and history survive. This adds valuable behavioral nuance beyond the destructiveHint=true and idempotentHint=true annotations, and it does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the main action, and every clause adds relevant meaning. There is no repetition, filler, or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with no output schema, the description covers the action, consequences, and non-destructive nature of data. However, it lacks guidance on how to specify the environment parameter and does not explicitly contrast it with related tools, leaving small but real gaps in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'environment' has no schema description and the description gives no detail about what form it should take (name, ID, path, etc.). Since schema description coverage is 0%, the description was expected to compensate, but it only says 'an environment' without specifying how to identify it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Archive' and clearly identifies the resource ('an environment') and the key consequence: freeing the plan slot it holds. It also distinguishes itself from the sibling delete/create tools by explicitly clarifying that nothing is deleted, which prevents confusion with the tool's name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you want an environment to stop counting as live and free its plan slot, while preserving snapshots and history. It does not explicitly name alternatives or state when not to use it, but the context is clear enough for a simple one-parameter archiving operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_credit_balanceGet compute-credit balanceA
Read-onlyIdempotent
Inspect

Show this account's remaining compute credits. One credit runs one standard environment for one minute; paused environments use no compute credits.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds valuable context beyond annotations: the definition of a credit (one minute per standard environment) and that paused environments don't consume credits. This enriches understanding of the resource being measured without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and followed by a concise clarification of credit units. Every sentence adds essential information with no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, zero-parameter tool with rich annotations and no output schema, the description fully covers what the tool does, the resource it references, and the consumption model. This is sufficient for an agent to decide when to call it and what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description doesn't need to elaborate on parameters but correctly implies that no inputs are required, making it clear the action is a simple balance query.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Show this account's remaining compute credits.' It uses a specific verb (show) and resource (compute credits), and the additional detail about credit usage distinguishes it from sibling tools like create_environment and run_command.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool by explaining how credits are consumed, which helps an agent understand that checking balance is relevant when considering environment execution. It doesn't explicitly mention alternatives or exclusions, but since no sibling tool covers credits, the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_environmentInspect environmentA
Read-onlyIdempotent
Inspect

What an environment resumes from: its head snapshot, how far its log had got, and its fork tree. Every start is a cold boot from the head snapshot: files survive, running processes do not.

ParametersJSON Schema
NameRequiredDescriptionDefault
environmentYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only, idempotent, and non-destructive annotations, the description adds valuable behavioral context: running processes do not survive a cold boot while files do. This is exactly the kind of contextual insight that the annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: two sentences front-load the core output details and then add the essential cold-boot behavior. Every sentence earns its place without unnecessary restatement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only inspection tool, the description is largely sufficient: it names the returned concepts and a key behavioral nuance, and the annotations cover safety and idempotency. It does not describe a concrete output format, but no output schema is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema exposes one undocumented string parameter, 'environment', and schema description coverage is 0%. The description clarifies that the tool operates on an environment's resumption state, but it does not explain how to obtain or format the environment identifier, e.g. whether it is an ID or name from list_environments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies what the tool returns: an environment's resumption state, including its head snapshot, log progress, and fork tree. This distinguishes it from siblings like list_environments, create_environment, and delete_environment, which perform different lifecycle operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit alternatives are listed, but the description provides clear operational context: every start is a cold boot from the head snapshot, so this tool helps you understand what state an environment will resume with. The absence of explicit when-not-to-use guidance prevents a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_environmentsList environmentsA
Read-onlyIdempotent
Inspect

List this account's environments, with how many forks each has.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already express readOnly, openWorld, idempotent, and non-destructive behavior. The description adds behavioral context by scoping to the current account and revealing that fork counts are included in the response. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that is front-loaded with the verb 'List' and immediately identifies the resource and output. Every word adds value; there is no unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has no parameters, no output schema, and strong annotations, this description fully covers the core invocation and expected result. An agent has enough information to correctly select and call this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline of 4 is appropriate. The description does not need to define parameter meanings because there are none to clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' and states the exact resource ('this account's environments') plus a meaningful differentiator ('with how many forks each has'). This clearly distinguishes it from get_environment, which focuses on a singular environment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool—when you need an account-level summary of environments and their fork counts—but it does not explicitly say when to prefer this over get_environment or list other alternatives. It provides clear context but no exclusionary guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_commandRun a commandA
Destructive
Inspect

Run one command in an environment and get its exit code and output. Not a shell: pass argv as a list, and ask for a shell explicitly with ["/bin/sh","-lc","…"] if you want one. A paused environment resumes to serve this.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo
envNo
argvYes
timeout_msNoGive up after this long. PASS IT. Clamped by the entitlement server-side, and without it the environment is allowed ten minutes — so a wedged environment costs you ten before you learn anything. Seconds to a couple of minutes suits most commands; raise it for builds.
environmentYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate openWorldHint=true and destructiveHint=true, but the description adds valuable behavioral context: it is not a shell, it returns exit code and output, and a paused environment resumes for it. These details go beyond the annotations and help the agent understand execution semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose. Each sentence adds essential information without redundancy, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters with nested objects and no output schema, the description covers the primary behavior (command execution, exit code/output) and key usage notes (argv, shell). It lacks detailed parameter explanations but the schema covers timeout_ms, and the annotations cover safety aspects. This is reasonably complete for a command runner tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at only 20%, the description should compensate. It adds meaning to the argv parameter (list form, explicit shell usage) and mentions environment behavior, but does not explain cwd, env, or environment beyond that. The timeout_ms parameter already has a schema description. This is adequate but not comprehensive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Run one command in an environment and get its exit code and output,' which clearly identifies the verb, resource, and outcome. It also distinguishes itself from a shell, clarifying its scope and differentiating it from sibling tools that manage environments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage instructions: 'pass argv as a list, and ask for a shell explicitly with ["/bin/sh","-lc","…"] if you want one.' It also notes that a paused environment resumes to serve the command, giving practical context. However, it does not explicitly discuss when to use this versus alternatives, though siblings are not direct alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedcheckpoint_environment
    • First observedcreate_environment
    • First observeddelete_environment
    • First observedget_credit_balance
    • First observedget_environment
    • First observedlist_environments
    • First observedrun_command

TDQS

A4.4/5.0

Scored across 7 tools

Disambiguation5/5

Each tool addresses a distinct concern: credit balance, environment lifecycle, and command execution are cleanly separated. Even checkpoint_environment is unambiguous because it explicitly forks an environment into a new one.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case, such as create_environment, list_environments, and delete_environment. Singular/plural usage is natural and predictable.

Tool Count5/5

Seven tools is well-scoped for managing persistent development environments: credit checking, creation, listing, inspection, command execution, forking, and deletion/archival. No tool feels redundant or out of place.

Completeness5/5

The environment lifecycle is covered end-to-end: create, read (list/get), fork/checkpoint, execute commands, and delete/archive. The credit balance tool fills the one supporting need for running environments, leaving no obvious dead ends.

Maintenance

ActivitySlowing
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers