You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While the transitive propagation fix for registry strings is straightforward, the inline dict format is a schema design decision that needs deliberate discussion before shipping, especially given the evolution of the MCP standard.
Questions to Resolve
1. Do we need an inline format at all?
The MCP Registry spec now supports subregistries — enterprise/private registries that implement the same API. Private servers that can't be in the public registry could live in an organization's subregistry instead of being hardcoded inline in apm.yml.
Counter-argument: Subregistries add operational overhead. A lightweight inline format has clear DX value for quick prototyping, private servers, and self-hosted setups.
2. Schema alignment with MCP Registry server.json
The proposed inline format ({name, type, url, headers}) diverges from the MCP Registry's server.json schema, which uses:
packages[] with registryType, identifier, transport
Transport types: stdio, sse, streamable-http (not just sse/http)
environmentVariables[] for env var declarations
Should APM's inline format align more closely with server.json, or is a simpler format acceptable for the inline use case?
3. Security considerations
Inline deps from transitive packages mean a dependency you didn't directly choose can inject arbitrary URLs into your MCP config. This raises:
URL scheme validation: Should we restrict to https:// and http:// only? (reject file://, data:, etc.)
Trust model: Should transitive inline MCP deps require explicit opt-in from the consumer project? (e.g., an allow-list or confirmation prompt)
4. Runtime adapter integration
The current PR writes inline configs directly to .vscode/mcp.json and ~/.copilot/mcp-config.json, bypassing the existing ClientFactory / adapter pattern. The adapters already have update_config() methods that could handle this. Should inline deps flow through the adapter layer to keep configuration knowledge centralized?
Context
PR #123 (fixing #121 — transitive MCP propagation) introduces an inline dict format for MCP dependencies in
apm.yml:While the transitive propagation fix for registry strings is straightforward, the inline dict format is a schema design decision that needs deliberate discussion before shipping, especially given the evolution of the MCP standard.
Questions to Resolve
1. Do we need an inline format at all?
The MCP Registry spec now supports subregistries — enterprise/private registries that implement the same API. Private servers that can't be in the public registry could live in an organization's subregistry instead of being hardcoded inline in
apm.yml.Counter-argument: Subregistries add operational overhead. A lightweight inline format has clear DX value for quick prototyping, private servers, and self-hosted setups.
2. Schema alignment with MCP Registry
server.jsonThe proposed inline format (
{name, type, url, headers}) diverges from the MCP Registry'sserver.jsonschema, which uses:io.github.user/server-namepackages[]withregistryType,identifier,transportstdio,sse,streamable-http(not justsse/http)environmentVariables[]for env var declarationsShould APM's inline format align more closely with
server.json, or is a simpler format acceptable for the inline use case?3. Security considerations
Inline deps from transitive packages mean a dependency you didn't directly choose can inject arbitrary URLs into your MCP config. This raises:
https://andhttp://only? (rejectfile://,data:, etc.)4. Runtime adapter integration
The current PR writes inline configs directly to
.vscode/mcp.jsonand~/.copilot/mcp-config.json, bypassing the existingClientFactory/ adapter pattern. The adapters already haveupdate_config()methods that could handle this. Should inline deps flow through the adapter layer to keep configuration knowledge centralized?Proposal
Split the work:
References