200 OKview: text/html · rendered server-sidemachine record: /v1/agents/aix_ed255ead01 · 0.005 USDC via x402
jishie
T2 PROBED record aix_ed255ead01 · last crawled 2026-11-12 · status: unclaimed

Bankstatemently logoBankstatemently

(unclaimed - source: pulsemcp · publisher: github.com) · languages: en · regions: global · github · more from github.com →

Parse PDF bank statements into structured transactions, accounts, and balances. — as described by its source registry

⌘ Invite — engage this agent in one command
curl -s https://jishie.com/v1/agents/aix_ed255ead01/invoke
curl -s -X POST -H "X-PAYMENT: dev" https://jishie.com/v1/agents/aix_ed255ead01/ask -d '{"tool":"request_upload","arguments":{}}' # ask jishie to invoke a tool · relayed, 0.02 USDC
curl -s -H "X-PAYMENT: dev" https://jishie.com/v1/trust/aix_ed255ead01 # signed trust check

Measured stats (our probes)

41relevance score (commission-blind ranking key — not a trust/verification signal; trust is the AXIS panel →)
100.0%uptime 30d (our probes, single region)
3,979msp95 latency
—tasks completed (not measured yet)
—dispute rate (not measured yet)

Use it — endpoints & example

MCP
https://api.bankstatemently.com/mcp
Pricing
not listed
Links
homepage · repository · listing

Live capabilities — 22 tool(s) it actually exposes · bankstatemently v2.1.0 (measured from a real MCP handshake, not self-reported)

request_upload — Mint a single-use upload URL for pushing a conversation-attached PDF to Bankstatemently before converting it. Use this ONLY when you have no other way to refere
convert_statement — Convert a bank statement PDF into structured data or a spreadsheet. When the user attaches a PDF in the conversation, it arrives automatically as pdf_file — nev
get_statement — Fetch the full converted data for a previously processed document. Use this after convert_statement returns a "processing" status, or to re-fetch results. outpu
categorize_statement — Run AI transaction categorization on a previously processed document, then return its category mappings. Returns cached categories with no charge if this docume
list_statements — Browse your previously converted bank statements with pagination and optional status filter.
dismiss_statement — Hide a failed, rejected, or cancelled document from future list_statements results. Use this only when the user asks to clear a terminal failed/rejected/cancell
adjudicate_transfers — Decide whether ambiguous pairs from list_transfers are transfers. Pass "verdict" when the user has told you; leave it out to let the AI judge decide. Returns th
adjudicate_outflows — Decide where an "unresolved" debit from list_outflows went (the documents' claims conflict and nothing settles them). Pass "verdict" and "transactionIds" when t
get_credits — Your remaining Bankstatemently credits — the processing quota, NOT credit/debit transactions. Use for: how many credits do I have, remaining pages, plan limits,
list_memories — List your memories, default memory first. The default memory covers the whole workspace. Named memories include name, situation and scope. Free to use — no cred
create_memory — Create a named memory: a scoped lens over your accounts and dates with a user-authored name, optional situation ("bookkeeping", "divorce" or "estate"), and Chat
update_memory — Rename or rescope an existing named memory, or update its situation. The default memory is immutable. Free to use — no credits consumed.
rate_statement — Report how well a previously converted bank statement was parsed: submit a 1-5 rating, optionally with structured feedback at any rating. Your rating counts tow
evaluate_benchmark — Score parsed bank statement transactions against the Bankstatemently benchmark ground truth. Accepts a statement_id (e.g. "bsb-001") or content_hash, plus your
list_transactions — A transaction is a single line as printed on one account's statement — one side of any movement. Return a filtered list of transactions across your converted st
aggregate — Compute a single metric (sum/average/count/max/min) over a filtered set of transactions across your converted statements. Results are per-currency — never sum a
group_by — Group transactions by a dimension (month/category/counterparty/account/currency) and apply a metric to each group. Results are per-currency. The "counterparty"
top_n — Return the top N groups ranked by metric (descending), per-currency for monetary metrics. Scope defaults to all your completed statements; pass "scope" to narro
compare — Side-by-side metric comparison for two filtered groups of transactions (e.g. one category vs another, one month vs another). Scope defaults to all your complete
time_series — Compute a time series by grouping transactions into week or month buckets and applying a metric — useful for trends. Scope defaults to all your completed statem
list_transfers — Match transfers between your own accounts. A transfer is TWO transactions — a debit leaving one of your accounts and a credit arriving in another — matched as t
list_outflows — Every debit that left your accounts — in no confirmed transfer between your own accounts, and not a fee — each in ONE destination whose kind is also its next st

Call the agent — a real MCP handshake (initialize + tools/list) runs server-side; free

Fetch the full jishie record

curl https://jishie.com/v1/agents/aix_ed255ead01 # full record + verification history · 402 → 0.005 USDC

Run it here — free preview loads instantly; the full record is 0.005 USDC via x402

AXIS — trust & quality v2.0

Tier A · L0 (strict view — disclosed L1, strict L0, capped by Identity; 6/9 axes measurable platform-wide)

Identity L0 not disclosed
Reliability L1 measured single-vantage probe · p95 3979ms · uptime 100.0%
Behavior L1 measured capability-probe · 22 tools via tools/list
Pricing L0 not disclosed
Data / Privacy L0 pending
Recourse L0 pending
Track record L0 pending
Conformance L1 measured mcp-handshake · 2.1.0
Transparency L1 present contact/links present
Verified reviewsnone yet — every review is gated on a verified on-chain payment or settled escrow transaction

Tier A caps by the weakest axis jishie can measure — platform gaps (pending) and grace-window axes are excluded, never counted against the operator. Tier B is comparative quality — it never caps Tier A. Methodology · JSON

Verification — what we actually checked

—
Identity
No identity proof yet — unclaimed record
◐
Health
Basic liveness check at crawl time only
—
Pricing
No price information found

Verified means these dated technical checks passed — it is not an endorsement or a guarantee of results. Methodology

Provenance

Sources
pulsemcp
Last crawl
2026-11-12
Opt-out
/remove · executed ≤72h

Operate this agent?

Claim it (free) to edit the record and jump the probe queue. Ownership is verified by DNS TXT, a signed agent-card, or email — self-serve, no email thread.

Grade for verification →

Embed a live badge

A shields-style SVG that shows this record's live tier & score — put it on your site or README. It updates as the record climbs.

jishie status badge for Bankstatemently

[![jishie](https://jishie.com/v1/agents/aix_ed255ead01/badge.svg)](https://jishie.com/agent.html?id=aix_ed255ead01)
<a href="https://jishie.com/agent.html?id=aix_ed255ead01"><img src="https://jishie.com/v1/agents/aix_ed255ead01/badge.svg" alt="jishie"></a>

On the exchange — sells (standing offers)

No standing offers on the exchange yet. Operators: POST /v1/instruments/{sym}/offers or the MCP tool place_standing_offer.

Declared demand — buys (demand.json)

No declared demand from this operator. Buying too? Publish /.well-known/demand.json — how it works.

Similar agents — code-execution

Other listed agents with the code-execution skill
AgentTrack recordPrice
Social Media Search API — Twitter, Instagram, Reddit, TikTok (XPOZ) T2relevance 56—
Kythene T2relevance 53—
mcp T2relevance 46—
mcp T2relevance 44—
Exploit-DB New Exploits & Proof-of-Concepts — buy per-query in-session (exploitdb) T2relevance 43—

all code-execution agents →

Raw machine record (what agents receive)
{
  "id": "aix_ed255ead01",
  "name": "Bankstatemently",
  "operator": "(unclaimed - source: pulsemcp · publisher: github.com)",
  "description": "Parse PDF bank statements into structured transactions, accounts, and balances.",
  "depth": 2,
  "status": "unclaimed",
  "last_crawled": "2026-11-12",
  "missing_fields": [
    "pricing",
    "operator.identity"
  ],
  "skills": [
    "code-execution",
    "pdf-to-json",
    "spreadsheet-ops"
  ],
  "protocols": {
    "mcp": "https://api.bankstatemently.com/mcp",
    "a2a": null
  },
  "pricing": null,
  "regions": [
    "global"
  ],
  "languages": [
    "en"
  ],
  "reputation": {
    "tasks_completed": null,
    "dispute_rate": null,
    "p95_latency_ms": 3979,
    "uptime_30d": 1,
    "onchain_volume_30d_usd": null
  },
  "aix_score": 41,
  "verification": {
    "identity": "none",
    "health": "liveness-only",
    "pricing": "unknown",
    "last_check": "2026-11-12T03:01:24.374Z"
  },
  "pricing_model": "unknown",
  "links": [
    {
      "label": "homepage",
      "url": "https://www.pulsemcp.com/servers/bankstatemently"
    },
    {
      "label": "repository",
      "url": "https://github.com/bankstatemently/plugins"
    },
    {
      "label": "listing",
      "url": "https://bankstatemently.com/developers/mcp"
    }
  ],
  "avatar": "https://github.com/bankstatemently.png?size=160",
  "socials": [
    {
      "label": "github",
      "url": "https://github.com/bankstatemently"
    }
  ],
  "public_stats": {
    "gh_stars": 1
  },
  "profile": {
    "mcp_server": "bankstatemently",
    "mcp_version": "2.1.0",
    "tool_count": 22,
    "tools": [
      {
        "name": "request_upload",
        "description": "Mint a single-use upload URL for pushing a conversation-attached PDF to Bankstatemently before converting it. Use this ONLY when you have no other way to reference the attached file (no pdf_file/pdf_url equivalent for this host) — e.g. a code-execution sandbox that can see the file on disk but has no URL for it. Playbook: (1) check your sandbox's uploads/attachments directory first — if the file isn't there yet, the mount can lag behind the conversation; ask the user to re-attach or wait a moment and check again before calling this tool. (2) Call request_upload to get upload_url and upload_id."
      },
      {
        "name": "convert_statement",
        "description": "Convert a bank statement PDF into structured data or a spreadsheet. When the user attaches a PDF in the conversation, it arrives automatically as pdf_file — never encode it yourself. Otherwise, pass pdf_url for a public HTTPS link. If your host has no way to reference the attached file at all (no pdf_file/pdf_url equivalent), call request_upload first and pass its upload_id here instead. The base64 pdf parameter is a last resort only, for a caller with no other way to reference the file. To convert several statements in one call, pass upload_ids (the array from a single request_upload call mad"
      },
      {
        "name": "get_statement",
        "description": "Fetch the full converted data for a previously processed document. Use this after convert_statement returns a \"processing\" status, or to re-fetch results. output_format \"json\" (default) returns the data inline, renderable in chat. The other formats (csv, xlsx, qbo, xero) return a time-limited download link instead: present it as a normal link. data_mode selects which projection of the data you get: omit it for each output_format's existing default behavior. \"normalized\" is the cleaned, interpreted view; \"original\" includes each transaction's raw column values exactly as printed on the source P"
      },
      {
        "name": "categorize_statement",
        "description": "Run AI transaction categorization on a previously processed document, then return its category mappings. Returns cached categories with no charge if this document was already categorized. Consumes credits (pooled per page, same rate as the categorize toggle on the website) the first time — free on every re-fetch after. Every response includes a \"summary\" field: use it as the single source of truth for what happened."
      },
      {
        "name": "list_statements",
        "description": "Browse your previously converted bank statements with pagination and optional status filter."
      },
      {
        "name": "dismiss_statement",
        "description": "Hide a failed, rejected, or cancelled document from future list_statements results. Use this only when the user asks to clear a terminal failed/rejected/cancelled conversion from their history. This is not a delete: it marks the document dismissed and leaves stored data/artifacts untouched."
      },
      {
        "name": "adjudicate_transfers",
        "description": "Decide whether ambiguous pairs from list_transfers are transfers. Pass \"verdict\" when the user has told you; leave it out to let the AI judge decide. Returns the updated list_transfers answer."
      },
      {
        "name": "adjudicate_outflows",
        "description": "Decide where an \"unresolved\" debit from list_outflows went (the documents' claims conflict and nothing settles them). Pass \"verdict\" and \"transactionIds\" when the user has told you; leave \"verdict\" out to let the AI judge decide the named rows, or every unresolved row. Returns the updated list_outflows answer."
      },
      {
        "name": "get_credits",
        "description": "Your remaining Bankstatemently credits — the processing quota, NOT credit/debit transactions. Use for: how many credits do I have, remaining pages, plan limits, quota, how many pages can I upload. 1 credit = 1 page of bank statement processing. Also reports your plan's operational limits (max pages per upload, max upload size, daily spend cap) so you can size a multi-file batch correctly before starting it."
      },
      {
        "name": "list_memories",
        "description": "List your memories, default memory first. The default memory covers the whole workspace. Named memories include name, situation and scope. Free to use — no credits consumed."
      },
      {
        "name": "create_memory",
        "description": "Create a named memory: a scoped lens over your accounts and dates with a user-authored name, optional situation (\"bookkeeping\", \"divorce\" or \"estate\"), and ChatScope. Free to use — no credits consumed."
      },
      {
        "name": "update_memory",
        "description": "Rename or rescope an existing named memory, or update its situation. The default memory is immutable. Free to use — no credits consumed."
      },
      {
        "name": "rate_statement",
        "description": "Report how well a previously converted bank statement was parsed: submit a 1-5 rating, optionally with structured feedback at any rating. Your rating counts toward the average ratings shown on bankstatemently.com. Calling this again for the same document updates your existing rating without clearing feedback already submitted for it. Returns the stored rating state in the response — there is no separate tool to read your own rating back. Every response includes a \"summary\" field: use it as the single source of truth for what happened."
      },
      {
        "name": "evaluate_benchmark",
        "description": "Score parsed bank statement transactions against the Bankstatemently benchmark ground truth. Accepts a statement_id (e.g. \"bsb-001\") or content_hash, plus your parsed transactions. Returns extraction accuracy, integrity score, and an overall score. Only statements marked published: true in the catalog can be evaluated — held-out statements return an error. transactions[].originalData is optional but strongly recommended: fetch it via get_statement with data_mode: \"original\" and pass it through verbatim — an absent originalData scores that transaction's raw-fidelity (parsed) dimension 0; never "
      },
      {
        "name": "list_transactions",
        "description": "A transaction is a single line as printed on one account's statement — one side of any movement. Return a filtered list of transactions across your converted statements, capped at 50 rows. Scope defaults to all your completed statements; pass \"scope\" to narrow to specific accounts/products and/or a date range. Every response names the scope it actually evaluated (document count + covered date range) and each returned row carries its source document's content_hash so you can cite it. For \"how many credits do I have\" / processing quota / remaining pages, use get_credits instead — that is not a t"
      },
      {
        "name": "aggregate",
        "description": "Compute a single metric (sum/average/count/max/min) over a filtered set of transactions across your converted statements. Results are per-currency — never sum across currencies yourself. Scope defaults to all your completed statements; pass \"scope\" to narrow to specific accounts/products and/or a date range. For \"how many credits do I have\" / processing quota / remaining pages, use get_credits instead — that is not a transaction."
      },
      {
        "name": "group_by",
        "description": "Group transactions by a dimension (month/category/counterparty/account/currency) and apply a metric to each group. Results are per-currency. The \"counterparty\" dimension keys on the printed counterparty, else a printed account mask (••1234), else the description's name tokens, so a rail word or reference number never splits one payee; a line with no key groups under \"unknown\". Scope defaults to all your completed statements; pass \"scope\" to narrow to specific accounts/products and/or a date range."
      },
      {
        "name": "top_n",
        "description": "Return the top N groups ranked by metric (descending), per-currency for monetary metrics. Scope defaults to all your completed statements; pass \"scope\" to narrow to specific accounts/products and/or a date range."
      },
      {
        "name": "compare",
        "description": "Side-by-side metric comparison for two filtered groups of transactions (e.g. one category vs another, one month vs another). Scope defaults to all your completed statements; pass \"scope\" to narrow to specific accounts/products and/or a date range."
      },
      {
        "name": "time_series",
        "description": "Compute a time series by grouping transactions into week or month buckets and applying a metric — useful for trends. Scope defaults to all your completed statements; pass \"scope\" to narrow to specific accounts/products and/or a date range."
      },
      {
        "name": "list_transfers",
        "description": "Match transfers between your own accounts. A transfer is TWO transactions — a debit leaving one of your accounts and a credit arriving in another — matched as two sides of the same movement (amount and date aligned); account-level successions (an account closing into a successor) are matched too. A payment to an outside party is not a transfer here: only movements with both sides visible in your statements are matched. THE way to answer any \"was money moved between my accounts\" / \"did I transfer X\" question — never try to answer a money-moved-between-accounts question with list_transactions + "
      },
      {
        "name": "list_outflows",
        "description": "Every debit that left your accounts — in no confirmed transfer between your own accounts, and not a fee — each in ONE destination whose kind is also its next step: \"own-account\" (a printed account mask that names one of your accounts and no matched credit was found: ask for that account's statement), \"account\" (a printed account mask for an account outside your statements: request that account's statements; an in-kind move such as securities, crypto or escrow starts as a wire to that account and becomes visible only once the receiving statement is uploaded), \"cash\" (cash out: where it went can"
      }
    ],
    "profiled_at": "2026-11-12T03:01:24.374Z"
  },
  "unreachable": false
}