Problem
released_prompt takes asset_id and release_id as UUIDs. MCP completion (#121) inserts the literal argument value, so the picker a host renders is a list of UUIDs. Filtering by title/slug works, but the list itself is unreadable.
Proposal
Additive, non-breaking:
- keep
asset_id / release_id, make them optional;
- add optional
namespace, slug, version;
- require exactly one complete form, fail closed otherwise;
- completion then returns readable values for the coordinate arguments.
Precedent in this repository
resolve_skill already does exactly this: namespace + slug + version resolved through /api/asset-delivery/skills/{namespace}/{slug}/versions/{version}/manifest. Prompts have no equivalent resolver yet, so the API needs one.
Pinning is not weakened: resolve_skill requires an exact version label and has no latest. The coordinate form must keep that rule.
Acceptance
Depends on
The release-history endpoint, which supplies the exact version labels this contract needs.
Problem
released_prompttakesasset_idandrelease_idas UUIDs. MCP completion (#121) inserts the literal argument value, so the picker a host renders is a list of UUIDs. Filtering by title/slug works, but the list itself is unreadable.Proposal
Additive, non-breaking:
asset_id/release_id, make them optional;namespace,slug,version;Precedent in this repository
resolve_skillalready does exactly this:namespace+slug+versionresolved through/api/asset-delivery/skills/{namespace}/{slug}/versions/{version}/manifest. Prompts have no equivalent resolver yet, so the API needs one.Pinning is not weakened:
resolve_skillrequires an exact version label and has nolatest. The coordinate form must keep that rule.Acceptance
contracts/openapi.jsonregeneratedreleased_promptaccepts either form, exactly one, fail closedDepends on
The release-history endpoint, which supplies the exact version labels this contract needs.