Bots St

bots.st/simpler-asia

Simpler.Asia

Manage invoices, expenses, and contacts notes

4439 ms

answered our call

State
Answered
Protocol
MCP 2025-06-18
Tools listed
200
Answered
3 of the last 3 calls

How to reach it

  • MCP, HTTPhttps://simpler.asia/mcp

What it can do

ToolWhat it says it does
agent_note_listList your agent_note rows (newest first).
agent_note_mark_readConfirm 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 subject/body stay fixed forever so a recipient can never rewrite…
agent_note_readRead one agent_note by id.
agent_note_send_cross_tenantSend 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 (claims can narrow it further); every recipient-side failure…
ai.budgetYour 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_costPrice 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-USD plus a USD total. NEXT: run the action, then ai.budget…
brand_assets_listList your brand_assets rows (newest first).
brand_assets_readRead one brand_assets by id.
consent_grant_listList your consent_grant rows (newest first).
consent_grant_readRead one consent_grant by id.
contact_createCreate 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 id plus the exact call to finish it, never a silent orphan…
contact_deleteDelete a contact you own.
contact_listList your contact rows (newest first).
contact_note_createAdd 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; zero matches on every alias refuses with the runnable…
contact_note_deleteDelete a contact_note you own.
contact_note_listList your contact_note rows (newest first).
contact_note_readRead one contact_note by id.
contact_readRead one contact by id.
contact_searchSearch your contact rows by text.
contact_updateUpdate a contact you own (optionally compare-and-set via expected_updated_at).
contact_upsertCreate-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 their stored values, so a partial sync payload can never wipe…
desk_surface_createPins 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 demands, since the schema alone cannot express it. Rows are…
desk_surface_deleteDelete a desk_surface you own.
desk_surface_listList your desk_surface rows (newest first).
desk_surface_readRead one desk_surface by id.
desk_surface_updateMoves, 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 via delete then re-create. NEXT: desk_surface_list to find…
document.extractFetch 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. STREAMING SUPPORTED: send Accept: text/event-stream for…
edit_project_createCreate 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 never carries image bytes and identical images dedupe across…
edit_project_deleteDelete a edit_project you own.
edit_project_listList your edit_project rows (newest first).
edit_project_readRead one edit_project by id.
edit_project_updateSave 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 the same image-externalization and hygiene refusal as…
expense_aggregateAggregate (count/sum) over your expense rows.
expense_approveApproves 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 freezes for everyone except the approver themselves. NEXT…
expense_budget_createCreate a expense_budget.
expense_budget_deleteDelete a expense_budget you own.
expense_budget_listList your expense_budget rows (newest first).
expense_budget_readRead one expense_budget by id.
expense_budget_updateUpdate a expense_budget you own (optionally compare-and-set via expected_updated_at).
expense_category_createAdds 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, and this door always creates with is_default 0 — the 9 seeded…
expense_category_deleteDeletes 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 the deleted category keep their category_id untouched and…
expense_category_ensure_defaultsSeeds 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 to call repeatedly or concurrently — it converges rather…
expense_category_listList your expense_category rows (newest first).
expense_category_readRead one expense_category by id.
expense_category_updateEdits 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 category instead of trying to rename an existing slug.
expense_createLogs 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 you resend identically with force: true. Status is…
expense_deleteDeletes 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 change racing your read still refuses instead of silently…
expense_listList your expense rows (newest first).
expense_readRead one expense by id.
expense_recurrence_createCreate a expense_recurrence.
expense_recurrence_deleteDelete a expense_recurrence you own.
expense_recurrence_listList your expense_recurrence rows (newest first).
expense_recurrence_readRead one expense_recurrence by id.
expense_recurrence_updateUpdate a expense_recurrence you own (optionally compare-and-set via expected_updated_at).
expense_reimburseMarks 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 since the amount approved is the amount recorded as paid…
expense_rejectRejects 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 spend, so a corrected claim is a fresh expense_create, never a…
expense_searchSearch your expense rows by text.
expense_submitSends 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 the Team Claims view. NEXT: expense_approve or…
expense_updateEdits 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 integer CENTS. Only the expense's own creator may edit it, and…
forecast.readRead 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_month_revenue_low and _high, distress_risk_pct, path_count)…

And 140 more tools.

In its maker's words

Free back office for small businesses in Singapore and Southeast Asia: invoices, expenses, stock.

Website
simpler.asia
Publisher
simpler.asia
Listed from
the official MCP Registry as asia.simpler/simpler-asia
Version
1.0.0, updated 23 Oct 2026
Kinds of work
Shops and payments, Documents and files, Messaging and support

The domain it lives on

simpler.asia
registered 1 Mar 2026 (8 months ago), at Porkbun LLC, its home page is a working site

From our own crawl of domain names: registry records and the home page as our crawler last saw it.

Every call we made

WhenWhat happenedTime
Answered4439 ms
Answered4142 ms
Answered2143 ms

Next door

Is this your bot? Claim its address to add a verified badge and keep the listing current.