MCP server
Simpler.Asia Official
asia.simpler/simpler-asia
Checked 26 Oct 2026, 08:29 UTC · Connected to it and listed its tools
Free back office for small businesses in Singapore and Southeast Asia: invoices, expenses, stock.
Working at last checkVerified publisher: simpler.asiaAbout 105,790 tokens per request once connected318 tools
https://simpler.asia/mcp
At a glance
- Type
- MCP server
- Publisher
- simpler.asia (verified by the MCP Registry)
- Status
- Working at last check
- Tools
- 318
- Token cost
- About 105,790 tokens per request
- Sets up in
- Claude Code, Claude Desktop, Codex, Gemini CLI, Cursor, VS Code, Antigravity, ChatGPT, OpenAI API, Grok
- Last checked
- 26 Oct 2026, 08:29 UTC
Connect it to your agent
Opens the app, which shows the server and asks you to confirm. For other apps, copy the setup below.
Claude Code
claude mcp add --transport http simpler-asia https://simpler.asia/mcp
Claude Desktop
Settings → Connectors → Add custom connector, and paste the URL.
Codex (config.toml)
[mcp_servers.simpler-asia] url = "https://simpler.asia/mcp"
Gemini CLI
{"mcpServers":{"simpler-asia":{"httpUrl":"https://simpler.asia/mcp"}}}
Cursor
{"mcpServers":{"simpler-asia":{"url":"https://simpler.asia/mcp"}}}
VS Code
{"servers":{"simpler-asia":{"type":"http","url":"https://simpler.asia/mcp"}}}
Antigravity
agy mcp add simpler-asia https://simpler.asia/mcp
ChatGPT
Settings → Apps & Connectors → Advanced settings: turn on Developer mode, then Create a connector and paste the URL. Which plans can do this varies.
OpenAI API (Responses tools)
{"type":"mcp","server_label":"simpler-asia","server_url":"https://simpler.asia/mcp","require_approval":"always"}
Grok (xAI API tools)
{"type":"mcp","server_label":"simpler-asia","server_url":"https://simpler.asia/mcp"}
Tools
agent_note_list~149 tokens
List your agent_note rows (newest first).agent_note_mark_read~277 tokens
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 wagent_note_read~64 tokens
Read one agent_note by id.agent_note_send_cross_tenantSends messages · ~403 tokens
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 refusesai.budget~103 tokens
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~216 tokens
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 tobrand_assets_list~150 tokens
List your brand_assets rows (newest first).brand_assets_read~66 tokens
Read one brand_assets by id.consent_grant_list~150 tokens
List your consent_grant rows (newest first).consent_grant_read~66 tokens
Read one consent_grant by id.contact_create~509 tokens
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. Acontact_deleteDeletes data · ~62 tokens
Delete a contact you own.contact_list~147 tokens
List your contact rows (newest first).contact_note_create~292 tokens
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 two-stepcontact_note_deleteDeletes data · ~67 tokens
Delete a contact_note you own.contact_note_list~150 tokens
List your contact_note rows (newest first).contact_note_read~66 tokens
Read one contact_note by id.contact_read~61 tokens
Read one contact by id.contact_search~181 tokens
Search your contact rows by text.contact_update~256 tokens
Update a contact you own (optionally compare-and-set via expected_updated_at).contact_upsert~519 tokens
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 adesk_surface_create~274 tokens
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 privatdesk_surface_deleteDeletes data · ~67 tokens
Delete a desk_surface you own.desk_surface_list~150 tokens
List your desk_surface rows (newest first).desk_surface_read~66 tokens
Read one desk_surface by id.desk_surface_update~330 tokens
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 thedocument.extract~182 tokens
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 started/feedit_project_create~394 tokens
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 predit_project_deleteDeletes data · ~67 tokens
Delete a edit_project you own.edit_project_list~150 tokens
List your edit_project rows (newest first).edit_project_read~66 tokens
Read one edit_project by id.edit_project_update~456 tokens
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 edit_proexpense_aggregate~100 tokens
Aggregate (count/sum) over your expense rows.expense_approve~426 tokens
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: expexpense_budget_create~109 tokens
Create a expense_budget.expense_budget_deleteDeletes data · ~68 tokens
Delete a expense_budget you own.expense_budget_list~151 tokens
List your expense_budget rows (newest first).expense_budget_read~67 tokens
Read one expense_budget by id.expense_budget_update~188 tokens
Update a expense_budget you own (optionally compare-and-set via expected_updated_at).expense_category_create~223 tokens
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 dexpense_category_deleteDeletes data · ~238 tokens
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 simexpense_category_ensure_defaults~210 tokens
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 thanexpense_category_list~152 tokens
List your expense_category rows (newest first).expense_category_read~69 tokens
Read one expense_category by id.expense_category_update~265 tokens
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~714 tokens
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 honor-or-refuexpense_deleteDeletes data · ~434 tokens
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 deletexpense_list~147 tokens
List your expense rows (newest first).expense_read~61 tokens
Read one expense by id.expense_recurrence_create~202 tokens
Create a expense_recurrence.expense_recurrence_deleteDeletes data · ~72 tokens
Delete a expense_recurrence you own.expense_recurrence_list~153 tokens
List your expense_recurrence rows (newest first).expense_recurrence_read~71 tokens
Read one expense_recurrence by id.expense_recurrence_update~275 tokens
Update a expense_recurrence you own (optionally compare-and-set via expected_updated_at).expense_reimburse~429 tokens
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. Recexpense_reject~416 tokens
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 rexpense_search~181 tokens
Search your expense rows by text.expense_submit~418 tokens
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_rejectexpense_update~503 tokens
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 conteforecast.read~2256 tokens
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), tforecast.run~2571 tokens
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 next 6 months, with per-month revenue and cost percentiles andforecast.run_stored~792 tokens
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 currency, up to the last complete month (the current month isimage.generate~865 tokens
[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-dev via Cloudflare Workers AI ($0.00/image), then google/nanointeraction_create~366 tokens
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 the touch; the bump never moves backward, so importing older hisinteraction_list~149 tokens
List your interaction rows (newest first).interaction_read~65 tokens
Read one interaction by id.interaction_upsert~149 tokens
Create-or-update a interaction keyed on source_ref.invoice_adjustment_deleteDeletes data · ~386 tokens
[REQUIRES APPROVAL] Retires a dilution fact row — the only correction lane (adjustments are append-only; amounts are never edited). If the retired row was a credit that settled the invoice, the status rolls from 'paid' back to 'sent' and paid_at clears; the remaining balance and the derived 'writteninvoice_adjustment_list~153 tokens
List your invoice_adjustment rows (newest first).invoice_adjustment_read~71 tokens
Read one invoice_adjustment by id.invoice_adjustment_record~590 tokens
[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_balance (default) lowers what is owed; refunded_outside recordinvoice_client_create~186 tokens
Create a invoice_client.invoice_client_deleteDeletes data · ~68 tokens
Delete a invoice_client you own.invoice_client_link_tenant~425 tokens
[REQUIRES APPROVAL] Asserts that a billing client IS an on-platform tenant (or pass counterparty_tenant_id null to unlink) and retro-stamps that client's existing invoices with the link in the same call — invoices_stamped in the result is the count. Linking requires the counterparty's 'cross_tenant_invoice_client_list~151 tokens
List your invoice_client rows (newest first).invoice_client_read~67 tokens
Read one invoice_client by id.invoice_client_search~185 tokens
Search your invoice_client rows by text.invoice_client_update~269 tokens
Update a invoice_client you own (optionally compare-and-set via expected_updated_at).invoice_client_upsert~196 tokens
Create-or-update a invoice_client keyed on email.invoice_create~1407 tokens
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 status 'paid' needs items in the same call. tax_scheme sg_gstinvoice_debit_note~528 tokens
[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 STRING amount), tax at the invoice's rate inside, in its curreninvoice_handoff~394 tokens
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 the parts made; missing gives each other part's reason_code, rinvoice_item_create~431 tokens
Adds one line item to an invoice. unit_price_cents is integer CENTS, 0 or more ($15.00 → 1500); quantity is 0.001 to 1,000,000 with up to 3 decimals (1.5 hours → 1.5); unit is an optional label (hr, kg); discount_bps is an optional line discount (10% → 1000). quantity × unit_price_cents is at most 1invoice_item_deleteDeletes data · ~503 tokens
Soft-deletes a line item — it leaves the invoice and its derived total immediately, but the row is retired for audit history, never removed. expected_updated_at is required: the line's updated_at from your read (invoice_item_read); without it the removal is refused and the refusal names the currentinvoice_item_list~150 tokens
List your invoice_item rows (newest first).invoice_item_read~66 tokens
Read one invoice_item by id.invoice_item_update~569 tokens
Edits a line item's description, quantity, unit, price or discount, or re-parents it to another invoice. expected_updated_at is required: the line's updated_at from your read; without it nothing is written and the refusal names the current value; a line changed since then answers CONFLICT. Bounds: uinvoice_list~390 tokens
Lists your invoices, newest first (200 at most; pass limit and cursor to page). Every row carries the same worked-out money and state as invoice_read: total_cents, remaining_cents, state, is_overdue, days_overdue (integer CENTS, business days). To find what to chase, pass state 'overdue': only invoiinvoice_message_prepare~437 tokens
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'; left out, the client's (invoice_client_update message_language),invoice_payer_confirmation~594 tokens
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) when given, else the balance still owed; occurred_at defaultsinvoice_payment_deleteDeletes data · ~280 tokens
[REQUIRES APPROVAL] Retires a payment fact row — the only correction lane (payments are append-only; amounts are never edited). If retiring it un-settles the invoice, the reversal itself rolls the status from 'paid' back to 'sent' and clears paid_at. An agent's call parks here for a human to approveinvoice_payment_list~152 tokens
List your invoice_payment rows (newest first).invoice_payment_read~68 tokens
Read one invoice_payment by id.invoice_payment_record~487 tokens
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 to 'sent'; a cancelled invoice refuses; an amount above the reminvoice_promise_set~438 tokens
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 until that business day ends, kept when paid in full by then, broinvoice_read~253 tokens
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, sent, partially_paid, overdue, written_off, paid or cancelledinvoice_recurring_create~298 tokens
Create a invoice_recurring.invoice_recurring_deleteDeletes data · ~71 tokens
Delete a invoice_recurring you own.invoice_recurring_list~153 tokens
List your invoice_recurring rows (newest first).invoice_recurring_read~70 tokens
Read one invoice_recurring by id.invoice_recurring_skip~286 tokens
Skips a recurring template's next invoice: next_due moves one period on (the template's own weekly, monthly or yearly day) and no invoice is made. A skip does not count toward max_invoices. Refuses NOT_FOUND for an id outside your tenant (call invoice_recurring_list) and CONFLICT when the template hinvoice_recurring_update~371 tokens
Update a invoice_recurring you own (optionally compare-and-set via expected_updated_at).invoice_reissue~643 tokens
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_gst invoice issued before today needs fx_rate_to_sgd and fx_rinvoice_reminders_due~241 tokens
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, from_due, overdue_only or off; set it with invoice_client_updinvoice_search~279 tokens
Finds invoices whose text fields (invoice number, notes, payment terms) contain every word of q. Rows carry the same worked-out money and state as invoice_read: total_cents, remaining_cents, state, is_overdue (integer CENTS), and payer_confirmations_pending. Refuses an empty q with VALIDATION_ERROR:invoice_share~380 tokens
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; 'revoke' turns it off. A link the owner turned off stays off foinvoice_update~740 tokens
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); cancelled is terminal and a paid invoice never reopens by hand. Amarket_signal_create~282 tokens
Post to one of the tenant's 8 market-signal wish-bar slots — a buy, sell, swap, capacity-offer or capacity-request visible ONLY to platform-matched partners, never the wider network. The door counts your OPEN signals server-side before writing: the 9th is refused with slots_used/slots_max in the errmarket_signal_list~150 tokens
List your market_signal rows (newest first).market_signal_read~66 tokens
Read one market_signal by id.market_signal_update~258 tokens
Update a market_signal you own (optionally compare-and-set via expected_updated_at).myinvois_customer_create~309 tokens
Register a buyer in the LHDN buyer registry so it attaches to future e-invoices with one pick (customer_id) instead of typing the party every time. Validates the TIN format, and validates state_code against the LHDN state table when you send one — a buyer with no real TIN uses the LHDN generic TIN (myinvois_customer_deleteDeletes data · ~126 tokens
Delete a registered buyer. E-invoices already generated for this buyer keep their sealed copy of the buyer party and are never touched. Refuses an id outside your tenant with NOT_FOUND: call myinvois_customer_list for valid ids.myinvois_customer_list~208 tokens
List registered buyers, newest first, to pick a customer_id for myinvois_invoice_generate. An empty list means none are registered yet: call myinvois_customer_create, or send an inline buyer {name, tin} to myinvois_invoice_generate instead.myinvois_customer_read~179 tokens
Read one registered buyer by id: name, TIN, BRN, SST number, address and contact. myinvois_invoice_generate seals the name, TIN, BRN, address and contact; the buyer's SST number stays on this record and is not sealed on the e-invoice. Refuses an id outside your tenant with NOT_FOUND: call myinvois_cmyinvois_customer_search~264 tokens
Find registered buyers by text: every word must match one of the buyer's text fields, such as name, TIN, BRN, email or address. Refuses an empty q with VALIDATION_ERROR. No match returns an empty list: call myinvois_customer_create to register the buyer. NEXT: myinvois_invoice_generate with the id amyinvois_customer_update~404 tokens
Edit a registered buyer's LHDN details — send only the fields you are changing. When tin is included it is re-checked against the same format gate create runs, and when state_code is included it is re-checked against the LHDN state table, so an edited buyer stays valid to generate against. Never toumyinvois_invoice_generate~1053 tokens
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; invoice_type 02/03/04 also needs original_invoice_id naming a typemyinvois_invoice_list~152 tokens
List your myinvois_invoice rows (newest first).myinvois_invoice_read~218 tokens
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 submits to LHDN; portal_field_sheet.portal_routes names the tmyinvois_invoice_record_submission~460 tokens
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 the owner copies back. Only a type-01 original accepts a UUID: cmyinvois_invoice_search~275 tokens
Find generated e-invoices by text: every word must match one of the document's text fields, such as invoice number, buyer name or buyer TIN. Refuses an empty q with VALIDATION_ERROR. Rows carry no field sheet: call myinvois_invoice_read with the id for portal_field_sheet. No match returns an empty lmyinvois_settings_list~212 tokens
List the supplier profile: at most one row per tenant. An empty list means setup is not done, and myinvois_invoice_generate refuses until it is: call myinvois_settings_save with the company, TIN, BRN, MSIC code and address. NEXT: myinvois_invoice_generate.myinvois_settings_read~145 tokens
Read the supplier profile by id: the party printed on every e-invoice (company, TIN, BRN, SST and tourism tax numbers, MSIC code, address). Refuses an id outside your tenant with NOT_FOUND: call myinvois_settings_list, which returns the one profile row. NEXT: myinvois_settings_save to change it.myinvois_settings_save~418 tokens
[REQUIRES APPROVAL] Save the one-time LHDN supplier profile — the door checks for an existing row on your tenant and creates or updates in place, so this is the only write you ever call. Validates the TIN format, checks msic_code is a 5-digit MSIC code, and checks state_code against the LHDN state tmyinvois_template_create~252 tokens
Save a reusable line-item preset so a repeat invoice's items do not get re-typed. line_items_json is parsed and each item validated by the SAME checker myinvois_invoice_generate uses (description, quantity, unit_price_cents in integer CENTS, tax_rate_bps in basis points, tax_type/classification_codemyinvois_template_deleteDeletes data · ~119 tokens
Delete a saved line-item preset. E-invoices generated from it are never touched: each one sealed its own lines. Refuses an id outside your tenant with NOT_FOUND: call myinvois_template_list for valid ids.myinvois_template_list~200 tokens
List saved line-item presets, newest first. Each line_items_json is generate-ready: pass its items as line_items to myinvois_invoice_generate. An empty list means none are saved yet: call myinvois_template_create.myinvois_template_read~125 tokens
Read one line-item preset by id. Its line_items_json holds generate-ready items: pass them as line_items to myinvois_invoice_generate. Refuses an id outside your tenant with NOT_FOUND: call myinvois_template_list for valid ids.myinvois_template_update~270 tokens
Edit a saved line-item preset. When line_items_json is included it is re-parsed and every item re-validated exactly as create does, so an edited template cannot drift into a shape myinvois_invoice_generate would reject. NEXT: myinvois_template_list to find the id.quote_convert~451 tokens
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 afterward. Refuses if the quote is already converted (the error carriquote_create~1025 tokens
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 name or creates one. tax_scheme sg_gst or my_sst taxes each liquote_item_create~419 tokens
Adds one line item to a quote. unit_price_cents is integer CENTS, 0 or more ($15.00 → 1500); quantity is 0.001 to 1,000,000 with up to 3 decimals (1.5 hours → 1.5); unit is an optional label (hr, kg); discount_bps is an optional line discount (10% → 1000). quantity × unit_price_cents is at most 10,0quote_item_delete~451 tokens
Soft-deletes a quote line — it leaves the quote and its totals immediately, but the row is retired for audit history, never removed. expected_updated_at is required: the line's updated_at from your read (quote_item_read); without it the removal is refused and the refusal names the current value. Refquote_item_list~149 tokens
List your quote_item rows (newest first).quote_item_read~64 tokens
Read one quote_item by id.quote_item_update~565 tokens
Edits a quote line's description, quantity, unit, price or discount, or moves it to another quote. expected_updated_at is required: the line's updated_at from your read; without it nothing is written and the refusal names the current value; a line changed since then answers CONFLICT. Refuses a linequote_list~227 tokens
Lists your quotes, newest first (200 at most; pass limit and cursor to page). Every row carries total_cents (integer CENTS) and effective_status, so an expired quote reads 'expired'. Refuses a limit outside 1-200 or a malformed cursor with VALIDATION_ERROR: resend without them, or with next_cursor equote_read~178 tokens
Returns one quote with subtotal_cents, tax_cents and total_cents worked out from its live lines (integer CENTS) and effective_status, which reads 'expired' once a sent quote's valid_until has passed (the stored status never says so). A quote with a tax_scheme also returns tax_summary (each line's taquote_search~243 tokens
Finds quotes whose text fields (quote number, notes) contain every word of q; rows carry total_cents (integer CENTS) and effective_status. Refuses an empty q with VALIDATION_ERROR: send the quote number, such as QUO-2026-0001, or a word from its notes.quote_share~376 tokens
Returns share_url, the client's view link for this quote, 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; 'revoke' turns it off. A link the owner turned off stays off forquote_update~450 tokens
Edits a quote's header fields and bookkeeping status (draft, sent, accepted, declined move freely). status 'converted' and converted_invoice_id are convert-flow-owned — hand-setting either refuses, and a converted quote is frozen: no status move and no header edit (it could convert again and double-sales_document_show~590 tokens
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, payment terms and details, or on a receipt the day paid and the methsales_receivables~424 tokens
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 is still current. Only issued invoices with a balance left cosales_settings_list~151 tokens
List your sales_settings rows (newest first).sales_settings_numbering_set~378 tokens
[REQUIRES APPROVAL] Sets where a document type's numbers continue, for example after moving from another invoicing tool. doc_type: invoice, quote, credit_note, debit_note or receipt. next_number is the sequence number the next document gets (42 prints as INV-2026-042). Numbering only moves forward:sales_settings_read~67 tokens
Read one sales_settings by id.sales_settings_upsert~697 tokens
[REQUIRES APPROVAL] Saves your business identity and document defaults (one row per business; scope is 'default'). timezone is the business clock: an invoice turns overdue at midnight in that zone after its due day, and days_overdue counts days there; unset means Asia/Singapore. Left out, timezone asettlement_proposal_accept~356 tokens
Accept a settlement obligation recorded against your tenant as payee — moves status proposed to accepted and stamps accepted_at under the registry's transition guard. Calling it again on an already-accepted row is idempotent (accepted_at simply re-stamps); once a proposal reaches settled the guard rsettlement_proposal_list~154 tokens
List your settlement_proposal rows (newest first).settlement_proposal_propose_cross_tenant~453 tokens
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 integer CENTS (positive = you owe them, negative = a refund/resettlement_proposal_read~72 tokens
Read one settlement_proposal by id.simpler.approval_status~233 tokens
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 re-run the call; an approved invoice_share or quote_share keesimpler.describe_service~136 tokens
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.directory~112 tokens
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 from the listing.simpler.invoke~197 tokens
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~124 tokens
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 named tool directly, or simpler.directory for the full catalog.spreadsheet.create_with_content~338 tokens
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. Refuses: VALIDATION_ERROR when title or csv_content is empty (spreadsheet_file_create~359 tokens
Register a spreadsheet file row in the library for bytes that already sit in R2: r2_key must be a spreadsheets/<your tenant>/ key minted by the upload route or spreadsheet.create_with_content — a caller-invented, foreign-tenant, or wrong-domain key is refused. sheet_count, row_count, and column_counspreadsheet_file_deleteDeletes data · ~384 tokens
Soft-delete a spreadsheet file: stamps deleted_at on the row so it drops out of the library and folder listings, while the row and its R2 object both survive untouched — there is no purge or restore lane yet, so this cannot be reversed through any current door. Requires the file id; an empty id is rspreadsheet_file_list~152 tokens
List your spreadsheet_file rows (newest first).spreadsheet_file_read~69 tokens
Read one spreadsheet_file by id.spreadsheet_file_search~186 tokens
Search your spreadsheet_file rows by text.spreadsheet_file_update~428 tokens
Edit a spreadsheet file's metadata — title, tags, folder_id, or the AI-analysis fields — without touching the underlying R2 object. r2_key and source are birth facts: including either field in the call at all, even set to its current value, is refused — re-upload as a new file to change custody or pspreadsheet_folder_create~75 tokens
Create a spreadsheet_folder.spreadsheet_folder_deleteDeletes data · ~72 tokens
Delete a spreadsheet_folder you own.spreadsheet_folder_list~153 tokens
List your spreadsheet_folder rows (newest first).spreadsheet_folder_read~71 tokens
Read one spreadsheet_folder by id.spreadsheet_folder_update~159 tokens
Update a spreadsheet_folder you own (optionally compare-and-set via expected_updated_at).statement_prepare~660 tokens
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, the balance at its end (closing), and what was still owed at isticky_note_create~134 tokens
Create a sticky_note.sticky_note_deleteDeletes data · ~66 tokens
Delete a sticky_note you own.sticky_note_dismiss~300 tokens
Clear a sticky note's reminder (triggers_at back to NULL) so it drops out of the sticky_note_due poll — call this after the host fires the local notification for it. Runs through the same tenant-scoped write path as every entity update, but via a clear-properties op: ordinary updates ignore null valsticky_note_due~264 tokens
Read this tenant's sticky notes whose reminder time (triggers_at) has arrived — the poll the desktop host runs to know what to fire as a local notification, since the web itself has no send channel. Read-only, no arguments: now is always the server's clock, never a caller-supplied value, and only nosticky_note_list~149 tokens
List your sticky_note rows (newest first).sticky_note_update~215 tokens
Update a sticky_note you own (optionally compare-and-set via expected_updated_at).stock_item_adjust~554 tokens
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 so the delivery still lands as an audited ledger row; a namestock_item_create~160 tokens
Create a stock_item.stock_item_deleteDeletes data · ~324 tokens
Soft-delete a stock item by id: sets is_active to 0 while its movements-ledger history stays intact. stock_item_adjust then refuses the id as NOT_FOUND and stops resolving it by name, so a later delivery under the same name creates a fresh item instead of reviving this one. stock_item_list and stockstock_item_list~149 tokens
List your stock_item rows (newest first).stock_item_read~64 tokens
Read one stock_item by id.stock_item_search~183 tokens
Search your stock_item rows by text.stock_item_update~242 tokens
Update a stock_item you own (optionally compare-and-set via expected_updated_at).studio_character_create~123 tokens
Create a studio_character.studio_character_deleteDeletes data · ~70 tokens
Delete a studio_character you own.studio_character_list~152 tokens
List your studio_character rows (newest first).studio_character_read~69 tokens
Read one studio_character by id.studio_character_update~202 tokens
Update a studio_character you own (optionally compare-and-set via expected_updated_at).studio_environment_create~124 tokens
Create a studio_environment.studio_environment_deleteDeletes data · ~72 tokens
Delete a studio_environment you own.studio_environment_list~153 tokens
List your studio_environment rows (newest first).studio_environment_read~71 tokens
Read one studio_environment by id.studio_environment_update~204 tokens
Update a studio_environment you own (optionally compare-and-set via expected_updated_at).studio_project_create~314 tokens
Create a video studio project — the composition document (scenes, tracks, clips, captions) starts empty and is built up afterward through the studio.* director tools. thumbnail_key is server-owned: send thumbnail_data_url instead, and this door externalizes it into a content-addressed R2 key throughstudio_project_list~151 tokens
List your studio_project rows (newest first).studio_project_read~67 tokens
Read one studio_project by id.studio_project_update~415 tokens
Rename a project, change its status, or replace its thumbnail on a project you own — send thumbnail_data_url, never thumbnail_key, which is server-owned and computed by this door the same way studio_project_create does. status here is UI-summary-only by design: it never gates render or generation, wteam_assignment_create~641 tokens
[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 natural language for the common fields: task_name/task for title, dworkflow_create~309 tokens
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 node, since the platform prepares outputs but never sends them.workflow_prepared_outputs~314 tokens
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, never through this call. Optional limit 1-100 (default 50),
Browse
Related MCP servers
- Asia/Singapore clock
Current local time in Asia/Singapore. - Ayebot buyer index
Counts of acquirers by sector and Southeast Asian market, from ayebot.com. Aggregate only, no names. - Mirabello Immigration Intelligence
Citizenship, residency & tax-residency data for 190+ countries, with origin-aware route planning - BIS — Butkeraites Intelligent Solutions
AI + optimization consultancy: how BIS solves operational decisions and beats alternatives. - Singapore Buying Desk (Connective Labs)
Firm SGD quotes and delivery in Singapore for office and IT supplies, ink, toner and event print - Israel Small Business Valuation (esek-shave)
Free indicative valuation for small businesses in Israel: value, range and confidence. - NOMOS Cross-Border Broker
Cross-border preflight, x402 quote and evidence receipts for A2A/MCP agent workflows. - Booyah Index
AI-readable directory + commerce layer: 3,500+ SEA businesses, plus products from verified stores.
Badge for your README
[](https://aptlynx.net/servers/asia.simpler/simpler-asia)
Listing text is written by the maker; AptLynx lists tools and does not vouch for them. Find another tool · Browse by topic · For agents