Skip to main content
Glama

Publish an organization skill

publish_skill
DestructiveIdempotent

Publish the next version of an organization skill that exists. To share a skill with the team, such as one the user keeps locally, call create_service with kind skill and then this; every member's agent can then read it. Pass exactly one of edits, files, or push. Prefer edits to change some files of a skill: each replaces or adds one file and keeps every other file, binary files included. files replaces the whole skill with a SKILL.md and any supporting text files, and drops every file it leaves out, binary files included. push is the id create_push returned and the commit you pushed, which carries any file. skill is required with edits and push; with files it defaults to the SKILL.md frontmatter name. The SKILL.md frontmatter must name the skill.

Pass base_version, the version get_skill reported, so a teammate's publish in between is not overwritten. It is required with edits. When the skill has moved past it, nothing is published: read the skill again and redo the change. A new skill starts with create_service with kind skill; a name that holds no skill is refused.

Publishing under a well-known name, such as governance, security, or design-system, replaces what Valet would otherwise supply for every agent in the organization from the next read on, so do it when the user has asked to change how the organization works, and show them the content first; its first publish works without create_service. A skill under a new name is one the default governance process finds through list_skills when its description applies.

Destructive because it replaces the previous version's content for every reader. Repeating a call with identical content mints no new version and reports deduped. Pass an idempotency_key so a retry after a lost answer returns the first call's result instead of publishing again. Requires connecting a Valet account.

Input Schema

NameRequiredDescriptionDefault
pushNoPublish a Git push instead of files: the id create_push returned and the commit you pushed to its branch. Use it when you can run git with network access, because it sends only what changed. Pass files or push, not both; every other argument keeps its meaning.
editsNoFiles to change as [{path, content}], text only, paths relative to the skill root. Each replaces or adds that file; every other file is kept, binary files included, and all of them land in one new version. Requires skill and base_version. Pass one of edits, files, or push.
filesNoThe skill's whole tree as [{path, content}], text only, paths relative to the skill root. Must include SKILL.md, the complete definition with name and description frontmatter. Replaces the whole skill: a file it leaves out is removed, binary files included. Pass one of edits, files, or push.
skillNoThe skill's name. Required with edits and push; with files, omit it to use the SKILL.md frontmatter name.
org_nameNoThe Valet organization to publish into. Omit to use the organization the account joined first.
base_versionNoThe version get_skill reported, 0 for Valet's default. The publish is refused, and nothing is published, when the skill's latest version is not this one. Required with edits; optional with files and push.
idempotency_keyNoAn opaque key of your choosing. Repeating a call with the same key returns the first call's result instead of publishing again, which makes a retry safe.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / idempotency_key
      Added value: +{
      +  "description": "An opaque key of your choosing. Repeating a call with the same key returns the first call's result instead of publishing again, which makes a retry safe.",
      +  "type": "string"
      +}
  2. Changed4 schema fields changed
    • addedInput schema / properties / base_version
      Added value: +{
      +  "description": "The version get_skill reported, 0 for Valet's default. The publish is refused, and nothing is published, when the skill's latest version is not this one. Required with edits; optional with files and push.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / edits
      Added value: +{
      +  "description": "Files to change as [{path, content}], text only, paths relative to the skill root. Each replaces or adds that file; every other file is kept, binary files included, and all of them land in one new version. Requires skill and base_version. Pass one of edits, files, or push.",
      +  "items": {
      +    "properties": {
      +      "content": {
      +        "description": "Required. The file's complete new text content.",
      +        "type": "string"
      +      },
      +      "path": {
      +        "description": "Required. The file's path, relative to the skill root.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "path",
      +      "content"
      +    ],
      +    "type": "object"
      +  },
      +  "minItems": 1,
      +  "type": "array"
      +}
    • changedInput schema / properties / files / description
      Previous value: -"The skill's files as [{path, content}], text only, paths relative to the skill root. Must include SKILL.md, the complete definition with name and description frontmatter. Pass files or push, not both."New value: +"The skill's whole tree as [{path, content}], text only, paths relative to the skill root. Must include SKILL.md, the complete definition with name and description frontmatter. Replaces the whole skill: a file it leaves out is removed, binary files included. Pass one of edits, files, or push."
    • changedInput schema / properties / skill / description
      Previous value: -"The skill's name. Required with push; with files, omit it to use the SKILL.md frontmatter name."New value: +"The skill's name. Required with edits and push; with files, omit it to use the SKILL.md frontmatter name."
  3. Changed4 schema fields changed
    • changedInput schema / properties / files / description
      Previous value: -"Required. The skill's files as [{path, content}], text only, paths relative to the skill root. Must include SKILL.md, the complete definition with name and description frontmatter."New value: +"The skill's files as [{path, content}], text only, paths relative to the skill root. Must include SKILL.md, the complete definition with name and description frontmatter. Pass files or push, not both."
    • addedInput schema / properties / push
      Added value: +{
      +  "description": "Publish a Git push instead of files: the id create_push returned and the commit you pushed to its branch. Use it when you can run git with network access, because it sends only what changed. Pass files or push, not both; every other argument keeps its meaning.",
      +  "properties": {
      +    "commit": {
      +      "description": "Required. The full sha of the commit you pushed to the push's branch. The recipe create_push returned prints it.",
      +      "type": "string"
      +    },
      +    "id": {
      +      "description": "Required. The push_id create_push returned.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "commit"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / skill
      Added value: +{
      +  "description": "The skill's name. Required with push; with files, omit it to use the SKILL.md frontmatter name.",
      +  "type": "string"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "files"
      -]
  4. Changed4 schema fields changed
    • changedInput schema / properties / files / description
      Previous value: -"Supporting files: [{path, content}], text only, paths relative to the skill root."New value: +"Required. The skill's files as [{path, content}], text only, paths relative to the skill root. Must include SKILL.md, the complete definition with name and description frontmatter."
    • addedInput schema / properties / files / minItems
      Added value: +1
    • removedInput schema / properties / skill_md
      Removed value: -{
      -  "description": "Required. The complete SKILL.md, with name and description frontmatter.",
      -  "type": "string"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "skill_md"
      -]New value: +[
      +  "files"
      +]
  5. Added

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive and idempotent, but the description goes well beyond them: it spells out that the previous version's content is replaced for every reader, that files silently drops omitted files including binaries, that identical content dedupes with no new version, that idempotency_key makes retries safe, that a stale base_version publishes nothing, and that a Valet account must be connected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the core action and the edits/files/push choice land first, with conflict handling and well-known-name caveats after. A few sentences (e.g., the well-known-name governance tangent) run long, but each carries a distinct behavioral rule, so nearly every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, nested-object, no-output-schema mutation tool, the description covers the full decision surface: source selection, versioning and conflict recovery, dedup and retry semantics, auth, and the special well-known-name case. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it states the mutual exclusivity of edits/files/push ('Pass exactly one of'), the default resolution of skill from SKILL.md frontmatter with files, and that base_version is required with edits but optional otherwise. These conditional requirements go beyond the per-field schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Publish the next version of an organization skill that exists') and immediately scopes it against siblings: create_service for new skills, create_push for the push source, get_skill for the base version. An agent can distinguish this from publish_agent, publish_app, and publish_site without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use guidance throughout: exactly one of edits/files/push, prefer edits for partial changes, files for whole-tree replacement, push when git with network access is available. It also tells the agent when to reach for a well-known name (governance, security, design-system) and to show content first, and names the alternative paths (create_service, get_skill, list_skills).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources