Skip to content

feat(plugin-spec): support local (stdio) MCP provisioning#78

Merged
youssefea merged 4 commits into
masterfrom
spec/local-mcp-provisioning
Jun 9, 2026
Merged

feat(plugin-spec): support local (stdio) MCP provisioning#78
youssefea merged 4 commits into
masterfrom
spec/local-mcp-provisioning

Conversation

@stephancill

Copy link
Copy Markdown
Collaborator

What

Extends the plugin spec so external-mcp plugins can declare an MCP server that runs locally on the user's machine (stdio), not just a remote hosted server. Today requires.externalMcp is { name, url }, which only models a remote URL — there's no clean way to describe an MCP launched via npx/uvx over stdio (which has a command, not a URL). Authors have had to resort to url: null, and cliPackage (meant for per-call CLIs) is the wrong fit.

Changes

  • Transport-tagged requires.externalMcp: { name, transport, … } where transport is:
    • http / sse — remote, hosted; needs url.
    • stdio — local, launched on the user's machine; needs command, args, and optional env.
  • New ## MCP Provisioning section documenting both transports with the install-snippet shape for each.
  • New local-exec risk tag, required whenever externalMcp.transport: stdio (running partner code locally is a larger trust surface than a remote MCP or http-api).
  • stdio guardrails: pin the package version (no @latest), list env var names only (never values), and ## Surface Routing must stop on shell-less / chat-only surfaces.
  • cliPackage clarified as a CLI the agent shells out to per call, distinct from a registered stdio MCP server.
  • Authoring checklist + skeleton template updated; ## Installation and Runtime Routing Primitives cross-reference the new section.

Why

Several MCP integrations ship as local stdio servers (npx/uvx packages). Without a first-class way to express that, the frontmatter can't drive correct installation, risk signalling, or surface routing. This makes the local vs remote distinction explicit and adds the guardrails that local execution warrants.

Notes

Spec/docs only — no plugin behavior changes. Existing remote external-mcp plugins map to transport: http with their current url.

Extend requires.externalMcp to a transport-tagged schema so the spec can
describe MCP servers launched locally on the user's machine, not just
remote hosted servers.

- requires.externalMcp: { name, transport, ... } where transport is
  http|sse (remote, needs url) or stdio (local, needs command/args/env)
- new MCP Provisioning section documenting both transports, with the
  install snippet shape for each
- new local-exec risk tag, required whenever externalMcp.transport: stdio
- stdio guardrails: pin the package version (no @latest), list env var
  names only (never values), and stop on shell-less/chat-only surfaces
- cliPackage clarified as a per-call CLI, distinct from a registered
  stdio MCP server
- authoring checklist + skeleton updated
@cb-heimdall

cb-heimdall commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator

✅ Heimdall Review Status

Requirement Status More Info
Reviews 1/1
Denominator calculation
Show calculation
1 if user is bot 0
1 if user is external 0
2 if repo is sensitive 0
From .codeflow.yml 1
Additional review requirements
Show calculation
Max 0
0
From CODEOWNERS 0
Global minimum 0
Max 1
1
1 if commit is unverified 0
Sum 1

…wards compatibility

- transport is optional for remote MCPs and defaults to http when url is
  present, so the legacy externalMcp: { name, url } shape stays valid
- transport remains required for stdio
- add a Backwards compatibility note: additive schema, migrate on next
  meaningful edit, validator should infer (warn) not error on missing transport
@stephancill stephancill mentioned this pull request Jun 4, 2026
4 tasks
apexethdev added a commit to veildotcash/skills that referenced this pull request Jun 5, 2026
- Revert maintainer-owned registry/inventory edits per review:
  fully revert SKILL.md; in plugin-spec.md restore the "7 native
  plugins" conformance table (drop Veil row) and the version line.
  Keep only the privacy/shielded-payments tag-vocabulary additions.
- Rewrite veil.md frontmatter to the base#78 transport: stdio schema
  (command/args/env, shell: required, risk += local-exec); add a
  ### local-exec Risks subsection.
- Make register-before-deposit an explicit hard prerequisite in
  ## Orchestration > Deposit (a deposit before register reverts).
- Pin the global-install command to @0.2.1.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@cb-heimdall

Copy link
Copy Markdown
Collaborator

Review Error for youssefea @ 2026-06-09 13:33:45 UTC
User failed mfa authentication, either user does not exist or public email is not set on your github profile. \ see go/mfa-help

@youssefea youssefea merged commit 225ccf2 into master Jun 9, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants