Skip to content

BankWeave

by LSUDOKO · remote · local (oci) · no sign-in to list tools · v3.0.1 · published by GitHub user LSUDOKO

Read-only FalkorDB tools for cross-bank AML investigations: rings, money paths, echo-proof claims.

Changes · 10

17 tools: 10 change things and 7 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http bankweave https://bankweave-api.onrender.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "run_readonly_cypher" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "run_readonly_cypher" says "run": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

17 tools

Changes things 10Claude Code: ask
  • account_networkAn account's cross-bank neighbourhood in the consortium graph: its scores (pagerank, motif score, community, WCC component size, pass-through pairs), shared identity (device, IP, a…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    An account's cross-bank neighbourhood in the consortium graph: its scores (pagerank, motif score, community, WCC component size, pass-through pairs), shared identity (device, IP, address with how widely each is shared), cases and alerts on it, counterparties held at OTHER banks (count and volume) and its bounded 1-2 hop neighbourhood with the banks it spans. A bank alone only sees its own side of these links. FalkorDB features: GRAPH.RO_QUERY, bounded undirected expansion.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • connected_componentsWeakly connected components of the transfer graph (largest first): size, number of banks, a sample of members, plus how many components are tiny 'islands' that triage clears instan…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Weakly connected components of the transfer graph (largest first): size, number of banks, a sample of members, plus how many components are tiny 'islands' that triage clears instantly. graph: 'consortium', 'bank_<id>' or 'case_<id>'. FalkorDB features: algo.wcc.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • engine_overviewHealth and size of the whole system: FalkorDB memory/version, graphs (banks, cases), consortium size (accounts, banks, transfers) and the alert queue by status (open / case / clear…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Health and size of the whole system: FalkorDB memory/version, graphs (banks, cases), consortium size (accounts, banks, transfers) and the alert queue by status (open / case / cleared). Call this first to orient yourself. FalkorDB features: INFO memory, GRAPH.LIST, GRAPH.RO_QUERY aggregations.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • graph_schemaSchema of one graph: node labels, relationship types, property keys and indexes with their kind (RANGE, FULLTEXT, VECTOR).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Schema of one graph: node labels, relationship types, property keys and indexes with their kind (RANGE, FULLTEXT, VECTOR). graph: 'consortium', 'bank_<id>', 'case_<id>' or 'typology_kb'. FalkorDB features: db.labels, db.relationshipTypes, db.propertyKeys, db.indexes.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • run_readonly_cypherLast resort: run your own read-only Cypher on one graph.1 finding

    Why it is in this group

    • The name "run_readonly_cypher" says "run": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "run_readonly_cypher" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "run_readonly_cypher" says "run": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Last resort: run your own read-only Cypher on one graph. Runs as GRAPH.RO_QUERY (the engine rejects writes) after a guard: one statement, no CREATE/MERGE/SET/DELETE/REMOVE/ DROP/FOREACH/LOAD CSV, CALL only for algo.* and the db.* read/index-query procedures, LIMIT appended when missing, at most 200 rows, 10 s timeout. graph: 'consortium', 'bank_<id>', 'case_<id>' or 'typology_kb' (see graph_schema for labels and properties).

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • similar_accountsAccounts whose behaviour (activity, amounts, timing, degree profile) is closest to this one, by cosine distance over Account.behavior_vec (lower = more alike), with their banks.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Accounts whose behaviour (activity, amounts, timing, degree profile) is closest to this one, by cosine distance over Account.behavior_vec (lower = more alike), with their banks. Useful to find mule accounts that act like a known one at other banks. FalkorDB features: HNSW vector index, db.idx.vector.queryNodes.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • top_hubsAccounts where money pools: PageRank over TRANSFERS, highest first, with bank ids.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Accounts where money pools: PageRank over TRANSFERS, highest first, with bank ids. graph: 'consortium', 'bank_<id>' or 'case_<id>'. FalkorDB features: algo.pageRank.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • trace_money_pathShortest money paths from one account to another, hop by hop with transaction ids, amounts and the bank of every account on the path, so you can see the money cross banks.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Shortest money paths from one account to another, hop by hop with transaction ids, amounts and the bank of every account on the path, so you can see the money cross banks. Without case_id it searches the consortium along outgoing transfers; with case_id it searches that case graph in both directions. No path = no claim. FalkorDB features: algo.SPpaths.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • triage_alertWhy an alert was cleared or escalated into a case.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Why an alert was cleared or escalated into a case. Returns the alert, the triage decision and its reason, the graph signals the triage agent recorded (component size, motif score, cross-bank counterparties, typologies, shared identity, prior cases), and a LIVE re-check: the account's weakly connected component size (islands smaller than the configured threshold clear instantly) and its motif score components. FalkorDB features: algo.wcc, GRAPH.RO_QUERY.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • typology_guidanceLaundering typology guidance (e.g.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Laundering typology guidance (e.g. 'fan-out then fan-in through mules', 'structuring below reporting threshold') from BankWeave's typology knowledge graph, with citations. Abstains when nothing matches well. FalkorDB features: full-text index on the typology_kb graph.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
Only reads 7Claude Code: allow
  • explain_claimWhy a claim has the confidence it has (GraphEcho echo-proof scoring).No findings

    Why it is in this group

    • The name "explain_claim" says "explain": a word for reading.
    Description, as the server wrote it
    Why a claim has the confidence it has (GraphEcho echo-proof scoring). Groups supporting and challenging evidence by ORIGIN: many paths that lead back to the same origin count once. Returns paths vs independent origins, naive (path-counting) vs echo-proof confidence, each origin group with its multiplicity and weight, which origin kinds were never explored, and the derived-claim / evidence chain with the Cypher each evidence item ran. Pure read: the score is recomputed in memory, nothing is written. FalkorDB features: GRAPH.RO_QUERY, variable-length DERIVED_FROM traversal.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • find_ringsCandidate laundering rings: communities of accounts that trade mostly among themselves, found by label propagation on the transfer graph.No findings

    Why it is in this group

    • The name "find_rings" says "find": a word for reading.
    Description, as the server wrote it
    Candidate laundering rings: communities of accounts that trade mostly among themselves, found by label propagation on the transfer graph. Cross-bank rings (members at more than one bank) come first, since no single bank can see them whole. Pass account_id to return only the ring that contains that account. FalkorDB features: algo.labelPropagation.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • get_caseEverything about one case from its own case graph: header, claims (each with naive vs echo-proof confidence, paths vs independent_sources, state, supporting/challenging evidence id…No findings

    Why it is in this group

    • The name "get_case" says "get": a word for reading.
    Description, as the server wrote it
    Everything about one case from its own case graph: header, claims (each with naive vs echo-proof confidence, paths vs independent_sources, state, supporting/challenging evidence ids), evidence (kind, origin, state active/needs_verification/superseded, summary), proposed and approved actions with the claims that justify them, and SAR status. case_id like 'C-44c08392'. FalkorDB features: one graph per case, GRAPH.RO_QUERY.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • list_alertsThe alert queue with counts by status.No findings

    Why it is in this group

    • The name "list_alerts" says "list": a word for reading.
    Description, as the server wrote it
    The alert queue with counts by status. status: 'open', 'case' (escalated into a case) or 'cleared'; omit for all. Each alert has its rule, reason, account, bank, case id and the recorded clearing reason. Use an alert id with triage_alert. FalkorDB features: range indexes on Alert.status, GRAPH.RO_QUERY.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • list_casesList investigation cases (newest first) with status, title, seed account, number of alerts/accounts, the banks involved and whether its case graph is loaded.No findings

    Why it is in this group

    • The name "list_cases" says "list": a word for reading.
    Description, as the server wrote it
    List investigation cases (newest first) with status, title, seed account, number of alerts/accounts, the banks involved and whether its case graph is loaded. Use a case id with get_case. FalkorDB features: GRAPH.RO_QUERY over the consortium graph.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • list_graphsList every FalkorDB graph BankWeave keeps, grouped by kind: the consortium (cross-bank, hashed), one graph per bank (that bank's partial view), one graph per case, the typology kno…No findings

    Why it is in this group

    • The name "list_graphs" says "list": a word for reading.
    Description, as the server wrote it
    List every FalkorDB graph BankWeave keeps, grouped by kind: the consortium (cross-bank, hashed), one graph per bank (that bank's partial view), one graph per case, the typology knowledge base. Use graph_schema(graph) for labels, relationship types and indexes.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
  • search_customersFuzzy name search over customers (Person) or businesses (Company) across all banks, with the accounts and banks each one owns.No findings

    Why it is in this group

    • The name "search_customers" says "search": a word for reading.
    Description, as the server wrote it
    Fuzzy name search over customers (Person) or businesses (Company) across all banks, with the accounts and banks each one owns. Tokens are OR-ed, so partial names work. FalkorDB features: full-text index, db.idx.fulltext.queryNodes.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 3.0.1. Values in angle brackets are yours to fill in.

claude mcp add --transport http bankweave https://bankweave-api.onrender.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__bankweave__list_graphs",
      "mcp__bankweave__list_cases",
      "mcp__bankweave__get_case",
      "mcp__bankweave__explain_claim",
      "mcp__bankweave__find_rings",
      "mcp__bankweave__search_customers",
      "mcp__bankweave__list_alerts"
    ],
    "ask": [
      "mcp__bankweave__engine_overview",
      "mcp__bankweave__graph_schema",
      "mcp__bankweave__account_network",
      "mcp__bankweave__trace_money_path",
      "mcp__bankweave__top_hubs",
      "mcp__bankweave__connected_components",
      "mcp__bankweave__similar_accounts",
      "mcp__bankweave__triage_alert",
      "mcp__bankweave__typology_guidance",
      "mcp__bankweave__run_readonly_cypher"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as bankweave. Review it before you use it.