Skip to content

feat: make the plugin an Agent Plugins 1.0 package - #5

Closed
matifali wants to merge 5 commits into
mainfrom
claude/agent-plugins-readiness-c2pass
Closed

matifali wants to merge 5 commits into
mainfrom
claude/agent-plugins-readiness-c2pass

Conversation

@matifali

@matifali matifali commented Oct 6, 2026 •

Copy link
Copy Markdown
Member

Closes #4

Summary

Makes plugins/coder loadable as an Agent Plugins 1.0 package, so Codex, GitHub Copilot, and other conformant clients can load the four skills. The portable files sit next to the Cursor ones.

  • Portable manifest: add plugins/coder/plugin.json (closed schema: $schema, name, version, description, author, homepage, repository, license, keywords). Cursor-only fields (displayName, logo, mcpServers, variables) stay in .cursor-plugin/plugin.json.
  • MCP server (HTTP only, Cursor only): move mcp.json to .cursor-plugin/mcp.json and point the Cursor manifest at it with "mcpServers": ".cursor-plugin/mcp.json". Cursor's mcpServers field replaces root mcp.json discovery. The file content is unchanged, so Cursor still expands ${CODER_URL}. The portable package now has no root mcp.json, which the spec allows (§6.2).
  • Skill name: re-vendor coder/skills at 3c99837. The workspaces skill was named coder-workspaces, which violates the Agent Skills rule that name match its directory; fixed upstream in fix(workspaces): match skill name to its directory skills#6. The re-vendor is a one-line diff.
  • Validator: scripts/validate-template.mjs now checks plugin.json against the closed 1.0 schema, requires skill name to equal its directory (and description ≤ 1024 chars), requires the two manifests to agree on shared fields, and still validates a root mcp.json against the MCP schema if one is ever added.
  • CI: validate.yml now requires plugin.json, .cursor-plugin/plugin.json, and marketplace.json versions to match.
  • Docs and version: bump to 0.3.0, add a CHANGELOG entry, update CONTRIBUTING and VENDOR for the second manifest, and add an "Other agents" section to the README.

Why the MCP server stays Cursor-only

Every Coder deployment has its own URL, and the spec forbids placeholder expansion in an MCP url (§7.2.1). The spec has no mechanism for user-supplied install-time settings, so there is no conformant way to express a per-deployment HTTP URL. Putting ${CODER_URL} in a root mcp.json would make strict clients skip the entry as invalid, and possibly warn. Keeping it in a Cursor-only path avoids that. Only HTTP is supported by design; a stdio server (coder exp mcp server) was considered and rejected. Commands (/coder-agent) are not part of the standard either.

Test plan

  • node scripts/validate-template.mjs passes (only warning: no hooks/hooks.json)
  • Validator fails on a deliberately broken copy: old coder-workspaces name, old mcp.json shape, version drift between manifests, a Cursor-only field in plugin.json, and a missing mcpServers path
  • node .github/scripts/sync-skills.mjs produces no diff against the new pin
  • Version check from validate.yml simulated: all three versions are 0.3.0
  • Install plugins/coder locally in Cursor and confirm the coder MCP server still appears in Tools & MCP, /coder-agent works, and the CODER_URL prompt loads. Cursor's reference says mcpServers replaces root discovery, but I couldn't test it here, and this is the one change that could regress Cursor behavior.
  • Confirm the skills load in another Agent Plugins client (Codex or Copilot).

Merging bumps the version to 0.3.0, so the release workflow will tag v0.3.0 and publish a GitHub Release.

🤖 Generated with Claude Code

https://claude.ai/code/session_019YbnTXGyHn3KBrSw2R4D12

matifali and others added 5 commits October 6, 2026 21:00
Add a portable plugin.json beside .cursor-plugin/plugin.json so Codex,
GitHub Copilot, and other conformant clients can load the plugin. Add
$schema and type to mcp.json, and re-vendor coder/skills at 3c99837 so
the workspaces skill name matches its directory.

The validator now checks plugin.json, mcp.json, skill names, and that
both manifests agree; CI requires all three versions to match.

Bump to 0.3.0.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019YbnTXGyHn3KBrSw2R4D12
Extend validate-template.mjs to check plugin.json and mcp.json against the
closed Agent Plugins 1.0 schemas, require skill names to match their
directories, and require plugin.json and .cursor-plugin/plugin.json to
agree. Warn that a placeholder in an MCP url is honored only by Cursor.

Add an "Other agents" section to the README.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019YbnTXGyHn3KBrSw2R4D12
The spec forbids placeholders in an MCP url, and every Coder deployment
has its own URL. Move the server from mcp.json to .cursor-plugin/mcp.json
and point the Cursor manifest at it with mcpServers, which replaces root
mcp.json discovery in Cursor. The portable package now has no mcp.json, so
conformant clients load the skills and never see an invalid MCP entry.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019YbnTXGyHn3KBrSw2R4D12
The server now lives in .cursor-plugin/mcp.json.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019YbnTXGyHn3KBrSw2R4D12
…s is set

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019YbnTXGyHn3KBrSw2R4D12
@matifali
matifali marked this pull request as draft October 6, 2026 17:02
@matifali matifali closed this Oct 7, 2026
@matifali

matifali commented Oct 7, 2026

Copy link
Copy Markdown
Member Author

Closing for now: Agent Plugins 1.0 has no way to pass a per-deployment URL to an MCP server, and we want the HTTP MCP server, not stdio.

  • §7.2.1 forbids placeholder expansion in url and headers.
  • §9.2 allows only ${PLUGIN_ROOT} and ${PLUGIN_DATA}, and only in stdio fields.
  • The manifest has no way to declare user-supplied install-time values.

Every Coder deployment has its own URL, so the server can only work in Cursor, through its variables and ${CODER_URL} support. Migrating would leave other clients with the skills but no MCP server.

The branch claude/agent-plugins-readiness-c2pass is kept. It adds the portable plugin.json, a validator for it, and moves the MCP server to .cursor-plugin/mcp.json. We can reopen it once the spec supports user-supplied variables.


Generated by Claude Code

@matifali

matifali commented Oct 7, 2026

Copy link
Copy Markdown
Member Author

Upstream request: agentplugins/agent-plugins-spec#7 (comment)


Generated by Claude Code

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.

Migarte to https://agent-plugins.org/

1 participant