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, HTTP
https://simpler.asia/mcp
What it can do
| Tool | What it says it does |
|---|---|
agent_note_list | List your agent_note rows (newest first). |
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 subject/body stay fixed forever so a recipient can never rewrite… |
agent_note_read | Read one agent_note by id. |
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 (claims can narrow it further); every recipient-side failure… |
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-USD plus a USD total. NEXT: run the action, then ai.budget… |
brand_assets_list | List your brand_assets rows (newest first). |
brand_assets_read | Read one brand_assets by id. |
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 id plus the exact call to finish it, never a silent orphan… |
contact_delete | Delete a contact you own. |
contact_list | List your contact rows (newest first). |
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; zero matches on every alias refuses with the runnable… |
contact_note_delete | Delete a contact_note you own. |
contact_note_list | List your contact_note rows (newest first). |
contact_note_read | Read one contact_note by id. |
contact_read | Read one contact by id. |
contact_search | Search your contact rows by text. |
contact_update | Update a contact you own (optionally compare-and-set via expected_updated_at). |
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 their stored values, so a partial sync payload can never wipe… |
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 demands, since the schema alone cannot express it. Rows are… |
desk_surface_delete | Delete a desk_surface you own. |
desk_surface_list | List your desk_surface rows (newest first). |
desk_surface_read | Read one desk_surface by id. |
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 via delete then re-create. NEXT: desk_surface_list to find… |
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. STREAMING SUPPORTED: send Accept: text/event-stream for… |
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 never carries image bytes and identical images dedupe across… |
edit_project_delete | Delete a edit_project you own. |
edit_project_list | List your edit_project rows (newest first). |
edit_project_read | Read one edit_project by id. |
edit_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 the same image-externalization and hygiene refusal as… |
expense_aggregate | Aggregate (count/sum) over your expense rows. |
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 freezes for everyone except the approver themselves. NEXT… |
expense_budget_create | Create a expense_budget. |
expense_budget_delete | Delete a expense_budget you own. |
expense_budget_list | List your expense_budget rows (newest first). |
expense_budget_read | Read one expense_budget by id. |
expense_budget_update | Update a expense_budget you own (optionally compare-and-set via expected_updated_at). |
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, and this door always creates with is_default 0 — the 9 seeded… |
expense_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 the deleted category keep their category_id untouched and… |
expense_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 to call repeatedly or concurrently — it converges rather… |
expense_category_list | List your expense_category rows (newest first). |
expense_category_read | Read one expense_category by id. |
expense_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 category instead of trying to rename an existing slug. |
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 you resend identically with force: true. Status is… |
expense_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 change racing your read still refuses instead of silently… |
expense_list | List your expense rows (newest first). |
expense_read | Read one expense by id. |
expense_recurrence_create | Create a expense_recurrence. |
expense_recurrence_delete | Delete a expense_recurrence you own. |
expense_recurrence_list | List your expense_recurrence rows (newest first). |
expense_recurrence_read | Read one expense_recurrence by id. |
expense_recurrence_update | Update a expense_recurrence you own (optionally compare-and-set via expected_updated_at). |
expense_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 since the amount approved is the amount recorded as paid… |
expense_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 spend, so a corrected claim is a fresh expense_create, never a… |
expense_search | Search your expense rows by text. |
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 the Team Claims view. NEXT: expense_approve or… |
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 integer CENTS. Only the expense's own creator may edit it, and… |
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, 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
| When | What happened | Time |
|---|---|---|
| Answered | 4439 ms | |
| Answered | 4142 ms | |
| Answered | 2143 ms |
Next door
Is this your bot? Claim its address to add a verified badge and keep the listing current.