{
  "data": {
    "tool": {
      "category": "",
      "endpoint": "https://2ools.app/mcp",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/2ools-mcp.json",
      "kind": "mcp",
      "listed": "indexed",
      "liveUrl": "https://www.anchorterminal.com/api/v1/live/2ools-mcp.json",
      "markdownUrl": "https://www.anchorterminal.com/tools/2ools-mcp.md",
      "mcpTools": {
        "check": {
          "checker": "anchor-check/1.0",
          "totalTokens": 33410,
          "counts": {
            "error": 0,
            "note": 1,
            "warn": 50
          },
          "findings": [
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "act_on_project_os_task",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "add_project_feedback",
              "message": "5 parameters without a description: comment, label, page, project_id, version_id",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "add_project_pin",
              "message": "8 parameters without a description: kind, label, project_id, surface, url, version_id and 2 more",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "answer_project_engineering_decision",
              "message": "6 parameters without a description: answer, decision_id, expected_revision, idempotency_key, project_id, supersedes_id",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "approve_artifact_version",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "checkpoint_work_session",
              "message": "none of its 13 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "claim_work_assignment",
              "message": "none of its 3 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "continue_project",
              "message": "1 parameter without a description: response_format",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "create_version_share_link",
              "message": "none of its 5 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "create_work_assignment",
              "message": "none of its 17 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "decide_work_assignment",
              "message": "none of its 4 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "get_artifact",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "get_project_access",
              "message": "its one parameter, project_id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "get_project_discipline",
              "message": "its one parameter, project_id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "get_project_intelligence",
              "message": "its one parameter, project_id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "get_project_mission",
              "message": "none of its 4 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "get_task_quality_gate",
              "message": "its one parameter, assignment_id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "get_version_share_link",
              "message": "none of its 3 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "get_work_handoff",
              "message": "its one parameter, assignment_id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "heartbeat_work_session",
              "message": "none of its 15 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "invite_project_member",
              "message": "2 parameters without a description: project_id, role",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "list_artifact_approval_requests",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "list_artifacts",
              "message": "its one parameter, project_id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "list_project_engineering_decisions",
              "message": "none of its 3 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "list_project_pins",
              "message": "its one parameter, project_id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "list_work_assignments",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "manage_project_discipline",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "manage_work_watchdog",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "prepare_artifact_download",
              "message": "none of its 3 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "prepare_artifact_upload",
              "message": "8 parameters without a description: byte_size, filename, kind, media_type, name, project_id and 2 more",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "prepare_version_export",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "prepare_work_handoff",
              "message": "none of its 7 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "reject_artifact_version",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "remove_project_member",
              "message": "2 parameters without a description: member_id, project_id",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "remove_project_pin",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "resolve_project_feedback",
              "message": "none of its 3 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "review_project_mission",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "revoke_project_invite",
              "message": "1 parameter without a description: invite_id",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "revoke_version_share_link",
              "message": "none of its 3 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "run_task_quality_gate",
              "message": "its one parameter, change, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "submit_work_session",
              "message": "none of its 10 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "update_account_profile",
              "message": "none of its 10 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "update_living_plan",
              "message": "1 parameter without a description: change",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "update_project_intelligence",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "update_project_member_role",
              "message": "3 parameters without a description: member_id, project_id, role",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "update_project_mission",
              "message": "none of its 2 parameters has a description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC22",
              "severity": "warn",
              "tool": "manage_project_discipline",
              "message": "the definition is about 2,448 tokens",
              "fix": "Trim the description and parameter docs, or split the tool."
            },
            {
              "rule": "TC22",
              "severity": "warn",
              "tool": "update_living_plan",
              "message": "the definition is about 1,589 tokens",
              "fix": "Trim the description and parameter docs, or split the tool."
            },
            {
              "rule": "TC22",
              "severity": "warn",
              "tool": "update_project_mission",
              "message": "the definition is about 2,209 tokens",
              "fix": "Trim the description and parameter docs, or split the tool."
            },
            {
              "rule": "TC23",
              "severity": "warn",
              "message": "81 tools, about 32,731 tokens of definitions",
              "fix": "Split the server by job, or offer a smaller default toolset (a read-only set, or a search-then-call pattern)."
            },
            {
              "rule": "TC24",
              "severity": "note",
              "message": "81 of 81 tools have no outputSchema",
              "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
            }
          ]
        },
        "checkedAt": "2026-10-04T22:21:01Z",
        "count": 81,
        "schemaTokens": 33410,
        "status": "ok",
        "tools": [
          {
            "name": "create_public_preview",
            "title": "Create free 2ools preview",
            "description": "Turn a complete standalone HTML document already created in this chat into a temporary, read-only 2ools preview. Free and authless; expires after 24 hours. This tool does not generate the page—write the HTML first, then call it.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "html": {
                  "description": "Complete standalone HTML document beginning with \u003c!doctype html\u003e or \u003chtml\u003e, including its CSS and JavaScript.",
                  "maxLength": 200000,
                  "minLength": 80,
                  "type": "string"
                },
                "idempotency_key": {
                  "description": "Caller-generated retry key. Reuse returns the same preview instead of storing a duplicate.",
                  "maxLength": 120,
                  "minLength": 8,
                  "pattern": "^[A-Za-z0-9._:-]+$",
                  "type": "string"
                },
                "name": {
                  "description": "Short public preview name.",
                  "maxLength": 120,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "name",
                "html",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "list_build_systems",
            "title": "List my custom build systems",
            "description": "List creative systems created by the authenticated account and compatible with an optional output target. Built-in 2ools skills, routing, prompts, and operating systems are private and are not returned.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "output_target": {
                  "description": "Optional target filter. Omit to list every compatible system available to the account.",
                  "enum": [
                    "web",
                    "game",
                    "tauri",
                    "electron",
                    "widget",
                    "float",
                    "freeform"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "list_connected_engines",
            "title": "List connected computers",
            "description": "List privacy-minimized connected 2ools Engines for exact native dispatch. Returns opaque Engine identity, a redacted machine label, online state, authenticated provider CLIs, supported protocols, privacy-safe workspace handles, and the last observed timestamp. Never returns tokens, paths, repository URLs, SSH hosts, secrets, or raw device labels.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_project_engine_workspace",
            "title": "Get project source workspace",
            "description": "Read the privacy-safe Engine workspace attached to one project. Returns only opaque Engine/workspace identity, safe display metadata, live readiness, and a revision. Never returns source, paths, repository URLs, SSH hosts, tokens, or secrets.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "description": "Exact saved 2ools project.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "attach_project_engine_workspace",
            "title": "Attach project source workspace",
            "description": "Owner-authorized attachment of one saved project to one exact opaque workspace on one exact online 2ools Engine. This grants future project work access to real source on that computer, so show the selected computer/workspace and obtain explicit confirmation. It changes no source file and never falls back to another Engine.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "confirm": {
                  "const": true,
                  "description": "Required explicit confirmation after showing the exact computer and workspace.",
                  "type": "boolean"
                },
                "engine_id": {
                  "description": "Exact opaque Engine identity returned by list_connected_engines.",
                  "pattern": "^engine_[A-Za-z0-9_-]{16,32}$",
                  "type": "string"
                },
                "expected_revision": {
                  "description": "Revision returned by get_project_engine_workspace. Use 0 only when no workspace is attached.",
                  "maximum": 9007199254740991,
                  "minimum": 0,
                  "type": "integer"
                },
                "project_id": {
                  "description": "Exact owned project to attach.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "workspace_id": {
                  "description": "Exact opaque workspace identity returned for that Engine.",
                  "pattern": "^workspace_[A-Za-z0-9_-]{16,64}$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "engine_id",
                "workspace_id",
                "expected_revision",
                "confirm"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "register_existing_project",
            "title": "Register an existing project",
            "description": "Create one durable Project OS record for a local or external project that list_projects did not match. When the canonical project ID is already known, pass existing_project_id and that exact record is reused. Otherwise an exact normalized name match is reused instead of duplicated, even with a new idempotency key. Call only after the person approves the proposed name, goal, current state, decisions, and next step. This never reads or uploads local files and never starts a build.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "approval": {
                  "const": "REGISTER",
                  "description": "Explicit confirmation that the person approved this proposed record.",
                  "type": "string"
                },
                "current_state": {
                  "description": "Approved factual summary of where the project stands now.",
                  "maxLength": 8000,
                  "minLength": 1,
                  "type": "string"
                },
                "decisions": {
                  "default": [],
                  "description": "Approved decisions that future work must preserve.",
                  "items": {
                    "maxLength": 400,
                    "minLength": 1,
                    "type": "string"
                  },
                  "maxItems": 20,
                  "type": "array"
                },
                "existing_project_id": {
                  "description": "Known canonical project ID from list_projects or a Project OS URL. Passing it prevents creation and reuses that exact accessible project.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "goal": {
                  "description": "Approved outcome or mission for the existing project.",
                  "maxLength": 8000,
                  "minLength": 1,
                  "type": "string"
                },
                "idempotency_key": {
                  "description": "Caller-generated unique key. Reusing it returns the original project instead of creating a duplicate.",
                  "maxLength": 120,
                  "minLength": 8,
                  "pattern": "^[A-Za-z0-9._:-]+$",
                  "type": "string"
                },
                "next_step": {
                  "description": "Approved next useful step.",
                  "maxLength": 1500,
                  "minLength": 1,
                  "type": "string"
                },
                "output_target": {
                  "default": "freeform",
                  "description": "What the existing project ultimately produces; use freeform when it is not a build artifact.",
                  "enum": [
                    "web",
                    "game",
                    "tauri",
                    "electron",
                    "widget",
                    "float",
                    "freeform"
                  ],
                  "type": "string"
                },
                "project_name": {
                  "description": "Approved project name.",
                  "maxLength": 120,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "project_name",
                "goal",
                "current_state",
                "next_step",
                "approval",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "build_from_conversation",
            "title": "Build conversation in 2ools",
            "description": "Create a new 2ools project from a structured conversation brief and queue one durable build. Returns project_id and job_id; use get_build to retrieve completion status and the protected preview.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "audience": {
                  "description": "Primary audience and the job they need to complete.",
                  "maxLength": 1000,
                  "type": "string"
                },
                "content_constraints": {
                  "default": [],
                  "description": "Claims, wording, exclusions, or fidelity constraints the build must obey.",
                  "items": {
                    "maxLength": 500,
                    "minLength": 1,
                    "type": "string"
                  },
                  "maxItems": 20,
                  "type": "array"
                },
                "conversation_summary": {
                  "description": "Factual build brief distilled from the conversation, including the intended artifact and key decisions.",
                  "maxLength": 12000,
                  "minLength": 1,
                  "type": "string"
                },
                "create_separate_project": {
                  "default": false,
                  "description": "Set true only when the person explicitly wants a distinct project that intentionally shares an existing project's name. Changing AI providers is not a reason.",
                  "type": "boolean"
                },
                "creative_system_id": {
                  "description": "Optional account-created creative system ID returned by list_build_systems. Omit for private 2ools selection.",
                  "maxLength": 120,
                  "minLength": 1,
                  "type": "string"
                },
                "entity": {
                  "description": "Grounded identity facts that must survive the build.",
                  "properties": {
                    "category": {
                      "description": "Entity category, such as musician, restaurant, or SaaS.",
                      "maxLength": 200,
                      "type": "string"
                    },
                    "description": {
                      "description": "Grounded description; omit unsupported claims.",
                      "maxLength": 5000,
                      "type": "string"
                    },
                    "name": {
                      "description": "Exact person, business, product, or project name.",
                      "maxLength": 200,
                      "type": "string"
                    },
                    "source_url": {
                      "description": "Optional source URL supplied by the user.",
                      "format": "uri",
                      "maxLength": 2000,
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "headline": {
                  "description": "Exact hero headline to preserve verbatim in the generated site.",
                  "maxLength": 140,
                  "minLength": 1,
                  "type": "string"
                },
                "idempotency_key": {
                  "description": "Caller-generated unique key. Reusing it returns the original project/job instead of creating a duplicate.",
                  "maxLength": 120,
                  "minLength": 8,
                  "pattern": "^[A-Za-z0-9._:-]+$",
                  "type": "string"
                },
                "max_iterations": {
                  "default": 6,
                  "description": "Hard project cap for later outside-agent child revisions. Defaults to 6 and cannot exceed 12.",
                  "maximum": 12,
                  "minimum": 1,
                  "type": "integer"
                },
                "model": {
                  "default": "studio",
                  "description": "Generation engine. studio is keyless; other models require an available account provider or linked Engine.",
                  "enum": [
                    "studio",
                    "openai",
                    "claude",
                    "gemini",
                    "grok"
                  ],
                  "type": "string"
                },
                "operating_rules_id": {
                  "description": "Optional account-created operating rules ID returned by list_build_systems. Omit for private 2ools selection.",
                  "maxLength": 120,
                  "minLength": 1,
                  "type": "string"
                },
                "output_target": {
                  "default": "web",
                  "description": "Delivery target: site, browser game, desktop wrapper, embeddable component, floating overlay, or standalone HTML.",
                  "enum": [
                    "web",
                    "game",
                    "tauri",
                    "electron",
                    "widget",
                    "float",
                    "freeform"
                  ],
                  "type": "string"
                },
                "pages": {
                  "default": [
                    "Home"
                  ],
                  "description": "Pages to generate. Use Home for a one-page site or widget.",
                  "items": {
                    "maxLength": 120,
                    "minLength": 1,
                    "type": "string"
                  },
                  "maxItems": 8,
                  "minItems": 1,
                  "type": "array"
                },
                "project_name": {
                  "description": "Short name for the new 2ools project.",
                  "maxLength": 120,
                  "minLength": 1,
                  "type": "string"
                },
                "requirements": {
                  "default": [],
                  "description": "Concrete functionality, content, and section requirements.",
                  "items": {
                    "maxLength": 500,
                    "minLength": 1,
                    "type": "string"
                  },
                  "maxItems": 20,
                  "type": "array"
                },
                "visual_direction": {
                  "description": "Desired visual character, composition, color, typography, or references.",
                  "maxLength": 2000,
                  "type": "string"
                }
              },
              "required": [
                "project_name",
                "conversation_summary",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "start_project_on_engine",
            "title": "Start project on selected computer",
            "description": "Create one new 2ools project and queue its first build on one exact connected Engine and provider selected by the person. Fails before project creation or queueing when that Engine is offline, busy, missing the provider, or lacks the protocol. Never falls back to hosted, server, Studio, or another computer.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "audience": {
                  "description": "Primary audience and the job they need to complete.",
                  "maxLength": 1000,
                  "type": "string"
                },
                "content_constraints": {
                  "default": [],
                  "description": "Claims, wording, exclusions, or fidelity constraints the build must obey.",
                  "items": {
                    "maxLength": 500,
                    "minLength": 1,
                    "type": "string"
                  },
                  "maxItems": 20,
                  "type": "array"
                },
                "conversation_summary": {
                  "description": "Factual build brief distilled from the conversation, including the intended artifact and key decisions.",
                  "maxLength": 12000,
                  "minLength": 1,
                  "type": "string"
                },
                "create_separate_project": {
                  "default": false,
                  "description": "Set true only when the person explicitly wants a distinct project that intentionally shares an existing project's name. Changing AI providers is not a reason.",
                  "type": "boolean"
                },
                "creative_system_id": {
                  "description": "Optional account-created creative system ID returned by list_build_systems.",
                  "maxLength": 120,
                  "minLength": 1,
                  "type": "string"
                },
                "engine_id": {
                  "description": "Opaque exact Engine identity returned by list_connected_engines.",
                  "pattern": "^engine_[A-Za-z0-9_-]{22}$",
                  "type": "string"
                },
                "entity": {
                  "description": "Grounded identity facts that must survive the build.",
                  "properties": {
                    "category": {
                      "description": "Entity category, such as musician, restaurant, or SaaS.",
                      "maxLength": 200,
                      "type": "string"
                    },
                    "description": {
                      "description": "Grounded description; omit unsupported claims.",
                      "maxLength": 5000,
                      "type": "string"
                    },
                    "name": {
                      "description": "Exact person, business, product, or project name.",
                      "maxLength": 200,
                      "type": "string"
                    },
                    "source_url": {
                      "description": "Optional source URL supplied by the user.",
                      "format": "uri",
                      "maxLength": 2000,
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "headline": {
                  "description": "Exact hero headline to preserve verbatim in the generated site.",
                  "maxLength": 140,
                  "minLength": 1,
                  "type": "string"
                },
                "idempotency_key": {
                  "description": "Caller-generated retry key. Reuse returns the original project and dispatch receipt.",
                  "maxLength": 120,
                  "minLength": 8,
                  "pattern": "^[A-Za-z0-9._:-]+$",
                  "type": "string"
                },
                "max_iterations": {
                  "default": 6,
                  "description": "Hard project cap for later outside-agent child revisions.",
                  "maximum": 12,
                  "minimum": 1,
                  "type": "integer"
                },
                "operating_rules_id": {
                  "description": "Optional account-created operating rules ID returned by list_build_systems.",
                  "maxLength": 120,
                  "minLength": 1,
                  "type": "string"
                },
                "output_target": {
                  "default": "web",
                  "description": "Delivery target: site, browser game, desktop wrapper, embeddable component, floating overlay, or standalone HTML.",
                  "enum": [
                    "web",
                    "game",
                    "tauri",
                    "electron",
                    "widget",
                    "float",
                    "freeform"
                  ],
                  "type": "string"
                },
                "pages": {
                  "default": [
                    "Home"
                  ],
                  "description": "Pages to generate. Use Home for a one-page site or widget.",
                  "items": {
                    "maxLength": 120,
                    "minLength": 1,
                    "type": "string"
                  },
                  "maxItems": 8,
                  "minItems": 1,
                  "type": "array"
                },
                "project_name": {
                  "description": "Short name for the new 2ools project.",
                  "maxLength": 120,
                  "minLength": 1,
                  "type": "string"
                },
                "protocol": {
                  "const": "build-v1",
                  "description": "Exact Engine dispatch protocol returned by list_connected_engines.",
                  "type": "string"
                },
                "provider": {
                  "description": "Exact provider CLI already authenticated on the selected Engine.",
                  "enum": [
                    "openai",
                    "claude",
                    "gemini",
                    "grok"
                  ],
                  "type": "string"
                },
                "requirements": {
                  "default": [],
                  "description": "Concrete functionality, content, and section requirements.",
                  "items": {
                    "maxLength": 500,
                    "minLength": 1,
                    "type": "string"
                  },
                  "maxItems": 20,
                  "type": "array"
                },
                "visual_direction": {
                  "description": "Desired visual character, composition, color, typography, or references.",
                  "maxLength": 2000,
                  "type": "string"
                }
              },
              "required": [
                "project_name",
                "conversation_summary",
                "provider",
                "engine_id",
                "protocol",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "refine_project",
            "title": "Refine a 2ools project",
            "description": "Create one protected child version from a saved base version and concrete review feedback. Preserves the base source as currentCode, consumes one persisted project iteration, and returns an asynchronous job_id.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "base_version_id": {
                  "description": "Authoritative saved version to use as the parent and current source.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "feedback": {
                  "description": "Specific requested changes. Requirements not explicitly changed remain in force.",
                  "maxLength": 5000,
                  "minLength": 1,
                  "type": "string"
                },
                "idempotency_key": {
                  "description": "Unique retry key. Reuse returns the original revision job without consuming another iteration.",
                  "maxLength": 120,
                  "minLength": 8,
                  "pattern": "^[A-Za-z0-9._:-]+$",
                  "type": "string"
                },
                "model": {
                  "default": "studio",
                  "description": "Generation engine for this child revision. Studio safely preserves the parent but cannot apply substantive edits; choose an AI model or linked Engine for real revisions.",
                  "enum": [
                    "studio",
                    "openai",
                    "claude",
                    "gemini",
                    "grok"
                  ],
                  "type": "string"
                },
                "project_id": {
                  "description": "Project containing the saved base version.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "base_version_id",
                "feedback",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_build",
            "title": "Get 2ools build",
            "description": "Get one build's current status, progress, errors, completed version IDs, and protected preview URLs. Does not return generated source code.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "job_id": {
                  "description": "Build job ID returned by build_from_conversation.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "job_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_engine_dispatch",
            "title": "Get Engine dispatch",
            "description": "Read the authoritative state of one exact Engine dispatch. Queued means accepted but not started; running appears only after the selected Engine atomically claims the lease. Returns claim, heartbeat, failure, and terminal state without client inference.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "job_id": {
                  "description": "Dispatch job ID returned by start_project_on_engine.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "job_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "compare_versions",
            "title": "Compare 2ools versions",
            "description": "Compare two saved versions in one project without returning source. Reports lineage, review state, page additions/removals, byte sizes, and SHA-256 identity for each page.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "left_version_id": {
                  "description": "Earlier or baseline version ID.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project containing both versions.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "right_version_id": {
                  "description": "Later or candidate version ID.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "left_version_id",
                "right_version_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "list_approval_requests",
            "title": "List 2ools approval requests",
            "description": "List exact saved versions waiting for a separately delegated reviewer. Returns project/version identity and attribution, never generated source.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "limit": {
                  "default": 20,
                  "description": "Maximum approval requests to return.",
                  "maximum": 50,
                  "minimum": 1,
                  "type": "integer"
                },
                "status": {
                  "default": "pending",
                  "description": "Review-request status to return.",
                  "enum": [
                    "pending",
                    "approved",
                    "rejected",
                    "all"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "approve_version",
            "title": "Approve a 2ools version",
            "description": "Use separately delegated review authority to approve one saved version and make it the project's active version. Does not publish, export, or change project permissions.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "confirmation": {
                  "const": "APPROVE",
                  "description": "Explicit approval confirmation.",
                  "type": "string"
                },
                "decision_note": {
                  "default": "",
                  "description": "Optional review note stored with the delegated decision.",
                  "maxLength": 2000,
                  "type": "string"
                },
                "project_id": {
                  "description": "Project containing the candidate version.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "version_id": {
                  "description": "Saved candidate version to approve.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "version_id",
                "confirmation"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "reject_version",
            "title": "Reject a 2ools version",
            "description": "Use separately delegated review authority to reject one saved version. If it is active, restores its saved parent as active; the rejected version remains in immutable history.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "confirmation": {
                  "const": "REJECT",
                  "description": "Explicit rejection confirmation.",
                  "type": "string"
                },
                "decision_note": {
                  "description": "Review feedback explaining what the next child revision should change.",
                  "maxLength": 2000,
                  "minLength": 1,
                  "type": "string"
                },
                "project_id": {
                  "description": "Project containing the candidate version.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "version_id": {
                  "description": "Saved candidate version to reject.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "version_id",
                "confirmation",
                "decision_note"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "cancel_build",
            "title": "Cancel 2ools build",
            "description": "Cancel one exact queued or running non-Agent 2ools build after named explicit confirmation. Repeating the same cancellation is safe, late Engine results are rejected, completed versions are never deleted, and immutable history remains. Governed Agent execution uses cancel_agent_run.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "confirm": {
                  "const": true,
                  "description": "Explicit confirmation to cancel this exact job_id.",
                  "type": "boolean"
                },
                "job_id": {
                  "description": "Build job ID returned by build_from_conversation.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "reason": {
                  "description": "Why this exact build should be canceled; stored in the audit receipt.",
                  "maxLength": 1000,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "job_id",
                "reason",
                "confirm"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_account_profile",
            "title": "Get 2ools account profile",
            "description": "Read the authenticated person's 2ools profile, current account labels, and server-derived effective MCP scopes. Passwords, private credentials, billing instruments, and provider secrets are never returned.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "update_account_profile",
            "title": "Update 2ools account profile",
            "description": "Update only the explicitly supplied profile fields for the authenticated person. This cannot change email, password, MFA, billing, entitlements, roles, or account-deletion state.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "bio": {
                  "maxLength": 500,
                  "type": "string"
                },
                "default_location": {
                  "maxLength": 120,
                  "type": "string"
                },
                "display_name": {
                  "maxLength": 120,
                  "type": "string"
                },
                "job_title": {
                  "maxLength": 120,
                  "type": "string"
                },
                "locale": {
                  "maxLength": 40,
                  "type": "string"
                },
                "preferred_audience": {
                  "maxLength": 80,
                  "type": "string"
                },
                "profile_use_cases": {
                  "items": {
                    "enum": [
                      "personal",
                      "business",
                      "clients",
                      "team",
                      "explore"
                    ],
                    "type": "string"
                  },
                  "maxItems": 5,
                  "type": "array"
                },
                "timezone": {
                  "maxLength": 100,
                  "type": "string"
                },
                "username": {
                  "maxLength": 40,
                  "minLength": 1,
                  "type": "string"
                },
                "website": {
                  "maxLength": 2000,
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_project_access",
            "title": "Get project access",
            "description": "Read the authenticated person's role plus the canonical project owner, members, and pending invitations. Non-managers can read active members but never receive pending-invite metadata.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "invite_project_member",
            "title": "Invite project member",
            "description": "Invite an existing 2ools username or an email address to one owned project as a collaborator or viewer. New-account claim tokens are emailed by 2ools and are never returned through MCP.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "identity": {
                  "description": "Existing 2ools username or invitee email address.",
                  "maxLength": 200,
                  "minLength": 1,
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "role": {
                  "default": "collaborator",
                  "enum": [
                    "collaborator",
                    "viewer"
                  ],
                  "type": "string"
                },
                "version_id": {
                  "description": "Optional same-project version for activation attribution.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "identity"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "update_project_member_role",
            "title": "Change project member access",
            "description": "Change one exact member to collaborator or viewer, or transfer ownership. Requires explicit confirmation because demotion cancels that member's active builds and pauses armed project agents, while ownership transfer changes the current owner's authority.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "confirm": {
                  "const": true,
                  "description": "Explicit confirmation for this exact member, project, and role.",
                  "type": "boolean"
                },
                "member_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "role": {
                  "enum": [
                    "owner",
                    "collaborator",
                    "viewer"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "member_id",
                "role",
                "confirm"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "remove_project_member",
            "title": "Remove project member",
            "description": "Remove one exact member's project access after explicit confirmation. Their account and authored history stay; active project builds are canceled and armed project agents are paused.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "confirm": {
                  "const": true,
                  "description": "Explicit confirmation to remove this exact member from this exact project.",
                  "type": "boolean"
                },
                "member_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "member_id",
                "confirm"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "revoke_project_invite",
            "title": "Revoke project invitation",
            "description": "Revoke one exact pending project invitation after explicit confirmation. The person can no longer accept that invitation; project history remains auditable.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "confirm": {
                  "const": true,
                  "description": "Explicit confirmation to revoke this exact invitation.",
                  "type": "boolean"
                },
                "invite_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "invite_id",
                "confirm"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "list_projects",
            "title": "List 2ools projects",
            "description": "Open the native Project OS entry point and list recent 2ools projects the authenticated account can access. The app automatically continues the only saved project or shows an inline chooser when several projects are available. Returns compact metadata without generated source.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "limit": {
                  "default": 20,
                  "description": "Maximum projects to return.",
                  "maximum": 50,
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_project",
            "title": "Get 2ools project",
            "description": "Get a 2ools project's brief, selected pages, active version, and compact version history. Does not return generated source code.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "description": "2ools project ID.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_project_context",
            "title": "Get 2ools project operating context",
            "description": "Read one source-free operating packet: active version metadata, the latest explicitly selected observed project input, review attention, artifact index, work queue, and current activity cursor. Imported input is immutable evidence, not an AI proposal or live filesystem sync; private 2ools skills, prompts, routing, governance text, and generated version source are not returned.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "include_governance_text": {
                  "default": true,
                  "description": "Deprecated compatibility flag. It is accepted but ignored; private operating text is never returned.",
                  "type": "boolean"
                },
                "include_project_input_files": {
                  "default": false,
                  "description": "Include sanitized observed file contents from the latest explicit project input. Default false keeps the operating packet compact; manifest facts and provenance are always returned.",
                  "type": "boolean"
                },
                "project_id": {
                  "description": "2ools project ID.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "continue_project",
            "title": "2ools · Continue Project OS",
            "description": "Return one project's current Living Plan, next useful move, continuity-readiness gaps, latest evidence, and a compact 2ools-active receipt. Opens a compact status, Continue, and Open Project OS card on MCP Apps hosts; the full Project OS belongs in the host's browser side panel.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "description": "Readable 2ools project ID.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "response_format": {
                  "default": "summary",
                  "enum": [
                    "summary",
                    "markdown"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "refresh_project_cockpit",
            "title": "Refresh the open 2ools Project Cockpit",
            "description": "Refresh the bounded project state shown inside an already-open 2ools MCP App. This app-only read does not start work, import files, or change the project.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "description": "Readable 2ools project ID already open in the MCP App.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "activate_project",
            "title": "Use 2ools for this project",
            "description": "Record the person's one-time choice to use this already-connected 2ools client with one exact saved project. Call only after the person approves in the inline card or explicitly in chat. This does not read or import local files and does not start work or a build.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "approval": {
                  "const": "USE_TWOOLS",
                  "description": "Explicit confirmation from the person to use 2ools for this project.",
                  "type": "string"
                },
                "project_id": {
                  "description": "Exact readable 2ools project ID.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "approval"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_project_mission",
            "title": "Read a project's Mission and Goal Stack",
            "description": "Return a bounded canonical Project Mission view, active Goal Contract, server-derived health, role capabilities, or a paginated goals, templates, scope-change, or history slice.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "cursor": {
                  "maxLength": 120,
                  "type": "string"
                },
                "limit": {
                  "default": 20,
                  "maximum": 50,
                  "minimum": 1,
                  "type": "integer"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "view": {
                  "default": "contract",
                  "enum": [
                    "contract",
                    "goals",
                    "templates",
                    "scope_changes",
                    "history"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_project_intelligence",
            "title": "Read a project's Product Intelligence",
            "description": "Return the versioned frontier-product research dossier, six parallel lane states, evidence ledger, saturation audits, falsification, concepts, ranked outputs, integrity summary, connector visibility, and a deterministic operating brief. Missing premium access is reported as a gap, never invented.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "update_project_intelligence",
            "title": "Preserve frontier Product Intelligence",
            "description": "Initialize or append one immutable, validated dossier revision. The complete snapshot must cite material claims, preserve unknowns, finish or explicitly block all six lanes before synthesis, include a reproducible saturation audit, and pass falsification/output gates. Revision conflicts require a reread; no source retrieval is fabricated by this tool.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "change": {
                  "oneOf": [
                    {
                      "properties": {
                        "action": {
                          "const": "initialize",
                          "type": "string"
                        },
                        "idempotency_key": {
                          "maxLength": 200,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "subject": {
                          "maxLength": 1000,
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "save_snapshot",
                          "type": "string"
                        },
                        "expected_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 0,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 200,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "reason": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "snapshot": {
                          "additionalProperties": {},
                          "propertyNames": {
                            "type": "string"
                          },
                          "type": "object"
                        }
                      },
                      "required": [
                        "action",
                        "expected_revision",
                        "snapshot",
                        "reason",
                        "idempotency_key"
                      ],
                      "type": "object"
                    }
                  ]
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "change"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_project_discipline",
            "title": "Read Project Discipline",
            "description": "Return derived direction, trade-off, evidence, and continuity status with active decisions, eval evidence, verifier definitions, and explicit permission boundaries. Status is computed from authoritative Project OS records, never editable checkboxes.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "list_project_engineering_decisions",
            "title": "List project engineering decisions",
            "description": "List native-safe engineering decisions for one exact project, including the canonical project revision, category, risk, question, rationale, tradeoffs, response contract, constraints, and current state. Never returns secrets or internal prompts; unknown future response kinds remain in Project OS.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "limit": {
                  "default": 20,
                  "maximum": 50,
                  "minimum": 1,
                  "type": "integer"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "state": {
                  "default": "pending",
                  "enum": [
                    "pending",
                    "resolved",
                    "all"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "answer_project_engineering_decision",
            "title": "Answer a project engineering decision",
            "description": "Accept or reject one exact native-safe engineering decision at one exact project revision. Requires an explicit confirmation and durable note, enforces project role and high-risk owner policy, rejects revision conflicts, preserves immutable history, and returns an idempotent receipt plus canonical reread. Unknown future response kinds remain in Project OS.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "answer": {
                  "oneOf": [
                    {
                      "properties": {
                        "choice": {
                          "enum": [
                            "accept",
                            "reject"
                          ],
                          "type": "string"
                        },
                        "kind": {
                          "const": "choice",
                          "type": "string"
                        }
                      },
                      "required": [
                        "kind",
                        "choice"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "choices": {
                          "items": {
                            "maxLength": 500,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 20,
                          "minItems": 1,
                          "type": "array"
                        },
                        "kind": {
                          "const": "multi",
                          "type": "string"
                        }
                      },
                      "required": [
                        "kind",
                        "choices"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "kind": {
                          "const": "freeform",
                          "type": "string"
                        },
                        "text": {
                          "maxLength": 5000,
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "kind",
                        "text"
                      ],
                      "type": "object"
                    }
                  ]
                },
                "confirm": {
                  "const": true,
                  "description": "Explicit confirmation that this durable engineering decision should be recorded.",
                  "type": "boolean"
                },
                "decision_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "expected_revision": {
                  "maximum": 9007199254740991,
                  "minimum": 0,
                  "type": "integer"
                },
                "idempotency_key": {
                  "maxLength": 200,
                  "minLength": 8,
                  "pattern": "^[A-Za-z0-9._:-]+$",
                  "type": "string"
                },
                "note": {
                  "description": "Durable human rationale recorded in the canonical decision history.",
                  "maxLength": 2000,
                  "minLength": 1,
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "risk_level": {
                  "description": "Optional chosen risk classification; high-risk decisions require the project owner.",
                  "enum": [
                    "low",
                    "medium",
                    "high"
                  ],
                  "type": "string"
                },
                "supersedes_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "decision_id",
                "expected_revision",
                "answer",
                "note",
                "idempotency_key",
                "confirm"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "manage_project_discipline",
            "title": "Record Project Discipline evidence",
            "description": "Propose a project trade-off, version an eval case or verifier definition, or attach an eval/verifier receipt to exact work. Agents may propose decisions but cannot accept their own proposals; verifier definitions describe external evidence and never execute arbitrary code on 2ools.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "change": {
                  "oneOf": [
                    {
                      "properties": {
                        "action": {
                          "const": "propose_decision",
                          "type": "string"
                        },
                        "alternatives": {
                          "default": [],
                          "items": {
                            "maxLength": 2000,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 20,
                          "type": "array"
                        },
                        "category": {
                          "enum": [
                            "architecture",
                            "cost",
                            "security",
                            "reliability",
                            "scope",
                            "product"
                          ],
                          "type": "string"
                        },
                        "constraints": {
                          "default": [],
                          "items": {
                            "maxLength": 2000,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 30,
                          "type": "array"
                        },
                        "decision": {
                          "maxLength": 5000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "evidence_refs": {
                          "default": [],
                          "items": {
                            "properties": {
                              "artifact_id": {
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "type": "string"
                              },
                              "id": {
                                "maxLength": 2000,
                                "minLength": 1,
                                "type": "string"
                              },
                              "kind": {
                                "enum": [
                                  "version",
                                  "artifact",
                                  "artifact_version",
                                  "project",
                                  "audit_event",
                                  "test_run",
                                  "url",
                                  "commit"
                                ],
                                "type": "string"
                              },
                              "label": {
                                "maxLength": 160,
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "id"
                            ],
                            "type": "object"
                          },
                          "maxItems": 40,
                          "type": "array"
                        },
                        "goal_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "goal_revision_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "idempotency_key": {
                          "maxLength": 200,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "question": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "rationale": {
                          "maxLength": 10000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "request_key": {
                          "maxLength": 200,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "risk_level": {
                          "default": "medium",
                          "description": "Advisory proposed impact. It never weakens permission or approval policy.",
                          "enum": [
                            "low",
                            "medium",
                            "high"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "category",
                        "question",
                        "decision",
                        "rationale",
                        "request_key",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "save_eval_case",
                          "type": "string"
                        },
                        "error_taxonomy": {
                          "default": [],
                          "items": {
                            "maxLength": 500,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 50,
                          "type": "array"
                        },
                        "expected_behavior": {
                          "maxLength": 10000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "expected_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 0,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 200,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "input": {
                          "maxLength": 25000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "key": {
                          "maxLength": 80,
                          "minLength": 1,
                          "pattern": "^[a-z0-9]+(?:[-_][a-z0-9]+)*$",
                          "type": "string"
                        },
                        "kind": {
                          "default": "ai_behavior",
                          "enum": [
                            "ai_behavior",
                            "retrieval",
                            "agent",
                            "tool_output"
                          ],
                          "type": "string"
                        },
                        "name": {
                          "maxLength": 160,
                          "minLength": 1,
                          "type": "string"
                        },
                        "reason": {
                          "default": "",
                          "maxLength": 2000,
                          "type": "string"
                        },
                        "rubric": {
                          "default": [],
                          "items": {
                            "maxLength": 2000,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 50,
                          "type": "array"
                        },
                        "tags": {
                          "default": [],
                          "items": {
                            "maxLength": 100,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 30,
                          "type": "array"
                        }
                      },
                      "required": [
                        "action",
                        "key",
                        "name",
                        "expected_revision",
                        "input",
                        "expected_behavior",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "record_eval_run",
                          "type": "string"
                        },
                        "actual_output": {
                          "default": "",
                          "maxLength": 50000,
                          "type": "string"
                        },
                        "artifact_fingerprint": {
                          "maxLength": 300,
                          "minLength": 1,
                          "type": "string"
                        },
                        "assignment_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "environment_fingerprint": {
                          "maxLength": 300,
                          "minLength": 1,
                          "type": "string"
                        },
                        "error_analysis": {
                          "default": "",
                          "maxLength": 10000,
                          "type": "string"
                        },
                        "error_category": {
                          "default": "",
                          "maxLength": 160,
                          "type": "string"
                        },
                        "eval_case_revision_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "evidence_refs": {
                          "default": [],
                          "items": {
                            "properties": {
                              "artifact_id": {
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "type": "string"
                              },
                              "id": {
                                "maxLength": 2000,
                                "minLength": 1,
                                "type": "string"
                              },
                              "kind": {
                                "enum": [
                                  "version",
                                  "artifact",
                                  "artifact_version",
                                  "project",
                                  "audit_event",
                                  "test_run",
                                  "url",
                                  "commit"
                                ],
                                "type": "string"
                              },
                              "label": {
                                "maxLength": 160,
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "id"
                            ],
                            "type": "object"
                          },
                          "maxItems": 40,
                          "type": "array"
                        },
                        "idempotency_key": {
                          "maxLength": 200,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "model": {
                          "maxLength": 160,
                          "minLength": 1,
                          "type": "string"
                        },
                        "prompt_fingerprint": {
                          "maxLength": 300,
                          "minLength": 1,
                          "type": "string"
                        },
                        "provider": {
                          "maxLength": 100,
                          "minLength": 1,
                          "type": "string"
                        },
                        "quality_gate_run_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "regression_status": {
                          "default": "none",
                          "enum": [
                            "none",
                            "baseline",
                            "new_regression",
                            "known_failure",
                            "fixed",
                            "pass"
                          ],
                          "type": "string"
                        },
                        "rubric_results": {
                          "default": [],
                          "items": {},
                          "maxItems": 100,
                          "type": "array"
                        },
                        "run_key": {
                          "maxLength": 200,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "score": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "status": {
                          "enum": [
                            "passed",
                            "failed",
                            "error"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "eval_case_revision_id",
                        "provider",
                        "model",
                        "prompt_fingerprint",
                        "artifact_fingerprint",
                        "environment_fingerprint",
                        "status",
                        "run_key",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "save_verifier",
                          "type": "string"
                        },
                        "config": {
                          "additionalProperties": {},
                          "default": {},
                          "propertyNames": {
                            "type": "string"
                          },
                          "type": "object"
                        },
                        "description": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "expected_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 0,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 200,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "instructions": {
                          "maxLength": 10000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "key": {
                          "maxLength": 80,
                          "minLength": 1,
                          "pattern": "^[a-z0-9]+(?:[-_][a-z0-9]+)*$",
                          "type": "string"
                        },
                        "kind": {
                          "enum": [
                            "manual",
                            "command_receipt",
                            "ci_check",
                            "mcp_tool",
                            "quality_check"
                          ],
                          "type": "string"
                        },
                        "name": {
                          "maxLength": 160,
                          "minLength": 1,
                          "type": "string"
                        },
                        "reason": {
                          "default": "",
                          "maxLength": 2000,
                          "type": "string"
                        },
                        "required_evidence_kinds": {
                          "default": [],
                          "items": {
                            "maxLength": 80,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 30,
                          "type": "array"
                        },
                        "supported_surfaces": {
                          "default": [],
                          "items": {
                            "maxLength": 80,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 20,
                          "type": "array"
                        },
                        "timeout_seconds": {
                          "default": 300,
                          "maximum": 3600,
                          "minimum": 5,
                          "type": "integer"
                        }
                      },
                      "required": [
                        "action",
                        "key",
                        "name",
                        "description",
                        "kind",
                        "expected_revision",
                        "instructions",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "record_verifier_run",
                          "type": "string"
                        },
                        "assignment_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "details": {
                          "additionalProperties": {},
                          "default": {},
                          "propertyNames": {
                            "type": "string"
                          },
                          "type": "object"
                        },
                        "evidence_refs": {
                          "default": [],
                          "items": {
                            "properties": {
                              "artifact_id": {
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "type": "string"
                              },
                              "id": {
                                "maxLength": 2000,
                                "minLength": 1,
                                "type": "string"
                              },
                              "kind": {
                                "enum": [
                                  "version",
                                  "artifact",
                                  "artifact_version",
                                  "project",
                                  "audit_event",
                                  "test_run",
                                  "url",
                                  "commit"
                                ],
                                "type": "string"
                              },
                              "label": {
                                "maxLength": 160,
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "id"
                            ],
                            "type": "object"
                          },
                          "maxItems": 40,
                          "type": "array"
                        },
                        "idempotency_key": {
                          "maxLength": 200,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "quality_gate_run_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "run_key": {
                          "maxLength": 200,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "status": {
                          "enum": [
                            "passed",
                            "failed",
                            "blocked",
                            "error"
                          ],
                          "type": "string"
                        },
                        "summary": {
                          "maxLength": 5000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "verifier_revision_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "assignment_id",
                        "quality_gate_run_id",
                        "verifier_revision_id",
                        "status",
                        "summary",
                        "run_key",
                        "idempotency_key"
                      ],
                      "type": "object"
                    }
                  ]
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "change"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "update_project_mission",
            "title": "Author a Project Mission or Goal Stack change",
            "description": "Create or revise Mission and Goal contracts, explicitly transition or reorder goals, or propose a scope change. Server role, revision, conflict, and safety policy remain authoritative.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "change": {
                  "oneOf": [
                    {
                      "properties": {
                        "action": {
                          "const": "write_mission",
                          "type": "string"
                        },
                        "activate": {
                          "default": false,
                          "type": "boolean"
                        },
                        "confirm_active_change": {
                          "default": false,
                          "type": "boolean"
                        },
                        "definition_of_done": {
                          "default": [],
                          "items": {
                            "maxLength": 500,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 30,
                          "type": "array"
                        },
                        "expected_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 0,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "original_intent": {
                          "maxLength": 10000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "outcome": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "reason": {
                          "default": "",
                          "maxLength": 2000,
                          "type": "string"
                        },
                        "requested_authority": {
                          "default": [],
                          "items": {
                            "maxLength": 100,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 30,
                          "type": "array"
                        },
                        "scope_constraints": {
                          "default": [],
                          "items": {
                            "maxLength": 500,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 30,
                          "type": "array"
                        }
                      },
                      "required": [
                        "action",
                        "original_intent",
                        "outcome",
                        "expected_revision",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "create_goal",
                          "type": "string"
                        },
                        "activate": {
                          "default": false,
                          "type": "boolean"
                        },
                        "contract": {
                          "properties": {
                            "definition_of_done": {
                              "default": [],
                              "items": {
                                "maxLength": 500,
                                "minLength": 1,
                                "type": "string"
                              },
                              "maxItems": 30,
                              "type": "array"
                            },
                            "original_intent": {
                              "maxLength": 10000,
                              "minLength": 1,
                              "type": "string"
                            },
                            "outcome": {
                              "maxLength": 2000,
                              "minLength": 1,
                              "type": "string"
                            },
                            "priority": {
                              "default": "normal",
                              "enum": [
                                "low",
                                "normal",
                                "high",
                                "urgent"
                              ],
                              "type": "string"
                            },
                            "proof_gates": {
                              "default": [],
                              "items": {
                                "maxLength": 100,
                                "minLength": 1,
                                "type": "string"
                              },
                              "maxItems": 20,
                              "type": "array"
                            },
                            "risky_action_policy": {
                              "default": [],
                              "items": {
                                "maxLength": 100,
                                "minLength": 1,
                                "type": "string"
                              },
                              "maxItems": 20,
                              "type": "array"
                            },
                            "scope_constraints": {
                              "default": [],
                              "items": {
                                "maxLength": 500,
                                "minLength": 1,
                                "type": "string"
                              },
                              "maxItems": 30,
                              "type": "array"
                            },
                            "stop_rule": {
                              "maxLength": 2000,
                              "minLength": 1,
                              "type": "string"
                            }
                          },
                          "required": [
                            "original_intent",
                            "outcome",
                            "stop_rule"
                          ],
                          "type": "object"
                        },
                        "expected_stack_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 0,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "reason": {
                          "default": "",
                          "maxLength": 2000,
                          "type": "string"
                        },
                        "template_key": {
                          "enum": [
                            "ship_feature",
                            "incident_fix",
                            "research_recommend",
                            "launch"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "contract",
                        "expected_stack_revision",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "revise_goal",
                          "type": "string"
                        },
                        "confirm": {
                          "default": false,
                          "type": "boolean"
                        },
                        "contract": {
                          "properties": {
                            "definition_of_done": {
                              "default": [],
                              "items": {
                                "maxLength": 500,
                                "minLength": 1,
                                "type": "string"
                              },
                              "maxItems": 30,
                              "type": "array"
                            },
                            "original_intent": {
                              "maxLength": 10000,
                              "minLength": 1,
                              "type": "string"
                            },
                            "outcome": {
                              "maxLength": 2000,
                              "minLength": 1,
                              "type": "string"
                            },
                            "priority": {
                              "default": "normal",
                              "enum": [
                                "low",
                                "normal",
                                "high",
                                "urgent"
                              ],
                              "type": "string"
                            },
                            "proof_gates": {
                              "default": [],
                              "items": {
                                "maxLength": 100,
                                "minLength": 1,
                                "type": "string"
                              },
                              "maxItems": 20,
                              "type": "array"
                            },
                            "risky_action_policy": {
                              "default": [],
                              "items": {
                                "maxLength": 100,
                                "minLength": 1,
                                "type": "string"
                              },
                              "maxItems": 20,
                              "type": "array"
                            },
                            "scope_constraints": {
                              "default": [],
                              "items": {
                                "maxLength": 500,
                                "minLength": 1,
                                "type": "string"
                              },
                              "maxItems": 30,
                              "type": "array"
                            },
                            "stop_rule": {
                              "maxLength": 2000,
                              "minLength": 1,
                              "type": "string"
                            }
                          },
                          "required": [
                            "original_intent",
                            "outcome",
                            "stop_rule"
                          ],
                          "type": "object"
                        },
                        "expected_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 1,
                          "type": "integer"
                        },
                        "goal_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "reason": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "goal_id",
                        "expected_revision",
                        "contract",
                        "reason",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "transition_goal",
                          "type": "string"
                        },
                        "confirm": {
                          "default": false,
                          "type": "boolean"
                        },
                        "conflict_choice": {
                          "enum": [
                            "replace",
                            "pause",
                            "queue"
                          ],
                          "type": "string"
                        },
                        "expected_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 1,
                          "type": "integer"
                        },
                        "goal_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "merge_into_goal_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "reason": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "transition": {
                          "enum": [
                            "activate",
                            "pause",
                            "park",
                            "queue",
                            "remove",
                            "merge",
                            "claim_ownership"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "goal_id",
                        "transition",
                        "expected_revision",
                        "reason",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "reorder_goals",
                          "type": "string"
                        },
                        "expected_stack_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 0,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "ordered_goal_ids": {
                          "items": {
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "type": "string"
                          },
                          "maxItems": 200,
                          "type": "array"
                        },
                        "reason": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "ordered_goal_ids",
                        "expected_stack_revision",
                        "reason",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "save_template",
                          "type": "string"
                        },
                        "definition_of_done": {
                          "items": {
                            "maxLength": 500,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 30,
                          "minItems": 1,
                          "type": "array"
                        },
                        "expected_version": {
                          "maximum": 9007199254740991,
                          "minimum": 0,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "key": {
                          "maxLength": 100,
                          "minLength": 1,
                          "type": "string"
                        },
                        "mode": {
                          "maxLength": 80,
                          "minLength": 1,
                          "type": "string"
                        },
                        "name": {
                          "maxLength": 160,
                          "minLength": 1,
                          "type": "string"
                        },
                        "proof_gates": {
                          "items": {
                            "maxLength": 100,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 20,
                          "minItems": 1,
                          "type": "array"
                        },
                        "reason": {
                          "default": "",
                          "maxLength": 2000,
                          "type": "string"
                        },
                        "risky_action_policy": {
                          "default": [],
                          "items": {
                            "maxLength": 100,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 20,
                          "type": "array"
                        },
                        "scope_constraints": {
                          "default": [],
                          "items": {
                            "maxLength": 500,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 30,
                          "type": "array"
                        },
                        "stop_rule": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "key",
                        "name",
                        "mode",
                        "definition_of_done",
                        "stop_rule",
                        "proof_gates",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "propose_scope_change",
                          "type": "string"
                        },
                        "dependency_impact": {
                          "default": [],
                          "items": {
                            "maxLength": 500,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 40,
                          "type": "array"
                        },
                        "goal_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "priority": {
                          "default": "normal",
                          "enum": [
                            "low",
                            "normal",
                            "high",
                            "urgent"
                          ],
                          "type": "string"
                        },
                        "proposed_work": {
                          "properties": {
                            "acceptance_criteria": {
                              "default": [],
                              "items": {
                                "maxLength": 500,
                                "minLength": 1,
                                "type": "string"
                              },
                              "maxItems": 20,
                              "type": "array"
                            },
                            "brief": {
                              "maxLength": 10000,
                              "minLength": 1,
                              "type": "string"
                            },
                            "title": {
                              "maxLength": 200,
                              "minLength": 1,
                              "type": "string"
                            }
                          },
                          "required": [
                            "title",
                            "brief"
                          ],
                          "type": "object"
                        },
                        "request_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "what": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "why": {
                          "maxLength": 4000,
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "goal_id",
                        "request_key",
                        "what",
                        "why",
                        "proposed_work",
                        "idempotency_key"
                      ],
                      "type": "object"
                    }
                  ]
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "change"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "review_project_mission",
            "title": "Review or restore Project Mission evidence",
            "description": "Restore an immutable Mission or Goal revision, decide a proposed scope change, or submit proof-based goal completion review. Completion and high-risk authority remain server-gated.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "change": {
                  "oneOf": [
                    {
                      "properties": {
                        "action": {
                          "const": "restore_mission",
                          "type": "string"
                        },
                        "confirm": {
                          "const": true,
                          "type": "boolean"
                        },
                        "expected_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 1,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "reason": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "revision": {
                          "maximum": 9007199254740991,
                          "minimum": 1,
                          "type": "integer"
                        }
                      },
                      "required": [
                        "action",
                        "revision",
                        "expected_revision",
                        "reason",
                        "confirm",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "restore_goal",
                          "type": "string"
                        },
                        "confirm": {
                          "const": true,
                          "type": "boolean"
                        },
                        "expected_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 1,
                          "type": "integer"
                        },
                        "goal_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "reason": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "restore_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 1,
                          "type": "integer"
                        }
                      },
                      "required": [
                        "action",
                        "goal_id",
                        "restore_revision",
                        "expected_revision",
                        "reason",
                        "confirm",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "restore_stack",
                          "type": "string"
                        },
                        "confirm": {
                          "const": true,
                          "type": "boolean"
                        },
                        "expected_stack_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 1,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "reason": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "revision": {
                          "maximum": 9007199254740991,
                          "minimum": 1,
                          "type": "integer"
                        }
                      },
                      "required": [
                        "action",
                        "revision",
                        "expected_stack_revision",
                        "reason",
                        "confirm",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "decide_scope_change",
                          "type": "string"
                        },
                        "decision": {
                          "enum": [
                            "accepted",
                            "deferred",
                            "rejected"
                          ],
                          "type": "string"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "reason": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "scope_change_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "scope_change_id",
                        "decision",
                        "reason",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "review_completion",
                          "type": "string"
                        },
                        "criteria_results": {
                          "items": {
                            "properties": {
                              "criterion": {
                                "maxLength": 500,
                                "minLength": 1,
                                "type": "string"
                              },
                              "note": {
                                "default": "",
                                "maxLength": 1000,
                                "type": "string"
                              },
                              "passed": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "criterion",
                              "passed"
                            ],
                            "type": "object"
                          },
                          "maxItems": 30,
                          "type": "array"
                        },
                        "evidence_refs": {
                          "default": [],
                          "items": {
                            "properties": {
                              "artifact_id": {
                                "maxLength": 100,
                                "type": "string"
                              },
                              "id": {
                                "maxLength": 2000,
                                "minLength": 1,
                                "type": "string"
                              },
                              "kind": {
                                "enum": [
                                  "builder_version",
                                  "artifact_version",
                                  "project",
                                  "test_run",
                                  "audit_event"
                                ],
                                "type": "string"
                              },
                              "label": {
                                "maxLength": 160,
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "id"
                            ],
                            "type": "object"
                          },
                          "maxItems": 40,
                          "type": "array"
                        },
                        "goal_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "reason": {
                          "default": "",
                          "maxLength": 2000,
                          "type": "string"
                        },
                        "request_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "goal_id",
                        "request_key",
                        "criteria_results",
                        "idempotency_key"
                      ],
                      "type": "object"
                    }
                  ]
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "change"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "manage_work_watchdog",
            "title": "Manage Project OS Watchdog coordination",
            "description": "Pause, park, resume, or reprioritize one durable task, or deliberately configure the project Watchdog. This never answers for the user, approves a risky action, deploys, spends, sends externally, deletes data, or widens authority.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "change": {
                  "oneOf": [
                    {
                      "properties": {
                        "action": {
                          "const": "configure",
                          "type": "string"
                        },
                        "enabled": {
                          "type": "boolean"
                        },
                        "grace_minutes": {
                          "maximum": 1440,
                          "minimum": 1,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "policy": {
                          "properties": {
                            "max_blind_minutes": {
                              "maximum": 1440,
                              "minimum": 1,
                              "type": "integer"
                            },
                            "max_concurrency": {
                              "maximum": 20,
                              "minimum": 1,
                              "type": "integer"
                            },
                            "max_recovery_attempts": {
                              "maximum": 20,
                              "minimum": 1,
                              "type": "integer"
                            },
                            "notification_mode": {
                              "enum": [
                                "meaningful",
                                "off"
                              ],
                              "type": "string"
                            },
                            "question_refresh_minutes": {
                              "maximum": 10080,
                              "minimum": 5,
                              "type": "integer"
                            },
                            "quiet_hours": {
                              "anyOf": [
                                {
                                  "properties": {
                                    "end": {
                                      "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
                                      "type": "string"
                                    },
                                    "start": {
                                      "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
                                      "type": "string"
                                    },
                                    "timezone": {
                                      "maxLength": 100,
                                      "minLength": 1,
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "start",
                                    "end",
                                    "timezone"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "type": "object"
                        },
                        "reason": {
                          "default": "",
                          "maxLength": 1000,
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "enabled",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "enum": [
                            "pause",
                            "park",
                            "resume",
                            "reprioritize"
                          ],
                          "type": "string"
                        },
                        "assignment_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "expected_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 1,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "priority": {
                          "enum": [
                            "low",
                            "normal",
                            "high",
                            "urgent"
                          ],
                          "type": "string"
                        },
                        "reason": {
                          "default": "",
                          "maxLength": 2000,
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "assignment_id",
                        "expected_revision",
                        "idempotency_key"
                      ],
                      "type": "object"
                    }
                  ]
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "change"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "act_on_project_os_task",
            "title": "Act on a Project OS task",
            "description": "App-only route for an authenticated person's explicit click in the native Project OS panel. Hidden from the model; every action is revision checked and idempotent, and cancellation requires an explicit confirmation.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "change": {
                  "oneOf": [
                    {
                      "properties": {
                        "action": {
                          "const": "answer",
                          "type": "string"
                        },
                        "answer": {
                          "maxLength": 4000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "assignment_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "confirm": {
                          "const": true,
                          "type": "boolean"
                        },
                        "expected_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 1,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "reason": {
                          "default": "Answered from the native Project OS panel.",
                          "maxLength": 2000,
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "assignment_id",
                        "expected_revision",
                        "answer",
                        "idempotency_key",
                        "confirm"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "enum": [
                            "park",
                            "continue"
                          ],
                          "type": "string"
                        },
                        "assignment_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "confirm": {
                          "const": true,
                          "type": "boolean"
                        },
                        "expected_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 1,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "reason": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "assignment_id",
                        "expected_revision",
                        "reason",
                        "idempotency_key",
                        "confirm"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "cancel",
                          "type": "string"
                        },
                        "assignment_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "confirm": {
                          "const": true,
                          "type": "boolean"
                        },
                        "expected_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 1,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "reason": {
                          "maxLength": 2000,
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "assignment_id",
                        "expected_revision",
                        "reason",
                        "idempotency_key",
                        "confirm"
                      ],
                      "type": "object"
                    }
                  ]
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "change"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "update_living_plan",
            "title": "Update a project's Living Plan",
            "description": "Add, edit, move, or reorder open Living Plan items from the current conversation, then return the refreshed inline plan and timeline panel. This cannot mark returned work complete; completion remains a separate evidence-backed review decision.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "change": {
                  "oneOf": [
                    {
                      "properties": {
                        "acceptance_criteria": {
                          "default": [],
                          "description": "Observable conditions that prove the work is ready for review.",
                          "items": {
                            "maxLength": 500,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 20,
                          "type": "array"
                        },
                        "action": {
                          "const": "add",
                          "type": "string"
                        },
                        "brief": {
                          "description": "Useful context for the person or AI that will do the work.",
                          "maxLength": 10000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "dependency_ids": {
                          "default": [],
                          "description": "Existing same-project work that must be verified first.",
                          "items": {
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "type": "string"
                          },
                          "maxItems": 40,
                          "type": "array"
                        },
                        "due_at": {
                          "description": "Optional ISO-8601 due time.",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
                          "type": "string"
                        },
                        "idempotency_key": {
                          "description": "Caller-generated retry key. Reuse does not add a duplicate item.",
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "priority": {
                          "default": "normal",
                          "enum": [
                            "low",
                            "normal",
                            "high",
                            "urgent"
                          ],
                          "type": "string"
                        },
                        "title": {
                          "description": "Short outcome-oriented plan item.",
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "title",
                        "brief",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "acceptance_criteria": {
                          "items": {
                            "maxLength": 500,
                            "minLength": 1,
                            "type": "string"
                          },
                          "maxItems": 20,
                          "type": "array"
                        },
                        "action": {
                          "const": "edit",
                          "type": "string"
                        },
                        "brief": {
                          "maxLength": 10000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "dependency_ids": {
                          "description": "Replace the dependency set. Cycles and active-session edits are rejected.",
                          "items": {
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "type": "string"
                          },
                          "maxItems": 40,
                          "type": "array"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "item_id": {
                          "description": "Existing editable Living Plan item.",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "lane": {
                          "description": "Move the item without declaring it complete. Working begins only through claim_work_assignment.",
                          "enum": [
                            "next",
                            "waiting"
                          ],
                          "type": "string"
                        },
                        "priority": {
                          "enum": [
                            "low",
                            "normal",
                            "high",
                            "urgent"
                          ],
                          "type": "string"
                        },
                        "title": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "item_id",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "reorder",
                          "type": "string"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "ordered_item_ids": {
                          "description": "Editable item IDs in the requested order. Omitted editable items follow afterward.",
                          "items": {
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "type": "string"
                          },
                          "maxItems": 100,
                          "minItems": 1,
                          "type": "array"
                        }
                      },
                      "required": [
                        "action",
                        "ordered_item_ids",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "arrange",
                          "type": "string"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "item_id": {
                          "description": "Item being dragged or moved with the keyboard.",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "lane": {
                          "description": "Working begins only through claim_work_assignment.",
                          "enum": [
                            "next",
                            "waiting"
                          ],
                          "type": "string"
                        },
                        "ordered_item_ids": {
                          "description": "Editable item IDs in their intended visual order after the move.",
                          "items": {
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "type": "string"
                          },
                          "maxItems": 100,
                          "minItems": 1,
                          "type": "array"
                        }
                      },
                      "required": [
                        "action",
                        "item_id",
                        "lane",
                        "ordered_item_ids",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "steer",
                          "type": "string"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "note": {
                          "description": "Direction that should constrain future work or create a correction from factual history.",
                          "maxLength": 4000,
                          "minLength": 1,
                          "type": "string"
                        },
                        "target_id": {
                          "maxLength": 240,
                          "minLength": 1,
                          "type": "string"
                        },
                        "target_type": {
                          "enum": [
                            "assignment",
                            "activity",
                            "suggestion"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "target_type",
                        "target_id",
                        "note",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "decide_suggestion",
                          "type": "string"
                        },
                        "decision": {
                          "enum": [
                            "add",
                            "dismiss"
                          ],
                          "type": "string"
                        },
                        "idempotency_key": {
                          "maxLength": 120,
                          "minLength": 8,
                          "pattern": "^[A-Za-z0-9._:-]+$",
                          "type": "string"
                        },
                        "suggestion_id": {
                          "enum": [
                            "direction",
                            "current_state",
                            "living_plan",
                            "review",
                            "feedback",
                            "recovery"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "suggestion_id",
                        "decision",
                        "idempotency_key"
                      ],
                      "type": "object"
                    }
                  ]
                },
                "project_id": {
                  "description": "Editable 2ools project ID.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "change"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "render_project_preview",
            "title": "Show 2ools project preview",
            "description": "Render an interactive, read-only card for one saved 2ools version. Use after get_build or get_project when the user wants to see, open, or share the result. Returns protected preview and access-checked workspace links without source code.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "description": "Project containing the saved version.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "version_id": {
                  "description": "Saved version to display.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "version_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "list_project_agents",
            "title": "List project Agents",
            "description": "List the authorizing account's built-in Agents assigned to one readable project. This reveals status and summary, not full Limits or run traces.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "description": "Readable 2ools project ID.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_agent",
            "title": "Inspect a governed 2ools Agent",
            "description": "Read one Agent's saved Limits, trigger, immutable revision summaries, and redacted append-only run traces. Raw prompts, tool arguments, credentials, and source bytes are not returned.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "agent_id": {
                  "description": "2ools Agent ID.",
                  "maxLength": 64,
                  "minLength": 8,
                  "pattern": "^[a-z0-9-]+$",
                  "type": "string"
                },
                "run_limit": {
                  "default": 25,
                  "description": "Maximum recent runs to include.",
                  "maximum": 100,
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "required": [
                "agent_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "run_project_agent",
            "title": "Run an armed project Agent",
            "description": "Queue real execution for a project-linked Agent the person already test-ran and armed. The immutable saved Limits, project access, account fuse, and online Engine requirement are enforced server-side before a job exists.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "agent_id": {
                  "description": "Already-armed 2ools Agent ID.",
                  "maxLength": 64,
                  "minLength": 8,
                  "pattern": "^[a-z0-9-]+$",
                  "type": "string"
                },
                "idempotency_key": {
                  "description": "Caller-generated unique key. Reusing it returns the original run instead of starting another.",
                  "maxLength": 120,
                  "minLength": 8,
                  "pattern": "^[A-Za-z0-9._:-]+$",
                  "type": "string"
                },
                "model": {
                  "description": "CLI model available through the account's online Engine.",
                  "enum": [
                    "openai",
                    "claude",
                    "gemini",
                    "grok"
                  ],
                  "type": "string"
                },
                "project_id": {
                  "description": "Project this Agent is assigned to.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "task": {
                  "description": "Concrete task for this run. This cannot widen the Agent's saved tools, folders, network, send, change, or spend authority.",
                  "maxLength": 20000,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "agent_id",
                "task",
                "model",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_project_agent_mode",
            "title": "Get project Agent Mode",
            "description": "Read the project-level autonomous coordination state derived from the canonical Living Plan, governed Agent, and exact Engine destination. Returns progress, current work, next eligible safe step, and the reason the project is running or needs the person.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "description": "Exact 2ools project.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "configure_project_agent_mode",
            "title": "Configure project Agent Mode",
            "description": "Turn the selected project's governed Agent Mode on or off. When enabled, the person chooses one armed project Agent, one exact Engine, and one provider; only reviewed safe-auto steps in the exact approved plan may advance in dependency order. Limits and approval boundaries are never widened.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "agent_id": {
                  "description": "Armed Agent assigned to this project. Required when enabling.",
                  "maxLength": 64,
                  "minLength": 8,
                  "pattern": "^[a-z0-9-]+$",
                  "type": "string"
                },
                "confirm": {
                  "const": true,
                  "description": "Confirms this project-wide coordination change and exact runner destination.",
                  "type": "boolean"
                },
                "enabled": {
                  "description": "Whether Agent Mode should keep advancing approved safe work.",
                  "type": "boolean"
                },
                "engine_id": {
                  "description": "Exact connected Engine. Required when enabling.",
                  "pattern": "^engine_[A-Za-z0-9_-]{16,32}$",
                  "type": "string"
                },
                "expected_revision": {
                  "description": "Exact Agent Mode revision shown to the person. Use 0 before the first configuration.",
                  "maximum": 9007199254740991,
                  "minimum": 0,
                  "type": "integer"
                },
                "idempotency_key": {
                  "description": "Stable operation key reused only when recovering this exact configuration change.",
                  "maxLength": 120,
                  "minLength": 8,
                  "pattern": "^[A-Za-z0-9._:-]+$",
                  "type": "string"
                },
                "include_approved_plan": {
                  "default": true,
                  "description": "Compatibility flag. Agent Mode remains limited to steps already reviewed as safe-auto.",
                  "type": "boolean"
                },
                "project_id": {
                  "description": "Exact project to coordinate.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "provider": {
                  "description": "Authenticated provider on the selected Engine. Required when enabling.",
                  "enum": [
                    "openai",
                    "claude",
                    "gemini",
                    "grok"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "enabled",
                "expected_revision",
                "idempotency_key",
                "confirm"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "advance_project_agent_mode",
            "title": "Advance project Agent Mode",
            "description": "Idempotently re-evaluate and, when safe, queue the next dependency-ready safe-auto plan step on the project's already approved Agent, Engine, and provider. Running, review, blocked, and approval states never double-dispatch.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "description": "Exact project whose saved Agent Mode should advance.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "dispatch_project_work",
            "title": "Run Project OS task on selected computer",
            "description": "Reserve one exact revision-checked Project OS task for one armed project Agent, then queue it on one exact online Engine and authenticated provider selected by the person. Queued is not working; the task becomes active only after that Engine atomically claims it. Never falls back to another computer, provider, hosted compute, or a parallel task.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "agent_id": {
                  "description": "Already-tested, armed Agent assigned to this project.",
                  "maxLength": 64,
                  "minLength": 8,
                  "pattern": "^[a-z0-9-]+$",
                  "type": "string"
                },
                "assignment_id": {
                  "description": "Exact open Project OS task to run.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "confirm": {
                  "const": true,
                  "description": "Confirms the person explicitly chose this task, Agent, computer, and provider.",
                  "type": "boolean"
                },
                "engine_id": {
                  "description": "Exact online Engine selected from list_connected_engines.",
                  "pattern": "^engine_[A-Za-z0-9_-]{16,32}$",
                  "type": "string"
                },
                "expected_revision": {
                  "description": "Task revision shown to the person. A stale revision is refused.",
                  "maximum": 9007199254740991,
                  "minimum": 1,
                  "type": "integer"
                },
                "idempotency_key": {
                  "description": "Caller-generated stable key. Reuse returns the same dispatch and cannot duplicate work.",
                  "maxLength": 120,
                  "minLength": 8,
                  "pattern": "^[A-Za-z0-9._:-]+$",
                  "type": "string"
                },
                "note": {
                  "description": "Optional owner direction that narrows this run without changing the saved task or Agent Limits.",
                  "maxLength": 4000,
                  "type": "string"
                },
                "project_id": {
                  "description": "Project that owns both the task and Agent.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "protocol": {
                  "const": "agent-v1",
                  "description": "Exact governed Agent protocol advertised by the selected Engine.",
                  "type": "string"
                },
                "provider": {
                  "description": "Exact authenticated provider CLI available on the selected Engine.",
                  "enum": [
                    "openai",
                    "claude",
                    "gemini",
                    "grok"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "assignment_id",
                "expected_revision",
                "agent_id",
                "engine_id",
                "provider",
                "protocol",
                "idempotency_key",
                "confirm"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_project_work_dispatch",
            "title": "Get Project OS task dispatch",
            "description": "Read the authoritative queued, claimed, running, approval-paused, or terminal state of one exact governed Project OS task dispatch. Returns bounded progress and lease evidence without prompts, credentials, source, paths, or private model transcripts.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "assignment_id": {
                  "description": "Saved Project OS task ID, used to rediscover its latest governed Engine run after app relaunch.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "idempotency_key": {
                  "description": "Original dispatch key, used to recover a receipt after an interrupted response.",
                  "maxLength": 120,
                  "minLength": 8,
                  "pattern": "^[A-Za-z0-9._:-]+$",
                  "type": "string"
                },
                "job_id": {
                  "description": "Job ID returned by dispatch_project_work.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "cancel_agent_run",
            "title": "Cancel governed Agent run",
            "description": "Stop one queued or running Agent execution and close its durable run history. Completed, failed, stalled, and already-canceled runs keep their terminal truth.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "agent_id": {
                  "description": "Agent that owns the run.",
                  "maxLength": 64,
                  "minLength": 8,
                  "pattern": "^[a-z0-9-]+$",
                  "type": "string"
                },
                "confirm": {
                  "const": true,
                  "description": "Confirms the person explicitly chose to stop this exact run.",
                  "type": "boolean"
                },
                "job_id": {
                  "description": "Agent job ID returned by run_project_agent.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project the Agent run belongs to.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "run_id": {
                  "description": "Agent run ID returned by run_project_agent.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "agent_id",
                "run_id",
                "job_id",
                "confirm"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_project_activity",
            "title": "Get 2ools project activity",
            "description": "Read the attributable project timeline across human work, external MCP agents, builds, versions, feedback, and workspace pins. Actor kind is explicit; an external agent is never presented as the human account that authorized it.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "cursor": {
                  "description": "Opaque next_cursor from a prior response.",
                  "maxLength": 1000,
                  "type": "string"
                },
                "limit": {
                  "default": 40,
                  "description": "Maximum activity items to return.",
                  "maximum": 100,
                  "minimum": 1,
                  "type": "integer"
                },
                "project_id": {
                  "description": "2ools project ID.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "wait_for_project_activity",
            "title": "Wait for new 2ools project activity",
            "description": "Wait up to 20 seconds for attributable project events newer than a head_cursor or prior next_cursor. Returns events oldest-first so an outside agent can process them in order. If resync_required is true, paginate get_project_activity instead of advancing the cursor.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "after_cursor": {
                  "description": "Opaque head_cursor from get_project_activity or next_cursor from a prior wait.",
                  "maxLength": 1000,
                  "minLength": 1,
                  "type": "string"
                },
                "limit": {
                  "default": 40,
                  "description": "Maximum new events to return.",
                  "maximum": 100,
                  "minimum": 1,
                  "type": "integer"
                },
                "project_id": {
                  "description": "2ools project ID.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "timeout_seconds": {
                  "default": 20,
                  "description": "Maximum time to wait before returning timed_out=true.",
                  "maximum": 20,
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "required": [
                "project_id",
                "after_cursor"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "list_project_feedback",
            "title": "List project feedback",
            "description": "Read page-anchored review feedback for versions in a project, with explicit human or external-agent attribution.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "include_resolved": {
                  "default": false,
                  "description": "Include feedback already marked resolved.",
                  "type": "boolean"
                },
                "project_id": {
                  "description": "2ools project ID.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "add_project_feedback",
            "title": "Add project feedback",
            "description": "Add an attributable review comment to a saved project version. This does not modify source or approve the version.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "comment": {
                  "maxLength": 600,
                  "minLength": 1,
                  "type": "string"
                },
                "idempotency_key": {
                  "description": "Caller-generated retry key. Reusing it returns the original feedback item.",
                  "maxLength": 120,
                  "minLength": 8,
                  "pattern": "^[A-Za-z0-9._:-]+$",
                  "type": "string"
                },
                "label": {
                  "default": "",
                  "maxLength": 120,
                  "type": "string"
                },
                "page": {
                  "default": "Home",
                  "maxLength": 120,
                  "minLength": 1,
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "reply_to_feedback_id": {
                  "description": "Root feedback ID to reply to. Replies inherit the root pin position and cannot be nested.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "version_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "x": {
                  "default": 50,
                  "description": "Horizontal position as a percentage.",
                  "maximum": 100,
                  "minimum": 0,
                  "type": "number"
                },
                "y": {
                  "default": 50,
                  "description": "Vertical position as a percentage.",
                  "maximum": 100,
                  "minimum": 0,
                  "type": "number"
                }
              },
              "required": [
                "project_id",
                "version_id",
                "comment",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "resolve_project_feedback",
            "title": "Resolve project feedback",
            "description": "Owner-only review decision that resolves or reopens one saved feedback item.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "feedback_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "resolved": {
                  "default": true,
                  "type": "boolean"
                }
              },
              "required": [
                "project_id",
                "feedback_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "list_project_pins",
            "title": "List workspace pins",
            "description": "Read shared workspace notes and http(s) links, with explicit attribution.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "add_project_pin",
            "title": "Add workspace pin",
            "description": "Add an attributable note or safe http(s) link to the shared project workspace.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "idempotency_key": {
                  "description": "Caller-generated retry key. Reusing it returns the original pin.",
                  "maxLength": 120,
                  "minLength": 8,
                  "pattern": "^[A-Za-z0-9._:-]+$",
                  "type": "string"
                },
                "kind": {
                  "enum": [
                    "note",
                    "link"
                  ],
                  "type": "string"
                },
                "label": {
                  "default": "",
                  "maxLength": 200,
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "surface": {
                  "default": "chrome",
                  "enum": [
                    "chrome",
                    "preview"
                  ],
                  "type": "string"
                },
                "url": {
                  "format": "uri",
                  "maxLength": 2000,
                  "type": "string"
                },
                "version_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "x": {
                  "default": 0.5,
                  "maximum": 1,
                  "minimum": 0,
                  "type": "number"
                },
                "y": {
                  "default": 0.5,
                  "maximum": 1,
                  "minimum": 0,
                  "type": "number"
                }
              },
              "required": [
                "project_id",
                "kind",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "remove_project_pin",
            "title": "Remove workspace pin",
            "description": "Remove one shared workspace pin. The operation is idempotent.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "pin_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "pin_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "prepare_version_export",
            "title": "Prepare portable version export",
            "description": "Create a five-minute download URL for an exact saved version. Source is delivered by the download route, never embedded in MCP model output.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "version_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "version_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_version_share_link",
            "title": "Get exact version share link",
            "description": "Read the durable sharing state and current URL for one exact saved version. Disabled shares return no URL.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "page": {
                  "maxLength": 120,
                  "minLength": 1,
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "version_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "version_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "create_version_share_link",
            "title": "Create exact version share link",
            "description": "Create or recover a durable public or code-protected link for one exact saved version. Reusing the idempotency key returns the original result.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "access": {
                  "enum": [
                    "public",
                    "code"
                  ],
                  "type": "string"
                },
                "idempotency_key": {
                  "maxLength": 120,
                  "minLength": 8,
                  "pattern": "^[A-Za-z0-9._:-]+$",
                  "type": "string"
                },
                "page": {
                  "maxLength": 120,
                  "minLength": 1,
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "version_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "version_id",
                "access",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "revoke_version_share_link",
            "title": "Revoke exact version share link",
            "description": "Disable every existing public or code-protected URL for one exact saved version. Re-publishing a protected link rotates its code.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "idempotency_key": {
                  "maxLength": 120,
                  "minLength": 8,
                  "pattern": "^[A-Za-z0-9._:-]+$",
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "version_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "version_id",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "list_artifacts",
            "title": "List project artifacts",
            "description": "List durable project artifacts and each latest immutable version without returning stored bytes.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_artifact",
            "title": "Get artifact history",
            "description": "Read one artifact's immutable version history, provenance, attribution, digests, and review states without returning stored bytes.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "artifact_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "artifact_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "prepare_artifact_upload",
            "title": "Prepare reviewed artifact upload",
            "description": "Create a five-minute PUT URL for exact bytes. External-agent output always enters pending review and never replaces the current artifact version before approval.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "artifact_id": {
                  "description": "Existing artifact to version. Omit when creating a new artifact.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "byte_size": {
                  "exclusiveMinimum": 0,
                  "maximum": 10000000,
                  "type": "integer"
                },
                "filename": {
                  "maxLength": 240,
                  "minLength": 1,
                  "type": "string"
                },
                "kind": {
                  "enum": [
                    "site",
                    "widget",
                    "freeform",
                    "document",
                    "pdf",
                    "presentation",
                    "spreadsheet",
                    "image",
                    "archive",
                    "message",
                    "dataset",
                    "file"
                  ],
                  "type": "string"
                },
                "media_type": {
                  "maxLength": 200,
                  "minLength": 3,
                  "type": "string"
                },
                "name": {
                  "maxLength": 160,
                  "minLength": 1,
                  "type": "string"
                },
                "parent_version_id": {
                  "description": "Required latest version id when updating an existing artifact.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "review_note": {
                  "maxLength": 2000,
                  "type": "string"
                },
                "sha256": {
                  "pattern": "^[a-fA-F0-9]{64}$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "kind",
                "name",
                "filename",
                "media_type",
                "byte_size",
                "sha256"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "prepare_artifact_download",
            "title": "Prepare exact artifact download",
            "description": "Create a five-minute download URL for one immutable artifact version. Stored bytes never enter MCP model output.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "artifact_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "artifact_version_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "artifact_id",
                "artifact_version_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "list_artifact_approval_requests",
            "title": "List artifact review requests",
            "description": "List exact artifact versions awaiting or carrying a human review decision. Requires separately delegated artifact review authority.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "status": {
                  "default": "pending",
                  "enum": [
                    "pending",
                    "approved",
                    "rejected"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "approve_artifact_version",
            "title": "Approve exact artifact version",
            "description": "Approve one pending immutable artifact version and make it current. Repeating the same decision is idempotent.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "note": {
                  "maxLength": 2000,
                  "type": "string"
                },
                "request_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "request_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "reject_artifact_version",
            "title": "Request artifact changes",
            "description": "Reject one pending immutable artifact version with useful feedback. Repeating the same decision is idempotent.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "note": {
                  "maxLength": 2000,
                  "minLength": 1,
                  "type": "string"
                },
                "request_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "request_id",
                "note"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_task_quality_gate",
            "title": "Read a task Quality Gate",
            "description": "Return the current task-bound Quality Gate policy, freshness, deterministic check receipt, and attached findings. A pass never replaces required human visual or approval review.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "assignment_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "assignment_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "run_task_quality_gate",
            "title": "Run or settle a task Quality Gate",
            "description": "Start checks against exact task/artifact/environment fingerprints, or submit every configured check with same-project evidence and explicit findings. Missing routes, stale proof, failed checks, and open findings cannot become a false pass.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "change": {
                  "oneOf": [
                    {
                      "properties": {
                        "action": {
                          "const": "begin",
                          "type": "string"
                        },
                        "artifact_fingerprint": {
                          "maxLength": 300,
                          "minLength": 1,
                          "type": "string"
                        },
                        "assignment_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "environment_fingerprint": {
                          "maxLength": 300,
                          "minLength": 1,
                          "type": "string"
                        },
                        "expected_revision": {
                          "maximum": 9007199254740991,
                          "minimum": 1,
                          "type": "integer"
                        },
                        "idempotency_key": {
                          "maxLength": 200,
                          "minLength": 8,
                          "type": "string"
                        },
                        "route_fingerprint": {
                          "maxLength": 300,
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "assignment_id",
                        "expected_revision",
                        "artifact_fingerprint",
                        "environment_fingerprint",
                        "idempotency_key"
                      ],
                      "type": "object"
                    },
                    {
                      "properties": {
                        "action": {
                          "const": "complete",
                          "type": "string"
                        },
                        "check_results": {
                          "items": {
                            "properties": {
                              "check": {
                                "enum": [
                                  "build",
                                  "typecheck",
                                  "lint",
                                  "tests",
                                  "browser_smoke",
                                  "responsive_layout",
                                  "overflow_overlap",
                                  "contrast_focus",
                                  "screenshot_evidence",
                                  "artifact_evidence",
                                  "route_reachability",
                                  "console_runtime",
                                  "truth_fixture"
                                ],
                                "type": "string"
                              },
                              "details": {
                                "additionalProperties": {},
                                "properties": {
                                  "expected_routes": {
                                    "items": {
                                      "maxLength": 500,
                                      "minLength": 1,
                                      "type": "string"
                                    },
                                    "maxItems": 100,
                                    "type": "array"
                                  },
                                  "observed_routes": {
                                    "items": {
                                      "maxLength": 500,
                                      "minLength": 1,
                                      "type": "string"
                                    },
                                    "maxItems": 100,
                                    "type": "array"
                                  }
                                },
                                "type": "object"
                              },
                              "evidence_refs": {
                                "items": {
                                  "properties": {
                                    "artifact_id": {
                                      "maxLength": 100,
                                      "type": "string"
                                    },
                                    "id": {
                                      "maxLength": 2000,
                                      "minLength": 1,
                                      "type": "string"
                                    },
                                    "kind": {
                                      "enum": [
                                        "builder_version",
                                        "artifact_version",
                                        "project",
                                        "url",
                                        "test_run",
                                        "audit_event",
                                        "commit"
                                      ],
                                      "type": "string"
                                    },
                                    "label": {
                                      "maxLength": 160,
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "kind",
                                    "id"
                                  ],
                                  "type": "object"
                                },
                                "maxItems": 40,
                                "minItems": 1,
                                "type": "array"
                              },
                              "status": {
                                "enum": [
                                  "passed",
                                  "failed",
                                  "blocked"
                                ],
                                "type": "string"
                              },
                              "summary": {
                                "maxLength": 2000,
                                "minLength": 1,
                                "type": "string"
                              }
                            },
                            "required": [
                              "check",
                              "status",
                              "summary",
                              "evidence_refs"
                            ],
                            "type": "object"
                          },
                          "maxItems": 13,
                          "minItems": 1,
                          "type": "array"
                        },
                        "evidence_refs": {
                          "default": [],
                          "items": {
                            "properties": {
                              "artifact_id": {
                                "maxLength": 100,
                                "type": "string"
                              },
                              "id": {
                                "maxLength": 2000,
                                "minLength": 1,
                                "type": "string"
                              },
                              "kind": {
                                "enum": [
                                  "builder_version",
                                  "artifact_version",
                                  "project",
                                  "url",
                                  "test_run",
                                  "audit_event",
                                  "commit"
                                ],
                                "type": "string"
                              },
                              "label": {
                                "maxLength": 160,
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "id"
                            ],
                            "type": "object"
                          },
                          "maxItems": 40,
                          "type": "array"
                        },
                        "findings": {
                          "default": [],
                          "items": {
                            "properties": {
                              "affected_state": {
                                "maxLength": 1000,
                                "minLength": 1,
                                "type": "string"
                              },
                              "affected_surface": {
                                "maxLength": 300,
                                "minLength": 1,
                                "type": "string"
                              },
                              "check": {
                                "enum": [
                                  "build",
                                  "typecheck",
                                  "lint",
                                  "tests",
                                  "browser_smoke",
                                  "responsive_layout",
                                  "overflow_overlap",
                                  "contrast_focus",
                                  "screenshot_evidence",
                                  "artifact_evidence",
                                  "route_reachability",
                                  "console_runtime",
                                  "truth_fixture"
                                ],
                                "type": "string"
                              },
                              "evidence_refs": {
                                "default": [],
                                "items": {
                                  "properties": {
                                    "artifact_id": {
                                      "maxLength": 100,
                                      "type": "string"
                                    },
                                    "id": {
                                      "maxLength": 2000,
                                      "minLength": 1,
                                      "type": "string"
                                    },
                                    "kind": {
                                      "enum": [
                                        "builder_version",
                                        "artifact_version",
                                        "project",
                                        "url",
                                        "test_run",
                                        "audit_event",
                                        "commit"
                                      ],
                                      "type": "string"
                                    },
                                    "label": {
                                      "maxLength": 160,
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "kind",
                                    "id"
                                  ],
                                  "type": "object"
                                },
                                "maxItems": 40,
                                "type": "array"
                              },
                              "next_action": {
                                "maxLength": 2000,
                                "minLength": 1,
                                "type": "string"
                              },
                              "severity": {
                                "enum": [
                                  "low",
                                  "medium",
                                  "high",
                                  "critical"
                                ],
                                "type": "string"
                              },
                              "summary": {
                                "maxLength": 2000,
                                "minLength": 1,
                                "type": "string"
                              }
                            },
                            "required": [
                              "severity",
                              "check",
                              "affected_surface",
                              "affected_state",
                              "summary",
                              "next_action"
                            ],
                            "type": "object"
                          },
                          "maxItems": 100,
                          "type": "array"
                        },
                        "run_id": {
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        }
                      },
                      "required": [
                        "action",
                        "run_id",
                        "check_results"
                      ],
                      "type": "object"
                    }
                  ]
                }
              },
              "required": [
                "change"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_work_handoff",
            "title": "Read task context handoff",
            "description": "Return the current immutable context-handoff receipt, exact task lineage, and honestly labeled worker-reported or 2ools-forecast context signal.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "assignment_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                }
              },
              "required": [
                "assignment_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "prepare_work_handoff",
            "title": "Prepare a bounded task handoff",
            "description": "Checkpoint one owned session into an immutable, exactly-once successor envelope. Estimated signals are labeled as estimates; questions and possibly committed effects stay paused for a person.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "idempotency_key": {
                  "maxLength": 200,
                  "minLength": 8,
                  "type": "string"
                },
                "reason": {
                  "maxLength": 2000,
                  "type": "string"
                },
                "remaining_context_tokens": {
                  "maximum": 10000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "request_handoff": {
                  "default": true,
                  "type": "boolean"
                },
                "session_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "signal_kind": {
                  "default": "explicit",
                  "enum": [
                    "provider_reported",
                    "estimated",
                    "explicit",
                    "user_request",
                    "recovery"
                  ],
                  "type": "string"
                },
                "signal_label": {
                  "maxLength": 200,
                  "type": "string"
                }
              },
              "required": [
                "session_id",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "list_work_assignments",
            "title": "List project work assignments",
            "description": "List durable project work contracts, bounded attempts, leases, budgets, and result references.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "status": {
                  "enum": [
                    "open",
                    "in_progress",
                    "review",
                    "waiting",
                    "blocked",
                    "completed",
                    "canceled"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "create_work_assignment",
            "title": "Create bounded project work",
            "description": "Create a durable assignment with acceptance criteria and hard step, time, and spend ceilings.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "acceptance_criteria": {
                  "default": [],
                  "items": {
                    "maxLength": 500,
                    "minLength": 1,
                    "type": "string"
                  },
                  "maxItems": 20,
                  "type": "array"
                },
                "brief": {
                  "maxLength": 10000,
                  "minLength": 1,
                  "type": "string"
                },
                "continuation_mode": {
                  "default": "manual",
                  "enum": [
                    "manual",
                    "safe_auto"
                  ],
                  "type": "string"
                },
                "dependency_ids": {
                  "default": [],
                  "items": {
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "type": "string"
                  },
                  "maxItems": 40,
                  "type": "array"
                },
                "due_at": {
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
                  "type": "string"
                },
                "goal_id": {
                  "description": "Active Mission Goal. Required automatically when the project has an active Mission.",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "idempotency_key": {
                  "maxLength": 200,
                  "minLength": 8,
                  "type": "string"
                },
                "max_minutes": {
                  "default": 30,
                  "maximum": 1440,
                  "minimum": 1,
                  "type": "integer"
                },
                "max_spend_cents": {
                  "default": 0,
                  "maximum": 1000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "max_steps": {
                  "default": 50,
                  "maximum": 500,
                  "minimum": 1,
                  "type": "integer"
                },
                "max_tokens": {
                  "default": 250000,
                  "maximum": 10000000,
                  "minimum": 1000,
                  "type": "integer"
                },
                "output_surfaces": {
                  "default": [],
                  "items": {
                    "enum": [
                      "code",
                      "ui",
                      "artifact",
                      "test",
                      "api",
                      "deploy"
                    ],
                    "type": "string"
                  },
                  "maxItems": 6,
                  "type": "array"
                },
                "priority": {
                  "default": "normal",
                  "enum": [
                    "low",
                    "normal",
                    "high",
                    "urgent"
                  ],
                  "type": "string"
                },
                "project_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "quality_gate_policy": {
                  "properties": {
                    "expected_routes": {
                      "items": {
                        "maxLength": 500,
                        "minLength": 1,
                        "type": "string"
                      },
                      "maxItems": 100,
                      "type": "array"
                    },
                    "human_visual_review_required": {
                      "type": "boolean"
                    },
                    "max_evidence_age_minutes": {
                      "maximum": 43200,
                      "minimum": 5,
                      "type": "integer"
                    },
                    "required_checks": {
                      "items": {
                        "enum": [
                          "build",
                          "typecheck",
                          "lint",
                          "tests",
                          "browser_smoke",
                          "responsive_layout",
                          "overflow_overlap",
                          "contrast_focus",
                          "screenshot_evidence",
                          "artifact_evidence",
                          "route_reachability",
                          "console_runtime",
                          "truth_fixture"
                        ],
                        "type": "string"
                      },
                      "maxItems": 13,
                      "type": "array"
                    }
                  },
                  "type": "object"
                },
                "required_evidence_kinds": {
                  "default": [],
                  "items": {
                    "enum": [
                      "builder_version",
                      "artifact_version",
                      "project",
                      "test_run",
                      "audit_event"
                    ],
                    "type": "string"
                  },
                  "maxItems": 5,
                  "type": "array"
                },
                "title": {
                  "maxLength": 200,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "title",
                "brief",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "claim_work_assignment",
            "title": "Claim bounded project work",
            "description": "Atomically claim one open assignment and receive a five-minute renewable lease plus an immutable budget snapshot.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "assignment_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "idempotency_key": {
                  "maxLength": 200,
                  "minLength": 8,
                  "type": "string"
                },
                "input_refs": {
                  "default": [],
                  "items": {
                    "properties": {
                      "artifact_id": {
                        "maxLength": 100,
                        "type": "string"
                      },
                      "id": {
                        "maxLength": 2000,
                        "minLength": 1,
                        "type": "string"
                      },
                      "kind": {
                        "enum": [
                          "builder_version",
                          "artifact_version",
                          "project",
                          "url",
                          "test_run",
                          "audit_event",
                          "commit"
                        ],
                        "type": "string"
                      },
                      "label": {
                        "maxLength": 160,
                        "type": "string"
                      }
                    },
                    "required": [
                      "kind",
                      "id"
                    ],
                    "type": "object"
                  },
                  "maxItems": 40,
                  "type": "array"
                }
              },
              "required": [
                "assignment_id",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "heartbeat_work_session",
            "title": "Renew a work-session lease",
            "description": "Renew the authenticated worker's active lease without widening its immutable step, time, or spend ceilings.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "cached_input_tokens": {
                  "maximum": 2000000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "checkpoint": {
                  "maxLength": 5000,
                  "type": "string"
                },
                "context_signal_kind": {
                  "enum": [
                    "provider_reported",
                    "estimated",
                    "explicit",
                    "user_request",
                    "recovery"
                  ],
                  "type": "string"
                },
                "context_signal_label": {
                  "maxLength": 200,
                  "type": "string"
                },
                "effect_state": {
                  "enum": [
                    "pre_effect",
                    "effect_committed"
                  ],
                  "type": "string"
                },
                "handoff_idempotency_key": {
                  "maxLength": 200,
                  "minLength": 8,
                  "type": "string"
                },
                "handoff_reason": {
                  "maxLength": 2000,
                  "type": "string"
                },
                "input_tokens": {
                  "maximum": 2000000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "model_calls": {
                  "maximum": 10000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "output_tokens": {
                  "maximum": 2000000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "remaining_context_tokens": {
                  "maximum": 10000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "request_handoff": {
                  "type": "boolean"
                },
                "session_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "used_spend_cents": {
                  "maximum": 1000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "used_steps": {
                  "maximum": 500,
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "required": [
                "session_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "checkpoint_work_session",
            "title": "Checkpoint bounded project work",
            "description": "End the current lease with a compact continuation checkpoint, or place work in an explicit waiting or blocked state. Ambiguous external effects always wait for reconciliation and are never auto-retried.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "cached_input_tokens": {
                  "maximum": 2000000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "checkpoint": {
                  "maxLength": 5000,
                  "minLength": 1,
                  "type": "string"
                },
                "disposition": {
                  "default": "continue",
                  "enum": [
                    "continue",
                    "waiting",
                    "blocked"
                  ],
                  "type": "string"
                },
                "effect_state": {
                  "default": "pre_effect",
                  "enum": [
                    "pre_effect",
                    "effect_committed",
                    "outcome_unknown"
                  ],
                  "type": "string"
                },
                "idempotency_key": {
                  "maxLength": 200,
                  "minLength": 8,
                  "type": "string"
                },
                "input_tokens": {
                  "maximum": 2000000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "model_calls": {
                  "maximum": 10000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "output_tokens": {
                  "maximum": 2000000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "reason": {
                  "maxLength": 2000,
                  "type": "string"
                },
                "session_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "used_spend_cents": {
                  "maximum": 1000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "used_steps": {
                  "maximum": 500,
                  "minimum": 0,
                  "type": "integer"
                },
                "waiting_for": {
                  "maxLength": 500,
                  "type": "string"
                }
              },
              "required": [
                "session_id",
                "checkpoint",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "submit_work_session",
            "title": "Submit work for review",
            "description": "End the authenticated worker's lease and submit typed result references for a separate review decision.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "cached_input_tokens": {
                  "maximum": 2000000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "idempotency_key": {
                  "maxLength": 200,
                  "minLength": 8,
                  "type": "string"
                },
                "input_tokens": {
                  "maximum": 2000000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "model_calls": {
                  "maximum": 10000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "output_refs": {
                  "default": [],
                  "items": {
                    "properties": {
                      "artifact_id": {
                        "maxLength": 100,
                        "type": "string"
                      },
                      "id": {
                        "maxLength": 2000,
                        "minLength": 1,
                        "type": "string"
                      },
                      "kind": {
                        "enum": [
                          "builder_version",
                          "artifact_version",
                          "project",
                          "url",
                          "test_run",
                          "audit_event",
                          "commit"
                        ],
                        "type": "string"
                      },
                      "label": {
                        "maxLength": 160,
                        "type": "string"
                      }
                    },
                    "required": [
                      "kind",
                      "id"
                    ],
                    "type": "object"
                  },
                  "maxItems": 40,
                  "type": "array"
                },
                "output_tokens": {
                  "maximum": 2000000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "result_summary": {
                  "maxLength": 5000,
                  "minLength": 1,
                  "type": "string"
                },
                "session_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "used_spend_cents": {
                  "maximum": 1000000,
                  "minimum": 0,
                  "type": "integer"
                },
                "used_steps": {
                  "maximum": 500,
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "required": [
                "session_id",
                "result_summary",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "decide_work_assignment",
            "title": "Review submitted project work",
            "description": "Complete submitted work or reopen it with useful feedback. Requires separately delegated work-review authority.",
            "inputSchema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "assignment_id": {
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "type": "string"
                },
                "decision": {
                  "enum": [
                    "completed",
                    "reopened"
                  ],
                  "type": "string"
                },
                "idempotency_key": {
                  "maxLength": 200,
                  "minLength": 8,
                  "type": "string"
                },
                "note": {
                  "maxLength": 2000,
                  "type": "string"
                }
              },
              "required": [
                "assignment_id",
                "decision",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          }
        ]
      },
      "name": "2ools",
      "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
      "packages": null,
      "pageJsonUrl": "https://www.anchorterminal.com/tools/2ools-mcp.json",
      "popularity": {
        "githubStars": 1
      },
      "registryName": "app.2ools/mcp",
      "remotes": [
        {
          "type": "streamable-http",
          "url": "https://2ools.app/mcp"
        }
      ],
      "repository": "https://github.com/2ools/mcp-server",
      "reviewed": false,
      "slug": "2ools-mcp",
      "source": "the official MCP registry",
      "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=app.2ools/mcp",
      "summary": "Build, version, review, and export websites, web apps, and games from a conversation.",
      "updatedAt": "2026-08-07T22:00:10Z",
      "url": "https://www.anchorterminal.com/tools/2ools-mcp",
      "vendor": "2ools.app",
      "vendorUrl": "https://2ools.app/connect-ai",
      "version": "0.3.1",
      "websiteUrl": "https://2ools.app/connect-ai",
      "where": "hosted",
      "why": [
        "vendor"
      ]
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/tools/2ools-mcp",
    "json": "https://www.anchorterminal.com/tools/2ools-mcp.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/tools/2ools-mcp.md",
    "slim": "https://www.anchorterminal.com/tools/2ools-mcp.min.md"
  },
  "markdown": "# 2ools\n\n\u003e Indexed, not reviewed: facts from the official MCP registry and our own checks. No score, grade or rank, and not in the rankings until the panel reviews it. How the index works: https://www.anchorterminal.com/indexed/\n\n- Kind: MCP server, by 2ools.app (https://2ools.app/connect-ai)\n- Listed because: It's published in the registry under 2ools.app, a namespace the registry only gives to whoever proves they control that domain.\n- What the official MCP registry says: Build, version, review, and export websites, web apps, and games from a conversation.\n\n## Facts\n\n- MCP registry: `app.2ools/mcp` 0.3.1\n- Endpoint: https://2ools.app/mcp (streamable HTTP)\n- Source: https://github.com/2ools/mcp-server\n- Website: https://2ools.app/connect-ai\n- GitHub stars: 1\n- Registry entry updated: 2026-08-07\n\n## Tools\n\n- Tools it lists (81, about 33,410 tokens of context, `tools/list` without credentials over MCP 2026-07-28, checked 2026-10-04 22:21 UTC):\n  - `create_public_preview` (writes): Turn a complete standalone HTML document already created in this chat into a temporary, read-only 2ools preview. Free and authless; expires after 24 hours.…\n  - `list_build_systems` (read-only): List creative systems created by the authenticated account and compatible with an optional output target. Built-in 2ools skills, routing, prompts, and…\n  - `list_connected_engines` (read-only): List privacy-minimized connected 2ools Engines for exact native dispatch. Returns opaque Engine identity, a redacted machine label, online state, authenticated…\n  - `get_project_engine_workspace` (read-only): Read the privacy-safe Engine workspace attached to one project. Returns only opaque Engine/workspace identity, safe display metadata, live readiness, and a…\n  - `attach_project_engine_workspace` (writes): Owner-authorized attachment of one saved project to one exact opaque workspace on one exact online 2ools Engine. This grants future project work access to real…\n  - `register_existing_project` (writes): Create one durable Project OS record for a local or external project that list_projects did not match. When the canonical project ID is already known, pass…\n  - `build_from_conversation` (writes): Create a new 2ools project from a structured conversation brief and queue one durable build. Returns project_id and job_id; use get_build to retrieve…\n  - `start_project_on_engine` (writes): Create one new 2ools project and queue its first build on one exact connected Engine and provider selected by the person. Fails before project creation or…\n  - `refine_project` (writes): Create one protected child version from a saved base version and concrete review feedback. Preserves the base source as currentCode, consumes one persisted…\n  - `get_build` (read-only): Get one build's current status, progress, errors, completed version IDs, and protected preview URLs. Does not return generated source code.\n  - `get_engine_dispatch` (read-only): Read the authoritative state of one exact Engine dispatch. Queued means accepted but not started; running appears only after the selected Engine atomically…\n  - `compare_versions` (read-only): Compare two saved versions in one project without returning source. Reports lineage, review state, page additions/removals, byte sizes, and SHA-256 identity…\n  - `list_approval_requests` (read-only): List exact saved versions waiting for a separately delegated reviewer. Returns project/version identity and attribution, never generated source.\n  - `approve_version` (writes): Use separately delegated review authority to approve one saved version and make it the project's active version. Does not publish, export, or change project…\n  - `reject_version` (writes): Use separately delegated review authority to reject one saved version. If it is active, restores its saved parent as active; the rejected version remains in…\n  - `cancel_build` (writes): Cancel one exact queued or running non-Agent 2ools build after named explicit confirmation. Repeating the same cancellation is safe, late Engine results are…\n  - `get_account_profile` (read-only): Read the authenticated person's 2ools profile, current account labels, and server-derived effective MCP scopes. Passwords, private credentials, billing…\n  - `update_account_profile` (writes): Update only the explicitly supplied profile fields for the authenticated person. This cannot change email, password, MFA, billing, entitlements, roles, or…\n  - `get_project_access` (read-only): Read the authenticated person's role plus the canonical project owner, members, and pending invitations. Non-managers can read active members but never receive…\n  - `invite_project_member` (writes): Invite an existing 2ools username or an email address to one owned project as a collaborator or viewer. New-account claim tokens are emailed by 2ools and are…\n  - `update_project_member_role` (writes): Change one exact member to collaborator or viewer, or transfer ownership. Requires explicit confirmation because demotion cancels that member's active builds…\n  - `remove_project_member` (writes): Remove one exact member's project access after explicit confirmation. Their account and authored history stay; active project builds are canceled and armed…\n  - `revoke_project_invite` (writes): Revoke one exact pending project invitation after explicit confirmation. The person can no longer accept that invitation; project history remains auditable.\n  - `list_projects` (read-only): Open the native Project OS entry point and list recent 2ools projects the authenticated account can access. The app automatically continues the only saved…\n  - `get_project` (read-only): Get a 2ools project's brief, selected pages, active version, and compact version history. Does not return generated source code.\n  - `get_project_context` (read-only): Read one source-free operating packet: active version metadata, the latest explicitly selected observed project input, review attention, artifact index, work…\n  - `continue_project` (read-only): Return one project's current Living Plan, next useful move, continuity-readiness gaps, latest evidence, and a compact 2ools-active receipt. Opens a compact…\n  - `refresh_project_cockpit` (read-only): Refresh the bounded project state shown inside an already-open 2ools MCP App. This app-only read does not start work, import files, or change the project.\n  - `activate_project` (writes): Record the person's one-time choice to use this already-connected 2ools client with one exact saved project. Call only after the person approves in the inline…\n  - `get_project_mission` (read-only): Return a bounded canonical Project Mission view, active Goal Contract, server-derived health, role capabilities, or a paginated goals, templates, scope-change,…\n  - `get_project_intelligence` (read-only): Return the versioned frontier-product research dossier, six parallel lane states, evidence ledger, saturation audits, falsification, concepts, ranked outputs,…\n  - `update_project_intelligence` (writes): Initialize or append one immutable, validated dossier revision. The complete snapshot must cite material claims, preserve unknowns, finish or explicitly block…\n  - `get_project_discipline` (read-only): Return derived direction, trade-off, evidence, and continuity status with active decisions, eval evidence, verifier definitions, and explicit permission…\n  - `list_project_engineering_decisions` (read-only): List native-safe engineering decisions for one exact project, including the canonical project revision, category, risk, question, rationale, tradeoffs,…\n  - `answer_project_engineering_decision` (writes): Accept or reject one exact native-safe engineering decision at one exact project revision. Requires an explicit confirmation and durable note, enforces project…\n  - `manage_project_discipline` (writes): Propose a project trade-off, version an eval case or verifier definition, or attach an eval/verifier receipt to exact work. Agents may propose decisions but…\n  - `update_project_mission` (writes): Create or revise Mission and Goal contracts, explicitly transition or reorder goals, or propose a scope change. Server role, revision, conflict, and safety…\n  - `review_project_mission` (writes): Restore an immutable Mission or Goal revision, decide a proposed scope change, or submit proof-based goal completion review. Completion and high-risk authority…\n  - `manage_work_watchdog` (writes): Pause, park, resume, or reprioritize one durable task, or deliberately configure the project Watchdog. This never answers for the user, approves a risky…\n  - `act_on_project_os_task` (writes): App-only route for an authenticated person's explicit click in the native Project OS panel. Hidden from the model; every action is revision checked and…\n  - `update_living_plan` (writes): Add, edit, move, or reorder open Living Plan items from the current conversation, then return the refreshed inline plan and timeline panel. This cannot mark…\n  - `render_project_preview` (read-only): Render an interactive, read-only card for one saved 2ools version. Use after get_build or get_project when the user wants to see, open, or share the result.…\n  - `list_project_agents` (read-only): List the authorizing account's built-in Agents assigned to one readable project. This reveals status and summary, not full Limits or run traces.\n  - `get_agent` (read-only): Read one Agent's saved Limits, trigger, immutable revision summaries, and redacted append-only run traces. Raw prompts, tool arguments, credentials, and source…\n  - `run_project_agent` (writes): Queue real execution for a project-linked Agent the person already test-ran and armed. The immutable saved Limits, project access, account fuse, and online…\n  - `get_project_agent_mode` (read-only): Read the project-level autonomous coordination state derived from the canonical Living Plan, governed Agent, and exact Engine destination. Returns progress,…\n  - `configure_project_agent_mode` (writes): Turn the selected project's governed Agent Mode on or off. When enabled, the person chooses one armed project Agent, one exact Engine, and one provider; only…\n  - `advance_project_agent_mode` (writes): Idempotently re-evaluate and, when safe, queue the next dependency-ready safe-auto plan step on the project's already approved Agent, Engine, and provider.…\n  - `dispatch_project_work` (writes): Reserve one exact revision-checked Project OS task for one armed project Agent, then queue it on one exact online Engine and authenticated provider selected by…\n  - `get_project_work_dispatch` (read-only): Read the authoritative queued, claimed, running, approval-paused, or terminal state of one exact governed Project OS task dispatch. Returns bounded progress…\n  - `cancel_agent_run` (writes): Stop one queued or running Agent execution and close its durable run history. Completed, failed, stalled, and already-canceled runs keep their terminal truth.\n  - `get_project_activity` (read-only): Read the attributable project timeline across human work, external MCP agents, builds, versions, feedback, and workspace pins. Actor kind is explicit; an…\n  - `wait_for_project_activity` (read-only): Wait up to 20 seconds for attributable project events newer than a head_cursor or prior next_cursor. Returns events oldest-first so an outside agent can…\n  - `list_project_feedback` (read-only): Read page-anchored review feedback for versions in a project, with explicit human or external-agent attribution.\n  - `add_project_feedback` (writes): Add an attributable review comment to a saved project version. This does not modify source or approve the version.\n  - `resolve_project_feedback` (writes): Owner-only review decision that resolves or reopens one saved feedback item.\n  - `list_project_pins` (read-only): Read shared workspace notes and http(s) links, with explicit attribution.\n  - `add_project_pin` (writes): Add an attributable note or safe http(s) link to the shared project workspace.\n  - `remove_project_pin` (writes): Remove one shared workspace pin. The operation is idempotent.\n  - `prepare_version_export` (read-only): Create a five-minute download URL for an exact saved version. Source is delivered by the download route, never embedded in MCP model output.\n  - `get_version_share_link` (read-only): Read the durable sharing state and current URL for one exact saved version. Disabled shares return no URL.\n  - `create_version_share_link` (writes): Create or recover a durable public or code-protected link for one exact saved version. Reusing the idempotency key returns the original result.\n  - `revoke_version_share_link` (writes): Disable every existing public or code-protected URL for one exact saved version. Re-publishing a protected link rotates its code.\n  - `list_artifacts` (read-only): List durable project artifacts and each latest immutable version without returning stored bytes.\n  - `get_artifact` (read-only): Read one artifact's immutable version history, provenance, attribution, digests, and review states without returning stored bytes.\n  - `prepare_artifact_upload` (writes): Create a five-minute PUT URL for exact bytes. External-agent output always enters pending review and never replaces the current artifact version before…\n  - `prepare_artifact_download` (read-only): Create a five-minute download URL for one immutable artifact version. Stored bytes never enter MCP model output.\n  - `list_artifact_approval_requests` (read-only): List exact artifact versions awaiting or carrying a human review decision. Requires separately delegated artifact review authority.\n  - `approve_artifact_version` (writes): Approve one pending immutable artifact version and make it current. Repeating the same decision is idempotent.\n  - `reject_artifact_version` (writes): Reject one pending immutable artifact version with useful feedback. Repeating the same decision is idempotent.\n  - `get_task_quality_gate` (read-only): Return the current task-bound Quality Gate policy, freshness, deterministic check receipt, and attached findings. A pass never replaces required human visual…\n  - `run_task_quality_gate` (writes): Start checks against exact task/artifact/environment fingerprints, or submit every configured check with same-project evidence and explicit findings. Missing…\n  - `get_work_handoff` (read-only): Return the current immutable context-handoff receipt, exact task lineage, and honestly labeled worker-reported or 2ools-forecast context signal.\n  - `prepare_work_handoff` (writes): Checkpoint one owned session into an immutable, exactly-once successor envelope. Estimated signals are labeled as estimates; questions and possibly committed…\n  - `list_work_assignments` (read-only): List durable project work contracts, bounded attempts, leases, budgets, and result references.\n  - `create_work_assignment` (writes): Create a durable assignment with acceptance criteria and hard step, time, and spend ceilings.\n  - `claim_work_assignment` (writes): Atomically claim one open assignment and receive a five-minute renewable lease plus an immutable budget snapshot.\n  - `heartbeat_work_session` (writes): Renew the authenticated worker's active lease without widening its immutable step, time, or spend ceilings.\n  - `checkpoint_work_session` (writes): End the current lease with a compact continuation checkpoint, or place work in an explicit waiting or blocked state. Ambiguous external effects always wait for…\n  - `submit_work_session` (writes): End the authenticated worker's lease and submit typed result references for a separate review decision.\n  - `decide_work_assignment` (writes): Complete submitted work or reopen it with useful feedback. Requires separately delegated work-review authority.\n- How its tools read to an agent (0 errors, 50 warnings, 1 note, about 33,410 tokens; rules at https://www.anchorterminal.com/check.md; not part of the score):\n  - warn TC11 act_on_project_os_task: none of its 2 parameters has a description\n  - warn TC11 add_project_feedback: 5 parameters without a description: comment, label, page, project_id, version_id\n  - warn TC11 add_project_pin: 8 parameters without a description: kind, label, project_id, surface, url, version_id and 2 more\n  - warn TC11 answer_project_engineering_decision: 6 parameters without a description: answer, decision_id, expected_revision, idempotency_key, project_id, supersedes_id\n  - warn TC11 approve_artifact_version: none of its 2 parameters has a description\n  - warn TC11 checkpoint_work_session: none of its 13 parameters has a description\n  - warn TC11 claim_work_assignment: none of its 3 parameters has a description\n  - warn TC11 continue_project: 1 parameter without a description: response_format\n  - warn TC11 create_version_share_link: none of its 5 parameters has a description\n  - warn TC11 create_work_assignment: none of its 17 parameters has a description\n  - warn TC11 decide_work_assignment: none of its 4 parameters has a description\n  - warn TC11 get_artifact: none of its 2 parameters has a description\n  - warn TC11 get_project_access: its one parameter, project_id, has no description\n  - warn TC11 get_project_discipline: its one parameter, project_id, has no description\n  - warn TC11 get_project_intelligence: its one parameter, project_id, has no description\n  - warn TC11 get_project_mission: none of its 4 parameters has a description\n  - warn TC11 get_task_quality_gate: its one parameter, assignment_id, has no description\n  - warn TC11 get_version_share_link: none of its 3 parameters has a description\n  - warn TC11 get_work_handoff: its one parameter, assignment_id, has no description\n  - warn TC11 heartbeat_work_session: none of its 15 parameters has a description\n  - warn TC11 invite_project_member: 2 parameters without a description: project_id, role\n  - warn TC11 list_artifact_approval_requests: none of its 2 parameters has a description\n  - warn TC11 list_artifacts: its one parameter, project_id, has no description\n  - warn TC11 list_project_engineering_decisions: none of its 3 parameters has a description\n\n- JSON: https://www.anchorterminal.com/api/v1/tools/2ools-mcp.json\n- Being indexed says nothing about quality, and nobody can pay for it. Ask for a review: https://www.anchorterminal.com/builders/#claiming\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Terminal",
        "url": "https://www.anchorterminal.com/tools/"
      },
      {
        "name": "Indexed",
        "url": "https://www.anchorterminal.com/indexed/"
      },
      {
        "name": "2ools",
        "url": ""
      }
    ],
    "description": "2ools, an MCP server by 2ools.app, listed from the official MCP registry. Indexed, not reviewed: facts and our own checks, no score or ranking. Build, version, review, and export websites, web apps, and games from a conversation.",
    "facts": [
      "not reviewed",
      "not ranked",
      "facts only"
    ],
    "h1": "2ools",
    "image": "https://www.anchorterminal.com/assets/og/indexed.png",
    "path": "/tools/2ools-mcp",
    "published": "",
    "section": "indexed",
    "title": "2ools: MCP server, indexed from the official MCP registry",
    "toc": null,
    "updated": "2026-10-04",
    "url": "https://www.anchorterminal.com/tools/2ools-mcp"
  },
  "tokens": {
    "markdown": 4750,
    "slim": 4680
  },
  "version": 1
}
