{"apiVersion":"v1","directorySlug":"openclimatelaw-mcp-d7deed400f","title":"OpenClimateLaw — research preview","description":"Research preview of an MCP server giving AI agents citation-safe access to the Sabin Center","pageUrl":"https://www.mcpbundles.com/skills/openclimatelaw-mcp-d7deed400f","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.openclimatelaw.org/mcp","hostedMcpUrl":null,"toolCount":19,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"org.openclimatelaw/openclimatelaw-mcp-d7deed400f","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"get_statistics","description":"Return structured statistics over the climate-litigation corpus. scope: 'all' | 'sabin'. group_by: 'jurisdiction' | 'claim_type' | 'year' | 'status' | 'outcome' | null. Returns case_count, document_count, statute_count, jurisdiction_count, and per-group counts when group_by is set.","inputSchema":{"type":"object","properties":{"scope":{"enum":["all","sabin"],"type":"string","default":"all"},"group_by":{"anyOf":[{"enum":["jurisdiction","claim_type","year","status","outcome"],"type":"string"},{"type":"null"}],"default":null}},"additionalProperties":false},"logicalName":"get_statistics","displayName":"get_statistics","title":"get_statistics","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_case","description":"Return a full case record by canonical UUID or by Sabin ID. Includes outcome_code, parties, claim types, linked_statutes, documents (with upstream URLs), citation strings, and field-level provenance. Returns null when no case matches. Pass include_documents=false to omit the (often large) documents array and get only document_count — much lighter when you just need the record.","inputSchema":{"type":"object","required":["case_id_or_sabin_id"],"properties":{"include_documents":{"type":"boolean","default":true},"case_id_or_sabin_id":{"type":"string"}},"additionalProperties":false},"logicalName":"get_case","displayName":"get_case","title":"get_case","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_case_doctrine","description":"Return the structured, verifiable DOCTRINE of a case (where one has been extracted): disposition + procedural posture, the key holdings (each with a verbatim supporting quote and a `verified` flag), the legal test applied, the legal bases, the relief, and a one-line significance. Provenance includes the model and a quotes_verified/quotes_total score — every quoted element was checked verbatim against the source; `significance` is interpretive synthesis. Rely on verified quotes; treat unverified","inputSchema":{"type":"object","required":["case_id_or_sabin_id"],"properties":{"case_id_or_sabin_id":{"type":"string"}},"additionalProperties":false},"logicalName":"get_case_doctrine","displayName":"get_case_doctrine","title":"get_case_doctrine","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_document_text","description":"Return a window of a document's verbatim extracted text (a court opinion or filing — the full decision text), with its case citation_string. Use this to read and quote the actual decision: get a document UUID from get_case().documents[].id, retrieve the text here, then verify any quote with check_claim_support(source_kind='document_text'). Long decisions paginate via offset + max_chars (max 20000); follow has_more / next_offset.","inputSchema":{"type":"object","required":["document_id"],"properties":{"offset":{"type":"integer","default":0},"max_chars":{"type":"integer","default":8000},"document_id":{"type":"string"}},"additionalProperties":false},"logicalName":"get_document_text","displayName":"get_document_text","title":"get_document_text","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"find_relevant_passage","description":"Pinpoint a claim to the exact passage(s) of a case's decision text. Returns ranked matches with verbatim text, char offsets, a highlighted snippet, a confidence score, and the case citation_string — or {no_match: true} when no passage clearly matches. If no_match, do NOT guess a pinpoint; say no passage clearly supports the claim. Use this to ground a specific statement in a precise, quotable passage.","inputSchema":{"type":"object","required":["case_id_or_sabin_id","claim"],"properties":{"claim":{"type":"string"},"top_k":{"type":"integer","default":5},"case_id_or_sabin_id":{"type":"string"}},"additionalProperties":false},"logicalName":"find_relevant_passage","displayName":"find_relevant_passage","title":"find_relevant_passage","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_passage","description":"Return one decision passage verbatim by (document_id, para_index), with its neighbouring passage indices and the case citation_string. Pair with find_relevant_passage (which gives the indices) to read surrounding context.","inputSchema":{"type":"object","required":["document_id","para_index"],"properties":{"para_index":{"type":"integer"},"document_id":{"type":"string"}},"additionalProperties":false},"logicalName":"get_passage","displayName":"get_passage","title":"get_passage","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"cite","description":"Return the canonical citation_string for a case in the requested language and format. Requires a valid case_id (UUID or sabin_id). The R1 contract: never construct citations from training data; always call this tool to get a verbatim citation_string from a previously-retrieved case.","inputSchema":{"type":"object","required":["case_id","lang","format"],"properties":{"lang":{"type":"string"},"format":{"type":"string"},"case_id":{"type":"string"}},"additionalProperties":false},"logicalName":"cite","displayName":"cite","title":"cite","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"check_claim_support","description":"Validate that a quoted string appears verbatim in the named source's text. source_kind: 'case_summary' | 'document_text' | 'citation_string'. The R2 contract: never quote what wasn't retrieved.","inputSchema":{"type":"object","required":["quote","source_id","source_kind"],"properties":{"quote":{"type":"string"},"source_id":{"type":"string"},"source_kind":{"type":"string"}},"additionalProperties":false},"logicalName":"check_claim_support","displayName":"check_claim_support","title":"check_claim_support","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"attest_response","description":"Scan a draft response for citation-shaped strings and flag any that don't appear in the citation_strings of retrieved cases. Returns {passed: bool, violations: [...]}. The R1 contract enforced after-the-fact.","inputSchema":{"type":"object","required":["draft_text","retrieved_ids"],"properties":{"draft_text":{"type":"string"},"retrieved_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"logicalName":"attest_response","displayName":"attest_response","title":"attest_response","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"verify_grounding","description":"Semantic grounding check that complements attest_response: an LLM judge reads the draft against the retrieved cases' summaries + citations and flags assertions the sources do NOT support — fabricated case NAMES, holdings/outcomes not in the summary, and unsupported facts (what the regex citation/quote rails cannot catch). Returns {available, supported, unsupported_claims:[{claim, issue, explanation}]}. Advisory; pair with attest_response before finalizing. (available=false if the server has no L","inputSchema":{"type":"object","required":["draft_text","retrieved_ids"],"properties":{"draft_text":{"type":"string"},"retrieved_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"logicalName":"verify_grounding","displayName":"verify_grounding","title":"verify_grounding","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"find_citations","description":"Return cases that the given case cites (forward edges). The case is identified by canonical UUID or Sabin ID. Each result includes source_of_edge: 'title_match' (canonical_title found in summary or document text via Aho-Corasick), 'inferred_nlp' (formal cite — ECLI/BGE/US-reporter — extracted from text), or 'sabin_structured'. limit max 200.","inputSchema":{"type":"object","required":["case_id_or_sabin_id"],"properties":{"limit":{"type":"integer","default":50},"case_id_or_sabin_id":{"type":"string"}},"additionalProperties":false},"logicalName":"find_citations","displayName":"find_citations","title":"find_citations","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"find_cited_by","description":"Return cases that cite the given case (backward edges). The case is identified by canonical UUID or Sabin ID. Use this for influence analysis: 'how often is Urgenda cited by other climate cases?'. limit max 200.","inputSchema":{"type":"object","required":["case_id_or_sabin_id"],"properties":{"limit":{"type":"integer","default":50},"case_id_or_sabin_id":{"type":"string"}},"additionalProperties":false},"logicalName":"find_cited_by","displayName":"find_cited_by","title":"find_cited_by","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"find_related_cases","description":"Return cases semantically similar to the given case via sentence-transformer embedding cosine similarity. Useful for 'other cases like this one' even when titles share no keywords. Filters: jurisdiction, claim_type, status. limit max 50.","inputSchema":{"type":"object","required":["case_id_or_sabin_id"],"properties":{"limit":{"type":"integer","default":10},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"claim_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"jurisdiction":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"case_id_or_sabin_id":{"type":"string"}},"additionalProperties":false},"logicalName":"find_related_cases","displayName":"find_related_cases","title":"find_related_cases","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"find_cases_by_law","description":"The legislation -> litigation reverse link: return climate cases that turn on a given law or instrument (case-insensitive substring over each case's principal laws). Examples: 'Public Trust Doctrine', 'Clean Air Act', 'European Convention on Human Rights', 'National Environmental Policy Act'. Each result includes sabin_id, title, jurisdiction, status, decision_date, and a verbatim citation_string; the response also returns the total match count. Pair with get_case (whose principal_laws field lis","inputSchema":{"type":"object","required":["law"],"properties":{"law":{"type":"string"},"limit":{"type":"integer","default":20}},"additionalProperties":false},"logicalName":"find_cases_by_law","displayName":"find_cases_by_law","title":"find_cases_by_law","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search_statutes","description":"Search the CCLW legislation layer — climate laws & policies (Climate Change Laws of the World, by the Sabin Center's partner Climate Policy Radar). Title-weighted full-text over each law's title + verbatim text. Returns cclw_id, short_title, jurisdiction, status, enacted_date, a highlighted match_snippet, and the total count. Filter by jurisdiction (ISO alpha-2). Pair with get_statute for the full law text, and find_cases_by_law to see the litigation that turns on a law.","inputSchema":{"type":"object","required":["query"],"properties":{"limit":{"type":"integer","default":20},"query":{"type":"string"},"jurisdiction":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"additionalProperties":false},"logicalName":"search_statutes","displayName":"search_statutes","title":"search_statutes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_statute","description":"Return one CCLW law/policy by cclw_id (or UUID): jurisdiction, status, enacted_date, and a paginated window of its verbatim text (offset + max_chars, max 20000). Quote from this text and verify with check_claim_support(source_kind='document_text' is for cases; for statute text quote verbatim from the returned window).","inputSchema":{"type":"object","required":["cclw_id_or_id"],"properties":{"offset":{"type":"integer","default":0},"max_chars":{"type":"integer","default":8000},"cclw_id_or_id":{"type":"string"}},"additionalProperties":false},"logicalName":"get_statute","displayName":"get_statute","title":"get_statute","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search_cases","description":"The primary way to find a climate case when you don't have its id. Hybrid search over case titles and summaries: full-text + typo-tolerant fuzzy title matching + semantic (embedding) similarity. Find by topic, party, or keyword — e.g. 'Urgenda Netherlands', 'youth plaintiffs Montana', 'fossil fuel subsidies Brazil'. Each result includes sabin_id, title, jurisdiction, status, filing_date, decision_date, a highlighted match_snippet, a summary excerpt, relevance scores, and a verbatim citation_stri","inputSchema":{"type":"object","required":["query"],"properties":{"sort":{"type":"string","default":"relevance"},"limit":{"type":"integer","default":20},"query":{"type":"string"},"offset":{"type":"integer","default":0},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"claim_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"filed_after":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"filed_before":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"jurisdiction":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"decided_after":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"decided_before":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"additionalProperties":false},"logicalName":"search_cases","displayName":"search_cases","title":"search_cases","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search","description":"Search the climate-litigation corpus; returns matches as id / title / url. This is the tool ChatGPT's connector calls — pass a returned id to `fetch` to read the case. (Native clients should prefer search_cases for richer results.)","inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string"}},"additionalProperties":false},"logicalName":"search","displayName":"search","title":"search","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"fetch","description":"Fetch one case's record (summary + metadata) by an id returned from `search`. This is the tool ChatGPT's connector calls. (Native clients should prefer get_case.)","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"logicalName":"fetch","displayName":"fetch","title":"fetch","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=OpenClimateLaw-research-preview&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3Aub3BlbmNsaW1hdGVsYXcub3JnL21jcCJ9"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22OpenClimateLaw-research-preview%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.openclimatelaw.org%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22OpenClimateLaw-research-preview%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.openclimatelaw.org%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=OpenClimateLaw+%E2%80%94+research+preview&connectorUrl=https%3A%2F%2Fmcp.openclimatelaw.org%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"OpenClimateLaw-research-preview\" --url \"https://mcp.openclimatelaw.org/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/openclimatelaw-mcp-d7deed400f","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/openclimatelaw-mcp-d7deed400f/tools/{tool}","mcpServerUrl":"https://mcp.openclimatelaw.org/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/openclimatelaw-mcp-d7deed400f?live=1"}