Koskamo

Token of Esteem MCP

An MCP server for a small press service that allows AI agents to commission, print, and mail personalized 16-page booklets as gifts. It supports listing voices, formats, and image models, validating briefs, creating gifts, and managing orders via Stripe payment tokens.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Token of Esteem MCP logo, by Token of EsteemVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Token of Esteem
MCP endpoint (Streamable HTTP)
https://mcp.tokenofesteem.com/v1/mcp
Vendor documentation

What its tools do

12 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

12 of 12 have a description · 0 of 12 declare behavior hints · 6 of 7 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to tokenofesteem.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Commission a personalized 16-page booklet for a user or colleague
  • List available voices, formats, and image models for customization
  • Validate a gift brief before printing to ensure content safety
  • Create a gift order and handle payment via Stripe shared token

Source and maintenance

Vendor evidenceRegistry 0.1.0

Protocol and capabilities

Server
Token of Esteem 0.1.0
MCP protocol negotiated in check
2025-06-18
Tools
12 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {}
}

Tools

12 advertised

list_voices
Advertised by the server during the last successful anonymous check.

List the three comedic voices (Hype Man, Best Friend Roast, Conspiracy Theorist) and the cover image model each prefers. Free, no side effects. Call this first to pick a voice.

list_voices input schema
{
  "type": "object",
  "properties": {}
}
list_formats
Advertised by the server during the last successful anonymous check.

List supported booklet formats. There is one today: manual_v1, a 16-page booklet. Free, no side effects.

list_formats input schema
{
  "type": "object",
  "properties": {}
}
list_image_models
Advertised by the server during the last successful anonymous check.

List supported cover image models and their per-call cost. Free, no side effects.

list_image_models input schema
{
  "type": "object",
  "properties": {}
}
get_pricing
Advertised by the server during the last successful anonymous check.

Compute the exact total for a hypothetical gift (format, voice, image model, ship_to) before you commit. Free, no order is created. Call before create_gift so you know the charge.

get_pricing input schema
{
  "type": "object",
  "required": [
    "ship_to"
  ],
  "properties": {
    "voice": {
      "enum": [
        "hype_man",
        "best_friend",
        "conspiracy"
      ],
      "type": "string",
      "description": "Optional comedic voice. It does not change the price; accepted for parity with create_gift."
    },
    "format": {
      "enum": [
        "manual_v1"
      ],
      "type": "string",
      "description": "Booklet format to price. Only manual_v1 is supported today."
    },
    "ship_to": {
      "type": "object",
      "required": [
        "name",
        "line1",
        "city",
        "region",
        "postal_code",
        "country"
      ],
      "properties": {
        "city": {
          "type": "string",
          "maxLength": 60,
          "minLength": 1
        },
        "name": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1
        },
        "line1": {
          "type": "string",
          "maxLength": 120,
          "minLength": 1
        },
        "line2": {
          "type": "string",
          "maxLength": 120
        },
        "phone": {
          "type": "string",
          "maxLength": 30
        },
        "region": {
          "type": "string",
          "maxLength": 60,
          "minLength": 1
        },
        "country": {
          "type": "string",
          "pattern": "^[A-Z]{2}$",
          "maxLength": 2,
          "minLength": 2
        },
        "postal_code": {
          "type": "string",
          "maxLength": 20,
          "minLength": 1
        }
      },
      "description": "Destination address. US is supported; the total and tax depend on the destination."
    },
    "image_model": {
      "type": "string",
      "description": "Optional cover image model id. Some models add a small per-call cost."
    }
  }
}
validate_brief
Advertised by the server during the last successful anonymous check.

Run the content policy on a brief without charging or ordering. Free. Call before create_gift so a refusal surfaces early. A booklet that would wound the recipient is refused here, not at charge time.

validate_brief input schema
{
  "type": "object",
  "required": [
    "brief"
  ],
  "properties": {
    "brief": {
      "type": "object",
      "required": [
        "recipient_first_name",
        "voice",
        "tone",
        "celebrate"
      ],
      "properties": {
        "tone": {
          "enum": [
            "warm_with_ribbing",
            "warm_only",
            "deep_appreciation"
          ],
          "type": "string"
        },
        "voice": {
          "enum": [
            "hype_man",
            "best_friend",
            "conspiracy"
          ],
          "type": "string"
        },
        "in_jokes": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 200,
            "minLength": 4
          },
          "maxItems": 6,
          "minItems": 0
        },
        "celebrate": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 140,
            "minLength": 4
          },
          "maxItems": 8,
          "minItems": 2
        },
        "image_brief": {
          "type": "string",
          "maxLength": 300
        },
        "image_model": {
          "enum": [
            "flux_2_pro",
            "imagen_4",
            "ideogram_3",
            "recraft_v4",
            "gpt_image_2",
            "nano_banana_2"
          ],
          "type": "string"
        },
        "tease_gently": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 140,
            "minLength": 4
          },
          "maxItems": 6,
          "minItems": 0
        },
        "do_not_mention": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 60,
            "minLength": 1
          },
          "maxItems": 8,
          "minItems": 0
        },
        "recipient_first_name": {
          "type": "string",
          "pattern": "^[a-zA-Z\\s'-]+$",
          "maxLength": 40,
          "minLength": 1
        }
      },
      "description": "The same brief you would pass to create_gift. It is checked against the content policy, free, with no order created."
    }
  }
}
create_gift
Advertised by the server during the last successful anonymous check.

Place the order: write, print, and mail the booklet. CHARGES the buyer. The recipient is whoever you name in recipient, which may be your own user. Idempotent on idempotency_key for 24 hours. Pass shared_payment_token to pay tokenlessly, or omit it to charge the account's saved card.

create_gift input schema
{
  "type": "object",
  "required": [
    "idempotency_key",
    "brief",
    "recipient"
  ],
  "properties": {
    "brief": {
      "type": "object",
      "required": [
        "recipient_first_name",
        "voice",
        "tone",
        "celebrate"
      ],
      "properties": {
        "tone": {
          "enum": [
            "warm_with_ribbing",
            "warm_only",
            "deep_appreciation"
          ],
          "type": "string"
        },
        "voice": {
          "enum": [
            "hype_man",
            "best_friend",
            "conspiracy"
          ],
          "type": "string"
        },
        "in_jokes": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 200,
            "minLength": 4
          },
          "maxItems": 6,
          "minItems": 0
        },
        "celebrate": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 140,
            "minLength": 4
          },
          "maxItems": 8,
          "minItems": 2
        },
        "image_brief": {
          "type": "string",
          "maxLength": 300
        },
        "image_model": {
          "enum": [
            "flux_2_pro",
            "imagen_4",
            "ideogram_3",
            "recraft_v4",
            "gpt_image_2",
            "nano_banana_2"
          ],
          "type": "string"
        },
        "tease_gently": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 140,
            "minLength": 4
          },
          "maxItems": 6,
          "minItems": 0
        },
        "do_not_mention": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 60,
            "minLength": 1
          },
          "maxItems": 8,
          "minItems": 0
        },
        "recipient_first_name": {
          "type": "string",
          "pattern": "^[a-zA-Z\\s'-]+$",
          "maxLength": 40,
          "minLength": 1
        }
      },
      "description": "Structured brief about the recipient: what to celebrate, what to tease gently, and the inside jokes worth knowing."
    },
    "format": {
      "enum": [
        "manual_v1"
      ],
      "type": "string",
      "description": "Booklet format. Only manual_v1, a 16-page booklet, is supported today."
    },
    "recipient": {
      "oneOf": [
        {
          "type": "object",
          "required": [
            "recipient_id"
          ],
          "properties": {
            "recipient_id": {
              "type": "string",
              "minLength": 1
            }
          }
        },
        {
          "type": "object",
          "required": [
            "first_name",
            "ship_to"
          ],
          "properties": {
            "ship_to": {
              "type": "object",
              "required": [
                "name",
                "line1",
                "city",
                "region",
                "postal_code",
                "country"
              ],
              "properties": {
                "city": {
                  "type": "string",
                  "maxLength": 60,
                  "minLength": 1
                },
                "name": {
                  "type": "string",
                  "maxLength": 100,
                  "minLength": 1
                },
                "line1": {
                  "type": "string",
                  "maxLength": 120,
                  "minLength": 1
                },
                "line2": {
                  "type": "string",
                  "maxLength": 120
                },
                "phone": {
                  "type": "string",
                  "maxLength": 30
                },
                "region": {
                  "type": "string",
                  "maxLength": 60,
                  "minLength": 1
                },
                "country": {
                  "type": "string",
                  "pattern": "^[A-Z]{2}$",
                  "maxLength": 2,
                  "minLength": 2
                },
                "postal_code": {
                  "type": "string",
                  "maxLength": 20,
                  "minLength": 1
                }
              }
            },
            "first_name": {
              "type": "string",
              "pattern": "^[a-zA-Z\\s'-]+$",
              "maxLength": 40,
              "minLength": 1
            }
          }
        }
      ],
      "description": "Who receives the booklet and where to mail it. Pass an inline recipient with a US ship_to, or a saved recipient_id."
    },
    "agent_note": {
      "type": "string",
      "maxLength": 500,
      "description": "Optional note from the agent, stored with the order for support. Never printed in the booklet."
    },
    "idempotency_key": {
      "type": "string",
      "maxLength": 64,
      "minLength": 8,
      "description": "Caller-chosen key that makes this order idempotent for 24 hours. Reuse the same key to retry safely without charging twice."
    },
    "preview_before_print": {
      "type": "boolean",
      "description": "If true, the gift pauses for buyer review before printing instead of printing automatically."
    },
    "shared_payment_token": {
      "type": "string",
      "pattern": "^spt_",
      "description": "Single-use Stripe Shared Payment Token (spt_...) to pay without a stored card. Omit to charge the account default."
    }
  }
}
get_gift
Advertised by the server during the last successful anonymous check.

Fetch a gift by gift_id and return its full resource: status, voice, format, pricing, the recipient, and fulfillment (Lulu job id, carrier, tracking URL, estimated delivery). Free and read-only. Use it to poll progress after create_gift: status advances through the pipeline to shipped then delivered, or ends at held, refused, cancelled, or failed.

get_gift input schema
{
  "type": "object",
  "required": [
    "gift_id"
  ],
  "properties": {
    "gift_id": {
      "type": "string",
      "description": "The gift_id returned by create_gift, identifying the order to fetch."
    }
  }
}
list_gifts
Advertised by the server during the last successful anonymous check.

Paginated list of gifts on the account, with optional status and date filters. Free.

list_gifts input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Maximum number of gifts to return, 1 to 100. Defaults to 50."
    },
    "since": {
      "type": "string",
      "format": "date-time",
      "description": "Only return gifts created at or after this ISO 8601 timestamp."
    },
    "cursor": {
      "type": "string",
      "description": "Opaque pagination cursor from a previous list_gifts response."
    },
    "status": {
      "enum": [
        "created",
        "validating",
        "generating",
        "output_validating",
        "rendering",
        "awaiting_buyer_preview",
        "queued_for_print",
        "printed",
        "shipped",
        "delivered",
        "held",
        "refused",
        "cancelled",
        "failed"
      ],
      "type": "string",
      "description": "Only return gifts in this status, for example shipped, delivered, or cancelled."
    }
  }
}
cancel_gift
Advertised by the server during the last successful anonymous check.

Cancel an in-flight gift and receive the refund amount. Free. Only possible before the booklet goes to print; once printing has started it fails with cancel_too_late. Pass the gift_id from create_gift and an optional reason for your records.

cancel_gift input schema
{
  "type": "object",
  "required": [
    "gift_id"
  ],
  "properties": {
    "reason": {
      "type": "string",
      "maxLength": 200,
      "description": "Optional human-readable reason for the cancellation, recorded on the order."
    },
    "gift_id": {
      "type": "string",
      "description": "The gift_id returned by create_gift, identifying the order to cancel."
    }
  }
}
get_account
Advertised by the server during the last successful anonymous check.

Return this account's spending caps and month-to-date spend. Free. Use it to confirm budget before create_gift.

get_account input schema
{
  "type": "object",
  "properties": {}
}
list_recipients
Advertised by the server during the last successful anonymous check.

Return the account's saved recipients (address book). Free. Reuse a recipient_id in create_gift instead of re-entering an address.

list_recipients input schema
{
  "type": "object",
  "properties": {}
}
create_setup_link
Advertised by the server during the last successful anonymous check.

Return a hosted Stripe link for the buyer to save a card or wallet to the account. After that, create_gift without a shared_payment_token charges the saved card.

create_setup_link input schema
{
  "type": "object",
  "properties": {
    "return_url": {
      "type": "string",
      "format": "uri"
    }
  }
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (3 of 3 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 2 of 2 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
396 ms
95th percentile latency
396 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 396 ms · metadata changed · 12 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http token-of-esteem-mcp https://mcp.tokenofesteem.com/v1/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add token-of-esteem-mcp --url https://mcp.tokenofesteem.com/v1/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable token-of-esteem-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "token-of-esteem-mcp": {
      "url": "https://mcp.tokenofesteem.com/v1/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "token-of-esteem-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.tokenofesteem.com/v1/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start token-of-esteem-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "token-of-esteem-mcp": {
      "type": "http",
      "url": "https://mcp.tokenofesteem.com/v1/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http token-of-esteem-mcp https://mcp.tokenofesteem.com/v1/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.tokenofesteem.com/v1/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "token-of-esteem-mcp": {
      "serverUrl": "https://mcp.tokenofesteem.com/v1/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Token of Esteem MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Token of Esteem MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing