fix(test): validate MCP descriptor source locations
This commit is contained in:
parent
911f3f70e0
commit
1ee4db6f0d
31
docs/adr/0001-plugin-manifests-publish-mcp-descriptors.md
Normal file
31
docs/adr/0001-plugin-manifests-publish-mcp-descriptors.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# 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
|
||||||
@ -88,7 +88,7 @@ func registerMCPFixture(t *testing.T) {
|
|||||||
}},
|
}},
|
||||||
}},
|
}},
|
||||||
SourceCodeInfo: &descriptorpb.SourceCodeInfo{Location: []*descriptorpb.SourceCodeInfo_Location{{
|
SourceCodeInfo: &descriptorpb.SourceCodeInfo{Location: []*descriptorpb.SourceCodeInfo_Location{{
|
||||||
Path: []int32{6, 0, 2, 0}, LeadingComments: proto.String("ListArticles lists Wiki articles.\n\nSupports pagination."),
|
Path: []int32{6, 0, 2, 0}, Span: []int32{1, 0, 1, 1}, LeadingComments: proto.String("ListArticles lists Wiki articles.\n\nSupports pagination."),
|
||||||
}}},
|
}}},
|
||||||
}, protoregistry.GlobalFiles)
|
}, protoregistry.GlobalFiles)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user