{"serverId":"mcp-registry/ai.palmyr/palmyr","tools":[{"name":"card_buy","fixed":{"name":"card_buy","description":"Buy a USA prepaid Visa card loaded with EXACTLY the requested balance ($5–$1000). Dynamic x402 price = amount + fee (3% min 0.50 USDC) — the 402 instructions carry the exact total. Returns 202 with an operation_id: poll card_status until ready (~10s), then fetch the number with card_get. US merchants only; non-reloadable (spend across transactions until depleted); max 6 cards per agent per rolling 24h (issuer limit).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["amount"],"properties":{"amount":{"type":"number","description":"USD balance to load on the card (min $5, max $1000, whole cents)"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Buy prepaid Visa card"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":237,"tokensAfter":237},{"name":"card_get","fixed":{"name":"card_get","description":"Retrieve a prepaid card you own: full card number, CVV, expiry, live balance. Owner-verified (0.01 USDC ownership proof; the paying wallet must be the card's buyer).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["card_id"],"properties":{"card_id":{"type":"string","description":"card_id returned by card_buy"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get card number/CVV"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":156,"tokensAfter":156},{"name":"card_list","fixed":{"name":"card_list","description":"List cards owned by the paying wallet: status, last4, balance (never full numbers — those are per-card via card_get). 0.01 USDC ownership proof.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List your prepaid cards"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":124,"tokensAfter":124},{"name":"card_status","fixed":{"name":"card_status","description":"Poll a card purchase started by card_buy (free). done=true when status is 'ready' (fetch details with card_get) or 'failed' (payment auto-refunded — see refund_status).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["card_id"],"properties":{"card_id":{"type":"string","description":"operation_id / card_id returned by card_buy"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Check card purchase status"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":124,"tokensAfter":124},{"name":"compute_deploy","fixed":{"name":"compute_deploy","description":"Deploy a cloud VPS keyed to your wallet (optionally auto-installs OpenClaw/skills). Priced per server type — the exact quote is returned in the 402 challenge, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name","serverType"],"properties":{"name":{"type":"string","description":"Server name"},"image":{"type":"string","description":"OS image (default 'ubuntu-24.04')"},"install":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Recipe name(s) to install, e.g. 'openclaw'"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"location":{"type":"string"},"serverType":{"type":"string","description":"Hetzner server type, e.g. 'cx22'"},"sshPublicKey":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Deploy VPS"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":260,"tokensAfter":260},{"name":"domain_check","fixed":{"name":"domain_check","description":"Check domain availability and per-TLD pricing. Pass a full domain (example.com) or a bare name to scan popular TLDs. Free — no payment required.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["domain"],"properties":{"domain":{"type":"string","description":"A full domain (example.com) or a bare name (example)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Check domain availability"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"email_create_inbox","fixed":{"name":"email_create_inbox","description":"Provision an email inbox at {name}@palmyr.ai (or a custom domain you own), keyed to your wallet. Costs 2.00 USDC, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name"],"properties":{"name":{"type":"string","description":"Local part of the address; inbox becomes {name}@palmyr.ai"},"domain":{"type":"string","description":"A Namecheap-registered domain you own; auto-sets MX/SPF/DKIM"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"walletAddress":{"type":"string","description":"Solana pubkey to enable E2E encryption (defaults to the payer)"},"solanaPublicKey":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create email inbox"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":229,"tokensAfter":229},{"name":"email_create_temp","fixed":{"name":"email_create_temp","description":"Provision a cheap, disposable, receive-only email inbox — ideal for receiving a one-off verification or order-confirmation email during a checkout/signup flow. The address (a natural-looking handle on a dedicated inbox domain) is returned in the response. Auto-expires (default 24h). Reads return plaintext to the owning wallet (no E2E key to manage). Costs 0.50 USDC, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"ttl_seconds":{"type":"number","description":"Lifetime in seconds before the inbox auto-expires (default 86400 = 24h, min 300, max 604800)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create disposable temp inbox"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":235,"tokensAfter":235},{"name":"email_read_messages","fixed":{"name":"email_read_messages","description":"Read decrypted messages from an inbox you own (payment wallet must match the inbox). Costs 0.02 USDC, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["inbox_id"],"properties":{"limit":{"type":"number","description":"Page size (default 50, max 200)"},"cursor":{"type":"string","description":"id of the last message from the previous page"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"inbox_id":{"type":"string","description":"Inbox id returned by email_create_inbox"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Read email messages"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":198,"tokensAfter":198},{"name":"email_send","fixed":{"name":"email_send","description":"Send an email from an inbox you own. Costs 0.08 USDC, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["inbox_id","to","subject","body"],"properties":{"to":{"type":"string","description":"Recipient email address"},"body":{"type":"string"},"html":{"type":"string"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"subject":{"type":"string"},"inbox_id":{"type":"string","description":"Inbox id returned by email_create_inbox"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Send email"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":182,"tokensAfter":182},{"name":"i402_plan","fixed":{"name":"i402_plan","description":"State an intent, get a priced execution plan. The i402 orchestrator turns a natural-language outcome into an ordered list of x402 calls your agent signs and runs. Costs 0.10 USDC per plan, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["intent","budget_usdc"],"properties":{"intent":{"type":"string","description":"Natural-language outcome, e.g. 'register a .com and set up email on it'"},"params":{"type":"object","description":"Optional structured parameters for the intent","additionalProperties":{}},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"quality":{"type":"string","description":"Optional quality hint, e.g. 'fast' | 'best'"},"budget_usdc":{"type":"number","description":"Max total USDC to spend across the whole plan"},"constraints":{"type":"object","additionalProperties":{}},"deadline_seconds":{"type":"number"},"allow_budget_exceeded":{"type":"boolean","description":"Return an executable plan even if it exceeds budget_usdc"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"i402 plan (intent resolver)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":327,"tokensAfter":327},{"name":"phone_buy_number","fixed":{"name":"phone_buy_number","description":"Provision a real phone number (SMS + voice) for your agent. Costs 3.00 USDC, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["country"],"properties":{"country":{"type":"string","description":"ISO-2 country code, e.g. 'US'"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"areaCode":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Buy phone number"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":149,"tokensAfter":149},{"name":"phone_read_messages","fixed":{"name":"phone_read_messages","description":"Read SMS messages received on a phone number you own. Costs 0.02 USDC, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["number_id"],"properties":{"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"number_id":{"type":"string","description":"Phone number id returned by phone_buy_number"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Read SMS messages"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":146,"tokensAfter":146},{"name":"phone_send_sms","fixed":{"name":"phone_send_sms","description":"Send an SMS from a phone number you own. Costs 0.05 USDC, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["number_id","to","body"],"properties":{"to":{"type":"string","description":"Recipient number in E.164, e.g. '+15551234567'"},"body":{"type":"string"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"number_id":{"type":"string","description":"Phone number id returned by phone_buy_number"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Send SMS"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":175,"tokensAfter":175},{"name":"tiktok_accounts","fixed":{"name":"tiktok_accounts","description":"List the TikTok accounts the paying wallet owns, with session health (status, profile_present, hours_since_success, last_error_code) — i.e. which of your accounts are still logged in. Costs 0.001 USDC, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"tag":{"type":"string","description":"Only accounts carrying this tag"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List your TikTok accounts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":169,"tokensAfter":169},{"name":"tiktok_analytics","fixed":{"name":"tiktok_analytics","description":"Scrape per-post analytics (views, likes, comments, shares) for a TikTok account you control, and record a sample so tiktok_series can answer 'is it still growing'. Async: returns an operation to poll with tiktok_operation_status. Costs 0.005 USDC, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["account_id"],"properties":{"cookies":{"type":"array","description":"Session cookies for the TikTok account. Omit for an account connected with tiktok_connect — its session lives in that account's own browser profile on the server, so there is no jar to send."},"country":{"type":"string"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"account_id":{"type":"string","description":"Your identifier for the TikTok account"},"proxy_session_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Fetch TikTok analytics"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":276,"tokensAfter":276},{"name":"tiktok_cancel_scheduled","fixed":{"name":"tiktok_cancel_scheduled","description":"Cancel a post queued with tiktok_post(schedule_at). TikTok has no 'unschedule', so this deletes the held video — the cancellation is recorded only once that succeeded. Async: returns an operation to poll with tiktok_operation_status. Costs 0.001 USDC, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["operation_id","account_id"],"properties":{"cookies":{"type":"array","description":"Session cookies for the TikTok account. Omit for an account connected with tiktok_connect — its session lives in that account's own browser profile on the server, so there is no jar to send."},"country":{"type":"string"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"account_id":{"type":"string","description":"Your identifier for the TikTok account holding the post"},"operation_id":{"type":"string","description":"operation_id of the scheduled post (as returned by tiktok_post / listed by tiktok_scheduled)"},"proxy_session_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Cancel a scheduled TikTok post"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":327,"tokensAfter":327},{"name":"tiktok_connect_status","fixed":{"name":"tiktok_connect_status","description":"Poll a server-side login started by tiktok_connect (free). done=true when state is 'completed' (the account is live and usable with cookies omitted) or 'failed'.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["token"],"properties":{"token":{"type":"string","description":"Connect token returned by tiktok_connect"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Check TikTok connect status"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":123,"tokensAfter":123},{"name":"tiktok_niches","fixed":{"name":"tiktok_niches","description":"List the niches tiktok_hooks can report on, with how fresh each corpus is. Free — an agent should not pay to learn what it may ask for.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List TikTok niches"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":77,"tokensAfter":77},{"name":"tiktok_operation_status","fixed":{"name":"tiktok_operation_status","description":"Poll an async TikTok operation started by tiktok_post / tiktok_analytics / tiktok_cancel_scheduled (free). done=true when status is 'posted' / 'done' (carries video_url or the op's result) or 'failed' (payment auto-refunded — see refund_status).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["operation_id"],"properties":{"operation_id":{"type":"string","description":"operation_id returned by the tool that started the operation"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Check TikTok operation status"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":157,"tokensAfter":157},{"name":"tiktok_post","fixed":{"name":"tiktok_post","description":"Post a video to a TikTok account you control (from video_base64 or video_url), immediately or scheduled. Async: returns an operation to poll with tiktok_operation_status. Costs 0.01 USDC, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["account_id","caption"],"properties":{"caption":{"type":"string"},"cookies":{"type":"array","description":"Session cookies for the TikTok account. Omit for an account connected with tiktok_connect — its session lives in that account's own browser profile on the server, so there is no jar to send."},"country":{"type":"string"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"privacy":{"type":"string"},"video_url":{"type":"string","description":"Public URL to the video (preferred; no size limit)"},"account_id":{"type":"string","description":"Your identifier for the TikTok account"},"schedule_at":{"type":"string","description":"ISO-8601 datetime to publish at. Uses TikTok's OWN scheduler, which accepts only ~15 minutes to ~10 days ahead — a time outside that window is rejected and refunded, and there is no way to schedule further out. Omit to post immediately. A scheduled post returns its video_id/video_url plus scheduled_at and pending_publish:true — the video exists immediately but its URL is NOT publicly reachable until it publishes."},"video_base64":{"type":"string","description":"Base64 video bytes — only fits tiny clips (the MCP transport caps request bodies at 1mb); prefer video_url"},"proxy_session_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Post to TikTok"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":476,"tokensAfter":476},{"name":"tiktok_scheduled","fixed":{"name":"tiktok_scheduled","description":"List the posts you have queued with tiktok_post(schedule_at), and whether each is still pending, due, or confirmed published. Palmyr's own record — TikTok exposes no way to read pending posts back, so edits made directly in TikTok Studio are invisible to it. Costs 0.001 USDC, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"account_id":{"type":"string","description":"Only posts for this account"},"include_done":{"type":"boolean","description":"Also return posts already published or cancelled"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"List scheduled TikTok posts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":218,"tokensAfter":218},{"name":"tiktok_series","fixed":{"name":"tiktok_series","description":"Read the stored per-post history for an account you own: the full time series for one video (video_id), per-video growth over a window (hours), or the latest sample per video (neither). Samples come from tiktok_analytics runs, so history exists only for what you have scraped. Costs 0.001 USDC, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["account_id"],"properties":{"hours":{"type":"number","description":"Return per-video growth over the last N hours"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"video_id":{"type":"string","description":"Return the full sample series for this one video"},"account_id":{"type":"string","description":"Your identifier for the TikTok account"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Read TikTok engagement history"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":256,"tokensAfter":256},{"name":"twitter_post","fixed":{"name":"twitter_post","description":"Post a tweet from an X account you control (via injected session cookies). Costs 0.001 USDC, paid per-action via x402.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["account_id","cookies","text"],"properties":{"text":{"type":"string","description":"Tweet text"},"cookies":{"type":"array","description":"Non-empty array of session cookies for the X account"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"},"account_id":{"type":"string","description":"Your identifier for the X account"},"community_id":{"type":"string"},"proxy_session_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Post to X (Twitter)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":213,"tokensAfter":213}],"toolsChanged":24,"tokensSaved":0,"todo":[{"tool":"compute_deploy","params":["location","sshPublicKey"]},{"tool":"email_create_inbox","params":["solanaPublicKey"]},{"tool":"email_send","params":["body","html","subject"]},{"tool":"i402_plan","params":["constraints","deadline_seconds"]},{"tool":"phone_buy_number","params":["areaCode"]},{"tool":"phone_send_sms","params":["body"]},{"tool":"tiktok_analytics","params":["country","proxy_session_id"]},{"tool":"tiktok_cancel_scheduled","params":["country","proxy_session_id"]},{"tool":"tiktok_connect","params":["proxy_session_id"]},{"tool":"tiktok_post","params":["caption","country","privacy","proxy_session_id"]},{"tool":"twitter_post","params":["community_id","proxy_session_id"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}