@utter/plugin-gen package turns your
published endpoints into an installable Claude Code plugin marketplace, so any agent can add
your marketplace and install an endpoint in one command.
Each endpoint becomes a plugin whose bundled buyer MCP lets an agent discover, pay for, and
call it through the escrow response gate. See the agent-facing
side in Install as a Claude Code plugin.
What it generates
1
Read the endpoints
It reads the public marketplace index (
GET /resources), or a single agent card, or a
file, and projects each endpoint to the fields a plugin needs (resource id, slug, price,
reputation).2
Build the plugins
A base
utter-buyer plugin (discovery plus pay for any endpoint) and one utter-<slug>
plugin per endpoint, each with a plugin.json, a skill, and a scoped buyer MCP server.3
Write the marketplace
A
.claude-plugin/marketplace.json that lists every plugin, plus the plugin folders under
plugins/. Point Claude Code at the folder and the plugins install.Generate
Theutter-plugins CLI writes the marketplace to disk.
Two ways to launch the buyer MCP
The generatedplugin.json declares one stdio MCP server. How it launches is a generation choice:
- Local (
--local): runs${CLAUDE_PROJECT_DIR}/scripts/utter-buyer-mcp.mjs, so it works immediately for anyone running Claude Code inside the utter repo. No publish step. This is the Windows-safe launcher (an absolute path is valid as the main script argument, unlikenode --import). - Published (
--published): runsnpx -y @utter/buyer-sdk utter-buyer-mcp, the standard form for a marketplace consumed outside the repo. It requires publishing@utter/buyer-sdkto a registry your users can reach.
Publish the marketplace
Writing to the repo root makes the repository itself an installable marketplace:Scope and safety
- The generator is pure text and config. It never holds a key and never writes a secret into a committed file. Live plugins read the buyer key from the plugin’s sensitive user config at launch.
- A per-endpoint plugin’s buyer MCP is scoped to one resource id (
UTTER_RESOURCE_IDS), so it exposes only that endpoint’s call tool. - The base plugin runs in demo mode by default so it boots and demonstrates the full escrow loop with no configuration. Live endpoints activate when the live buyer path is provisioned. See Provisioning.