Skip to content

D5-S14 — Mcp: the frozen catalogue and its startup checks #182

Description

@The-Running-Dev

A product can offer tools to an AI client from two independent sources — a manifest it ships and its own code — with neither privileged over the other. Nothing is offered to anyone until someone explicitly says so, and a tool that could ask for a password never gets as far as running.

Done when

  • S14.1 A manifest-projecting producer and a product-owned fixed-table producer both register through the same interface, and the catalogue treats them identically — no ordering, capability or schema-derivation difference between them.
  • S14.2 ToolDefinition declares no exposure member — asserted over the type. Exposure comes only from configuration.
  • S14.3 A registered tool absent from the exposure configuration is not in the catalogue's exposed set, and looking it up answers exactly what looking up a name that was never registered answers.
  • S14.4 IToolCatalogue declares no member reaching an unexposed registration — no enumeration of all registrations, no exposure-ignoring lookup.
  • S14.5 A registered tool whose parameter schema names a parameter matching the redaction marker set fails startup with HostStartupError.SensitiveToolParameter, naming the tool and the parameter.
  • S14.6 A tool requiring a permission no catalog declares fails startup with HostStartupError.UnregisteredPermission.
  • S14.7 Each producer's production runs once at startup and never again, and the catalogue exposes no registration, unregistration or re-exposure member.
  • S14.8 An architecture test asserts ModelContextProtocol.* is referenced by the Mcp module and by no other package, and that no Platform public type exposes, returns, accepts or derives from an SDK type.

Agent instructions

Run /slice S14.

  • Scope and criteria: design/30-slices.md § S14 @ d752008
  • Signatures: design/20-contract.md
  • Depends on: S8.
  • Out of scope here: the transport, the connection principal and invocation, which are S15.

Stop conditions and procedure: .claude/commands/slice.md. Not restated here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    sliceA vertical slice from design/30-slices.md

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions