Using Modyard
Publish a mod
Publishing is uploading a zip of your plugin folder. Modyard checks it, rebuilds a canonical archive, and lists it in your publisher's marketplace. You can do it from the web, from a script or from an agent.
4 min read
Before you start
You need a publisher. The first time you sign in with Google, Modyard creates one for you: an account with a slug, such as ana, that is also the name of your marketplace. A publisher can be a person or a team; owners can invite members as owners, editors or viewers. Editors and owners can publish.
You also need a mod that works. Check it locally before you upload anything:
claude plugin validate ./bash-logger
claude plugin test ./bash-loggerIf you have not written one yet, write your first mod walks through bash-logger from scratch.
What the zip must contain
Zip the plugin folder. Modyard accepts the files at the root of the zip or inside one wrapping top folder, so both of these work:
cd bash-logger && zip -r ../bash-logger.zip . && cd ..
# or
zip -r bash-logger.zip bash-loggerModyard checks the archive before it accepts it:
| Rule | Detail |
|---|---|
.claude-plugin/plugin.json | Required. name in lowercase letters, digits and hyphens; version as x.y.z |
hooks/hooks.json | Required, and every path in its modules must exist in the zip |
| Size | At most 2 MB compressed and 10 MB unpacked |
| Files | At most 500 |
If something fails, the error says which rule and which file, so you can fix it and upload again.
Modyard does not serve your zip as you sent it. It rebuilds a canonical archive: files sorted, timestamps fixed. Then it computes the sha256 of that archive. Two uploads of the same files give the same bytes and the same hash, and that hash goes into your marketplace so Claude Code can verify every download.
Way 1: the web form
Open publish, choose your publisher if you belong to more than one, and drop the zip. Modyard shows the name, version and description it read from plugin.json, the list of files, and what the mod can touch. Read that list before you confirm: if it says network and you never meant to make requests, something in your code does. What a mod can touch explains each category.
Once published, the mod has its page under mods and appears in your marketplace at once.
Way 2: curl and an API key
For scripts and CI, create an API key in settings. Only owners can create keys, and a key that publishes needs the read and write scope. Keys start with mdy_. Then:
curl -X POST https://mods.gonzaloverdugo.com/api/v1/mods \
-H "Authorization: Bearer mdy_..." \
-F archive=@bash-logger.zipThe response is the published version, including its sha256. The key belongs to one publisher, so it publishes there and nowhere else. Keep it out of your repository: put it in your CI's secrets.
Way 3: from an agent over MCP
If Claude is helping you write the mod, it can publish it too. Connect Claude Code to Modyard's MCP endpoint with a read and write key:
claude mcp add --transport http modyard https://mods.gonzaloverdugo.com/mcp \
--header "Authorization: Bearer mdy_..."Then ask Claude to publish the folder. It calls the modyard_publish_mod tool with the archive, and modyard_list_my_mods shows what your publisher already has. Use Modyard from an agent covers the setup in Claude Code and in claude.ai.
Names and versions
Names are unique across Modyard, not per publisher, first come first served. If bash-logger already exists, choose another name. Some publisher slugs are reserved (such as anthropic, claude, official and modyard) so nobody can pass for them.
Versions are immutable. Once 0.1.0 is published, its files never change, so the code people read is the code they run. To ship a fix, raise version in plugin.json and upload again. Each new version must be higher than the latest one: 0.1.1 or 0.2.0 after 0.1.0, never 0.1.0 again and never 0.0.9.
{ "name": "bash-logger", "version": "0.1.1", "description": "Shows each Bash command in the status line" }People who already installed the mod get the new version when they run /plugin marketplace update ana in Claude Code.
Unlist or delete
From the mod's page, a publisher can:
- Unlist the mod. It leaves search and your marketplace listing, but anyone with a direct link can still install it. Use it for a mod you no longer promote but someone may still depend on.
- Delete the mod. Its versions go away and the name is freed, so anyone can take it later. Users who installed it keep their copy, but they get no updates.
With a key, deleting is also one request:
curl -X DELETE https://mods.gonzaloverdugo.com/api/v1/mods/bash-logger \
-H "Authorization: Bearer mdy_..."Deleting cannot be undone, and a freed name can be taken by someone else. If you only want the mod out of sight, unlist it.
A short checklist
claude plugin validateandclaude plugin testpass.versionis higher than the last one you published.- The zip has
plugin.json,hooks.jsonand every module it names. - What the mod can touch matches what it says it does.
- The description tells a stranger what it does in one sentence.