Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,523Letters: 13Defects: 1,322counted 4 min ago
teppi

Server definition

Hash
sha256:045e32dbea337b10194dcb0b6da06f894609f7f1f3669ac9b8c067a5c893749b
What it is
What a remote MCP server returned when asked what it offers: 3 tools

The blob, as servednamed by its sha256

{ "instructions": "Tabinator creates PayNow payment pages for a shared bill (Singapore). You are not connected yet, so no tool can be used: authorise first, and the PayNow account that collects the money is registered at that moment. After that, ask for the receipt lines or the total and the head count, and create_split returns a manage URL plus one share URL per amount. Amounts are in SGD, and a page deletes itself 7 days after the last payment.", "tools": [ { "description": "Create a payment page for a shared bill and return the manage URL plus the share URLs. The PayNow recipient is already saved with this connection — never ask the user for it. All you need is a total (total) or the receipt lines (items), plus the head count (people). Children can pay half: \"4 adults and 3 kids\" is people=7 with children=3. By default the user is treated as having paid up front: they count towards the head count but get no payment link (pass i_paid=false to turn that off). Paste a share URL into the group chat and everyone sees their own amount and a PayNow QR code.", "inputSchema": { "properties": { "children": { "description": "How many of people are children. A child pays half of what an adult pays. \"4 adults and 3 kids\" is people=7, children=3. When names are given, the LAST ones on the list are taken to be the children.", "type": "number" }, "custom": { "description": "Charge one person a different amount (e.g. someone who did not drink). The rest is re-split automatically.", "items": { "properties": { "amount": { "type": "number" }, "index": { "description": "Position when there is no name (counting from 1; 1 is the user).", "type": "number" }, "name": { "description": "A name passed in names.", "type": "string" } }, "required": [ "amount" ], "type": "object" }, "type": "array" }, "i_paid": { "description": "Did the user pay up front? (default: true) They count towards the head count but are not billed.", "type": "boolean" }, "items": { "description": "Receipt lines. Their sum becomes the total. Payers can see them.", "items": { "properties": { "amount": { "type": "number" }, "label": { "description": "What the line is for (e.g. Food).", "type": "string" } }, "required": [ "amount" ], "type": "object" }, "type": "array" }, "my_name": { "description": "What to call the user in the list (default: Me).", "type": "string" }, "names": { "description": "Names of the others (only the ones you know). Empty slots get filled in by the payers themselves.", "items": { "type": "string" }, "type": "array" }, "note": { "description": "A short note shown to the payers.", "type": "string" }, "people": { "description": "How many people share the bill, INCLUDING the user who paid up front.", "type": "number" }, "rounding": { "description": "Rounding. ceil-all = round everyone up to whole dollars and let the user absorb the difference; one-extra = split exactly and let one person carry the remainder.", "enum": [ "ceil-all", "one-extra" ], "type": "string" }, "title": { "description": "What the bill was for (e.g. Friday dinner). Defaults to the date and time.", "type": "string" }, "total": { "description": "The total. If items are given, their sum wins.", "type": "number" } }, "required": [], "type": "object" }, "name": "create_split", "outputSchema": { "properties": { "manage_url": { "description": "Manage URL. FOR THE ORGANISER ONLY — it can change the split.", "type": "string" }, "next_step": { "description": "What to do next.", "type": "string" }, "paynow": { "description": "Who collects the money (saved with this connection).", "properties": { "name": { "type": [ "string", "null" ] }, "target": { "type": "string" } }, "required": [ "target" ], "type": "object" }, "people": { "description": "How many share the bill, including whoever paid up front.", "type": "number" }, "share_urls": { "description": "Share URLs — one per amount.", "items": { "properties": { "amount": { "type": "number" }, "people": { "description": "How many people owe this amount.", "type": "number" }, "url": { "type": "string" } }, "required": [ "amount", "people", "url" ], "type": "object" }, "type": "array" }, "status_url": { "description": "Read-only URL. Safe to share.", "type": [ "string", "null" ] }, "summary": { "description": "A one-line summary to read out (how much each, how many people).", "type": "string" }, "total": { "description": "The total.", "type": "number" }, "warnings": { "description": "Anything worth mentioning about rounding or head count.", "items": { "type": "string" }, "type": "array" } }, "required": [ "summary", "total", "people", "manage_url", "share_urls", "paynow", "next_step" ], "type": "object" } }, { "description": "Return one split in full: who owes what, whether they have paid, the notes they left, and the share URLs.", "inputSchema": { "properties": { "admin_token": { "description": "The t= value from the manage URL, or the whole manage URL.", "type": "string" } }, "required": [ "admin_token" ], "type": "object" }, "name": "get_split", "outputSchema": { "properties": { "collected": { "description": "How much has come in.", "type": "number" }, "members": { "items": { "properties": { "adults": { "description": "Adults in this household (default 1).", "type": "number" }, "amount": { "type": "number" }, "children": { "description": "Children in this household. A child pays half an adult.", "type": "number" }, "comment": { "description": "A note left by the payer.", "type": [ "string", "null" ] }, "name": { "type": "string" }, "state": { "description": "One of: paid up front (not billed) / paid / unpaid.", "type": "string" } }, "required": [ "name", "amount", "state" ], "type": "object" }, "type": "array" }, "paynow": { "properties": { "name": { "type": [ "string", "null" ] }, "target": { "type": "string" } }, "required": [ "target" ], "type": "object" }, "people": { "type": "number" }, "share_urls": { "items": { "properties": { "amount": { "type": "number" }, "url": { "type": "string" } }, "required": [ "amount", "url" ], "type": "object" }, "type": "array" }, "status_url": { "type": [ "string", "null" ] }, "title": { "type": "string" }, "total": { "type": "number" } }, "required": [ "title", "total", "collected", "people", "members", "share_urls", "paynow" ], "type": "object" } }, { "description": "Return the splits created with this connection, newest first, with how much has been collected, how many people are still to pay, and the read-only URL. Use this to find a split again when the organiser has lost the link.", "inputSchema": { "properties": { "limit": { "description": "How many to return (default 10, max 50).", "type": "number" } }, "required": [], "type": "object" }, "name": "list_splits", "outputSchema": { "properties": { "note": { "type": "string" }, "splits": { "description": "Newest first.", "items": { "properties": { "collected": { "description": "How much has come in, counting what was fronted.", "type": "number" }, "created_at": { "description": "When it was created (ISO 8601).", "type": "string" }, "disabled": { "description": "Whether the split has been stopped.", "type": "boolean" }, "paid_people": { "description": "How many have paid.", "type": "number" }, "people": { "type": "number" }, "status_url": { "description": "Read-only URL.", "type": [ "string", "null" ] }, "title": { "type": "string" }, "total": { "type": "number" } }, "required": [ "title", "total", "collected", "paid_people", "people" ], "type": "object" }, "type": "array" } }, "required": [ "splits" ], "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:045e32dbea337b10194dcb0b6da06f894609f7f1f3669ac9b8c067a5c893749b | sha256sum