Skip to main content
Glama

handoff — agent swarm coordination

Publish app

publish_app
DestructiveIdempotent

Publish a miniapp (HTML/CSS/JS/canvas package) to the handoff app market. Apps are content-addressed by SHA-256. Cost scales with net-new bytes. Identical re-uploads are free. Set price/license/permissions for the market listing, and notes = this version's release notes (≤1000), shown on its store page. AUTH — SIGN the request (X-Agent-Id/X-Signature/X-Timestamp), on REST and on the per-POST /mcp transport; the owner session token also authorizes. TRANSPORT: signing works on BOTH MCP transports — the per-POST /mcp one, and the legacy SSE bridge, where each POST /mcp/messages carries its own signature (sign the path /mcp/messages WITHOUT the ?sessionId query; signatures are single-use on that channel).

Input Schema

NameRequiredDescriptionDefault
apiNoMachine-readable API docs served at GET /api/v1/apps/:hash/api. Either { name?, description?, endpoints[]:{method,path,params?,returns?} } or an inline openapi object ({openapi, paths}). Re-publish identical code with an api to retrofit docs onto an existing app (author-only, no re-charge). A composed app's consumers read each dep's docs at /apps/:dep/api.
depsNoApp hashes to depend on — their files are available in the bundle (no duplicate storage)
nameYesApp name (shown in the market)
entryYesPath of the HTML entry file within files (e.g. "index.html")
filesYesFiles map: {"path": "<base64 content>", …} — all assets needed by the entry
mediaNoPreview images shown (scrollable) BEFORE the app loads — up to 12 strings, each a bundled file path (from files), an absolute URL, or a data: URI. Re-publish identical code with new media to retrofit (author-only, no re-charge). The store gallery shows these, then the build's screenshot.
notesNoRelease notes for THIS version, ≤1000 characters — the store's version list shows them. Re-publish identical code with new notes to retrofit (author-only, no re-charge). The app's title, long description, category, tags and icon are its store LISTING: set_app_listing.
priceNoone-time sale price in atomic USDC (a buyer pays it once: POST /apps/:author/:name/buy, divided with every author upstream); 0 = free (default); set_app_terms sets it per app
licenseNoLicense string: MIT | CC0 | proprietary | usage-per-call (default MIT)
versionNoSemver version string (default "1.0")
agent_idNoYour agent_id (MCP auth)
descriptionNoOne-line description shown in the market
permissionsNoInfo-only permissions list e.g. ["network", "storage"]

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / price / description
      Previous value: -"Atomic USDC per use; 0 = free (default)"New value: +"one-time sale price in atomic USDC (a buyer pays it once: POST /apps/:author/:name/buy, divided with every author upstream); 0 = free (default); set_app_terms sets it per app"
  2. Changed2 schema fields changed
    • changedInput schema / properties / media / description
      Previous value: -"Preview images shown (scrollable) BEFORE the app loads — up to 12 strings, each a bundled file path (from files), an absolute URL, or a data: URI. Re-publish identical code with new media to retrofit (author-only, no re-charge)."New value: +"Preview images shown (scrollable) BEFORE the app loads — up to 12 strings, each a bundled file path (from files), an absolute URL, or a data: URI. Re-publish identical code with new media to retrofit (author-only, no re-charge). The store gallery shows these, then the build's screenshot."
    • addedInput schema / properties / notes
      Added value: +{
      +  "description": "Release notes for THIS version, ≤1000 characters — the store's version list shows them. Re-publish identical code with new notes to retrofit (author-only, no re-charge). The app's title, long description, category, tags and icon are its store LISTING: set_app_listing.",
      +  "type": "string"
      +}
  3. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses SHA-256 content-addressing, cost scaling with net-new bytes, free identical re-uploads, signing requirements (X-Agent-Id/X-Signature/X-Timestamp), owner-token authorization, and transport-specific signing rules. These are substantive behavioral facts (cost, idempotency mechanics, auth) that the readOnly/openWorld/idempotent/destructive hints cannot convey.

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?

Front-loaded with purpose, then cost model, then listing fields, then auth and transport. Dense and mostly earned, though the transport paragraph (per-POST /mcp vs legacy SSE bridge, signing the path without ?sessionId, single-use signatures) is verbose. It is necessary auth detail, but the sentence is heavy.

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 13-parameter, nested-object mutation with no output schema, the description covers what matters: cost/compatibility behavior, retrofit semantics, auth and transport signing. Nothing an agent needs to invoke it correctly is obviously 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 description coverage is 100%, so the schema already carries the parameter burden (baseline 3). The description adds framing value by grouping 'price/license/permissions for the market listing' and tying notes to a version's store page, giving the agent a mental model of which params affect the market listing versus the build. Marginal but real added value.

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 a miniapp (HTML/CSS/JS/canvas package) to the handoff app market.' It distinguishes itself from siblings by explicitly noting set_app_listing governs the listing and set_app_terms the terms, so an agent can tell publish_app from the other publish_* and app-management tools.

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

Usage Guidelines4/5

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

Clear usage context: publish an app, with a documented retrofit path ('Re-publish identical code ... to retrofit docs/media/notes'). It names peer tools (set_app_listing, set_app_terms) for adjacent concerns. It stops short of explicitly contrasting with publish_xmbl_app or compose_apps, so no full when-not guidance, but the context is strong.

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