OpenClimateLaw
Research previewA citation-safe Model Context Protocol layer over the world's climate litigation and legislation. Built so AI agents (Claude, ChatGPT, Gemini, Copilot, Cursor and others) can quote and cite climate cases and laws without fabricating either.
Connect in a minute
No sign-in and no API key. Pick your assistant and follow the steps — then ask it a climate-law question.
claude.ai Free · Pro · Max · Team · Enterprise
- Open claude.ai → Customize → Connectors. (Connectors recently moved here from Settings.)
- Click the + next to Connectors.
- Enter a name (e.g. OpenClimateLaw) and this URL, then click Add:
https://mcp.openclimatelaw.org/mcp - Open a new chat, enable OpenClimateLaw, and ask away.
Free plans allow one custom connector.
ChatGPT Developer mode · Plus · Pro · Team · Enterprise
- Open ChatGPT → Settings → Apps & Connectors → Advanced settings → turn on Developer mode.
- Back in Apps & Connectors, click Create.
- Name it OpenClimateLaw, set this URL and Authentication None, then Create:
https://mcp.openclimatelaw.org/mcp - In a new chat: + → More → enable OpenClimateLaw, then ask away.
Both endpoints work — if a flow (e.g. Deep Research) asks for an SSE URL instead, use https://mcp.openclimatelaw.org/sse.
Gemini Gemini CLI
- Install the CLI:
npm install -g @google/gemini-cli - Add the server:
gemini mcp add --transport http openclimatelaw https://mcp.openclimatelaw.org/mcp - Run
geminiand ask a climate-law question — it calls the tools automatically.
The consumer Gemini app (gemini.google.com) can't add custom MCP connectors yet — use the CLI above, the Gemini API / Google AI Studio, or Gemini Enterprise. Details below.
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) and the world's climate legislation (Climate Change Laws of the World, by Climate Policy Radar). The page you are reading.
5,027 litigation cases (66 jurisdictions) · 5,347 climate laws (200 jurisdictions) · 81k+ court documents · ~5M pinpoint passages · 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
Seventeen research tools in six groups — plus search and fetch, the two read-only tools ChatGPT's connector calls (19 in total). 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?, sort?, decided_after?, decided_before?, filed_after?, filed_before?, limit?, offset?)— hybrid full-text + typo-tolerant fuzzy-title + semantic (embedding) ranking. Each match returns sabin_id, title, jurisdiction, status,filing_date,decision_date, a highlightedmatch_snippet, and a verbatim citation_string; the response also carries atotalmatch count.sortbyrelevance(default),newest, oroldest; restrict by inclusive date range (ISOYYYY-MM-DD); pass an empty query to browse the corpus by date; paginate withlimit(max 50) +offset.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,linked_statutes(the actual CCLW laws the case references — each resolvable to full text viaget_statute),outcome_code(LLM-classified, confidence-gated, backed by a verbatim quote in provenance), parties (plaintiff / defendant), claim types, documents (with extracted text where available), citation strings, and field-level provenance.find_cases_by_law(law, limit?)— every case that turns on a given law, from Sabin's principal-law tags. e.g. the Public Trust Doctrine → 88; the European Convention on Human Rights → 60 across jurisdictions; the Clean Air Act → 597.get_case_doctrine(case_id_or_sabin_id)— the structured doctrine of a case, where one has been extracted: disposition + procedural posture, the key holdings (each with a verbatim supporting quote and averifiedflag), the legal test applied, the legal bases, and the relief. Every quoted element is checked verbatim against the source, and provenance carries a quotes-verified score; the one-line significance is interpretive synthesis. A preview — populated on 108 landmark cases so far (the 2025 ICJ Advisory Opinion, KlimaSeniorinnen, Urgenda, the Shell appeal, …), scalable across the corpus.search_casesandfind_cases_by_lawresults carry ahas_doctrineflag so an agent knows where to look.
Verbatim retrieval & pinpoint
Read and quote the actual text — never paraphrase a holding.
get_document_text(document_id, offset?, max_chars?)— the verbatim text of a court document, paginated (100k+ char rulings supported).find_relevant_passage(case_id, claim, top_k?)— locate the passage(s) supporting a claim by hybrid lexical + semantic match over ~5M indexed passages. Returns verbatim text + a confidence, and refuses (no_match) rather than guess a pinpoint.get_passage(document_id, ...)— retrieve a specific passage window verbatim.
Legislation
The world's climate laws — Climate Change Laws of the World (Climate Policy Radar).
search_statutes(query, jurisdiction?, limit?)— title-weighted full-text search over 5,347 climate laws & policies across ~200 jurisdictions, with full multilingual text. e.g. "renewable energy targets" → 1,765 laws (China's 14th Five-Year Plan, the EU 2020 Climate & Energy Package, …).get_statute(cclw_id, offset?, max_chars?)— one law's record + a paginated window of its verbatim text.
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 (US reporters, ECLI, BVerfGE/BGE, and the UK, Australia/NZ, Canada, Ireland, South Africa, India and CJEU neutral-citation systems) and flags any not present in the retrieved cases, plus any quoted span not found verbatim in a retrieved summary or document.verify_grounding(draft_text, retrieved_ids[])— a semantic judge (LLM) that complements the regex rails: it flags fabricated case names, holdings not stated in the retrieved summaries, and unsupported facts — the failure mode pattern-matching cannot catch. Advisory.
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."
- "Search the climate-legislation corpus for the UK Climate Change Act 2008 (search_statutes), then quote its emissions-target language verbatim from get_statute."
- "Get Friends of the Earth and Others v. Secretary of State (GB): show its parties and the CCLW laws it references (linked_statutes), then pull the full text of the Climate Change Act 2008."
- "Show the newest climate decisions in the United States from 2025 onward — sort by decision date and list each case's decision_date."
- "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 (Free / Pro / Max / Team / Enterprise)
Customize → Connectors → click + → enter a name and the URL https://mcp.openclimatelaw.org/mcp → Add. (Connectors recently moved from Settings to Customize; available on Free — one connector — through Enterprise.)
Anthropic API (Messages, MCP Connector)beta
import anthropic
client = anthropic.Anthropic()
resp = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
betas=["mcp-client-2025-11-20"],
mcp_servers=[{
"type": "url",
"url": "https://mcp.openclimatelaw.org/mcp",
"name": "openclimatelaw",
}],
tools=[{"type": "mcp_toolset", "mcp_server_name": "openclimatelaw"}],
messages=[{"role": "user", "content": "How many climate cases involve Brazil?"}],
)
Add to ChatGPT & OpenAI
ChatGPT (developer mode — Plus / Pro / Team / Enterprise)
Settings → Apps & Connectors → Advanced settings → enable Developer mode, then Create a connector with the URL https://mcp.openclimatelaw.org/mcp and Authentication None. Enable it in a chat via + → More. If a flow (e.g. Deep Research) asks for an SSE URL instead, use https://mcp.openclimatelaw.org/sse — both serve the same tools, including the search and fetch tools ChatGPT calls. (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/sse",
"require_approval": "never",
}],
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
copilot mcp add --transport http openclimatelaw https://mcp.openclimatelaw.org/mcp
(Exact subcommand depends on your Copilot CLI version; consult copilot mcp --help.)
Add to Google Gemini
The consumer Gemini app (gemini.google.com) has no custom-connector UI yet — connect via the CLI, the SDK, or Gemini Enterprise below.
Gemini CLI
gemini mcp add --transport http openclimatelaw 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.
The legislation layer is the Climate Policy Radar Climate Change Laws of the World corpus, published as open data (CC-BY) on Hugging Face — 5,347 laws & policies across ~200 jurisdictions, with full multilingual text. Cases are cross-linked to the laws they reference by exact title + jurisdiction (145 high-confidence links so far; broader linking is on the roadmap). Parties are parsed from case captions (92% of cases); outcomes are LLM-classified under a confidence gate (below).
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. Outcomes: classified by claude-sonnet-4-6, confidence-gated and verified against a verbatim quote — anchored to the latest disposition (so an appellate reversal isn't mislabeled by an overturned lower-court order) — 1,606 decided cases carry an outcome; the rest are left blank rather than guessed. Structured doctrine (disposition, holdings, legal test, bases, relief) is extracted by claude-sonnet-4-6 from each case's summary and decision text, with every quoted element verified verbatim against the source and flagged otherwise — a preview on 108 landmark cases so far (72% of holding-quotes verbatim-verified; the ICJ Advisory Opinion and Shell, 100%). Roadmap: bulk-export ingestion path with the data sources; broader case↔law linking via Climate Policy Radar's own concept IDs; scaling the doctrine layer across the decided corpus.
Source & status
Open source: github.com/jonashertner/openclimatelaw · MIT · v0.1 · MCP over Streamable HTTP (/mcp) + SSE (/sse) · Hetzner Cloud · Let's Encrypt automatic TLS.
Health check: https://mcp.openclimatelaw.org/health