MCP Server

Root My Android, callable by AI agents

This endpoint speaks the Model Context Protocol (JSON-RPC 2.0 over the Streamable HTTP transport). Agents call it with POST; the page you are reading is what humans get with GET. It exposes the same public services as the Root My Android REST API — accounts, Guardian Angel subscription plans, card & crypto checkout, vouchers, payment status and human support.

POST https://rootmyandroid.com/mcp ← point any MCP client here

Connect an agent

Add the server to any MCP-capable client (Claude, Cursor, a custom agent, …):

{
  "mcpServers": {
    "rootmyandroid": {
      "type": "http",
      "url": "https://rootmyandroid.com/mcp"
    }
  }
}

Or drive it by hand — every message is one POST with a JSON-RPC 2.0 body:

curl -sS https://rootmyandroid.com/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{
        "protocolVersion":"2025-06-18",
        "capabilities":{},
        "clientInfo":{"name":"my-agent","version":"1.0.0"}}}'

curl -sS https://rootmyandroid.com/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{
        "name":"list_subscription_plans","arguments":{}}}'

Protocol details

Serverrootmyandroid-mcp v0.1.0
TransportStreamable HTTP — requests get a single application/json response (no SSE streams)
Protocol versions2025-06-18 2025-03-26 2024-11-05 (negotiated on initialize)
Capabilitiestools (no resources, no prompts)
AuthenticationNone — the exposed services are public; an account number is the credential where one is needed
SessionsStateless — no Mcp-Session-Id is issued; every POST is independent
BatchingNot supported (one JSON-RPC message per POST, per spec)

Tools

Exactly what tools/list returns — this table is generated from the same catalog.

ToolWhat it doesArguments (? = optional)
get_network_identity The calling agent's real-time network identity (IP, user agent, ASN, TLS version, geolocation) echoed from Cloudflare edge metadata. Nothing is stored. Computed locally from the request to rootmyandroid.com/mcp; the REST twin is GET /v1/device/whoami. none
get_api_index Index of every public Root My Android REST endpoint (GET /v1/). Use this to discover operations that have no dedicated MCP tool yet. none
list_subscription_plans Catalog of the flat prepaid subscription tiers (id, label, days, features, full-fiat price and 15%-discounted crypto price). Proxy of GET /v1/billing/plans. none
create_account Create a new Mullvad-style 16-digit Root My Android account (no signup, no PII). Returns the formatted account number and its entitlements. Proxy of POST /v1/accounts. none
get_account Fetch an account and its live entitlements snapshot by account number. Proxy of GET /v1/accounts/{number}. account_number
get_entitlements An account's entitlement windows with live status. Proxy of POST /v1/entitlements. account_number
verify_feature The API gate every tier feature checks: is feature X unlocked for this account right now? Proxy of POST /v1/entitlements/verify. account_number, feature
redeem_voucher Redeem a single-use voucher code, crediting its days of Guardian Angel PRO to the account. Proxy of POST /v1/redeem. account_number, code
get_payment_status Authoritative NOWPayments payment status; reconciles credits if the IPN never arrived. Proxy of GET /v1/billing/payment/{id}. payment_id
create_card_checkout Start a subscription checkout on the card/invoice rail (NOWPayments hosted invoice, full fiat price). Returns the invoice URL to hand to the user. Proxy of POST /v1/billing/checkout. account_number, tier
create_crypto_checkout Start a subscription payment on the whitelabel crypto rail (15% discount). Returns the deposit address, amount and currency to show the user. Proxy of POST /v1/billing/crypto. account_number, tier, pay_currency
open_support_conversation Open a human support conversation with the Root My Android team and post the first message. mode "realtime" = anonymous live chat; "message" = asynchronous, requires email. Returns the conversation id and the visitor bearer token ONCE — store it and pass it as support_token to send_support_message / poll_support_messages. NOTE: conversations opened via MCP share one daily quota (5/day), because the API rate-limits by caller identity and all MCP calls originate from this worker. Proxy of POST /v1/support/conversations. mode, body, email?, account_number?
send_support_message Post a visitor reply into an existing support conversation. Proxy of POST /v1/support/conversations/{id}/messages. conversation_id, support_token, body
poll_support_messages Poll a support conversation thread (optionally only messages after a given message id). Proxy of GET /v1/support/conversations/{id}/messages. conversation_id, support_token, after?

The services behind it

Each tool is a thin proxy of the public REST API at rootmyandroid.com/v1, which owns all validation and business logic: Mullvad-style 16-digit accounts (no email, no signup), flat prepaid Guardian Angel subscription tiers with card (NOWPayments invoice) and discounted crypto (whitelabel deposit) rails, single-use voucher codes, authoritative payment status, and two-mode human support conversations. Device-facing endpoints (encrypted backups, Guardian Angel pairing, audit snapshots) remain REST-only for now — they need an on-device context an agent cannot fabricate.