DEV Community

Cover image for What Anthropic Skipping Agent Plugins 1.0 Actually Costs
Yuuki Yamashita
Yuuki Yamashita

Posted on

What Anthropic Skipping Agent Plugins 1.0 Actually Costs

On August 6, 2026, AWS, Microsoft, OpenAI, Vercel, and Cursor shipped Agent Plugins 1.0.0 — a shared, vendor-neutral format for packaging AI agent skills and MCP servers into portable plugins. Google joined the same day as a Core Maintainer. Launch clients already include VS Code, GitHub Copilot, Cursor, ChatGPT, and Kiro.

Anthropic isn't on the list. Which is a little strange, because the spec's skills/ component is required to conform to Anthropic's own Agent Skills format — the same one Claude Code has used for its skills system all along. The company that wrote the foundation didn't join the group that built on top of it.

I wanted to know what that absence actually costs, in practical terms. Not "is this bad for Anthropic" — I have no read on that — just: if I take a real Agent Plugins 1.0.0 package today, how much work is it to make it run in Claude Code anyway?

Reading the actual spec first

Before touching anything I pulled the real repos instead of trusting news summaries: agentplugins/agent-plugins-spec for the JSON Schemas and agentplugins/agent-plugins-example for a canonical package. A plugin under the new spec is deliberately minimal — a directory with plugin.json at the root, an optional skills/ folder, and an optional mcp.json. Ten permitted top-level fields in the manifest, closed schema, unknown fields get reported but don't reject the package.

Then I read Claude Code's own plugin reference. And the closer I looked, the more the two formats started to look like siblings rather than strangers.

Where they actually diverge

Turns out there are exactly three real gaps:

The manifest lives in a different spot. Agent Plugins wants plugin.json at the package root. Claude Code wants it at .claude-plugin/plugin.json. Same fields underneath — name, version, description, author, homepage, repository, license, keywords — just a different address.

MCP config has a different filename. mcp.json becomes .mcp.json, dot-prefixed, also at the plugin root. I was expecting the server definitions themselves to need translation — different transport naming, different field names, that kind of thing. They don't. Claude Code's .mcp.json accepts stdio, streamable-http, and sse server blocks in the identical shape the Agent Plugins schema defines, command/args/env or url/headers and all. Claude Code's own docs even call out streamable-http as a documented alias for http, presumably because someone there was already looking at the same MCP ecosystem everyone else is.

Two placeholder tokens have different names. Agent Plugins uses ${PLUGIN_ROOT} and ${PLUGIN_DATA}; Claude Code uses ${CLAUDE_PLUGIN_ROOT} and ${CLAUDE_PLUGIN_DATA}. That's it. A find-and-replace.

Everything in skills/ needed zero changes. Both formats point at the same underlying Agent Skills spec, so a SKILL.md written for one is already valid for the other. I copied the directory byte for byte and it just worked.

Writing the bridge

I wrote a single-file Python script, no dependencies outside the standard library, that does exactly those three things: relocate the manifest, rename the MCP config, rewrite the two tokens. agent-plugins-bridge if you want the whole thing — it's short enough to read end to end in a few minutes.

I tested it two ways. First, against the canonical example package from the spec's own repo:

$ python3 agent_plugin_to_claude.py agent-plugins-example/ converted-example
Converted 'agent-plugins-example': 1 skill(s), no mcp.json

$ claude plugin validate ./converted-example
⚠ Found 1 warning:
  ❯ author: No author information provided. Consider adding author details for plugin attribution
✔ Validation passed with warnings
Enter fullscreen mode Exit fullscreen mode

That's the real claude plugin validate command, not something I mocked up. It passes with one cosmetic warning because the example package doesn't set an author field — nothing about the conversion itself.

Then I wanted proof the skill was actually usable, not just that the manifest parsed, so I loaded it into a live session with --plugin-dir and asked directly:

$ claude -p --plugin-dir ./converted-example \
    "Without doing anything else, tell me: do you currently have a skill \
     available named migrate-agent-plugin? Answer in one sentence."

Yes — agent-plugins-example:migrate-agent-plugin is available in this session.
Enter fullscreen mode Exit fullscreen mode

Second test, a synthetic package I wrote myself specifically to exercise the mcp.json path — the canonical example doesn't ship one — with a stdio server and a streamable-http server, both using the ${PLUGIN_ROOT}/${PLUGIN_DATA} placeholders in command, args, env, and cwd. Converted output had every placeholder correctly rewritten and validated the same way. I'd half-expected the transport blocks to need real translation; they didn't need any.

What this doesn't settle

I want to be careful not to overstate this. The Agent Plugins spec explicitly scopes itself to the portable core — skills and MCP servers — and says distribution, provenance/signing, and permission models are left to each platform. That's a reasonable design choice for a v1.0.0, but it's also exactly where a five-vendor "open standard" could still fragment back into five separate marketplaces with five separate trust models sitting on top of one shared file format. Nothing I built here touches that layer, and nothing here tells you whether it stays open once each vendor ships their own store on top of it.

What I can say is narrower: the part of the standard that ships today — the part everyone can point to and say "look, it's portable" — turned out to be portable to a platform that never signed the announcement. Not because I did anything clever. Because the underlying skills format was already Anthropic's to begin with, and the MCP layer both sides use is close enough that renaming a couple of files and two environment variable names was the entire job.

Repo's here if you want to try it against your own packages: github.com/yama3133/agent-plugins-bridge

Top comments (0)