{"serverId":"mcp-registry/com.aidesignblueprint/blueprint","tools":[{"name":"architect.certify","fixed":{"name":"architect_certify","description":"Pro/Teams: second-pass adversarial certification of an architect.validate run that scored production_ready (A or B first-pass tier). ON CLIENT TIMEOUT: DO NOT RETRY THIS TOOL. **RECOVERY FIRST**: the run_id is emitted in the FIRST notifications/progress event at t=0s (BEFORE the LLM call begins). Capture it. On timeout, call `me.validation_history(run_id='<that-id>')` to fetch the persisted cert verdict; the server-side run completes independently within a 6-minute budget. This is the canonical ","inputSchema":{"type":"object","title":"architect_certify_runArguments","required":["run_id"],"properties":{"code":{"type":"string","title":"Code","default":"","description":"The same code that was sent to architect.validate to produce this run_id. Sent verbatim: the cert reviewer needs the actual code to surface production_blockers the first pass missed. May be omitted (empty string) when the prior validate stored the code under the 24h cert-retry hold; in that case the server reuses the stored code automatically. Handled as the tool description states: sent to OpenAI (US) for the check (no-training) and persisted at OpenAI, JSON-escaped and delimited as inert data."},"run_id":{"type":"string","title":"Run Id","description":"The run_id from a prior architect.validate call. Returned in the validate response when persistence_status='saved'. Must be owned by the caller (per-user authorisation, same gate as me.validation_history)."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false},"title":"Certify Production-Ready Architecture"},"changes":[{"kind":"name","detail":"Renamed \"architect.certify\" → \"architect_certify\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":415,"tokensAfter":415},{"name":"architect.validate","fixed":{"name":"architect_validate","description":"Pro/Teams: first-pass doctrine review of agentic code/workflow against the 10-principle AI Design Blueprint doctrine. ON CLIENT TIMEOUT: DO NOT RETRY THIS TOOL. Long-running LLM call (60-180s typical); MCP clients commonly close the call before the server returns. Retrying re-runs the 60-180s LLM call from scratch and burns compute. RECOVERY: the run_id is emitted in the FIRST notifications/progress event at t=0s (before the LLM call begins), capture it. On timeout, call `me.validation_history(r","inputSchema":{"type":"object","title":"validate_agent_architectureArguments","required":["implementation_context"],"properties":{"task":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task","default":null,"description":"What the agent or workflow is trying to accomplish. Adds evaluation context."},"files":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Files","default":null,"description":"List of file paths relevant to the implementation context."},"goals":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Goals","default":null,"description":"Specific safety or quality goals to evaluate against (e.g. 'prevent irreversible actions', 'explicit approvals')."},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","default":null,"description":"Programming language of the code being evaluated (e.g. 'python', 'typescript')."},"focus_area":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Focus Area","default":null,"description":"Narrow the evaluation to a specific principle cluster or slug (e.g. 'delegation', 'visibility', 'establish-trust-through-inspectability')."},"repository":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository","default":null,"description":"Iteration key. SAME value across calls auto-resolves the most recent prior run as `prior_run_baseline` for iteration-aware grading (per-principle severity deltas, regressions/improvements). CHANGING the value (even subtly with an `iter-2` suffix) silently severs the chain and yields a fresh blind first-shot. Round numbering belongs in `task`, not here. Empirical evidence of why anchoring matters: PR #157 iter1 33/F vs iter2 100/A on byte-identical baseline-race primitives (+67 spread); invoice-payment-manager #158 38/F vs #159 74/C (+36 spread), same code, score variance from non-deterministic LLM at reasoning_effort=high; the baseline anchor collapses this onto a stable arc."},"session_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Session Id","default":null,"description":"Optional Governed Session to attach this run to (GEP-M2). Must reference a session YOU own (list via me.sessions; sessions are created in the web app at /app/sessions): foreign ids are refused before any model call. The run then appears on the session's timeline alongside the other lenses. With private_session=true no run is stored so nothing attaches, but the ownership check still runs FIRST: a session id you don't own fails the call either way."},"example_limit":{"type":"integer","title":"Example Limit","default":3,"minimum":1,"description":"Maximum number of curated examples to include in recommendations."},"private_session":{"type":"boolean","title":"Private Session","default":false,"description":"Set to true to skip the stored run AND prior-run anchoring AND run_id recovery for this call. Operational security and cost logs are still kept, per the Privacy Policy. The request is also not persisted in the model provider's response store; the provider's abuse-monitoring retention still applies. Use for private one-shots that don't participate in the iteration arc. Default false."},"implementation_context":{"type":"string","title":"Implementation Context","description":"The artifact under review. SEND FULL FILE CONTENTS VERBATIM: the architect cites per-line evidence (identifiers, branch ordering, structural choices); any compression destroys evidence and produces hallucinated findings on code that isn't there. CONCRETE DON'TS: do NOT replace docstrings/comments with `...`; do NOT condense multi-line statements; do NOT replace dict/set comprehensions with `{...}`; do NOT remove explanatory comments to save tokens. If the file is large, split into MULTIPLE architect.validate calls scoped by file/module: never truncate one call. Architecture summaries (high-level prose) accepted ONLY for greenfield (no code yet); never as a substitute for code that already exists."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false},"title":"Validate Agent Architecture"},"changes":[{"kind":"name","detail":"Renamed \"architect.validate\" → \"architect_validate\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":1256,"tokensAfter":1256},{"name":"architect.validate_consensus","fixed":{"name":"architect_validate_consensus","description":"Pro/Teams: N-shot CONSENSUS doctrine review of agentic code. ON CLIENT TIMEOUT: DO NOT RETRY THIS TOOL. Long-running (~80-120s for N=3 parallel LLM calls); MCP clients often close the call before the server returns. Retrying re-runs N × 60-180s LLM calls from scratch and burns N× compute. RECOVERY: same heartbeat pattern as architect.validate, the run_id is emitted in the FIRST progress event at t=0s (before LLM children fire); on timeout, call `me.validation_history(run_id='<that-id>')` to fetc","inputSchema":{"type":"object","title":"validate_consensus_agent_architectureArguments","required":["implementation_context"],"properties":{"n":{"type":"integer","title":"N","default":3,"maximum":10,"minimum":2,"description":"Number of parallel child runs. Default 3 (the variance signal is visible at N=3; cost = 3× LLM bill). Capped server-side by Settings.consensus_n_max (default 5)."},"task":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task","default":null,"description":"What the agent or workflow is trying to accomplish."},"files":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Files","default":null,"description":"List of file paths relevant to the implementation."},"goals":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Goals","default":null,"description":"Specific safety or quality goals to evaluate against."},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","default":null,"description":"Programming language of the code (e.g. 'python')."},"focus_area":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Focus Area","default":null,"description":"Optional: narrow the review to a principle cluster or slug."},"repository":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository","default":null,"description":"Iteration key. Consensus children all run unanchored (`private_session=True`), but the consolidated row IS persisted under this key: discoverable as prior baseline for the next single-shot `architect.validate`. Same value across calls keeps the iteration arc inspectable."},"example_limit":{"type":"integer","title":"Example Limit","default":3,"minimum":1,"description":"Max curated examples per child run."},"implementation_context":{"type":"string","title":"Implementation Context","description":"The artifact under review. SEND FULL FILE CONTENTS VERBATIM: same constraint as architect.validate. Truncation produces hallucinated findings on code that isn't there."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false},"title":"Validate Agent Architecture (Consensus Mode)"},"changes":[{"kind":"name","detail":"Renamed \"architect.validate_consensus\" → \"architect_validate_consensus\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":712,"tokensAfter":712},{"name":"assets.list","fixed":{"name":"assets_list","description":"Public: list downloadable doctrine and agent asset artifacts (skill packs, rule packs, MCP setup snippets) the user can drop into their AI coding tool to import the Blueprint as native skill/rule files. Returns a list of assets with name, format (one of: zip / md / markdown / mdc / json / toml / text, the full vocabulary), pack_version, download_url, and platform target (Claude Code, Cursor, Codex, Gemini, Qwen). The response also carries `count` (length of `assets`) for symmetry with principles","inputSchema":{"type":"object","title":"list_agent_assetsArguments","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List Agent Assets"},"changes":[{"kind":"name","detail":"Renamed \"assets.list\" → \"assets_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":174,"tokensAfter":174},{"name":"clusters.get","fixed":{"name":"clusters_get","description":"Get one principle cluster by stable slug. Returns the cluster definition, shared rationale, and the full set of member principles (slug + title) so the caller can pivot into principles.get without a second list call. WHEN TO CALL: the user has already named a specific cluster (e.g. 'delegation', 'visibility', 'trust', 'orchestration') OR you have a slug from a prior clusters.list / principles.list response and need its full definition + member principles. The response embeds member principle slu","inputSchema":{"type":"object","title":"get_clusterArguments","required":["slug"],"properties":{"slug":{"type":"string","title":"Slug","description":"Stable slug of the principle cluster (e.g. 'delegation', 'visibility', 'trust', 'orchestration')."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Get Cluster"},"changes":[{"kind":"name","detail":"Renamed \"clusters.get\" → \"clusters_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":220,"tokensAfter":220},{"name":"clusters.list","fixed":{"name":"clusters_list","description":"List all principle clusters with their stable slugs and linked principle titles. Use this to discover which clusters exist before drilling in with clusters.get or filtering principles.list by cluster. Prefer clusters.get when you already know the cluster slug and need full detail.","inputSchema":{"type":"object","title":"list_clustersArguments","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List Clusters"},"changes":[{"kind":"name","detail":"Renamed \"clusters.list\" → \"clusters_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":112,"tokensAfter":112},{"name":"design.validate","fixed":{"name":"design_validate","description":"Pro/Teams: first-pass surface-craft review of a FRONTEND artefact (component, screen, or flow) against the 8 laws of the Experience Design Blueprint. The surface-craft companion to architect.validate: where architect.validate scores agentic ARCHITECTURE against the 10 agentic principles, design.validate scores the PERCEPTIBLE SURFACE, what the user sees, taps, scans, and remembers (Jakob's familiarity, Hick's choice load, Fitts's targets + the accessibility floor, Miller's working-memory budget,","inputSchema":{"type":"object","title":"validate_experience_designArguments","required":["implementation_context"],"properties":{"task":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task","default":null,"description":"What this surface is for (e.g. 'the closed-beta apply form'). Adds evaluation context."},"files":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Files","default":null,"description":"File paths relevant to the artefact, for context."},"goals":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Goals","default":null,"description":"Specific craft/UX goals to weight (e.g. 'WCAG 2.2 AA', 'one primary action per screen')."},"repository":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository","default":null,"description":"Project/repository key. Groups this run with prior design.validate runs on the same project in your validation-history dashboard (the same grouping architect.validate uses), under the 'surface' dimension."},"session_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Session Id","default":null,"description":"Optional Governed Session to attach this run to (GEP-M2). Must reference a session YOU own (list via me.sessions; sessions are created in the web app at /app/sessions): foreign ids are refused before any model call. The run then appears on the session's timeline alongside the other lenses. With private_session=true no run is stored so nothing attaches, but the ownership check still runs FIRST: a session id you don't own fails the call either way."},"private_session":{"type":"boolean","title":"Private Session","default":false,"description":"Set true to skip the stored run AND run_id recovery (operational security and cost logs are still written) for this call (a private one-shot that does not appear in the dashboard). The request is also not persisted in the model provider's response store; the provider's abuse-monitoring retention still applies. Default false."},"implementation_context":{"type":"string","title":"Implementation Context","description":"The frontend artefact under review. SEND FULL SOURCE VERBATIM: the reviewer cites specific elements, values, and structure; any compression destroys evidence and produces findings on code that isn't there. Do NOT replace markup/styles with '…'; do NOT condense multi-line JSX/CSS. If large, split into MULTIPLE calls scoped by component: never truncate one call."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false},"title":"Validate Experience Design"},"changes":[{"kind":"name","detail":"Renamed \"design.validate\" → \"design_validate\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":836,"tokensAfter":836},{"name":"examples.get","fixed":{"name":"examples_get","description":"Get one curated example by stable slug. Returns title, summary, source-code links, principle coverage (the principle slugs the example demonstrates), difficulty, library/framework, and implementation notes. Use this when you already have the slug from examples.search, a principles.get response, or a guide cross-link; prefer examples.search when filtering by topic / principle / difficulty / library; prefer guides.get when the caller wants a full walkthrough rather than a single reference example.","inputSchema":{"type":"object","title":"get_exampleArguments","required":["slug"],"properties":{"slug":{"type":"string","title":"Slug","description":"Stable slug of the curated example (e.g. 'agents-building-blocks-5-control')."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Get Example"},"changes":[{"kind":"name","detail":"Renamed \"examples.get\" → \"examples_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":215,"tokensAfter":215},{"name":"examples.search","fixed":{"name":"examples_search","description":"Search curated examples by free-text query, ranked by relevance, with optional filters: principle_ids (only examples covering those principles), difficulty (beginner/intermediate/advanced), library (e.g. 'langgraph', 'openai'). Returns each match's slug, title, summary, principle coverage, difficulty, library, and source-code link: slug is the handle examples.get hydrates. Default limit 5, capped server-side. Use this when the user describes a use case, technique, or library and wants matching e","inputSchema":{"type":"object","title":"search_examplesArguments","required":["query"],"properties":{"limit":{"type":"integer","title":"Limit","default":5,"minimum":1,"description":"Maximum number of results to return. Capped at server maximum."},"query":{"type":"string","title":"Query","description":"Free-text search query matched against example title, summary, and metadata."},"library":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Library","default":null,"description":"Filter by library or framework name (e.g. 'langgraph', 'openai', 'anthropic')."},"difficulty":{"anyOf":[{"enum":["beginner","intermediate","advanced"],"type":"string"},{"type":"null"}],"title":"Difficulty","default":null,"description":"Filter by difficulty level."},"principle_ids":{"anyOf":[{"type":"array","items":{"type":"integer"}},{"type":"null"}],"title":"Principle Ids","default":null,"description":"Filter to examples that cover these principle IDs."},"pattern_family":{"anyOf":[{"enum":["tools-actions","reasoning-reflection","retrieval","memory","sampling-search","multi-agent","safety-routing","specialty"],"type":"string"},{"type":"null"}],"title":"Pattern Family","default":null,"description":"Filter to one agentic-pattern family. Implies patterns only, since no upstream cookbook example carries a family."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Search Examples"},"changes":[{"kind":"name","detail":"Renamed \"examples.search\" → \"examples_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":515,"tokensAfter":515},{"name":"guides.get","fixed":{"name":"guides_get","description":"Get a full application guide by its stable slug (e.g. 'security-application', 'observable-evaluation'). Returns sections, action items, and linked principles. Use this when you already have the guide slug from guides.list or guides.search. Prefer guides.search when the user describes a topic in natural language; prefer guides.list when you need the full inventory.","inputSchema":{"type":"object","title":"get_application_guideArguments","required":["slug"],"properties":{"slug":{"type":"string","title":"Slug","description":"Stable slug of the application guide (e.g. 'security-application', 'observable-evaluation')."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Get Application Guide"},"changes":[{"kind":"name","detail":"Renamed \"guides.get\" → \"guides_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":184,"tokensAfter":184},{"name":"guides.list","fixed":{"name":"guides_list","description":"List application guides that show how Blueprint principles apply to engineering challenges (security, evaluation, observability, etc.). Use this to discover which guides exist before drilling in. Prefer guides.search when the user describes a topic or failure mode in natural language. Prefer guides.get when you already know the guide slug and need full detail.","inputSchema":{"type":"object","title":"list_application_guidesArguments","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List Application Guides"},"changes":[{"kind":"name","detail":"Renamed \"guides.list\" → \"guides_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"guides.search","fixed":{"name":"guides_search","description":"Search application guides by free-text query, matched against section answers and action items. Use this when the user describes an engineering challenge (security review, evaluation harness, observability) and wants matching guides. Prefer guides.get when you already have the guide slug; prefer guides.list when you need the full inventory.","inputSchema":{"type":"object","title":"search_application_guidesArguments","required":["query"],"properties":{"limit":{"type":"integer","title":"Limit","default":5,"minimum":1,"description":"Maximum number of results to return. Capped at server maximum."},"query":{"type":"string","title":"Query","description":"Free-text search query matched against all guide content including section answers and action items."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Search Application Guides"},"changes":[{"kind":"name","detail":"Renamed \"guides.search\" → \"guides_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":223,"tokensAfter":223},{"name":"handoffs.agency","fixed":{"name":"handoffs_agency","description":"Authenticated: submit an agency engagement enquiry on behalf of the caller for a founder-led discovery call. Persists an AgencyHandoff row routed to the agency inbox; the user is contacted by the team for a scoped proposal. Engagement scopes: workflow sprint (rapid agentic workflow implementation), proof-of-concept (validate a specific agent design in a bounded timeframe), pilot support (co-design and validate a production-ready pilot), advisory (ongoing architectural guidance across a product t","inputSchema":{"type":"object","title":"request_agency_handoffArguments","required":["reason"],"properties":{"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role","default":null,"description":"Role or title of the person submitting the agency inquiry."},"locale":{"enum":["en","it"],"type":"string","title":"Locale","default":"en","description":"Response locale for the acknowledgment."},"reason":{"type":"string","title":"Reason","description":"Description of the engagement need: workflow sprint, proof-of-concept, pilot support, or advisory."},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company","default":null,"description":"Company or team name submitting the agency inquiry."},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website","default":null,"description":"Website or relevant URL for the team or project."},"agent_name":{"type":"string","title":"Agent Name","default":"mcp-client","description":"Name of the agent or client triggering the handoff."},"support_type":{"anyOf":[{"enum":["sprint","poc","pilot","advisory"],"type":"string"},{"type":"null"}],"title":"Support Type","default":null,"description":"Type of support needed."},"trace_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trace Summary","default":null,"description":"Optional agent trace summary for operator context."},"agent_platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Platform","default":null,"description":"Platform or runtime the agent is running on."},"workflow_stage":{"anyOf":[{"enum":["exploring","designing","implementing","reviewing","shipping"],"type":"string"},{"type":"null"}],"title":"Workflow Stage","default":null,"description":"Current workflow stage."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false},"title":"Request Agency Handoff"},"changes":[{"kind":"name","detail":"Renamed \"handoffs.agency\" → \"handoffs_agency\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":636,"tokensAfter":636},{"name":"handoffs.operator","fixed":{"name":"handoffs_operator","description":"Authenticated: creates a support handoff record when an agent needs human review, account-specific escalation, or operator follow-up that cannot be resolved with the read-only doctrine tools. Persists a SupportHandoff row (reason, topic, page_url, agent_name, agent_platform, trace_summary, user_email) routed to the support inbox; user is contacted by the team. WHEN TO CALL: user explicitly asks for human help, hits a billing/access issue, or the agent has tried the doctrine tools and the user st","inputSchema":{"type":"object","title":"request_operator_handoffArguments","required":["reason"],"properties":{"topic":{"type":"string","title":"Topic","default":"agent","description":"Topic category for routing (e.g. 'agent', 'billing', 'access', 'general')."},"locale":{"enum":["en","it"],"type":"string","title":"Locale","default":"en","description":"Response locale for the handoff acknowledgment."},"reason":{"type":"string","title":"Reason","description":"Clear description of why a human operator review is needed."},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url","default":null,"description":"URL of the page or context where the handoff was triggered."},"agent_name":{"type":"string","title":"Agent Name","default":"mcp-client","description":"Name of the agent or client triggering the handoff."},"trace_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trace Summary","default":null,"description":"Optional summary of the agent's recent actions or trace for operator context."},"agent_platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Platform","default":null,"description":"Platform or runtime the agent is running on (e.g. 'claude-code', 'cursor', 'copilot')."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false},"title":"Request Operator Handoff"},"changes":[{"kind":"name","detail":"Renamed \"handoffs.operator\" → \"handoffs_operator\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":495,"tokensAfter":495},{"name":"handoffs.partnership","fixed":{"name":"handoffs_partnership","description":"Authenticated: creates a partnerships handoff record for design-partner, ecosystem, training, or advisory conversations needing human review. Persists a PartnershipHandoff row routed to the partnerships inbox; the user is contacted by the team. WHEN TO CALL: user explicitly wants to engage as a design partner, co-marketing/training partner, or evaluate the Blueprint for their org's training programme. ALWAYS confirm with the user before firing: this creates a human-visible partnerships ticket. W","inputSchema":{"type":"object","title":"request_partnership_handoffArguments","required":["reason"],"properties":{"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role","default":null,"description":"Role or title of the person submitting the partnership inquiry."},"topic":{"enum":["ecosystem","design-partner","training","advisory"],"type":"string","title":"Topic","default":"ecosystem","description":"Partnership topic category."},"locale":{"enum":["en","it"],"type":"string","title":"Locale","default":"en","description":"Response locale for the handoff acknowledgment."},"reason":{"type":"string","title":"Reason","description":"Clear description of the partnership opportunity or inquiry."},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website","default":null,"description":"Website of the organization for additional context."},"agent_name":{"type":"string","title":"Agent Name","default":"mcp-client","description":"Name of the agent or client triggering the handoff."},"organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization","default":null,"description":"Name of the organization or company making the partnership inquiry."},"trace_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trace Summary","default":null,"description":"Optional agent trace summary for operator context."},"agent_platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Platform","default":null,"description":"Platform or runtime the agent is running on."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false},"title":"Request Partnership Handoff"},"changes":[{"kind":"name","detail":"Renamed \"handoffs.partnership\" → \"handoffs_partnership\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":576,"tokensAfter":576},{"name":"me.add_evidence","fixed":{"name":"me_add_evidence","description":"Authenticated: append a free-text evidence note to a specific stage in the caller's active course. Notes record concrete implementation observations, decisions, or artefacts that demonstrate progress through a Blueprint principle (e.g. how a delegation boundary was implemented, what approval flow was chosen and why). Persisted as UserStageEvidence rows scoped to (user_id, course_slug, stage_slug). WHEN TO CALL: AFTER the user has articulated something concrete they have built, observed, or decid","inputSchema":{"type":"object","title":"add_evidence_noteArguments","required":["course_slug","stage_id","note"],"properties":{"note":{"type":"string","title":"Note","description":"Evidence note to append to the delegation boundary notes for this stage."},"stage_id":{"type":"string","title":"Stage Id","description":"ID of the stage to append the evidence note to."},"course_slug":{"type":"string","title":"Course Slug","description":"Slug of the course the stage belongs to (e.g. 'agentic-fundamentals')."}}},"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Add Evidence Note"},"changes":[{"kind":"name","detail":"Renamed \"me.add_evidence\" → \"me_add_evidence\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":293,"tokensAfter":293},{"name":"me.await_steer","fixed":{"name":"me_await_steer","description":"Pro/Teams. BLOCK until the session owner posts the next `steer` event to a Governed Session from AIDB Studio, then return it. DELIVERY GUARANTEE: the durable cursor read against the session log is authoritative (at-least-once: a lost response is safely re-issuable with the same cursor, and timed_out is only returned after a final confirming read). The in-between wake-up is a best-effort in-process push: usually sub-second, but a steer is never lost if a wake-up is missed; the confirming read cat","inputSchema":{"type":"object","title":"await_steerArguments","required":["session_id"],"properties":{"timeout_s":{"type":"integer","title":"Timeout S","default":45,"maximum":240,"minimum":5,"description":"Seconds to wait before returning timed_out. Clamped to 5-240, DEFAULT 45: safe under Claude Code's 60-second first-response-byte timer for HTTP servers. Longer waits require the per-server timeout raised in the MCP client config (e.g. \"timeout\": 300000 in .mcp.json)."},"session_id":{"type":"integer","title":"Session Id","description":"The Governed Session to watch. Must be YOURS and have team_agents enabled; list sessions via me.sessions."},"after_event_id":{"type":"integer","title":"After Event Id","default":0,"minimum":0,"description":"Cursor: highest session-event id you have already seen (0 = deliver any existing steer). Pass the value from your previous await_steer result or me.sessions read. Non-destructive at-least-once delivery: re-calling with the same cursor returns the same steers again, so a lost response never loses a steer."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Wait for the Next AIDB Studio Steer (long-poll)"},"changes":[{"kind":"name","detail":"Renamed \"me.await_steer\" → \"me_await_steer\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":446,"tokensAfter":446},{"name":"me.coaching_context","fixed":{"name":"me_coaching_context","description":"Authenticated: returns stages in the caller's active course where recorded evidence is thin relative to the stage's principle requirements. Each thin stage carries the missing principle slugs + a short diagnostic so the caller can suggest the user record concrete evidence. WHEN TO CALL: when the user asks 'what should I work on next' or 'what's weak in my Blueprint progress'; before suggesting which guide/example to consult. Pair with me.add_evidence to close gaps. WHEN NOT TO CALL: to lecture t","inputSchema":{"type":"object","title":"get_my_coaching_contextArguments","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Get My Coaching Context"},"changes":[{"kind":"name","detail":"Renamed \"me.coaching_context\" → \"me_coaching_context\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":178,"tokensAfter":178},{"name":"me.learning_path","fixed":{"name":"me_learning_path","description":"Authenticated: returns the caller's Blueprint learning-path state: current course slug, stage progress, certification status (Foundation, Practitioner, Capstone), Capstone track eligibility flags, and the next recommended stage. WHEN TO CALL: the user asks 'where am I', 'what's next', or 'am I Capstone-eligible'; before suggesting next-step coaching content. WHEN NOT TO CALL: as a heartbeat (state changes only when the user completes a stage); to read another user's progress. BEHAVIOR: read-only","inputSchema":{"type":"object","title":"get_my_learning_pathArguments","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Get My Learning Path"},"changes":[{"kind":"name","detail":"Renamed \"me.learning_path\" → \"me_learning_path\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":176,"tokensAfter":176},{"name":"me.session_event","fixed":{"name":"me_session_event","description":"Pro/Teams: append a TYPED TEAM EVENT to a Governed Session's timeline (GEP-M6). This is how the user's own harness makes trio work inspectable: handoffs between role lenses, pushbacks, plan previews, gates, and acks land as structured events next to the validation runs, so the session reads as a system, not a transcript. CHANNEL PROVENANCE: this MCP channel posts the AGENT-SIDE vocabulary only. `steer` events and actor `human` are AIDB Studio-originated by contract (the owner posts them from the","inputSchema":{"type":"object","title":"post_session_team_eventArguments","required":["session_id","event_type","actor","summary"],"properties":{"actor":{"enum":["pm","engineer","designer","system"],"type":"string","title":"Actor","description":"Who acted: pm | engineer | designer | system (`human` is reserved for AIDB Studio)"},"summary":{"type":"string","title":"Summary","description":"One-to-two sentence event summary (truncated to 500 chars): a decision or transition, not a chat message."},"event_type":{"enum":["handoff","pushback","plan_preview","gate","ack"],"type":"string","title":"Event Type","description":"handoff | pushback | plan_preview | gate | ack (ack = started working on a steer; `steer` itself is AIDB Studio-only and refused on this channel)"},"session_id":{"type":"integer","title":"Session Id","description":"The Governed Session to post to. Must be YOURS and have team_agents enabled; list sessions via me.sessions."}}},"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Post a Team Event to a Governed Session"},"changes":[{"kind":"name","detail":"Renamed \"me.session_event\" → \"me_session_event\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":415,"tokensAfter":415},{"name":"me.sessions","fixed":{"name":"me_sessions","description":"Pro/Teams: list or inspect the authenticated user's Governed Sessions (GEP-M2): durable, owner-scoped containers that group validation runs across lenses (architect.validate → 'architecture', design.validate → 'surface', spec.validate → 'spec') into one timeline for one piece of work. Two modes: (1) No arguments returns every session (id, title, status, repo_url, spec_ref, team_agents, run_count, validators = the lenses seen), newest first. (2) `session_id=<id>` returns that session plus its run","inputSchema":{"type":"object","title":"get_my_sessionsArguments","properties":{"session_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Session Id","default":null,"description":"Session id to inspect (returns the session + its run timeline). Owner-scoped: ids you don't own answer 'Session not found.'. Omit to list all your sessions."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"My Governed Sessions"},"changes":[{"kind":"name","detail":"Renamed \"me.sessions\" → \"me_sessions\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":248,"tokensAfter":248},{"name":"me.validation_history","fixed":{"name":"me_validation_history","description":"Pro/Teams: return the authenticated user's validation run history for all three lenses (architect.validate → validator='architecture', design.validate → validator='surface', spec.validate → validator='spec') with the Blueprint Readiness Score (0-100), letter grade (A-F), and tier (draft, emerging, production_ready). Each run carries a `validator` field naming its lens. Three lookup modes: (1) `run_id=<id>` returns a SINGLE run with the full persisted result_json; use this to RECOVER a result whe","inputSchema":{"type":"object","title":"get_my_validation_historyArguments","properties":{"limit":{"type":"integer","title":"Limit","default":10,"minimum":1,"description":"Maximum number of runs to return when scoped to a single repository. Capped at 50. Ignored when `run_id` is provided."},"run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Id","default":null,"description":"Single-run lookup by run_id (UUID). Returns the persisted result_json verbatim: the same payload architect.validate would have returned if your client hadn't timed out. Use this to recover a result when your MCP tool-call closed before the server returned. Per-run authorisation: returns only runs owned by the calling user."},"repository":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository","default":null,"description":"Repository name or path to scope the history to. Pass the same value you would pass to architect.validate. Omit to get one summary per repository. Mutually exclusive with `run_id`: if both are passed, `run_id` wins."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"My Validation History (architecture + design + spec)"},"changes":[{"kind":"name","detail":"Renamed \"me.validation_history\" → \"me_validation_history\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":444,"tokensAfter":444},{"name":"principles.get","fixed":{"name":"principles_get","description":"Get one doctrine entry by stable slug. The lens selects the doctrine: 'architecture' = one of the 10 agentic principles (default); 'surface' = one of the 8 experience-design laws; 'spec' = one of the 8 spec-quality laws. Returns id, title, cluster, definition, rationale, implications, and risk-if-violated (laws also carry their eponym and validator_questions). Use this when you already have the exact slug from principles.list; prefer principles.search when the user describes a topic or failure m","inputSchema":{"type":"object","title":"get_principleArguments","required":["slug"],"properties":{"lens":{"enum":["architecture","surface","spec"],"type":"string","title":"Lens","default":"architecture","description":"Which public doctrine the slug belongs to: 'architecture' (10 principles, default), 'surface' (8 design laws), or 'spec' (8 spec laws)."},"slug":{"type":"string","title":"Slug","description":"Stable slug of the principle (e.g. 'establish-trust-through-inspectability')."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Get Principle"},"changes":[{"kind":"name","detail":"Renamed \"principles.get\" → \"principles_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":288,"tokensAfter":288},{"name":"principles.list","fixed":{"name":"principles_list","description":"List Blueprint doctrine with stable slugs, titles, and clusters. The lens selects which of the three public doctrines: 'architecture' = the 10 agentic principles (default, the architect.validate rubric); 'surface' = the 8 experience-design laws (the design.validate rubric); 'spec' = the 8 spec-quality laws (the spec.validate rubric). Use this when you need the full inventory or want every entry in one cluster (pass cluster slug to filter). Prefer principles.search when the user describes a topic","inputSchema":{"type":"object","title":"list_principlesArguments","properties":{"lens":{"enum":["architecture","surface","spec"],"type":"string","title":"Lens","default":"architecture","description":"Which public doctrine: 'architecture' = the 10 agentic principles (default), 'surface' = the 8 experience-design laws, 'spec' = the 8 spec-quality laws."},"cluster":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cluster","default":null,"description":"Cluster slug to filter by (e.g. 'delegation', 'visibility', 'trust', 'orchestration'). Omit to return all principles."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"List Principles"},"changes":[{"kind":"name","detail":"Renamed \"principles.list\" → \"principles_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":312,"tokensAfter":312},{"name":"principles.search","fixed":{"name":"principles_search","description":"Search Blueprint principles by free-text query and return the closest matches ranked by relevance. Use this to find principles related to a specific design challenge, failure mode, or keyword (e.g. 'reversibility', 'approval flow', 'delegation boundary'). Returns principle title, cluster, definition, rationale, and implementation heuristics. Prefer this over principles.list when you have a specific topic in mind rather than wanting all principles. The lens picks the doctrine searched: 'architect","inputSchema":{"type":"object","title":"search_principlesArguments","required":["query"],"properties":{"lens":{"enum":["architecture","surface","spec","all"],"type":"string","title":"Lens","default":"architecture","description":"Which public doctrine to search: 'architecture' = the 10 agentic principles (default), 'surface' = the 8 experience-design laws, 'spec' = the 8 spec-quality laws, 'all' = all three."},"limit":{"type":"integer","title":"Limit","default":5,"minimum":1,"description":"Maximum number of results to return. Capped at server maximum."},"query":{"type":"string","title":"Query","description":"Free-text search query matched against principle title, definition, rationale, and cluster."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Search Principles"},"changes":[{"kind":"name","detail":"Renamed \"principles.search\" → \"principles_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":349,"tokensAfter":349},{"name":"signals.feedback","fixed":{"name":"signals_feedback","description":"Public: records explicit free-text user feedback about the Blueprint, this tool surface, or a specific principle/example. Captures category (bug, doctrine_critique, missing_example, ergonomics, other), free-text body, and optional contact_email when permission_to_follow_up is true. WHEN TO CALL: ONLY when the user explicitly says they want to give feedback (e.g. 'can you log this as feedback', 'file this critique', 'send a bug report'). Use signals.report instead for value-moment metrics (rating","inputSchema":{"type":"object","title":"submit_feedbackArguments","properties":{"surface":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Surface","default":null,"description":"Which Blueprint surface the feedback is about. Use 'mcp' if the session was via Claude Code or another MCP client. Use 'principles', 'examples', 'guides', 'coaching', or 'validation' based on what the user interacted with."},"task_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task Type","default":null,"description":"What the user was doing when they decided to give feedback. Use plain English: e.g. 'code-review', 'architecture-design', 'agent-setup', 'onboarding', 'validation'. Infer from context."},"what_helped":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"What Helped","default":null,"description":"Ask the user: 'What was most helpful?' Record their answer verbatim or paraphrased in plain English. Max 1000 chars. No code snippets, no proprietary content."},"what_missing":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"What Missing","default":null,"description":"Ask the user: 'What was missing or could be improved?' Record their answer verbatim or paraphrased. Max 1000 chars."},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email","default":null,"description":"Only ask for this if the user explicitly says they want a follow-up response. Never prompt for email unprompted. Only stored when permission_to_follow_up=true."},"rating_clarity":{"anyOf":[{"type":"integer","maximum":5,"minimum":1},{"type":"null"}],"title":"Rating Clarity","default":null,"description":"Ask the user: 'How clear was the Blueprint guidance? Rate 1–5.' 1 = very unclear, 5 = very clear. Only set if the user gives an explicit number."},"would_use_again":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Would Use Again","default":null,"description":"Ask the user: 'Would you use the Blueprint again for a similar task?' Set true/false based on their answer. Only set if they answer explicitly."},"rating_usefulness":{"anyOf":[{"type":"integer","maximum":5,"minimum":1},{"type":"null"}],"title":"Rating Usefulness","default":null,"description":"Ask the user: 'How useful was the Blueprint for this task? Rate 1–5.' 1 = not useful, 5 = very useful. Only set if the user gives an explicit number."},"permission_to_follow_up":{"type":"boolean","title":"Permission To Follow Up","default":false,"description":"Set to true only if the user explicitly said they want a follow-up. Must be confirmed before storing contact_email."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false},"title":"Submit Feedback"},"changes":[{"kind":"name","detail":"Renamed \"signals.feedback\" → \"signals_feedback\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":874,"tokensAfter":874},{"name":"signals.report","fixed":{"name":"signals_report","description":"Records a value moment (e.g. review_confidence, runtime_risk_found, workflow_clarity) after a successful validate run on any lens (architect.validate, design.validate, or spec.validate) or a doctrine session. Each event stores event_type, surface_used (mcp or the site section), perceived_value (1-5), and an optional short free-text note, brief_context (up to 500 characters). WHEN TO CALL: after architect.validate, design.validate, or spec.validate returns a clearly useful result AND the user has","inputSchema":{"type":"object","title":"report_value_eventArguments","required":["event_type"],"properties":{"team_size":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Team Size","default":null,"description":"If the user mentions their team size during the session, record it here. Do not ask for it explicitly: only capture if volunteered."},"event_type":{"enum":["workflow_clarity","runtime_risk_found","agent_setup_success","onboarding_helped","review_confidence","research_time_saved","team_alignment","other"],"type":"string","title":"Event Type","description":"Pick the type that best matches what just happened: 'review_confidence': a validator lens (architect.validate / design.validate / spec.validate) returned aligned; 'runtime_risk_found': a validate run found violations; 'workflow_clarity': principles/examples clarified a design decision; 'agent_setup_success': user successfully wired up an agent or MCP tool; 'onboarding_helped': user understood how to start using the Blueprint; 'research_time_saved': user found relevant doctrine faster than expected; 'team_alignment': Blueprint helped align a team on agentic design; 'other': use only if none of the above fit."},"surface_used":{"anyOf":[{"enum":["mcp","for-agents","integrations","principles","examples","runtime-architecture","learn","certification","coaching","other"],"type":"string"},{"type":"null"}],"title":"Surface Used","default":null,"description":"Where the value was experienced. Use 'mcp' when called from Claude Code, Cursor, Windsurf, or any MCP client. Use 'principles' if the user was browsing or searching principles. Use 'examples' if the user was reading implementation examples. Use 'for-agents' if the user came via the /for-agents page. Use 'learn' or 'certification' for course-related sessions."},"brief_context":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Brief Context","default":null,"description":"1–2 plain-English sentences summarising what was helpful. Example: 'Validation identified a missing approval gate before email send.' No code snippets, no proprietary content, no user PII. Max 500 chars."},"workflow_stage":{"anyOf":[{"enum":["exploring","designing","implementing","reviewing","shipping"],"type":"string"},{"type":"null"}],"title":"Workflow Stage","default":null,"description":"Infer from what the user was doing: 'exploring': reading doctrine, browsing principles; 'designing': planning architecture or agent flows; 'implementing': writing or refactoring code; 'reviewing': running a validator lens on existing code, a surface, or a spec; 'shipping': preparing for production or deployment."},"perceived_value":{"anyOf":[{"type":"integer","maximum":5,"minimum":1},{"type":"null"}],"title":"Perceived Value","default":null,"description":"Ask the user: 'On a scale of 1–5, how valuable was this session?' Map their answer directly: 1=low, 5=high. Do not guess: only set this if the user gave an explicit score."},"would_recommend":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Would Recommend","default":null,"description":"Ask the user: 'Would you recommend the Blueprint to a colleague?' Set true/false based on their answer. Only set if asked: do not assume."}}},"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"title":"Report Value Event"},"changes":[{"kind":"name","detail":"Renamed \"signals.report\" → \"signals_report\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":1049,"tokensAfter":1049},{"name":"spec.validate","fixed":{"name":"spec_validate","description":"Pro/Teams: first-pass specification-quality review of a WRITTEN SPEC (proposal, design doc, task breakdown, or an OpenSpec-style change bundle) against the 8 laws of the Spec Quality Blueprint. The what-to-build lens of the doctrine trio, applied BEFORE code exists: where architect.validate scores built agentic ARCHITECTURE and design.validate scores the rendered SURFACE, spec.validate scores the written intent the team will build from (outcome framing, scope boundary, testable acceptance, decis","inputSchema":{"type":"object","title":"validate_specificationArguments","required":["implementation_context"],"properties":{"task":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task","default":null,"description":"What this spec is for (e.g. 'the closed-beta apply flow rework'). Adds evaluation context."},"files":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Files","default":null,"description":"File paths relevant to the spec, for context."},"goals":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Goals","default":null,"description":"Specific quality goals to weight (e.g. 'ready for an agent to build unattended', 'tight scope')."},"repository":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository","default":null,"description":"Project/repository key. Groups this run with prior spec.validate runs on the same project in your validation-history dashboard (the same grouping the other lenses use), under the 'spec' dimension."},"session_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Session Id","default":null,"description":"Optional Governed Session to attach this run to (GEP-M2). Must reference a session YOU own (list via me.sessions; sessions are created in the web app at /app/sessions): foreign ids are refused before any model call. The run then appears on the session's timeline alongside the other lenses. With private_session=true no run is stored so nothing attaches, but the ownership check still runs FIRST: a session id you don't own fails the call either way."},"private_session":{"type":"boolean","title":"Private Session","default":false,"description":"Set true to skip the stored run AND run_id recovery (operational security and cost logs are still written) for this call (a private one-shot that does not appear in the dashboard). The request is also not persisted in the model provider's response store; the provider's abuse-monitoring retention still applies. Default false."},"implementation_context":{"type":"string","title":"Implementation Context","description":"The specification under review. SEND FULL TEXT VERBATIM: the reviewer cites specific requirements, decisions, and tasks; any compression destroys evidence and produces findings on content that isn't there. For an OpenSpec change, concatenate proposal.md + design.md + tasks.md + delta specs. Do NOT truncate; if very large, split into MULTIPLE calls scoped by document."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false},"title":"Validate Specification Quality"},"changes":[{"kind":"name","detail":"Renamed \"spec.validate\" → \"spec_validate\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":836,"tokensAfter":836},{"name":"team.summarize","fixed":{"name":"team_summarize","description":"Teams/Enterprise: summarises the caller's tool-usage patterns and value signals over a configurable window (default 30 days). Returns period_days, most_used_tools (call counts and average latency), value_events by event_type, observed_usage_stage, validator_lenses_used, recommended_next_assets and private_session. WHEN TO CALL: the user asks 'how is the Blueprint helping me/my team', 'what should I explore next', or 'show me my Blueprint usage'. WHEN NOT TO CALL: proactively or on every conversa","inputSchema":{"type":"object","title":"summarize_team_usageArguments","properties":{"days_back":{"type":"integer","title":"Days Back","default":30,"minimum":1,"description":"Number of days of usage history to include in the summary."},"private_session":{"type":"boolean","title":"Private Session","default":false,"description":"No effect on this tool: accepted only so clients can pass the same flag to every tool. This read stores no run, and the per-call tool-usage record is written on every call."}}},"annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"title":"Summarize Team Usage"},"changes":[{"kind":"name","detail":"Renamed \"team.summarize\" → \"team_summarize\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":292,"tokensAfter":292}],"toolsChanged":29,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}