Skip to main content
Glama

@reachpad/mcp

reachpad를 사용하면 Claude, Codex 및 기타 코딩 에이전트가 영구 워크스페이스에서 풀스택 앱을 빌드하고 별도의 배포 없이 링크로 공유할 수 있습니다. 워크스페이스는 에이전트가 스스로 운영하는 클라우드 개발 컴퓨터입니다. 즉, 호출 사이에 모두 유지되는 저장소, 파일 시스템, 설치된 종속성 및 빌드 상태를 갖춘 환경이지, 잊어버리는 임시 샌드박스가 아닙니다. 프로세스는 예외입니다. 아래를 참조하세요.

이것은 MCP 서버입니다. Claude, ChatGPT, Cursor, OpenCode 또는 자체 에이전트가 환경을 만들고, 그 안에서 명령을 실행하고, 포크하고, 나중에 다시 돌아올 수 있게 해줍니다. 개발자가 노트북을 켜두지 않아도 됩니다.

  • 지속됩니다. 일시 중지하면 디스크가 봉인됩니다. 다음 호출은 재빌드하지 않고 파일, 설치 및 git 상태가 그대로 유지된 채 해당 봉인에서 부팅됩니다. 프로세스는 예외입니다. 시작은 항상 콜드 부팅입니다.

  • 포크됩니다. 준비된 상태에서 스무 번 시도하면 스무 번의 재빌드가 아니라 각각 델타 비용만 발생합니다. 환경이 머신이 아니라 스냅샷 체인이기 때문입니다.

  • 비밀을 상자 안에 보관할 수 있습니다. 중개된 자격 증명은 경계에서 사용자를 대신하여 호출되며 그 값은 환경, 로그 또는 저장소에 절대 들어가지 않습니다. 대신 환경에 기록된 자격 증명은 설계상 그곳에서 읽을 수 있습니다.

  • 에이전트에 구애받지 않습니다. REST API가 표준이며, 이 서버, SDK 및 CLI는 그 번역본입니다. 자신의 에이전트를 가져오세요.

API는 웹 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

사용자별 자격 증명. 하나의 계정을 지칭하며 다른 계정을 대신할 수 없습니다. 서버는 요청이 아닌 자격 증명 자체의 기록에서 ID를 가져옵니다.

REACHPAD_API_KEY

선택 사항, 환경별로 범위가 지정되고 취소 가능합니다. 설정하면 run_command가 이를 사용하며 ID 교환이 필요 없습니다.

REACHPAD_MCP_HTTP_PORT

stdio 대신 HTTP를 제공합니다.

REACHPAD_MCP_HTTP_HOST

기본값 127.0.0.1. 이 프로세스는 자격 증명으로 제어 플레인에 연결되므로, 이를 외부에 바인딩하는 것은 TLS를 종료하는 프록시 뒤에서 의도적으로 내리는 결정입니다.

REACHPAD_MCP_HTTP_TOKEN

베어러 토큰, 상수 시간으로 비교됩니다. 없으면 포트에 도달할 수 있는 모든 호출자가 승인되며, 서버는 stderr에 이를 알립니다.

REACHPAD_MCP_ALLOWED_ORIGINS

쉼표로 구분. 목록에 없는 Origin을 가진 요청은 거부됩니다. 브라우저는 이를 위조할 수 없으므로 DNS 리바인딩을 차단합니다. Origin이 전혀 없으면 비브라우저 클라이언트이며 허용됩니다.

여러 자격 증명이 설정된 경우 가장 좁은 것이 우선하며, 거부된 자격 증명은 더 넓은 것으로 재시도되지 않습니다 — 폴백은 아무도 수행하지 않기로 선택한 권한 상승이기 때문입니다.

도구

도구

기능

get_credit_balance()

남은 컴퓨팅 크레딧. 크레딧 1개는 표준 환경 1개를 1분 동안 실행합니다.

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?)

포트를 웹에 열고 해당 포트에 도달하는 링크를 얻습니다. 포트당 멱등적입니다.

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 키는 거부됩니다. 목록은 활성 토큰을 돌려주며, 토큰은 권한이기 때문입니다.

구축된 규칙

다음은 스트리밍 exec API의 순진한 클라이언트가 모델을 오도하는 방식과, 이 서버가 대신 하는 방식입니다.

  • 종료되지 않은 스트림은 UNKNOWN이지 성공이 아닙니다. 응답이 종료 이벤트 없이 끝나면 도구는 그 단어로 말합니다. 0 종료가 아니며, 에이전트는 이를 근거로 비멱등 명령을 재시도해서는 안 됩니다.

  • 서버보다 마감이 느슨합니다. 따라서 서버 측 응답이 항상 경쟁에서 이깁니다. 먼저 포기하는 클라이언트는 "빌드 완료"를 "알 수 없음"으로 바꾸며, 숫자는 추측이 아니라 서버에서 미러링됩니다.

  • 거부에는 코드가 아닌 해결책이 포함됩니다. 플랜 한도에 도달하면 한도, 현재 수, 그리고 해야 할 일을 얻습니다. 숫자는 서버에서 오는데, 클라이언트에 하드코딩된 한도는 플랜이 바뀌는 순간 거짓말이 되기 때문입니다.

  • 결과는 핸들이지 페이로드가 아닙니다. 출력은 삭제된 바이트 수를 명시하여 꼬리 부분만 제공됩니다. 빌드 로그는 수 메가바이트일 수 있으며, 그 크기의 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