graphsense-lib 2.13.4
[2.13.4] - 2026-05-20
Library (v2.13.4)
Added
- New MCP tool
build_pathfinder_fileproduces a.gssave file from an investigation agent's findings. The agent passes addresses, transactions, and aggregated edges accumulated vialookup_address/list_neighbors/list_txs_for; the tool returns the.gsbytes as an MCP embedded resource (BlobResourceContents, MIMEapplication/octet-stream, URIfile:///<filename>.gs) so clients can hand it to the user as a downloadable attachment without feeding the blob through the model —structured_contentcarries only{filename, summary}(layout, counts, warnings). Layout is automatic: a new BFS-hierarchical layout (apply_hierarchical_layoutinsrc/graphsenselib/convert/gs_files/encoder.py) runs whenever at least one node is flaggedstarting_point=true— anchors at column 0, every other node placed by hop distance with txs as stepping stones, within-level order following the spec (so writing the most relevant nodes first puts them near the top of their column); otherwise the columnarGsBuilderdefaults apply. The docstring spells out the join semantics (a tx renders only when listed intxsAND referenced fromagg_edges.tx_ids) with a worked example, andsummary.warnings(_collect_warnings) flags four common authoring mistakes that render an empty/abstract graph: edges with notxs, edges missingtx_ids,tx_idsreferencing hashes not intxs, anda/bendpoints not inaddresses(advisory only, unknown-id lists truncated to ten). Input boundary uses the same conservative currency/id guards as elsewhere insrc/graphsenselib/mcp/tools/consolidated.py. Registered insrc/graphsenselib/mcp/curation/tools.yamlunderconsolidated_toolswithreplaces: []— net new surface, no existing tool or endpoint changed.
Changed
- MCP hides the deprecated
entityandstatusfields on every address, cluster, and raw-tag response. Both fields are already flaggeddeprecated: truein the OpenAPI schema (Address.entity,Address.status,Entity.entity,NeighborEntity.entity,AddressTag.entity) and the REST surface dual-emitsentityalongside the preferredclusteralias for backwards compatibility; surfacing both via MCP made the LLM double-read or pick the wrong one.entityandstatusare now added to_LEGACY_ADDRESS_FIELDS,entityto_LEGACY_CLUSTER_FIELDS, and a new_LEGACY_TAG_FIELDS = {"entity"}is applied to each row inlist_tags_by_address(src/graphsenselib/mcp/tools/consolidated.py). REST endpoints and OpenAPI schemas are unchanged — the deprecation markers continue to advertise the field as legacy for non-MCP consumers.
Fixed
- Type-checker warnings:
namedtuple("Row", ...)calls intests/schema/test_apply_migrations.pynow use names that match their variables (TransformedRow,RawRow). Pure rename — no behavioural change; clears the twomismatched-type-namediagnostics fromuv run ty check.
Web API + Python client (webapi-2.13.4)
No changes.
Full Changelog: v2.13.3...v2.13.4