Content
# sudact-mcp
MCP Server for searching Russian judicial practice through the public site
[sudact.ru](https://sudact.ru) (SudAct). There is no official API for SudAct —
the server works as a browser (User-Agent + session cookie + asynchronous
search query) and parses HTML responses.
## Tool List
| Tool | Purpose |
|---|---|
| `search_court_practice` | Search for decisions by text / law article / case number. `scope`: `all` (Supreme Court + arbitration + general courts + magistrate courts) or one section: `vsrf`, `arbitral`, `regular`, `magistrate`, `law`. Date parameters: `date_from`, `date_to` (DD.MM.YYYY). |
| `get_court_decision` | Full text of a decision by URL or document ID. |
## Installation
```powershell
py -m pip install --user -r requirements.txt
```
Check that everything works (makes real requests to sudact.ru):
```powershell
py -X utf8 selftest.py
```
## Connecting to Claude Code
Add to `~/.claude.json` in the `"mcpServers"` block:
```json
"sudact": {
"command": "C:\\Users\\USER\\AppData\\Local\\Programs\\Python\\Python312\\python.exe",
"args": ["C:\\Users\\USER\\Documents\\Veritas\\Code\\sudact-mcp\\server.py"],
"env": { "PYTHONUTF8": "1" }
}
```
After editing, restart Claude Code to enable the server.
## Skill `sudact-stats` (practice analysis on top of MCP)
In `skill/sudact-stats/`, there is a Claude skill built on top of this MCP. It works
in two modes:
- **A — evidence-based statistics:** honest (random / stratified by dates)
sample of decisions → coding of each → aggregated report with mandatory
disclaimers about sample biases. Backend — `stat_corpus.py`.
- **B — targeted retrieval:** search for specific rare/specific decisions
(e.g., acquittals by article) with multiple queries → checking each candidate
with a model → report with links. Backend — `find_candidates.py`.
Installation: copy `skill/sudact-stats/` to `~/.claude/skills/`. Coder —
Sonnet (calibrated against Opus). Details and limitations — in `SKILL.md`.
## Free Search Limitations
The server covers the scenario "find practice — read texts — summarize".
However, this is a free public source with limitations. It's useful to understand
where free ends.
### Data Limitations (SudAct itself)
- **Not everything is published.** SudAct is an aggregator of what courts have
made publicly available. Some acts are not published or are delayed;
completeness is not guaranteed.
- **Anonymization.** Personal data is removed ("PJSC Sovcombank vs. individual
1 individual 5"), so searching for practice by specific individual is almost
impossible.
- **Arbitration lags behind the primary source** (kad.arbitr.ru) in freshness
and completeness of texts.
### Search Quality Limitations (main)
- **Literal search, no semantics or synonyms.** Searches for word matches, not
ideas. Example: `reduction of penalty` → 100,000+ decisions, but
`reduction of penalty 333 Civil Code` → 0. Long phrases break the search —
short meaningful queries are needed.
- **No meaningful ranking.** Sorting by date / simple relevance; Supreme Court
decisions and district court decisions are mixed.
- **Poor filters.** No filtering by court instance, outcome, amount, judge —
only text, section, and dates.
- **No ready-made legal positions.** Raw decisions are returned; summaries are
made by LLM on top of texts, not by the service itself.
### What is Not Available
- Statistics and trends ("in N% of cases, the court reduced the penalty"),
judge profiles.
- Links to higher court positions, "case fate" by instance, binding to the
current norm edition.
### Technical Limitations of the Wrapper
- 10 results per page; `scope=all` mode = 4 sequential requests.
- The parser is fragile: if SudAct changes the layout, `server.py` will need
to be updated.
- There is no official limit, but with aggressive query frequency, the IP
may be throttled. The server queries sequentially, without parallel hammering.
### When to Switch to Paid Services
Caselook / Casebook / cyberjustice makes sense to connect (with the same
MCP interface) when you need:
- search **by meaning / legal position**, not by exact words;
- **analytics and forecast** (frequency of arguments, typical amounts of
claims);
- **filters** by court instance/outcome/judge and analysis of counterparty by
TIN;
- guarantee of completeness and fast updates.
Roughly: **free = fast search and text reading with AI summaries; paid =
smart search + analytics + completeness.**