pluginsdk/docs/adr/0001-plugin-manifests-publish-mcp-descriptors.md

1.6 KiB

Plugin manifests publish MCP descriptors

CMS plugins expose ConnectRPC services with method-role mappings. The host can turn those unary methods into MCP tools, but a wasm plugin previously carried only its RBAC map; the host had no protobuf method descriptions or input schemas from which to build a safe MCP catalogue.

Decision: PluginManifest carries repeated MCPToolDescriptor values at field 38. The Go guest binding derives descriptors from linked protobuf reflection, includes only mapped unary methods, emits JSON object input schemas, and omits methods it cannot describe. The host remains responsible for validating every descriptor against the manifest RBAC map before registration.

Generating descriptors from handwritten plugin metadata was rejected because it would duplicate protobuf definitions and drift from the actual service. Publishing every reflected method was rejected because tools without explicit RBAC mappings would widen the plugin's callable surface.

Consequences:

  • Wasm plugin manifests can advertise their own ConnectRPC methods as MCP tools.
  • Descriptor capture fails closed for missing services, streaming methods, and malformed or unsupported protobuf inputs.
  • Consumers must use pluginsdk v0.3.2 or newer before calling PluginManifest.GetMcpTools.
  • abi/proto/v1/manifest.proto remains the language-neutral source of truth; abi/v1/manifest.pb.go is generated output.

Keywords: PluginManifest, MCPToolDescriptor, mcp_tools, GetMcpTools, captureMCPTools, plugin/wasmguest/mcp.go, abi/proto/v1/manifest.proto, abi/v1/manifest.pb.go, ConnectRPC, MCP, RBAC, pluginsdk v0.3.2