Server definition
- Hash
- sha256:b335d6f72b95607b988f80a2d6334d66feb7a83760895d825bcd44fd4ddb8b3e
- What it is
- What a remote MCP server returned when asked what it offers: 15 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "List the imported accounts: bank, currencies, transaction count, first and last date, and the closing balance when the file carried one. Start here for the account names transactions_list and statement_export take.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "accounts_list",
"outputSchema": null
},
{
"description": "Delete one statement file stored for your token. The transactions already imported from it are kept; transactions_list and the summary still see them.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"name": {
"maxLength": 70,
"minLength": 1,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "bank_delete_upload",
"outputSchema": null
},
{
"description": "List the statement files stored for your token, with their sizes.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "bank_files",
"outputSchema": null
},
{
"description": "Send a bank export to this hosted endpoint. There is no filesystem here, so instead of a path you upload the file once with bank_upload and then pass its name as `path` to statement_import. Give exactly one of content (the export as text, header row included - this is the normal case for a CSV), content_base64 (the file's bytes, which keeps a UTF-16 export from Excel readable) or url. url: fetch a public file instead of pasting base64 (recommended above about 10 KB): the url is fetched here with a 10 second timeout, at most 3 redirects, public http(s) hosts only, and a 1 MB cap; the fetched file has to be delimited text, so a PDF statement is refused rather than stored. Uploads are kept for your token between calls; bank_files lists them and bank_delete_upload removes one. The request body cap is 256 KB, so a large export pasted as text has to be split by month.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"content": {
"description": "The export as text, including the header row",
"type": "string"
},
"content_base64": {
"description": "The file's bytes, base64-encoded, instead of text",
"type": "string"
},
"name": {
"description": "Name to refer to this statement by: 1-64 characters of letters, digits, underscore or dash, e.g. \"september\"",
"maxLength": 70,
"minLength": 1,
"type": "string"
},
"url": {
"description": "url: fetch a public file instead of pasting base64 (recommended above about 10 KB). Public http(s) only; private, link-local and this endpoint's own zone are refused",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "bank_upload",
"outputSchema": null
},
{
"description": "Read the category rules, or pass rules to REPLACE the whole list. A plain match is a substring; a regex compiles only if it cannot backtrack exponentially. An empty match is refused. Free: 5 rules.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"reapply_all": {
"description": "Also overwrite categories set by an earlier rule or by hand. Default false: only uncategorised transactions are touched",
"type": "boolean"
},
"rules": {
"description": "The complete rule list; it replaces the stored one. Omit to list the current rules",
"items": {
"additionalProperties": false,
"properties": {
"category": {
"description": "Category to set, e.g. \"software\"",
"maxLength": 120,
"type": "string"
},
"match": {
"description": "Text to look for in the counterparty or description, e.g. \"spotify\"",
"maxLength": 200,
"type": "string"
},
"regex": {
"description": "Treat match as a regular expression. A pattern that can backtrack exponentially is refused and used as a substring instead",
"type": "boolean"
}
},
"required": [
"match",
"category"
],
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"name": "category_rules",
"outputSchema": null
},
{
"description": "Turn Pro on for this connection with key, an MCPL1.<payload>.<signature> issued at checkout for this server or the bundle. Data under your token stays; a wrong or expired key changes nothing. license_status confirms it.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"key": {
"description": "License key from checkout, MCPL1.<payload>.<signature>",
"type": "string"
}
},
"required": [
"key"
],
"type": "object"
},
"name": "license_activate",
"outputSchema": null
},
{
"description": "Report this endpoint's licence state for your token as JSON: the product, the tier free or pro, why it is not Pro, and the checkout URL. Call it to explain a free-tier refusal. No arguments, nothing changes.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "license_status",
"outputSchema": null
},
{
"description": "Match bank debits against mcp-expense-tracker entries: same currency and amount, date within a few days. Reports matches, unmatched bank lines, expenses never hitting the bank. Read-only. Free: 31 days; Pro: any range.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"account": {
"description": "Limit to one bank account",
"maxLength": 120,
"type": "string"
},
"from": {
"description": "ISO date, inclusive",
"maxLength": 10,
"type": "string"
},
"to": {
"description": "ISO date, inclusive",
"maxLength": 10,
"type": "string"
},
"window_days": {
"description": "Allowed gap between the expense date and the bank date, default 3. A card payment usually settles a day or two after the receipt",
"maximum": 31,
"minimum": 0,
"type": "integer"
}
},
"required": [
"from",
"to"
],
"type": "object"
},
"name": "reconcile_expenses",
"outputSchema": null
},
{
"description": "Find charges that come back: debits grouped by counterparty and currency with a steady amount and interval, with cadence, typical amount, next due date and annual cost. Free: 3 months, 5 charges.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"account": {
"description": "Limit to one account",
"maxLength": 120,
"type": "string"
},
"min_occurrences": {
"description": "Occurrences required before a charge counts as recurring, default 2",
"maximum": 24,
"minimum": 2,
"type": "integer"
},
"months": {
"description": "How far back to look, default 3. Two occurrences are enough to see a cadence, three make it certain",
"maximum": 60,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "recurring_detect",
"outputSchema": null
},
{
"description": "Export the BANK transactions of a date range (a month, a quarter, a year) as .csv or .json and return a download link valid for one hour. This is the tool for \"export September\" once a statement has been imported. Nothing partial is ever written.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"account": {
"description": "Limit to one account",
"maxLength": 120,
"type": "string"
},
"category": {
"description": "Limit to one category",
"maxLength": 500,
"type": "string"
},
"format": {
"description": "csv for a spreadsheet, json for a program",
"enum": [
"csv",
"json"
],
"type": "string"
},
"from": {
"description": "ISO date, inclusive",
"maxLength": 10,
"type": "string"
},
"path": {
"description": "Name for the downloaded file, e.g. september. It comes back as a download link valid for one hour",
"maxLength": 4096,
"type": "string"
},
"to": {
"description": "ISO date, inclusive",
"maxLength": 10,
"type": "string"
}
},
"required": [
"from",
"to",
"format",
"path"
],
"type": "object"
},
"name": "statement_export",
"outputSchema": null
},
{
"description": "Call this tool to read a bank CSV into the local ledger. Columns detected from headers (date, description, amount, currency, balance); amounts use the file's locale; stored lines skipped. Returns detected/stored/skipped.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"account": {
"description": "Name for this account, e.g. \"business EUR\". Default: the file name without its extension. Later imports of the same account are deduplicated against it",
"maxLength": 120,
"type": "string"
},
"bank": {
"description": "Bank profile. Default \"auto\": the headers decide. \"generic\" skips profile detection and uses the header heuristics alone",
"enum": [
"auto",
"revolut",
"wise",
"mbank",
"pko",
"ing",
"n26",
"generic"
],
"type": "string"
},
"currency": {
"description": "Currency for rows where the file names none. Defaults to the shared business profile's default_currency, else EUR; the response says which it used",
"pattern": "^[A-Za-z]{3}$",
"type": "string"
},
"overwrite": {
"description": "Delete every transaction already stored for this account before importing, instead of merging. Use it when the bank reissued a corrected export",
"type": "boolean"
},
"path": {
"description": "Name of a statement uploaded with bank_upload",
"maxLength": 4096,
"type": "string"
}
},
"required": [
"path"
],
"type": "object"
},
"name": "statement_import",
"outputSchema": null
},
{
"description": "What was spent/received in a date range per the BANK ACCOUNT, grouped by category, month, account or counterparty. For \"what did I spend in August\" once imported. Totals are per currency, never summed or converted.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"account": {
"description": "Limit the summary to one account",
"maxLength": 120,
"type": "string"
},
"from": {
"description": "ISO date, inclusive. Default: the start of the current month",
"maxLength": 10,
"type": "string"
},
"group_by": {
"description": "Default category",
"enum": [
"category",
"month",
"account",
"counterparty"
],
"type": "string"
},
"to": {
"description": "ISO date, inclusive. Default: today",
"maxLength": 10,
"type": "string"
},
"top": {
"description": "Groups returned per currency, largest net first. Default 25",
"maximum": 200,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "statement_summary",
"outputSchema": null
},
{
"description": "Set or clear the category on transactions by id, for a one-off no rule is worth writing for. Every id is checked first, so one unknown id refuses the whole call. category_rules matches by text instead.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"category": {
"description": "Category to set. Pass an empty string to clear it",
"maxLength": 120,
"type": "string"
},
"ids": {
"description": "Transaction ids, as returned by transactions_list or transactions_search",
"items": {
"maxLength": 64,
"type": "string"
},
"minItems": 1,
"type": "array"
}
},
"required": [
"ids",
"category"
],
"type": "object"
},
"name": "transaction_categorize",
"outputSchema": null
},
{
"description": "List stored transactions in a date range, optionally for one account or category, or only the ones no rule has categorised yet. Totals are reported per currency and never added across currencies.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"account": {
"description": "Limit to one account, as named at import",
"maxLength": 120,
"type": "string"
},
"category": {
"description": "Only transactions in this category",
"maxLength": 500,
"type": "string"
},
"from": {
"description": "ISO date YYYY-MM-DD, inclusive. Default: the start of the current month",
"maxLength": 10,
"type": "string"
},
"limit": {
"description": "Rows returned, default 200. Totals always cover the whole range",
"maximum": 1000,
"minimum": 1,
"type": "integer"
},
"to": {
"description": "ISO date YYYY-MM-DD, inclusive. Default: today",
"maxLength": 10,
"type": "string"
},
"uncategorized": {
"description": "Only transactions with no category yet",
"type": "boolean"
}
},
"type": "object"
},
"name": "transactions_list",
"outputSchema": null
},
{
"description": "Find transactions whose description, counterparty, category or account contains the query. Case-insensitive substring search, never a regex, so a query with brackets in it cannot hang the server.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"from": {
"description": "ISO date, inclusive",
"maxLength": 10,
"type": "string"
},
"limit": {
"description": "Rows returned, default 100",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"query": {
"description": "Text to look for, e.g. \"spotify\" or \"acme\"",
"maxLength": 200,
"type": "string"
},
"to": {
"description": "ISO date, inclusive",
"maxLength": 10,
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "transactions_search",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:b335d6f72b95607b988f80a2d6334d66feb7a83760895d825bcd44fd4ddb8b3e | sha256sum