{"serverId":"mcp-registry/io.github.ajc3xc/meridian","tools":[{"name":"link_flag_to_section","fixed":{"name":"link_flag_to_section","description":"[MAINTENANCE] 8ca89e8f — DURABLY link a docx section/paragraph/figure/table (any doc_elements id — the same id space index_figure/index_table/link_figure_caption already anchor to) to the config-flag state that produced its underlying numbers. This is the check that catches 'results computed with the wrong flag state, then cited as current' — e.g. a flag that silently skipped a whole code path regardless of another flag, or a stale count cited after a fix superseded it. Typical flow: call get_fl","inputSchema":{"type":"object","required":["doc","element_id","flag_name","value"],"properties":{"doc":{"type":"string","description":"The stored document's source (the path/URL you ingested it under via ingest_document)."},"value":{"description":"The value the flag actually had when this section's numbers were produced (any JSON scalar — string/number/boolean/null).","type":"string"},"default":{"description":"The flag's default AS RECORDED by get_flag_registry at link time — what a later get_flag_drift compares the current codebase default against. Optional but recommended.","type":"string"},"flag_name":{"type":"string","description":"The config flag's name (as scanned by get_flag_registry, e.g. 'DT_ONLY_WIDTH')."},"element_id":{"type":"string","description":"The doc_elements.id of the section/paragraph/figure/table this flag state applies to."},"project_id":{"type":"string"},"source_file":{"type":"string","description":"Optional: the file the flag was read from (from get_flag_registry's 'file'), pinning drift detection to this exact call site."},"source_line":{"type":"integer","description":"Optional: the line the flag was read at (from get_flag_registry's 'line'), paired with source_file."},"project_name":{"type":"string","description":"Project name — an alternative to project_id; resolved to the id internally. project_id wins if both are given."}}},"annotations":{"title":"Link Flag to Section","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Link Flag to Section"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: value, default. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":526,"tokensAfter":535},{"name":"record_handoff_correction","fixed":{"name":"record_handoff_correction","description":"[MAINTENANCE] 3af86d28 — record a corrective handoff when a blocked executor session reaches a wall after receiving a handoff (its evidence/scope no longer holds, a pointer stopped resolving, a required capability went away, etc.). Links to the immutable source_handoff_id (never mutated), classifies the blocker, and carries structured investigation evidence, added/removed/superseded pointers, and changed resources. Records status='draft' by default (or pass status explicitly). Pass idempotency_k","inputSchema":{"type":"object","required":["source_handoff_id","blocker_classification"],"properties":{"mode":{"enum":["full","delta","planner","starter","goal"],"type":"string","description":"Only used when regenerate=true — forwarded to generate_handoff."},"status":{"enum":["draft","verified","superseded","blocked"],"type":"string","description":"Initial status. Default draft."},"version":{"type":"string","description":"Sprint-version bucket in scope, if any — also used to scope the regenerated revision when regenerate=true."},"output_dir":{"type":"string","description":"Only used when regenerate=true; defaults to the server's data directory."},"project_id":{"type":"string"},"regenerate":{"type":"boolean","description":"When true, also repairs pointers, invalidates the source handoff, and produces a new deterministic revision in this SAME call. Default false (record only)."},"session_id":{"type":"string","description":"The blocked executor session recording this correction."},"project_name":{"type":"string","description":"Project name — an alternative to project_id; resolved to the id internally. project_id wins if both are given."},"source_token":{"type":"string","description":"Optional: the <goal_token> value from the original /goal block, preserved for audit only (not re-verified by this call)."},"added_pointers":{"type":"array","items":{"type":"object"},"description":"Pointer dicts (same shape as add_sprint_item_pointer's source_type/targets/label) asserting new evidence. Re-resolved live when regenerate=true."},"idempotency_key":{"type":"string","description":"Optional caller-supplied dedup key so a retried call returns the existing correction instead of duplicating it."},"requested_scope":{"description":"Free-form JSON describing the scope the ORIGINAL handoff asked for, for comparison against what actually got emitted.","type":"string"},"removed_pointers":{"type":"array","items":{},"description":"Pointer dicts or ids being removed as evidence."},"changed_resources":{"type":"array","items":{"type":"string"},"description":"File/resource paths that changed since the source handoff was rendered."},"source_handoff_id":{"type":"string","description":"The immutable handoffs.id row this correction is for (e.g. load_handoff's handoff.id is NOT the row id directly — use a handoff id you have from generate_handoff/get_handoffs)."},"superseded_pointers":{"type":"array","items":{},"description":"Pointer dicts or ids whose premise was replaced."},"blocker_classification":{"enum":["evidence_invalid","scope_stale","pointer_unresolved","dependency_missing","environment_blocked","capability_unavailable","other"],"type":"string","description":"Controlled vocabulary for why the handoff needed correcting."},"investigation_evidence":{"description":"Free-form JSON: what you found during investigation.","type":"string"}}},"annotations":{"title":"Record Handoff Correction","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Record Handoff Correction"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: requested_scope, investigation_evidence. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":939,"tokensAfter":948},{"name":"request_hitl","fixed":{"name":"request_hitl","description":"Surface a question to the human-in-the-loop queue. ALWAYS use this to ask the human a question — never just ask in chat, which is invisible to the dashboard and to an unattended/autonomous run. IMPORTANT: when the project's HITL auto-answer mode is on (1=safe, 2=aggressive) and the question is not destructive / not require_human, this tool RESOLVES IMMEDIATELY and returns the chosen answer inline in the response (it does NOT block) — so calling it is cheap and is the right move even when you exp","inputSchema":{"type":"object","required":["question"],"properties":{"kind":{"enum":["question","correction"],"type":"string","description":"question (default, auto-answerable) or correction (non-blocking mid-run human correction)."},"context":{"type":"string"},"options":{"type":"array","items":{"type":"string"},"description":"Answer choices rendered as selectable buttons in the dashboard."},"urgency":{"enum":["normal","high","blocking"],"type":"string"},"question":{"type":"string"},"project_id":{"type":"string"},"session_id":{"type":"string"},"assigned_to":{"type":"string"},"recommended":{"description":"The safe-default option — an option string or a 0-based index into options. Highlighted in the dashboard; Enter submits it; auto-answer prefers it.","type":"string"},"project_name":{"type":"string","description":"Project name — an alternative to project_id; resolved to the id internally. project_id wins if both are given."},"require_human":{"type":"boolean","description":"When true, the HITL can never be auto-answered — only an explicit human response unblocks it. Reserve for irreversible/destructive actions."}}},"annotations":{"title":"Request HITL","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Request HITL"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: recommended. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":460,"tokensAfter":465}],"toolsChanged":3,"tokensSaved":0,"todo":[{"tool":"accept_handoff","params":["project_id"]},{"tool":"add_custom_hook","params":["project_id"]},{"tool":"add_insight","params":["title","project_id"]},{"tool":"add_note","params":["body","kind","tags","title","category","project_id"]},{"tool":"add_proposal_gate","params":["category","project_id","session_id"]},{"tool":"add_sprint_item","params":["title","version","project_id"]},{"tool":"add_sprint_item_pointer","params":["project_id"]},{"tool":"add_sprint_note","params":["body","title","session_id"]},{"tool":"add_subtask","params":["project_id"]},{"tool":"add_workspace_note","params":["body","tags","title"]},{"tool":"add_workspace_sprint_item","params":["title"]},{"tool":"advance_proposal_status","params":["proposal_id"]},{"tool":"analyze_sprint","params":["project_id"]},{"tool":"answer_hitl","params":["answer","request_id"]},{"tool":"archive_decision","params":["decision_id"]},{"tool":"assign_sprint_waves","params":["project_id"]},{"tool":"batch_mutate","params":["project_id"]},{"tool":"batch_read","params":["project_id"]},{"tool":"capture_research_finding","params":["project_id"]},{"tool":"checkpoint","params":["project_id","session_id"]},{"tool":"claim_file","params":["file_path","session_id"]},{"tool":"claim_sprint_item","params":["item_id","project_id"]},{"tool":"clear_capability_profile","params":["scope_id","scope_type"]},{"tool":"clone_profile_layer","params":["source_scope_id","target_scope_id","source_scope_type","target_scope_type"]},{"tool":"commit_proposal_promotion","params":["proposal_id"]},{"tool":"complete_experiment_run","params":["run_id","project_id","session_id"]},{"tool":"complete_external_job","params":["detail","job_id","status","job_key","metadata","project_id","session_id"]},{"tool":"complete_research_run","params":["run_id","project_id","session_id"]},{"tool":"complete_sprint_item","params":["item_id","task_id","project_id"]},{"tool":"complete_wave_gate","params":["project_id"]},{"tool":"complete_workspace_sprint_item","params":["item_id"]},{"tool":"configure_wave_gate","params":["project_id"]},{"tool":"create_experiment","params":["project_id","session_id"]},{"tool":"create_project","params":["name"]},{"tool":"delete_custom_hook","params":["project_id"]},{"tool":"delete_note","params":["note_id"]},{"tool":"delete_watchlist_query","params":["project_id"]},{"tool":"dismiss_hitl","params":["request_id"]},{"tool":"execute_batch","params":["project_id"]},{"tool":"export_ai_log","params":["event_type","project_id","session_id","correlation_id","parent_event_id"]},{"tool":"export_ai_log_artifacts","params":["project_id"]},{"tool":"export_ai_log_otel","params":["project_id"]},{"tool":"fan_out_sprint_items","params":["project_id"]},{"tool":"find_similar_equation","params":["project_id"]},{"tool":"find_similar_figure","params":["project_id"]},{"tool":"find_similar_table","params":["project_id"]},{"tool":"find_symbol_usages","params":["project_id"]},{"tool":"generate_handoff","params":["project_id"]},{"tool":"get_agent_instructions","params":["project_id"]},{"tool":"get_ai_log_export_status","params":["project_id"]},{"tool":"get_blog_posts","params":["status"]},{"tool":"get_capability_manifest","params":["project_id"]},{"tool":"get_citation_edges","params":["project_id"]},{"tool":"get_context_block","params":["mode","project_id"]},{"tool":"get_custom_hooks","params":["project_id"]},{"tool":"get_effective_capability_profile","params":["project_id"]},{"tool":"get_effective_profile","params":["project_id"]},{"tool":"get_experiment","params":["project_id","experiment_id"]},{"tool":"get_experiment_events","params":["limit","run_id","project_id","experiment_id"]},{"tool":"get_experiment_run","params":["run_id","project_id"]},{"tool":"get_external_job","params":["job_id","job_key","project_id","include_history"]},{"tool":"get_file_claims","params":["file_path"]},{"tool":"get_findings","params":["project_id"]},{"tool":"get_flag_drift","params":["project_id"]},{"tool":"get_goal","params":["project_id"]},{"tool":"get_hitl_request","params":["request_id"]},{"tool":"get_insights","params":["project_id"]},{"tool":"get_notes","params":["tag","project_id"]},{"tool":"get_parallelizable_groups","params":["project_id"]},{"tool":"get_pinned_decisions","params":["project_id","include_superseded"]},{"tool":"get_planning_brief","params":["project_id"]},{"tool":"get_profile_layer","params":["scope_type"]},{"tool":"get_profile_layer_revisions","params":["scope_id"]},{"tool":"get_project_by_name","params":["name"]},{"tool":"get_proposal_gates","params":["state","category","project_id"]},{"tool":"get_proposal_lineage","params":["proposal_id"]},{"tool":"get_remote_task_status","params":["job_id","project_id"]},{"tool":"get_research_run","params":["run_id","project_id"]},{"tool":"get_session_activity","params":["session_id"]},{"tool":"get_session_brief","params":["project_id"]},{"tool":"get_session_log","params":["session_id"]},{"tool":"get_session_recovery","params":["project_id","session_id","recovery_id","include_continuation"]},{"tool":"get_sprint_item_pointers","params":["project_id"]},{"tool":"get_sprint_items","params":["project_id"]},{"tool":"get_sprint_notes","params":["note_kind","session_id"]},{"tool":"get_sprint_progress","params":["project_id"]},{"tool":"get_symbol_claims","params":["file_path"]},{"tool":"get_symbol_hotspots","params":["days","file_path","min_sessions"]},{"tool":"get_tasks","params":["limit","project_id"]},{"tool":"get_workspace_decisions","params":["include_superseded"]},{"tool":"get_workspace_notes","params":["tag"]},{"tool":"get_workspace_sprint_items","params":["status"]},{"tool":"idle_until_session_done","params":["watching_session_id"]},{"tool":"index_equation","params":["project_id"]},{"tool":"index_figure","params":["project_id"]},{"tool":"index_table","params":["project_id"]},{"tool":"ingest_document","params":["project_id"]},{"tool":"ingest_document_structure","params":["project_id"]},{"tool":"insert_equation","params":["project_id"]},{"tool":"link_figure_caption","params":["project_id"]},{"tool":"link_flag_to_section","params":["project_id"]},{"tool":"link_manual_github_issue","params":["project_id","session_id","issue_number"]},{"tool":"link_proposal_lineage","params":["relation_type"]},{"tool":"link_table_caption","params":["project_id"]},{"tool":"list_active_worktrees","params":["project_id"]},{"tool":"list_experiment_runs","params":["limit","status","project_id","experiment_id"]},{"tool":"list_experiments","params":["limit","status","project_id"]},{"tool":"list_external_jobs","params":["limit","status","project_id","include_terminal"]},{"tool":"list_remote_tasks","params":["limit","project_id","include_terminal"]},{"tool":"list_research_runs","params":["limit","status","project_id","include_terminal"]},{"tool":"list_resumable_sessions","params":["limit","project_id","include_dead","sprint_version"]},{"tool":"list_sessions","params":["project_id"]},{"tool":"list_watchlist_queries","params":["project_id"]},{"tool":"list_worktrees_pending_cleanup","params":["project_id"]},{"tool":"load_handoff","params":["project_id"]},{"tool":"log_task","params":["status","project_id","session_id","description"]},{"tool":"merge_sprint_items","params":["project_id"]},{"tool":"move_workspace_note_to_project","params":["project_id"]},{"tool":"pin_decision","params":["body","title","category","project_id"]},{"tool":"pin_workspace_decision","params":["body","title","category"]},{"tool":"preview_proposal_promotion","params":["proposal_id"]},{"tool":"promote_docx_candidate","params":["project_id","session_id","derivative_id"]},{"tool":"promote_experiment_run","params":["run_id","project_id","session_id"]},{"tool":"promote_proposal","params":["proposal_id"]},{"tool":"promote_research_run","params":["run_id","project_id","session_id"]},{"tool":"purge_ai_log","params":["project_id"]},{"tool":"read_note","params":["project_id"]},{"tool":"reconcile_sprint_drift","params":["project_id"]},{"tool":"reconcile_stale_claims","params":["project_id"]},{"tool":"record_experiment_event","params":["body","label","event_type","project_id","session_id","artifact_ids","experiment_id"]},{"tool":"record_handoff_correction","params":["project_id"]},{"tool":"refresh_context","params":["project_id"]},{"tool":"register_docx_derivative","params":["project_id","session_id"]},{"tool":"register_external_job","params":["phase","detail","status","metadata","project_id","session_id","next_check_at","resource_hint"]},{"tool":"register_run_artifact","params":["run_id","project_id","session_id","content_hash","artifact_role"]},{"tool":"register_session","params":["client","human_id","project_id","session_name"]},{"tool":"register_session_recovery","params":["transport","project_id","sprint_version","lifecycle_status"]},{"tool":"release_file","params":["file_path","session_id"]},{"tool":"release_sprint_item_claim","params":["project_id"]},{"tool":"relocate_sprint_item_pointer","params":["project_id"]},{"tool":"rename_project","params":["project_id"]},{"tool":"reopen_proposal_gate","params":["actor","reason","gate_id","project_id"]},{"tool":"request_hitl","params":["context","urgency","question","project_id","session_id","assigned_to"]},{"tool":"request_manual_issue_screening_toggle","params":["context","session_id"]},{"tool":"reset_profile_layer","params":["scope_id","scope_type"]},{"tool":"resolve_citations","params":["project_id"]},{"tool":"resolve_proposal_gate","params":["state","gate_id","project_id"]},{"tool":"resolve_sprint_item_pointers","params":["project_id"]},{"tool":"run_watchlist_query","params":["project_id"]},{"tool":"save_blog_post","params":["title"]},{"tool":"save_finding","params":["project_id"]},{"tool":"save_profile_layer","params":["scope_id","scope_type"]},{"tool":"save_watchlist_query","params":["project_id"]},{"tool":"search_ai_log","params":["actor_id","tenant_id","event_type","project_id","session_id","correlation_id","parent_event_id"]},{"tool":"search_all","params":["query","project_id"]},{"tool":"search_synthesis","params":["query","project_id"]},{"tool":"search_tasks","params":["limit","query","project_id"]},{"tool":"send_message","params":["project_id"]},{"tool":"set_agent_instructions","params":["project_id"]},{"tool":"set_ai_log_export_config","params":["project_id"]},{"tool":"set_capability_manifest","params":["project_id"]},{"tool":"set_capability_profile","params":["scope_type"]},{"tool":"set_executor_config","params":["branch","env_file","test_cmd","test_min","repo_path","deploy_cmd","project_id","shell_type"]},{"tool":"set_goal","params":["content","project_id"]},{"tool":"set_north_star","params":["north_star","project_id"]},{"tool":"set_parent_project","params":["project_id"]},{"tool":"set_project_execution_mode","params":["project_id"]},{"tool":"set_sprint","params":["sprint","project_id"]},{"tool":"snapshot_graph_metrics","params":["project_id","session_id"]},{"tool":"split_sprint_item","params":["project_id"]},{"tool":"start_experiment_run","params":["project_id","session_id","trial_label","worktree_id","experiment_id"]},{"tool":"start_remote_task","params":["project_id","session_id"]},{"tool":"start_research_run","params":["project_id","session_id"]},{"tool":"start_session","params":["client","human_id","project_id"]},{"tool":"start_wave_run","params":["project_id"]},{"tool":"store_finding","params":["project_id"]},{"tool":"transfer_sprint_item_claim","params":["project_id"]},{"tool":"update_custom_hook","params":["project_id"]},{"tool":"update_decision","params":["body","title","status","category","new_body","new_title","decision_id"]},{"tool":"update_external_job","params":["phase","detail","job_id","status","job_key","metadata","check_hint","project_id","session_id","resume_hint","next_check_at","resource_hint"]},{"tool":"update_md_section","params":["anchor","urgency","project_id","session_id"]},{"tool":"update_paragraph","params":["project_id"]},{"tool":"update_sprint_item","params":["item_id","project_id"]},{"tool":"update_workspace_settings","params":["handoff_template","sprint_name_default","hitl_auto_answer_default"]},{"tool":"update_workspace_sprint_item","params":["title","status","item_id"]},{"tool":"validate_assumption","params":["decision_id"]},{"tool":"verify_docx_diff","params":["project_id","derivative_id"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}