MCP Server Builder
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
Publish a skill, scene, MCP server, plugin, or bundle to the Vetta ability marketplace.
$ npx skills add openvetta/open-vetta --skill publish-ability -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install openvetta/open-vetta publish-ability --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/openvetta/open-vetta.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/skill-presets/publish-ability .claude/skills/publish-ability && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "publish-ability" agent skill from https://github.com/openvetta/open-vetta/tree/main/packages/skill-presets/publish-ability into .claude/skills/publish-ability/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-ability", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/openvetta/open-vetta/tree/main/packages/skill-presets/publish-abilityType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add openvetta/open-vetta --skill publish-ability -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install openvetta/open-vetta publish-ability --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/openvetta/open-vetta.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/skill-presets/publish-ability .agents/skills/publish-ability && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "publish-ability" agent skill from https://github.com/openvetta/open-vetta/tree/main/packages/skill-presets/publish-ability into .agents/skills/publish-ability/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-ability", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add openvetta/open-vetta --skill publish-ability -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install openvetta/open-vetta publish-ability --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/openvetta/open-vetta.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/skill-presets/publish-ability .cursor/skills/publish-ability && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "publish-ability" agent skill from https://github.com/openvetta/open-vetta/tree/main/packages/skill-presets/publish-ability into .cursor/skills/publish-ability/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-ability", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/openvetta/open-vetta.git --path packages/skill-presets/publish-ability--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add openvetta/open-vetta --skill publish-ability -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install openvetta/open-vetta publish-ability --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/openvetta/open-vetta.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/skill-presets/publish-ability .gemini/skills/publish-ability && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "publish-ability" agent skill from https://github.com/openvetta/open-vetta/tree/main/packages/skill-presets/publish-ability into .gemini/skills/publish-ability/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-ability", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install openvetta/open-vetta publish-abilityInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add openvetta/open-vetta --skill publish-ability -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/openvetta/open-vetta.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/skill-presets/publish-ability .github/skills/publish-ability && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "publish-ability" agent skill from https://github.com/openvetta/open-vetta/tree/main/packages/skill-presets/publish-ability into .github/skills/publish-ability/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-ability", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add openvetta/open-vetta --skill publish-ability -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install openvetta/open-vetta publish-ability --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/openvetta/open-vetta.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/skill-presets/publish-ability .opencode/skills/publish-ability && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "publish-ability" agent skill from https://github.com/openvetta/open-vetta/tree/main/packages/skill-presets/publish-ability into .opencode/skills/publish-ability/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-ability", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
publish-abilityPublish a skill, scene, MCP server, plugin, or bundle to the Vetta ability marketplace.
Publish Ability is an agent skill from openvetta/open-vetta. Publish a skill, scene, MCP server, plugin, or bundle to the Vetta ability marketplace. Use when the user asks to upload/publish/submit an ability, put a plugin on the marketplace, share a skill with other users, or migrate an existing package into Vetta.
Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including scripts and reference files (for example `ability.json` and `references/payload.md`).
It sits in Agent Workflows, covering MCP servers. It works with Model Context Protocol. The repository describes itself as: Open-source, local-first AI agent for coding and real work. BYOK models, MCP, skills, plugins, workflows, and private knowledge bases. The licence is Apache-2.0.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit b983179. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 5 files in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
nodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Publish Ability loads about 1.6k tokens when it runs, and up to ~4.2k if it reads all its reference files. Until then it costs about 68 tokens; SKILL.md has 838 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from openvetta/open-vetta at commit b983179, republished under its Apache-2.0 licence (© openvetta). 838 words, ~1,636 tokens.
.claude/skills/publish-ability/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.Submitting is a local action: it reads an archive from the user's disk, so it runs through the bundled script rather than a tool call.
node "$SKILL_DIR/scripts/publish.mjs" --input /abs/path/to/payload.jsonChecking review status afterwards is a remote action — use the list_my_abilities tool from
the built-in vetta MCP server. It is always available and needs no setup.
Determine the type. Ask the user if it is not obvious from the artifact.
| Type | What it is | Physical artifact |
|---|---|---|
skill | A SKILL.md workflow | .zip / .tar.gz containing SKILL.md |
scene | A skill installed into the scene directory | same as skill |
plugin | A Vetta plugin | .zip containing plugin.json |
mcp | One entry in the user's mcp.json | none — config only |
bundle | A named group of already-published abilities | none — references only |
Source detail from the package. Do not invent it. name, description, author, and
content are all required and the submission is rejected without them. Read plugin.json
(name/description/author), SKILL.md frontmatter, README.md, LICENSE. Ask the user
for anything you cannot source.
For plugins, also list locales/*.json: those filenames are the exact locale keys your
detail.i18n must use, and whatever they already translate is text you should not restate.
See Multi-language.
content is the detail-page body in markdown — it is what a user reads to decide whether to
install. Write what the ability does, when to use it, and any setup it needs. A one-line
content is not acceptable.
Read the available categories before you set one. category is matched by name —
a name that matches nothing is not an error, it silently lands in "uncategorised". So never
invent one:
node "$SKILL_DIR/scripts/categories.mjs" # human-readable
node "$SKILL_DIR/scripts/categories.mjs" --json # machine-readablePut the name field verbatim into the payload's category. The i18n values are display
translations only — matching accepts them, but the canonical name is what you should write.
Omit category entirely if nothing fits.
Write the payload to a JSON file, then pass it with --input. Never try to pass fields as
command-line arguments: content is multi-line markdown containing backticks, quotes and $,
and the shell will mangle it.
Full field reference: references/payload.md — read it when you need
anything beyond the four required detail fields. It is also where the valid icon names
and the meaning of each showcase.canvas value are listed; both are closed sets, and a wrong
value either fails validation or renders as a fallback.
Dry-run first when the payload is non-trivial. It runs the full validation without submitting, so you spend no network round-trip on a payload that was never going to pass:
node "$SKILL_DIR/scripts/publish.mjs" --input payload.json --dry-runFor skill/scene/plugin this also opens the archive and cross-checks the payload
against plugin.json, locales/*.json, and SKILL.md frontmatter. That is the only place
the "same data, two sources" mistakes surface: a translation key that does not match the
package's own locale files, a slug or version that the server will ignore, a vetta.json
that your detail silently supersedes. None of these fail the upload — they just make part
of what you wrote unreachable. Do not skip the dry-run on packaged types.
Submit. On failure the script returns all problems at once — fix the whole list before retrying rather than resubmitting after each single fix.
{"ok": false, "message": "...", "errors": [...]} — errors is present for
validation failures.{"ok": true, "message": "...", "slug": "...", "version": "...", "review_status": "...", "has_pending": bool, "warnings": [...]}.warnings are things that did not block the submission but changed what gets published —
a hand-written translation overriding the package's own, a slug that was ignored, a
vetta.json that was skipped. Relay them to the user; do not treat the run as clean.cat payload.json | node .../publish.mjs) if that is more
convenient than a temp file.~/.vetta/auth.json itself. If it reports "未登录", tell
the user to log in through the Vetta client — do not attempt to pass credentials yourself.Submissions from non-administrators enter a review queue and are not visible in the marketplace until an administrator approves them. Tell the user this rather than implying the ability is live.
Re-submitting an ability that is already published does not disturb it: the new version waits in
a pending slot while the marketplace keeps serving the current version, so installed users are
unaffected until the update is approved. has_pending: true in the result means exactly this.
A re-submission replaces detail.i18n wholesale. Sending only the locale you changed drops
every other translation on that entry, including any an administrator added later. Fetch the
current state first (list_my_abilities) or resend the complete set of locales.
You may only submit updates to abilities you own. Submitting to a slug owned by someone else is rejected.
After a successful run, state the returned slug, version, and whether the ability is live or
pending review. If the run failed, fix every listed error and retry — do not report success.
Use list_my_abilities to report progress later: review_status is pending, approved, or
rejected (reason in review_note); a non-empty pending_version means an update is queued
behind the live version.
© openvetta, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 7 other files (scripts, references) in packages/skill-presets/publish-ability of openvetta/open-vetta.
Open the folder on GitHubat commit b983179
Publish Ability next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Publish Ability this skillopenvetta/open-vetta | 291 | — | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| MCP Server Builderanthropics/skills | 180k | 63 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| MCP Server BuildershareAI-lab/learn-claude-code | 78k | 5 repos | ~1.2k | Automated safety check: Pass | MIT | |
| MCP Integration for Pluginsanthropics/claude-plugins-official | 38k | 11 repos | ~3.1k | Automated safety check: Pass | Apache-2.0 | |
| Crush Configurationcharmbracelet/crush | 29k | — | ~3.7k | Automated safety check: Pass | Custom licence | |
| Context Mode Output Sandboxmksglu/context-mode | 26k | — | ~4.1k | Automated safety check: Pass | Custom licence |
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
shareAI-lab/learn-claude-code
Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.
anthropics/claude-plugins-official
Explains how to bundle Model Context Protocol servers in a Claude Code plugin, covering config files, stdio, SSE, HTTP and WebSocket server types, and authentication.
charmbracelet/crush
Explains how to configure the Crush coding agent with crushrc or crush.json, covering providers, models, LSPs, MCP servers, hooks, permissions and config precedence.
mksglu/context-mode
Routes large command, file, API and browser output through context-mode tools so only the needed result enters the agent's context, instead of dumping it via Bash.
warpdotdev/warp
Migrates the compatible subset of settings and global file-based MCP servers from the Warp desktop app into Warp Agent CLI without exposing credentials or state.
openvetta/open-vetta
Master Material Design 3 and Jetpack Compose patterns for building native Android apps.
openvetta/open-vetta
Create, implement, build, pack, install, reload, and manage Vetta desktop plugins for non-developers.
openvetta/open-vetta
Create or update Vetta-compatible Agent Skills. An agent skill from openvetta/open-vetta.
openvetta/open-vetta
Design mobile-style HTML pages (iOS / Android) for preview in the Mobile UI Preview panel.
openvetta/open-vetta
Create, modify, and render Remotion React video projects in the current Vetta conversation workspace.
openvetta/open-vetta
Build and edit design documents (.vetd) on the Vetta design canvas — app screens, landing pages, slides, posters, infographics.
Works with
Categories
Publish a skill, scene, MCP server, plugin, or bundle to the Vetta ability marketplace. Publish Ability is an agent skill from openvetta/open-vetta. Publish a skill, scene, MCP server, plugin, or bundle to the Vetta ability marketplace.
Publish Ability fits situations like: the user asks to upload/publish/submit an ability; put a plugin on the marketplace; share a skill with other users; migrate an existing package into Vetta.
Run `npx skills add openvetta/open-vetta --skill publish-ability -a claude-code`. Or copy the skill folder (packages/skill-presets/publish-ability in openvetta/open-vetta) into .claude/skills/publish-ability in your project. Claude Code loads it when a task matches its description.
Run `npx skills add openvetta/open-vetta --skill publish-ability -a codex`. Or copy the skill folder (packages/skill-presets/publish-ability in openvetta/open-vetta) into .agents/skills/publish-ability in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add openvetta/open-vetta --skill publish-ability -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/publish-ability, .gemini/skills/publish-ability, .github/skills/publish-ability and .opencode/skills/publish-ability in your project.
Going by SKILL.md and its folder, Publish Ability needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node). Our summary lists: Node.js.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Publish Ability is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.6k tokens (SKILL.md is roughly 6.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.6k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Publish Ability: MCP Server Builder (anthropics/skills, 180k stars), MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars), MCP Integration for Plugins (anthropics/claude-plugins-official, 38k stars) and Crush Configuration (charmbracelet/crush, 29k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
openvetta (a GitHub organization) maintains it in openvetta/open-vetta, which has 291 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 9, 2026.
Source: openvetta/open-vetta on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.