Skip to content
Simpler logo

Simpler MCP server

Which MCP servers are Simpler's own, from the official registry and from asking its own domain, whether they answer, and what they offer. A program checked each of these, nobody copied them from a product page.

read 2026-10-29

← Back to Simpler

Whose server it is
  • Registry nameasia.simpler/simpler-asiaverified in the MCP registry

The registry name sits under simpler.asia. The registry only lets a publisher use that namespace after proving control of the domain through DNS or HTTP.

When we asked itchecked 2026-10-29
  • Stateanswerschecked 2026-10-29
  • Tools318
  • Server calls itselfsimpler-prod
  • Server version4fb66a9588e02a57
  • Protocol version2025-06-18

On 2026-10-29 the server answered initialize and tools/list without a sign-in. First answer in 3740 ms.

Should an agent connect itNot proven either way yet
  • Its tools do prepare invoices, receipts and payment chase-ups for approval, but not check rent and footfall before signing a lease.
  • Checked on 5 of the 7 days it takes to judge reliability.

Once connected

  • expense_create, interaction_create, invoice_create, workflow_create, spreadsheet.create_with_content change data without a sign-in: anyone with the address can call them.
  • Its definitions take about 98613 tokens of context: enable only the tools a task needs.
  • Parameters are untyped or undescribed in 117 of 320 tools: check arguments before calling.

Said by rules from the measurements above. The likely first call is a model's pick from the tool list; read its description before relying on it.

Measured dailydaily checks: 5, the first on 2026-10-29
  • INITE MCP scoreafter a weeka score needs 7 daily checks: 5 so far
  • What an agent can do with it1 of 2 use cases
  • Answeredmeasuring5 of the 7 daily checks it takes to print a share
  • Median first answer1863 ms
  • Space in an agent's context≈ 98,613 tokensthe definitions of all its tools (320), which an agent carries on every turn
  • Tool definitionsA · 94 of 100
  • Typed results0 of 320 toolsdeclared outputSchema: results come typed, read once
  • Parameters without a description: in 117 of 320

What an agent can do with it

  • can do · prepare invoices, receipts and payment chase-ups for approval
  • not sure · forecast cash flow from an uploaded spreadsheet
  • cannot · check rent and footfall before signing a lease

Each of the product's use cases, put to Jev against this server's tool list: can an agent do it with these tools?

Worth a look

  • Tools that change data, on a server that answers without a sign-in: expense_create, interaction_create, invoice_create, workflow_create, spreadsheet.create_with_content

A program checks the server once a day: initialize and tools/list, no model. Tokens are the definitions' length at about four characters a token. The grade averages six checks of every tool's name, description, schema and annotations; it says how well the tools are described, not whether they work. The score weighs what was measured and nothing else: answering (25%), doing the product's job (25%), definitions (20%), context (10%), use (10%) and how readily a client connects (10%). A part that was not measured is left out, and a hidden instruction caps the score at 40. The state of vendors' MCP servers: method and numbers →

Tools it offers318 tools · read 2026-10-29
  • 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…

  • simpler.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…

  • simpler.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…

  • agent_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…

  • contact_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…

  • expense_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…

  • expense_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…

  • expense_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…

  • interaction_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…

  • invoice_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…

  • 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…

  • invoice_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…

  • myinvois_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…

  • myinvois_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…

  • myinvois_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…

  • quote_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…

  • quote_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…

  • settlement_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…

  • sticky_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…

  • team_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…

  • workflow_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…

  • workflow_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…

  • 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…

  • sales_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…

  • sales_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…

  • invoice_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'…

  • invoice_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…

  • statement_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…

  • invoice_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…

  • forecast.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…

  • forecast.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…

  • forecast.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…

  • image.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…

  • document.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…

  • spreadsheet.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…

  • agent_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…

  • agent_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…

  • contact_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…

  • contact_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…

  • desk_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…

  • desk_surface_read

    Read one desk_surface by id.

  • desk_surface_list

    List your desk_surface rows (newest first).

The first 60 of 318, as the server listed them.

How to connect

Add the server to your MCP client config. Claude Desktop, Cursor and most other clients read this shape:

{
  "mcpServers": {
    "simpler-asia": {
      "type": "http",
      "url": "https://simpler.asia/mcp"
    }
  }
}

Add it

Claude Code, in a terminal

claude mcp add --transport http simpler https://simpler.asia/mcp

Add to CursorAdd to VS Code

claude.ai, ChatGPT and other clients: add https://simpler.asia/mcp as a custom connector in the settings.

OpenAPI spec

161 paths, read 2026-10-29. Open the spec ↗

Each line is something a program found when it went looking: the registry entry, the server's own answer, a spec that parses. A missing line means we did not find it, not that it does not exist.