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. 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. Dates show when Glama detected each change.

  1. 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"
      +}
  2. 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"
      +]
  3. 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."
  4. 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"
      +}
  5. First observed

TDQS

A3.7/5.0
Behavior1/5

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

The description is unusually rich about the human-decision block, valid terminal states, attribution requirements, and successful DECLINED/NEEDS_EXPLANATION outcomes. However, it says 'Register one Build Intent', instructs the agent to 'record them', and the human_decision.reason schema says the reason is 'Recorded verbatim in BUILD-APPROVAL.json' — while the annotations declare readOnlyHint=true. This is a direct annotation contradiction, so per the rubric the score is 1.

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 dense and information-packed with little filler, but it is delivered as a long run-on paragraph with a very long noun-list sentence and all-caps directives. It is front-loaded with the core purpose, but bullet structure would have made the blocking and success-state behaviors far easier for an agent to parse.

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 gate tool with no output schema, the description covers the mechanical verdict fields (invariants passed, license basis, execution authority, terminal state, artifact destination) and the no-human-decision blocked response. Combined with the fully described input schema, the agent has almost everything needed to invoke the tool correctly.

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 semantic framing beyond the schema: it groups intent fields as evidence (what was found, what SHPBL already has, what new capability appears, why neither parent alone, what tests would prove it) and stresses the quality-gate and path-resolution behaviors. It still leaves exact field syntax to the schema, which 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 uses a specific verb+resource: 'Register one Build Intent', and positions it as 'the gate between discovery and creation'. It is explicitly distinguished from creation/compilation siblings by the rule that every COMPOSE, SPECIALIZE and CREATE must pass through this tool first.

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?

It clearly states when this tool is mandatory: before any source is written, and before every COMPOSE, SPECIALIZE or CREATE. It also gives the blocking checkpoint behavior and when to stop and wait for a human. It does not explicitly name the alternative tool to call after approval, so it stops short of full when-not/alternative routing.

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.

TDQS

A3.7/5.0
Disambiguation3/5

Most tools have distinct roles, but the capability-discovery cluster is genuinely confusable: compose_capability calls itself 'the harvest lane' while harvest_repo is 'the harvest,' and evaluate_repo with a key also identifies candidates and composes — an agent must read long descriptions carefully to pick correctly. The free/key mode-switching also makes each tool's effective behavior conditional, raising misselection risk.

Naming Consistency4/5

The dominant pattern is verb_noun (build_intent, evaluate_repo, fix_repo, harvest_repo, list_repos, pin_source, run_contract, run_gauntlet, write_to_repo), and the library_document/library_index/library_search trio follows a deliberate resource-prefix convention. A few outliers break the pattern — welcome (bare verb), selfcheck_mcp, and subscription_status — but they are a small minority and still readable.

Tool Count4/5

At 17 tools the set is slightly past the ideal 3-15 range, but the domain genuinely spans an audit pipeline, a capability library, run orchestration, repo write-back, and billing/onboarding meta-tools. Roughly a third are lightweight informational endpoints (welcome, method_protocol, run_contract, library_index, subscription_status, selfcheck_mcp), which adds surface area, but each has a distinct job and none is redundant.

Completeness4/5

The lifecycle is well covered: pin_source → evaluate_repo → fix_repo → harvest_repo → compose_capability → write_to_repo, with run_gauntlet orchestrating the whole path and run_contract/method_protocol providing gates and discipline. Minor gaps exist — write_to_repo is create-only with no PR update/merge/close, and past run state is only resumable via ledger_digest — but there are no dead ends.

Resources