{"name":"ai.palmyr/palmyr","slug":"palmyr","title":"Palmyr","description":"Agent infra: email, phone, social, domains, VPS, wallets. Paid per-action via x402, no API key.","url":"https://mcp.market/server/palmyr","rating":null,"grade":"B","score":80,"certified":false,"status":"active","category":"email","tags":["email","ai"],"presence":{"score":31,"stars":6,"forks":1,"downloads_week":null,"last_push_at":"2026-09-13T00:49:15.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-09-27T13:41:02.158Z","last_ok_at":"2026-09-27T13:41:02.158Z","latency_ms":668},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/0xArtex/Palmyr","website":"https://palmyr.ai","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://palmyr.ai/mcp"}],"packages":[],"tools":[{"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).","write_action":true,"price_micros":0,"input_schema":{"type":"object","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"}},"required":["amount"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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).","write_action":false,"price_micros":0,"input_schema":{"type":"object","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"}},"required":["card_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"card_id":{"type":"string","description":"operation_id / card_id returned by card_buy"}},"required":["card_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Server name"},"serverType":{"type":"string","description":"Hetzner server type, e.g. 'cx22'"},"image":{"type":"string","description":"OS image (default 'ubuntu-24.04')"},"location":{"type":"string"},"install":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Recipe name(s) to install, e.g. 'openclaw'"},"sshPublicKey":{"type":"string"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"required":["name","serverType"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","description":"A full domain (example.com) or a bare name (example)"}},"required":["domain"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"domain_register","description":"Register a domain to your wallet. Priced per TLD — the exact quote is returned in the 402 challenge, paid per-action via x402.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","description":"Full domain to register, e.g. 'example.com'"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"required":["domain"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Local part of the address; inbox becomes {name}@palmyr.ai"},"walletAddress":{"type":"string","description":"Solana pubkey to enable E2E encryption (defaults to the payer)"},"solanaPublicKey":{"type":"string"},"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"}},"required":["name"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"ttl_seconds":{"type":"number","description":"Lifetime in seconds before the inbox auto-expires (default 86400 = 24h, min 300, max 604800)"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"email_extend_temp","description":"Rent another 7 days on a live disposable temp inbox — each call pushes expires_at exactly 7 days further (fixed, stackable, no cap). Owner-only; expired temp inboxes cannot be revived (buy a new one via email_create_temp). Costs 0.50 USDC, paid per-action via x402.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"inbox_id":{"type":"string","description":"Temp inbox id returned by email_create_temp"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"required":["inbox_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"inbox_id":{"type":"string","description":"Inbox id returned by email_create_inbox"},"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"}},"required":["inbox_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"email_send","description":"Send an email from an inbox you own. Costs 0.08 USDC, paid per-action via x402.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"inbox_id":{"type":"string","description":"Inbox id returned by email_create_inbox"},"to":{"type":"string","description":"Recipient email address"},"subject":{"type":"string"},"body":{"type":"string"},"html":{"type":"string"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"required":["inbox_id","to","subject","body"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"intent":{"type":"string","description":"Natural-language outcome, e.g. 'register a .com and set up email on it'"},"budget_usdc":{"type":"number","description":"Max total USDC to spend across the whole plan"},"params":{"type":"object","additionalProperties":{},"description":"Optional structured parameters for the intent"},"deadline_seconds":{"type":"number"},"quality":{"type":"string","description":"Optional quality hint, e.g. 'fast' | 'best'"},"constraints":{"type":"object","additionalProperties":{}},"allow_budget_exceeded":{"type":"boolean","description":"Return an executable plan even if it exceeds budget_usdc"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"required":["intent","budget_usdc"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"palmyr_capabilities","description":"List the i402 capabilities Palmyr can plan and execute (the intent-resolver catalog). Free — no payment required.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"palmyr_pricing","description":"List every paid Palmyr capability and its live x402 price (USDC on Solana/Base). Free — no payment required.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"phone_buy_number","description":"Provision a real phone number (SMS + voice) for your agent. Costs 3.00 USDC, paid per-action via x402.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"country":{"type":"string","description":"ISO-2 country code, e.g. 'US'"},"areaCode":{"type":"string"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"required":["country"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"phone_extend_temp","description":"Rent another 30 minutes on a live disposable temp number — each call pushes expires_at 30 min further (stackable up to 24h total lease). Owner-only; expired temp leases cannot be revived (lease a fresh one via phone_temp_number). Costs 0.20 USDC, paid per-action via x402.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"number_id":{"type":"string","description":"Temp number lease id returned by phone_temp_number"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"required":["number_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"phone_read_messages","description":"Read SMS messages received on a phone number you own. Costs 0.02 USDC, paid per-action via x402.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"number_id":{"type":"string","description":"Phone number id returned by phone_buy_number"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"required":["number_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"phone_send_sms","description":"Send an SMS from a phone number you own. Costs 0.05 USDC, paid per-action via x402.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"number_id":{"type":"string","description":"Phone number id returned by phone_buy_number"},"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"}},"required":["number_id","to","body"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"phone_temp_number","description":"Lease a cheap, instant, receive-only US phone number from a pool to receive one SMS verification code — the phone analogue of a disposable temp email inbox. $0.20 for 30 min (ttl_seconds, clamped 300–1800), returned to the pool at expiry; call wait_for_otp to catch the code. Good for one-time SMS verification and phone-gated signups. Works with major sites like Google, X, and Discord; some (Telegram, WhatsApp, OpenAI) may reject it as a VoIP number — for strict sites, buy a dedicated number with phone_buy_number. Pool numbers are recycled after the lease, so use them for one-time codes only, not long-term 2FA. Costs 0.20 USDC, paid per-action via x402.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ttl_seconds":{"type":"number","description":"Lease lifetime in seconds before auto-expiry (default 1800 = 30min, min 300, max 1800)"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account_id":{"type":"string","description":"Your identifier for the TikTok account"},"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."},"proxy_session_id":{"type":"string"},"country":{"type":"string"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"required":["account_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"operation_id":{"type":"string","description":"operation_id of the scheduled post (as returned by tiktok_post / listed by tiktok_scheduled)"},"account_id":{"type":"string","description":"Your identifier for the TikTok account holding the post"},"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."},"proxy_session_id":{"type":"string"},"country":{"type":"string"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"required":["operation_id","account_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"tiktok_connect","description":"Attach a TikTok account by logging in ON THE SERVER, into that account's own persistent browser profile: returns a connect_url to hand a human, who scans the QR in the TikTok app. The recommended path — the browser that authenticates is the browser that later acts, and every other TikTok tool then works with `cookies` omitted (no jar to move). The paying wallet becomes the account's owner. Async: poll tiktok_connect_status with the returned token. Costs 0.01 USDC, paid per-action via x402.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account_id":{"type":"string","description":"Your identifier for the TikTok account (1-64 chars of A-Z a-z 0-9 . _ -)"},"country":{"type":"string","description":"ISO-2 country the login browser should exit from, e.g. 'US' — TikTok reads a scan from the wrong country as phishing"},"proxy_session_id":{"type":"string"},"tag":{"type":"string","description":"Label grouping accounts (a niche, a client); tiktok_accounts and tiktok_hooks can scope to it"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"required":["account_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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'.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"token":{"type":"string","description":"Connect token returned by tiktok_connect"}},"required":["token"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"tiktok_hooks","description":"Which caption openings actually earn views. Pass account_id or tag to measure YOUR accounts against their own median (0.001 USDC). Pass niche to report what is working in that niche across TikTok, needing no posting history — the answer for a brand-new account (0.05 USDC; tiktok_niches lists them, free). The two are never blended. Pass caption to classify a draft before posting. Paid per-action via x402 — the 402 challenge carries the exact price for the arguments you sent.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account_id":{"type":"string","description":"Measure this account you own (0.001 USDC)"},"tag":{"type":"string","description":"Pool every account you own carrying this tag (0.001 USDC)"},"niche":{"type":"string","description":"Report the niche across TikTok — any word, resolved to the nearest known niche (0.05 USDC)"},"caption":{"type":"string","description":"Classify this draft caption against the patterns in scope instead of returning the full report"},"maturity_days":{"type":"number","description":"Only count posts at least this old, so young posts don't drag the median"},"recency_days":{"type":"number","description":"Widen or narrow the recency window (hooks decay; more sample, staler signal)"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"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).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"operation_id":{"type":"string","description":"operation_id returned by the tool that started the operation"}},"required":["operation_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"account_id":{"type":"string","description":"Your identifier for the TikTok account"},"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."},"caption":{"type":"string"},"video_base64":{"type":"string","description":"Base64 video bytes — only fits tiny clips (the MCP transport caps request bodies at 1mb); prefer video_url"},"video_url":{"type":"string","description":"Public URL to the video (preferred; no size limit)"},"proxy_session_id":{"type":"string"},"country":{"type":"string"},"privacy":{"type":"string"},"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."},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"required":["account_id","caption"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account_id":{"type":"string","description":"Only posts for this account"},"include_done":{"type":"boolean","description":"Also return posts already published or cancelled"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account_id":{"type":"string","description":"Your identifier for the TikTok account"},"video_id":{"type":"string","description":"Return the full sample series for this one video"},"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"}},"required":["account_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"account_id":{"type":"string","description":"Your identifier for the X account"},"cookies":{"type":"array","description":"Non-empty array of session cookies for the X account"},"text":{"type":"string","description":"Tweet text"},"proxy_session_id":{"type":"string"},"community_id":{"type":"string"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"required":["account_id","cookies","text"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"wait_for_otp","description":"Wait for an SMS verification code / OTP to arrive on a Palmyr phone number you own, and return the parsed code. Blocks up to timeout_s (default 60, max 90) checking every ~2s — one call replaces hand-rolled polling of phone_read_messages during account signups and 2FA flows. Messages that arrived up to lookback_s seconds (default 10) BEFORE the call also match, so a code that landed early is not missed — pass lookback_s=0 when reusing a number across signups so a stale code can't be re-served. Default extraction handles standalone 4-8 digit codes, 'code is/code:' tokens, and Google-style G-XXXXXX; pass pattern to override (max 256 chars; a pattern that blows its per-match budget is dropped mid-wait and pattern_timeout: true is reported). Returns { found: true, code, message_text } on a hit or { found: false, waited_s } on timeout (not an error — just call again). Costs 0.02 USDC, paid per-action via x402.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"number_id":{"type":"string","description":"Phone number id returned by phone_buy_number"},"timeout_s":{"type":"number","description":"Seconds to block waiting (default 60, max 90)"},"lookback_s":{"type":"number","description":"Also match messages received up to this many seconds before the call (default 10; use 0 for reused numbers)"},"pattern":{"type":"string","description":"Custom extraction regex overriding the default OTP formats (first capture group wins, else the full match; max 256 chars)"},"payment":{"type":"string","description":"base64 x402 payment payload (X-PAYMENT); omit on first call to receive payment instructions"}},"required":["number_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":80,"grade":"B","scanned_at":"2026-09-26T11:37:52.159Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-26T11:37:52.233Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1516ms"]},"poisoning":{"score":15,"max":15,"notes":["33 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 12 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 13 days ago"]},"identity":{"score":7,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year","website matches verified namespace"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://palmyr.ai/mcp","reachable":true,"authRequired":false,"latencyMs":1516,"serverInfo":{"name":"ai.palmyr/palmyr","version":"1.0.0"}}],"packages":[],"repo":{"found":true,"owner":"0xArtex","repo":"Palmyr","archived":false,"pushedAt":"2026-09-13T00:49:15Z","stars":6,"forks":1,"openIssues":4,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/108491869?v=4","ownerCreatedAt":"2022-06-30T19:56:47Z","license":"MIT"},"icon":{"url":"https://palmyr.ai/assets/logo-mark.svg","source":"site"},"presence":{"stars":6,"forks":1,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-13T00:49:15.000Z","score":31}}}},"grade_history":[],"reviews":[]}