Server definition
- Hash
- sha256:b15de8fb8efd66cfc9ca01225daa028b0ea6af5b03a5331d7380a410bf2ba6ce
- What it is
- What a remote MCP server returned when asked what it offers: 12 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "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.",
"inputSchema": {
"properties": {
"gift_id": {
"description": "The gift_id returned by create_gift, identifying the order to cancel.",
"type": "string"
},
"reason": {
"description": "Optional human-readable reason for the cancellation, recorded on the order.",
"maxLength": 200,
"type": "string"
}
},
"required": [
"gift_id"
],
"type": "object"
},
"name": "cancel_gift",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"agent_note": {
"description": "Optional note from the agent, stored with the order for support. Never printed in the booklet.",
"maxLength": 500,
"type": "string"
},
"brief": {
"description": "Structured brief about the recipient: what to celebrate, what to tease gently, and the inside jokes worth knowing.",
"properties": {
"celebrate": {
"items": {
"maxLength": 140,
"minLength": 4,
"type": "string"
},
"maxItems": 8,
"minItems": 2,
"type": "array"
},
"do_not_mention": {
"items": {
"maxLength": 60,
"minLength": 1,
"type": "string"
},
"maxItems": 8,
"minItems": 0,
"type": "array"
},
"image_brief": {
"maxLength": 300,
"type": "string"
},
"image_model": {
"enum": [
"flux_2_pro",
"imagen_4",
"ideogram_3",
"recraft_v4",
"gpt_image_2",
"nano_banana_2"
],
"type": "string"
},
"in_jokes": {
"items": {
"maxLength": 200,
"minLength": 4,
"type": "string"
},
"maxItems": 6,
"minItems": 0,
"type": "array"
},
"recipient_first_name": {
"maxLength": 40,
"minLength": 1,
"pattern": "^[a-zA-Z\\s'-]+$",
"type": "string"
},
"tease_gently": {
"items": {
"maxLength": 140,
"minLength": 4,
"type": "string"
},
"maxItems": 6,
"minItems": 0,
"type": "array"
},
"tone": {
"enum": [
"warm_with_ribbing",
"warm_only",
"deep_appreciation"
],
"type": "string"
},
"voice": {
"enum": [
"hype_man",
"best_friend",
"conspiracy"
],
"type": "string"
}
},
"required": [
"recipient_first_name",
"voice",
"tone",
"celebrate"
],
"type": "object"
},
"format": {
"description": "Booklet format. Only manual_v1, a 16-page booklet, is supported today.",
"enum": [
"manual_v1"
],
"type": "string"
},
"idempotency_key": {
"description": "Caller-chosen key that makes this order idempotent for 24 hours. Reuse the same key to retry safely without charging twice.",
"maxLength": 64,
"minLength": 8,
"type": "string"
},
"preview_before_print": {
"description": "If true, the gift pauses for buyer review before printing instead of printing automatically.",
"type": "boolean"
},
"recipient": {
"description": "Who receives the booklet and where to mail it. Pass an inline recipient with a US ship_to, or a saved recipient_id.",
"oneOf": [
{
"properties": {
"recipient_id": {
"minLength": 1,
"type": "string"
}
},
"required": [
"recipient_id"
],
"type": "object"
},
{
"properties": {
"first_name": {
"maxLength": 40,
"minLength": 1,
"pattern": "^[a-zA-Z\\s'-]+$",
"type": "string"
},
"ship_to": {
"properties": {
"city": {
"maxLength": 60,
"minLength": 1,
"type": "string"
},
"country": {
"maxLength": 2,
"minLength": 2,
"pattern": "^[A-Z]{2}$",
"type": "string"
},
"line1": {
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"line2": {
"maxLength": 120,
"type": "string"
},
"name": {
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"phone": {
"maxLength": 30,
"type": "string"
},
"postal_code": {
"maxLength": 20,
"minLength": 1,
"type": "string"
},
"region": {
"maxLength": 60,
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"line1",
"city",
"region",
"postal_code",
"country"
],
"type": "object"
}
},
"required": [
"first_name",
"ship_to"
],
"type": "object"
}
]
},
"shared_payment_token": {
"description": "Single-use Stripe Shared Payment Token (spt_...) to pay without a stored card. Omit to charge the account default.",
"pattern": "^spt_",
"type": "string"
}
},
"required": [
"idempotency_key",
"brief",
"recipient"
],
"type": "object"
},
"name": "create_gift",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"return_url": {
"format": "uri",
"type": "string"
}
},
"type": "object"
},
"name": "create_setup_link",
"outputSchema": null
},
{
"description": "Return this account's spending caps and month-to-date spend. Free. Use it to confirm budget before create_gift.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_account",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"gift_id": {
"description": "The gift_id returned by create_gift, identifying the order to fetch.",
"type": "string"
}
},
"required": [
"gift_id"
],
"type": "object"
},
"name": "get_gift",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"format": {
"description": "Booklet format to price. Only manual_v1 is supported today.",
"enum": [
"manual_v1"
],
"type": "string"
},
"image_model": {
"description": "Optional cover image model id. Some models add a small per-call cost.",
"type": "string"
},
"ship_to": {
"description": "Destination address. US is supported; the total and tax depend on the destination.",
"properties": {
"city": {
"maxLength": 60,
"minLength": 1,
"type": "string"
},
"country": {
"maxLength": 2,
"minLength": 2,
"pattern": "^[A-Z]{2}$",
"type": "string"
},
"line1": {
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"line2": {
"maxLength": 120,
"type": "string"
},
"name": {
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"phone": {
"maxLength": 30,
"type": "string"
},
"postal_code": {
"maxLength": 20,
"minLength": 1,
"type": "string"
},
"region": {
"maxLength": 60,
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"line1",
"city",
"region",
"postal_code",
"country"
],
"type": "object"
},
"voice": {
"description": "Optional comedic voice. It does not change the price; accepted for parity with create_gift.",
"enum": [
"hype_man",
"best_friend",
"conspiracy"
],
"type": "string"
}
},
"required": [
"ship_to"
],
"type": "object"
},
"name": "get_pricing",
"outputSchema": null
},
{
"description": "List supported booklet formats. There is one today: manual_v1, a 16-page booklet. Free, no side effects.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "list_formats",
"outputSchema": null
},
{
"description": "Paginated list of gifts on the account, with optional status and date filters. Free.",
"inputSchema": {
"properties": {
"cursor": {
"description": "Opaque pagination cursor from a previous list_gifts response.",
"type": "string"
},
"limit": {
"description": "Maximum number of gifts to return, 1 to 100. Defaults to 50.",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"since": {
"description": "Only return gifts created at or after this ISO 8601 timestamp.",
"format": "date-time",
"type": "string"
},
"status": {
"description": "Only return gifts in this status, for example shipped, delivered, or cancelled.",
"enum": [
"created",
"validating",
"generating",
"output_validating",
"rendering",
"awaiting_buyer_preview",
"queued_for_print",
"printed",
"shipped",
"delivered",
"held",
"refused",
"cancelled",
"failed"
],
"type": "string"
}
},
"type": "object"
},
"name": "list_gifts",
"outputSchema": null
},
{
"description": "List supported cover image models and their per-call cost. Free, no side effects.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "list_image_models",
"outputSchema": null
},
{
"description": "Return the account's saved recipients (address book). Free. Reuse a recipient_id in create_gift instead of re-entering an address.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "list_recipients",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "list_voices",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"brief": {
"description": "The same brief you would pass to create_gift. It is checked against the content policy, free, with no order created.",
"properties": {
"celebrate": {
"items": {
"maxLength": 140,
"minLength": 4,
"type": "string"
},
"maxItems": 8,
"minItems": 2,
"type": "array"
},
"do_not_mention": {
"items": {
"maxLength": 60,
"minLength": 1,
"type": "string"
},
"maxItems": 8,
"minItems": 0,
"type": "array"
},
"image_brief": {
"maxLength": 300,
"type": "string"
},
"image_model": {
"enum": [
"flux_2_pro",
"imagen_4",
"ideogram_3",
"recraft_v4",
"gpt_image_2",
"nano_banana_2"
],
"type": "string"
},
"in_jokes": {
"items": {
"maxLength": 200,
"minLength": 4,
"type": "string"
},
"maxItems": 6,
"minItems": 0,
"type": "array"
},
"recipient_first_name": {
"maxLength": 40,
"minLength": 1,
"pattern": "^[a-zA-Z\\s'-]+$",
"type": "string"
},
"tease_gently": {
"items": {
"maxLength": 140,
"minLength": 4,
"type": "string"
},
"maxItems": 6,
"minItems": 0,
"type": "array"
},
"tone": {
"enum": [
"warm_with_ribbing",
"warm_only",
"deep_appreciation"
],
"type": "string"
},
"voice": {
"enum": [
"hype_man",
"best_friend",
"conspiracy"
],
"type": "string"
}
},
"required": [
"recipient_first_name",
"voice",
"tone",
"celebrate"
],
"type": "object"
}
},
"required": [
"brief"
],
"type": "object"
},
"name": "validate_brief",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:b15de8fb8efd66cfc9ca01225daa028b0ea6af5b03a5331d7380a410bf2ba6ce | sha256sum