MCP 서버

token-of-esteem

com.tokenofesteem/token-of-esteem
커머스 및 리테일 미디어 및 콘텐츠 공개 · 연결 가능 MCP 2026-07-28

이 MCP로 할 수 있는 일

Validates, prices, orders, tracks, and cancels personalized printed booklet gifts, including payment setup and fulfillment details.

cancel_gift
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.
입력 스키마
{'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.'}}}
create_gift
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.
입력 스키마
{'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.'}}}
create_setup_link
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.
입력 스키마
{'type': 'object', 'properties': {'return_url': {'type': 'string', 'format': 'uri'}}}
get_account
Return this account's spending caps and month-to-date spend. Free. Use it to confirm budget before create_gift.
입력 스키마
{'type': 'object', 'properties': {}}
get_gift
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.
입력 스키마
{'type': 'object', 'required': ['gift_id'], 'properties': {'gift_id': {'type': 'string', 'description': 'The gift_id returned by create_gift, identifying the order to fetch.'}}}
get_pricing
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.
입력 스키마
{'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.'}}}
list_formats
List supported booklet formats. There is one today: manual_v1, a 16-page booklet. Free, no side effects.
입력 스키마
{'type': 'object', 'properties': {}}
list_gifts
Paginated list of gifts on the account, with optional status and date filters. Free.
입력 스키마
{'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.'}}}
list_image_models
List supported cover image models and their per-call cost. Free, no side effects.
입력 스키마
{'type': 'object', 'properties': {}}
list_recipients
Return the account's saved recipients (address book). Free. Reuse a recipient_id in create_gift instead of re-entering an address.
입력 스키마
{'type': 'object', 'properties': {}}
list_voices
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.
입력 스키마
{'type': 'object', 'properties': {}}
validate_brief
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.
입력 스키마
{'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_setup_link
2026년 9월 17일 12:38 PM
추가됨
list_recipients
2026년 9월 17일 12:38 PM
추가됨
get_account
2026년 9월 17일 12:38 PM
추가됨
cancel_gift
2026년 9월 17일 12:38 PM
추가됨
list_gifts
2026년 9월 17일 12:38 PM
추가됨
get_gift
2026년 9월 17일 12:38 PM
추가됨
create_gift
2026년 9월 17일 12:38 PM
추가됨
validate_brief
2026년 9월 17일 12:38 PM
추가됨
get_pricing
2026년 9월 17일 12:38 PM
추가됨
list_image_models
2026년 9월 17일 12:38 PM
추가됨
list_formats
2026년 9월 17일 12:38 PM
추가됨
list_voices
2026년 9월 17일 12:38 PM