Skip to main content

Evidence-first, LLM-augmented static code analysis: graph indexing, MCP server, audit workflows

Project description

llm-sca-tooling

Evidence-first, LLM-augmented static code analysis.

llm-sca-tooling gathers typed evidence from your repository — AST symbols, call graphs, SARIF alerts, tests, runtime traces — grades it (parser > analyser > heuristic > unknown), and only then lets an LLM reason over the graded context. Findings carry their evidence grade; the tool never upgrades confidence on its own, and it never edits your source. Humans decide on remediation.

Five product surfaces

  1. MCP server — the primary integration surface: 45+ tools, 14 resources, 12 prompts over stdio or Streamable HTTP. Point Claude Code (or any MCP client) at it and ask questions about your repository with evidence-graded answers.
  2. Workflow orchestrator — bug resolve, patch review, SAST alert repair, implementation check (spec-vs-code compliance), and fault localisation. Every run produces a structured report, a run record, and a harness condition sheet.
  3. Evaluation harness — a T1–T4 benchmark ladder with calibration reports; T1 runs in null mode (no LLM) and gates every CI check.
  4. Operational harness plane — run records, incident tracking, trajectory memory with experience replay, operational reviews, release gates.
  5. Operational guardrails — permission profiles, doom-loop and budget monitoring, governance-drift checks, privacy redaction, session replay.

Install

pipx install llm-sca-tooling          # CLI + MCP server
# optional capabilities:
pipx inject llm-sca-tooling fastembed # semantic retrieval (embeddings)
pipx inject llm-sca-tooling anthropic # live LLM boundaries (llm_mode)

or in a project:

pip install "llm-sca-tooling[embeddings,llm]"

Graph indexing uses universal-ctags (apt install universal-ctags / brew install universal-ctags).

Indexing backend tiers

Per language, facts are graded by the strongest backend that produced them and reconciled by confidence (a fact confirmed by several backends ranks higher):

Tier Backends Confidence
Semantic (cross-file resolution) Python AST + pyan3, ts-morph (TS/JS), libclang (C/C++) parser, 1.0
Real grammar (structural) tree-sitter (Python, TS/JS, C/C++ — ships by default) parser, 0.8
Heuristic regex fallbacks, ctags heuristic, 0.6–0.7

tree-sitter is always on (grammars are bundled dependencies); the semantic backends need their optional toolchain (Node/ts-morph, the cpp extra) and fall back through these tiers when absent.

Optional: full-fidelity TypeScript/JavaScript

The TypeScript/JavaScript backend uses ts-morph for parser-grade facts (resolved cross-file imports and call edges). It needs Node.js and a one-time dependency install:

cd <site-packages>/llm_sca_tooling/indexing/backends/typescript/runner
npm install

Without Node/ts-morph the backend transparently falls back to a heuristic regex parser — lower fidelity, but indexing still works.

Optional: full-fidelity C/C++

The C/C++ backend uses libclang (clang.cindex) for parser-grade facts (resolved symbols, #include edges, cross-file call edges). The cpp extra bundles a loadable libclang — no system toolchain needed:

pip install "llm-sca-tooling[cpp]"

It honours compile_commands.json at the repo root when present. Without libclang the backend falls back to the heuristic regex parser.

Quickstart

llm-sca-tooling config validate
llm-sca-tooling mcp serve --transport stdio   # start the MCP server

Register with Claude Code:

claude mcp add llm-sca-tooling -- llm-sca-tooling mcp serve

Then, from your MCP client:

register_repo(repo_path="/path/to/repo")
graph_build(repo_path="/path/to/repo")        # async — poll task_status
get_relevant_files(issue_text="NullPointerException in UserService.authenticate")
run_implementation_check(spec="<your architecture doc>", task=true)
run_issue_resolution(issue_text="<bug report>")

LLM mode

Workflows run in null mode by default — deterministic heuristics only, suitable for CI. With the llm extra installed and ANTHROPIC_API_KEY exported, pass llm_mode: true to run_implementation_check to enable the LLM boundaries (clause grounding, contract generation). Runs degrade to null mode when no provider is available and report llm_mode_active so a degraded run is never mistaken for an LLM-graded one. Model selection via LLM_SCA_MODEL (default claude-opus-4-8).

Evidence hierarchy

Grade Source Confidence
parser ctags AST, language servers, exact SARIF locations High
analyser dataflow, cross-file call graph Medium-high
heuristic pattern matching, keyword search, LLM-classified groundings Medium
unknown no hard evidence — reported honestly, never auto-passed Low

Every LLM-derived artefact is fail-closed: unparseable output degrades to the deterministic null path, citations are filtered to evidence actually provided, generated predicates must compile before they count, and LLM groundings carry a derivation="llm" audit field.

Governance

Development of this repository is governed by AGENTS.md: hard constraints (no secrets, write allowlists, deny-by-default egress), a verify-before-commit gate (make verify), live session telemetry, and harness condition sheets for every evaluation and release run.

Documentation

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

llm_sca_tooling-0.16.0.tar.gz (1.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

llm_sca_tooling-0.16.0-py3-none-any.whl (543.9 kB view details)

Uploaded Python 3

File details

Details for the file llm_sca_tooling-0.16.0.tar.gz.

File metadata

  • Download URL: llm_sca_tooling-0.16.0.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for llm_sca_tooling-0.16.0.tar.gz
Algorithm Hash digest
SHA256 c218c5b7a4bda626498a75bce2546f951136fb007745d75a664484b2268cc5f7
MD5 c72546703cdbebb218b9540031d7e54e
BLAKE2b-256 e94cb58be8a7c2ab32342ecb2d37f8697cde2479e7f65953df615f6c3efc2184

See more details on using hashes here.

File details

Details for the file llm_sca_tooling-0.16.0-py3-none-any.whl.

File metadata

File hashes

Hashes for llm_sca_tooling-0.16.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b49d93f548c91da3ed1d3e97fc8a492e4a6e9abc035387687c36e0edd94aa1f4
MD5 cf142133d471ad33f0791b07849655e0
BLAKE2b-256 01724966a1eeb09d69432d24da65bbaf8fd020dd94ee9fc990ae9b3e3143ed57

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page