Palmyr

ai.palmyrPublished by palmyr.aiOfficial publisherv1.0.0Updated Oct 24, 2026

Agent infra: email, phone, social, domains, VPS, wallets. Paid per-action via x402, no API key.

Overview

AI-generated overview

Palmyr is a paid agent-infrastructure service that lets an assistant buy phone numbers, email inboxes, domains, VPS servers, prepaid cards and social posts…

What you can do
  • Provision and manage communications: create email inboxes (permanent or disposable), send and read mail, buy phone numbers, send SMS, read messages and wait for OTP codes
  • Buy and inspect prepaid Visa cards: purchase a card, poll status, list owned cards and fetch full card details
  • Register and check domains, and deploy cloud VPS servers keyed to the wallet
  • Post to X and TikTok, schedule or cancel posts, poll async operations, list connected accounts and read per-post analytics, hooks and niche reports
  • Plan multi-step outcomes with the i402 orchestrator, and list capabilities and live x402 prices
When to use it
Use it when an agent needs to provision real-world resources on its own — a phone number or inbox to receive a verification code, a domain, a server, a prepaid card, or a social account to post from — and is set up to pay in USDC per call rather than hold API keys.
Requirements
Remote streamable HTTP endpoint at palmyr.ai; no API key or signup. A funded crypto wallet holding USDC on Solana mainnet or Base, which signs x402 payments and becomes the owner of each resource. TikTok posting needs a server-side QR login via a connect link handed to a human; X posting uses injected session cookies.
Before you install
Nearly every tool spends real money in USDC, including dynamic prices for cards, domains and servers; the exact total is quoted in the 402 challenge, so check it before paying. The wallet is the identity and the only key to resources, so losing it loses access. Tools send email and SMS, post to social accounts, register domains and deploy servers — all irreversible or externally visible. Card details and message contents are returned to the caller. Payments go to a treasury address named in…

Installation

In SourceWeft

  1. Open Palmyr in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/ai.palmyr%2Fpalmyr/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "palmyr": {
      "type": "http",
      "url": "https://palmyr.ai/mcp"
    }
  }
}

README

[Palmyr]

Palmyr

Everything your AI agent needs — one CLI.

Phone, email, compute, domains, wallets, X accounts, and more. Pay with USDC. Your wallet is your identity.

[npm] [node] [typescript] [license] [services] [Solana] [Base]

Quick Start • Services • Dashboard • Skill File • Docs


Stop asking your human for a credit card.

[Palmyr CLI demo]

Quick Start

CLI

bash
npm i -g @palmyr/clipalmyr wallet create                      # local HD wallet, both Solana + Base, ready to pay
palmyr phone search --country USpalmyr email create --name my-agent --wallet SOL_PUBKEYpalmyr compute deploy --type cx23 --json  # auto-key, auto-wait, verified ssh — JSON outpalmyr compute ssh my-vps                 # drop into the new boxpalmyr domain buy --name myagent.devpalmyr twitter buy                        # $5 USDC → ready X account from the poolpalmyr twitter post @handle --body "gm"   # post immediately, no setup

Agents: pipe stdout into jq, branch on $? against the exit code table. Force JSON on a TTY with --json or PALMYR_JSON=1.

Or run without installing: npx @palmyr/cli phone search --country US

Skill File

Add to your OpenClaw / Claude Code agent: palmyr.ai/skill.md

Dashboard

Visual node-based agent deployment: palmyr.ai/dashboard.html

Services

ServiceStatusCost (USDC)
Phone✅ Live$3/number, $0.05/SMS, $0.10/call
Voice Calls✅ LiveTTS, DTMF, record, transfer, gather
Email✅ Live$2/inbox. E2E (NaCl box) when owned by a Solana key; otherwise AES-256-GCM encrypted at rest
Compute✅ Live$5–64/mo VPS + $6 one-time deploy fee. SSH hardened, choice of agent install recipe (--install hermes, --install openclaw, ...), location selection across 6 Hetzner datacenters.
Domains✅ LiveDynamic pricing, DNS management included
Wallet✅ LiveNon-custodial smart wallets on Base + Solana
Skills✅ Live3500+ from ClawHub, one-click install
Social Media Accounts✅ Live (X + TikTok)X: buy ready accounts ($5), post / reply / like / follow / update bio, name, pfp, banner, username. TikTok: connect your own via a one-shot real-browser / QR login, then post / schedule / follow / like / delete / update bio, name, avatar. Sticky residential IP per account.
i402 orchestrator✅ LiveTell Palmyr what you want, it plans + executes a sequence of x402 calls. See spec/i402.md.
Crypto Card🟡 PendingVisa debit linked to agent wallet
Address🟡 PendingPhysical mailing address for the agent
Reddit / LinkedIn🟡 PendingSame model as X — buy + operate from the CLI
Storage🟡 PendingS3-compatible object storage

How It Works

Agent calls API → gets 402 → pays USDC (Solana or Base) → service provisioned

Your wallet is your identity. Pay with USDC, your wallet address owns the resource. No API keys. No signup.

Three ways to use Palmyr

1. Call any endpoint → get 402 → pay with USDC → done

bash
# Provision a phone number ($3 USDC)curl -X POST https://palmyr.ai/phone/numbers \  -H "Content-Type: application/json" \  -d '{"country": "US"}'# → 402 Payment Required (tells you exactly how to pay)
# Pay via x402 — your wallet address becomes the ownercurl -X POST https://palmyr.ai/phone/numbers \  -H "X-PAYMENT: <base64-encoded x402 payment payload>" \  -H "Content-Type: application/json" \  -d '{"country": "US"}'# → phone number provisioned, owned by your wallet

Same wallet that provisions a resource is the only wallet that can access it. No API keys or tokens. Your agent wallet = your identity.

2. Or ask for an outcome with i402 — plan + execute client-side

bash
# Tell Palmyr what you want, not how. It returns a plan of x402 calls;# your wallet signs and executes each one itself.palmyr chat run "Launch a sneaker resale brand for US teens" --budget 60 --execute
# What you get back:#   Plan: 5 steps  $45.09 total#     s1 register_domain → palmyr.register_domain  $9.99#     s2 deploy_vps → palmyr.deploy_vps    $6.00#     s3 provision_email_inbox → palmyr.provision_email_inbox  $1.00#     s4 social_account_provision → palmyr.x_account  $15.00#     s5 social_post → palmyr.x_post       $0.50#     orchestration fee (15%):  $3.75#   Executing plan (client-side, one x402 tx per step)...#   → s1 register_domain via palmyr.register_domain ($9.99)#   ✓ s1 done in 18400ms#   → s2 deploy_vps via palmyr.deploy_vps ($6.00)#   ✓ s2 done in 62000ms#   ...#   done: completed  spent=$45.09

Multi-turn follow-ups are wallet-keyed: the server extracts your wallet from the x402 signature, finds your last active session, and (if the Haiku classifier decides the new intent continues it) extends that session — "now post 3 TikTok videos about launch week" references the brand you just launched without re-provisioning. Full spec at spec/i402.md.

Architecture note: i402 v0.1 is agent-side-execution-only. The server returns a plan of x402 endpoints; your wallet signs every step's payment directly. No custodial escrow, no server-held USDC.

3. Or use the dashboard

palmyr.ai/dashboard — visual node-based agent management.

x402 Payment

All paid endpoints accept USDC via the x402 protocol:

  1. Call any endpoint → get 402 with PAYMENT-REQUIRED header
  2. Build a USDC transfer to the treasury
  3. Send it in the X-PAYMENT header (canonical x402 v2; Payment-Signature is also accepted as a legacy alias)
  4. Server verifies onchain → returns the response

Networks: Solana mainnet + Base (EVM) Treasury (SOL): B1YEboAH3ZDscqni7cyVnGkcDroB2kqLXCwLs3Ez8oX3 Treasury (EVM): 0x7fA8aC4b42fd0C97ca983Bc73135EdbeA5bD6ab2

AgentWallet

Non-custodial smart wallets with onchain spending limits, secured by passkey (FaceID/fingerprint).

bash
npx @agntos/agentwallet create        # Deploy on Base + Solananpx @agntos/agentwallet status 0xABC  # Check balances & limitsnpx @agntos/agentwallet send \  --wallet 0xW --to 0xR --amount 10 --key 0xK
  • On-chain daily + per-tx + per-token limits
  • Passkey (biometric) is the owner key — can't be phished
  • Agent can't change its own limits
  • Source: github.com/0xArtex/agentwallet-aos

Dashboard

Visual node-based dashboard at palmyr.ai/dashboard.html:

  • Agent node → spawns Model, Channel, VPS nodes
  • AI Model → configure Anthropic/OpenRouter/OpenAI, pushes to VPS
  • Channel → Telegram/Discord with pairing code auth
  • VPS → one-click deploy with OpenClaw pre-installed
  • Skills → browse 3500+ from ClawHub, bulk install
  • Wallet → non-custodial smart wallet with on-chain limits

All nodes push config independently to the VPS. Delete a node → removes config from VPS.

Tech Stack

  • Runtime: Node.js + TypeScript + Express
  • Payments: x402 (USDC on Solana + Base)
  • Phone/Voice: Telnyx (150+ countries)
  • Email: Mailgun (send + inbound routing). E2E (NaCl box) when the inbox is keyed to a Solana wallet; otherwise AES-256-GCM encrypted at rest
  • Compute: Hetzner Cloud + cloud-init hardening
  • Domains: Namecheap API
  • Wallet: Solidity (Base) + Anchor (Solana)
  • Database: SQLite (better-sqlite3)

Self-Host

bash
git clone https://github.com/0xArtex/Palmyrcd Palmyrcp .env.example .env  # configure keysnpm installnpm run buildnpm start

Required env vars: TELNYX_API_KEY, HCLOUD_TOKEN, NAMECHEAP_API_KEY, NAMECHEAP_API_USER

License

MIT

Source: README.md at commit c2020a7

Tools

33

palmyr_pricing

Palmyr pricing

List every paid Palmyr capability and its live x402 price (USDC on Solana/Base). Free — no payment required.

Takes no parameters.

palmyr_capabilities

Palmyr capabilities

List the i402 capabilities Palmyr can plan and execute (the intent-resolver catalog). Free — no payment required.

Takes no parameters.

i402_plan

i402 plan (intent resolver)

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.

Parametersintentrequiredparamspaymentqualitybudget_usdcrequiredconstraintsdeadline_secondsallow_budget_exceeded

card_buy

Buy prepaid Visa card

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).

Parametersamountrequiredpayment

card_status

Check card purchase status

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).

Parameterscard_idrequired

card_get

Get card number/CVV

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).

Parameterscard_idrequiredpayment

card_list

List your prepaid cards

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.

Parameterspayment

email_create_inbox

Create email inbox

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.

ParametersnamerequireddomainpaymentwalletAddresssolanaPublicKey

email_create_temp

Create disposable temp inbox

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.

Parameterspaymentttl_seconds

email_extend_temp

Extend disposable temp inbox

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.

Parameterspaymentinbox_idrequired

email_send

Send email

Send an email from an inbox you own. Costs 0.08 USDC, paid per-action via x402.

Parameterstorequiredbodyrequiredhtmlpaymentsubjectrequiredinbox_idrequired

email_read_messages

Read email messages

Read decrypted messages from an inbox you own (payment wallet must match the inbox). Costs 0.02 USDC, paid per-action via x402.

Parameterslimitcursorpaymentinbox_idrequired

phone_buy_number

Buy phone number

Provision a real phone number (SMS + voice) for your agent. Costs 3.00 USDC, paid per-action via x402.

ParameterscountryrequiredpaymentareaCode

phone_send_sms

Send SMS

Send an SMS from a phone number you own. Costs 0.05 USDC, paid per-action via x402.

Parameterstorequiredbodyrequiredpaymentnumber_idrequired

phone_read_messages

Read SMS messages

Read SMS messages received on a phone number you own. Costs 0.02 USDC, paid per-action via x402.

Parameterspaymentnumber_idrequired

wait_for_otp

Wait for SMS verification code (OTP)

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.

Parameterspatternpaymentnumber_idrequiredtimeout_slookback_s

phone_temp_number

Lease disposable temp phone number

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.

Parameterspaymentttl_seconds

phone_extend_temp

Extend disposable temp phone number

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.

Parameterspaymentnumber_idrequired

twitter_post

Post to X (Twitter)

Post a tweet from an X account you control (via injected session cookies). Costs 0.001 USDC, paid per-action via x402.

Parameterstextrequiredcookiesrequiredpaymentaccount_idrequiredcommunity_idproxy_session_id

tiktok_post

Post to TikTok

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.

Parameterscaptionrequiredcookiescountrypaymentprivacyvideo_urlaccount_idrequiredschedule_atvideo_base64proxy_session_id

tiktok_operation_status

Check TikTok operation status

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).

Parametersoperation_idrequired

tiktok_connect

Connect a TikTok account (server-side login)

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.

Parameterstagcountrypaymentaccount_idrequiredproxy_session_id

tiktok_connect_status

Check TikTok connect status

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'.

Parameterstokenrequired

tiktok_accounts

List your TikTok accounts

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.

Parameterstagpayment

tiktok_analytics

Fetch TikTok analytics

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.

Parameterscookiescountrypaymentaccount_idrequiredproxy_session_id

tiktok_series

Read TikTok engagement history

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.

Parametershourspaymentvideo_idaccount_idrequired

tiktok_hooks

TikTok hook analysis

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.

Parameterstagnichecaptionpaymentaccount_idrecency_daysmaturity_days

tiktok_niches

List TikTok niches

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.

Takes no parameters.

tiktok_scheduled

List scheduled TikTok posts

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.

Parameterspaymentaccount_idinclude_done

tiktok_cancel_scheduled

Cancel a scheduled TikTok post

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.

Parameterscookiescountrypaymentaccount_idrequiredoperation_idrequiredproxy_session_id

domain_check

Check domain availability

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.

Parametersdomainrequired

domain_register

Register domain

Register a domain to your wallet. Priced per TLD — the exact quote is returned in the 402 challenge, paid per-action via x402.

Parametersdomainrequiredpayment

compute_deploy

Deploy VPS

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.

ParametersnamerequiredimageinstallpaymentlocationserverTyperequiredsshPublicKey

Version history

1
  1. v1.0.0LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts