Skip to main content
Glama

AI Design Blueprint Integrations

integrations MCP server

Official integrations and installable doctrine for AI Design Blueprint across MCP, IDE rules, prompt files, and agent runtimes.

What is in this repo

  • shared/: cross-tool doctrine files

  • mcp/: public MCP configuration and usage notes

  • docs/setup/: copy-first setup guides by tool

  • cursor/, windsurf/, github-copilot/, gemini/: provider-specific instruction files

  • open-weights/: static prompt packs for open-weight and local model workflows

  • exports/: structured doctrine export

Related MCP server: Tap

Public contract

Canonical public endpoints:

  • Site: https://aidesignblueprint.com

  • MCP: https://aidesignblueprint.com/mcp

  • Developer docs: https://aidesignblueprint.com/en/for-agents

Quick start

  1. Pick a setup guide in docs/setup/.

  2. Add the relevant file or MCP config to your own repository or client.

  3. If using MCP, initialize against https://aidesignblueprint.com/mcp.

  4. Run the first proof call:

    • clusters.list()

  5. Then run a second proof call:

    • examples.search(query="orchestration visibility steering", limit=3)

Public MCP tools

Public retrieval tools (anonymous-allowed, read-only)

  • principles.list(cluster?)

  • clusters.list()

  • principles.get(slug)

  • clusters.get(slug)

  • examples.get(slug)

  • principles.search(query, limit?)

  • examples.search(query, principle_ids?, difficulty?, library?, limit?)

  • assets.list()

  • guides.list()

  • guides.get(slug)

  • guides.search(query, limit?)

Public signal tools (anonymous-allowed, opt-in write)

  • signals.report(event_type, surface_used?, brief_context?, perceived_value?, workflow_stage?, would_recommend?, team_size?) โ€” records a value moment; only offer after the user clearly expresses something was useful; never call automatically or silently

  • signals.feedback(task_type?, surface?, rating_clarity?, rating_usefulness?, what_helped?, what_missing?, would_use_again?, contact_email?, permission_to_follow_up?) โ€” explicit qualitative feedback; only call when the user explicitly asks to leave feedback

Signal tools write only the structured fields you pass. No prompts, no code, no file contents are stored. See the privacy policy for full data-handling details.

Protected tools (authenticated, not part of anonymous setup path)

  • me.learning_path()

  • me.coaching_context()

  • architect.validate(implementation_context, ..., private_session?) โ€” Pro/Teams; scores agentic code against the 10 principles; set private_session=true to skip the stored run for that call

  • design.validate(implementation_context, ..., private_session?) โ€” Pro/Teams; the surface mirror: scores a rendered frontend artefact against the 8 experience-design laws (own weekly bucket)

  • spec.validate(implementation_context, ..., private_session?) โ€” Pro/Teams; the what-to-build lens: scores a written specification against the 8 spec-quality laws (own weekly bucket)

  • team.summarize(days_back?, private_session?) โ€” Pro/Teams; usage reflection and recommended next assets across all three validator lenses

  • me.add_evidence(course_slug, stage_id, note)

Feedback and value signal rules

  • Only call signals.report after the user has clearly expressed that something was useful. Never call automatically or silently. Offer at most once per session after a clear success signal.

  • Only call signals.feedback when the user explicitly asks to leave feedback. Never prompt for it proactively.

  • Never include proprietary code, file contents, or secrets in brief_context.

Governance badges

Show that your agent or repo follows the Blueprint doctrine.

Free badge โ€” paste into your README.md (no account required):

[![AI Design Blueprint](https://aidesignblueprint.com/api/badge/free.svg)](https://aidesignblueprint.com)

Pro badge โ€” run architect.validate() via the MCP. The response includes run_id, badge_url, and review_url:

[![AI Design Blueprint](https://aidesignblueprint.com/api/badge/run/<run_id>.svg)](https://aidesignblueprint.com/en/readiness-review/<run_id>)

The Pro badge displays your tier (Governed ยท X/Y or Reviewed ยท X/Y) and links to a public readiness review page. Requires a Pro or Beta account.

What is intentionally not here yet

  • no public OpenAPI schema

  • no public HTTP API contract beyond MCP and static assets

  • no CLI installer

  • no speculative partner-specific distributions

Source of truth

This repo is intended to mirror the canonical public contract already shipped on aidesignblueprint.com.

Before publishing changes here, verify:

  • /mcp

  • /llms.txt

  • /agent-assets/[slug]

  • /en/for-agents

remain consistent with the files committed in this repo.

Available Tools

29 tools
architect.certifyA

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 recovery path. Use it before considering any retry. Long-running LLM call (60-180s typical; exceeds Claude Code's ~60s idle budget); MCP clients commonly close the call before the server returns. Retrying re-runs the LLM call AND burns one of your 3 cert retry-budget attempts. Mints the certified production_ready badge when both reviewers sign off; caps the run to C/emerging when the second pass surfaces a missed production_blocker. MANDATORY DOCTRINE RULE (load-bearing): the badge certifies the EXACT code that produced the validate run_id, NOT 'this codebase' in general. If you modify, fix, or iterate the code between architect.validate and architect.certify โ€” even a single character โ€” cert rejects with code_fingerprint_mismatch. Fixing the code voids the run. The recovery path is always: edit code โ†’ architect.validate โ†’ fresh run_id โ†’ architect.certify on the fresh run. Do NOT cert from a stale run_id after iteration; ask the user to re-validate first. WHEN TO CALL: only after architect.validate returned tier=production_ready AND the user wants the certified badge AND the code has not been touched since the validate run. NOT for tier=draft/emerging/not_applicable runs (typed rejections fire โ€” see below). NOT idempotent across attempts: each call is one of the 3 attempts in the retry budget. BEHAVIOR: atomic one-shot single LLM call, ~60-180s server-side at high reasoning effort (small payloads finish faster; observed p99 ~250s; server-side budget is 6 min, above the observed range). Exceeds typical MCP-client tool-call idle budget (~60s in Claude Code), so the FIRST notifications/progress event fires at t=0 carrying the run_id. The run is atomic by contract โ€” no in_progress lifecycle, no cancellation, no resume. Updates the persisted run's result_json (public review URL + me.validation_history(run_id=...) reflect the cert outcome). ELIGIBILITY GATE (typed rejection enum on failure): caller must own the run, tier=production_ready, less than 24h old, not already certified, within cert retry budget (max 3 attempts), no other cert call in flight for the same run_id, code fingerprint must match the validated code, AND the submitted payload must be cert-payload-complete (see Payload Completeness below โ€” cert rejects pre-LLM with payload_incomplete when an imported module's surface isn't visible in the validate payload that produced this run_id). Rejection reasons (typed Literal): auth_required, paid_plan_required, run_not_found, not_run_owner, not_eligible_tier, not_agentic_component (tier=not_applicable runs), already_certified, certification_age_exceeded, retry_budget_exhausted, code_fingerprint_mismatch, code_fingerprint_missing, code_not_on_file (caller omitted code argument AND the 24h cert-retry hold for this run has expired or was never written. Recovery: re-run architect.certify from the same MCP session that ran architect.validate, passing the code explicitly โ€” the server never persists code by design), payload_incomplete (submitted/validated payload imports modules whose contents aren't visible โ€” cert refuses pre-LLM to prevent a false-precision downgrade. Recovery: re-validate with verbatim public-surface stubs for every imported module, then re-cert on the fresh run_id. Empirically validated: PR #157 iter8/iter9 cert rejections were exactly this class โ€” code on disk was correct, the submitted payload merely omitted module visibility), cert_consensus_score_below_threshold (consensus_median<75 โ€” consensus runs only), cert_consensus_unstable_blocker (any principle mode_stability<80% โ€” consensus runs only), run_state_corrupt, cert_persistence_failed, cert_in_flight (a prior architect.certify call on this run_id is still running. Poll me.validation_history for the verdict; do not retry until it resolves). PAYLOAD COMPLETENESS (load-bearing for cert eligibility): the cert reviewer reads the EXACT payload that produced the validate run_id. Imported modules whose surface isn't present in the payload cause pre-LLM payload_incomplete refusal. Avoidance โ€” when validating with intent to cert, bundle public-surface stubs for every imported module: from sqlalchemy.exc import SQLAlchemyError โ†’ include a stub class; from app.db import models โ†’ include a class models: namespace stub with the columns/methods you reference; module-level imports of dataclass, Literal, json, datetime, timezone MUST also be in the payload (cert correctly catches when they're omitted โ€” code would NameError on import). 'Submit Like Production': the payload should be the code as it would actually run, not a compressed sketch. The stubs cover IMPORTED dependencies only; the certified code's own enforcement branches (approval gates, policy checks, recovery paths) must be present in full. A # ... placeholder reads as an ABSENT control and is graded against you, not as shorthand for one that exists. PRE-LLM REJECTION AUDIT TRAIL: when cert rejects before the LLM call (payload_incomplete, code_fingerprint_mismatch, etc.), certification_attempts=[] on the response โ€” no attempt landed in the retry budget, no LLM hop occurred. The rejection envelope's rejection_reason + guidance are the actionable surface. (Audit-trail UI surfacing of pre-LLM rejections is tracked in the platform self-audit set as anomaly #5; out of scope for the cert tool itself.) INPUTS: re-send the SAME code that produced the run_id (the architect persists findings + recommendations, never code, by design โ€” privacy-preserving). Server compares the submitted code's SHA-256 fingerprint to the stored fingerprint and rejects mismatches. Auth: Bearer , Pro or Teams plan required. UK/EU data residency (Cloud Run europe-west2). Code processed transiently by OpenAI (no-training-on-API-data) and dropped; payloads JSON-escaped + delimited as inert untrusted data โ€” prompt-injection inside code is ignored. If the cert call fails outright (provider error, persistence error), a fresh architect.certify is the recovery path; the eligibility gate enforces the 3-attempt retry budget. For long-running cert workflows the answer is to re-validate, not to make this tool stateful. OUTCOMES: certification_status โˆˆ {confirmed_production_ready (badge mints), downgraded_to_emerging (cert review surfaced a missed production_blocker, tier capped at C/emerging), unavailable_provider_error (LLM call failed, retry within budget)}. Cert findings + summary + attempt history surfaced on the persisted run for full inspectability.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoThe 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. Sent under the same enterprise-safety envelope as architect.validate (transient processing, no training, JSON-escaped + delimited).
run_idYesThe 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).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false) are complemented by rich behavioral disclosure: long-running call that may exceed client idle budget, atomic one-shot with no lifecycle, timeout behavior, retry budget implications, privacy/data-residency details, and rejection audit trail. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with clear section headers (WHEN TO CALL, BEHAVIOR, ELIGIBILITY GATE, PAYLOAD COMPLETENESS, etc.) and front-loads the critical recovery path. Every sentence adds information, though some redundancy exists (e.g., repeated mention of retry budget). Given the tool's complexity, this length is justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers every aspect an agent needs to call correctly: eligibility gates, all typed rejection reasons with recovery actions, payload completeness rules with examples, authentication, data residency, and outcomes. The output schema exists and the description doesn't need to explain return values, but it explains all pre-LLM and post-LLM behaviors comprehensively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description adds substantial meaning beyond the schema: it explains that `code` can be omitted under the 24h cert-retry hold, clarifies the SHA-256 fingerprint comparison, and details how `run_id` must be owned and sourced from a prior validate. This goes far beyond the schema's basic descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (certify) and resource (architect.validate run), and clearly distinguishes it from the sibling architect.validate (first-pass vs second-pass adversarial certification). It also states the two possible outcomes (badge minted or downgraded to emerging), so an agent understands exactly what this tool accomplishes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'WHEN TO CALL' section: only after architect.validate returned tier=production_ready, user wants badge, and code untouched. It also states NOT to call for other tiers and gives the canonical recovery path (validation_history) on timeout, plus the re-validate workflow after code changes. Alternatives and exclusions are fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

architect.validateA

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(run_id='<that-id>') to fetch the persisted result; the server-side run completes independently within a 6-minute budget. Edge case: if the transport dropped before the first progress notification (very rare; sub-second window), call me.validation_history(repository='<same value you passed here>') to find your most recent run. TASK-AUGMENTED INVOCATION (MCP 2025-11-25, SEP-1686): clients that advertise the tasks capability can task-augment this call by including task: {ttl: <ms>} inside the JSON-RPC request's params (NOT as a tool argument; alongside arguments, _meta, etc.). The server returns a CreateTaskResult immediately (taskId equals the run_id above) and runs the validation in the background. Spec-correct long-running pattern: poll via tasks/get for state, fetch the terminal payload via tasks/result, listen for notifications/tasks/status for push updates, and cancel via tasks/cancel. _meta.progressToken from the original request stays valid for the entire task lifetime. Sync (non-augmented) calls behave exactly as before, backwards-compatible by construction. The me.validation_history(run_id=...) recovery path remains the canonical recovery handle for clients that don't yet advertise the tasks capability. Returns code_classification (autonomous_agentic_workflow vs non_agentic_component), per-principle findings (verdict, severity_score 0-100, severity_class, code-cited evidence, recommendation), severity-weighted readiness (score|null, grade|null, tier โˆˆ {production_ready, emerging, draft, not_applicable}), recommended examples, reproducibility envelope (model, seed, doctrine_fingerprint, prompt_template_fingerprint), persistence_status with shareable run_id/badge_url/review_url. Those two URLs 404 until the run's owner publishes it: runs are private by default. Read public_review in the response before embedding either one. WHEN TO CALL: the user wants a governance audit, readiness score, or production_ready badge on an agent/workflow they just built or changed. WHEN NOT TO CALL: non-agentic plumbing (math utilities, type aliases, event-loop helpers, single-shot request/response handlers) returns tier=not_applicable with score=null/grade=null โ€” that's not a failure, the doctrine simply doesn't grade non-agentic code, and architect.certify will refuse with not_agentic_component. Submit the OWNING agentic workflow instead. BEHAVIOR: long-running LLM call (~60-180s typical at high reasoning effort, single-pass; server-side budget 6 min). Mints run_id at t=0; first notifications/progress event carries run_id as recovery handle; keepalive every 30s. Persists ValidationRun + UserValidationRun + AIValidationRunLog + LLMUsageLog atomically; on rollback, badge/review URLs are stripped. Auth: sign-in required, with an active Pro, Pro Plus, Teams, Enterprise, beta, or trial plan. UK/EU residency; transient OpenAI processing (no-training); prompt-injection in code is inert. INPUTS: send FULL file contents verbatim as implementation_context (NO truncation, NO ... placeholders, NO comment removal โ€” the architect treats your ... as literal code and hallucinates bugs that don't exist). If too large, split into MULTIPLE calls scoped by file/module; never truncate one call. Pass repository="" to group runs into a project trend. Pass private_session=true to skip the stored run (persistence + recovery disabled); operational security + cost logs are still kept. focus_area narrows scope; unmatched focus_area fails explicitly rather than silently widening. PAYLOAD COMPLETENESS (load-bearing if you intend to architect.certify this run): the validate first-pass is permissive โ€” it scores on doctrine alignment + structural patterns visible in the submitted code. Cert's adversarial second-pass is rigorous โ€” it scores on cert-payload-completeness as well as code correctness. A run that scores 100/A at validate can cert-reject pre-LLM with payload_incomplete when imported modules' surfaces aren't visible. To validate with INTENT TO CERT, also bundle verbatim public-surface stubs for every imported module: from sqlalchemy.exc import SQLAlchemyError โ†’ include a stub class; from app.db import models โ†’ include a class models: namespace stub with the columns/methods the code references; module-level imports of dataclass, Literal, json, datetime, timezone MUST also be in the payload (cert correctly catches when they're omitted โ€” the module would NameError on import as submitted). 'Submit Like Production': the payload should be the code as it would actually run. TWO COMPLETENESS AXES. (1) IMPORTS: stub the public surface of every dependency (above). (2) ENFORCEMENT BRANCHES: the code under cert itself (approval gates, policy checks, recovery paths) must be the REAL logic, fully written. A placeholder body (# ... execute approved action ..., pass # TODO, a bare ...) is graded as a MISSING control, not shorthand; cert scores what would actually run. Never sketch the agent you are certifying. Empirically reconfirmed PR #157 iter8 โ†’ iter9 cert downgrades. SCORE VARIANCE DISCLOSURE (anomaly #10 โ€” empirically documented): validate scores are POINT ESTIMATES with an observed empirical variance band of ~20-67 pts on BYTE-IDENTICAL input. Runs against the same repository, same code, same deterministic seed (the seed is derived from input โ€” same input โ†’ same seed) can produce materially different scores AND different top-blocker rankings, because OpenAI's reasoning models at reasoning_effort=high are not strictly deterministic even with the seed parameter pinned. The reproducibility_mode='best_effort' field on every response is the platform's honest disclosure of this property. For decisions where stability matters more than speed, call architect.validate_consensus (N=3-5 aggregated, median verdict + per-principle stability metrics) instead โ€” collapses the variance, surfaces unstable principles explicitly. A single validate run is a single roll; consensus is the right tool when one score isn't enough. ITERATION LOOP โ€” repository keying. Pass the SAME repository value across calls to chain iteration rounds; the validator auto-resolves the most recent prior run on (user, repository, scope) as prior_run_baseline and the LLM grades the new submission with iteration context (per-principle severity deltas surface in the response). Changing the repository string between calls โ€” even subtly with an iter-2 suffix โ€” silently severs the chain and yields a fresh blind first-shot. Round numbering belongs in task or commit messages, never in repository. See the architect-validation-orchestration skill in the agent-asset pack for the full validate โ†’ consensus โ†’ certify sequence. VERIFICATION LAYERS (the two-layer doctrine this platform practices on itself): validate verifies DOCTRINE ALIGNMENT against the 10-principle Blueprint โ€” design patterns, hand-off explicitness, operational-state inspectability, race/blocker handling at the architectural level. validate does NOT guarantee runtime correctness. cert verifies PAYLOAD COMPLETENESS and runs an adversarial second pass over the submitted code โ€” catches production_blockers the first pass missed, name-errors on import, missing module surfaces, etc. cert does NOT verify runtime correctness either. Passing validate is a NECESSARY condition for production_ready, not a sufficient one. Runtime correctness (does this actually execute and behave?) is verified at the THIRD layer โ€” your tests, types, walks. The platform's own recursive-integrity practice: every PR runs validate against its own primitives, then cert. Real bugs surfaced via this practice in PR #157 โ€” NULL-UUID false-positive (iter3) and tie-breaker mismatch (iter5) โ€” that 25 unit tests had missed. Two-layer verification is the discipline, not 'either/or'. TYPED FAILURES: timed_out, rate_limited, dependency_unavailable, schema_mismatch (each carries retryable + next_action). NEXT STEP: if tier=production_ready (A or B grade), the response carries certification_status='not_evaluated' โ€” call architect.certify(run_id, code) to mint the certified production_ready badge (separate ~60-150s adversarial review, eligibility-gated). See Payload Completeness above for the common pre-cert pitfall.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNoWhat the agent or workflow is trying to accomplish. Adds evaluation context.
filesNoList of file paths relevant to the implementation context.
goalsNoSpecific safety or quality goals to evaluate against (e.g. 'prevent irreversible actions', 'explicit approvals').
languageNoProgramming language of the code being evaluated (e.g. 'python', 'typescript').
focus_areaNoNarrow the evaluation to a specific principle cluster or slug (e.g. 'delegation', 'visibility', 'establish-trust-through-inspectability').
repositoryNoIteration 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_idNoOptional 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_limitNoMaximum number of curated examples to include in recommendations.
private_sessionNoSet 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_contextYesThe 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description heavily supplements the annotations: discloses the long-running non-idempotent call (60-180s typical, retries re-run compute), recovery via run_id/validation_history, background task-augmentation, auth/plan gates, UK/EU residency, score variance, private-by-default URLs, and typed failures. Annotations (readOnlyHint=false, destructiveHint=false) are consistent โ€” the tool persists runs โ€” so no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very long, but it is modularly structured with labeled sections (WHEN TO CALL, BEHAVIOR, INPUTS, PAYLOAD COMPLETENESS, SCORE VARIANCE, ITERATION LOOP, TYPED FAILURES) and front-loads the most critical operational hazard (timeout/retry/recovery). A few recovery details are repeated, but the density is largely justified by the tool's operational complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers every contingency an agent needs: timeout recovery, task-augmented invocation, auth/residency, payload completeness for certify intent, score variance disclosure, iteration chaining rules, verification layers, typed failures, and the next-step certify call. The output schema exists and the description still names key return fields without re-explaining the schema, making it operationally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds substantial operational meaning beyond the schema: implementation_context must be full verbatim content with explicit don'ts, repository is an iteration key whose alteration silently severs the chain, private_session disables persistence/recovery, and session_id has a pre-call ownership check. This is genuinely additive and load-bearing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+standard: 'first-pass doctrine review of agentic code/workflow against the 10-principle AI Design Blueprint doctrine.' It differentiates itself from siblings by explicitly naming architect.certify as the adversarial second pass and architect.validate_consensus as the variance-collapsing aggregate, so an agent can select among them without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Has explicit WHEN TO CALL ('user wants a governance audit, readiness score, or production_ready badge on an agent/workflow') and WHEN NOT TO CALL ('non-agentic plumbing... returns tier=not_applicable... submit the OWNING agentic workflow instead'). It also routes to validate_consensus when stability matters and to certify for the badge, giving clear alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

architect.validate_consensusA

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 fetch the persisted consensus envelope. Runs N parallel architect.validate calls with private_session=True, then aggregates them to a per-principle MODE verdict + median severity + per-principle stability + score range/stdev. Returns one ConsensusValidationResponse with the headline median score, the honest variance band, and a representative full ValidationResponse (the child whose score is closest to the median). WHEN TO CALL: the user wants an HONEST first-pass score on agentic code, with the architect's variance surfaced. The single-shot architect.validate re-asserts the prior persisted run's verdict via baseline-anchor injection โ€” same code can score 60/C anchored vs 98/A unanchored. Consensus mode is the unanchored honest read. WHEN NOT TO CALL: when you NEED the iteration delta against a prior run (regressions/improvements panel) โ€” for that, call architect.validate which keeps baseline injection on. CHAIN RESUME: each child runs with private_session=True (no anchor) on purpose, but the CONSOLIDATED outer row IS persisted with lifecycle_status='completed' โ€” the next single-shot architect.validate on the same repository auto-resolves it as prior_run_baseline. Consensus checkpoint becomes the new anchor. See the architect-validation-orchestration skill in the agent-asset pack for the full validate โ†’ consensus โ†’ certify sequence. BEHAVIOR: N (default 3, max 5) parallel LLM calls run concurrently; wallclock ~80-120s for N=3 (max child latency, not sum). Cost = N ร— LLM bill. Each child runs with private_session=True so the doctrine prompt's prior-run baseline injection is suppressed (no anchor bias). One CONSOLIDATED UserValidationRun row is written carrying the consensus envelope; the N children themselves do NOT persist (private_session contract). AUTH: sign-in required, with an active Pro, Pro Plus, Teams, Enterprise, beta, or trial plan. Same paid-plan gate as architect.validate. INPUTS: same shape as architect.validate. n is the only extra arg (range 2..5). private_session is implicit (always true for children); the OUTER consolidated row IS persisted unless the tool itself is called inside another private context โ€” but no such wrapper exists today. OUTPUT: response carries score_consensus_median (headline), score_stdev (honest uncertainty), score_range (min, max), mode_stability_min_pct (the cert-eligibility gate's input โ€” โ‰ฅ 80% means the consensus is stable), per_principle (mode + distribution + severity median per principle), and representative_response (the closest-to-median child's full ValidationResponse so existing UI components render unchanged). TYPED FAILURES: same as architect.validate (timed_out, rate_limited, dependency_unavailable). Plus consensus-specific: consensus_quorum_failed when fewer than 2 child runs succeeded (โ‰ฅ 2 required to compute a meaningful median).

ParametersJSON Schema
NameRequiredDescriptionDefault
nNoNumber 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).
taskNoWhat the agent or workflow is trying to accomplish.
filesNoList of file paths relevant to the implementation.
goalsNoSpecific safety or quality goals to evaluate against.
languageNoProgramming language of the code (e.g. 'python').
focus_areaNoOptional: narrow the review to a principle cluster or slug.
repositoryNoIteration 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_limitNoMax curated examples per child run.
implementation_contextYesThe artifact under review. SEND FULL FILE CONTENTS VERBATIM โ€” same constraint as architect.validate. Truncation produces hallucinated findings on code that isn't there.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only signal a mutating, non-idempotent call, but the description discloses long-running 80-120s behavior, the do-not-retry rule, run_id emission timing, private_session persistence semantics (children not persisted, consolidated row is), auth/plan gate, and consensus-specific typed failures. This far exceeds annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long and repeats a few facts (cost, private_session, n cap) across sections, so it is not maximally concise. However, it is well-structured with clear headers and front-loads the most critical operational warning (do not retry on timeout) before details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, expensive, long-running operation with an output schema, the description covers inputs, outputs, failure modes, auth, recovery, persistence, and downstream chaining. Nothing an agent needs to invoke or recover from this tool is left unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real value: it identifies n as the only extra arg, notes the server-side cap of 5 despite the schema max of 10, explains repository's role as iteration-key/baseline persistence, and stresses sending full file contents verbatim for implementation_context. It does not individually enrich every parameter, but the schema already covers those.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific mechanism โ€” running N parallel architect.validate calls and aggregating them into a per-principle mode verdict, median severity, stability, and score range/stdev โ€” and names the return type (ConsensusValidationResponse). It also differentiates itself from architect.validate by framing consensus as the unanchored honest read versus single-shot baseline-anchored reassertion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit WHEN TO CALL and WHEN NOT TO CALL sections, including the concrete alternative (architect.validate) for iteration-delta needs. It further gives timeout recovery instructions and the chained validate โ†’ consensus โ†’ certify sequence, so an agent knows exactly when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

assets.listA
Read-onlyIdempotent

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.list / clusters.list / guides.list. WHEN TO CALL: the user asks how to bring the Blueprint into their coding agent, or wants to install it as a local skill/rule file. WHEN NOT TO CALL: for the live MCP tools themselves โ€” those are already available through this server. For doctrine content, prefer principles.list/get and guides.list/get. BEHAVIOR: read-only, idempotent, no auth required. Asset artefacts are regenerated on every deploy from the canonical doctrine.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Explicitly declares read-only, idempotent, no auth required, and notes assets are regenerated on every deploy. Adds value beyond annotations (readOnlyHint, idempotentHint) by stating no auth needed and regeneration behavior. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then enumerates response fields and usage guidance. Slightly verbose with parenthetical 'the full vocabulary' but generally efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No parameters, output schema exists, description covers response fields, behavior, and usage context fully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has zero parameters with 100% coverage, so description need not add param info. Baseline of 4 for no-param tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it lists downloadable asset artifacts (skill packs, rule packs, MCP setup snippets) and distinguishes from sibling tools like principles.list, clusters.list, and guides.list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to call (user wants to import Blueprint as native files) and when not to call (for live MCP tools, prefer principles.list/get and guides.list/get).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clusters.getA
Read-onlyIdempotent

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 slugs + titles already, so DO NOT loop principles.get over each member to get a cluster overview โ€” read the response. WHEN NOT TO CALL: the user is describing a topic, failure mode, or keyword in natural language (call principles.search instead); the user wants to discover which clusters exist (call clusters.list); the user wants the definition of one specific principle (call principles.get directly). Idempotent + cacheable per slug. Returns 404-shaped error_payload on unknown slug โ€” the slug must match exactly the value emitted by clusters.list, with no normalization.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesStable slug of the principle cluster (e.g. 'delegation', 'visibility', 'trust', 'orchestration').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds that it is cacheable per slug and returns a 404 error on unknown slug requiring exact match, providing context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections and contains no filler. Each sentence adds value, though it's slightly longer than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, it does not need to explain return values. The description covers purpose, usage guidelines, error behavior, and exact matching requirements, making it complete for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the description clarifies that the slug must be a 'stable slug' and match exactly the value from clusters.list, adding useful nuance beyond the schema description alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('principle cluster by stable slug'), and explains the return payload, distinguishing it from siblings like principles.get, clusters.list, and principles.search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to call (user named a specific cluster, have slug from prior responses), when not to call (natural language topic -> principles.search; cluster discovery -> clusters.list; specific principle -> principles.get), and includes a warning against unnecessary loops.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clusters.listA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds what the output contains (stable slugs and linked principle titles), providing useful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no wasted words: purpose, usage guidance, and alternative recommendation. Front-loaded with the action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters, good annotations, and an output schema (not shown but indicated), the description fully covers what the agent needs: purpose, usage context, and output hint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters; schema coverage is 100%. Baseline 4 applies as description adds no parameter info, which is appropriate given zero params.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states "List all principle clusters" with a specific verb and resource, and distinguishes from siblings by mentioning clusters.get and filtering principles.list by cluster.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use (discover clusters before drilling in) and when not to (prefer clusters.get when slug known), with alternatives named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

design.validateA

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, Aesthetic-Usability, Peak-End, Tesler's irreducible complexity, the Mental-Model gap). ON CLIENT TIMEOUT โ€” DO NOT RETRY. Long-running LLM call (~60-180s at high reasoning effort, single-pass). The server mints a run_id, emits it in the FIRST progress event at t=0s (before the LLM call), and persists the run โ€” so on a client timeout, capture that run_id and call me.validation_history(run_id='') to fetch the persisted result instead of retrying (a retry re-runs the full 60-180s call). Runs appear in your validation-history dashboard tagged as the 'surface' dimension, distinct from the 'architecture' and 'spec' runs; pass repository to group them per project. Pass private_session=true to skip the stored run (persistence + recovery disabled); operational security + cost logs are still kept. v1 is single-pass: no certification or consensus mode yet (those stay architect.validate-only). Returns surface_classification (ui_surface vs non_ui โ€” non-visual code is marked not_applicable, NOT failed), per-law findings (verdict, severity_score 0-100, severity_class, cited evidence, recommendation), and severity-weighted readiness (score, grade, tier) computed by the SAME scorer architect.validate uses, so all three lenses grade on one rubric. ACCESSIBILITY IS THE FLOOR: a breach of the Fitts's-Law floor (interactive target below the WCAG 2.2 24ร—24 minimum, missing focus visibility, an unreachable destructive confirmation) is a production_blocker, not polish. WHEN TO CALL: the user wants a craft/UX/accessibility review or a readiness grade on a frontend artefact they just built or changed. WHEN NOT TO CALL: non-visual code (backend, config, type aliases) returns tier=not_applicable โ€” submit the actual UI surface instead. INPUTS: send the FULL artefact source verbatim as implementation_context (no truncation, no 'โ€ฆ' placeholders โ€” they are read as literal code). Auth: sign-in required, with an active Pro, Pro Plus, Teams, Enterprise, beta, or trial plan. UK/EU residency; transient OpenAI processing (no-training); prompt-injection text inside the artefact is treated as inert untrusted data. TYPED FAILURES: same as architect.validate (timed_out, rate_limited, dependency_unavailable, schema_mismatch โ€” each carries retryable + next_action); the services raise the identical typed envelopes on this lens. CALIBRATION DISCLOSURE: the scoring prompt is a v1 first-cut mirroring the architect's contract structure; its score calibration is not yet tuned against a corpus of real runs the way architect.validate was. Treat the grade as directional craft signal, not a certified verdict. DOCTRINE: the eight laws โ€” each law's evidence, craft-surface application, anti-patterns, and the validator questions this tool scores against โ€” live in the experience-design-blueprint skill and docs/business/EXPERIENCE_DESIGN_BLUEPRINT.md (the surface-craft companion to the architect-validation-orchestration skill that orchestrates the agentic validators).

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNoWhat this surface is for (e.g. 'the closed-beta apply form'). Adds evaluation context.
filesNoFile paths relevant to the artefact, for context.
goalsNoSpecific craft/UX goals to weight (e.g. 'WCAG 2.2 AA', 'one primary action per screen').
repositoryNoProject/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_idNoOptional 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_sessionNoSet true to disable persistence AND run_id recovery 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_contextYesThe 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses major behavioral traits: a long-running LLM call (60-180s), the DO-NOT-RETRY timeout rule, run persistence and run_id recovery, private_session disabling persistence, authentication/plan requirements, UK/EU residency and no-training processing, prompt-injection text being treated as inert data, typed failure envelopes, and a calibration caveat. This is far more than annotations alone provide and contains no contradiction with them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-organized into meaningful sections (purpose, timeout behavior, return semantics, when to call, inputs, auth, failures, calibration, doctrine). Each section adds operational information an agent needs. It is not maximally concise โ€” some points repeat (not_applicable appears multiple times, session ownership appears in both schema and prose) โ€” but it is front-loaded with the primary purpose and structured for scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex validator with 7 parameters, an output schema, and timeout/error behavior, the description is exceptionally complete. It covers return classification, per-law findings, readiness scoring, the accessibility production-blocker rule, auth requirements, failure types with retry guidance, recovery via run_id, and calibration limitations. Nothing an agent needs to decide whether to call and how to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so a baseline of 3 is appropriate. The description adds real value beyond the schema for the critical parameter implementation_context: it insists on verbatim full source, warns that 'โ€ฆ' placeholders are read as literal code, and advises splitting large artefacts into multiple calls. It also clarifies repository grouping and session_id ownership rules, though those are largely repeated from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb-plus-resource statement: 'first-pass surface-craft review of a FRONTEND artefact ... against the 8 laws of the Experience Design Blueprint.' It explicitly differentiates itself from architect.validate by contrasting 'agentic ARCHITECTURE' with the 'PERCEPTIBLE SURFACE,' and names the exact eight laws evaluated. An agent can immediately identify this as the design/UX-lens validator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit WHEN TO CALL ('craft/UX/accessibility review or readiness grade on a frontend artefact') and WHEN NOT TO CALL sections, including the non-visual-code not_applicable case and the pointer to architect.validate as the architecture counterpart. It also specifies the client-timeout recovery path (use me.validation_history with the run_id rather than retrying), leaving no ambiguity about selection or fallback.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

examples.getA
Read-onlyIdempotent

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. Returns error_payload on unknown slug. Some entries are first-party agentic patterns (entry_kind='pattern') rather than upstream cookbook examples: those additionally return pattern_slug, pattern_family, when_to_use, doctrine_relations (each {principle_id, relation, note, code_ref} where relation is one of structural / default_gap / depends), prior_art, and doctrine_binding_basis. Every other row omits those seven keys.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesStable slug of the curated example (e.g. 'agents-building-blocks-5-control').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior. The description adds meaningful behavioral detail beyond those annotations: unknown slugs return error_payload, and certain entries carry extra conditional fields (pattern_slug, pattern_family, when_to_use, etc.) while others omit them. This is rich, non-redundant transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place: main behavior, return contents, usage routing, error behavior, and the conditional shape for pattern entries. It is front-loaded with the core action and structured so the conditional variant is clearly separated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and annotations cover safety, the description is fully complete: it explains when to call the tool, what it returns, how errors manifest, and the conditional presence of extra fields. Nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter slug is already documented with an example value. The description doesn't add parameter-specific semantics beyond what the schema provides, but with full coverage the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Get one curated example by stable slug') and enumerates exactly what the response contains. It also explicitly differentiates from siblings by naming examples.search and guides.get, so an agent can select it without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: use when the slug is already known from examples.search, principles.get, or a guide cross-link. It also states clear exclusions: prefer examples.search for filtering, prefer guides.get for full walkthroughs. This fully covers the selection logic.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

examples.searchA
Read-onlyIdempotent

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 examples; prefer examples.get when you already have the slug; prefer guides.search when the user wants a full walkthrough; prefer principles.search when the user wants doctrine guidance, not an implementation. Results may include first-party agentic patterns (entry_kind='pattern') carrying an explicit doctrine binding, see examples.get. Filter to one family with pattern_family, which implies patterns only. Patterns take a small relevance preference over generic examples when otherwise equally relevant; that preference never outranks a genuine failing-principle match, and a pattern whose only relation to a failing principle is 'depends' receives no such match at all.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return. Capped at server maximum.
queryYesFree-text search query matched against example title, summary, and metadata.
libraryNoFilter by library or framework name (e.g. 'langgraph', 'openai', 'anthropic').
difficultyNoFilter by difficulty level.
principle_idsNoFilter to examples that cover these principle IDs.
pattern_familyNoFilter to one agentic-pattern family. Implies patterns only, since no upstream cookbook example carries a family.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds substantial behavioral nuance beyond that: default limit 5 with server-side cap, inclusion of first-party agentic patterns (entry_kind='pattern') with doctrine binding, and a precise explanation of pattern relevance preference (never outranks a genuine failing-principle match, and 'depends' relation yields no match). This is rich, non-redundant context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured: purpose first, then filters, return fields, usage guidance, and behavioral notes. Every sentence adds information; there is no fluff or repetition. It is appropriately detailed given the tool's complexity (six parameters, multiple filters, cross-tool references). Not perfectly concise, but efficient for its scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (not shown but indicated), the description need not explain return values. It covers all essential aspects: purpose, filters, usage alternatives, behavioral quirks (pattern preference, limit cap), and cross-tool linkage (slug hydrates via examples.get). Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (all six parameters have descriptions), so the baseline is 3. The description adds value by explaining the pattern_family filter implies patterns-only ('Filter to one family with pattern_family, which implies patterns only') and by summarizing the filter semantics in prose (principle_ids, difficulty, library). It also clarifies the limit is capped server-side. This goes slightly beyond the schema's own descriptions, justifying a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb+resource+method: 'Search curated examples by free-text query, ranked by relevance'. It also names the sibling tools it is not (examples.get, guides.search, principles.search), so an agent can immediately distinguish it from alternatives without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit usage guidance is front-loaded: 'Use this when the user describes a use case, technique, or library and wants matching examples' and then gives three concrete alternatives ('prefer examples.get when you already have the slug; prefer guides.search when the user wants a full walkthrough; prefer principles.search when the user wants doctrine guidance'). This is exactly the when/when-not/alternatives pattern.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

guides.getA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesStable slug of the application guide (e.g. 'security-application', 'observable-evaluation').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds 'Returns sections, action items, and linked principles,' which provides behavioral detail beyond annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. The core action is front-loaded, followed by usage guidance. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema (not shown but noted), the description covers all needed aspects: purpose, when to use, parameter guidance. No gaps for this simple getter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (slug parameter well-described). The description adds examples and notes the slug is 'stable', adding meaningful context beyond the schema. Baseline 3 with added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'full application guide' with examples of stable slugs. It distinguishes itself from sibling tools like guides.list and guides.search by specifying the input (slug) and context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use this tool ('when you already have the guide slug') and when to prefer alternatives (guides.search for natural language, guides.list for full inventory). No ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

guides.listA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and idempotentHint=true; description adds context about guide topics (security, evaluation, observability), which is valuable beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each serving a clear purpose: purpose, usage, alternatives. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters, an output schema, and rich annotations, the description provides all necessary context for the agent to decide when and why to use this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, schema coverage is 100%, so description is not required to add parameter info; baseline is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'application guides', and specifies the content areas (security, evaluation, observability) to distinguish from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool vs alternatives: 'Use this to discover which guides exist before drilling in. Prefer guides.search when... Prefer guides.get when...'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

guides.searchA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return. Capped at server maximum.
queryYesFree-text search query matched against all guide content including section answers and action items.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, indicating safe, non-destructive behavior. The description adds further behavioral context by specifying that the search matches against 'section answers and action items,' which is useful for understanding scope. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, with the first sentence stating the clear purpose and the second providing usage guidance and alternatives. No unnecessary words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With high schema coverage and an output schema present, the description covers purpose, usage guidelines, and sibling differentiation thoroughly. It is complete enough for an agent to correctly select and invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already well-described in the input schema. The tool description does not add extra parameter details beyond what the schema provides, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Search') and the resource ('application guides') with specific matching criteria ('section answers and action items'). It also distinguishes from sibling tools by mentioning 'guides.get' and 'guides.list', providing explicit differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool ('when the user describes an engineering challenge...and wants matching guides') and provides alternatives for other scenarios ('Prefer guides.get when you already have the guide slug; prefer guides.list when you need the full inventory'). No ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

handoffs.agencyA

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 team). WHEN TO CALL: the user has identified a paid hands-on expert engagement need beyond self-service learning, and explicitly asks to talk to the team or book a discovery call. ALWAYS confirm with the user before firing โ€” this creates a sales-visible record. WHEN NOT TO CALL: for free training / partnerships discussion (use handoffs.partnership); for support / billing / access (use handoffs.operator); proactively or as a sales push. BEHAVIOR: write-only, single insert, side-effecting. Auth: Bearer (Firebase ID token, any plan). UK/EU residency. Response confirms the ticket id + scope so the user can reference it.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoRole or title of the person submitting the agency inquiry.
localeNoResponse locale for the acknowledgment.en
reasonYesDescription of the engagement need: workflow sprint, proof-of-concept, pilot support, or advisory.
companyNoCompany or team name submitting the agency inquiry.
websiteNoWebsite or relevant URL for the team or project.
agent_nameNoName of the agent or client triggering the handoff.mcp-client
support_typeNoType of support needed.
trace_summaryNoOptional agent trace summary for operator context.
agent_platformNoPlatform or runtime the agent is running on.
workflow_stageNoCurrent workflow stage.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-read-only and non-destructive, but description adds write-only, single insert, side-effecting behavior, auth requirements (Bearer token, UK/EU residency), and confirmation response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is well-structured with sections, front-loaded main purpose, and every sentence provides value; slightly verbose but still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 10 parameters with full schema coverage, existing annotations, and output schema, the description covers purpose, usage, behavior, auth, residency, and response completely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3; description adds context by explaining engagement scopes and tying them to reason and support_type parameters, enhancing understanding beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool submits an agency engagement enquiry for a founder-led discovery call, lists engagement scopes, and distinguishes from siblings handoffs.partnership and handoffs.operator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides WHEN TO CALL and WHEN NOT TO CALL sections with alternatives, plus instructs to always confirm with user before firing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

handoffs.operatorA

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 still needs a human. ALWAYS confirm with the user before firing โ€” this creates a human-visible ticket. WHEN NOT TO CALL: proactively, silently, or to log debugging traces (use diagnostic logs instead); for partnerships/agency enquiries (use handoffs.partnership / handoffs.agency); for content questions answerable by principles.search / guides.search. BEHAVIOR: write-only, single insert, side-effecting (creates a ticket the team will see). Auth: Bearer (any plan). UK/EU residency. Response confirms ticket id + topic so the user can reference it.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoTopic category for routing (e.g. 'agent', 'billing', 'access', 'general').agent
localeNoResponse locale for the handoff acknowledgment.en
reasonYesClear description of why a human operator review is needed.
page_urlNoURL of the page or context where the handoff was triggered.
agent_nameNoName of the agent or client triggering the handoff.mcp-client
trace_summaryNoOptional summary of the agent's recent actions or trace for operator context.
agent_platformNoPlatform or runtime the agent is running on (e.g. 'claude-code', 'cursor', 'copilot').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds behavioral context beyond annotations: write-only, single insert, side-effecting (creates visible ticket), auth requirements, and UK/EU residency. No contradiction with annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with front-loaded key info, but moderately long. Sections like WHEN TO CALL and WHEN NOT TO CALL are useful. Slightly verbose but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a handoff tool: covers purpose, usage guidelines, behavior, auth, residency, and response confirmation. Output schema exists (assumed) and description mentions return of ticket id + topic.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3. Description lists fields persisted but does not add significant semantics beyond the schema descriptions. Minor inaccuracy: mentions user_email not in schema, but overall adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a support handoff record for human review, specifying the action (creates), resource (support handoff record), and context (when agent cannot resolve with read-only tools). It explicitly distinguishes from sibling tools handoffs.partnership and handoffs.agency.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-call scenarios (user asks for human help, billing/access issues, tried doctrine tools) and when-not-to-call (proactively, silently, for logging, partnerships/agency). Also instructs to confirm with user before firing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

handoffs.partnershipA

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. WHEN NOT TO CALL: for general support / billing / access issues (use handoffs.operator); for paid-engagement enquiries (use handoffs.agency); proactively or as a sales prompt โ€” only when the user has explicitly asked. BEHAVIOR: write-only, single insert, side-effecting (creates a ticket). Auth: Bearer (any plan). UK/EU residency. Response confirms the ticket id + audience so the user can reference it.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoRole or title of the person submitting the partnership inquiry.
topicNoPartnership topic category.ecosystem
localeNoResponse locale for the handoff acknowledgment.en
reasonYesClear description of the partnership opportunity or inquiry.
websiteNoWebsite of the organization for additional context.
agent_nameNoName of the agent or client triggering the handoff.mcp-client
organizationNoName of the organization or company making the partnership inquiry.
trace_summaryNoOptional agent trace summary for operator context.
agent_platformNoPlatform or runtime the agent is running on.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint=false, destructiveHint=false) are consistent. Description adds: write-only, single insert, side-effecting, auth requirement (Bearer token), UK/EU residency, and response includes ticket id+audience.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-organized with clear sections: purpose, when to call/not call, behavior. Every sentence adds value, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 9 parameters (1 required) and annotations, description covers purpose, usage, behavioral traits, auth, locale, and response. Output schema exists but description mentions response shape. Complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% description coverage, so baseline is 3. Description does not add new parameter-level meaning beyond what schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a partnerships handoff record for design-partner, ecosystem, training, or advisory conversations. It distinguishes from sibling tools (handoffs.operator, handoffs.agency) by specifying use case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-call: user explicitly wants to engage as a design partner, co-marketing/training partner, or evaluate Blueprint. When-not-to-call: for general support/billing/access (use handoffs.operator), paid-engagement (use handoffs.agency), or as a sales prompt. Includes confirmation instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

me.add_evidenceA

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 decided โ€” not to capture intent or speculation. Pair with me.coaching_context to close evidence gaps. WHEN NOT TO CALL: to log every conversation turn; to record planning, ideas, or todos; on behalf of another user; without the user's awareness (they should know their progress is being recorded). BEHAVIOR: write-only, single insert. Auth: Bearer (Firebase ID token, any plan). UK/EU residency. Notes are visible only to the owning user and are surfaced on me.learning_path / me.coaching_context. Confirms the stage_slug + course_slug pair in the response so the user can see which stage was credited.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteYesEvidence note to append to the delegation boundary notes for this stage.
stage_idYesID of the stage to append the evidence note to.
course_slugYesSlug of the course the stage belongs to (e.g. 'agentic-fundamentals').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false, and the description adds behavioral details: 'write-only, single insert', auth requirements (Bearer token), residency (UK/EU), and visibility scope (visible only to owning user). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections and front-loaded purpose, but slightly lengthy. Every sentence adds value, so it earns a high score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters and an output schema, the description covers usage, behavior, auth, scope, and response details comprehensively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description enriches parameters by explaining that notes record concrete observations, persistence as UserStageEvidence rows, and confirmation of stage_slug + course_slug in response.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'append a free-text evidence note to a specific stage in the caller's active course.' It uses a specific verb (append) and resource (evidence note to a stage), and distinguishes from sibling tools like me.coaching_context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Includes explicit 'WHEN TO CALL' and 'WHEN NOT TO CALL' sections, specifying that it should be called after concrete observations, not for intent or speculation, and not for every conversation turn. Also mentions pairing with me.coaching_context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

me.await_steerA
Read-onlyIdempotent

Pro/Teams. BLOCK until the session owner posts the next steer event to a Governed Session from the AIDB Studio cockpit, 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 catches it. See the after_event_id and timeout_s parameter descriptions for the semantics. THE LOOP: finish a task -> post me.session_event handoff -> call me.await_steer -> on a steer, FIRST post me.session_event event_type=ack ('Started: '), then execute, then handoff, then call me.await_steer again; on timed_out, call again with the returned after_event_id. REQUIRES team mode on the session (toggled by the owner in the web app); owner-scoped, so foreign session ids read as not found. Read-only: this tool never writes events. REJECTION CODES (invalid_request): 'Session not found.' (not yours, or no such id); 'Team mode is off for this session.' (owner enables it on the session page). Auth: sign-in required, with an active Pro, Pro Plus, Teams, Enterprise, beta, or trial plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeout_sNoSeconds 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_idYesThe Governed Session to watch. Must be YOURS and have team_agents enabled; list sessions via me.sessions.
after_event_idNoCursor: 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and idempotent, and the description goes beyond them with blocking semantics, at-least-once cursor delivery, best-effort wake-up, final confirming read before timed_out, rejection codes, and auth requirements. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is long but carefully structured with labeled sections (THE LOOP, DELIVERY GUARANTEE, REJECTION CODES, Auth) and front-loads the blocking behavior. Minor redundancy exists between the opener's 'Pro/Teams' and the later Auth line, keeping it from a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a blocking, cursor-based polling tool, the description covers usage protocol, failure modes, delivery semantics, prerequisites, and auth. The existing output schema relieves it from describing return values, so nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter descriptions already document timeout clamping, cursor semantics, and session ownership. The description mostly refers the agent to those descriptions and adds only marginal behavior such as 'foreign session ids read as not found,' so it stays at the high-coverage baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a precise verb and resource: 'BLOCK until the session owner posts the next steer event to a Governed Session ... then return it.' This clearly differentiates await_steer from siblings like me.session_event (writes events) and me.sessions (lists sessions).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit end-to-end loop (handoff -> await_steer -> ack -> execute -> handoff), retry behavior on timed_out, and preconditions such as team mode, owner scoping, and plan entitlement. This is stronger than merely naming a usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

me.coaching_contextA
Read-onlyIdempotent

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 the user on principles they have already satisfied; on every conversation turn (state changes only when evidence is added). BEHAVIOR: read-only, idempotent. Auth: Bearer (any plan). Returns thin_stages list with stage slug, course slug, missing principles, evidence_count, and a coaching_note.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds 'read-only, idempotent' and auth requirements, offering slight extra context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is well-structured with sections for WHEN TO CALL, WHEN NOT TO CALL, BEHAVIOR. Each sentence provides value, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and an existing output schema, the description fully explains the return value (thin_stages list with stage slug, course slug, missing principles, evidence_count, coaching_note). No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters are defined, so schema coverage is effectively 100%. Baseline for 0 parameters is 4, and description does not need to add parameter information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns 'stages in the caller's active course where recorded evidence is thin relative to the stage's principle requirements'. It uses specific verb and resource, and distinguishes from siblings like me.add_evidence.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to call (e.g., 'what should I work on next') and when not to call ('to lecture the user on principles they have already satisfied; on every conversation turn'), plus pairing guidance with me.add_evidence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

me.learning_pathA
Read-onlyIdempotent

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, idempotent. Auth: Bearer (any plan, including basic). Returns user_email, course_slug, stages list with completion timestamps, certification block, and a next_stage hint.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds complementary behavioral details: 'Auth: Bearer <token> (any plan, including basic)', 'read-only, idempotent', and lists return fields. While the annotations cover the core safety profile, the description enriches context with authentication requirements and return structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured into clear sections (purpose, when to call, when not to call, behavior, auth, returns). It is front-loaded with the core purpose. Slightly verbose but not wasteful; every sentence adds value. A 4 reflects good conciseness and structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, an output schema, and clear annotations, the description provides complete context: purpose, usage guidelines, behavioral traits, authentication, and return fields. It fully covers what the agent needs to correctly select and invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters (0 parameters, 100% schema coverage). The description does not need to add parameter details. Baseline 4 is appropriate as no additional semantic value is required beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns 'the caller's Blueprint learning-path state' with specific fields (current course slug, stage progress, certification status, etc.). It distinguishes from sibling tools like 'me.coaching_context' by its explicit purpose of answering 'where am I' and 'am I Capstone-eligible' questions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit WHEN TO CALL scenarios (user asks 'where am I', 'what's next', 'am I Capstone-eligible', before suggesting next-step coaching) and WHEN NOT TO CALL (as a heartbeat, for another user's progress). This clearly guides the agent on appropriate invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

me.session_eventA

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 cockpit-originated by contract (the owner posts them from the AIDB Studio session surface) and are REFUSED here, so a timeline entry can never impersonate the human side of the loop. Every event posted here is durably stamped with its channel. REQUIRES team mode: the session must have team_agents enabled (toggled in the web app on the session page); posting to a standalone session is refused so non-team sessions stay byte-identical. Owner-scoped: foreign session ids read as not found. event_type: handoff | pushback | plan_preview | gate | ack. actor: pm | engineer | designer | system. Read events back via me.sessions(session_id=...). WHEN TO CALL: at every role handoff (who -> who, what was passed), when a role pushes back on another's output, when the PM's plan is previewed for the co-planning gate, and when a hard gate blocks on an irreversible side-effect. ack: the IDE agent confirms it STARTED working on a steer. Post it FIRST on receiving a steer (summary like 'Started: '), then execute, then post handoff with the result. WHEN NOT TO CALL: not a chat log: post decisions and transitions, not every message; never to record a steer (steers arrive FROM the cockpit via me.await_steer). REJECTION CODES (invalid_request): 'Session not found.' (not yours, or no such id); 'Team mode is off for this session.' (owner enables it on the session page); 'This session has reached its event limit (500).' (the shared volume brake: start a new session for further team events); 'summary must not be blank.' (empty summaries are refused); steer/human posts are refused with a pointer to the cockpit channel. Auth: sign-in required, with an active Pro, Pro Plus, Teams, Enterprise, beta, or trial plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorYesWho acted: pm | engineer | designer | system (`human` is reserved for the cockpit channel)
summaryYesOne-to-two sentence event summary (truncated to 500 chars) โ€” a decision or transition, not a chat message.
event_typeYeshandoff | pushback | plan_preview | gate | ack (ack = started working on a steer; `steer` itself is cockpit-only and refused on this channel)
session_idYesThe Governed Session to post to. Must be YOURS and have team_agents enabled; list sessions via me.sessions.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnlyHint=false and destructiveHint=false, so the description carries the full burden of behavioral disclosure. The description richly discloses mutation behavior, the durable channel stamp, team-mode refusal, owner scoping, the 500-event limit, blank-summary refusal, and auth/plan requirements. It even enumerates exact rejection messages. No contradiction with annotations is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average, but densely packed with actionable sections: channel provenance, requirements, event types, when to call, when not to call, rejection codes, and auth. The structure is clear and front-loaded with the core purpose. Some repetition exists (steer refusal appears multiple times), which costs a bit of conciseness, but every sentence carries real operational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write tool with sparse annotations and moderate parameter count, this description is complete: it covers prerequisites, permission model, failure modes, exact rejection strings, the sibling read-back path (me.sessions), and the relationship to me.await_steer. The output schema exists, so lack of return-value explanation is not a gap. An agent has everything needed to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds meaningful semantics beyond the schema: event_type is tied to specific call scenarios, actor 'human' is explicitly reserved for the cockpit, summary is framed as 'a decision or transition, not a chat message', and session_id must be owned and team-enabled. The description also adds operational guidance like 'List sessions via me.sessions' and 'ack = started working on a steer'. This substantially exceeds the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'append a TYPED TEAM EVENT to a Governed Session's timeline'. It clearly distinguishes this tool from siblings by stating it posts the AGENT-SIDE vocabulary only)Skip steer/human events, and explicitly contrasts itself with cockpit-originated channels. An agent can immediately tell what this tool does and what it is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit WHEN TO CALL conditions: role handoffs, pushbacks, plan previews, gates, and acks, with a concrete ack workflow ('Post it FIRST on receiving a steer... then execute, then post handoff'). It also gives WHEN NOT TO CALL guidance: not a chat logainer never record a steer, and references the correct alternative (me.await_steer for receiving steers). Sibling routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

me.sessionsA
Read-onlyIdempotent

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 timeline (light rows; fetch full results per run via me.validation_history(run_id=...)) and, for team sessions, events = the typed team-event log posted via me.session_event. Attach new runs by passing session_id to architect.validate, design.validate, or spec.validate. Sessions are created and managed in the web app at /app/sessions. Read-only. Auth: Bearer . Pro or Teams plan required.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoSession 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint. The description adds owner-scoping behavior ('ids you don't own answer Session not found'), error handling, and details on return structures for both modes. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear first sentence and enumerated modes. It is comprehensive but slightly verbose; however, all sentences contribute necessary context. It could be slightly shorter without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all necessary aspects: tool purpose, modes, input semantics, output structure, relationships to sibling tools, authentication, plan requirements, and error behavior. Given the complexity and the existence of an output schema, this is fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter session_id, and the schema description is thorough. The tool description echoes this information but does not add significant new semantics beyond what is already in the schema parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool lists or inspects the authenticated user's Governed Sessions, explaining that sessions are durable, owner-scoped containers grouping validation runs. It distinguishes two modes and implies the tool is distinct from siblings like me.validation_history and me.session_event by describing their relationships.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains when to use each mode: no arguments to list all sessions, session_id to inspect a specific session. It also directs the agent to alternatives for fetching full run results (me.validation_history) and for attaching runs (pass session_id to validate tools). Auth and plan requirements are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

me.validation_historyA
Read-onlyIdempotent

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 when your MCP client tool-call timed out before architect.validate, design.validate, or spec.validate returned. The run completes server-side and persists; the run_id is surfaced in the first progress notification of every validate call so you have the recovery handle even when your client gives up early. (2) repository=<name> returns the full per-run trend for that repository plus a regression diff between the latest two runs. (3) No arguments returns one summary per repository the user has validated, sorted by most recent. Use modes (2) or (3) BEFORE re-validating the same repository on either lens โ€” they tell you which principles or laws regressed since the last run, so you can focus the new review on what is actually changing. Auth: Bearer . Pro or Teams plan required.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of runs to return when scoped to a single repository. Capped at 50. Ignored when `run_id` is provided.
run_idNoSingle-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.
repositoryNoRepository 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint, idempotentHint, destructiveHint), the description explains behavioral details: returns Blueprint Readiness Score, letter grade, tier, and validator field; run_id returns persisted result_json; per-run authorization; and plan requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat lengthy but well-structured with clear sections for each mode. While every sentence adds value, it could be slightly more concise without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (three modes, three lenses, scores, auth requirements), the description is highly complete. It also mentions plan and authorization constraints, which are not covered by annotations or schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds significant semantic value: explains the recovery use case for run_id, repository scoping, default behavior, and mutual exclusivity of run_id and repository.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: returning validation run history for three lenses (architecture, design, spec) with three distinct lookup modes. It distinguishes itself from sibling tools like architect.validate by focusing on history retrieval, not execution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit usage guidelines are provided for each mode: run_id for recovering timed-out results, repository for per-repository trends with regression diff, and no arguments for per-repository summaries. It advises using modes (2) or (3) before re-validating to check regressions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

principles.getA
Read-onlyIdempotent

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 mode in natural language; prefer principles.list when you need every entry or every entry within a cluster. Returns error_payload on unknown slug for the lens.

ParametersJSON Schema
NameRequiredDescriptionDefault
lensNoWhich public doctrine the slug belongs to: 'architecture' (10 principles, default), 'surface' (8 design laws), or 'spec' (8 spec laws).architecture
slugYesStable slug of the principle (e.g. 'establish-trust-through-inspectability').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds that it returns error_payload on unknown slug, and explains the conditional fields per lens. This is useful context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded core purpose, no wasted words. Each sentence earns its place: purpose, parameter usage, and usage alternatives.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (inferred), the description adequately lists returned fields and error handling. It covers all necessary context for an agent to correctly select and invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description adds meaning by explaining the lens selects which doctrine, gives example values, and notes that slug comes from principles.list. It also clarifies that return fields differ by lens.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get one doctrine entry by stable slug' and specifies the resource (doctrine entry) and verb (get). It differentiates from siblings by explaining when to use principles.search or principles.list instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use this tool ('when you already have the exact slug from principles.list') and when to prefer alternatives ('prefer principles.search when the user describes a topic...'). Also mentions default lens and error behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

principles.listA
Read-onlyIdempotent

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, failure mode, or keyword in natural language. Prefer principles.get when you already know the exact slug and need full detail.

ParametersJSON Schema
NameRequiredDescriptionDefault
lensNoWhich public doctrine: 'architecture' = the 10 agentic principles (default), 'surface' = the 8 experience-design laws, 'spec' = the 8 spec-quality laws.architecture
clusterNoCluster slug to filter by (e.g. 'delegation', 'visibility', 'trust', 'orchestration'). Omit to return all principles.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds behavioral context about lens selection and cluster filtering, but does not go into details like pagination or return size.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with the purpose first, followed by usage guidance. Every sentence adds value; no wasted words. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the availability of output schema and annotations, the description is complete. It covers tool purpose, parameter usage, and when to use alternatives, leaving no major gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description enriches parameters by explaining the meaning of each lens option and providing concrete cluster slug examples, adding value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists Blueprint doctrine with stable slugs, titles, and clusters. It specifies three lenses and uses precise verbs like 'List' and 'selects'. It distinguishes itself from siblings such as principles.search and principles.get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises when to use this tool ('full inventory' or filtering by cluster) versus preferring principles.search (topic/keyword) or principles.get (exact slug), providing clear decision guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

principles.searchA
Read-onlyIdempotent

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: 'architecture' = the 10 agentic principles (default), 'surface' = the 8 experience-design laws, 'spec' = the 8 spec-quality laws, 'all' = all 26 (each result then names its lens). Laws also match on their eponym (e.g. 'Hick', 'Fitts').

ParametersJSON Schema
NameRequiredDescriptionDefault
lensNoWhich 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.architecture
limitNoMaximum number of results to return. Capped at server maximum.
queryYesFree-text search query matched against principle title, definition, rationale, and cluster.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnly and idempotent, but the description adds substantial behavioral detail: results are ranked by relevance, returns specific fields (title, cluster, definition, rationale, heuristics), lens behavior per doctrine, and eponym matching for laws (e.g., 'Hick', 'Fitts'). This goes well beyond the annotations and informs the agent of exact runtime behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively long but every sentence serves a purpose: purpose, examples, return fields, usage guidance, lens explanation, eponym matching. It is well-structured, starting with core functionality then diving into specifics, and avoids redundant wording. A slight trim could improve, but it remains efficient for the information conveyed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with an output schema (not shown here), the description already covers return content, usage, and parameter behavior. It mentions ranked relevance and lens selection, covering likely agent needs. It does not discuss pagination or error handling, but the schema mentions the limit cap, and such details are minor. Overall, an agent can call this correctly without missing critical information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with each parameter described, so baseline is 3. The description adds value by giving query examples, clarifying lens values with doctrine counts and defaults, and mentioning the limit is capped at server maximum (though schema already says that). It enriches understanding of how parameters affect results beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool searches Blueprint principles by free-text query and returns closest matches ranked by relevance, with concrete examples ('reversibility', 'approval flow'). It clearly distinguishes itself from principles.list by specifying when to prefer this over listing all principles, so an agent can differentiate it from sibling tools without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives direct guidance: 'Prefer this over principles.list when you have a specific topic in mind rather than wanting all principles.' It also provides typical use cases (design challenge, failure mode, keyword) and explains the lens parameter selects the doctrine, giving explicit when-to-use vs alternatives. No ambiguity remains about when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

signals.feedbackA

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 validate's output 1-5). WHEN NOT TO CALL: proactively, silently, or to substitute for signals.report. Never harvest contact info without explicit permission_to_follow_up=true. BEHAVIOR: write-only, no auth required (open to all callers). Stores one feedback record, at rest under UK/EU residency. contact_email is stored ONLY when permission_to_follow_up=true, and that fact is confirmed back in the response so the user can see the privacy boundary. When permission_to_follow_up=true AND a valid contact_email is given, and only then, it also opens a support inbox item so a human can reply, and the free-text fields are sent to OpenAI for triage (severity and a short summary). The contact_email field is never part of that request, so keep personal data out of the free text. In every other case nothing leaves the server.

ParametersJSON Schema
NameRequiredDescriptionDefault
surfaceNoWhich 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_typeNoWhat 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_helpedNoAsk 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_missingNoAsk the user: 'What was missing or could be improved?' Record their answer verbatim or paraphrased. Max 1000 chars.
contact_emailNoOnly 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_clarityNoAsk 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_againNoAsk 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_usefulnessNoAsk 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_upNoSet to true only if the user explicitly said they want a follow-up. Must be confirmed before storing contact_email.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the annotations. It discloses that the tool is write-only and open to all callers, stores data under UK/EU residency, only stores contact_email when permission_to_follow_up=true and confirms that back to the user, opens a support inbox item and sends free-text to OpenAI for triage only under specific conditions, and explicitly says personal data must stay out of free text. This is rich, actionable behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with clear sections (purpose, when to call, when not to call, behavior). It is front-loaded with the core purpose and each sentence adds necessary information. No fluff; every detail about privacy and data handling earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of 9 optional parameters and the presence of an output schema, the description covers all essential aspects: when to call, privacy boundaries, data residency, external processing, and the distinction from signals.report. Nothing an agent needs to correctly invoke the tool is missing. The output schema handles return values, so the description need not explain them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the conditional relationship between permission_to_follow_up and contact_email, and by warning to keep personal data out of free text. It also clarifies that category is captured, though the schema already lists it. This is more than the schema provides, so a 4 is warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('records') and a specific resource ('explicit free-text user feedback about the Blueprint, this tool surface, or a specific principle/example'). It also explicitly differentiates from the sibling signals.report by saying 'Use signals.report instead for value-moment metrics', so an agent can distinguish between the two without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description contains explicit 'WHEN TO CALL' and 'WHEN NOT TO CALL' sections. It specifies that the tool should only be called when the user explicitly requests feedback, gives concrete examples, names the alternative (signals.report) and the condition for it, and warns against proactive or silent use. This is unambiguous guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

signals.reportA

Pro/Teams โ€” 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 captures event_type, surface_used (mcp/web/cli), perceived_value (1-5), and an optional brief_context โ€” structured fields only, NO prompts or code stored. WHEN TO CALL: after architect.validate, design.validate, or spec.validate returns a clearly useful result AND the user has acknowledged the value (or you ask them "would you rate this 1-5?"). Each validator's response carries an explicit next_step instruction telling the agent to OFFER this call โ€” surface that offer to the user. WHEN NOT TO CALL: silently or without the user's awareness; on every validate (only after a clear value moment); to capture intent or speculative value. If the user declines, do not retry within the same session. BEHAVIOR: write-only, single insert into ValueEvent. Auth: Bearer , Pro or Teams plan required. UK/EU residency. Do NOT include proprietary code, prompt content, or PII in brief_context โ€” it surfaces in admin AI-visibility dashboards. Expect a 1-line acknowledgment in the response; the structured feedback is then aggregated server-side.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_sizeNoIf the user mentions their team size during the session, record it here. Do not ask for it explicitly โ€” only capture if volunteered.
event_typeYesPick 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_usedNoWhere 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_contextNo1โ€“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_stageNoInfer 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_valueNoAsk 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_recommendNoAsk the user: 'Would you recommend the Blueprint to a colleague?' Set true/false based on their answer. Only set if asked โ€” do not assume.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses write-only nature (single insert), auth requirements (Bearer, Pro/Teams, UK/EU), and constraints (no PII/code stored). Annotations are all false, so description carries full burden and does so thoroughly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with sections but somewhat lengthy. Could be tightened, but front-loads key info and has clear organization.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, output schema present, and complexity of usage, the description covers all necessary aspects: when/why, behavior, auth, constraints. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. Description provides general context but does not add significant meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the tool as recording a 'value moment' after a successful validate run or doctrine session, specifying example event types and contexts. It clearly distinguishes from sibling tools like signals.feedback.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Includes explicit WHEN TO CALL (after validate with user acknowledgment) and WHEN NOT TO CALL (silently, every validate, speculative) sections. Does not explicitly name sibling tools, but provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spec.validateA

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, decision trail, handoff completeness, doctrine-upfront, task traceability, risk and reversibility). ON CLIENT TIMEOUT โ€” DO NOT RETRY. Long-running LLM call (~60-180s at high reasoning effort, single-pass). The server mints a run_id, emits it in the FIRST progress event at t=0s (before the LLM call), and persists the run โ€” so on a client timeout, capture that run_id and call me.validation_history(run_id='') to fetch the persisted result instead of retrying (a retry re-runs the full 60-180s call). Runs appear in your validation-history dashboard tagged as the 'spec' dimension, distinct from the 'architecture' and 'surface' runs; pass repository to group them per project. Pass private_session=true to skip the stored run (persistence + recovery disabled); operational security + cost logs are still kept. v1 is single-pass: no certification or consensus mode yet (those stay architect.validate-only). Returns spec_classification (spec_document vs non_spec โ€” source code or UI artefacts are marked not_applicable, NOT failed; submit those to architect.validate or design.validate instead), per-law findings (verdict, severity_score 0-100, severity_class, cited evidence, recommendation), and severity-weighted readiness (score, grade, tier) computed by the SAME scorer the other two lenses use, so all three grade on one rubric. TESTABILITY IS THE FLOOR: a load-bearing requirement with no observable acceptance signal, or an irreversible step with no named human gate, is a production_blocker, not polish. WHEN TO CALL: the user wants a governance/quality review or a readiness grade on a spec they are about to build from (proposal, requirements, task plan). WHEN NOT TO CALL: built code or a rendered surface โ€” those return tier=not_applicable; use the sibling validators instead. INPUTS: send the FULL spec text verbatim as implementation_context (for an OpenSpec change, concatenate proposal.md + design.md + tasks.md + delta specs; no truncation, no 'โ€ฆ' placeholders โ€” they are read as literal content). Auth: sign-in required, with an active Pro, Pro Plus, Teams, Enterprise, beta, or trial plan. UK/EU residency; transient OpenAI processing (no-training); prompt-injection text inside the spec is treated as inert untrusted data. TYPED FAILURES: same as architect.validate (timed_out, rate_limited, dependency_unavailable, schema_mismatch โ€” each carries retryable + next_action); the services raise the identical typed envelopes on this lens. CALIBRATION DISCLOSURE: the scoring prompt is a v1 first-cut mirroring the architect's contract structure; its score calibration is not yet tuned against a corpus of real runs the way architect.validate was. Treat the grade as directional quality signal, not a certified verdict. DOCTRINE: the eight laws โ€” each law's definition, rationale, anti-patterns, and the validator questions this tool scores against โ€” live in content/spec-quality-laws.json (the what-to-build companion to the experience-design laws).

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNoWhat this spec is for (e.g. 'the closed-beta apply flow rework'). Adds evaluation context.
filesNoFile paths relevant to the spec, for context.
goalsNoSpecific quality goals to weight (e.g. 'ready for an agent to build unattended', 'tight scope').
repositoryNoProject/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_idNoOptional 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_sessionNoSet true to disable persistence AND run_id recovery 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_contextYesThe 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false) are far exceeded by the description's operational disclosures: the 60-180s single-pass runtime, the client-timeout protocol (DO NOT RETRY; capture run_id from the first progress event and fetch via validation_history), persistence semantics via private_session, typed failure envelopes, auth/plan requirements, UK/EU residency and no-training data handling, prompt-injection inertness, and the calibration disclosure that the v1 scorer is not yet tuned. Every claim is actionable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-organized and front-loaded: purpose and sibling differentiation lead, followed by the timeout protocol, return semantics, when-to-call, inputs/auth/failures, and calibration. Some density could be trimmed โ€” the GEP-M2 session detail substantially duplicates the schema's own explanation โ€” but the operational complexity justifies the length overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 7 params, no enums, a rich output schema, and complex operational behavior, the description covers the full lifecycle: preconditions (auth/plan), invocation (verbatim spec input), failure handling (typed failures plus the timeout recovery flow), and result semantics (spec_classification, not_applicable routing, shared scoring rubric, readiness grade). The output schema covers return values, so the description correctly summarizes rather than repeats them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the 3 baseline applies; the description then adds genuine value beyond the schema. It mandates sending implementation_context verbatim with no truncation or 'โ€ฆ' placeholders, specifies how to concatenate OpenSpec change bundles, explains that repository groups runs under the 'spec' dimension, and ties the run_id recovery protocol to the persistence behavior controlled by private_session. The no-truncation warning is load-bearing and absent from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states precisely that the tool performs a first-pass specification-quality review of a WRITTEN SPEC against the 8 laws of the Spec Quality Blueprint, with an explicit three-way differentiation from siblings: architect.validate scores built agentic ARCHITECTURE, design.validate scores the rendered SURFACE, and spec.validate scores the written intent. Scope is unambiguous โ€” the what-to-build lens applied before code exists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Contains explicit WHEN TO CALL and WHEN NOT TO CALL sections: call when the user wants a governance/quality review or readiness grade on a spec; do not call on built code or a rendered surface, which return tier=not_applicable. It also names the alternatives (architect.validate, design.validate) and routes non-spec inputs like source code or UI artefacts to the correct siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

team.summarizeA
Read-onlyIdempotent

Pro/Teams โ€” summarises the caller's tool-usage patterns and value signals over a configurable window (default 30 days). Returns tool_call_counts, top principles cited in validate runs, value_event_counts by event_type, and an aggregate readiness trend. 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 conversation turn (the summary is an explicit retrospective, not telemetry); to compare users (returns only the caller's own data). BEHAVIOR: read-only, idempotent over the same window. Aggregates from AIToolCallLog + ValueEvent + AIValidationRunLog. Pass private_session=true to bypass server-side logging for this summary call (the underlying historical data still exists; only this read is untracked). Auth: Bearer , Teams plan only; Pro and beta plans are refused. UK/EU residency.

ParametersJSON Schema
NameRequiredDescriptionDefault
days_backNoNumber of days of usage history to include in the summary.
private_sessionNoSet to true to skip logging this summary call.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive. The description adds depth: it names the data sources (AIToolCallLog, ValueEvent, AIValidationRunLog), explains that private_session bypasses only the read logging while historical data persists, and notes plan/residency restrictions (Teams only, UK/EU). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than a one-liner but structured with clear headings (WHEN TO CALL, WHEN NOT TO CALL, BEHAVIOR) and front-loaded purpose. Every sentence earns its place; the verbosity is justified by the tool's complexity and the need to clarify plan restrictions and private_session semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only aggregation tool with an output schema, the description covers the core question triggers, exclusions, data sources, authentication and plan requirements, and the private_session edge case. Nothing an agent needs to decide or execute a call correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (days_back, private_session) are fully described in the schema with defaults and purpose. The description re-echoes the window default but adds no new meaning beyond what the schema already provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('summarises') and resource (caller's tool-usage patterns and value signals) with configurable window and default. It clearly distinguishes this tool from all siblings by describing the unique aggregation and output fields, so an agent can tell it apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO CALL and WHEN NOT TO CALL sections give concrete trigger phrases ('how is the Blueprint helping me/my team') and exclusions (proactive use, every turn, comparing users). This is model guidance for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv1.2.1
    • Changedarchitect.validate1 field changed
      • changedInput schema / properties / private_session / description
        Previous value: -"Set to true to disable logging AND prior-run anchoring AND run_id recovery for this call. Use for private one-shots that don't participate in the iteration arc. Default false."New value: +"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."
    • Changeddesign.validate1 field changed
      • changedInput schema / properties / private_session / description
        Previous value: -"Set true to disable persistence AND run_id recovery for this call (a private one-shot that does not appear in the dashboard). Default false."New value: +"Set true to disable persistence AND run_id recovery 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."
    • Changedexamples.search1 field changed
      • addedInput schema / properties / pattern_family
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "tools-actions",
        +        "reasoning-reflection",
        +        "retrieval",
        +        "memory",
        +        "sampling-search",
        +        "multi-agent",
        +        "safety-routing",
        +        "specialty"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Filter to one agentic-pattern family. Implies patterns only, since no upstream cookbook example carries a family.",
        +  "title": "Pattern Family"
        +}
    • Changedprinciples.search1 field changed
      • addedInput schema / properties / lens
        Added value: +{
        +  "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.",
        +  "enum": [
        +    "architecture",
        +    "surface",
        +    "spec",
        +    "all"
        +  ],
        +  "title": "Lens",
        +  "type": "string"
        +}
    • Changedspec.validate1 field changed
      • changedInput schema / properties / private_session / description
        Previous value: -"Set true to disable persistence AND run_id recovery for this call (a private one-shot that does not appear in the dashboard). Default false."New value: +"Set true to disable persistence AND run_id recovery 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."
  2. 29 tool updatesv1.2.0
    • Changedarchitect.certify1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "architect_certify_runDictOutput",
        +  "type": "object"
        +}
    • Changedarchitect.validate4 fields changed
      • changedInput schema / properties / private_session / description
        Previous value: -"Set to true to disable all logging for this validation call."New value: +"Set to true to disable logging AND prior-run anchoring AND run_id recovery for this call. Use for private one-shots that don't participate in the iteration arc. Default false."
      • changedInput schema / properties / repository / description
        Previous value: -"Repository name or path for additional context."New value: +"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."
      • addedInput schema / properties / session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "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.",
        +  "title": "Session Id"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "validate_agent_architectureDictOutput",
        +  "type": "object"
        +}
    • Changedarchitect.validate_consensus2 fields changed
      • changedInput schema / properties / repository / description
        Previous value: -"Repository name or path. Lets the consensus row group into the per-project history view alongside single-shot validate runs."New value: +"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."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "validate_consensus_agent_architectureDictOutput",
        +  "type": "object"
        +}
    • Changedassets.list1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "list_agent_assetsDictOutput",
        +  "type": "object"
        +}
    • Changedclusters.get1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "get_clusterDictOutput",
        +  "type": "object"
        +}
    • Changedclusters.list1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "list_clustersDictOutput",
        +  "type": "object"
        +}
    • Addeddesign.validate
    • Changedexamples.get1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "get_exampleDictOutput",
        +  "type": "object"
        +}
    • Changedexamples.search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "search_examplesDictOutput",
        +  "type": "object"
        +}
    • Changedguides.get1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "get_application_guideDictOutput",
        +  "type": "object"
        +}
    • Changedguides.list1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "list_application_guidesDictOutput",
        +  "type": "object"
        +}
    • Changedguides.search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "search_application_guidesDictOutput",
        +  "type": "object"
        +}
    • Changedhandoffs.agency1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "request_agency_handoffDictOutput",
        +  "type": "object"
        +}
    • Changedhandoffs.operator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "request_operator_handoffDictOutput",
        +  "type": "object"
        +}
    • Changedhandoffs.partnership1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "request_partnership_handoffDictOutput",
        +  "type": "object"
        +}
    • Changedme.add_evidence1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "add_evidence_noteDictOutput",
        +  "type": "object"
        +}
    • Addedme.await_steer
    • Changedme.coaching_context1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "get_my_coaching_contextDictOutput",
        +  "type": "object"
        +}
    • Changedme.learning_path1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "get_my_learning_pathDictOutput",
        +  "type": "object"
        +}
    • Addedme.session_event
    • Addedme.sessions
    • Changedme.validation_history1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "get_my_validation_historyDictOutput",
        +  "type": "object"
        +}
    • Changedprinciples.get2 fields changed
      • addedInput schema / properties / lens
        Added value: +{
        +  "default": "architecture",
        +  "description": "Which public doctrine the slug belongs to: 'architecture' (10 principles, default), 'surface' (8 design laws), or 'spec' (8 spec laws).",
        +  "enum": [
        +    "architecture",
        +    "surface",
        +    "spec"
        +  ],
        +  "title": "Lens",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "get_principleDictOutput",
        +  "type": "object"
        +}
    • Changedprinciples.list2 fields changed
      • addedInput schema / properties / lens
        Added value: +{
        +  "default": "architecture",
        +  "description": "Which public doctrine: 'architecture' = the 10 agentic principles (default), 'surface' = the 8 experience-design laws, 'spec' = the 8 spec-quality laws.",
        +  "enum": [
        +    "architecture",
        +    "surface",
        +    "spec"
        +  ],
        +  "title": "Lens",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "list_principlesDictOutput",
        +  "type": "object"
        +}
    • Changedprinciples.search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "search_principlesDictOutput",
        +  "type": "object"
        +}
    • Changedsignals.feedback1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "submit_feedbackDictOutput",
        +  "type": "object"
        +}
    • Changedsignals.report3 fields changed
      • changedInput schema / properties / event_type / description
        Previous value: -"Pick the type that best matches what just happened: 'review_confidence' โ€” architect.validate returned aligned; 'runtime_risk_found' โ€” architect.validate 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."New value: +"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."
      • changedInput schema / properties / workflow_stage / description
        Previous value: -"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 architect.validate on existing code; 'shipping' โ€” preparing for production or deployment."New value: +"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."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "report_value_eventDictOutput",
        +  "type": "object"
        +}
    • Addedspec.validate
    • Changedteam.summarize1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "summarize_team_usageDictOutput",
        +  "type": "object"
        +}
  3. 6 tool updatesv1.1.1
    • Addedarchitect.certify
    • Changedarchitect.validate2 fields changed
      • changedInput schema / properties / focus_area / description
        Previous value: -"Narrow the evaluation to a specific principle cluster or slug (e.g. 'delegation-and-scope')."New value: +"Narrow the evaluation to a specific principle cluster or slug (e.g. 'delegation', 'visibility', 'establish-trust-through-inspectability')."
      • changedInput schema / properties / implementation_context / description
        Previous value: -"Code snippet, workflow description, or architecture summary to evaluate against Blueprint principles."New value: +"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."
    • Addedarchitect.validate_consensus
    • Changedclusters.get1 field changed
      • changedInput schema / properties / slug / description
        Previous value: -"Stable slug of the principle cluster (e.g. 'delegation-and-scope')."New value: +"Stable slug of the principle cluster (e.g. 'delegation', 'visibility', 'trust', 'orchestration')."
    • Addedme.validation_history
    • Changedprinciples.list1 field changed
      • changedInput schema / properties / cluster / description
        Previous value: -"Cluster slug to filter by (e.g. 'delegation-and-scope'). Omit to return all principles."New value: +"Cluster slug to filter by (e.g. 'delegation', 'visibility', 'trust', 'orchestration'). Omit to return all principles."
  4. 1 tool update
    • Changedprinciples.get1 field changed
      • changedInput schema / properties / slug / description
        Previous value: -"Stable slug of the principle (e.g. 'establish-a-delegation-boundary')."New value: +"Stable slug of the principle (e.g. 'establish-trust-through-inspectability')."
  5. 21 tool updatesv1.1.0
    • Changedarchitect.validate1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "validate_agent_architectureDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedassets.list1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "list_agent_assetsDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedclusters.get1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "get_clusterDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedclusters.list1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "list_clustersDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedexamples.get1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "get_exampleDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedexamples.search1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "search_examplesDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedguides.get1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "get_application_guideDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedguides.list1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "list_application_guidesDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedguides.search1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "search_application_guidesDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedhandoffs.agency1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "request_agency_handoffDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedhandoffs.operator1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "request_operator_handoffDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedhandoffs.partnership1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "request_partnership_handoffDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedme.add_evidence1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "add_evidence_noteDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedme.coaching_context1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "get_my_coaching_contextDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedme.learning_path1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "get_my_learning_pathDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedprinciples.get1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "get_principleDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedprinciples.list1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "list_principlesDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedprinciples.search1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "search_principlesDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedsignals.feedback10 fields changed
      • changedInput schema / properties / contact_email / description
        Previous value: -"Email address for follow-up. Only stored when permission_to_follow_up is true."New value: +"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."
      • changedInput schema / properties / permission_to_follow_up / description
        Previous value: -"Set to true to grant permission to store contact_email and receive a follow-up response."New value: +"Set to true only if the user explicitly said they want a follow-up. Must be confirmed before storing contact_email."
      • changedInput schema / properties / rating_clarity / description
        Previous value: -"Clarity rating from 1 (very unclear) to 5 (very clear)."New value: +"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."
      • changedInput schema / properties / rating_usefulness / description
        Previous value: -"Usefulness rating from 1 (not useful) to 5 (very useful)."New value: +"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."
      • changedInput schema / properties / surface / description
        Previous value: -"Surface or feature the feedback is about (e.g. 'principles', 'examples', 'mcp', 'coaching')."New value: +"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."
      • changedInput schema / properties / task_type / description
        Previous value: -"Type of task the user was doing (e.g. 'code-review', 'architecture-design', 'onboarding')."New value: +"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."
      • changedInput schema / properties / what_helped / description
        Previous value: -"What was most helpful. Max 1000 chars."New value: +"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."
      • changedInput schema / properties / what_missing / description
        Previous value: -"What was missing or could be improved. Max 1000 chars."New value: +"Ask the user: 'What was missing or could be improved?' Record their answer verbatim or paraphrased. Max 1000 chars."
      • changedInput schema / properties / would_use_again / description
        Previous value: -"Whether the user would use the Blueprint again for a similar task."New value: +"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."
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "submit_feedbackDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedsignals.report8 fields changed
      • changedInput schema / properties / brief_context / description
        Previous value: -"Optional short description of what was helpful. Max 500 chars. Do not include proprietary code or prompts."New value: +"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."
      • changedInput schema / properties / event_type / description
        Previous value: -"Type of value moment observed."New value: +"Pick the type that best matches what just happened: 'review_confidence' โ€” architect.validate returned aligned; 'runtime_risk_found' โ€” architect.validate 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."
      • changedInput schema / properties / perceived_value / description
        Previous value: -"Perceived value score from 1 (low) to 5 (high)."New value: +"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."
      • changedInput schema / properties / surface_used / description
        Previous value: -"Surface or page where the value was experienced."New value: +"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."
      • changedInput schema / properties / team_size / description
        Previous value: -"Size of the user's team, used for aggregated signal analysis."New value: +"If the user mentions their team size during the session, record it here. Do not ask for it explicitly โ€” only capture if volunteered."
      • changedInput schema / properties / workflow_stage / description
        Previous value: -"Current workflow stage."New value: +"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 architect.validate on existing code; 'shipping' โ€” preparing for production or deployment."
      • changedInput schema / properties / would_recommend / description
        Previous value: -"Whether the user would recommend the Blueprint to a colleague."New value: +"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."
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "report_value_eventDictOutput",
        -  "type": "object"
        -}New value: +null
    • Changedteam.summarize1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": true,
        -  "title": "summarize_team_usageDictOutput",
        -  "type": "object"
        -}New value: +null
  6. 21 tool updatesv1.0.0
    • First observedarchitect.validate
    • First observedassets.list
    • First observedclusters.get
    • First observedclusters.list
    • First observedexamples.get
    • First observedexamples.search
    • First observedguides.get
    • First observedguides.list
    • First observedguides.search
    • First observedhandoffs.agency
    • First observedhandoffs.operator
    • First observedhandoffs.partnership
    • First observedme.add_evidence
    • First observedme.coaching_context
    • First observedme.learning_path
    • First observedprinciples.get
    • First observedprinciples.list
    • First observedprinciples.search
    • First observedsignals.feedback
    • First observedsignals.report
    • First observedteam.summarize

TDQS

A4.3/5.0

Scored across 29 tools

Disambiguation4/5

Tools are cleanly separated by domain namespaces (examples, principles, clusters, guides, architect, design, spec, me, handoffs), and each tool targets a distinct resource or action. The only mild ambiguities are signals.feedback vs signals.report and the three search tools, but their descriptions clearly delineate when to use which.

Naming Consistency4/5

The dominant pattern is <domain>.<action> in snake_case (examples.get, principles.search, architect.validate), which is predictable and readable. Minor deviations include me.sessions (plural noun), signals.feedback/report (noun forms), and handoffs.operator/partnership/agency (category nouns), but these do not seriously undermine consistency.

Tool Count2/5

At 29 tools, the server exceeds the 25+ threshold for 'too many' and spans ten distinct namespaces, making the surface heavy for a single MCP server. Each tool has a legitimate purpose, but the count will feel overwhelming, especially with many tools gated behind Pro/Teams plans.

Completeness4/5

The doctrine discovery surface (principles, clusters, examples, guides, assets), all three validation lenses, coaching/learning progress, session history, and human handoffs are well covered. Obvious gaps include the lack of consensus and certification modes for design.validate and spec.validate, and no MCP-side session creation, but these are documented as v1 limitations or web-app responsibilities.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    A Model Context Protocol server that fetches up-to-date, version-specific documentation and code examples from libraries directly into LLM prompts, helping developers get accurate answers without outdated or hallucinated information.
    2
    354,384 npm
    62,433
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    The interface protocol for AI agents. 8 kernel primitives + 16 stdlib operations to operate any interface. Forge once, run forever โ€” zero AI at runtime. 81 skills across 41 sites.
    11
    18
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Licensed, rights-cleared content for AI agents, 17 tools to discover, license, retrieve, and verify expert content with on-chain proof and EU AI Act Article 53 support.
    8
    255 npm
    1
    MIT