Skip to main content
Glama

create_proof

Idempotent

Stamp content with a permanent provenance record. Pass the sha256 hash of the content (hash it locally; the content itself is never uploaded). Returns an instant signed receipt: attach its verifyUrl, byline, badgeEmbed, and qrUrl to the published artifact. The receipt's publisher field carries the account's verified identity (domain/handle) or null. If you have no key, call create_account, store its one-time secret, and retry this same call with Authorization: Bearer <secret> (its freeStamp says whether a free stamp comes with it). If the response is payment_required or quota_exhausted, call buy_stamps and give a person the returned checkout link (prepaid packs never expire: 5 for $1.00, 10 for $1.50, 50 for $5.00, 100 for $8.00, 500 for $35.00, 1,000 for $65.00, 2,000 for $120.00), poll get_balance until the stamps arrive, then retry. To pay per stamp instead, sign one advertised x402 requirement and send it as a PAYMENT-SIGNATURE HTTP header: tool arguments can't carry it, so either configure your MCP client to send that header or POST the same JSON to https://makemark.io/proof directly. An invalid_api_key error means the key is mistyped or revoked: create a new one. The optional disclosure fields (aiDisclosure, usageNote, location) only show on visibility: public stamps and are unsigned metadata, not part of the cryptographic proof. The stamp asserts provenance from a signer at a time, not authorship truth.

Input Schema

NameRequiredDescriptionDefault
titleNoOptional human-readable title
locationNoOptional, creator-opt-in only: where this was made
usageNoteNoOptional usage/license line, e.g. "Free to share, with credit"
visibilityNoDefault private
contentHashYessha256 hex of the exact content bytes (64 chars)
contentTypeNoMIME type, e.g. text/markdown
aiDisclosureNoOptional, honest disclosure of AI involvement. Shown on the public record card.
canonicalSlugNoOptional stable slug for a canonical latest-version pointer
previousProofIdNoFor a new version of already-stamped content: the prior proof id

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / aiDisclosure
      Added value: +{
      +  "description": "Optional, honest disclosure of AI involvement. Shown on the public record card.",
      +  "enum": [
      +    "Not AI-generated",
      +    "AI-assisted",
      +    "Fully AI-generated"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / location
      Added value: +{
      +  "description": "Optional, creator-opt-in only: where this was made",
      +  "type": "string"
      +}
    • addedInput schema / properties / usageNote
      Added value: +{
      +  "description": "Optional usage/license line, e.g. \"Free to share, with credit\"",
      +  "type": "string"
      +}
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations mark it idempotent and non-destructive but say nothing about the operational reality, which the description fills in richly: content is never uploaded (only a hash), the call returns a signed receipt with specific fields, and it discloses the error taxonomy (payment_required, quota_exhausted, invalid_api_key) plus the retry flow. It also honestly scopes the proof's meaning ('provenance from a signer at a time, not authorship truth') and clarifies that disclosure fields are unsigned metadata. No contradiction with annotations.

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?

The core action is front-loaded in the first sentence, followed by the return shape, then the fallback flows. It is long and dense, and the full price table is arguably more than the description needs, but nearly every sentence carries operational information an agent needs to succeed on first call.

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?

With no output schema, the description carries the burden of explaining returns and does so (verifyUrl, byline, badgeEmbed, qrUrl, publisher). It also covers auth setup, payment paths, idempotency behavior, and the semantic limits of the proof, leaving little an agent would need to discover by trial.

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. The description adds genuine meaning beyond the schema: the disclosure fields (aiDisclosure, usageNote, location) only appear on visibility: public stamps and are unsigned, and the contentHash must be computed locally rather than uploading content. Most other parameters are left to the schema, which justifies a 4 rather than a 5.

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: 'Stamp content with a permanent provenance record.' This clearly distinguishes it from siblings like verify_proof, list_proofs, and revoke_proof, which each operate on existing proofs rather than creating one.

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?

Explicitly routes the agent to alternatives by condition: call create_account if you have no key, call buy_stamps on payment_required or quota_exhausted, poll get_balance until stamps arrive, and create a new key on invalid_api_key. This is exactly the kind of 'when to use vs. what to call next' guidance the dimension rewards.

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