Skip to main content
Glama

Creator agent posts a persistent canvas update to its market

kellian_post_canvas_update

Post a PERSISTENT canvas update to a market you created. Authority is the market creator wallet (ownership-governed, no markets:create scope needed): the API-key agent's bound/proven wallet must match the market creator. Renderers: text ({ body }), image ({ imageUrl, width, height } — upload bytes first via the agent market-image REST lane and reference the returned URL), embed ({ url } — YouTube/Twitch/Twitter only), link_preview ({ url }). Data payload max 4096 bytes JSON. Unlike kellian_publish_market_surface (ephemeral live slot), canvas updates persist until deleted. Rate limit 10 updates/hour/wallet.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "chainId": "<chainId>",
      "marketAddress": "<marketAddress>",
      "walletAddress": "<walletAddress>",
      "renderer": "<renderer>",
      "data": "<data>",
      "idempotencyKey": "<idempotencyKey>"
    },
    "name": "kellian_post_canvas_update"
  }
}

Input Schema

NameRequiredDescriptionDefault
dataYes
labelNo
chainIdYesChain ID for the market
rendererYes
proofNonceNoRequired single-use nonce for the wallet proof. Fetch from POST /api/auth/nonce; consumed on verification so the proof cannot be replayed.
marketAddressYes
walletAddressYesWallet address of the caller (must be market creator)
idempotencyKeyYesStable retry key. Reuse only with byte-equivalent tool arguments.
walletSignatureNoAction-bound wallet proof. Sign the canonical 'problee-mcp-auth:…' challenge (binds agent, apiKey, tool, scope, chain, resource, payloadHash, nonce, timestamp).
signatureTimestampNoUnix timestamp (seconds) used in the signed challenge message

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations: states the ownership authority model, that updates persist until deleted (versus an ephemeral slot), a concrete rate limit of 10 updates/hour/wallet, and a 4096-byte payload cap. These are exactly the behavioral facts an agent cannot derive from readOnlyHint/destructiveHint/openWorldHint alone.

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 the action and eligibility, then progressively the renderer formats and rate limit; no filler sentences. The single dense paragraph packs several distinct concerns (auth, renderers, limits) together, which slightly hurts scannability but wastes no words.

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

Completeness4/5

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

For a 10-parameter, mutation-class tool with auth proofs and an output schema, the description covers the risky unknowns: who may call it, what it produces, persistence, and rate limits. Missing are the failure mode when the caller is not the creator and any note on the required auth-proof parameters, which the agent must pick up from the schema.

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?

At 60% schema coverage the description adds real meaning: it enumerates the per-renderer data shapes (text {body}, image {imageUrl,width,height}, embed {url} restricted to YouTube/Twitch/Twitter, link_preview {url}), the byte cap on data, and that walletAddress must be the market creator. It does not clarify label, the auth-proof params, or how data interacts with the required idempotencyKey, so a small gap remains.

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 ('Post a PERSISTENT canvas update'), names the scope constraint ('to a market you created'), and explicitly contrasts with the sibling that could be confused with it, so the agent can distinguish it from kellian_publish_market_surface and kellian_list_canvas_updates without opening the schema.

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?

Gives a clear eligibility gate (market creator wallet must match the bound/proven agent wallet, no markets:create scope needed) and routes the agent away from the ephemeral sibling via the persistence contrast. It stops short of an explicit 'use this when / don't use this when' directive, leaving the agent to infer the selection rule from the contrast.

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