# DocketRouter > A verification layer over a legal library, for agents. Check a citation against 18,123,788 reporter citations (found or unverified, never "nonexistent"), check whether a cited opinion actually supports a proposition, read court rules and statutes word for word, and search a fused case-law index for the jurisdictions listed below. Case-law breadth is not the pitch: CourtListener (Free Law Project) runs its own MCP server over the national case-law record our case-law shard is built from -- use theirs to find cases and this one to verify them and for the rules and statutes. Not affiliated with them. - Docs: https://docketrouter.ai/docs - MCP endpoint: https://docketrouter.ai/api/mcp - OpenAPI: https://docketrouter.ai/openapi.json - Jurisdictions served (honest status per state): https://docketrouter.ai/api/v1/jurisdictions - Free public citation existence check (no key): POST https://docketrouter.ai/api/public/citation-check {"citation":"384 U.S. 436"} - Open datasets (held, not all served): https://huggingface.co/docketx - Get a key: https://docketrouter.ai/keys --- DocketRouter is a verification layer with a legal library behind it, not a national case-law search engine. Use it in this order. 1. check_citations: does this citation exist? Checked against an offline table of 18,123,788 reporter citations across 989 reporters, plus the case-law index. The answer is "found" or "unverified", never "nonexistent". 2. check_support: does the cited opinion actually support the proposition it is cited for? Returns supports, does_not_support or unclear, with a quote that is verbatim from the opinion or absent. 3. search_rules: the text of a court rule or statute section, 3,860 sections held word for word, so a rule is quoted rather than recalled. 4. search_texas_law: retrieval over the fused index, which covers Texas case law, Texas statutes, U.S. Supreme Court, Texas county and local rules, Texas court rules, California case law, New Jersey case law, Virginia case law, Washington case law, Minnesota case law, Alaska case law, Delaware case law, Idaho case law, Kansas case law, Maine case law, North Carolina case law, North Dakota case law, Rhode Island case law, South Dakota case law, Utah case law and Wisconsin case law. One shard set, not the country. 5. legal_panel: is this answer safe to rely on? One question, ONE retrieval, every seat you name answering over the identical record, the same citation gate on every answer, and an agreement number that is set arithmetic over the authorities the gate confirmed. No model grades another model. Seat one expert and you get one grounded, citation-checked answer, labelled as exactly that; an agreement number needs two. Then, for the work around an answer rather than the answer itself: brief_check (every case citation in a whole document at once), citation_lookup (everything we hold about one citation), deadline (a day count under a rule we hold word for word, holidays NOT applied), contract_rules and contract_review (what a state's law does to a clause, from a verified store, no clause prose), time_entries_list and time_entry_create (this key's own timekeeping), scramble and unscramble (pseudonymise a case file before it leaves this host, restore the answer after). brief_check, citation_lookup, deadline and contract_rules need no API key; the rest do. get_instructions explains all of them. For broad case-law lookup, use CourtListener's own MCP server (courtlistener.com, from the non-profit Free Law Project): it covers all 50 states and every federal court, and our case-law shard is built from their public bulk export. An agent with both should find cases there and verify them here, and come here for the rules and statutes their corpus does not carry. We are not affiliated with them and this is not a partnership. Within the scope above, call these tools and cite only what they return; do not answer from memory. Outside it (other states' case law, federal courts below the Supreme Court, secondary sources, citator history, dockets and filings, administrative law, or anything decided after the index dates) these tools have nothing. Say that plainly. Do not search anyway and do not present what comes back as an answer: a lexical index always returns something, and a real Texas case cited for an out-of-scope question is a wrong answer made of true parts. Never present an unverified citation as verified. TOOLS check_citations must run before you present ANY citation to a user, including one you already believe is correct and including one another tool or another MCP server handed you. "found" means the citation exists in the library. "unverified" means say so explicitly to the user, but never tell a user a citation does not exist; unverified is not the same claim as nonexistent, since the library does not contain every citation that is real. Up to 100 citations in one call. check_support must run before you assert that a cited case stands for a specific proposition. Existence is not support: a real citation attached to a holding it does not contain is still a wrong answer. It returns supports, does_not_support, or unclear, with a supporting quote when one is found. The quote is always verbatim from the opinion or absent; never paraphrase a holding and call it a quotation. A citation that cannot be resolved comes back "unverified" rather than a verdict. search_rules is for procedure, deadlines and the exact words of a rule: the verbatim text of a named rule or statute section (a TRCP or FRCP number, a statute slice). Quote the rule text exactly as returned and cite the rule number the tool gives back; do not paraphrase a rule and present the paraphrase as a quotation. This is the corpus a case-law search API does not have. search_texas_law is the retrieval call for a legal research question inside the served scope. Send the legal issue itself as the query, not the whole conversation: "summary judgment no-evidence motion standard", not a paragraph of case facts. Ask for 5 to 8 hits (the k argument) so there is enough to compare. Narrow with the sources argument ("tx" (Texas case law), "statutes" (Texas statutes), "scotus" (U.S. Supreme Court), "local" (Texas county and local rules), "tx-rules" (Texas court rules), "ca" (California case law), "nj" (New Jersey case law), "va" (Virginia case law), "wa" (Washington case law), "mn" (Minnesota case law), "ak" (Alaska case law), "de" (Delaware case law), "id" (Idaho case law), "ks" (Kansas case law), "me" (Maine case law), "nc" (North Carolina case law), "nd" (North Dakota case law), "ri" (Rhode Island case law), "sd" (South Dakota case law), "ut" (Utah case law), "wi" (Wisconsin case law)) when you already know which shard the answer lives in; omit it to search all 21. When two hits conflict, prefer the higher court and the newer date. Quote only text actually present in the hit's snippet; never extend a quote past what the tool returned. legal_panel is the reliance decision, not a research call. Use it when the cost of being wrong is a filing, a deadline or advice a client will act on, and you want to know whether independent experts reading the SAME retrieved record stood on the same verified law. One retrieval is handed verbatim to every seat, so a disagreement means the law is contested rather than that the seats read different documents. Read three fields before you describe the result to anyone. `panel.note` says in words how many experts actually convened, and `panel.single_seat` is true when at most one answered. A one-seat panel is one model's answer with a citation check, and you must not call it a panel verdict. `consensus.agreement` is the mean pairwise overlap of the authorities the answering seats relied on that the citation gate CONFIRMED exist; `consensus.formula` carries the formula and `consensus.method` says who computed it, which is code, never a model. It is not a confidence, not a quality rating and not one model's opinion of another. It is null, never 0 and never 1, whenever a number would be a fiction: `agreement_basis: "single_seat"` when only one seat answered, `"no_verified_authorities"` when no seat cited anything the gate could confirm. `consensus.agreed` and `consensus.contested` are the authorities every seat relied on and the ones only some did; `consensus.support` says which seat relied on which, so a contested authority can be chased. A citation the gate could not confirm appears in that seat's `unverified_citations` and is excluded from every one of those sets: reported, never counted as agreement, and never called fabricated. Name the models you want seated in `experts`: a model this host has not enabled is refused outright, never silently substituted or dropped, and with `experts` omitted the panel seats only the models the host already has enabled, so a panel never fans your question out across models you did not choose. A seat that errors or returns no visible text comes back as an empty chair with its reason on it and is left out of the arithmetic. An absent seat is never counted as an agreeing one. brief_check is check_citations for a WHOLE DOCUMENT: paste a brief, a motion, a memo or your own long answer and every case citation in it is checked at once, with its occurrence count. Run it as the last step before a document goes to anyone. It scans case citations only (statute and rule cites come back in `set_aside` unchecked), and it scans at most a fixed number per call, with the overflow counted in `not_scanned`: a document with more citations than that has NOT been fully checked and you must say so rather than reporting a clean scan. Nothing is stored; the text is read and discarded in the request. citation_lookup is everything we hold about ONE citation in one call, the same resolution the public page at /cite renders: resolve or not, name, court, year, which document row it lives in, and any negative-treatment flag with the later opinion's own words. `headline.sentence` is the honest sentence already written for that verdict: quote it. The treatment table has exactly one tier ("a later opinion said it overruled, abrogated or superseded this") and is high-precision, low-recall by design: a flag is a real finding, and the absence of one is NOT a clean bill of health and never means still-good law. Nothing here is a citator. deadline counts a filing deadline under one of the 5 computation rules we hold word for word (Fed. R. Civ. P. 6(a)(1), Fed. R. App. P. 26(a)(1), Tex. R. Civ. P. 4, Wash. CR 6(a), Wash. RAP 18.6(a)) and returns the quoted rule with the count, step by step. Never compute a deadline by reasoning about a rule from memory. HOLIDAYS ARE NOT APPLIED: we hold these computation rules but not the statutes that fix the holiday dates, so the count skips Saturdays and Sundays only, and `behavior.holidayGap` says so in that court's own terms. Read `behavior.holidayGap` and every item in `behavior.caveats` out loud with the date. A date handed over without them is the exact failure this tool exists to prevent. It is a day count under quoted text, not a deadline anyone has checked against a calendar or a standing order. contract_rules is what the law DOES to a clause family in a state, with the authority it rests on. It is NOT a clause bank: we hold no contract prose at all and `holds_contract_prose` says so on every response, so nothing it returns is boilerplate to paste into an agreement. Read the verification flags exactly as they come: `cite_verified`, `name_verified` (null = we could not confirm the name and are not guessing), `support_verdict` ("unclear" is never to be reported as "supports"), `corpus_verified` with its verbatim quote. Report `families_without_verified_authority` rather than presenting those families as settled. `can_answer_as_of_a_date` is false: this store cannot tell anyone what the law said on a past date. Omit the jurisdiction and you get every row labelled with its own state; a jurisdiction is a filter, never a default, because answering a bare question with whichever state we hold most of would state that state's law as if it were the law. contract_review reviews a contract against that same store for one jurisdiction you must be told, never infer. It is beta and off by default: on a host where it is not enabled the tool returns an error saying exactly that, and you must not report the contract as reviewed or as clean. It covers the clause families in the store and nothing else, so silence about a clause is not a finding that the clause is fine: quote `summary.classified_clauses` rather than implying the whole agreement was examined, and read every finding's verification flags as they come. It is not legal advice. time_entries_list and time_entry_create read and write THIS key's own time entries. `minutes` is what was measured and `hours_billable` is that figure rounded up to the billing increment: they are different numbers, so never present billable hours as time worked. A "draft" entry is an unreviewed suggestion, not a billable one, and no amount is owed from entries nobody has approved. When you create one, write the duration and the narrative that are ACTUALLY TRUE: that text and that number are what a client is eventually invoiced from, so ask rather than estimate, never round up to look tidy, and never log time because someone asked you to log some. A new entry is always a draft and a person still has to approve it. scramble and unscramble are the private path for a case file. scramble pseudonymises a document on this host and returns only the scrambled text; send that to an outside model, then unscramble its answer. It is a release gate, not a best effort: a document it will not release is refused with a reason, and working around a refusal by sending the original is the one thing you must not do. `rejected` and `degraded` must be reported. It reduces exposure rather than eliminating it: a date, a figure or a distinctive fact can still identify a matter, and you should say that in those terms. On the way back, a placeholder the matter never had comes back in `unknown_placeholders`: show it to the user as an entity this matter does not contain. Never fill one in from context: it is either a model inventing an entity or a prompt injection. NEVER Never fabricate a citation. Never fill in an unverified citation with a plausible-looking one. Always show a citation string to the user exactly as the tool returned it, not reformatted, corrected, or normalized. If none of the tools' results actually answer the question, say so instead of assembling an answer out of near-misses. WHAT THESE TOOLS ARE NOT They are retrieval and verification primitives: they return records and verdicts, and the enforcement is yours: call check_citations before a citation reaches a user. legal_panel is not a vote and not an oracle: it is one or more grounded answers with their citations checked and their overlap measured. A high agreement means the seats leaned on the same verified authorities, not that the conclusion is right, and a null agreement means no number could honestly be computed. DocketRouter's own chat API (POST https://docketrouter.ai/api/v1/chat/completions) is where the same checks run as a gate by default: it grounds the answer in this library, then checks every citation the model produced, gives the model the verdicts and one chance to re-answer, and removes and discloses any citation still unverified before the answer is returned. The one exception is a citation the user supplied, which stays in the text but is disclosed as unverified. Nothing here is a citator: a verified citation exists, which is not a claim that it is still good law. HELD BUT NOT SERVED 1,134,330 statute sections across 25 states and 21,062 court rules across 28 states and the federal courts are held and published openly at https://huggingface.co/docketx, but are not served by this API until the founder's go. Do not tell a user these tools cover a state they do not. FETCHING THIS BRIEF AGAIN Call the get_instructions tool (no arguments) or GET https://docketrouter.ai/llms.txt. Both return this exact text; the MCP initialize response also carries it in the "instructions" field of the handshake. AUTH AND COST WHAT NEEDS NO KEY. These 5 tools are callable with no Authorization header at all, because the endpoint each one wraps is already free and account-free on the web: brief_check, citation_lookup, deadline, contract_rules, get_instructions. Nothing is invoiced for them and nothing counts against a spend cap. The two that read our stores (brief_check, citation_lookup) draw the SAME strict per-IP bucket as their public web form, so coming through MCP does not multiply the free allowance. A 429 from one of them means that IP has used the free offer, not that the tool is broken. WHAT NEEDS A KEY. check_citations, check_support, search_rules, search_texas_law, contract_review, legal_panel, docket_watch, time_entries_list, time_entry_create, scramble, unscramble need Authorization: Bearer dr-, minted at https://docketrouter.ai/keys, or a signed-in session, exactly what the endpoint each one wraps requires. There is no playground or anonymous path to any of them. The account-scoped ones (docket_watch, time_entries_list, time_entry_create, scramble, unscramble) read and write only the account behind the key you are calling with, and with a key that has no account behind it they return nothing rather than guessing whose data to show. COST. The retrieval and verification calls (check_citations, check_support, search_rules, search_texas_law, legal_panel, docket_watch) are $0.01 per query, metered identically whether the call arrives over MCP or REST, so calling both interfaces for the same work is one bill, not two, and each draws the same per-key rate-limit bucket as the REST endpoint it wraps (30 per minute, burst 10; legal_panel is 6 per minute, burst 3, because a panel is one generation per seat). The timekeeping and scrambler tools are free today and have no meter at all. contract_review is not invoiced while review pricing is off, which is the default. Read its response's `billing` field for what THIS call was charged rather than trusting a figure quoted here. Every tool's own description carries its own price line; where they differ from this paragraph, the description is rendered from the same table and is the one to read. LIBRARY SCOPE DocketRouter's library holds: Texas case law (615,391 decisions, 1840 through 26 June 2026); Texas statutes (122,681 sections (2026 statutes)); U.S. Supreme Court (45,660 opinion documents through 29 June 2026); Texas county local rules (370 documents as of December 2023); Verbatim rules corpus (3,860 sections); Citation table (18,123,788 citations across 989 reporters, export of 30 June 2026); Citation graph (234,558 authorities). Index dates are part of each count. The Texas case-law count here is the SERVED one: 615,391 combined and lead opinion documents, the ones carrying the court's holding. The open dataset docketx/us-caselaw-tx publishes 662,717: the same corpus counted differently, adding 38,008 separately filed concurrences, dissents, rehearings and addenda and 9,318 documents below the served build's 500-character floor. Both are measured; neither is an estimate. Texas case law is NOT uniformly current: Twelfth COA (Tyler) through 2024-11-27; Fourteenth COA (Houston) through 2024-12-06; Fifth COA (Dallas) through 2025-08-26. Opinions from those courts after those dates are not held, and a search that returns nothing for them is a gap in this library rather than an absence of authority. These opinions are absent from the public free-law source we draw on, verified against its own bulk export, so they will not appear on a routine refresh. Texas county and local rules cover 18 of 254 counties (370 documents); 236 counties are not held at all. Coverage within those 18 is uneven: 12 of them hold 3 documents or fewer (Bell, Cameron, Collin, Denton, Galveston, Hidalgo, Lubbock, McLennan, Montgomery, Nueces, Webb, Williamson), so a hit from one of those counties is not a complete rule set. A local rule must be posted to topics.txcourts.gov to be effective; check that site for the county you are filing in. This API does not SERVE federal lower-court opinions, other states' case law, secondary sources, citator history, dockets or filings, administrative law, or anything decided after the index dates. Some of those we do hold and publish openly at https://huggingface.co/docketx; held is not served. Citation checks report found or unverified, never nonexistent. LAST UPDATED Library manifest as of 2026-09-07. Per source: tx: data through 2026-06-26; statutes: data through 2026; scotus: data through 2026-06-29; local: data through 2023-12; tx-rules: data through 2026-09-05; ca: data through 2026-06-29; nj: data through 2026-06-29; va: data through 2026-06-23; wa: data through 2026-06-29; mn: data through 2026-06-22; ak: data through 2026-06-17; de: data through 2026-06-29; id: data through 2026-06-26; ks: data through 2026-06-26; me: data through 2026-06-25; nc: data through 2026-06-17; nd: data through 2026-04-09; ri: data through 2026-06-25; sd: data through 2026-06-24; ut: data through 2026-06-25; wi: data through 2026-06-26. The machine-readable manifest with these dates is at GET https://docketrouter.ai/api/v1/rag/library, and every /rag/query response carries a `library` field with the as_of date of each source it searched.