Skip to main content
Glama

SHPBL: Repository Audit & Repair

Register a Build Intent and resolve its licence

build_intent
Read-onlyIdempotent

The gate between discovery and creation, and the human checkpoint in front of it. Register one Build Intent — what you found in the host, what SHPBL already possesses, what new software becomes possible, why neither parent does it alone, and the tests that would prove it — and this returns the mechanical verdict: the invariants it passed, whether it rests on SHPBL's licensed reusable capability, whether this caller may execute the foundry, the terminal state to report, and where an authorised artifact may come to rest. THE CHECKPOINT BLOCKS: without human_decision carrying an attributed decision from the person, this returns the proposal in the words to say to them and nothing else — no verdict, no read, no record — and you end your turn and wait. No answer yet is NOT_YET_ASKED, never DECLINED. A decision attributed to you, to a model, to a policy or to a default is refused where the server can recognise it as such; any other name is recorded and attributed, not verified, and the authorization says which — account when the name matches the key's account holder, attested otherwise. DECLINED and NEEDS_EXPLANATION are successful outcomes: record them, build the approved siblings, and do not report a declined proposal as a failed step. Free to call at every level. Every COMPOSE, SPECIALIZE and CREATE must pass through this before any source is written; never assume authority and never write a refused artifact yourself.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
keyNoYour SHPBL Practitioner key (shpbl_mcp_…). Optional if your client sends it as the `Authorization: Bearer …` header.
intentYesThe Build Intent record; every field it asks for is part of the evidence, and each field carries its own description in this schema. Required: `build_intent_id`, `proposed_artifact_id`, `proposed_name`, `display_name`, `what_it_gives_you`, `why_this_repo`, `proposed_type`, `host_repository`, `host_source_paths`, `host_behavior`, `host_problem`, `new_behavior`, `novelty_statement`, `planned_interface`. `display_name`, `what_it_gives_you` and `why_this_repo` are quality gates, not presentation: if you cannot name the software and say what new ability it gives this repository and why this repository, the proposal is refused. Tests are mandatory in effect: at least one entry across `planned_unit_tests`, `planned_behavior_tests` and `planned_integration_tests` (the aliases `planned_tests`, `unit_tests`, `behavior_tests` and `integration_tests` are folded into those three). Every path in `host_source_paths` is resolved against the real tree before anything is authorised — a path that is not there refuses the intent.
cml_licenseNoThe licence key from a purchased Complete Master Library. Perpetual rights to that release count as execution authority on their own — no subscription needed.
github_tokenNoOptional GitHub token (Contents: read) so the gate can read the host tree and prove the cited paths exist. Not needed if you pass `host_source_manifest`.
governor_keyNoGovernor authority. Only a Governor-resolved call may stage an artifact for SHPBL's global corpus.
human_decisionNoThe person's decision on this proposal. Step 9 is a blocking checkpoint: without an attributed human decision this tool returns the words to say and nothing else, and you end your turn there. Do not send a decision the person did not make.
host_source_manifestNoThe `HOST-SOURCE-MANIFEST.json` from `pin_source` or `tools/source-manifest.mjs`, as JSON text or an object. Offline runs must send this: the gate recomputes its digest and resolves every cited path against its entries. An edited or invented digest is refused.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / intent / properties / capability_contract
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "approval_id": {
      +      "default": "",
      +      "maxLength": 160,
      +      "type": "string"
      +    },
      +    "approved_by": {
      +      "default": "",
      +      "maxLength": 160,
      +      "type": "string"
      +    },
      +    "artifact_id": {
      +      "maxLength": 160,
      +      "minLength": 3,
      +      "type": "string"
      +    },
      +    "behavioral_promise": {
      +      "description": "The whole promise, complete. If the promise names six lifecycle stages, all six are in scope for green.",
      +      "maxLength": 4000,
      +      "minLength": 40,
      +      "type": "string"
      +    },
      +    "capability_name": {
      +      "description": "What a person calls it.",
      +      "maxLength": 160,
      +      "minLength": 3,
      +      "type": "string"
      +    },
      +    "claims": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "claim_id": {
      +            "maxLength": 120,
      +            "minLength": 2,
      +            "type": "string"
      +          },
      +          "host_evidence": {
      +            "default": [],
      +            "items": {
      +              "maxLength": 400,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 60,
      +            "type": "array"
      +          },
      +          "kinds": {
      +            "items": {
      +              "enum": [
      +                "happy-path",
      +                "failure-path",
      +                "boundary",
      +                "lifecycle",
      +                "provenance",
      +                "integration"
      +              ],
      +              "type": "string"
      +            },
      +            "maxItems": 6,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "lifecycle_stage": {
      +            "default": "",
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "observable_acceptance": {
      +            "description": "How anyone else would tell whether this claim holds. Not 'it works' — the observation that decides it.",
      +            "maxLength": 2000,
      +            "minLength": 10,
      +            "type": "string"
      +          },
      +          "owned_capabilities": {
      +            "default": [],
      +            "items": {
      +              "maxLength": 200,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 60,
      +            "type": "array"
      +          },
      +          "requirement": {
      +            "default": "required",
      +            "description": "Optional claims may remain incomplete without blocking green — but only if they were marked optional before the build began.",
      +            "enum": [
      +              "required",
      +              "optional"
      +            ],
      +            "type": "string"
      +          },
      +          "statement": {
      +            "description": "What the capability does, stated so it can be observed.",
      +            "maxLength": 2000,
      +            "minLength": 10,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "claim_id",
      +          "statement",
      +          "kinds",
      +          "observable_acceptance"
      +        ],
      +        "type": "object"
      +      },
      +      "maxItems": 200,
      +      "minItems": 1,
      +      "type": "array"
      +    },
      +    "contract_version": {
      +      "const": "SHPBL-CAPABILITY-CONTRACT/1.0.0",
      +      "default": "SHPBL-CAPABILITY-CONTRACT/1.0.0",
      +      "type": "string"
      +    },
      +    "failure_behavior": {
      +      "description": "What it does when it cannot do what it promised. Silence is not failure behaviour.",
      +      "maxLength": 4000,
      +      "minLength": 10,
      +      "type": "string"
      +    },
      +    "host_behaviors": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "behavior": {
      +            "description": "What the host repository already does, in behavioural terms.",
      +            "maxLength": 2000,
      +            "minLength": 10,
      +            "type": "string"
      +          },
      +          "must_preserve": {
      +            "default": "",
      +            "description": "The mechanics of this host behaviour the artifact must actually reconstruct, not merely reference.",
      +            "maxLength": 2000,
      +            "type": "string"
      +          },
      +          "source_lines": {
      +            "default": [],
      +            "items": {
      +              "minimum": 1,
      +              "type": "integer"
      +            },
      +            "maxItems": 60,
      +            "type": "array"
      +          },
      +          "source_paths": {
      +            "description": "The host files this behaviour was read from. A behaviour with no cited path is prose, not evidence.",
      +            "items": {
      +              "maxLength": 400,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 60,
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "source_symbols": {
      +            "default": [],
      +            "description": "The functions, classes or exports inside those files, where you can name them.",
      +            "items": {
      +              "maxLength": 200,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "maxItems": 60,
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "behavior",
      +          "source_paths"
      +        ],
      +        "type": "object"
      +      },
      +      "maxItems": 60,
      +      "minItems": 1,
      +      "type": "array"
      +    },
      +    "host_repository": {
      +      "maxLength": 300,
      +      "minLength": 3,
      +      "type": "string"
      +    },
      +    "inputs": {
      +      "items": {
      +        "maxLength": 400,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "maxItems": 80,
      +      "minItems": 1,
      +      "type": "array"
      +    },
      +    "lifecycle_stages": {
      +      "default": [],
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "entered_from": {
      +            "default": "",
      +            "maxLength": 120,
      +            "type": "string"
      +          },
      +          "stage": {
      +            "maxLength": 120,
      +            "minLength": 2,
      +            "type": "string"
      +          },
      +          "what_happens": {
      +            "maxLength": 1000,
      +            "minLength": 5,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "stage",
      +          "what_happens"
      +        ],
      +        "type": "object"
      +      },
      +      "maxItems": 40,
      +      "type": "array"
      +    },
      +    "optional_enhancements": {
      +      "default": [],
      +      "description": "Declared before the build. An enhancement invented afterwards to explain a gap is not optional, it is missing.",
      +      "items": {
      +        "maxLength": 600,
      +        "minLength": 3,
      +        "type": "string"
      +      },
      +      "maxItems": 60,
      +      "type": "array"
      +    },
      +    "outputs": {
      +      "items": {
      +        "maxLength": 400,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "maxItems": 80,
      +      "minItems": 1,
      +      "type": "array"
      +    },
      +    "owned_capabilities": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "capability_id": {
      +            "maxLength": 200,
      +            "minLength": 2,
      +            "type": "string"
      +          },
      +          "primitive": {
      +            "default": "",
      +            "maxLength": 80,
      +            "type": "string"
      +          },
      +          "role": {
      +            "default": "support",
      +            "enum": [
      +              "lead",
      +              "support"
      +            ],
      +            "type": "string"
      +          },
      +          "unit_class": {
      +            "default": "UNKNOWN",
      +            "enum": [
      +              "PURE",
      +              "SEAMED",
      +              "PORTED",
      +              "UNKNOWN"
      +            ],
      +            "type": "string"
      +          },
      +          "what_it_contributes": {
      +            "default": "",
      +            "maxLength": 2000,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "capability_id"
      +        ],
      +        "type": "object"
      +      },
      +      "maxItems": 60,
      +      "minItems": 1,
      +      "type": "array"
      +    },
      +    "provenance_behavior": {
      +      "description": "What lineage the artifact itself records at runtime, and what it can answer about where it came from.",
      +      "maxLength": 4000,
      +      "minLength": 10,
      +      "type": "string"
      +    },
      +    "seams": {
      +      "default": [],
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "kind": {
      +            "enum": [
      +              "state",
      +              "io",
      +              "model",
      +              "randomness",
      +              "network",
      +              "filesystem",
      +              "persistence",
      +              "time",
      +              "concurrency"
      +            ],
      +            "type": "string"
      +          },
      +          "port": {
      +            "default": "",
      +            "maxLength": 200,
      +            "type": "string"
      +          },
      +          "test_strategy": {
      +            "default": "recorded",
      +            "enum": [
      +              "real",
      +              "recorded",
      +              "injected-fake"
      +            ],
      +            "type": "string"
      +          },
      +          "what": {
      +            "maxLength": 1000,
      +            "minLength": 5,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "kind",
      +          "what"
      +        ],
      +        "type": "object"
      +      },
      +      "maxItems": 40,
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "artifact_id",
      +    "capability_name",
      +    "behavioral_promise",
      +    "host_repository",
      +    "host_behaviors",
      +    "owned_capabilities",
      +    "inputs",
      +    "outputs",
      +    "failure_behavior",
      +    "provenance_behavior",
      +    "claims"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / intent / properties / reuse_declaration
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "carry_into_artifact": {
      +      "default": [],
      +      "description": "The licence and notice files copied into the artifact's `LICENSES/` folder.",
      +      "items": {
      +        "maxLength": 400,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "maxItems": 40,
      +      "type": "array"
      +    },
      +    "declaration_version": {
      +      "const": "SHPBL-REUSE-DECLARATION/1.0.0",
      +      "default": "SHPBL-REUSE-DECLARATION/1.0.0",
      +      "type": "string"
      +    },
      +    "declared_by": {
      +      "description": "The person who made that declaration. A model, an agent, a policy or a default is refused.",
      +      "maxLength": 160,
      +      "minLength": 2,
      +      "type": "string"
      +    },
      +    "license": {
      +      "description": "The licence as detected in the tree or as stated by the upstream project — e.g. `MIT`, `Apache-2.0`, `AGPL-3.0`.",
      +      "maxLength": 200,
      +      "minLength": 2,
      +      "type": "string"
      +    },
      +    "license_files": {
      +      "default": [],
      +      "description": "The licence and notice files found in the scoped tree.",
      +      "items": {
      +        "maxLength": 400,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "maxItems": 40,
      +      "type": "array"
      +    },
      +    "note": {
      +      "default": "",
      +      "maxLength": 2000,
      +      "type": "string"
      +    },
      +    "obligations": {
      +      "default": [],
      +      "description": "What must be preserved: attribution, notice retention, source disclosure, licence propagation.",
      +      "items": {
      +        "maxLength": 600,
      +        "minLength": 2,
      +        "type": "string"
      +      },
      +      "maxItems": 40,
      +      "type": "array"
      +    },
      +    "reuse_permitted": {
      +      "description": "The human declaration. False is a legal answer and stops the composition; absent is not an answer at all.",
      +      "type": "boolean"
      +    },
      +    "upstream_project": {
      +      "description": "The project the behaviour is being reused from, as `owner/repo` or its published name.",
      +      "maxLength": 300,
      +      "minLength": 3,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "upstream_project",
      +    "license",
      +    "reuse_permitted",
      +    "declared_by"
      +  ],
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • removedInput schema / properties / intent / required
      Removed value: -[
      -  "build_intent_id",
      -  "proposed_artifact_id",
      -  "proposed_name",
      -  "proposed_type",
      -  "display_name",
      -  "what_it_gives_you",
      -  "why_this_repo",
      -  "host_repository",
      -  "host_source_paths",
      -  "host_behavior",
      -  "host_problem",
      -  "new_behavior",
      -  "novelty_statement",
      -  "planned_interface"
      -]
  3. Changed2 schema fields changed
    • addedInput schema / properties / human_decision
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The person's decision on this proposal. Step 9 is a blocking checkpoint: without an attributed human decision this tool returns the words to say and nothing else, and you end your turn there. Do not send a decision the person did not make.",
      +  "properties": {
      +    "decided_by": {
      +      "description": "The person who made this decision, as they identify themselves. An agent, a model, a policy or a default is not a person and is refused.",
      +      "maxLength": 120,
      +      "type": "string"
      +    },
      +    "decision": {
      +      "description": "Exactly one of APPROVED, DECLINED, NEEDS_EXPLANATION, NOT_YET_ASKED or HUMAN_APPROVAL_DELEGATED. Use NOT_YET_ASKED while you have not put the proposal to the person — never DECLINED, which is their answer, not the absence of one.",
      +      "maxLength": 40,
      +      "minLength": 3,
      +      "type": "string"
      +    },
      +    "delegation_scope": {
      +      "description": "For HUMAN_APPROVAL_DELEGATED only: the authority the named person delegated for this run. Delegation without a scope is refused.",
      +      "maxLength": 600,
      +      "type": "string"
      +    },
      +    "reason": {
      +      "description": "What they said, where they gave a reason. Recorded verbatim in BUILD-APPROVAL.json.",
      +      "maxLength": 2000,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "decision"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / intent / properties / opportunity_id
      Added value: +{
      +  "maxLength": 120,
      +  "type": "string"
      +}
  4. Changed5 schema fields changed
    • changedInput schema / properties / intent / description
      Previous value: -"The Build Intent record; every field it asks for is part of the evidence, and each field carries its own description in this schema. Required: `build_intent_id`, `proposed_artifact_id`, `proposed_name`, `proposed_type`, `host_repository`, `host_source_paths`, `host_behavior`, `host_problem`, `new_behavior`, `novelty_statement`, `planned_interface`. Tests are mandatory in effect: at least one entry across `planned_unit_tests`, `planned_behavior_tests` and `planned_integration_tests` (the aliases `planned_tests`, `unit_tests`, `behavior_tests` and `integration_tests` are folded into those three). Every path in `host_source_paths` is resolved against the real tree before anything is authorised — a path that is not there refuses the intent."New value: +"The Build Intent record; every field it asks for is part of the evidence, and each field carries its own description in this schema. Required: `build_intent_id`, `proposed_artifact_id`, `proposed_name`, `display_name`, `what_it_gives_you`, `why_this_repo`, `proposed_type`, `host_repository`, `host_source_paths`, `host_behavior`, `host_problem`, `new_behavior`, `novelty_statement`, `planned_interface`. `display_name`, `what_it_gives_you` and `why_this_repo` are quality gates, not presentation: if you cannot name the software and say what new ability it gives this repository and why this repository, the proposal is refused. Tests are mandatory in effect: at least one entry across `planned_unit_tests`, `planned_behavior_tests` and `planned_integration_tests` (the aliases `planned_tests`, `unit_tests`, `behavior_tests` and `integration_tests` are folded into those three). Every path in `host_source_paths` is resolved against the real tree before anything is authorised — a path that is not there refuses the intent."
    • addedInput schema / properties / intent / properties / display_name
      Added value: +{
      +  "maxLength": 120,
      +  "minLength": 3,
      +  "type": "string"
      +}
    • addedInput schema / properties / intent / properties / what_it_gives_you
      Added value: +{
      +  "maxLength": 2000,
      +  "minLength": 25,
      +  "type": "string"
      +}
    • addedInput schema / properties / intent / properties / why_this_repo
      Added value: +{
      +  "maxLength": 2000,
      +  "minLength": 25,
      +  "type": "string"
      +}
    • changedInput schema / properties / intent / required
      Previous value: -[
      -  "build_intent_id",
      -  "proposed_artifact_id",
      -  "proposed_name",
      -  "proposed_type",
      -  "host_repository",
      -  "host_source_paths",
      -  "host_behavior",
      -  "host_problem",
      -  "new_behavior",
      -  "novelty_statement",
      -  "planned_interface"
      -]New value: +[
      +  "build_intent_id",
      +  "proposed_artifact_id",
      +  "proposed_name",
      +  "proposed_type",
      +  "display_name",
      +  "what_it_gives_you",
      +  "why_this_repo",
      +  "host_repository",
      +  "host_source_paths",
      +  "host_behavior",
      +  "host_problem",
      +  "new_behavior",
      +  "novelty_statement",
      +  "planned_interface"
      +]
  5. Changed3 schema fields changed
    • addedInput schema / properties / github_token
      Added value: +{
      +  "description": "Optional GitHub token (Contents: read) so the gate can read the host tree and prove the cited paths exist. Not needed if you pass `host_source_manifest`.",
      +  "maxLength": 300,
      +  "minLength": 8,
      +  "type": "string"
      +}
    • addedInput schema / properties / host_source_manifest
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 4000000,
      +      "minLength": 2,
      +      "type": "string"
      +    },
      +    {
      +      "additionalProperties": {},
      +      "type": "object"
      +    }
      +  ],
      +  "description": "The `HOST-SOURCE-MANIFEST.json` from `pin_source` or `tools/source-manifest.mjs`, as JSON text or an object. Offline runs must send this: the gate recomputes its digest and resolves every cited path against its entries. An edited or invented digest is refused."
      +}
    • changedInput schema / properties / intent / description
      Previous value: -"The Build Intent record; every field it asks for is part of the evidence, and each field carries its own description in this schema. Required: `build_intent_id`, `proposed_artifact_id`, `proposed_name`, `proposed_type`, `host_repository`, `host_source_paths`, `host_behavior`, `host_problem`, `new_behavior`, `novelty_statement`, `planned_interface`. Tests are mandatory in effect: at least one entry across `planned_unit_tests`, `planned_behavior_tests` and `planned_integration_tests` (the aliases `planned_tests`, `unit_tests`, `behavior_tests` and `integration_tests` are folded into those three)."New value: +"The Build Intent record; every field it asks for is part of the evidence, and each field carries its own description in this schema. Required: `build_intent_id`, `proposed_artifact_id`, `proposed_name`, `proposed_type`, `host_repository`, `host_source_paths`, `host_behavior`, `host_problem`, `new_behavior`, `novelty_statement`, `planned_interface`. Tests are mandatory in effect: at least one entry across `planned_unit_tests`, `planned_behavior_tests` and `planned_integration_tests` (the aliases `planned_tests`, `unit_tests`, `behavior_tests` and `integration_tests` are folded into those three). Every path in `host_source_paths` is resolved against the real tree before anything is authorised — a path that is not there refuses the intent."
  6. Changed9 schema fields changed
    • changedInput schema / properties / intent / description
      Previous value: -"The Build Intent record. Every field it asks for is part of the evidence."New value: +"The Build Intent record; every field it asks for is part of the evidence, and each field carries its own description in this schema. Required: `build_intent_id`, `proposed_artifact_id`, `proposed_name`, `proposed_type`, `host_repository`, `host_source_paths`, `host_behavior`, `host_problem`, `new_behavior`, `novelty_statement`, `planned_interface`. Tests are mandatory in effect: at least one entry across `planned_unit_tests`, `planned_behavior_tests` and `planned_integration_tests` (the aliases `planned_tests`, `unit_tests`, `behavior_tests` and `integration_tests` are folded into those three)."
    • addedInput schema / properties / intent / properties / behavior_tests
      Added value: +{
      +  "description": "Alias for `planned_behavior_tests`.",
      +  "items": {
      +    "maxLength": 400,
      +    "type": "string"
      +  },
      +  "maxItems": 100,
      +  "type": "array"
      +}
    • addedInput schema / properties / intent / properties / behaviour_tests
      Added value: +{
      +  "description": "Alias for `planned_behavior_tests`.",
      +  "items": {
      +    "maxLength": 400,
      +    "type": "string"
      +  },
      +  "maxItems": 100,
      +  "type": "array"
      +}
    • addedInput schema / properties / intent / properties / integration_tests
      Added value: +{
      +  "description": "Alias for `planned_integration_tests`.",
      +  "items": {
      +    "maxLength": 400,
      +    "type": "string"
      +  },
      +  "maxItems": 100,
      +  "type": "array"
      +}
    • addedInput schema / properties / intent / properties / planned_behavior_tests / description
      Added value: +"The behaviour tests that would prove it."
    • addedInput schema / properties / intent / properties / planned_integration_tests / description
      Added value: +"The integration tests that would prove it."
    • addedInput schema / properties / intent / properties / planned_tests
      Added value: +{
      +  "description": "Alias. An unclassified list of planned tests: each entry is filed as unit, behaviour or integration from its own wording, and counts towards the test invariant.",
      +  "items": {
      +    "maxLength": 400,
      +    "type": "string"
      +  },
      +  "maxItems": 300,
      +  "type": "array"
      +}
    • addedInput schema / properties / intent / properties / planned_unit_tests / description
      Added value: +"The unit tests that would prove it. One of the three planned-test arrays must be non-empty or the gate fails."
    • addedInput schema / properties / intent / properties / unit_tests
      Added value: +{
      +  "description": "Alias for `planned_unit_tests`.",
      +  "items": {
      +    "maxLength": 400,
      +    "type": "string"
      +  },
      +  "maxItems": 100,
      +  "type": "array"
      +}
  7. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint), the description discloses critical behavioral traits: the blocking checkpoint without human_decision, attribution rules (refusing model/policy/default names), the treatment of DECLINED and NEEDS_EXPLANATION as successful outcomes, and the requirement to record and build approved siblings. 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.

Conciseness3/5

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

The description is lengthy and uses poetic metaphor ('gate between discovery and creation') that could be trimmed. However, it is well-structured, covering purpose, behavioral rules, and constraints in a logical flow. There is no wasted redundancy, but it could be more concise without losing 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?

Given the tool's complexity, the lack of an output schema, and the richness of parameters, the description is remarkably complete. It explains what the tool returns, when it blocks, how to handle decisions, and the expected follow-up actions. An agent has enough context to call this correctly without additional external knowledge.

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%, so the baseline is 3. The description adds meaningful context for parameters like human_decision (blocking behavior, decision values) and intent (required fields as quality gates, test foldings), which the schema descriptions do not fully convey. It elevates the semantics slightly, but the schema already carries most parameter meaning.

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 title and description clearly state the tool's purpose: register a Build Intent and resolve its licence, returning a mechanical verdict. It distinguishes itself from siblings by declaring itself as the mandatory gate before COMPOSE, SPECIALIZE, and CREATE operations, and names the 'human checkpoint' role explicitly.

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 ('Every COMPOSE, SPECIALIZE and CREATE must pass through this before any source is written'), when not to use it ('never assume authority and never write a refused artifact yourself'), and details the blocking checkpoint behavior without a human_decision, including ending the turn and waiting.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources