MCP Protocol

29 tools your agent can call

CodeOrch exposes a typed MCP server. Any MCP-compatible client — Claude Code, Cursor, Aider — can call these tools at runtime to manage tasks, search code, and orchestrate context. All 29 tools are production-ready and metered only where LLM calls are involved.

Task Management

begin

One-shot lifecycle: create a task (or match existing), claim it, orchestrate context, and start working. The primary entry point for agents.

begin(project_id, title="Add dark mode", description="...")
create_task

Queue a task on the board without claiming or orchestrating it. Use when batching multiple tasks at once.

create_task(project_id, title="Refactor auth", description="...")
list_tasks

List tasks in a project with optional filters (status, assignee, board). Returns compact rows with id, title, status, priority.

list_tasks(project_id, status="in_progress")
get_task

Fetch full task details by UUID or 8-char prefix. Returns title, status, priority, claimed_by, tags, and briefing summary.

get_task(task_id="abc12345")
get_task_briefing

Fetch the orchestrated briefing for a task. Non-blocking: returns pending with retry_after if orchestration is still running.

get_task_briefing(task_id="abc12345")
finish

Submit task for review, run the orchestrator review gate, and optionally create a PR. Pass changed_files, key_functions, and important_chunks.

finish(task_id, notes="Done", changed_files=["src/auth.ts"])
discuss_task

Record GSD-Core discussion decisions and transition the task to discussed status. Decisions are stored in orchestration_prompt.

discuss_task(task_id, decisions="# Decision: Use JWT...")
break_task

Decompose a task into 2-5 atomic subtasks with dependency links. The orchestrator analyzes the briefing to create focused children.

break_task(task_id, max_subtasks=3)
plan_project

Convert a high-level goal into a sequence of dependent tasks. The orchestrator analyzes the codebase and creates a task tree.

plan_project(project_id, goal="Implement auth system")
add_task_dependency

Link task_id as depending on depends_on_task_id. Circular dependencies are rejected.

add_task_dependency(task_id="a", depends_on_task_id="b")

Code Intelligence

find_files

Find files in the project repo by glob pattern, extension, or content. Excludes node_modules, .git, dist by default.

find_files(project_id, pattern="src/**/*.ts", contains="auth")
read_batch

Confirm up to 5 files exist in the indexed snapshot. Returns path, char_count, line_count. Use Read tool after to load content.

read_batch(project_id, filepaths=["src/auth.ts", "src/types.ts"])
get_file_fresh

Confirm a file exists in the indexed snapshot. MUST be called before re-editing a file you already modified this session.

get_file_fresh(project_id, filepath="src/auth.ts")
search

Hybrid search across docs, decisions, and code vectors. Large results are automatically archived. Use expand() to retrieve.

search(project_id, query="how is auth handled", kinds=["code","docs"])
expand

Retrieve an archived tool result by its key. Archives expire after 24 hours.

expand(key="abc123")

Context & Memory

set_contextignore

Set per-project .contextignore patterns. Files matching patterns are excluded from find_files results and briefings.

set_contextignore(project_id, ["*.lock", "dist/**"])
get_contextignore

Return the active .contextignore patterns for the given project.

get_contextignore(project_id)
get_context_quality

Compute the 7-signal context quality score: context_fill, stale_reads, duplicates, agent_efficiency, bloated_results, compaction_depth, decision_density.

get_context_quality(task_id)
process_data

Execute code in a sandboxed subprocess. Only stdout enters the agent context. Use for counting, filtering, parsing without flooding context.

process_data(code="print(len(open('file.txt').readlines()))", language="python")
snapshot_session

Build and persist a pre-compaction session snapshot for a task. Call when context window is getting full (~20+ tool calls).

snapshot_session(task_id, note="Halfway through auth refactor")
remember

Unified write for project memory. kind: decision, session, learning, or doc. Stored in Neo4j + Qdrant for future briefings.

remember(project_id, kind="decision", payload={"title": "Use JWT", "decision": "..."})

Project Setup

list_projects

List all projects accessible to the current user (filtered by org). Returns project IDs, names, and status. Use this to discover project_id at the start of a session.

list_projects()
index_status

Poll the current indexing status and last_graph_indexed_at timestamp for a project. Use after sync() to confirm when re-indexing is complete.

index_status(project_id)
workspace_init

First-time session setup. Auto-detects or creates a CodeOrch project and returns workspace files (CLAUDE.md, AGENTS.md, etc.).

workspace_init(cwd="D:/my-project")
initialize_project

First-time project bootstrap: create project in the platform using the project_name. Idempotent.

initialize_project(project_name="my-app")
sync

Pull a GitHub branch and re-index. GitHub MUST be connected. Returns immediately; indexing runs in background.

sync(project_id, branch="main")
connector_health

Check health of all backend connectors: LLM (Groq), PostgreSQL, Redis, Qdrant. Returns per-connector ok/error + latency.

connector_health()
reflect

Project health analysis. focus: all, insights, next, stale, or summary. Returns insights, stale items, and suggested next tasks.

reflect(project_id, focus="insights")
delete_deprecated_docs

Delete stale knowledge-base documents, decisions, and briefing vectors. Always dry_run=True first.

delete_deprecated_docs(project_id, older_than_days=30, dry_run=True)

Ready to orchestrate?

Connect your repo and let your agent call these tools in under 2 minutes.

Start Free