Orchestration MCP
Orchestration MCP
외부 코딩 에이전트 실행을 시작하고 추적하기 위한 TypeScript MCP 서버입니다.
MCP 인터페이스는 안정적으로 유지되면서 내부 실행 백엔드는 다음을 대상으로 할 수 있습니다:
로컬
codex로컬
claude_code원격
remote_a2a
이를 통해 최상위 에이전트는 하나의 MCP 도구 세트를 호출하고, 오케스트레이션 계층은 하위 에이전트가 로컬 SDK 프로세스인지 아니면 원격 A2A 호환 에이전트인지 결정합니다.
설치 및 빌드
cd orchestration-mcp
npm install
npm run buildRelated MCP server: mcpcodeserver
MCP 서버 실행
cd orchestration-mcp
npm start이 명령은 dist/index.js에서 MCP 서버를 시작합니다.
Codex MCP 설정 예시
Codex가 이 MCP 서버를 로드하도록 하려면 ~/.codex/config.toml에 다음과 같은 항목을 추가하십시오:
[mcp_servers.orchestration-mcp]
command = "node"
args = ["/abs/path/to/orchestration-mcp/dist/index.js"]
enabled = true이 저장소 경로를 사용하는 예시:
[mcp_servers.orchestration-mcp]
command = "node"
args = ["/Users/fonsh/PycharmProjects/Treer/nanobot/orchestration-mcp/dist/index.js"]
enabled = true설정을 업데이트한 후 Codex를 다시 시작하여 MCP 서버를 다시 로드하십시오.
MCP가 노출하는 기능
서버는 다음 도구들을 등록합니다:
spawn_runget_runpoll_eventscancel_runcontinue_runlist_runsget_event_artifact
일반적인 MCP 흐름
spawn_run을 호출하여 하위 에이전트 실행을 생성합니다.터미널 이벤트나 대기 상태가 보일 때까지
poll_events를 호출합니다.실행이
input_required또는auth_required상태가 되면continue_run을 호출합니다.최신 실행 요약을 보려면
get_run을 호출합니다.이벤트에
artifact_refs가 포함되어 있으면get_event_artifact를 호출하여 전체 페이로드를 가져옵니다.
spawn_run 참고 사항
backend:"codex","claude_code"또는"remote_a2a"role:planner,worker,reviewer와 같은 오케스트레이션 역할 라벨prompt: 간단한 실행을 위한 일반 텍스트 지침input_message: 멀티파트/A2A 스타일 입력을 위한 선택적 구조화 메시지cwd: 절대 작업 디렉토리session_mode:new또는resumesession_id: 이전 세션을 재개할 때 필수profile: 페르소나/직무 기술서 파일에 대한 선택적 경로. 제공되면 오케스트레이션이 파일을 로드하여 에이전트 컨텍스트에 주입합니다. 기본 시스템 프롬프트 지원이 있는 백엔드는 이를 사용하며, 다른 백엔드는 실행 컨텍스트 앞에 이를 추가합니다.
프로필을 사용하라는 명시적인 지시가 없는 한 profile은 비워 두십시오.
output_schema: 구조화된 최종 출력을 위한 선택적 JSON Schemametadata: 상관관계 및 감사를 위해 저장되는 선택적 오케스트레이션 메타데이터backend_config: 선택적 백엔드별 설정.remote_a2a의 경우 여기에agent_url및 인증 헤더/토큰을 설정하십시오.
모든 백엔드에 대해 cwd는 실행/세션 저장을 위해 오케스트레이션 측에서 사용하는 작업 디렉토리입니다.
remote_a2a의 경우 spawn_run.cwd는 원격 하위 에이전트로 전달되어 해당 A2A 작업 컨텍스트의 실행 디렉토리가 됩니다.
prompt 또는 input_message 중 하나 이상이 필수입니다.
간단한 예시:
{
"backend": "codex",
"role": "worker",
"prompt": "Inspect the repository and summarize the architecture.",
"cwd": "/abs/path/to/project",
"session_mode": "new"
}원격 A2A 예시:
{
"backend": "remote_a2a",
"role": "worker",
"prompt": "Inspect the repository and summarize the architecture.",
"cwd": "/abs/path/to/project",
"session_mode": "new",
"backend_config": {
"agent_url": "http://127.0.0.1:53552"
}
}검토자 워크플로우 자산
이 저장소에는 다중 에이전트 코딩 워크플로우를 위한 즉시 사용 가능한 검토자 설정이 포함되어 있습니다:
프로필:
./profile/reviewer-remediator.md
검토자 실행을 위한 권장 spawn_run 사용법:
{
"backend": "codex",
"role": "reviewer",
"cwd": "/abs/path/to/project",
"session_mode": "new",
"profile": "/abs/path/to/orchestration-mcp/profile/reviewer-remediator.md",
"prompt": "Review only the latest diff in the current working directory, apply low-risk fixes when clearly correct, validate them, and write a remediation report."
}continue_run 참고 사항
실행이 input_required 또는 auth_required 상태가 되고 백엔드가 대화형 재개를 지원하는 경우 continue_run을 사용하십시오.
입력값:
run_idinput_message
get_event_artifact 참고 사항
poll_events가 반환한 정제된 이벤트에 event.data.artifact_refs가 포함되어 있고 전체 원본 페이로드가 필요한 경우 get_event_artifact를 사용하십시오.
입력값:
run_idseqfield_path:event.data에 상대적인 JSON Pointer (예:/stdout,/raw_tool_use_result,/input/content)offset: 선택적 바이트 오프셋, 기본값0limit: 선택적 바이트 제한, 기본값65536
일반적인 흐름:
poll_events를 호출합니다.정제된 이벤트에서
event.data.artifact_refs를 검사합니다.동일한
run_id, 이벤트seq및 노출된field_path값 중 하나를 사용하여get_event_artifact를 호출합니다.
백엔드 기본값
codex: 현재@openai/codex-sdk기본값과 어댑터에 이미 연결된 비대화형 실행 설정을 사용합니다.claude_code: MCP 호출이 비차단 상태로 유지되도록permissionMode: "bypassPermissions"와 함께@anthropic-ai/claude-agent-sdk를 사용하며,resume을 위해 지속된 백엔드 세션 ID를 재사용합니다.remote_a2a:@a2a-js/sdk를 사용하여 원격 A2A 호환 에이전트에 연결하고, 작업 업데이트를 정규화된 오케스트레이션 이벤트로 스트리밍하며,input_required에 대해continue_run을 지원합니다.
claude_code의 경우 테스트 전에 로컬 환경에 Claude Code 인증 설정이 이미 작동 중인지 확인하십시오.
A2A 에이전트 테스트
이 저장소에는 로컬 A2A 래핑 테스트 에이전트를 위한 도우미 모듈이 포함되어 있습니다:
dist/test-agents/codex-a2a-agent.jsdist/test-agents/claude-a2a-agent.jsdist/test-agents/start-a2a-agent.js
이들은 로컬 Codex 및 Claude SDK를 A2A 서버 뒤에 래핑하는 시작 도우미를 내보내어 오케스트레이션 MCP가 내부 remote_a2a 백엔드를 실제 하위 에이전트에 대해 테스트할 수 있도록 합니다.
대화형 래퍼 런처를 시작하려면:
npm run start:a2a-agent스크립트가 codex를 래핑할지 claude_code를 래핑할지 묻습니다.
시작 후 agent_url과 MCP 계층을 위한 즉시 사용 가능한 spawn_run 페이로드를 출력합니다. 래퍼는 더 이상 시작 시 작업 디렉토리를 잠그지 않습니다. 각 remote_a2a 호출은 spawn_run에 제공된 cwd를 사용하며, 래퍼는 동일한 A2A contextId의 수명 동안 해당 cwd를 고정 상태로 유지합니다.
저장소
실행 데이터는 다음 위치에 저장됩니다:
<cwd>/.nanobot-orchestrator/
runs/
<run_id>/
run.json
events.jsonl
result.json
artifacts/
000008-command_finished/
manifest.json
stdout.0001.txt
stdout.0002.txt
sessions/
<session_id>.json참고 사항:
events.jsonl은poll_events소비를 위한 정제된 이벤트를 저장합니다.크기가 큰 원본 페이로드는 이벤트별 아티팩트 파일로 이동되며
event.data.artifact_refs에서 참조됩니다.run.json과result.json은 현재 실행 스냅샷과 최종 결과 동작을 유지합니다.저장소 디렉토리 이름은 기존 구현과의 하위 호환성을 위해 현재
.nanobot-orchestrator/입니다.
Available Tools
7 toolscancel_runB
Cancel a running external coding-agent run.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| run_id | Yes | |
| status | Yes | |
| cancelled_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('cancel') but doesn't explain what cancellation entails (e.g., whether it's reversible, if it stops processes immediately, what permissions are required, or any side effects like resource cleanup). For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the key action and target, making it efficient and easy to parse. Every word earns its place, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation with one parameter) and the presence of an output schema (which handles return values), the description is minimally adequate. However, with no annotations and low schema coverage, it lacks details on behavioral aspects like side effects or error conditions. It meets the basic requirement but leaves gaps in understanding the tool's full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter ('run_id') with 0% description coverage, meaning the schema provides no semantic details. The description doesn't add any information about this parameter (e.g., what a 'run_id' is, how to obtain it, or format examples). However, with only one parameter, the baseline is higher; the description implies the parameter identifies the run to cancel but doesn't compensate for the lack of schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('cancel') and the target ('a running external coding-agent run'), which is specific and unambiguous. It distinguishes from siblings like 'continue_run' or 'get_run' by focusing on termination rather than continuation or retrieval. However, it doesn't explicitly differentiate from all siblings (e.g., 'spawn_run' is about creation, but this isn't stated).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., that the run must be active), exclusions (e.g., not for completed runs), or comparisons to siblings like 'continue_run' for ongoing runs or 'list_runs' for status checks. This leaves the agent to infer usage context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
continue_runB
Send an additional input message to a run that is waiting for more input.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| input_message | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| run_id | Yes | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While it correctly indicates a write operation ('send'), it lacks critical details: required permissions, whether this changes run state, rate limits, error conditions, or what happens after sending input. For a mutation tool with complex nested parameters, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every word earns its place, making it maximally concise while still conveying the essential action and context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters with nested objects), no annotations, but presence of an output schema, the description is minimally adequate. The output schema reduces need to describe return values, but the description should provide more context about run states, prerequisites, and parameter meanings to be truly complete for this interactive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate but provides no parameter information. It doesn't explain what 'run_id' refers to, the structure of 'input_message', valid roles, or part types. With 2 parameters including complex nested objects, the description fails to add any semantic value beyond what the bare schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('send an additional input message') and target ('to a run that is waiting for more input'), providing specific verb+resource. However, it doesn't explicitly differentiate from sibling tools like 'spawn_run' or 'cancel_run', which would require mentioning it's for existing runs in a waiting state rather than creating new runs or terminating them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying 'to a run that is waiting for more input', suggesting this tool should be used when a run is in a specific state. However, it doesn't provide explicit when-not-to-use guidance or name alternatives like 'spawn_run' for new runs or 'cancel_run' for termination, leaving some ambiguity about sibling tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_artifactC
Read a sanitized event artifact by run_id, seq, and JSON Pointer field_path.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| seq | Yes | ||
| field_path | Yes | ||
| offset | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| seq | Yes | |
| mime | Yes | |
| offset | Yes | |
| run_id | Yes | |
| content | Yes | |
| relpath | Yes | |
| encoding | Yes | |
| has_more | Yes | |
| field_path | Yes | |
| total_bytes | Yes | |
| returned_bytes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states it's a read operation. It doesn't disclose behavioral traits like authentication requirements, rate limits, error conditions, what 'sanitized' means, or how the JSON Pointer field_path works. The mention of 'sanitized' hints at data transformation but lacks details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence with zero wasted words. Front-loaded with the core purpose, and every element (verb, resource, parameters) earns its place. No structural issues despite the brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters with 0% schema coverage and no annotations, the description is incomplete—it doesn't explain parameter semantics or behavioral context. However, the existence of an output schema reduces the need to describe return values. For a read operation, this is minimally adequate but leaves important gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate but only lists parameter names without explaining their meaning. It mentions 'run_id, seq, and JSON Pointer field_path' but doesn't clarify what these identifiers represent, what 'offset' and 'limit' do, or how field_path syntax works. This leaves significant gaps in parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Read') and resource ('sanitized event artifact') with specific identifiers (run_id, seq, field_path). It distinguishes from siblings like get_run or list_runs by focusing on artifacts rather than runs themselves. However, it doesn't explicitly contrast with poll_events which might also retrieve event data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like poll_events or get_run. The description mentions parameters but doesn't provide context about appropriate use cases, prerequisites, or when other tools might be more suitable. This leaves the agent without clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_runB
Get the current summary status for a known run.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| cwd | Yes | |
| role | Yes | |
| run_id | Yes | |
| status | Yes | |
| backend | Yes | |
| summary | Yes | |
| last_seq | Yes | |
| metadata | Yes | |
| remote_ref | Yes | |
| session_id | Yes | |
| started_at | Yes | |
| updated_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves a 'summary status,' implying a read-only operation, but doesn't specify whether it's safe, if it requires authentication, rate limits, or what happens if the run_id is invalid. For a tool with no annotations, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with zero waste: 'Get the current summary status for a known run.' It is front-loaded and efficiently conveys the core purpose without unnecessary elaboration, 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, no nested objects) and the presence of an output schema (which handles return values), the description is minimally adequate. However, with no annotations and incomplete parameter semantics, it lacks details on behavioral traits and usage context, making it only partially complete for effective agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 1 parameter (run_id) with 0% description coverage, meaning the schema provides no semantic details. The description adds minimal context by implying 'run_id' refers to 'a known run,' but doesn't explain format, examples, or constraints. This partially compensates for the schema gap, but not fully, aligning with the baseline for moderate coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get the current summary status for a known run.' It specifies the verb ('Get'), resource ('summary status'), and scope ('for a known run'), which is specific and actionable. However, it doesn't explicitly differentiate from sibling tools like 'list_runs' or 'poll_events', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It mentions 'a known run' but doesn't clarify prerequisites (e.g., that the run must already exist from a previous operation) or contrast it with siblings like 'list_runs' (for listing runs) or 'poll_events' (for monitoring events). This leaves the agent without explicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_runsC
List runs known to the current orchestration MCP process.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| backend | No | ||
| cwd | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| runs | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but discloses minimal behavioral traits. It indicates this is a listing operation but doesn't describe pagination, sorting, default behavior, rate limits, or authentication needs. For a tool with 3 parameters and no annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded with the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (which handles return values), the description's minimalism is partially acceptable. However, with 3 parameters, no annotations, and 0% schema coverage, the description should provide more context about filtering behavior and usage scenarios to be truly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate but adds no parameter information. It doesn't explain what 'status', 'backend', or 'cwd' mean, their relationships, or how they filter results. With 3 parameters (2 with enums) undocumented, this is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('runs'), and specifies the scope ('known to the current orchestration MCP process'). However, it doesn't explicitly differentiate from sibling tools like 'get_run' or 'poll_events', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_run' (for single run details) or 'poll_events' (for event monitoring). It mentions the scope but offers no explicit when/when-not instructions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
poll_eventsB
Long-poll incremental events for a run after a known sequence number.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| after_seq | Yes | ||
| limit | No | ||
| wait_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | |
| run_id | Yes | |
| status | Yes | |
| next_after_seq | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It mentions 'Long-poll' and 'incremental events,' hinting at real-time behavior and potential waiting, but lacks details on rate limits, authentication needs, error handling, or what 'events' entail. This leaves significant behavioral gaps for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads key information ('Long-poll incremental events') without unnecessary words. Every part earns its place by specifying the action, resource, and key parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters with 0% schema coverage, no annotations, but an output schema exists, the description is moderately complete. It covers the core purpose and one parameter but misses details on other parameters, behavioral traits, and usage context. The output schema helps, but more guidance is needed for effective tool use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains 'after_seq' as 'after a known sequence number,' adding context beyond the schema's numeric constraints. However, it doesn't cover other parameters like run_id, limit, or wait_ms, leaving them undocumented. Baseline is 3 due to partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Long-poll incremental events') and resource ('for a run'), specifying it retrieves events after a known sequence number. It distinguishes from siblings like get_event_artifact or get_run by focusing on incremental polling rather than direct fetching, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for monitoring incremental events in a run after a specific sequence, suggesting it's for real-time updates. However, it doesn't explicitly state when to use this vs. alternatives like get_event_artifact or list_runs, nor does it mention prerequisites like needing an active run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spawn_runB
Start a new external coding-agent run and return immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| backend | Yes | Backend to execute the run. Supported values are "codex", "claude_code", and "remote_a2a". | |
| role | Yes | Supervisor role for this run: planner, worker, or reviewer. | |
| prompt | No | Primary instruction for the coding agent run. | |
| input_message | No | Structured input message for multi-part or A2A-compatible runs. | |
| cwd | Yes | Absolute working directory where the agent should run and where artifacts are stored. | |
| session_mode | Yes | Use "new" to create a fresh session or "resume" to continue an existing one. | |
| session_id | No | ||
| profile | No | Optional path to a profile/persona/job-description file. Leave blank unless explicitly instructed to use a profile. | |
| output_schema | No | Optional JSON Schema for structured final output from the run. | |
| metadata | No | Optional orchestration metadata for task/step correlation. It is stored but not interpreted by the MCP server. | |
| backend_config | No | Optional backend-specific configuration, such as remote_a2a agent_url and auth headers. |
Output Schema
| Name | Required | Description |
|---|---|---|
| role | Yes | |
| run_id | Yes | |
| status | Yes | |
| backend | Yes | |
| session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Start a new external coding-agent run' implies a write/mutation operation, but the description doesn't disclose permission requirements, rate limits, whether this consumes resources, what happens to previous runs, or how to monitor the started run. 'Return immediately' suggests asynchronous execution but lacks details about how to track completion or retrieve results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise - a single sentence that communicates the core action and key behavioral trait ('return immediately'). There's zero wasted language, and it's front-loaded with the essential information. Every word earns its place in this minimal description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 11 parameters, nested objects, and no annotations, the description is minimal. While an output schema exists (reducing need to describe return values), the description doesn't address the tool's role in the broader workflow with sibling tools, doesn't explain the asynchronous nature hinted by 'return immediately', and provides no context about error conditions or typical usage patterns. It's adequate but leaves significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 91% schema description coverage, the schema does most of the parameter documentation work. The description adds no parameter-specific information beyond what's in the schema. It doesn't explain relationships between parameters (like how 'session_mode' interacts with 'session_id'), typical values, or usage patterns. The baseline of 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Start a new external coding-agent run') and resource ('coding-agent run'), with the specific behavioral detail 'and return immediately' distinguishing it from potentially blocking operations. However, it doesn't explicitly differentiate from sibling tools like 'continue_run' or 'get_run' beyond the 'start new' aspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides minimal guidance - only that it starts a new run and returns immediately. There's no explicit guidance on when to use this versus alternatives like 'continue_run' for resuming sessions, 'cancel_run' for stopping runs, or 'poll_events' for monitoring. No prerequisites, constraints, or typical use cases are mentioned.
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.
7 tool updates
v0.1.0- First observed
cancel_run - First observed
continue_run - First observed
get_event_artifact - First observed
get_run - First observed
list_runs - First observed
poll_events - First observed
spawn_run
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose with no overlap: cancel_run stops a run, continue_run sends input, get_event_artifact reads artifacts, get_run retrieves status, list_runs enumerates runs, poll_events monitors events, and spawn_run initiates runs. The descriptions make it easy to distinguish between status retrieval, event handling, run management, and input/output operations.
All tool names follow a consistent verb_noun pattern with snake_case, such as cancel_run, get_run, list_runs, and spawn_run. This uniformity makes the set predictable and easy to navigate, with no deviations in style or structure across the seven tools.
With 7 tools, the count is well-scoped for an orchestration server focused on managing external coding-agent runs. Each tool serves a specific function in the lifecycle of runs, from creation to monitoring and termination, without being overly sparse or bloated, fitting typical orchestration needs.
The tool set provides complete coverage for the orchestration domain: it supports the full lifecycle of runs with spawn_run (create), get_run and list_runs (read), continue_run (update input), and cancel_run (delete/terminate), plus event handling with poll_events and get_event_artifact. There are no obvious gaps, enabling agents to manage runs effectively from start to finish.
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Hosted MCP server and Agent Skills for specs, engineering threads, and project memory.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Related MCP Servers
- AlicenseCqualityDmaintenanceA TypeScript-based server that allows calling other MCP clients from your own MCP client, facilitating task delegation and context window offloading for enhanced multi-agent interactions.328MIT
- AlicenseNot gradedqualityCmaintenanceProxy MCP server that translates tool calls into TypeScript code generation, enabling LLMs to orchestrate multi-tool workflows efficiently via code.12 npm14MIT
- AlicenseNot gradedqualityBmaintenanceA local MCP server that orchestrates multi-agent coding teams by spawning workers, delegating tasks, and managing session lifecycles through an external MCP client.MIT
- AlicenseAqualityFmaintenanceMCP server for running external coding agents as background tasks inside Claude Code. Supports multiple backends including Codex, Grok, GLM, DeepSeek, and more.7MIT