OpenClimateLaw
Research previewA citation-safe Model Context Protocol layer over climate-litigation databases. Built so AI agents (Claude, ChatGPT, Gemini, Copilot, Cursor and others) can quote and cite climate cases without fabricating either.
Toolkit for climate litigators
OpenClimateLaw is part of a broader regenerative.law commitment to free, open-source legal-research infrastructure for the climate-litigation field. Our intended audience is activist lawyers, university clinics, public-interest organisations, and researchers — practitioners who do this work without budgets for commercial AI research tools.
regenerative.law — an initiative of regenerative Foundation — supports climate litigation in two complementary ways: by funding cases directly, and by operating shared infrastructure that lowers the cost of doing this work. The tool below is run as a public service — free, unauthenticated, open source, with attribution preserved to the upstream sources we redistribute.
OpenClimateLaw research preview
Citation-safe MCP access to the global climate-litigation corpus (Sabin Center for Climate Change Law + Climate Rights Database, University of Zurich). The page you are reading.
5,027 cases · 66 jurisdictions · 81k+ court documents · 14k+ citation edges · MIT licence.
More tools are in development. If you operate a public-interest organisation in the climate-litigation space and would benefit from infrastructure we don't yet provide, please write to us.
What it does
Nine tools, organized into four groups. Each is callable from any MCP client; combine them for full-fidelity legal research.
Discovery
Find the right case to cite.
search_cases(query, jurisdiction?, claim_type?, status?, limit?, semantic?)— hybrid full-text + trigram (typo-tolerant) + sentence-transformer cosine ranking. Returns case IDs, titles, summaries, jurisdictions, and verbatim citation strings.get_case(case_id_or_sabin_id)— full record by canonical UUID or Sabin family ID. Includescase_number,core_object(one-sentence holding),principal_laws(statutes the case turns on), parties, claim types, documents (with extracted text where available), citation strings, and field-level provenance.
Graph navigation
Follow citation edges and find semantic analogues.
find_citations(case_id, limit?)— cases this case cites (forward edges). Each result tagged withsource_of_edge:title_match(canonical-title matched by Aho-Corasick),inferred_nlp(formal cite — ECLI / BGE / US reporter — extracted by regex), orsabin_structured.find_cited_by(case_id, limit?)— cases citing this case (backward edges). Use for influence analysis.find_related_cases(case_id, jurisdiction?, claim_type?, status?, limit?)— semantic similarity via sentence-transformer cosine on case embeddings. Surfaces cross-language and cross-phrasing analogues (e.g. Urgenda → Klimaatzaak, the Shell appeal, Luca Salis).
Citation safety
The contract that makes AI-assisted legal research trustworthy: cannot fabricate a citation, cannot fabricate a quote, cannot smuggle either past attestation.
cite(case_id, lang, format)— returns the verbatimcitation_stringof a previously retrieved case. Agents are required not to construct citations from training data; they must call this tool.check_claim_support(quote, source_id, source_kind)— verifies a quoted string appears verbatim incase_summary,document_text(note: takes a document UUID fromget_case().documents[].id, not a case ID), orcitation_string.attest_response(draft_text, retrieved_ids[])— scans an LLM's draft for citation-shaped strings (ECLI, BVerfGE, BGE, US reporter, paragraph references) and flags any not present in the retrieved cases.
Aggregates
Corpus-wide statistics for dashboards and analysis.
get_statistics(scope, group_by?)— case / document / jurisdiction counts, optionally grouped by jurisdiction, claim type, year, status, or outcome.
Try it
Once connected, ask any compatible client:
- "Search the climate-litigation corpus for 'Amazon deforestation' filed in Brazil; show the top five with their core_object."
- "Find Urgenda Foundation v. State of the Netherlands, cite it in en/sabin format, and quote one sentence from its summary verbatim — but verify the quote first using check_claim_support."
- "Find youth-plaintiff cases in the United States and summarize their claim types."
- "How many climate cases are filed against governments per jurisdiction? Top 10."
- "Validate this draft: 'In ECLI:NL:HR:2019:2007 the court reasoned, citing Massachusetts v. EPA, 549 U.S. 497 (2007)…' against retrieved cases [
urgenda-foundation-v-state-of-the-netherlands]."
Add to Claude
Claude Code (CLI)
claude mcp add openclimatelaw https://mcp.openclimatelaw.org/mcp --transport http
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows). Uses mcp-remote as a stdio→HTTP bridge.
{
"mcpServers": {
"openclimatelaw": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.openclimatelaw.org/mcp"]
}
}
}
claude.ai (Pro / Team / Enterprise)
Settings → Connectors / Custom integrations → paste https://mcp.openclimatelaw.org/mcp.
Anthropic API (Messages, MCP Connector)beta
import anthropic
client = anthropic.Anthropic()
resp = client.beta.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
mcp_servers=[{
"type": "url",
"url": "https://mcp.openclimatelaw.org/mcp",
"name": "openclimatelaw",
}],
messages=[{"role": "user", "content": "How many climate cases involve Brazil?"}],
extra_headers={"anthropic-beta": "mcp-client-2025-04-04"},
)
Add to ChatGPT & OpenAI
ChatGPT (Plus / Pro / Team / Enterprise)
Settings → Connectors → Add custom connector → paste https://mcp.openclimatelaw.org/mcp. (Custom connectors are unavailable on the Free plan.)
OpenAI Agents SDK (Python)
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp
async with MCPServerStreamableHttp(
name="openclimatelaw",
params={"url": "https://mcp.openclimatelaw.org/mcp"},
) as server:
agent = Agent(name="research", mcp_servers=[server])
result = await Runner.run(agent, "Find Urgenda v. Netherlands and cite it.")
print(result.final_output)
OpenAI Responses API (mcp tool)
from openai import OpenAI
client = OpenAI()
resp = client.responses.create(
model="gpt-5",
tools=[{
"type": "mcp",
"server_label": "openclimatelaw",
"server_url": "https://mcp.openclimatelaw.org/mcp",
}],
input="Look up the Urgenda case and quote one sentence verbatim, validated.",
)
Add to GitHub Copilot
VS Code (workspace)
Add to .vscode/mcp.json:
{
"servers": {
"openclimatelaw": {
"type": "http",
"url": "https://mcp.openclimatelaw.org/mcp"
}
}
}
Copilot CLI
gh copilot mcp add openclimatelaw --type http --url https://mcp.openclimatelaw.org/mcp
(Exact subcommand depends on your Copilot CLI version; consult gh copilot mcp --help.)
Add to Google Gemini
Gemini CLI
gemini mcp add openclimatelaw --transport http --url https://mcp.openclimatelaw.org/mcp
Or edit ~/.gemini/settings.json directly with an mcpServers block (same shape as Claude Desktop).
Google AI Studio / Vertex AI via tools API
Gemini's tool-use API can call MCP servers via the SDK's MCP client integration:
import asyncio
from google import genai
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def run():
async with streamablehttp_client("https://mcp.openclimatelaw.org/mcp") as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
client = genai.Client()
resp = await client.aio.models.generate_content(
model="gemini-2.5-pro",
contents="How many climate cases involve Germany? Use the MCP tools.",
config={"tools": [session]},
)
print(resp.text)
asyncio.run(run())
Other MCP clients
Any MCP client supporting Streamable HTTP works. Point it at https://mcp.openclimatelaw.org/mcp.
- Cursor: Settings → MCP → Add new MCP server → URL transport.
- Continue.dev: add to
~/.continue/config.yamlundermcpServerswithtype: streamable-http. - Cline (VS Code): MCP Servers panel → Edit settings → add a URL entry.
- Goose:
goose configure→ Add MCP Server → chooseSSEorHTTP. - Zed: add to
settings.jsonunder"context_servers". - Custom code: any HTTP client speaking the MCP Streamable HTTP spec.
Data sources, methodology & licence
Centred on the Sabin Center for Climate Change Law's Climate Litigation Database (4,812 cases, full metadata + summaries + court-document text), scraped directly from www.climatecasechart.com under the CC-BY 4.0 licence Sabin publishes the data under. Court-document PDFs are downloaded only from climatecasechart.com/wp-content/uploads/… on Sabin's own domain. No third-party API in the loop.
Metadata-only references to the Climate Rights Database (215 cases) are included with redirect-to-source links. Full case summaries are not copied — consult CRD directly for substantive content.
Per CC-BY 4.0, every citation_string returned by this MCP carries upstream attribution. The MCP server itself is open source under the MIT licence at github.com/jonashertner/openclimatelaw.
Embeddings: sentence-transformers/all-MiniLM-L6-v2 (384-dim) stored as pgvector with HNSW indexing. Citation graph: Aho-Corasick canonical-title matching plus formal-cite regex extraction. Roadmap: bulk-export ingestion path with the data sources, statute layer drawing on the ClimatePolicyRadar / CCLW HuggingFace dataset.
Source & status
Open source: github.com/jonashertner/openclimatelaw · MIT · v0.1 · Streamable HTTP MCP · Hetzner Cloud · Let's Encrypt automatic TLS.
Health check: https://mcp.openclimatelaw.org/health