Named domain tools
16 MCP tools such as blast_radius, rank_findings and claim_finding, not a raw Cypher box. See the tool reference.
External APIs change underneath running code. Some changes have a version to bump. Many don’t: a retired model id, a sunset API version, a parameter removed on the server. Dependency bots only read manifests, and changelogs go unread. None of them connect a provider’s change to the lines, routes and teams it reaches, or remember what was decided last time.
Avert indexes your repository into a FalkorDB graph, tracks provider changes from machine-readable sources, and joins the two. It is a neutral tool: any provider with a published SDK is covered by the same machinery.
Here is a real finding from the demo service. A rolling alias, claude-3-5-sonnet-latest, resolves to a model that was retired on
2025-10-28. Nothing in the manifest changed, and no version could have been bumped. The path below is what Avert returns.
ChangeEvent retired: claude-3-5-sonnet-20241022 retired on 2025-10-28; replacement claude-sonnet-5-5 -AFFECTS->Value "claude-3-5-sonnet-20241022" <-RESOLVES_TO-Value "claude-3-5-sonnet-latest" (unpinned alias) <-PASSES-CallSite msg = claude.messages.create( (support/app/llm.py:19) <-HAS_CALL_SITE-Function answer() (support/app/llm.py:10) <-CALLS-Function draft_reply() (support/app/main.py:19) <-CALLS-Function reply() (support/app/main.py:15) <-HANDLED_BY-Route POST /support/reply (support/app/main.py:14) (file support/app/llm.py) <-OWNS-Team @acme/support-aiSee this path drawn in the live demo.
Avert’s core question, which routes and teams does this change break?, is a path through links of unknown depth. That is the shape of problem a graph database answers directly, and FalkorDB is where Avert keeps and queries its data.
How Avert uses FalkorDB, with the queries.
Index. Tree-sitter reads Python and TypeScript and writes routes, functions, call chains and every external API call site, resolved to a provider, operation, parameter and value.
Detect. Avert diffs the SDK your manifest declares against the latest release, and reads published model lifecycle data. Changes become events attached to the API surface, and only the ones your code actually calls become findings.
Trace and act. One graph query walks from the change down the API surface to your call sites, then up the call chain to routes and owners. Agents rank the findings, group them into batches, and open an issue or pull request with the path as evidence.
Named domain tools
16 MCP tools such as blast_radius, rank_findings and claim_finding, not a raw Cypher box. See the tool reference.
Shared memory
Decisions, sessions and fix recipes live in the graph. A second client, or a second repository, recalls them without being told.
Safe coordination
Agents claim findings atomically, so parallel migrators never collide. Pull requests are never merged automatically.
Read the queries
Every Cypher query and algorithm call is in one file and documented. See the query reference.
Avert is an MCP server. Install it from npm as avert-mcp and your agent gets sixteen
named tools to find, trace, rank and fix API changes, with FalkorDB running locally:
docker run -d -p 127.0.0.1:6380:6379 falkordb/falkordb:v4.22.1claude mcp add avert -e FALKORDB_URL=falkor://localhost:6380 -- npx -y avert-mcp mcpThen ask your agent to index a repository and tell you what the latest provider changes break. Or try the read-only hosted server first, with nothing to install:
claude mcp add --transport http avert-demo https://avert-web.bravetree-b234f308.uaenorth.azurecontainerapps.io/mcpCursor, the MCP Inspector and the full configuration are on the Connect an agent page.
| Provider | Detected from |
|---|---|
| OpenAI | npm + PyPI SDK diffs, model lifecycle data |
| Anthropic | npm + PyPI SDK diffs, model lifecycle data |
| Google Gemini | npm + PyPI SDK diffs, model lifecycle data |
| Stripe | npm + PyPI SDK diffs |
| Twilio | npm + PyPI SDK diffs |
Providers are data, not code: adding one is a few lines of YAML (Contributing). Avert indexes Python and TypeScript. See Limits and roadmap for what it cannot see.
claude mcp add --transport http avert-demo https://avert-web.bravetree-b234f308.uaenorth.azurecontainerapps.io/mcp, then ask for the findings in avert:acme.npx -y avert-mcp mcp (see Connect an agent), or follow the Quickstart.