{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T19:30:25.357Z","url":"https://verifymcp.io/servers/andrii-tiurin-mono-esim/www","markdownUrl":"https://verifymcp.io/servers/andrii-tiurin-mono-esim/www.md","server":{"slug":"andrii-tiurin-mono-esim","name":"Mono eSIM — Travel Connectivity for AI Agents","registryName":"io.github.Andrii-Tiurin/mono-esim","description":"Search travel eSIM plans, check devices, and create secure customer-paid checkout links.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"www","type":"remote","identifier":"https://www.monoesim.app/mcp","withdrawn":false,"url":"https://verifymcp.io/servers/andrii-tiurin-mono-esim/www","version":"0.1.0","transport":null,"scoredAt":"2026-11-05T04:13:36.757Z"},"score":{"total":60,"tier":"medium","status":"scored","weekDelta":null,"history":[{"date":"2026-11-05","total":60},{"date":"2026-11-04","total":60},{"date":"2026-11-03","total":59},{"date":"2026-11-02","total":59}]},"categories":[{"name":"Endpoint Security","score":63,"verdict":"fail","reasons":["The endpoint's TLS certificate is valid, in date, and uses a strong key.","Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (revoke_card_authorization).","HTTPS is enforced; there's no plaintext access path.","The HSTS (Strict-Transport-Security) header is present.","DNSSEC check failed: this domain isn't protected by DNSSEC."],"codes":[{"code":"tls.valid","args":{}},{"code":"auth.none_destructive","args":{"tool":"revoke_card_authorization"}},{"code":"https.enforced","args":{}},{"code":"headers.hsts_present","args":{}},{"code":"dnssec.absent","args":{}}]},{"name":"Transport & Reachability","score":100,"verdict":"pass","reasons":["Verified streamable-http transport via a live MCP handshake."],"codes":[{"code":"transport.verified","args":{"transport":"streamable-http"}}]},{"name":"Schema Quality & AI Usability","score":46,"verdict":"fail","reasons":["0% of prompts and resources have a non-trivial description (not blank, and not just the item's name).","AI-judged instruction clarity (good).","Context-footprint check failed: tool/resource definitions use about 2733 tokens (~118/item across 23 items; 21 tools + 2 resources), over budget; trim descriptions and params.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.descriptions","args":{"pct":"0"}},{"code":"schema.ai_quality","args":{"band":"good"}},{"code":"schema.footprint_heavy","args":{"avg":"118","items":"23","tools":"21","tokens":"2733","resources":"2"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":10,"verdict":"partial","reasons":["Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses."],"codes":[{"code":"stability.building_history","args":{"days":"3"}}]},{"name":"Tool Coverage","score":84,"verdict":"partial","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","53% of tool parameters carry a description."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"53"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.","An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_declared","args":{"pct":"100","annotated":"2","destructive":"2"}},{"code":"toolsafety.manipulation_clean","args":{"units":"23","judged":"23"}}]},{"name":"Capabilities","score":60,"verdict":"fail","reasons":["Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28."],"codes":[{"code":"protocol.outdated","args":{"latest":"2026-07-28","version":"2025-06-18"}}]}],"inconclusive":[],"malware":[],"components":[{"slug":"www","type":"remote","identifier":"https://www.monoesim.app/mcp","withdrawn":false,"score":60,"current":true,"url":"https://verifymcp.io/servers/andrii-tiurin-mono-esim/www","markdownUrl":"https://verifymcp.io/servers/andrii-tiurin-mono-esim/www.md"}],"facts":[{"label":"Endpoint","value":"https://www.monoesim.app/mcp"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"none"},{"label":"Version","value":"0.1.0"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"card_payment_terms","title":"Saved-card authorization terms","description":"Read the currently required consent version and conditions before create_card_authorization. Use this to explain future off-session card charges and spending authority; it never creates a card setup or charges money.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":46},{"name":"create_card_authorization","title":"Set up saved-card permission","description":"Create an offline-sandbox Stripe SetupIntent tied to this authenticated machine after explicit saved-card consent. Call card_payment_terms first, then complete the returned client_secret with Stripe.js and call sync_card_authorization; this call stores consent and limits but does not charge the card. Reuse idempotency_key on retries and never send PAN/CVC to this tool.","inputs":[{"name":"consent_version","type":"string","required":true,"description":null},{"name":"idempotency_key","type":"string","required":false,"description":null},{"name":"payment_authorized","type":"boolean","required":true,"description":null},{"name":"per_day_cents","type":"integer","required":true,"description":null},{"name":"per_purchase_cents","type":"integer","required":true,"description":null},{"name":"valid_days","type":"integer","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":137},{"name":"sync_card_authorization","title":"Verify completed card setup","description":"After completing a Stripe SetupIntent with Stripe.js, reconcile the authenticated machine's saved-card authorization with Stripe. Use the authorization_id returned by create_card_authorization; this may activate the permission only after successful setup and ownership checks, and never charges a card. Do not use it to initiate setup (create_card_authorization) or reconcile an order payment (sync_card_payment).","inputs":[{"name":"authorization_id","type":"string","required":true,"description":"Saved-card permission ID from create_card_authorization for this machine."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":104},{"name":"revoke_card_authorization","title":"Revoke saved-card permission","description":"Revoke an authenticated machine's own saved-card spending permission by authorization_id. This blocks NEW purchases against that permission, but already reserved or in-flight payments may still settle and need reconciliation. This action does not delete the Stripe customer or refund prior charges.","inputs":[{"name":"authorization_id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":68},{"name":"sync_card_payment","title":"Reconcile saved-card payment","description":"Reconcile a saved-card purchase by the order_id returned from purchase with payment_method=stripe_off_session. For this machine's order, check Stripe PaymentIntent ownership and status; the operation can resume an idempotent pending charge, complete verified fulfilment, or return a required Stripe.js/3-D Secure action. Do not retry with a new order or bypass bank authentication; use get_order to read ordinary delivery status.","inputs":[{"name":"order_id","type":"string","required":true,"description":"Order ID returned by the machine's stripe_off_session purchase."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":112},{"name":"register_machine","title":"Create sandbox machine account","description":"Create a NEW offline-sandbox machine identity with a zero-EUR test wallet and one-time API key; no email or human account is required. Use before get_wallet, fund_wallet, set_wallet_limits, or sandbox purchases; securely store the returned mak_test_ key, which cannot be retrieved again. This does not create a live payment account.","inputs":[{"name":"name","type":"string","required":true,"description":"Non-secret machine label used for audit trails (1–80 characters)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":97},{"name":"get_wallet","title":"Wallet balance and ledger","description":"Read the authenticated sandbox machine's own EUR-cent balance, spending limits, and latest ledger entries. Returns at most 100 ledger entries per call; pass offset=100, 200, ... to paginate when next_offset is present. Use fund_wallet to create a test funding checkout and set_wallet_limits to change limits; this read does neither.","inputs":[{"name":"offset","type":"integer","required":false,"description":"Zero-based ledger offset; use next_offset to fetch the next 100 entries."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":98},{"name":"set_wallet_limits","title":"Configure sandbox spending limits","description":"Change this authenticated sandbox machine's gross spending limits in integer EUR cents per purchase and per UTC day. Zero blocks future spending; refunds do not restore the consumed daily limit. Use get_wallet to inspect current limits first; this does not authorize another person's card or make a purchase.","inputs":[{"name":"per_day_cents","type":"integer","required":true,"description":null},{"name":"per_purchase_cents","type":"integer","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":84},{"name":"fund_wallet","title":"Fund sandbox wallet through test Checkout","description":"Create or retrieve an offline-sandbox Stripe TEST Checkout session for funding this authenticated machine's test wallet. amount_cents is integer EUR cents (100 = EUR 1.00); the balance changes only after verified test payment, not after opening the checkout link. Reuse idempotency_key for retries; no real money is accepted.","inputs":[{"name":"amount_cents","type":"integer","required":true,"description":null},{"name":"idempotency_key","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":94},{"name":"revoke_machine","title":"Revoke this machine API key","description":"Permanently disable the authenticated sandbox machine's current API key, preventing subsequent wallet and purchase requests with that key. The transaction and ledger history remain; this does not cash out, refund, or transfer wallet funds. Use only when decommissioning or securing the machine, not when merely changing spending limits.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":68},{"name":"payment_capabilities","title":"Available payment methods","description":"Read the payment-method capability matrix BEFORE invoking purchase. Each method reports enabled versus planned status, environment (live/sandbox/offline_sandbox), required customer interaction, supported buyer modes, and any unavailable reason. This is discovery only: listing a planned method does not mean it can charge, and autonomous payments must not fall back silently to human Stripe Checkout.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":79},{"name":"purchase","title":"Universal purchase","description":"Attempt a purchase for a quote_id from prepare_order using an explicitly selected buyer_mode and payment_method supported by payment_capabilities. stripe_checkout requires human/delegated confirmation, accepted terms, customer email and a customer-paid Stripe link; agent_wallet and stripe_off_session are available only when their offline-sandbox capabilities are enabled and the machine has the necessary authority or balance. This can create an order or start a payment; reuse the SAME idempotency_key on retries and never infer success before verified payment.","inputs":[{"name":"authorization_id","type":"string","required":false,"description":"Required for stripe_off_session; from create_card_authorization."},{"name":"buyer_mode","type":"string","required":true,"description":null},{"name":"customer_confirmed","type":"boolean","required":false,"description":null},{"name":"email","type":"string","required":false,"description":null},{"name":"idempotency_key","type":"string","required":false,"description":null},{"name":"lang","type":"string","required":false,"description":"Language for names and texts (default en)."},{"name":"payment_method","type":"string","required":true,"description":null},{"name":"quote_id","type":"string","required":true,"description":null},{"name":"terms_accepted","type":"boolean","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":200},{"name":"list_destinations","title":"List destinations","description":"List currently offered travel eSIM destinations (countries and multi-country regions) with their localized names, identifiers and starting EUR prices. Use when the travel destination is unknown or to discover valid destinations before search_plans; filter type=country or type=region, or omit it for both. Results are informational only and do not reserve inventory or prices.","inputs":[{"name":"lang","type":"string","required":false,"description":"Language for names and texts (default en)."},{"name":"type","type":"string","required":false,"description":"Filter by type."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":103},{"name":"search_plans","title":"Search eSIM plans","description":"Find available travel data eSIM plans for a country, city, region, or ISO-2 destination such as 'Japan', 'Tokyo', 'Europe', or 'TR'. Filter by minimum validity (days), minimum data (data_gb), unlimited-only, maximum EUR budget and sort order; returns matching plans, price/validity details and a cheapest-match recommendation, without reserving stock. Use get_plan to validate a selected plan before prepare_order and list_destinations if a location is not recognized.","inputs":[{"name":"data_gb","type":"number","required":false,"description":"Minimum data in GB."},{"name":"days","type":"integer","required":false,"description":"Minimum validity in days (trip length)."},{"name":"destination","type":"string","required":true,"description":"Country, city, region or ISO-2 code."},{"name":"lang","type":"string","required":false,"description":"Language for names and texts (default en)."},{"name":"limit","type":"integer","required":false,"description":null},{"name":"max_price_eur","type":"number","required":false,"description":"Maximum price in EUR."},{"name":"sort","type":"string","required":false,"description":null},{"name":"unlimited","type":"boolean","required":false,"description":"Only unlimited (true) or only fixed-data (false) plans."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":217},{"name":"get_plan","title":"Get plan details","description":"Retrieve one current eSIM plan by plan_id (from search_plans), including EUR price, coverage destination, data allowance, validity, availability, and purchase terms. Use this to confirm an offer before prepare_order; optional destination must be the exact destination slug to narrow lookup, not a free-text city. A missing or withdrawn plan returns not_found; search_plans again instead of relying on cached prices.","inputs":[{"name":"destination","type":"string","required":false,"description":"Optional destination slug (faster)."},{"name":"lang","type":"string","required":false,"description":"Language for names and texts (default en)."},{"name":"plan_id","type":"string","required":true,"description":"Exact current plan ID from search_plans, not a plan name."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":138},{"name":"compare_plans","title":"Compare plans","description":"Compare 2–10 existing eSIM plan IDs returned by search_plans or get_plan. Returns each matching plan plus the IDs of the cheapest plan, lowest EUR price per GB where calculable, and longest validity; an unknown plan ID is flagged not_found rather than silently replaced. Use for an explicit shortlist, not as the initial destination search; this makes no reservation or purchase.","inputs":[{"name":"lang","type":"string","required":false,"description":"Language for names and texts (default en)."},{"name":"plan_ids","type":"array","required":true,"description":"Two to ten exact plan IDs from search_plans; unknown IDs are reported as not_found."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":127},{"name":"check_device","title":"Check device compatibility","description":"Look up a phone model's probable eSIM compatibility by model name (for example 'iPhone 12 mini' or 'Galaxy S21'), using a device list and optional supplier check. Returns supported=true/false/null, close model matches and caveats; null means unknown, not incompatible. Always advise users to confirm an EID and carrier unlock status, especially for regional variants; this is not a purchase approval.","inputs":[{"name":"model","type":"string","required":true,"description":"Full commercial phone model such as iPhone 13 or Galaxy S23; include region variant when known."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":119},{"name":"get_terms","title":"Get terms","description":"Retrieve the latest displayed eSIM purchase terms and legal links in the requested language (en/de/ru/uk), including delivery, validity, refund/withdrawal conditions and payment. Show these to the customer before confirmation and checkout. This is read-only; it neither records agreement nor grants payment authorization.","inputs":[{"name":"lang","type":"string","required":false,"description":"Language for names and texts (default en)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":83},{"name":"prepare_order","title":"Prepare order (quote)","description":"Prepare a time-limited signed quote for a plan_id selected using search_plans or get_plan. Returns quote_id, current price and customer-confirmation requirements; the quoted price is locked for 30 minutes, but no order, payment, or eSIM is created. Next call create_checkout for customer-paid Stripe Checkout or purchase for an enabled alternate method.","inputs":[{"name":"destination","type":"string","required":false,"description":null},{"name":"lang","type":"string","required":false,"description":"Language for names and texts (default en)."},{"name":"plan_id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":109},{"name":"create_checkout","title":"Create checkout for the customer","description":"Create a pending customer-paid Stripe Checkout from a quote_id returned by prepare_order, only after the customer explicitly approved the displayed plan and price and accepted the terms. Requires the customer's email and customer_confirmed=true, terms_accepted=true; returns a checkout URL, NOT a paid eSIM, and fulfilment starts only after verified payment. Reuse one idempotency_key per intended purchase, including retries, to avoid duplicate orders; use purchase for other supported payment methods.","inputs":[{"name":"customer_confirmed","type":"boolean","required":true,"description":"true only if the customer explicitly confirmed this purchase."},{"name":"email","type":"string","required":true,"description":"Customer email; the eSIM and receipt are sent there."},{"name":"idempotency_key","type":"string","required":false,"description":"Unique per purchase (MCP). REST: send the Idempotency-Key header instead."},{"name":"lang","type":"string","required":false,"description":"Language for names and texts (default en)."},{"name":"quote_id","type":"string","required":true,"description":"From prepare_order."},{"name":"terms_accepted","type":"boolean","required":true,"description":"true only if the customer accepted immediate delivery and the loss of the withdrawal right."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":215},{"name":"get_order","title":"Get order / eSIM status","description":"Retrieve payment/fulfilment status for exactly one order using its order_id AND private order_token returned during checkout or purchase. After confirmed delivery, the response may include activation code (LPA), QR/install links and available usage data; treat the token and activation information as secrets. This is read-only and never confirms payment by itself; do not share the output publicly.","inputs":[{"name":"include_usage","type":"boolean","required":false,"description":null},{"name":"order_id","type":"string","required":true,"description":null},{"name":"order_token","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":106}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T04:13:36.000Z","track":"remote","endpoint":"https://www.monoesim.app/mcp","declaredUrl":null,"truncated":false,"tls":{"outcome":"valid","label":"Valid","version":"TLS 1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","chainError":null,"certificates":[{"subject":"CN=www.monoesim.app","issuer":"CN=YR2,O=Let's Encrypt,C=US","notBefore":"2026-10-28T00:24:18Z","notAfter":"2027-01-26T00:24:17Z","keyType":"RSA","keyBits":2048,"isCa":false},{"subject":"CN=YR2,O=Let's Encrypt,C=US","issuer":"CN=Root YR,O=ISRG,C=US","notBefore":"2025-09-03T00:00:00Z","notAfter":"2028-09-02T23:59:59Z","keyType":"RSA","keyBits":2048,"isCa":true},{"subject":"CN=Root YR,O=ISRG,C=US","issuer":"CN=ISRG Root X1,O=Internet Security Research Group,C=US","notBefore":"2026-05-13T00:00:00Z","notAfter":"2032-09-02T23:59:59Z","keyType":"RSA","keyBits":4096,"isCa":true}]},"dnssec":{"result":"insecure","label":"Not signed","name":"www.monoesim.app.","steps":[{"zone":".","outcome":"verified","label":"Verified"},{"zone":"app.","outcome":"verified","label":"Verified"},{"zone":"monoesim.app.","outcome":"insecure_proven","label":"Unsigned (proven)"}]},"auth":{"outcome":"none","label":"No authorisation required","gate":null,"gateLabel":null,"status":200,"authorizationServers":[]},"httpsRedirect":{"outcome":"https_enforced","label":"HTTPS enforced","status":308},"transports":[{"transport":"streamable-http","outcome":"verified","label":"Verified","status":200,"followed":false}],"provenance":null,"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-11-02","recent":[{"id":"chg_01a1a4bd-e0dd-7c13-952b-bead0a67ba74","kind":"score.total_changed","summary":"Trust score (59 → 60)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/andrii-tiurin-mono-esim/www#chg-chg_01a1a4bd-e0dd-7c13-952b-bead0a67ba74"},{"id":"chg_01a19f98-af65-7250-a146-67a87fda17e7","kind":"check.reverified","summary":"Stability (unverified → 0.03)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/andrii-tiurin-mono-esim/www#chg-chg_01a19f98-af65-7250-a146-67a87fda17e7"},{"id":"chg_01a19f98-af66-745d-bdbd-4449e3a19bcf","kind":"server.name_changed","summary":"The server changed its declared name (monoesim → app.monoesim/esim)","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/andrii-tiurin-mono-esim/www#chg-chg_01a19f98-af66-745d-bdbd-4449e3a19bcf"},{"id":"chg_01a19d34-5e17-7c1e-9cce-c28e543b6840","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/andrii-tiurin-mono-esim/www#chg-chg_01a19d34-5e17-7c1e-9cce-c28e543b6840"}],"truncated":false,"feedUrl":"https://verifymcp.io/servers/andrii-tiurin-mono-esim/www/changelog.json"},"links":{"html":"https://verifymcp.io/servers/andrii-tiurin-mono-esim/www","markdown":"https://verifymcp.io/servers/andrii-tiurin-mono-esim/www.md","changelogJson":"https://verifymcp.io/servers/andrii-tiurin-mono-esim/www/changelog.json","changelogRss":"https://verifymcp.io/servers/andrii-tiurin-mono-esim/www.xml","external":[{"label":"Remote endpoint","href":"https://www.monoesim.app/mcp"}]}}