Documentation

MCP server

10 front-door tools, and behind them 30 capabilities over 12 data gardens, walked by 13 questions. A garden is the tuned data; a question is a way to walk it. Search is free, with no daily limit on your own key. One endpoint, no session to manage.

Endpoint

POST https://mcp.antecedint.com/api/v1/mcp

Each tool calls an endpoint on the REST API with your own key, so a tool call and a direct call cost the same credits and count once. When a result is wrong or a record is missing, tell your assistant: it files a report with submit_data_feedback, free, up to 100 a day. A person reviews each one, and an accepted report goes into the next build of that data garden and earns 10, 50 or 200 credits.

Sign in and your free key is issued on the spot. Then these examples fill in with it and run.

Sign in

Connect

Connecting is free. Hosts that sign in over OAuth need only the URL: you sign in to Antecedint, approve the connection, and the 10 front-door tools appear. No key is copied anywhere. Anything else takes the URL and a bearer header with your key.

Claude (claude.ai, Desktop, mobile)

  1. 1Open Settings, then Connectors, and choose Add custom connector.
  2. 2Paste the URL below and save.
  3. 3Sign in to Antecedint when asked and approve the connection. There is no key to copy.
Sign in over OAuth
https://mcp.antecedint.com/api/v1/mcp

To check a key by hand before wiring anything up, list the tools:

curl -sS https://mcp.antecedint.com/api/v1/mcp \
  -H 'Authorization: Bearer ak_live_...' \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Load your key above to run this.

With a key, it goes on every request, including initialize. Sign in if you do not have one; it is issued on the spot.

Start here: the front door

A host lists 10 tools, each titled in plain words. Ask Antecedint takes the question you are trying to answer, routes it to the questions that answer it, runs their walks in parallel and returns their documents with each garden's measured limits and roadmap; it is the first call an agent should make against a new matter. Every other tool on this page is a capability: find it with List Antecedint Tools, read its arguments with Describe Antecedint Tool, and run it with Run Antecedint Tool (reads) or Update Antecedint Workspace (writes), passing { tool, args }. The call is validated, priced and metered as the capability. Calling a capability by its own name works too, and ?surface=full on the endpoint lists every capability as a tool.

ToolNameWhat it doesCredits
Ask AntecedintaskPass the question as the user asked it, or a claim, and it is routed to the questions that answer it, each a walk over one or more data gardens.free
List Antecedint Areaslist_areasThe areas of law this server covers (Patents and IP today; case law, tax and others are planned) with each area's corpora and how many gardens, paths and tools it holds.free
List Antecedint Gardenslist_gardensThe tuned data and the ways to walk it.free
List Antecedint Toolslist_toolsThe tools inside an area, a garden or a path, one line each: the tool id, what it does, its price, whether it reads or changes something, and its arguments in short form, so the next call can run it.free
Describe Antecedint Tooldescribe_toolOne tool in full: what it does, its complete argument schema, an example that runs, the fields its answer carries, the limits it states on every answer, its price, and whether it runs through run_tool or update_workspace.free
Run Antecedint Toolrun_toolRun any tool that reads: a search, a patent's text, a record, a chart, a guidance section.the capability’s
Update Antecedint Workspaceupdate_workspaceRun any tool that saves or changes something in the workspace: opening a matter, saving or approving a draft, running checks that record their report, building a filing package, saving to the library.the capability’s
Check Antecedint Jobget_jobRead a background job: a tool called with async true returns a job_id at once and runs on the server; this returns its status (queued, running, succeeded or failed) and, once it has finished, the tool's result exactly as a direct call returns it.free
Read Antecedint Referenceread_referenceDated reference material: the USPTO fee schedule, the Patent Center filing steps, the rules for each specification section, the data gardens and the areas of law, and how background jobs work.free
Check Antecedint Statusget_statusWhat this key has spent and has left this month and today, when each limit resets, and whether the search models are warm.free

Data gardens

A data garden is the tuned data: one arrangement of a corpus, built and measured for the questions it best suits. The same 10.5M US patent records sit behind four gardens, because the search that finds prior art for a claim is a dense index, the one that finds what an examiner cited is a citation graph, and the one that places a filing among its neighbours is a map. A question is a way to walk one or more gardens; a garden may be walked by several questions. Each garden names the tools that read it, states what it holds with the count and the date it was measured, says what serves it today, and says what is being built on it next.

Every number on a garden carries a value, the population it was measured on (n), and the date. A count is the size of the garden on that date and moves as the corpus is rebuilt. A rate or a score was measured on a named population, such as the 97,913-query examiner-citation holdout, and says how the garden performed on that population on that date; it is not a measurement of the live tool, whose index has grown since. A garden with no score has not been benchmarked. The tool still runs, and the absence of a number is the statement. Errors that people report against a garden are reviewed and taken in at its next build.

The prior-art index

Tuned for what an examiner will cite against a claim.

Index · patents · Units: document · Served by: production (prior-art engine)

Index-1 v3 dense vectors over the title, abstract and first claim of 9.85M US and EP records, BM25 over title and abstract, and filing_date, family_id and cpc3 on every dated row. An optional late-interaction reranker (ColBERT) reorders the top of a search.

Walked by: prior_art_claim · Tools: search_prior_art, get_patent_claims

Holds

FactValuenMeasuredSource
rows in the search namespace (US and EP records) 9,848,8692026-08-18sourcing/TURBOPUFFER_MEASURED.md
share of search results that are non-US records (get_patent_claims cannot resolve them; each carries reachable: false)11.2%1252026-09-09server/src/mcp/callContext.js
success@100 on the examiner-citation holdout ; population: 609,723 examiner-cited US patents, frozen corpus; not the live index0.593997,9132026-09-11research/reports/partner-brief/ALL-STATS.md
recall@100 on the examiner-citation holdout, bundle 5ab160828aff (multi-judgement recall: fraction of all examiner-cited golds, 2.32 per query; the headline 45.3% on the site is single-gold recall@100 from bake-off 6fd3de94f3b9, June 2026) ; population: 609,723 examiner-cited US patents, frozen corpus; not the live index0.432997,9132026-09-11research/reports/partner-brief/ALL-STATS.md
recall@100 on the litigation (PTAB) query set, live index, via /patent-map/locate ; population: live index as of 2026-07-28, since rebuilt; §102 n=10 at 0.10, §103 n=153 at 0.14380.17992392026-07-28research/reports/scorecards/20260728T021917Z_antecedint-api_live-index.md

Roadmap

  • Buildinglitigation-grade §102 and §103 retrieval; the index is tuned for what an examiner cites, not for the art that invalidates (since 2026-07)
  • Pending licencenon-patent literature is not indexed (since 2026-09)
  • Plannedpartner index of 180M patents and 400 to 500M NPL documents (since 2026-09)
  • PlannedEPO X/Y citation labels validated on 108,435 pairs, not yet trained on (since 2026-09)
  • Planneda garden version over the patents_resolved pool, with art_date (priority date where known) as the time column instead of filing_date (since 2026-09)

Notes

  • The time column is filing_date; a priority date is not held, so a bound is decided on the filing date.
  • CPC data covers about 65% of the index, so a cpc3 filter excludes unclassified references rather than ranking them lower.

The citation graph

Tuned for what was cited against an application, and by whom.

Graph · patents · Units: document · Served by: production (citations engine)

Examiner and applicant citations from US prosecution, rebuilt from public data on 2026-08-19 with the pre-2013 citing applications the earlier load missed, resolved to application numbers where the reference has one and carrying the examiner or applicant source of each edge.

Walked by: examiner_citations · Tools: get_patent_citations

Holds

FactValuenMeasuredSource
citation rows in application_citations (examiner and applicant) 391,716,3102026-08-19research/data/MIGRATION_MANIFEST.md

Roadmap

  • Plannedciting and cited dates on every edge (citing_art_date), so a citation walk can be bounded to a day the way the index is (since 2026-09)

Notes

  • Examiner-cited references lead every list and are never dropped; applicant citations fill the remainder up to 150.
  • A reference with no US application number (a foreign patent or NPL) carries reachable: false; the US-number lookups cannot resolve it.

The patent map

Tuned for where a technology sits, what is near it, and where the open ground is.

Map · patents · Units: document, void · Served by: production (patent-map engine)

Every indexed application placed in one UMAP-3D coordinate frame, so a query or a stored vector lands at a point and its nearest neighbours can be read off, and the whitespace atlas: 1,792 analysed gaps in that frame with an opportunity score, a CPC neighbourhood and the six nearest bordering patents each.

Walked by: patent_landscape · Tools: locate_in_patent_space, get_patent_neighborhood, find_whitespace

Holds

FactValuenMeasuredSource
analysed gaps (voids) in the whitespace atlas 1,7922026-09-15server/src/engine/map/patentSpaceService.js
share of atlas exemplars that are non-US records (2,388 of 10,752; each carries reachable: false)22.2%10,7522026-09-15server/src/engine/map/patentSpaceService.js
share of atlas exemplars with no row in the search namespace (903 of 10,748 distinct; their titles stay null with title_note)8.4%10,7482026-09-15server/src/engine/map/patentSpaceService.js

Roadmap

  • Planneda counted, dated size for the map index itself; the figure quoted for it today belongs to the search namespace (since 2026-09)
  • Planneda date bound on locate and neighbourhood reads; today the map is unbounded and a walk reports dates rather than filtering on them (since 2026-09)

Notes

  • The projection is for layout, not measurement: two points close on screen is weaker evidence than each appearing in the other's neighbour list.
  • Opportunity scores in the atlas top out at 0.691.
gardenip.claims

Claim text and structure

Tuned for §112 checks on a claim set: antecedent basis, definiteness, support and new matter.

Text · patents · Units: finding · Served by: production (claims engine)

Claim text by application from the claims lookup tables, parsed on read into a dependency tree with every definite and indefinite recitation located, and the specification text (with the parent specifications of a continuation) that claim-term support is graded against.

Walked by: claim_defects · Tools: check_antecedent_basis, map_claim_support

No figure is stated: this garden is deterministic code over the caller's text, and nothing here is measured.

Roadmap

  • Planneda counted, dated size for the claims lookup (20.8M rows in the source table, not yet measured on the served copy) (since 2026-09)

Notes

  • Implicit antecedent basis under MPEP 2173.05(e) is suppressed; a high finding means no plausible antecedent exists anywhere in the set.
  • Specification text for some applications is corrupted upstream of the support grading, so treat a 112(a) signal from map_claim_support as provisional and check the quoted fragment against the real specification.

Examiners and art units

Tuned for who examines, and how they prosecute.

Table · Prosecution · Units: examiner, art_unit · Served by: production (patent-intel engine)

One profile per USPTO examiner (allowance and rejection behaviour, interviews, RCEs, timing, the applications behind the numbers) and one statistics record per art unit with its roster, keyed by examiner id, surname-first name and art unit.

Walked by: examiner_profile · Tools: find_examiner, get_examiner_profile, get_art_unit_profile

Holds

FactValuenMeasuredSource
examiner profiles 10,3082026-09-08loader manifest, GET /patent-intel/coverage
art units with statistics 5962026-09-08loader manifest, GET /patent-intel/coverage

Notes

  • Name matching is anchored on the recorded surname-first name; an examiner who has not issued under the spelling searched is not found.
  • A unit with little history has thin statistics rather than none; read data_quality before relying on a number.

CPC scheme and routing

Tuned for where applications carrying a symbol are examined, and what a publication was classified under.

Table · Prosecution · Units: cpc · Served by: production (patent-intel engine)

The CPC scheme as a hierarchy, the empirical routing of applications carrying each symbol to art units (with probabilities and an entropy), and the main and inventive symbols assigned to each published application or grant.

Walked by: cpc_routing · Tools: lookup_cpc_code, get_patent_classification

Holds

FactValuenMeasuredSource
publications with a main CPC symbol on record 8,482,9852026-09-08loader manifest, GET /patent-intel/coverage
CPC scheme nodes 261,0242026-09-08loader manifest, GET /patent-intel/coverage
symbols with empirical art-unit routing 229,0962026-09-08loader manifest, GET /patent-intel/coverage

Notes

  • Routing reflects applications actually examined under a symbol; a symbol in the scheme with nothing routed under it returns art_units null rather than zero.
  • A main CPC symbol is held for 8.48M publications; an application outside that set is absent rather than unclassified.

MPEP and EPO Guidelines

Tuned for the rule an examiner is obliged to apply, here and at the EPO.

Text · Examination guidance · Units: section · Served by: production (guidance engine)

Every MPEP section and every EPO Guidelines section as a keyed record with the rules an examiner must apply (keyRules, examinerActions) separated from the prose, plus a cross-reference graph per corpus: what each section cites and what cites it.

Walked by: examination_rule · Tools: get_mpep_section, get_epo_guideline, get_guidance_graph

Holds

FactValuenMeasuredSource
MPEP sections 1,8732026-09-08loader manifest, scripts/ops/guidance/plan.js
EPO Guidelines sections 1,6412026-09-08loader manifest, scripts/ops/guidance/plan.js
MPEP cross-reference graph nodes 7,7612026-09-08loader manifest, scripts/ops/guidance/plan.js
MPEP cross-reference graph edges 33,9542026-09-08loader manifest, scripts/ops/guidance/plan.js
EPO cross-reference graph nodes 3,8972026-09-08loader manifest, scripts/ops/guidance/plan.js
EPO cross-reference graph edges 13,2402026-09-08loader manifest, scripts/ops/guidance/plan.js

Roadmap

  • Plannedfree-text search over the sections; today a section is reached by its id or by the statute a rejection names (since 2026-09)

Notes

  • An id that is absent is one this garden does not carry rather than one the MPEP does not have.
  • An EPO section missing either its keyRules or its citations is an incomplete record rather than a sparse one.

Office-action form paragraphs

Tuned for the set of paragraphs an examiner chose from for a rejection.

Text · Examination guidance · Units: form_paragraph · Served by: production (guidance engine)

The 401 form paragraphs of the MPEP as keyed records: title, the template with its [1], [2] placeholders, what fills them, the statute and MPEP section behind each, the rejection type, and the ordering rules between paragraphs.

Walked by: form_paragraph · Tools: get_form_paragraph, find_form_paragraphs

Holds

FactValuenMeasuredSource
form paragraphs 4012026-09-08loader manifest, scripts/ops/guidance/plan.js

Roadmap

  • Plannedstatute and rejection type filled on the paragraphs that carry neither; today a majority carry null for both and are reached by code or by MPEP section only (since 2026-09)

Notes

  • A rejectionType is matched against both the stored label and the stored statute; filter.matched on find_form_paragraphs shows the expansion.
  • truncated_at_source marks a template whose stored text ends early.

Design search codes

Tuned for what a design search code covers.

Table · Examination guidance · Units: design_code · Served by: production (guidance engine)

The USPTO design search codes, keyed by code, each with every phrasing the USPTO files it under and its major and minor class.

Walked by: design_code · Tools: get_design_code

Holds

FactValuenMeasuredSource
USPTO design search codes 1,5892026-09-08loader manifest, scripts/ops/guidance/plan.js

Notes

  • descriptions is a list, since a code carries every phrasing the USPTO files it under.

Cases

Tuned for which case is this, and what is its record.

Table · caselaw · Units: opinion · Served by: production (caselaw-web engine)

One record per case the citation web has read or that a read opinion cites: name, court, level, date, the reporter citations later opinions used for it, subject class, author, vote and publication, and its good-law status. Found by name (full text), by reporter citation (exact) or by CourtListener opinion id.

Walked by: case_treatment, case_lookup · Tools: find_case, read_case

Holds

FactValuenMeasuredSource
subject class right, Typesafe shards (model-read, Tier C) (18 of 20 right, 1 arguable, 1 wrong; Wilson 95% [69.9, 97.2]; one reader)90.0%202026-10-15research/dream/round-1/runner/run100k/post_typesafe/ledger.md
lower tribunal right on reviews rows, Typesafe shards (model-read, Tier C) (16 of 20; Wilson 95% [58.4, 91.9])80.0%202026-10-15research/dream/round-1/runner/run100k/post_typesafe/ledger.md
disposition right on reviews rows, Typesafe shards (model-read, Tier C) (14 of 18 readable; Wilson 95% [54.8, 91.0])77.8%182026-10-15research/dream/round-1/runner/run100k/post_typesafe/ledger.md

Roadmap

  • PlannedSearch by what a case decided needs a text arrangement of the opinions (the case law garden's passages and decisions); today a description matches case names only. (since 2026-10-15)
  • PlannedReporter citations come from the citing opinions, so a case no read opinion cites by reporter has none; the official citation table is a later join. (since 2026-10-15)

Notes

  • A case the web has not read appears with read: false, named as the citing opinions name it; its author, vote and subject are not held.
  • Ids are CourtListener opinion ids after copies of one decision were merged; aliases lists the other ids of the same decision.

Citation web

Tuned for is this case still good law, and how have later courts treated it.

Graph · caselaw · Units: opinion · Served by: production (caselaw-web engine)

The citations between the opinions read, each with how the citing court treated the cited case (followed, distinguished, questioned, overruled and the rest), how deeply and with which signal, the pin pages, and the sentence it was read from; subsequent history; overrulings and abrogations; and good law per case, judged across every shard and recomputable as of a date.

Walked by: case_treatment, case_authorities · Tools: list_citing_cases, list_cited_authorities, check_good_law, trace_citations, get_treatment_evidence

Holds

FactValuenMeasuredSource
overrules and abrogates edges fully right, Typesafe shards (model-read, Tier C) (45 of 60 kept rows; Wilson 95% [62.8, 84.2]; half courts of appeals, half state high courts)75.0%602026-10-15research/dream/round-1/runner/run100k/post_typesafe/ledger.md
overrules edges fully right, courts of appeals (model-read, Tier C) (16 of 30; Wilson 95% [36.1, 69.8]; 7 of the 60 named the wrong actor with the status right in substance)53.3%302026-10-15research/dream/round-1/runner/run100k/post_typesafe/ledger.md
overrules edges fully right, state high courts (model-read, Tier C) (29 of 30; Wilson 95% [83.3, 99.4])96.7%302026-10-15research/dream/round-1/runner/run100k/post_typesafe/ledger.md
overrules edges that invert good law (model-read, Tier C) (2 of 60; Wilson 95% [0.9, 11.4])3.3%602026-10-15research/dream/round-1/runner/run100k/post_typesafe/ledger.md
good law, first displacing event right on displaced or partially displaced cases (model-read, Tier C) (28 right, 2 arguable, 0 wrong; Wilson 95% [78.7, 98.2])93.3%302026-10-15research/dream/round-1/runner/run100k/post_typesafe/ledger.md
subsequent history (reports) right (model-read, Tier C) (20 of 20; Wilson 95% [83.9, 100]; 16 of 20 on run 3 (shards 200-299))100.0%202026-10-15research/dream/round-1/runner/run100k/post_typesafe/ledger.md
treatment stance right, production student model (model-read gold, Tier C) ; population: treats benchmark test rows, runner @27(Wilson 95% [80.0, 88.6]; on Typesafe default rows read blind, 18 of 20)0.8482632026-10-13research/dream/round-1/runner/FIX_round23.md
treatment depth (relied on, discussed, passing) right (model-read gold, Tier C) ; population: treats benchmark test rows, runner @27(Wilson 95% [65.4, 76.2]; 12 of 20 read blind on Typesafe rows)0.7112632026-10-13research/dream/round-1/runner/FIX_round23.md
mentions correctly identified as a case citation, default treats rows (model-read, Tier C) (20 of 25; 5 were bare-name links to the wrong case)80.0%252026-10-15research/dream/round-1/runner/run100k/post_typesafe/ledger.md

Roadmap

  • BuildingThe web is read shard by shard; courts of appeals and state high courts are being read now, and every answer states how many opinions the current build holds. (since 2026-10-15)
  • PlannedFederal district courts and state intermediate appellate courts beyond the first 300,000 opinions are a later phase; treatment from those courts is missing for most cases until then. (since 2026-10-15)
  • PlannedDisplacement by statute is seen only when a citing opinion reports it. (since 2026-10-15)

Notes

  • unverified is not standing: it means the web holds no displacing event and cannot judge. Never read it as good law.
  • A pair's treatment is its most negative label; label_counts gives every label, so read both.
  • Holding or dictum is not stored: read antecedint://caselaw/reading/holding.

Opinion text

Tuned for which cases hold this, and what are the leading cases on it.

Text · caselaw · Units: passage, opinion · Served by: production (caselaw-search engine)

The full text of 6.9 million court opinions from every CourtListener court, split into 110 million passages and searched by their words, grouped to the case and ranked by how much later courts rely on each case. Each result carries the passage that matched and the case's good law where the citation web holds it.

Walked by: case_research · Tools: search_case_law

Holds

FactValuenMeasuredSource
passages searched 110,143,1042026-10-19caselaw/manifest/gardens.jsonl (case_passages_v2, 970cf29defd0)
opinions held in full text 6,887,9312026-10-19caselaw/manifest/gardens.jsonl (case_passages_v2, 970cf29defd0)
recall@10, held-out research questions (model-authored gold) ; population: phase-1 held-out questions, case grain(Wilson 95% [0.499, 0.788]; T3 baseline 0.447)0.658382026-10-19research/dream/round-1/citeweb_serving/harness_v1/TUNING_R1.md
recall@10, held-out court-written parentheticals ; population: parentheticals as queries, gold = the cited case(Wilson 95% [0.535, 0.596]; paired +0.040 over T3)0.5661,0112026-10-19research/dream/round-1/citeweb_serving/harness_v1/TUNING_R1.md
leading-cases questions answered in the top 10, held out (6 of 6; T3 1 of 6)100.0%62026-10-19research/dream/round-1/citeweb_serving/harness_v1/TUNING_R1.md

Roadmap

  • PlannedDense retrieval over the passages (measured on a sample; the full encode waits on the owner). (since 2026-10-19)
  • PlannedQuestions phrased as a standard ("What standard governs ...") are not yet routed to the leading-cases vote. (since 2026-10-19)

Notes

  • A long question or pasted text is cut to its rarest terms; the answer's query.searched says what ran.
  • Courts, levels and dates are taken from an asked question, never from pasted opinion text.

Planned corpora, no gardens yet: Case law (Phase 2); Tax (Phase 2); Contracts (Phase 3); Litigation (Phase 3); Corporate (Phase 4). A corpus gets a garden when its first question has been researched and the tool that answers it ships with a count and a date.

Questions

A question is a way to walk one or more gardens. ask routes a question to the walks that answer it and runs them in parallel; each answer names the gardens it walked. Pin a set with questions. The cost is the walk's; the per-minute and per-day limits are counted per key across every walk together.

TypeQuestionWalksEncoderCredits
prior_art_claimWhat prior art exists for this claim?Claim text, an abstract or a description of an invention, and the question is what existing patents come closest to it: prior art, anticipation, obviousness, novelty, freedom to operate, or what an examiner would cite. Not for a question that names a specific application number, a CPC symbol, an examiner, an MPEP section or a form paragraph.ip.prior-artyes10
examiner_citationsWhat will the examiner cite?A US application number and the question is what was cited against it: the references on the examiner's 892, the applicant's IDS, what was applied in the office action. Takes an application number; a bare claim with no number belongs to prior_art_claim.ip.citationsno1
patent_landscapeWhat sits just outside this domain?A technology described in a sentence or two and the question is about the landscape: what is near it, what neighbours an application has, where the crowded and open ground is, which gaps (whitespace) border it. Positions, neighbourhoods and gaps rather than a ranked prior-art list.ip.patent-mapyes3
claim_defectsWhich passage supports each limitation?A claim set, or an application number, and the question is about §112: antecedent basis, definiteness, whether each term is supported by the specification, new matter in a continuation. Not a prior-art question.ip.claimsno1
examiner_profileWho is likely to examine this, and how do they reject?An examiner's name or an art unit number, and the question is who they are and how they prosecute: allowance and rejection rates, interviews, RCEs, time to first action, the roster of a unit. Not for which art unit a CPC symbol routes to, which is cpc_routing.ip.examinersno1
cpc_routingWhere do applications with this symbol really go?A CPC symbol (H01M, G06F 3/041) and the question is what it covers, where it sits in the scheme, or which art units examine it; or a publication or application number and the question is which CPC symbols it was assigned. Classification and routing, not prior art and not examiner behaviour.ip.classificationno1
examination_ruleWhich rule obliges this office action, here and at the EPO?A question about what an examiner is required to do or show: an MPEP section by number (2106, 601.01(c)), an EPO Guidelines section (G-II, 3.3), or a rejection type with no section named, where the sections that rejection rests on are read. Examination rules, not prior art and not examiner statistics.ip.mpep-epono1
form_paragraphWhat does the examiner paste for this rejection?A form paragraph code read off an office action (7.37.01, ¶ 6.11), or a rejection type (103, 112(b), obviousness, indefiniteness) and the question is which paragraphs an examiner uses for it, what the placeholders mean, and which statute and MPEP section stand behind it.ip.form-paragraphsno1
design_codeWhat does this design code cover?A USPTO design search code (03.19.17) and the question is what it covers. Design classification only; utility classification is cpc_routing.ip.design-codesno1
case_treatmentIs this case still good law, and how have later courts treated it?A named court case (X v. Y, or a reporter citation) and the question is whether it is still good law, whether it was overruled, reversed or abrogated, or how later courts treated it: followed, distinguished, questioned, criticised, who cites it. Pass asOf to ask as of a date.caselaw.citation-web, caselaw.casesno0
case_lookupWhich case is this, and what is its record?A court case named by its parties (X v. Y) or by a reporter citation (466 U.S. 668), and the question is which case it is: its court, date, citations and record. Not for whether it is still good law or how it was treated, which is case_treatment, nor for what it relies on, which is case_authorities.caselaw.casesno0
case_authoritiesWhat authorities does this case rely on?A named court case (X v. Y, or a reporter citation) and the question is what it relies on: the precedents its opinion cites, follows, distinguishes or overrules, and which it leans on most. Not for who cites the case, which is case_treatment.caselaw.citation-webno0
case_researchWhich cases hold this, and what are the leading cases on it?A legal question that names no case: which cases hold a proposition, the leading or landmark cases on a doctrine, how courts in a jurisdiction decide an issue, or what precedent supports an argument. Searches the full text of court opinions. Not for a named case, which is case_lookup or case_treatment.caselaw.passagesno0

Tools

Grouped by the garden each reads. Every capability listed here reads; none writes to a file, a docket, or a case. The descriptions below are the exact strings tools/list returns, because this page is generated from the same registry.

The front door

toolask

Ask Antecedint

Timeout 120s

Start here. Pass the question as the user asked it, or a claim, and it is routed to the questions that answer it, each a walk over one or more data gardens. A garden is the tuned data: one arrangement of a corpus (the prior-art index, the citation graph, the patent map, claim text, examiner profiles, CPC routing, the MPEP and EPO sections, form paragraphs, design codes), built and measured for the questions it suits. Application numbers, MPEP sections, form paragraph codes, CPC symbols, art units, examiner names and claim shape in the text are read as routing signals; a question that spans walks runs several in parallel. Every answer names the gardens it walked and returns documents; every garden walked states what it holds (holds: value, n, date, source), what is being built on it (roadmap) and what serves it (served_by). Pass asOf with the priority date of the claim: a walk over the prior-art index bounds art to before that day and reports time_policy, and each document carries the date it was decided on and whether it predates the day. Pass excludeFamilyOf to drop the application's own family; the answer reports leaks and the rows that carried no family id. routing says how the questions were chosen; not_covered lists what was not run and why, including gaps that bear on the question, such as non-patent literature. The prior-art index is tuned for what an examiner will cite; litigation-grade §102 and §103 retrieval is being built and the response says so where it applies. Pass questions to pin the set from list_gardens. A walk that needs a cold encoder is skipped with a HUB_COLD error and a remedy, and one that asks for rerank while the reranker is cold or still warming answers RERANKER_COLD, both at once rather than after a load; call get_status with warm true (and rerank true) first, or set waitForHub. Each answer that used a model reports hub: the time per model, and served_cold, true when a model loaded or was still warming inside the call.

Parameters

NameTypeDescription
question reqstringThe question as asked, or claim text. Claim text routes to prior_art_claim; a numbered claim set with dependencies also routes to claim_defects. (min length 8, max length 20000)
questions string[]Question types from list_gardens (prior_art_claim, examiner_citations, patent_landscape, claim_defects, examiner_profile, cpc_routing, examination_rule, form_paragraph, design_code). Pins the set and skips routing. (max 4 items)
maxDocuments integerDocuments per answer (default 10). (min 1, max 100)
budget integerCharacter budget for the documents across all answers (default 24000). Documents are clipped from the tail, never reordered; truncated says when. (min 2000, max 120000)
snippets booleanfalse returns ids, refs, scores and dates only (default true). What an evaluation or a dedup pass reads.
asOf stringThe day art must predate, strictly (YYYY, YYYY-MM or YYYY-MM-DD; a year or a month resolves to its first day). Pass the priority date of the claim being searched. Without it, results may postdate the claim and the answer says so.
filedBefore stringThe older name for asOf, honoured when asOf is absent.
excludeFamilyOf stringUS application number whose patent family the index walks drop. The answer reports whether the family resolved and how many returned rows carried no family id. (pattern ^[0-9]{7,12}$)
cpc3 string[]Restrict the index walks to these CPC subclasses. Excludes unclassified references, so leave it unset on a first pass.
rerank booleanRun the ColBERT reranker in prior_art_claim (slower; loads a second model on a cold hub).
dig booleanprior_art_claim reads past the abstracts by default: the independent claims of the top three hits and, for the top two, the passage closest to each element, in answer.dig. false skips it for a faster first look. Included in the flat price either way.
hyde booleanForce the rewrite of the question into patent language on or off. Unset lets the walk decide: on for a short description, off for a claim.
waitForHub booleanWait for a cold encoder instead of skipping the index walks (default false; about 75 s on the evaluation tier).

List Antecedint Areas

Timeout 120s

The areas of law this server covers (Patents and IP today; case law, tax and others are planned) with each area's corpora and how many gardens, paths and tools it holds. The top of the map: list_gardens and list_tools open an area. A question does not need an area chosen first; ask routes it. Free.

Parameters

NameTypeDescription
area stringOne area id, such as ip, to list only that area. (pattern ^[a-z][a-z0-9_-]*$)

List Antecedint Gardens

Timeout 120s

The tuned data and the ways to walk it. gardens[]: every data garden, with its id, kind (index, graph, map, table or text), what it is and what it is tuned for, the primitive tools that read it, what serves it today (served_by: the production store, or a program garden version with its spec hash and pool), what it holds (each figure with n, measurement date and source), its roadmap (building, planned, pending_licence) and the question types that walk it. questions[]: every question ask can route to, with the gardens it walks, its cost and whether it needs the encoder. Free. Filter by corpus, or pass id for one garden. Read it once per session to know what the service can and cannot answer.

Parameters

NameTypeDescription
corpus stringOnly gardens and questions over this corpus. (one of patents, prosecution, guidance, caselaw, tax)
id stringOne garden by id, e.g. ip.prior-art, with the questions that walk it. (pattern ^[a-z]+\.[a-z-]+$)

List Antecedint Tools

Timeout 120s

The tools inside an area, a garden or a path, one line each: the tool id, what it does, its price, whether it reads or changes something, and its arguments in short form, so the next call can run it. Narrow with area (ip), garden (ip.records), path (ip.provisional) or words to match. A tool that reads is run with run_tool; one that saves or changes something with update_workspace. describe_tool gives one tool in full. Free.

Parameters

NameTypeDescription
area stringAn area id, such as ip. (pattern ^[a-z][a-z0-9_-]*$)
garden stringA garden id, such as ip.records. (pattern ^[a-z]+\.[a-z-]+$)
path stringA path id, such as ip.provisional. (pattern ^[a-z]+\.[a-z-]+$)
query stringWords to match in tool ids, titles and descriptions. (min length 1, max length 200)

Describe Antecedint Tool

Timeout 120s

One tool in full: what it does, its complete argument schema, an example that runs, the fields its answer carries, the limits it states on every answer, its price, and whether it runs through run_tool or update_workspace. Free.

Parameters

NameTypeDescription
tool reqstringThe tool id from list_tools, such as search_prior_art. (pattern ^[a-z][a-z0-9_]*$)

Check Antecedint Status

Timeout 120s

What this key has spent and has left this month and today, when each limit resets, and whether the search models are warm. On the evaluation tier the models scale to zero after about 15 idle minutes and the first search after that waits about 75 seconds: pass warm true before a search to start them (rerank true also loads the reranker; wait up to 120 seconds to block until ready, which waits for the first inference and not only the load). Returns warm_until, the time the models are expected to go cold, to compare with the clock before a search. Pass credits to ask whether a planned spend would be served. Free, and never counted.

Parameters

NameTypeDescription
warm booleanStart the search models if they are cold.
rerank booleanWith warm, also load the reranker.
wait integerWith warm, seconds to wait for the models to be ready. (min 0, max 120)
credits integerA planned spend in credits, answered with whether it would be served. (min 1, max 1000000)

The prior-art index

Walked by prior_art_claim.

Prior art search

Timeout 120s · Garden ip.prior-art

Semantic prior-art search over 10.5M+ US patents for a claim and/or abstract. Two-stage neural retrieval (fine-tuned dense encoder + optional late-interaction reranker) plus a citation-graph channel. Returns ranked references with titles, abstracts and similarity scores. Full claim text is NOT included by default: set includeClaims, or rank first and pull the few worth reading with get_patent_claims, which is the cheaper shape for most work. Specification bodies are never returned here: read them with get_patent_text and search_within_patent, or chart a claim across several results with map_limitations_to_art. Pass filedBefore with the priority date of the application you are searching for: prior art must predate the invention, and without that bound the results include later filings that cannot be cited. Call get_status with warm true first on the evaluation tier: the encoder scales to zero when idle and the first search after that otherwise waits about 75 seconds for it to load; contracted tiers hold a warm instance.

Parameters

NameTypeDescription
claims stringClaim text (independent claim 1 works best). (min length 10, max length 20000)
abstract stringOptional abstract or invention summary. (max length 10000)
count integerNumber of references to return (default 50). (min 1, max 100)
rerank booleanApply the ColBERT reranker to the top results (slower, higher precision).
filedBefore stringExclude references filed on or after this date (YYYY, YYYY-MM or YYYY-MM-DD), evaluated to the day. Prior art must predate the invention it is cited against, so pass the priority date of the application being searched. Without it the results include later filings, which cannot be cited as prior art against it.
excludeFamilyOf stringA US application number whose patent family is dropped from the results. A claim searched against the index finds its own continuations first, and filedBefore only removes the ones filed after the bound; pass the application the claim belongs to and its whole family goes. The filter stage reports the family id resolved, or that the number is not in the index and nothing was excluded. (pattern ^[0-9]{7,12}$)
hybrid booleanAlso run keyword (BM25) search over titles and abstracts and fuse the rankings (default false). Set it when your query uses a term of art: the encoder was trained on meaning and does not guarantee an exact phrase outranks a paraphrase, so dense search alone can miss a document that names the thing. Each result gains matched_legs, how many of the three retrievers found it.
hyde booleanRewrite the query into patent language before searching (default false). A model drafts a hypothetical abstract and first claim for what you described, and that is searched instead. Set it when you have a description rather than claim text: the index holds formal claim language and a plain-English query has to cross that gap unaided. Do NOT set it when you already have a claim, which is the strongest query available. Adds about two seconds. metadata.hyde returns the generated text.
includeClaims booleanReturn full claim text for every reference (default false). The lookup adds about a second regardless of how many references are asked for, so leaving this off and calling get_patent_claims on the two or three worth reading is usually faster overall. Each result carries title_source: "index" (the vector index, whose titles were rewritten from publication records on 2026-09-13) or "lookup" (the claims row supplied it).
cpc3 string[]Restrict to these CPC subclasses, e.g. ["H01M","F28D"]. Useful for a second pass once a first search has shown which art areas matter. CPC data covers about 65% of the index and an unclassified reference is excluded by this filter rather than ranked lower, so a first search should usually leave it unset.

Patent claim text

Timeout 120s · Garden ip.prior-art

Fetch full claim text and abstracts for specific US application numbers, up to 25 per call. Use after search_prior_art to read the references worth reading: the search ranks and this returns the text, so a search of fifty does not pay to fetch fifty full claim sets. Titles here come from the authoritative lookup table rather than the vector index. For the specification, use get_patent_text.

Parameters

NameTypeDescription
appNumbers reqstring[]US application numbers, digits only. These are the application_number values a search returns. (max 25 items)
format stringparsed (default) returns claims only as a structured array. raw also includes the unparsed blob, which is the same text again and roughly doubles the response; use it only when the parse itself is in question. (one of parsed, raw)
independentOnly booleanReturn only independent claims. Triage usually needs claim 1 and a record can carry two dozen. metadata.claims_withheld reports how many were dropped, so a short answer is not mistaken for a short patent.

The citation graph

Walked by examiner_citations.

Cited prior art map

Timeout 120s · Garden ip.citations

For a US application number, return its cited prior art (examiner-cited references flagged and listed first) resolved to patent-space positions. Useful for seeing what an examiner actually cited against an application.

Parameters

NameTypeDescription
appNum reqstringUS application number, digits only. (pattern ^\d{7,12}$)
year integerFiling year of the citing application, if known (makes the lookup faster). (min 1970, max 2035)

The patent map

Walked by patent_landscape.

Semantic patent-space locate

Timeout 120s · Garden ip.patent-map

Semantic search into patent space: give free text (or a US application number) and get the nearest patents with similarity scores plus a landing position. A fast way to find the closest existing art to any technical text. Free text is encoded, so call get_status with warm true first on the evaluation tier or the first call after an idle period waits about 75 seconds; locating by appNum reads the stored vector and needs no encoder.

Parameters

NameTypeDescription
query stringFree-text technical description to locate. Provide either query or appNum. (min length 8, max length 4000)
appNum stringUS application number to locate by its stored vector; the application itself is excluded from the neighbours. (pattern ^\d{7,12}$)
topK integerNumber of nearest patents (default 20). (min 1, max 100)

Patent neighborhood

Timeout 120s · Garden ip.patent-map

Given a US application number, return its position in Antecedint's semantic patent space plus its nearest semantic neighbors (similar patents with similarity scores).

Parameters

NameTypeDescription
appNum reqstringUS application number, digits only (7-12 digits). (pattern ^\d{7,12}$)
topK integerNumber of neighbors (default 20). (min 1, max 100)

Patent whitespace opportunities

Timeout 120s · Garden ip.patent-map

List analyzed gaps ("whitespace") in patent space ranked by opportunity score. Each gap includes a summary of what is missing, bordering CPC areas and patents, temporal profile, and nearby active assignees. Filter by CPC section letter and minimum opportunity.

Parameters

NameTypeDescription
limit integerMax gaps to return (default 100). (min 1, max 500)
section stringCPC section letter filter (A-H, Y). (pattern ^[A-HYa-hy]$)
minOpportunity numberMinimum opportunity score (0-1). (min 0, max 1)

Claim text and structure

Walked by claim_defects.

Antecedent basis check

Timeout 120s · Garden ip.claims

Check a claim set for §112(b) antecedent-basis defects. Finds definite recitations ("the widget", "said widget") with no earlier indefinite recitation in the same claim or in a claim it depends from, plus double inclusions, plural/singular mismatches, and improper dependencies. Implicit antecedent basis (MPEP 2173.05(e)) is suppressed, so "the outer surface of the housing" is not flagged. Findings are graded high/medium/low: high means no plausible antecedent exists anywhere, low means one probably exists under different wording. Deterministic, no LLM. Pass claims for a draft, or appNum for a filed application.

Parameters

NameTypeDescription
claims object[]The claim set, in order. Provide either claims or appNum. (max 300 items)
appNum stringUS application number, digits only; pulls the claims from the warehouse. (pattern ^\d{7,8}$)
minSeverity stringLowest severity to report (default low = everything). (one of high, medium, low)
includeSuppressed booleanAlso return candidates the implicit-basis rules suppressed, with the rule that killed each. Useful for auditing the checker.

Claim term support map

Timeout 180s · Garden ip.claims

Map every claim term to the specification passages that give it meaning, with exact locations (section, paragraph number, char offsets). Each term is graded by HOW the spec supports it: formally defined, defined by the claim, scoped by enumeration, mapped to an embodiment, characterized functionally, merely described, or UNDESCRIBED, which is a §112(a) written-description signal. With includeParents, the same analysis runs against the specs of the parent applications in the continuity chain (continuation, CIP, divisional, provisional), so terms supported here but in no ancestor are surfaced as NEW MATTER that cannot claim the parent's filing date.

Parameters

NameTypeDescription
appNum stringUS application number, digits only. Required for the continuity walk. (pattern ^\d{7,8}$)
claims object[]Claim set to analyze. Omit to use the filed claims for appNum. (max 300 items)
sections object[]Specification sections to ground against. Omit to pull the filed spec for appNum. (max 60 items)
includeParents booleanWalk the continuity chain and check each parent spec for support (default true when appNum is given).
maxAncestors integerCap on ancestors to check (default 6). (min 0, max 12)
ocr booleanAllow OCR for image-only filings. Most provisionals are image-only, so this is usually needed to read them.

Examiners and art units

Walked by examiner_profile.

Examiner search

Timeout 120s · Garden ip.examiners

Find USPTO examiners by surname or art unit, returning ids and names to pass to get_examiner_profile. Matching is anchored, so pass a surname (or the start of the surname-first name), not a substring from the middle.

Parameters

NameTypeDescription
name stringSurname, or a prefix of the surname-first full name. (min length 2, max length 80)
artUnit stringRestrict to one art unit. (pattern ^\d{3,4}$)
limit integerMaximum matches (default 20). (min 1, max 100)

Examiner statistics

Timeout 120s · Garden ip.examiners

Statistics for one USPTO examiner, by id or by surname-first name (e.g. "SMITH ADAM M"): rejection analytics, allowance behaviour, interview and RCE patterns, timing and cost. Use it to calibrate a response strategy to the examiner who will actually read it. The default response is about 4,000 tokens: per-application lists (applications_with_interviews, applications_with_rcex), two wide histograms (by_sequence_length, document_code_breakdown) and two cold per-application sections (behavioral_patterns, rejection_analysis) are each replaced by a count and the include name that brings them back. percentile_rankings and claims_analysis are null where never computed, which is every examiner sampled. Read data_quality first: populations names the denominators, volume.tier says how much the numbers rest on, withheld lists fields removed as wrong, and notes lists pairs that disagree.

Parameters

NameTypeDescription
examiner reqstringExaminer id, or USPTO surname-first full name. (min length 2, max length 120)
include stringComma-separated sections to add: applications_with_interviews, applications_with_rcex, by_sequence_length, document_code_breakdown (thousands of tokens each); behavioral_patterns, rejection_analysis (cold, may reach megabytes).

Art unit profile

Timeout 120s · Garden ip.examiners

Profile one USPTO art unit: what technology it examines, its examiner roster, and how it behaves — allowance and rejection rates, time to first action, interview receptiveness, RCE tolerance and estimated prosecution cost. generated_context is the one-paragraph account of the technology; the model-written long description is served as its opening and length only. examiner_count is the roster length, and examiner_count_in_statistics appears when the stored statistics counted a different roster. Check statistics.data_quality before relying on the numbers: it reports how many applications and office actions they rest on, and thin units carry the same field names with far weaker support.

Parameters

NameTypeDescription
artUnit reqstringUSPTO art unit, e.g. 2872. (pattern ^\d{3,4}$)

CPC scheme and routing

Walked by cpc_routing.

CPC code lookup

Timeout 120s · Garden ip.classification

Look up a CPC classification symbol: what it covers, where it sits in the scheme, and which art units actually examine it. The art-unit spread is empirical (where applications carrying the symbol were really routed) with per-unit probabilities and an entropy score: low entropy means the symbol predicts the art unit, high means it does not. Use before filing to anticipate routing, or to decide whether classification is worth arguing.

Parameters

NameTypeDescription
code reqstringCPC symbol, e.g. C11D or C11D7/261. (pattern ^[A-HYa-hy][0-9A-Za-z/]{0,18}$)
childLimit integerHow many child symbols to return (default 50). (min 0, max 500)
distributionLimit integerHow many art units to list in the distribution, largest first (default 20). unique_art_units is always the true total. (min 0, max 500)

Patent CPC classification

Timeout 120s · Garden ip.classification

Get the CPC symbols assigned to a published application or granted patent, from the USPTO Master Classification File. Separates inventive symbols (covering what is claimed) from additional ones (disclosed but not claimed) — build a prior-art search from the inventive set. Accepts a publication or application number.

Parameters

NameTypeDescription
number reqstringPublication or US application number, digits only. (pattern ^\d{7,12}$)

MPEP and EPO Guidelines

Walked by examination_rule.

MPEP section

Timeout 120s · Garden ip.mpep-epo

One MPEP section, with keyRules and examinerActions separated from the prose that obliges them. This is what a US examiner is required to apply, so it is the text an argument about whether they applied it correctly has to rest on. Section ids carry dots and parentheses (601.01(c)) and the punctuation is part of the id.

Parameters

NameTypeDescription
sectionId reqstringMPEP section id, e.g. 2106 or 601.01(c). (pattern ^[0-9A-Za-z.()\-]{1,40}$)

EPO Guidelines section

Timeout 120s · Garden ip.mpep-epo

One section of the EPO Guidelines for Examination, in the same shape as get_mpep_section because the flow that reaches it is the same flow one step later: an applicant with a US rejection usually has a European family member. Carries citations, parentSection and childSections alongside the generated keyRules.

Parameters

NameTypeDescription
sectionId reqstringEPO Guidelines section id in any written form: g-ii-3.3, "G-II, 3.3", or the graph node id epo-g-ii-3-3. Part-chapter-section, as the Guidelines number them. (pattern ^[0-9A-Za-z.,_ \-]{1,40}$)

Guidance Cross-References

Timeout 120s · Garden ip.mpep-epo

What a guidance section points at and what points at it, one hop, both directions. Forward is what else a rule depends on; backward is what breaks if you misread it, and is the direction that is hard to get any other way. The node id prefix selects the corpus: mpep-2106 or epo-c-ix-3. A hub section is cited by hundreds of others, so the fan-out is capped and truncated says which direction hit the cap.

Parameters

NameTypeDescription
nodeId reqstringGraph node id, prefixed mpep- or epo-. (pattern ^(mpep|epo)-[0-9A-Za-z.()\-]{1,40}$)
limit integerMaximum edges per direction (default 50). (min 1, max 200)

Office-action form paragraphs

Walked by form_paragraph.

Office action form paragraph

Timeout 120s · Garden ip.form-paragraphs

The literal paragraph an examiner pasted into an office action, by its code. Turns a paragraph number read off a rejection into the statute behind it, the MPEP section it rests on, the rejection type, and the notes the examiner was given about when to use it. title is the heading and template the text with [1], [2] placeholders; brackets lists what fills them, which is often where the substance of the rejection sits. mustFollow names paragraphs that have to appear before this one. isAIA and preAIAEquivalent matter for anything filed near the changeover. A leading paragraph symbol is accepted.

Parameters

NameTypeDescription
code reqstringForm paragraph code, e.g. 6.11 or 7.37.01. (pattern ^[¶\s0-9A-Za-z.\-]{1,24}$)

Form paragraphs by rejection type

Timeout 120s · Garden ip.form-paragraphs

Every form paragraph an examiner could have reached for, filtered by rejection type or by the MPEP section it rests on. Given a rejection type this is the set they chose from, which is what tells a deliberately narrow choice from the only available one. rejectionType takes a statute (103, 112(b), 101, 1.52) or a label (obviousness, indefiniteness, enablement, double_patenting); either reaches the paragraphs the other would. At least one filter is required; this does not list the whole table.

Parameters

NameTypeDescription
rejectionType stringA statute (102, 103, 112(b), 112(a), 112(f), 101, 121, or a CFR rule such as 1.52) or a label (obviousness, anticipation, indefiniteness, enablement, written_description, means_plus_function, abstract_idea, double_patenting, restriction, allowance, drawing_objection). (pattern ^[0-9A-Za-z.()_ \-]{1,40}$)
mpepSection stringMPEP section the paragraph rests on, e.g. 706, 707 or 2175. (pattern ^[0-9A-Za-z.()\-]{1,40}$)
limit integerHow many to return (default 25). (min 1, max 100)

Design search codes

Walked by design_code.

USPTO design search code

Timeout 120s · Garden ip.design-codes

One USPTO design search code, e.g. 03.19.17 for a fish symbol used for religious significance. A classification scheme rather than guidance; it sits in this corpus because it arrived with the same data, not because it belongs beside the MPEP.

Parameters

NameTypeDescription
code reqstringDesign search code, e.g. 03.19.17. (pattern ^[0-9]{2}(\.[0-9]{2}){0,3}$)

Cases

Walked by case_treatment, case_lookup.

Find a case

Timeout 120s · Garden caselaw.cases

Find a case in the citation web by name ("Strickland v. Washington"), reporter citation ("466 U.S. 668", "610 S.W.2d 101") or CourtListener opinion id, and get the ids the other case-law tools take. Each case comes back with its court, level, date, the reporter citations held for it, how many read opinions cite it, and its good-law status; read: false means the web has not read the opinion itself and knows it from the opinions that cite it. match says how the case was found: exact (the citation, the id, or every word of the name), partial (some of the words) or fuzzy (each word within one or two letters, for a misspelling); confirm a partial or fuzzy match before checking its good law. Pass asOf to see only cases decided before a date. No match is not a finding that the case does not exist.

Parameters

NameTypeDescription
query reqstringA case name, a reporter citation or a CourtListener opinion id. (min length 1, max length 300)
asOf stringOnly cases decided before this date (YYYY-MM-DD). (pattern ^\d{4}-\d{2}-\d{2}$)
court string[]CourtListener court ids, e.g. scotus, ca9, cal. (max 12 items)
level string[]Court levels to keep. (max 5 items)
readOnly booleanOnly opinions the web has read, not cases it knows from citations alone.
limit integerHow many cases (default 10). (min 1, max 50)

Read a case

Timeout 120s · Garden caselaw.cases

Read one case from the citation web: its record (court, level, date, author, vote, publication, subject, the decision it reviewed), its good-law status with the dated events behind it, its subsequent history (later opinions reporting it reversed, affirmed, overruled or cert denied, each with the sentence), the overrulings naming it or made by it, and how many opinions cite it and it cites, by treatment. With asOf, everything is as of that date and good law is recomputed from the earlier events. Use list_citing_cases for the citing opinions themselves and get_treatment_evidence for any edge_id.

Parameters

NameTypeDescription
id reqstringCase id from find_case. (pattern ^(\d{1,12}|(?:key:)?\d{1,5}\|[A-Za-z0-9.]{1,24}\|\d{1,6})$)
asOf stringRead the case as of this date (exclusive). (pattern ^\d{4}-\d{2}-\d{2}$)

Citation web

Walked by case_treatment, case_authorities.

Who cites a case

Timeout 120s · Garden caselaw.citation-web

List the opinions that cite a case, each with how it treated the case: treatment (the most negative label among its mentions, with label_counts for all of them), stance, depth (relied on, discussed, passing), whether it quoted, the pin pages, the citing signal and the sentence. Filter by treatment, stance, depth, citing court, court level and decision date; page with offset. total and by_treatment count every match. Sorted most negative first, so distinguishing and questioning opinions lead. Pass edge_id to get_treatment_evidence for the full sentence.

Parameters

NameTypeDescription
id reqstringCase id from find_case. (pattern ^(\d{1,12}|(?:key:)?\d{1,5}\|[A-Za-z0-9.]{1,24}\|\d{1,6})$)
asOf stringOnly edges decided before this date (YYYY-MM-DD). (pattern ^\d{4}-\d{2}-\d{2}$)
treatment string[]Keep these treatments (a pair's most negative label). (max 11 items)
stance string[]Keep these stances. (max 3 items)
depth string[]Keep these depths. (max 3 items)
order stringtreatment (most negative first, the default), newest, oldest or most_mentions. (one of treatment, newest, oldest, most_mentions)
limit integerPage size (default 25). (min 1, max 100)
offset integerPage start: next_offset from the previous page. (min 0, max 250000)
court string[]CourtListener ids of the citing courts. (max 12 items)
level string[]Levels of the citing courts. (max 5 items)
decidedFrom stringCiting opinions decided on or after this date. (pattern ^\d{4}-\d{2}-\d{2}$)
decidedTo stringCiting opinions decided on or before this date. (pattern ^\d{4}-\d{2}-\d{2}$)

What a case relies on

Timeout 120s · Garden caselaw.citation-web

List the cases one opinion cites, each with how the opinion treated it (treatment, label_counts, stance, depth, quoted, pin pages, signal, sentence). Use it to see what a decision rests on: order most_mentions or filter depth relied_on for the authorities it leans on, treatment distinguished or overruled for the ones it set aside. Filter by treatment, stance, depth and cited court; page with offset.

Parameters

NameTypeDescription
id reqstringCase id from find_case. (pattern ^(\d{1,12}|(?:key:)?\d{1,5}\|[A-Za-z0-9.]{1,24}\|\d{1,6})$)
asOf stringOnly edges decided before this date (YYYY-MM-DD). (pattern ^\d{4}-\d{2}-\d{2}$)
treatment string[]Keep these treatments (a pair's most negative label). (max 11 items)
stance string[]Keep these stances. (max 3 items)
depth string[]Keep these depths. (max 3 items)
order stringtreatment (most negative first, the default), newest, oldest or most_mentions. (one of treatment, newest, oldest, most_mentions)
limit integerPage size (default 25). (min 1, max 100)
offset integerPage start: next_offset from the previous page. (min 0, max 250000)
court string[]CourtListener ids of the cited courts. (max 12 items)

Check good law

Timeout 120s · Garden caselaw.citation-web

Whether a case was displaced (overruled, abrogated, reversed, superseded), as of a date: the status (displaced, partially_displaced, standing or unverified), the dated events behind it with the deciding case, the overruling edges with the sentence each was read from, and the history reports that displaced it. As of a date before an event, that event is left out and the status recomputed. good_law.summary states the status in one sentence. unverified means no displacing event was found; it is neither a finding of good law nor of displacement. A report whose actor cannot have displaced the case (decided before it, or a lower court reported overruling the Supreme Court) is listed under reports_not_counted with the reason. Check the evidence before relying on a status.

Parameters

NameTypeDescription
id reqstringCase id from find_case. (pattern ^(\d{1,12}|(?:key:)?\d{1,5}\|[A-Za-z0-9.]{1,24}\|\d{1,6})$)
asOf stringThe date to judge as of (exclusive); today when omitted. (pattern ^\d{4}-\d{2}-\d{2}$)

Trace the citation web

Timeout 120s · Garden caselaw.citation-web

Walk the citation web out from a case: the opinions that cite it and the opinions that cite those (direction in), or what it cites and what those cite (direction out), at most two levels and at most 25 edges per node, most negative treatment first. Filter by treatment or stance to follow only, say, distinguishing or questioning lines. Each edge carries both names, the decision date, treatment and edge_id. Page the first level with offset.

Parameters

NameTypeDescription
id reqstringCase id from find_case. (pattern ^(\d{1,12}|(?:key:)?\d{1,5}\|[A-Za-z0-9.]{1,24}\|\d{1,6})$)
direction stringin follows who cites (default); out follows what is cited. (one of in, out)
depth integerLevels to walk (default 2). (min 1, max 2)
fanout integerEdges kept per node (default 10). (min 1, max 25)
asOf stringOnly edges decided before this date. (pattern ^\d{4}-\d{2}-\d{2}$)
treatment string[]Follow only these treatments. (max 11 items)
stance string[]Follow only these stances. (max 3 items)
offset integerFirst-level page start: next_offset from the previous call. (min 0, max 250000)

Evidence for an edge

Timeout 120s · Garden caselaw.citation-web

The sentence behind one edge of the citation web: the citing court's words a treatment, a history report, a review or an overruling was read from, with the opinion id and offset, the reading itself, the provenance tier and the reader's confidence. edge_id comes from any case-law answer. If the reading is wrong, the answer names the submit_data_feedback arguments to report it with.

Parameters

NameTypeDescription
edgeId reqstringedge_id from a case-law answer. (pattern ^[0-9a-f]{16}$)

Opinion text

Walked by case_research.

Search case law

Timeout 150s · Garden caselaw.passages

Search the full text of 6.9 million court decisions for a proposition ("Which cases hold that a warrantless vehicle search needs probable cause?"), a doctrine, the leading cases on a question, or a pasted passage. The court's own opinion is searched; dissents and concurrences are left out. Returns cases, each with the passage that matched, its court, level and date, how many opinions cite it, its good law and whether treatment was read for its court. Courts and dates named in the question become filters ("Ninth Circuit cases after 2010"); court, level and the date bounds set them directly. The answer's query.searched shows the terms that ran. To read a result, pass its case_id to read_case or list_citing_cases; a result with in_web false has no case_id and read_case cannot open it. The first search after a quiet spell may answer CASELAW_SEARCH_COLD while the index loads; call get_status with warm true and search again.

Parameters

NameTypeDescription
query reqstringA question, a doctrine, or pasted opinion text. (min length 2, max length 20000)
asOf stringOnly cases decided before this date. (pattern ^\d{4}-\d{2}-\d{2}$)
court string[]CourtListener court ids; replaces any the question names. (max 12 items)
level string[]Court levels to keep. (max 5 items)
decidedFrom stringOnly cases decided on or after this date. (pattern ^\d{4}-\d{2}-\d{2}$)
decidedTo stringOnly cases decided before this date. (pattern ^\d{4}-\d{2}-\d{2}$)
excludeCluster stringA cluster id to leave out, such as the case being briefed. (pattern ^\d{1,12}$)
limit integerHow many cases (default 10). (min 1, max 50)

The service itself

Check Antecedint Job

Timeout 120s

Read a background job: a tool called with async true returns a job_id at once and runs on the server; this returns its status (queued, running, succeeded or failed) and, once it has finished, the tool's result exactly as a direct call returns it. Pass wait_seconds (up to 25) to wait for the job in one call instead of polling. Start several slow calls as jobs in one turn, keep working, then read each here. A long result comes back a page at a time with pagination { page, pages, field, items, next }; call again with the next page. Any tool whose answer is too long for one page also returns a job_id for its remaining pages, read here the same way. Free, and it never counts against quota.

Parameters

NameTypeDescription
job_id reqstringThe whole job_id an async call returned, job_<id>.<key>. (min length 20, max length 80)
wait_seconds integerWait up to this long for the job to finish before answering. 0 answers at once. (min 0, max 25)
page integerWhich page of a long result to return, from pagination.next. Defaults to 1. (min 1, max 1000)

Read Antecedint Reference

Timeout 120s

Dated reference material: the USPTO fee schedule, the Patent Center filing steps, the rules for each specification section, the data gardens and the areas of law, and how background jobs work. With uri, returns that reference; with query (or nothing), lists the ones that match, each with its antecedint:// uri. The same content MCP resources serve. Free.

Parameters

NameTypeDescription
uri stringA reference uri, such as antecedint://service/jobs. Returns its content. (min length 12, max length 200, pattern ^antecedint://)
query stringWords to match against titles and descriptions, such as "fee". (min length 1, max length 200)

Report a data error

Timeout 120s

Report a value a garden served that is wrong, data that is missing, or something you cannot make sense of: a CPC code, a filing, priority or art date, a citation marked examiner-cited that the applicant cited, a family link, a §112 finding, an examiner statistic, a guidance section, a garden's stated hold. Free: it uses no credits and does not count toward request limits, up to 100 reports a day per account. When you find an error while working, file it here, and file what confuses you as well (kind unclear, with certainty unsure): a field you cannot explain or two tools that disagree is worth a report. Name the garden, the document id and field when there is one, the value served and the value it should be, and the evidence: what the source says and where. A decision model reads each report as it is filed; one that is specific, with evidence a reviewer could check, and new among your own reports earns 2 credits at once, up to 20 credits a day (the answer's screen says what it decided and why). A reviewer then reads it; an accepted one earns more (10 for a single value, 50 for an error that affects many results, 200 for a defect in a whole dataset), and nothing is paid for a rejected report or a repeat of an accepted one. Pass anonymous true to keep who filed it from reviewers; an anonymous report earns no credits. list_data_feedback shows what has been decided. Reports are stored and read by people, so describe the data error and leave out personal or confidential details about you, your client or your matter.

Parameters

NameTypeDescription
garden reqstringThe garden the value came from, in any area, such as ip.classification (list_gardens names them; every answer states its gardens). (pattern ^[a-z]+\.[a-z-]+$)
kind reqstringincorrect_value: a value is wrong. missing_data: something the garden should hold is absent. wrong_link: a relation (citation, family member, cross-reference) points at the wrong thing. unclear: a value or field you cannot explain, or two tools that disagree, without a claim about which is right. other: anything else. (one of incorrect_value, missing_data, wrong_link, unclear, other)
evidence reqstringWhy: what the source record says and where, such as the USPTO record, the patent text or the MPEP section. No personal or confidential details: this is stored and read by people. (min length 10, max length 4000)
document_id stringThe document, record or entry: a publication or application number, an MPEP section, a form paragraph code, a CPC symbol, an examiner id. (min length 1, max length 200)
field stringThe field or label, such as main_cpc, priority_date or examiner_cited, or the text of a hold. (min length 1, max length 200)
current_value stringThe value as served. (max length 2000)
proposed_value stringThe value it should be. (max length 2000)
sources string[]Links to the source record, up to 5. (max 5 items)
certainty stringHow sure you are: confirmed against a source record, likely, or unsure. Unsure reports are welcome. (one of confirmed, likely, unsure)
anonymous booleantrue hides who filed it from reviewers and the export. An anonymous report earns no credits; it still counts toward your daily cap and appears in your own list.

Judge search results

Timeout 120s

After a search (search_prior_art, ask, get_patent_neighborhood, find_case or any other), say which results were relevant and name better ones you found: a patent, publication or application number, or non-patent literature by title, DOI, URL or citation, with where it should have ranked, why, and the passage that discloses the point. These judgements are how the ranking is measured and retrained. Searches are not stored, so pass the query only if you want it kept (it is sealed when stored); without it the judgement of the results still counts. Free: no credits used and not counted toward request limits, in the same daily cap as data reports (100). A specific judgement, new among your own, earns 2 credits at once (up to 20 a day), and more when a reviewer accepts it. Pass anonymous true to keep who filed it from reviewers; it then earns no credits. Reports are stored and read by people, so describe the data error and leave out personal or confidential details about you, your client or your matter.

Parameters

NameTypeDescription
garden reqstringThe garden the search read, such as ip.prior-art (every answer names its gardens). (pattern ^[a-z]+\.[a-z-]+$)
note reqstringWhat the judgement rests on. No personal or confidential details: this is stored and read by people. (min length 10, max length 4000)
tool stringThe tool that ran the search, such as search_prior_art or ask. (pattern ^[a-z][a-z0-9_]{1,60}$)
query stringThe query or claim as searched. Optional, and kept only if sent; leave it out if it is confidential. (max length 20000)
as_of stringThe date bound the search used, if any. (pattern ^\d{4}(-\d{2}(-\d{2})?)?$)
filters objectOther filters the search used, such as cpc3 or excludeFamilyOf.
shown object[]The results as served, in rank order. Judge the ones you checked. (max 100 items)
better object[]Results the search should have returned: a patent number or non-patent literature. (max 25 items)
sources string[]Links to the better results, up to 5. (max 5 items)
certainty stringHow sure you are. (one of confirmed, likely, unsure)
anonymous booleantrue hides who filed it from reviewers and the export; it then earns no credits.

List data error reports

Timeout 120s

The data error reports this account has filed, newest first, each with its status (submitted, accepted, rejected, duplicate), the reward tier and credits granted when accepted, and the reviewer's note. Also how many were filed today against the cap of 100, and the credits earned in all. Pass id for one report.

Parameters

NameTypeDescription
status stringOnly reports with this status. (one of submitted, accepted, rejected, duplicate)
id stringOne report, by the feedback_id submit_data_feedback returned. (pattern ^fb_[A-Za-z0-9_-]{20}$)

Limits and timeouts

Limits are counted per key, not per IP, so two clients sharing a key share its budget. Every response carries RateLimit and RateLimit-Policy headers, so a client can pace itself without waiting to be refused.

Messages120 per minutePer key. Counts every JSON-RPC message, including tools/list and ping.
Tool calls30 per minutePer key. Counts only tools/call.
Requests1,000 per dayDefault on a new key. Set per key when it is issued.
Requests30,000 per monthDefault on a new key.

How long a call can take

These are analyses over 10.5M+ filings, not lookups, so some calls are slow. Each tool has its own ceiling: 120s for most, 180s for map_claim_support, which may fetch and read the specifications of every parent application in a continuity chain. The load balancer holds a connection open for 300s, so a call is never cut off before its own timeout fires.

Two knobs cost time when you turn them on: rerank on a prior-art search, which runs a late-interaction model over the top results, and includeParents on a claim-support map, which multiplies the work by the length of the chain. Set your client's timeout to match the tool you are calling rather than to a global default.

We do not publish latency percentiles yet. When we do, they will be measured against this deployment rather than a benchmark rig.

Transport

Reference for anyone debugging a client rather than writing one. If your host speaks MCP, you should not need any of it.

Method
POST only. GET and DELETE return 405 with an Allow: POST header.
Protocol
2025-11-25. Also accepts 2025-06-18, 2025-03-26 and 2024-11-05, echoes back the version it agreed to, and admits a dated revision newer than 2025-11-25 rather than refusing it.
Sessions
None. There is no Mcp-Session-Id to send or store, and no state to resume.
Body
application/json, up to 2 MB. Larger bodies get a 413.
Batches
Accepted for 2025-03-26 clients: up to 20 messages, of which at most 2 may be tools/call.
Streaming
Not used. Every response is a single JSON body.

Errors

Transport and authentication problems come back as HTTP status codes with a machine-readable code field.

StatusCodeCause
400UNSUPPORTED_PROTOCOL_VERSIONThe MCP-Protocol-Version header is malformed or names a revision older than 2024-11-05.
400BATCH_TOO_LARGEMore than 20 messages in one batch.
400BATCH_TOO_MANY_TOOL_CALLSMore than 2 tools/call in one batch. Send them as separate requests.
401MISSING_API_KEYNo Authorization header. The response carries a WWW-Authenticate challenge.
401INVALID_AUTH_FORMATThe header is not of the form "Bearer <key>".
401KEY_NOT_FOUNDThe key does not exist, is suspended, or is revoked.
401API_KEY_EXPIREDThe key is past its expiry date.
403ORIGIN_NOT_ALLOWEDA browser Origin header we do not allow. Server-to-server callers send no Origin and are unaffected.
403IP_NOT_WHITELISTEDThe key has an IP allowlist and the request came from outside it.
405Any method other than POST.
413Request body over 2 MB.
429MCP_RATE_LIMIT_EXCEEDEDOver the per-minute message limit.
429MCP_TOOL_RATE_LIMIT_EXCEEDEDOver the per-minute tool-call limit.
429USAGE_LIMIT_EXCEEDEDOver the daily or monthly quota. The body reports the limit it enforced and when it resets.
503The server is draining for a deploy. Retry.

A tool that runs and fails returns a normal JSON-RPC result with isError: true rather than a protocol error, so the model can read what went wrong and react. Protocol-level failures use the standard codes:

-32600Invalid Request. The body is not a JSON-RPC 2.0 message, or the batch was empty.
-32601Method not found.
-32602Invalid params, including a tool name that is not in the registry.
-32603Internal error. The tool failed rather than the transport.

Something behaving differently from this page is a bug we want to hear about: accelerate@antecedint.com. A wrong or missing record in the data is for your assistant to report with submit_data_feedback; a person reviews it, and an accepted report earns credits. Availability is on the status page.

Try it in the sandbox →