Skip to main content

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

Metadata

Release files for llm-sca-tooling 0.16.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for llm-sca-tooling 0.16.0
File Size Uploaded
llm_sca_tooling-0.16.0.tar.gz 1.1 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for llm-sca-tooling 0.16.0
File Interpreter ABI Platform
llm_sca_tooling-0.16.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.6 MB

Release files / llm_sca_tooling-0.16.0.tar.gz

Download URL llm_sca_tooling-0.16.0.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
c218c5b7a4bda626498a75bce2546f951136fb007745d75a664484b2268cc5f7
BLAKE2b-256 checksum
How to use checksums
e94cb58be8a7c2ab32342ecb2d37f8697cde2479e7f65953df615f6c3efc2184
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / llm_sca_tooling-0.16.0-py3-none-any.whl

Download URL llm_sca_tooling-0.16.0-py3-none-any.whl
Size 543.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b49d93f548c91da3ed1d3e97fc8a492e4a6e9abc035387687c36e0edd94aa1f4
BLAKE2b-256 checksum
How to use checksums
01724966a1eeb09d69432d24da65bbaf8fd020dd94ee9fc990ae9b3e3143ed57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

0.16.0 This release

2 release files

0.15.0

2 release files

0.14.0

2 release files

0.13.0

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page