CasusLegal connector in your product
One address and one key for four corpora of Russian case law. Your assistant receives tools for searching and reading judgments; routing between corpora is handled on our side.
1. Connection
Standard MCP server: connect it like any other connector in your chat.
| Parameter | Value |
|---|---|
| Address | https://mcp.casus.legal/partner/mcp |
| Transport | MCP Streamable HTTP (not SSE) |
| Authentication | Authorization: Bearer clp_… — key provided separately |
| Connector name in the client | Latin characters only, for example CasusLegal |
"type": "streamable-http"
or "streamable" — depending on the library.
curl -sS https://mcp.casus.legal/partner/mcp \
-H "Authorization: Bearer $CASUS_PARTNER_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{
"protocolVersion":"2025-06-18","capabilities":{},
"clientInfo":{"name":"my-platform","version":"1.0"}}}'
The response contains — serverInfo.name: "CasusLegal Partner". Next,
tools/list it should return nine tools.
2. Request headers
| Header | Required | Purpose |
|---|---|---|
Authorization: Bearer clp_… |
yes | platform key |
X-Partner-User-Id |
strongly recommended | end-user (lawyer) pseudonym on your side |
X-Partner-User-Id — any stable string that does not
reveal the person’s identity: your internal identifier or its hash. It
serves two purposes.
- Limits are calculated per user, not for the platform as a whole. There is one key, and without this header all your lawyers share one bucket: one client stuck in a loop hits the ceiling, while the others receive refusals.
- Per-user itemized accounting. We use it to reconcile our figures with yours: how many calls, of what types, and how many people actually reached the connector.
3. Tools
Six tools, each with a parameter
corpus.
| Tool | What it does |
|---|---|
casuslegal_search_practice | primary subject-matter case-law search |
casuslegal_find_term | search for a phrase or rare term (consecutive words, in all word forms) |
casuslegal_get_case_details | full text of the judgment by case_id |
casuslegal_find_similar | judgments close to the specified one in legal position |
casuslegal_list_tags | frequency dictionary of the corpus’s topics |
casuslegal_stats | corpus contents: volume, year coverage, courts |
Parameter corpus
| Value | Corpus | Topics |
|---|---|---|
mainby default |
Constitutional Court of the Russian Federation, Supreme Court of the Russian Federation, Supreme Commercial Court of the Russian Federation | civil, commercial, tax, insolvency, corporate, contractual, employment and inheritance disputes; Resolutions of the Plenum and reviews of the Presidium of the Supreme Court of the Russian Federation; legal positions of the Constitutional Court of the Russian Federation |
sip |
Intellectual Property Court | trademarks, patents, copyright and related rights, disputes with Rospatent, domain-name disputes |
kas |
administrative cases of the Supreme Court of the Russian Federation (KAS) | regulatory review, challenges to decisions of public authorities, cadastral value, electoral disputes |
kud |
criminal cases of the Supreme Court of the Russian Federation | legal classification, sentencing, CPC RF, appeals and cassation proceedings against judgments |
corpus from it: the model then spends no token on selecting one.
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{
"name":"casuslegal_search_practice",
"arguments":{
"query":"recovery of a penalty, reduction under Article 333 of the Civil Code",
"corpus":"main",
"limit":10
}}}
4. What the response contains
A structured object. For the main corpus, these are the blocks
constitutional_context (legal positions of the Constitutional Court of the Russian Federation),
vs_guidance (Plenum resolutions and reviews of the Supreme Court of the Russian Federation),
latest_practice (recent rulings of judicial chambers),
vas_history (practice of the Supreme Commercial Court of the Russian Federation) and results.
Volume
One search returns approximately 110,000 characters, or about 40,000 tokens as input to your model. This is intentional: completeness of the results is the product. Factor this volume into your choice of the model that processes the response — at this scale, the difference in cost between models can be as much as twelvefold.
Time
A search takes about 30 seconds. Set the tool-call timeout to at least 120 seconds; otherwise, you will interrupt requests that are proceeding normally.
Links to judicial acts
Each judicial act has a field url — a page containing the full text.
Pass it to the user as is, and do not truncate the parameter
?t=: without it, the link is invalid. The link remains valid for
30 days. If you plan to embed links in client documents, tell us — we will make them permanent.
Full text
The search returns the identifying details and key excerpts; the full judicial act is obtained by a separate
call casuslegal_get_case_details(case_id, corpus).
case_id is valid only within its own corpus.
5. Errors and limits
Failures are returned as a successful tool response with a field
error — this allows your model to explain the situation to the user,
rather than treating the connector as broken.
error | What happened |
|---|---|
rate_limited | the hourly limit has been exceeded — for the user or the integration |
busy | the concurrent-search limit has been reached; try again in a few seconds |
corpus_forbidden | the corpus is not included in your integration |
corpus_unavailable | the corpus is temporarily unavailable |
engine_not_ready | the corpus data is being reloaded |
401 is returned only at the connection level: the key is incorrect,
revoked or expired. This is a configuration error; retries will not
resolve it.
Default limits
- 20,000 calls per hour per integration;
- 400 calls per hour per end user;
- 24 concurrent searches per integration, 4 per user;
- a daily cap on the number of distinct judicial acts — protecting the corpus from mass downloading.
Limits can be adjusted: if you reach one during normal operation, let us know and we will raise it.
6. Pre-launch checklist
- Transport — streamable HTTP, not SSE.
tools/listreturns nine tools.- Tool-call timeout — at least 120 seconds.
- Header
X-Partner-User-Idis set on every call. corpusis selected based on the subject of the question, one corpus per request.- Links
urlreach the user in full, together with?t=. - The model processing the results has been selected with 40,000 tokens per search in mind.
- Field
errorin the tool response is processed and shown to the user.