Simpler.Asia
Free back office for small businesses in Singapore and Southeast Asia: invoices, expenses, stock.
What it does
Simpler.Asia is an MCP server, a connector that lets an AI assistant use it as a tool. It is hosted: an assistant connects to it over the internet, nothing to install.
From the publisher's description, Electra Index matched it to one capability: invoicing. That makes it a candidate for tasks such as send and chase invoices.
Facts come from the Official MCP Registry, as declared by the publisher. Capabilities are matched automatically (low confidence) and are not a test of the tool.
At a glance
How to connect
As declared in the Official MCP Registry · hosted endpoint tested by Electra Index 2h ago (live check)Hosted endpoint
https://simpler.asia/mcpstreamable-http
In Claude Code: claude mcp add --transport http simpler-asia https://simpler.asia/mcp
MCP settings (Claude Desktop, Cursor and other MCP clients)
{
"mcpServers": {
"simpler-asia": {
"url": "https://simpler.asia/mcp"
}
}
}Live check
Electra Index connected to the hosted endpoint 2h agoONLINE Simpler.Asia answered an MCP connection on 23 Oct 2026 and introduced itself as simpler-prod 4fb66a9588e02a57 (MCP protocol 2025-06-18).
318 tools offered to AI assistants
simpler.directory· DISCOVERY TIER 1 of 3 — the service directory: one token-dense line per service (s:name st:status cost:class ops:N — purpose). START HERE instead of reading every tool. No auth required. NEXT: simpler.describe_service with a service name frsimpler.describe_service· DISCOVERY TIER 2 of 3 — one service's operations and entity shapes from the live catalog, token-dense (op lines name the underlying tool). No auth required. NEXT: simpler.invoke {service, operation, args} — or call the named tool directly.simpler.invoke· DISCOVERY TIER 3 of 3 — execute one operation: dispatches to the underlying generated tool (same gates, same envelope, same idempotency as calling it directly). Requires auth. args = the underlying tool's arguments object.simpler.outcomes· DISCOVERY TIER 0 — the OUTCOME MENU: one line per common business outcome, each mapped to ONE tool with one-call notes (composites: ONE call creates the whole document). START HERE for a business task. No auth required. NEXT: call the namedsimpler.approval_status· Check a parked approval by approval_id (returned in an APPROVAL_REQUIRED refusal). States: pending (the account owner has not decided — tell the user, do NOT retry the original call), executed (done — the result rides this response; never ragent_note_send_cross_tenant· Send a cross-tenant AI-to-AI message into another tenant's agent_note inbox — the door that turns a cross_tenant_comm consent grant into an actual reach. Both tenants must be KYB-approved and the recipient must hold an active grant (claimscontact_upsert· Create-or-merge a contact keyed on email-then-phone identity — the sync door the future desktop harness and ingest lanes write through. Matching probes email first, then phone; a hit MERGES only the fields you send (omitted fields keep theiexpense_create· Logs a new expense — amount_cents must be integer CENTS (a decimal string via `amount` also works, and `category` resolves to a category_id by name). A same-amount, same-UTC-day duplicate for the same user is refused as CONFLICT unless youexpense_submit· Sends your own draft expense into the approval queue — draft only; an already-submitted or resolved expense refuses CONFLICT, and only the expense's own creator may submit it. Nobody is notified automatically — approvers see it appear in thexpense_approve· Approves a submitted expense claim — requires the admin or owner role, and only a 'pending' expense qualifies (CONFLICT otherwise). Stamps approved_by and approved_at with the caller and the current time; once approved, the row's content frinteraction_create· Log an interaction — call, meeting, email, message, visit, payment, or other — against a contact. The ONE activity-logging door every lane funnels through, so the contact's last_contact_at freshness bumps no matter which surface logged theinvoice_create· ONE call creates the whole document: claims the next invoice number, then writes the header plus every line in `items` ([{description, quantity, unit_price_cents}], integer CENTS). client_name finds a client by name or creates one. Birth st
Show 88 more
invoice_adjustment_record· [REQUIRES APPROVAL] Records a credit note, write-off or post-issue discount on an issued invoice. A credit_note is numbered from the credit note series, holds its tax at the invoice's rate and takes reason_code and credit_outcome: reduce_bainvoice_payment_record· Records a money-in fact row against an invoice (by invoice_id or its invoice_number) in ONE call: money is integer CENTS via amount_cents, or a decimal STRING via amount — never multiply or divide yourself. A draft invoice auto-advances tomyinvois_invoice_generate· Mint a sealed LHDN e-invoice in ONE call: invoice_type, line_items (unit_price_cents in integer CENTS, tax_rate_bps in basis points), and a buyer as customer_id or an inline buyer object. Refuses until myinvois_settings_save is done; invoicmyinvois_invoice_record_submission· Record the UUID the LHDN MyInvois portal assigned after the owner keyed this e-invoice into the portal (its form or LHDN's Excel batch template). Simpler never submits to LHDN and never calls the MyInvois API; this only stores the UUID themyinvois_invoice_read· Read one sealed e-invoice by id, with its portal_field_sheet: the document's values laid out to key into the LHDN MyInvois portal form (e-invoice details, supplier, buyer, each line, totals), coded values with their meaning. Simpler never squote_create· ONE call creates the whole document: claims the next atomic quote number, then writes the header plus every line in `items` ([{description, quantity, unit_price_cents}], integer CENTS) together. client_name resolves an existing client by naquote_convert· Converts a quote into its invoice in ONE call: claims the quote's 'converted' status first (so a lost race never creates an orphan invoice), copies every live line item across, and records converted_invoice_id — nothing else to do afterwardsettlement_proposal_propose_cross_tenant· Record a payment obligation against a KYB-verified partner tenant's settlement_proposals — the record-don't-move on-ramp: this writes the row only, no money moves until a later settlement-rails door executes it. amount_cents is a nonzero insticky_note_create· Create a sticky_note.stock_item_adjust· Move stock in or out by id or item name, in one atomic write with its movements-ledger row: stock-out clamps at zero (never negative) and applied_quantity reports what actually moved. An unmatched name CREATES the item at quantity 0 first steam_assignment_create· [REQUIRES APPROVAL] Delegates a task to a teammate (or yourself) as a new team_assignment; status is workflow-owned and always starts 'pending' — passing status yourself fails validation instead of being silently overridden. Accepts naturalworkflow_create· Create a workflow — an AI operator's job: validates definition_json (a { nodes, edges, schedule? } graph) against the platform's node vocabulary, refusing unknown node types and any comms/message-shaped step that isn't a prepare_output nodeworkflow_prepared_outputs· List this tenant's APPROVED prepared outputs: drafts a workflow's prepare_output nodes parked for review, which a human then approved in the platform inbox. Pending and rejected drafts never appear here — approval happens only in the inbox,ai.budget· Your prepaid wallet, period spend, caps, and runway as a compact line DSL (~8 lines). Requires auth (your balance is closed data). Read this BEFORE committing paid actions; pair with ai.estimate_cost to price a specific call first.ai.estimate_cost· Price an AI task BEFORE running it: provider passthrough at wholesale cost, no markup — the per-token platform fee is retired, so text/reasoning passes through at cost. Anonymous — open catalog includes open pricing. Returns integer micro-Usales_receivables· Who owes you, by client: each client's unpaid balance aged by days past its due date — current (not yet due), 1-30, 31-60, 61-90 and over 90 days — counted in the business's own days (the sales_settings time zone), so an invoice due today isales_document_show· Show one invoice, quote or receipt as the document itself. When the result has a second content block, it is the document as copy-ready plain text (title, business, billed to, dates, one line per item, the totals as printed, notes, paymentinvoice_message_prepare· Prepare what a business sends a client about one issued invoice: purpose 'invoice', 'reminder' (overdue), 'receipt' (paid in full) or 'promise_follow_up' (promised date passed); left out, the one that fits. language 'en', 'ms' or 'zh'; leftinvoice_reminders_due· Today's collection list, in the business's days (its sales_settings time zone). reminders: each issued invoice still owed that is 3 days before its due date, on it, or 7 or 14 days after, as its client's reminder_cadence allows (standard, fstatement_prepare· A client's statement of account over a period of the business's own days (the sales_settings time zone): the balance they owed before it (opening), each invoice issued, payment received, credit and write-off in it with a running balance, thinvoice_handoff· Get one issued invoice ready to give the client, in one call: the document, the client link (made if it has none), the PDF (printed or the stored one) and the prepared message (invoice_message_prepare's words, with the link). ready lists thforecast.run· WHAT-IF / scenario lane: runs monthly data YOU supply through a seeded 5,000-path simulation of monthly revenue and costs; bands are simulation outputs, not calibrated probabilities. The paths are clustered into 3-7 outcome bands for the neforecast.run_stored· Run the tenant's REAL forecast from the books — cash receipts (recorded invoice payments by payment date, plus paid invoices with no recorded payment at their paid date, flagged) and expenses by expense date, monthly in the tenant's base cuforecast.read· Read the tenant's STORED forecast — the verify-read for this rail. view picks the answer, one of summary, monthly, variance, scenarios, weekly (default summary). summary: the outcome bands (label, growth_direction, probability_pct, final_moimage.generate· [paid: $0.042/image max] Generate 1-3 images from a text prompt on the first lane that delivers, tried in order: gemini-2.5-flash-image via the Cloudflare AI Gateway, square requests only ($0.0406/image), then @cf/black-forest-labs/flux-2-ddocument.extract· Fetch a document from a URL, classify its type (personal/medical/business/unknown) with keyword + PII-pattern heuristics (documents containing actual PII data are NEVER business), and return extracted text capped at 100K chars. Free. STREAMspreadsheet.create_with_content· Create a spreadsheet in the user's library from CSV content in ONE call: the platform stores the bytes (honest text/csv) and registers the file row. Free — storage costs nothing; only AI lanes bill. Returns the file row including its id. Reagent_note_mark_read· Confirm receipt of a note in your cross-tenant agent_note inbox — the ONLY edit a recipient holds, moving status unread to read under the registry's transition guard. Idempotent: re-confirming an already-read note is a no-op, and the subjecagent_note_list· List your agent_note rows (newest first).agent_note_read· Read one agent_note by id.brand_assets_read· Read one brand_assets by id.brand_assets_list· List your brand_assets rows (newest first).consent_grant_list· List your consent_grant rows (newest first).consent_grant_read· Read one consent_grant by id.contact_create· Create a contact and, in the same call, log its first note and/or first interaction — the composite first-touch door. Children validate before the contact write; if the contact commits but a child then fails, the error names the contact's icontact_update· Update a contact you own (optionally compare-and-set via expected_updated_at).contact_delete· Delete a contact you own.contact_read· Read one contact by id.contact_list· List your contact rows (newest first).contact_search· Search your contact rows by text.contact_note_create· Add a note to a contact — the same door as the granular tool, extended only to accept contact_name, contact_email or contact_phone in place of contact_id. A name match must be unique: more than one hit refuses, listing the candidate ids; zecontact_note_list· List your contact_note rows (newest first).contact_note_read· Read one contact_note by id.contact_note_delete· Delete a contact_note you own.desk_surface_create· Pins one widget or a saved artifact onto the operator's home canvas. kind='widget' requires widget_key from the shipped enum; kind='artifact' requires content_ref (an assistant artifact id) — the door enforces whichever pair the kind demanddesk_surface_update· Moves, resizes, or restacks a surface already on the desk canvas — x/y/w/h/z_index are real column writes, not a layout cache. The surface's identity is frozen here: kind, widget_key, and content_ref never change through this door, only viadesk_surface_read· Read one desk_surface by id.desk_surface_list· List your desk_surface rows (newest first).desk_surface_delete· Delete a desk_surface you own.edit_project_create· Create a canvas project from a Fabric.js toJSON serialization (canvas_json, required): every embedded data:image src is pulled out, hashed, and written to a tenant-scoped, content-addressed R2 key before the row is saved, so canvas_json nevedit_project_update· Save changes to an existing canvas project by id — the autosave door: send only the fields that changed (name, canvas_json, width, height, thumbnail_data_url), everything else on the row is left alone. A canvas_json you send goes through thedit_project_read· Read one edit_project by id.edit_project_list· List your edit_project rows (newest first).edit_project_delete· Delete a edit_project you own.expense_update· Edits an expense's own fields only — status and approval stamps refuse with VALIDATION_ERROR here since those are transitions (expense_submit, expense_approve, expense_reject, expense_reimburse). amount_cents, if changed, must stay integerexpense_delete· Deletes an expense you created — draft and rejected rows only. Pending, approved, and reimbursed rows are approval-trail records and refuse with CONFLICT (approval_locked: true), and the lock is pinned into the delete itself so a status chaexpense_reject· Rejects a submitted expense claim — requires the admin or owner role, and only a 'pending' expense qualifies (CONFLICT otherwise). rejection_reason (up to 500 chars) is optional but records why; rejected is terminal and never counts as spenexpense_reimburse· Marks an approved expense as paid out — restricted to the tenant owner because it moves real money, and only an 'approved' expense qualifies (CONFLICT otherwise). Stamps reimbursed_at, after which the row's content freezes unconditionally sexpense_read· Read one expense by id.expense_list· List your expense rows (newest first).expense_search· Search your expense rows by text.expense_aggregate· Aggregate (count/sum) over your expense rows.expense_budget_create· Create a expense_budget.expense_budget_update· Update a expense_budget you own (optionally compare-and-set via expected_updated_at).expense_budget_delete· Delete a expense_budget you own.expense_budget_read· Read one expense_budget by id.expense_budget_list· List your expense_budget rows (newest first).expense_category_create· Adds a custom category to your tenant's category table — slug must be 1-50 chars of lowercase a-z, 0-9, '-' or '_' and unique per tenant (CONFLICT if taken). is_default is server-owned: supplying it at all refuses with VALIDATION_ERROR, andexpense_category_update· Edits a category's name, icon, color, or sort_order — slug and is_default are the category's fixed identity, and any attempt to change either refuses with VALIDATION_ERROR. color, when given, must be a #rrggbb hex value. Create a new categoexpense_category_delete· Deletes a custom category — categories are tenant-shared, so any tenant member can remove one regardless of who created it; the 9 seeded defaults are undeletable and refuse with CONFLICT (default_category: true). Expenses already carrying texpense_category_ensure_defaults· Seeds the 9 canonical default categories (Food & Dining, Transport, Utilities, Shopping, Entertainment, Healthcare, Travel, Office & Supplies, Other) into your tenant, skipping any slug that already exists. Takes no arguments and is safe toexpense_category_read· Read one expense_category by id.expense_category_list· List your expense_category rows (newest first).expense_recurrence_create· Create a expense_recurrence.expense_recurrence_update· Update a expense_recurrence you own (optionally compare-and-set via expected_updated_at).expense_recurrence_delete· Delete a expense_recurrence you own.expense_recurrence_read· Read one expense_recurrence by id.expense_recurrence_list· List your expense_recurrence rows (newest first).interaction_upsert· Create-or-update a interaction keyed on source_ref.interaction_list· List your interaction rows (newest first).interaction_read· Read one interaction by id.invoice_update· Edits an invoice's header fields and status. status 'paid' cannot be set here — it derives from the payment ledger, so call invoice_payment_record instead. Status moves are machine-checked (draft to sent/cancelled, sent to cancelled); canceinvoice_share· Returns share_url, the client's view link for this invoice, and the full document (parties, lines, totals in integer CENTS) in one call. action: 'get' (default) returns the live link; 'rotate' replaces it and the old link stops working; 'reinvoice_payer_confirmation· Acts on a payer's report, sent from the invoice's client page, that they have paid. action 'accept' records the payment with the same writer as invoice_payment_record, graded counterparty_confirmed: the amount is amount_cents (or amount) whinvoice_debit_note· [REQUIRES APPROVAL] Issues a numbered debit note that raises what an issued ('sent' or 'paid') invoice is owed: an extra charge, or a price or tax correction. It is numbered from the debit note series and adds amount_cents (or a decimal STRinvoice_reissue· Voids a 'sent' invoice with no money on it and reissues it under the next number: 'sent', dated today, same client, currency, notes, terms and lines, tax on today's rules, the old days to pay unless due_date is sent. A foreign-currency sg_ginvoice_promise_set· Records the date a client promised to pay an issued invoice that still has money owed: promised_payment_date 'YYYY-MM-DD', the business's own date, today or later. clear true removes it. invoice_read then shows promise_status: pending untilinvoice_read· Returns one invoice with its money and state worked out on read, in integer CENTS: subtotal_cents, tax_cents, total_cents, paid_cents, credited_cents, adjusted_cents, remaining_cents (copy remaining_cents, never compute it). state: draft, s
The first 100 are shown.
What "online" means: the server answered an MCP connection at the time of the check. It is not a guarantee of security, quality or continuous uptime. How we test: we open an MCP session and ask for the tool list, as an AI assistant would. We never run a tool and never send a key. Checked every few days. Method
Is this your server? Monitoring Pro: a check every 30 minutes and an email within the hour when it stops answering. $9.99/month.
Tasks it helps with
Share of each task's required capabilities it covers| Send and chase invoices Invoicing | 50% |
Similar tools
Listed for the same task: send and chase invoices- FoxyInvoiceREMOTELOCALInvoicing tools for AI assistants: clients, draft invoices with computed tax, and email sending
- Pax8 MCPREMOTELOCALEvery Pax8 Partner API endpoint, plus an offline store that reconciles billing, tracks MRR, and
- QuickBooks Online MCPREMOTELOCALEvery QuickBooks Online Accounting entity, plus an offline SQLite mirror and AR/AP aging
- vn-skillsREMOTELOCALVietnam tools: VietQR, addresses, tax IDs, CCCD, holidays, money in words, lunar calendar, e-invoice
- Maxio MCPREMOTELOCALOpen, local revenue-intelligence CLI for Maxio Advanced Billing - MRR waterfalls
- Cove Data Protection MCPREMOTELOCALFleet-wide Cove Data Protection backup health, billing, and storage trends from your terminal
Ready-made AI agents
- Booke AI51$129/mo
- $49/mo · free plan
- $15/mo · free plan
Facts & evidence
Each fact shows where it was seen and when.| Fact | Value | Evidence | Source | Last confirmed |
|---|---|---|---|---|
| Hosted endpoint | https://simpler.asia/mcp | DECLARED | SRC-001 Official MCP Registry | 2h ago |
| Local install (package) | no | DECLARED | SRC-001 Official MCP Registry | 2h ago |
| Remote access (hosted) | yes | DECLARED | SRC-001 Official MCP Registry | 2h ago |
| Website | https://simpler.asia | DECLARED | SRC-001 Official MCP Registry | 2h ago |
| Registry status | active | DECLARED | SRC-001 Official MCP Registry | 2h ago |
| Version | 1.0.0 | DECLARED | SRC-001 Official MCP Registry | 2h ago |
| MCP server | yes | DECLARED | SRC-001 Official MCP Registry | 2h ago |
Change history
- NEW23 Oct 2026first seen in the index
Is this page accurate?
Flag it and our robot re-checks the official source. Reports never change a score.Is Simpler.Asia still online?
Free alerts · no accountQuestions about Simpler.Asia
How do I connect Simpler.Asia?
Use the hosted endpoint https://simpler.asia/mcp in your assistant's MCP settings. The exact settings are in "How to connect" above, as declared in the Official MCP Registry.
What tools does Simpler.Asia offer?
When Electra Index connected on 23 Oct 2026, it listed 318 tools: simpler.directory, simpler.describe_service, simpler.invoke, simpler.outcomes, simpler.approval_status, agent_note_send_cross_tenant, contact_upsert, expense_create and more. The full list is in "Live check" above.
Is Simpler.Asia online?
Yes. Its hosted endpoint answered an MCP connection from Electra Index 2h ago.
What can I use Simpler.Asia for?
Based on its description, it is most relevant to: send and chase invoices.