Koskamo

CourtListener MCP

A Model Context Protocol server providing AI assistants with read-only access to the CourtListener legal database, including US federal and state court opinions, dockets, RECAP filings, PACER data, oral arguments, judges, and the Electronic Code of Federal Regulations (eCFR).

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

CourtListener MCP logo, by Vaquill-AICommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by Vaquill-AI
You need:bring-your-own-key authfree CourtListener token from courtlistener.com/help/api/rest/
MCP endpoint (Streamable HTTP)
https://courtlistener-mcp.vaquill.ai/mcp/
Vendor documentation

What its tools do

34 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Not annotated (1)

34 of 34 have a description · 33 of 34 declare behavior hints · 31 of 31 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search US federal and state court opinions
  • Retrieve legal dockets and RECAP filings
  • Access oral arguments and judge information
  • Query the Electronic Code of Federal Regulations

Source and maintenance

Community listingRegistry 0.1.0
Maintenance checked

Protocol and capabilities

Server
CourtListener MCP Server 3.4.3
MCP protocol negotiated in check
2025-11-25
Tools
34 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "subscribe": false,
    "listChanged": true
  },
  "extensions": {
    "io.modelcontextprotocol/ui": {}
  },
  "experimental": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Model Context Protocol server providing LLMs with access to the CourtListener legal database. This server enables searching for legal opinions, cases, audio recordings, dockets, and people in the legal system. It also provides citation lookup, parsing, and validation tools using both the CourtListener API and citeurl library. Available tools include: search operations for opinions/cases/audio/dockets/people, get operations for specific records by ID, and comprehensive citation tools for parsing, validating, and looking up legal citations.

Tools

34 advertised

status
Advertised by the server during the last successful anonymous check.

Check the status of the CourtListener MCP server. Returns: A dictionary containing server status, system metrics, and service information.

status input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
status output schema
{
  "type": "object",
  "additionalProperties": true
}
search_opinions
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Search case law opinion clusters with nested Opinion documents in CourtListener.

search_opinions input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "Search query for full text of opinions"
    },
    "court": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Court ID filter (e.g., 'scotus', 'ca9')"
    },
    "judge": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by judge name"
    },
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1,
      "description": "Max results from this page (upper bound; CL pages ~20)"
    },
    "cursor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Pagination cursor from a prior response's next_cursor"
    },
    "cited_gt": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": 0
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Minimum number of times opinion has been cited"
    },
    "cited_lt": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": 0
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Maximum number of times opinion has been cited"
    },
    "order_by": {
      "type": "string",
      "default": "score desc",
      "description": "Sort by 'score desc', 'dateFiled desc', or 'dateFiled asc'"
    },
    "case_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by case name"
    },
    "filed_after": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Only show opinions filed after this date (YYYY-MM-DD)"
    },
    "filed_before": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Only show opinions filed before this date (YYYY-MM-DD)"
    }
  },
  "additionalProperties": false
}
search_opinions output schema
{
  "type": "object",
  "additionalProperties": true
}
search_opinions annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
search_dockets
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Search federal cases (dockets) from PACER in CourtListener.

search_dockets input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "Search query for docket text"
    },
    "court": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Court ID filter (e.g., 'scotus', 'ca9')"
    },
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1,
      "description": "Max results from this page (upper bound; CL pages ~20)"
    },
    "cursor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Pagination cursor from a prior response's next_cursor"
    },
    "order_by": {
      "type": "string",
      "default": "score desc",
      "description": "Sort by 'score desc', 'dateFiled desc', or 'dateFiled asc'"
    },
    "case_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by case name"
    },
    "party_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by party name"
    },
    "docket_number": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Specific docket number to search for"
    },
    "date_filed_after": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter dockets filed after this date (YYYY-MM-DD)"
    },
    "date_filed_before": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter dockets filed before this date (YYYY-MM-DD)"
    }
  },
  "additionalProperties": false
}
search_dockets output schema
{
  "type": "object",
  "additionalProperties": true
}
search_dockets annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
search_dockets_with_documents
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Search federal cases (dockets) with up to three nested documents. If there are more than three matching documents, the more_docs field will be true.

search_dockets_with_documents input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "Search query for federal cases"
    },
    "court": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Court ID filter (e.g., 'scotus', 'ca9')"
    },
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1,
      "description": "Max results from this page (upper bound; CL pages ~20)"
    },
    "cursor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Pagination cursor from a prior response's next_cursor"
    },
    "order_by": {
      "type": "string",
      "default": "score desc",
      "description": "Sort by 'score desc', 'dateFiled desc', or 'dateFiled asc'"
    },
    "case_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by case name"
    },
    "party_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by party name"
    },
    "docket_number": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Specific docket number to search for"
    },
    "date_filed_after": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter dockets filed after this date (YYYY-MM-DD)"
    },
    "date_filed_before": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter dockets filed before this date (YYYY-MM-DD)"
    }
  },
  "additionalProperties": false
}
search_dockets_with_documents output schema
{
  "type": "object",
  "additionalProperties": true
}
search_dockets_with_documents annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
search_recap_documents
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Search federal filing documents from PACER in the RECAP archive.

search_recap_documents input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "Search query for RECAP filing documents"
    },
    "court": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Court ID filter (e.g., 'scotus', 'ca9')"
    },
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1,
      "description": "Max results from this page (upper bound; CL pages ~20)"
    },
    "cursor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Pagination cursor from a prior response's next_cursor"
    },
    "order_by": {
      "type": "string",
      "default": "score desc",
      "description": "Sort by 'score desc', 'dateFiled desc', or 'dateFiled asc'"
    },
    "case_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by case name"
    },
    "party_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by party name"
    },
    "filed_after": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter documents filed after this date (YYYY-MM-DD)"
    },
    "filed_before": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter documents filed before this date (YYYY-MM-DD)"
    },
    "docket_number": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Specific docket number to search for"
    },
    "document_number": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Specific document number to search for"
    },
    "attachment_number": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Specific attachment number to search for"
    }
  },
  "additionalProperties": false
}
search_recap_documents output schema
{
  "type": "object",
  "additionalProperties": true
}
search_recap_documents annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
search_audio
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Search oral argument audio recordings in CourtListener.

search_audio input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "Search query for oral argument audio"
    },
    "court": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Court ID filter (e.g., 'scotus', 'ca9')"
    },
    "judge": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by judge name"
    },
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1,
      "description": "Max results from this page (upper bound; CL pages ~20)"
    },
    "cursor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Pagination cursor from a prior response's next_cursor"
    },
    "order_by": {
      "type": "string",
      "default": "score desc",
      "description": "Sort by 'score desc', 'dateArgued desc', or 'dateArgued asc'"
    },
    "case_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by case name"
    },
    "argued_after": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter arguments after this date (YYYY-MM-DD)"
    },
    "argued_before": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter arguments before this date (YYYY-MM-DD)"
    }
  },
  "additionalProperties": false
}
search_audio output schema
{
  "type": "object",
  "additionalProperties": true
}
search_audio annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
search_people
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Search judges and legal professionals in the CourtListener database.

search_people input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "Search query for judges and legal professionals"
    },
    "name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by person's name"
    },
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1,
      "description": "Max results from this page (upper bound; CL pages ~20)"
    },
    "cursor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Pagination cursor from a prior response's next_cursor"
    },
    "school": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by school attended"
    },
    "order_by": {
      "type": "string",
      "default": "score desc",
      "description": "Sort by 'score desc' or 'name asc'"
    },
    "appointed_by": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by appointing authority"
    },
    "position_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by position type (e.g., 'jud' for judge)"
    },
    "selection_method": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by selection method"
    },
    "political_affiliation": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Filter by political affiliation"
    }
  },
  "additionalProperties": false
}
search_people output schema
{
  "type": "object",
  "additionalProperties": true
}
search_people annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
get_opinion
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get a specific court opinion by ID from CourtListener.

get_opinion input schema
{
  "type": "object",
  "required": [
    "opinion_id"
  ],
  "properties": {
    "opinion_id": {
      "type": "string",
      "description": "The opinion ID to retrieve"
    }
  },
  "additionalProperties": false
}
get_opinion output schema
{
  "type": "object",
  "additionalProperties": true
}
get_opinion annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
get_docket
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get a specific court docket by ID from CourtListener.

get_docket input schema
{
  "type": "object",
  "required": [
    "docket_id"
  ],
  "properties": {
    "docket_id": {
      "type": "string",
      "description": "The docket ID to retrieve"
    }
  },
  "additionalProperties": false
}
get_docket output schema
{
  "type": "object",
  "additionalProperties": true
}
get_docket annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
get_audio
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get oral argument audio information by ID from CourtListener.

get_audio input schema
{
  "type": "object",
  "required": [
    "audio_id"
  ],
  "properties": {
    "audio_id": {
      "type": "string",
      "description": "The audio recording ID to retrieve"
    }
  },
  "additionalProperties": false
}
get_audio output schema
{
  "type": "object",
  "additionalProperties": true
}
get_audio annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
get_cluster
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get an opinion cluster by ID from CourtListener.

get_cluster input schema
{
  "type": "object",
  "required": [
    "cluster_id"
  ],
  "properties": {
    "cluster_id": {
      "type": "string",
      "description": "The opinion cluster ID to retrieve"
    }
  },
  "additionalProperties": false
}
get_cluster output schema
{
  "type": "object",
  "additionalProperties": true
}
get_cluster annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
get_person
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get judge or legal professional information by ID from CourtListener.

get_person input schema
{
  "type": "object",
  "required": [
    "person_id"
  ],
  "properties": {
    "person_id": {
      "type": "string",
      "description": "The person (judge) ID to retrieve"
    }
  },
  "additionalProperties": false
}
get_person output schema
{
  "type": "object",
  "additionalProperties": true
}
get_person annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
get_court
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get court information by ID from CourtListener.

get_court input schema
{
  "type": "object",
  "required": [
    "court_id"
  ],
  "properties": {
    "court_id": {
      "type": "string",
      "description": "The court ID to retrieve (e.g., 'scotus', 'ca9')"
    }
  },
  "additionalProperties": false
}
get_court output schema
{
  "type": "object",
  "additionalProperties": true
}
get_court annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
citation_lookup_citation
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Look up a legal citation to find the opinion it references in CourtListener. This tool accepts various citation formats including: - U.S. Reporter citations (e.g., "410 U.S. 113") - Federal Reporter citations (e.g., "123 F.3d 456") - WestLaw citations (e.g., "2023 WL 12345") - State reporter citations

citation_lookup_citation input schema
{
  "type": "object",
  "required": [
    "citation"
  ],
  "properties": {
    "citation": {
      "type": "string",
      "description": "The citation to look up (e.g., '410 U.S. 113', '2023 WL 12345')"
    }
  },
  "additionalProperties": false
}
citation_lookup_citation output schema
{
  "type": "object",
  "additionalProperties": true
}
citation_lookup_citation annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
citation_batch_lookup_citations
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Look up multiple legal citations in a single request. This is more efficient than making individual requests for each citation. Accepts up to 100 citations at once.

citation_batch_lookup_citations input schema
{
  "type": "object",
  "required": [
    "citations"
  ],
  "properties": {
    "citations": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 100,
      "minItems": 1,
      "description": "List of citations to look up (max 100)"
    }
  },
  "additionalProperties": false
}
citation_batch_lookup_citations output schema
{
  "type": "object",
  "additionalProperties": true
}
citation_batch_lookup_citations annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
citation_verify_citation_format
Advertised by the server during the last successful anonymous check.
Advertised read-only

Verify if a citation string is in a valid format using citeurl's advanced parsing. This tool performs validation using citeurl's comprehensive citation templates to check if a citation appears to be in a recognized legal citation format. This is much more accurate than simple regex matching. Returns information about the citation format and any detected issues.

citation_verify_citation_format input schema
{
  "type": "object",
  "required": [
    "citation"
  ],
  "properties": {
    "citation": {
      "type": "string",
      "description": "The citation to verify"
    }
  },
  "additionalProperties": false
}
citation_verify_citation_format output schema
{
  "type": "object",
  "additionalProperties": true
}
citation_verify_citation_format annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
citation_parse_citation_with_citeurl
Advertised by the server during the last successful anonymous check.
Advertised read-only

Parse a legal citation using citeurl's advanced citation recognition. This tool uses the citeurl library to parse legal citations and extract structured information including tokens, normalized format, and URL generation. Returns detailed information about the citation including: - Recognized citation format and source - Extracted tokens (volume, reporter, page, etc.) - Generated URL if available - Normalized citation text

citation_parse_citation_with_citeurl input schema
{
  "type": "object",
  "required": [
    "citation"
  ],
  "properties": {
    "broad": {
      "type": "boolean",
      "default": true,
      "description": "Use broad matching for more flexible parsing"
    },
    "citation": {
      "type": "string",
      "description": "The citation to parse (e.g., '410 U.S. 113', '42 USC § 1988')"
    }
  },
  "additionalProperties": false
}
citation_parse_citation_with_citeurl output schema
{
  "type": "object",
  "additionalProperties": true
}
citation_parse_citation_with_citeurl annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
citation_extract_citations_from_text
Advertised by the server during the last successful anonymous check.
Advertised read-only

Extract all legal citations from a block of text using citeurl. This tool finds and parses all legal citations within a given text, including both long-form and short-form citations (like 'id.' references).

citation_extract_citations_from_text input schema
{
  "type": "object",
  "required": [
    "text"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "Text containing legal citations to extract"
    }
  },
  "additionalProperties": false
}
citation_extract_citations_from_text output schema
{
  "type": "object",
  "additionalProperties": true
}
citation_extract_citations_from_text annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
citation_enhanced_citation_lookup
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Enhanced citation lookup combining citeurl parsing with CourtListener data. This tool first uses citeurl to parse and validate the citation format, then optionally queries the CourtListener API for additional case information.

citation_enhanced_citation_lookup input schema
{
  "type": "object",
  "required": [
    "citation"
  ],
  "properties": {
    "citation": {
      "type": "string",
      "description": "The citation to look up and analyze"
    },
    "include_courtlistener": {
      "type": "boolean",
      "default": true,
      "description": "Whether to also perform CourtListener API lookup"
    }
  },
  "additionalProperties": false
}
citation_enhanced_citation_lookup output schema
{
  "type": "object",
  "additionalProperties": true
}
citation_enhanced_citation_lookup annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_list_titles
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List all 50 CFR titles with their latest amended/issue dates and status.

ecfr_list_titles input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
ecfr_list_titles output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_list_titles annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_get_title_versions
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List the available content versions (issue dates) for one CFR title.

ecfr_get_title_versions input schema
{
  "type": "object",
  "required": [
    "title"
  ],
  "properties": {
    "title": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "CFR title number (1-50)"
    }
  },
  "additionalProperties": false
}
ecfr_get_title_versions output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_get_title_versions annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_get_title_structure
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get the full hierarchical structure (title -> section) of a CFR title on a date.

ecfr_get_title_structure input schema
{
  "type": "object",
  "required": [
    "title",
    "date"
  ],
  "properties": {
    "date": {
      "type": "string",
      "description": "Snapshot date (YYYY-MM-DD)"
    },
    "title": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "CFR title number (1-50)"
    }
  },
  "additionalProperties": false
}
ecfr_get_title_structure output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_get_title_structure annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_get_ancestry
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get the ancestry chain (title -> ... -> node) for a CFR node on a date.

ecfr_get_ancestry input schema
{
  "type": "object",
  "required": [
    "title",
    "date"
  ],
  "properties": {
    "date": {
      "type": "string",
      "description": "Snapshot date (YYYY-MM-DD)"
    },
    "part": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Restrict to a part, e.g. '75'"
    },
    "title": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "CFR title number (1-50)"
    },
    "section": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Restrict to a section, e.g. '75.1'"
    }
  },
  "additionalProperties": false
}
ecfr_get_ancestry output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_get_ancestry annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_get_source_xml
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fetch the source regulation TEXT (XML) for a CFR node on a snapshot date. Pass a part or section to scope the request. Fetching an entire large title at once can time out on the eCFR side, so narrowing is strongly recommended. Returns the raw XML under ``content_xml``.

ecfr_get_source_xml input schema
{
  "type": "object",
  "required": [
    "title",
    "date"
  ],
  "properties": {
    "date": {
      "type": "string",
      "description": "Snapshot date (YYYY-MM-DD)"
    },
    "part": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Part to fetch, e.g. '75'. STRONGLY recommended: whole-title fetches can time out."
    },
    "title": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "CFR title number (1-50)"
    },
    "chapter": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Chapter, e.g. 'I'"
    },
    "section": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Section, e.g. '75.1'"
    },
    "subpart": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Subpart, e.g. 'C'"
    },
    "appendix": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Appendix identifier"
    },
    "subtitle": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Subtitle, e.g. 'A'"
    },
    "subchapter": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Subchapter, e.g. 'B'"
    }
  },
  "additionalProperties": false
}
ecfr_get_source_xml output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_get_source_xml annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_list_agencies
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List all agencies that appear in the CFR, with their title/chapter references.

ecfr_list_agencies input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
ecfr_list_agencies output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_list_agencies annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_list_all_corrections
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List CFR corrections, optionally filtered by title and/or effective date.

ecfr_list_all_corrections input schema
{
  "type": "object",
  "properties": {
    "date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Corrections in effect on this date (YYYY-MM-DD)"
    },
    "title": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 50,
          "minimum": 1
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Restrict to a CFR title number"
    }
  },
  "additionalProperties": false
}
ecfr_list_all_corrections output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_list_all_corrections annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_list_corrections_by_title
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List all corrections for a single CFR title.

ecfr_list_corrections_by_title input schema
{
  "type": "object",
  "required": [
    "title"
  ],
  "properties": {
    "title": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "CFR title number (1-50)"
    }
  },
  "additionalProperties": false
}
ecfr_list_corrections_by_title output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_list_corrections_by_title annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_search_regulations
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Full-text search over federal regulations, returning matching sections with hierarchy.

ecfr_search_regulations input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Search the CFR as of this date (YYYY-MM-DD)"
    },
    "page": {
      "type": "integer",
      "default": 1,
      "minimum": 1,
      "description": "Page number"
    },
    "order": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Sort order: 'relevance', 'hierarchy', 'newest_first', 'oldest_first'"
    },
    "query": {
      "type": "string",
      "description": "Full-text search query over the CFR"
    },
    "title": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 50,
          "minimum": 1
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Restrict to a CFR title number"
    },
    "per_page": {
      "type": "integer",
      "default": 20,
      "maximum": 20,
      "minimum": 1,
      "description": "Results per page (max 20)"
    },
    "agency_slugs": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Restrict to one or more agency slugs (from list_agencies)"
    }
  },
  "additionalProperties": false
}
ecfr_search_regulations output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_search_regulations annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_get_search_count
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get the total number of CFR sections matching a search query.

ecfr_get_search_count input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "As-of date (YYYY-MM-DD)"
    },
    "query": {
      "type": "string",
      "description": "Full-text search query over the CFR"
    },
    "title": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 50,
          "minimum": 1
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Restrict to a title"
    },
    "agency_slugs": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Restrict to agency slugs"
    }
  },
  "additionalProperties": false
}
ecfr_get_search_count output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_get_search_count annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_get_search_summary
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get summary details (counts + metadata) for a CFR search query.

ecfr_get_search_summary input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "As-of date (YYYY-MM-DD)"
    },
    "query": {
      "type": "string",
      "description": "Full-text search query over the CFR"
    },
    "title": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 50,
          "minimum": 1
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Restrict to a title"
    },
    "agency_slugs": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Restrict to agency slugs"
    }
  },
  "additionalProperties": false
}
ecfr_get_search_summary output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_get_search_summary annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_get_title_search_counts
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get search result counts broken down by CFR title.

ecfr_get_title_search_counts input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "As-of date (YYYY-MM-DD)"
    },
    "query": {
      "type": "string",
      "description": "Full-text search query over the CFR"
    }
  },
  "additionalProperties": false
}
ecfr_get_title_search_counts output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_get_title_search_counts annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_get_daily_search_counts
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get search result counts broken down by date (daily histogram).

ecfr_get_daily_search_counts input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "As-of date (YYYY-MM-DD)"
    },
    "query": {
      "type": "string",
      "description": "Full-text search query over the CFR"
    }
  },
  "additionalProperties": false
}
ecfr_get_daily_search_counts output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_get_daily_search_counts annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_get_hierarchy_search_counts
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get search result counts distributed across the CFR hierarchy.

ecfr_get_hierarchy_search_counts input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "As-of date (YYYY-MM-DD)"
    },
    "query": {
      "type": "string",
      "description": "Full-text search query over the CFR"
    }
  },
  "additionalProperties": false
}
ecfr_get_hierarchy_search_counts output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_get_hierarchy_search_counts annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ecfr_get_search_suggestions
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get search-term suggestions for a partial CFR query.

ecfr_get_search_suggestions input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "Partial query to get suggestions for"
    }
  },
  "additionalProperties": false
}
ecfr_get_search_suggestions output schema
{
  "type": "object",
  "additionalProperties": true
}
ecfr_get_search_suggestions annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1807 ms
95th percentile latency
1807 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1807 ms · metadata changed · 34 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http courtlistener-mcp-vaquill https://courtlistener-mcp.vaquill.ai/mcp/

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add courtlistener-mcp-vaquill --url https://courtlistener-mcp.vaquill.ai/mcp/

Cursor

Merge this server into .cursor/mcp.json in your project, then enable courtlistener-mcp-vaquill in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "courtlistener-mcp-vaquill": {
      "url": "https://courtlistener-mcp.vaquill.ai/mcp/"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "courtlistener-mcp-vaquill": {
      "type": "streamableHttp",
      "url": "https://courtlistener-mcp.vaquill.ai/mcp/",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start courtlistener-mcp-vaquill and inspect its tools.
VS Code configuration
{
  "servers": {
    "courtlistener-mcp-vaquill": {
      "type": "http",
      "url": "https://courtlistener-mcp.vaquill.ai/mcp/"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http courtlistener-mcp-vaquill https://courtlistener-mcp.vaquill.ai/mcp/

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://courtlistener-mcp.vaquill.ai/mcp/

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "courtlistener-mcp-vaquill": {
      "serverUrl": "https://courtlistener-mcp.vaquill.ai/mcp/"
    }
  }
}

Let your agent find its tools

Find servers like CourtListener MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.