mcp zero-budget semantic-index
MCP server worker
Pin the MCP server's JSON-RPC contract end-to-end: the dispatcher handshake + tools/list completeness vs the TOOLS registry; per-tool happy/error paths with the wsId-required audit (no tool may write without an explicit workspace id); the deterministic process_request id (kind prefix + 16-byte hex digest) so add_job/tailor/evaluate_job dedup on retry; and the focused update_job patch shaping that the agent surface depends on.
Behaviours 0 Tests 151 Graph 152 nodes · 155 edges Runner - CircleCI mcp_vitest Source qa/suites/mcp.yaml
Test witnesses
These tests belong to the suite. Missing implementation links stay visible until a code-backed graph claim records them.
| Test | Status | Implementation | Open |
|---|---|---|---|
GET / returns capability summary for humans @cv/mcp · vitest · test/dispatcher.test.ts | catalog | missing implementation link | Test |
GET /mcp with SSE accept returns 405 for streamable HTTP without server push @cv/mcp · vitest · test/dispatcher.test.ts | catalog | missing implementation link | Test |
notifications (no id) return 202 with empty body @cv/mcp · vitest · test/dispatcher.test.ts | catalog | missing implementation link | Test |
responds to initialize with server info + tools capability @cv/mcp · vitest · test/dispatcher.test.ts | catalog | missing implementation link | Test |
tools/call with invalid args returns MCP tool error (isError: true) @cv/mcp · vitest · test/dispatcher.test.ts | catalog | missing implementation link | Test |
tools/call with unknown tool returns RPC -32602 @cv/mcp · vitest · test/dispatcher.test.ts | catalog | missing implementation link | Test |
tools/list returns all registered tools @cv/mcp · vitest · test/dispatcher.test.ts | catalog | missing implementation link | Test |
differentiates by kind prefix even when parts collide @cv/mcp · vitest · test/process-request-id.test.ts | catalog | missing implementation link | Test |
differentiates by workspace id (defense in depth) @cv/mcp · vitest · test/process-request-id.test.ts | catalog | missing implementation link | Test |
differentiates by workspace job id @cv/mcp · vitest · test/process-request-id.test.ts | catalog | missing implementation link | Test |
emits 16-byte (32 hex char) digest + prefix @cv/mcp · vitest · test/process-request-id.test.ts | catalog | missing implementation link | Test |
is deterministic — same parts produce the same id @cv/mcp · vitest · test/process-request-id.test.ts | catalog | missing implementation link | Test |
keys on (workspaceId, job_id) @cv/mcp · vitest · test/process-request-id.test.ts | catalog | missing implementation link | Test |
keys on (workspaceId, job_id, stage) @cv/mcp · vitest · test/process-request-id.test.ts | catalog | missing implementation link | Test |
tailor and evaluate for same job differ @cv/mcp · vitest · test/process-request-id.test.ts | catalog | missing implementation link | Test |
'add_job' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'add_node' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'add_section' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'claim_process_requests' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'compile_cv_pdf' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'delete_job' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'delete_node' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'evaluate_job' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'get_cv_typst' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'get_cvl_tree' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'get_job' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'get_job_process_state' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'get_workspace_intelligence' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'get_workspace_summary' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'list_activity' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'list_jobs' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'list_process_requests' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'list_stage_attempts' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'list_views' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'move_node' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'move_section' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'patch_layout' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'patch_node_data' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'patch_order' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'patch_settings' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'rerun_extract' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'rerun_stage' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'seed_profile' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'set_active_view' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'set_cvl_group_selection' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'set_cvl_section_group' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'set_score_criterion' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'set_selection' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'tailor' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'translate' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'update_job' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'update_node' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'update_process_request' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
'update_section' rejects when wsId is absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
CV and CL for the same job produce two distinct process_requests @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
MCP agents claim and complete queued process requests through the shared worker API @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
add_job with the same URL twice returns the same job_id and dedups @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
can attach a tailored CV PDF through the web file upload path @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
compiles a workspace CV through the Koyeb service and returns base64 bytes @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
covers the MCP LinkedIn URL-to-final-CV path @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
emits node.create op with provided fields @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
emits node.delete op @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
emits node.move op @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
emits node.update op with patch @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
emits selection.update op with add delta @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
emits selection.update op with setActive delta @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
enqueues a TAILOR process_request keyed on (workspaceId, job_id, branch_path) @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
enqueues an EVALUATE process_request keyed on (workspaceId, job_id) @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
forwards force:true to the agent write envelope @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
get_job returns JobNotFound for missing job @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
get_job_process_state exposes URL-only jobs as extractable but not ready for evaluation or tailoring @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
get_job_process_state focuses one job and returns JobNotFound when absent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
get_workspace_intelligence returns the process projection @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
get_workspace_summary resolves slug to row id @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
happy path applies a job.create op for the supplied URL @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
happy path dispatches translate op and returns source/target paths @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
happy path emits a minimal settings.update scoring patch @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
happy path emits job.delete @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
happy path emits job.update op @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
happy path returns structured content with paths and langs @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
injects the same fixed-section render context as browser export @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
list_activity reads filtered activity rows through the web activity API @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
list_jobs and get_job expose resolved public fields while stripping hidden link fields @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
list_jobs and get_job include workspace-private origins metadata on the job attributes @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
list_jobs reports projection failure instead of falling back to D1 jobs @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
list_jobs returns jobs from the public resolved jobs API without raw sub-doc or D1 job reads @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
list_jobs surfaces workspace-private attributes on the job shape @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
list_stage_attempts returns model attempt rows @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
list_views reports projection failure instead of falling back to D1 settings @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
list_views resolves slug to row id @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
list_views returns views from the settings sub-doc without D1 settings reads @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
normalizes LinkedIn collection URLs before deriving the workspace job id @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
patch_node_data shallow-merges with current data before emitting node.update @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
reads tailored_cv from the jobs sub-doc, not D1, immediately after tailor @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
reads workspace CVL from the web snapshot instead of stale D1 profile JSON @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects reserved adId attribute before queuing work @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects reserved ad_id attribute before queuing work @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects reserved jobId attribute before queuing work @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects reserved job_id attribute before queuing work @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects reserved roleId attribute before queuing work @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects reserved role_id attribute before queuing work @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects reserved sourceAdId attribute before queuing work @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects reserved source_ad_id attribute before queuing work @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects reserved url attribute before queuing work @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects when neither branch_path nor target is supplied @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects when source and target paths reference the same language tree @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects when source_lang equals target_lang (validateTranslateOp) @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects when translated_node is missing (wsId audit compliance) @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects when url is missing @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects when workspace does not exist @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects when wsId is missing (Zod validation) @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects with JobNotFound when job is missing @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
requires the job.create write to succeed @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rerun_extract clears AI-owned fields and records a process activity row @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rerun_stage queues non-extract stage repair commands @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
resolves workspace by slug @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
returns CvProfileNotFound when workspace has no cv_profile @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
returns JobNotFound when job is missing @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
returns JobNotFound when jobId does not exist @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
returns TailoredCvNotFound when job has no tailored_cv @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
returns Typst source for per-job tailored CV when jobId is provided @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
returns WorkspaceNotFound when workspace is missing @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
returns WorkspaceNotFound when workspace missing @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
returns a tool error when Koyeb returns diagnostics @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
returns exact node paths and editable data for a CVL branch @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
returns insertedId in structuredContent @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
returns non-empty Typst source for workspace quarry without jobId @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
returns summary with job/view counts from sub-docs without D1 fallbacks @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
scrubs hidden shared ids from Workspace Intelligence output @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
scrubs hidden shared ids from process request list, claim, and update payloads @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
serialises a Node tree without leaking personal-info metadata @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
set_active_view emits settings.update @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
set_cvl_group_selection writes through the variant-pool wrapper Node @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
set_cvl_section_group breakout extracts a wrapped section via cvl.break_out @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
set_cvl_section_group breakout no-ops when the section is solo @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
set_cvl_section_group set wraps a solo section into a fresh variant-pool wrapper @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
set_score_criterion uses row id for the workspace snapshot @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
strips nested hidden link fields without dropping real nested ids @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
surfaces realtime worker error as InvalidShape when broker rejects @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
the emitted node.create op carries the same id as insertedId @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
two concurrent add_job calls with the same URL collapse to ONE process_request and ONE job @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
two concurrent evaluate calls for the same job collapse to ONE process_request @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
two concurrent tailor calls for the same job + branch collapse to ONE process_request @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
uses caller-supplied id when provided @cv/mcp · vitest · test/tools.test.ts | catalog | missing implementation link | Test |
rejects reserved update_job patch fields before calling ops @cv/mcp · vitest · test/update_job.test.ts | catalog | missing implementation link | Test |
routes delete_job through the shared ops endpoint @cv/mcp · vitest · test/update_job.test.ts | catalog | missing implementation link | Test |
routes evaluate_job through the process_request queue (not job.update) @cv/mcp · vitest · test/update_job.test.ts | catalog | missing implementation link | Test |
routes tailor through the process_request queue (not job.update) @cv/mcp · vitest · test/update_job.test.ts | catalog | missing implementation link | Test |
routes update_job patches through the shared ops endpoint @cv/mcp · vitest · test/update_job.test.ts | catalog | missing implementation link | Test |
strips hidden link fields inside JSON-string update_job patches @cv/mcp · vitest · test/update_job.test.ts | catalog | missing implementation link | Test |
strips nested hidden link fields from update_job patches @cv/mcp · vitest · test/update_job.test.ts | catalog | missing implementation link | Test |