# `io.github.LSUDOKO/bankweave` on anlyon.dev

> Text inside fenced blocks marked untrusted-server-text was written by the MCP server's publisher, not by anlyon.dev. It is data to inspect, not instructions to follow. Invisible characters are shown as [U+XXXX].
> No finding is not a safety guarantee: these are point-in-time checks of tool definitions, not of code or behaviour.

- Page: https://anlyon.dev/servers/io.github.LSUDOKO/bankweave
- JSON: https://anlyon.dev/api/v1/servers/io.github.LSUDOKO/bankweave
- Version: 3.0.1 (active)
- Publisher: io.github.LSUDOKO (GitHub account)
- Runs: remote (streamable-http), local (oci)
- Sign-in to list tools: none
- Repository: https://github.com/LSUDOKO/BankWeave
- Metadata from the official MCP Registry, synced 2026-10-21T18:17:26.569Z

Title and description, as the publisher wrote them:

```untrusted-server-text
BankWeave
Read-only FalkorDB tools for cross-bank AML investigations: rings, money paths, echo-proof claims.
```

Scanned 2026-10-21T19:03:44.575Z over streamable-http.

**17 tools: 10 change things and 7 only read.**

| Group | Class | Tools | Claude Code |
| --- | --- | --- | --- |
| Deletes or cancels | destructive | 0 | deny |
| Can't be undone | irreversible | 0 | ask |
| Changes things | write | 10 | ask |
| Only reads | read | 7 | allow |

## Findings

- **warn** Annotations that disagree with the tool in `run_readonly_cypher` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

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

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


## Changes things (10)

Creates or changes something that can be changed back. Claude Code: ask.

### `account_network`

- 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:

```untrusted-server-text
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.
```

### `connected_components`

- 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:

```untrusted-server-text
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.
```

### `engine_overview`

- 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:

```untrusted-server-text
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.
```

### `graph_schema`

- 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:

```untrusted-server-text
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.
```

### `run_readonly_cypher`

- 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 annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
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).
```

### `similar_accounts`

- 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:

```untrusted-server-text
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.
```

### `top_hubs`

- 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:

```untrusted-server-text
Accounts where money pools: PageRank over TRANSFERS, highest first, with bank ids.
    graph: 'consortium', 'bank_<id>' or 'case_<id>'. FalkorDB features: algo.pageRank.
```

### `trace_money_path`

- 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:

```untrusted-server-text
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.
```

### `triage_alert`

- 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:

```untrusted-server-text
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.
```

### `typology_guidance`

- 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:

```untrusted-server-text
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.
```

## Only reads (7)

Looks things up and changes nothing. Claude Code: allow.

### `explain_claim`

- The name "explain_claim" says "explain": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `find_rings`

- The name "find_rings" says "find": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `get_case`

- The name "get_case" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `list_alerts`

- The name "list_alerts" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `list_cases`

- The name "list_cases" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `list_graphs`

- The name "list_graphs" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

### `search_customers`

- The name "search_customers" says "search": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
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.
```

## Claude Code permissions

For `.claude/settings.json`, assuming the server is installed as `bankweave`:

```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": []
  }
}
```
