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 inConnect
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)
- 1Open Settings, then Connectors, and choose Add custom connector.
- 2Paste the URL below and save.
- 3Sign in to Antecedint when asked and approve the connection. There is no key to copy.
https://mcp.antecedint.com/api/v1/mcpClaude Code
- 1Add the server, then run /mcp inside Claude Code and choose Authenticate to sign in.
- 2To use a key instead of signing in, add --header "Authorization: Bearer ak_live_..." to the same command.
claude mcp add --transport http antecedint https://mcp.antecedint.com/api/v1/mcpCursor
- 1Add this to ~/.cursor/mcp.json, or to .cursor/mcp.json in one project.
- 2Cursor opens the sign-in page the first time a tool is called.
{
"mcpServers": {
"antecedint": {
"url": "https://mcp.antecedint.com/api/v1/mcp"
}
}
}VS Code (Copilot agent mode)
- 1Add this to .vscode/mcp.json in the workspace, or run MCP: Add Server from the command palette and choose HTTP.
- 2VS Code asks you to sign in when the server starts.
{
"servers": {
"antecedint": {
"type": "http",
"url": "https://mcp.antecedint.com/api/v1/mcp"
}
}
}ChatGPT
- 1Turn on developer mode under Settings, Apps and Connectors, Advanced.
- 2Create a connector with the URL below and choose OAuth as the authentication.
- 3Sign in to Antecedint when asked.
https://mcp.antecedint.com/api/v1/mcpGemini CLI
- 1Add this to ~/.gemini/settings.json, or to .gemini/settings.json in one project.
- 2Restart Gemini CLI, then run /mcp auth antecedint and sign in to Antecedint.
{
"mcpServers": {
"antecedint": {
"httpUrl": "https://mcp.antecedint.com/api/v1/mcp",
"oauth": {
"enabled": true
}
}
}
}Perplexity (Pro, Max or Enterprise)
- 1Open Account settings, then Connectors, and choose Custom connector, then Remote.
- 2Name it Antecedint, paste the URL below, choose OAuth and Streamable HTTP, and save.
- 3Sign in to Antecedint when asked.
https://mcp.antecedint.com/api/v1/mcpAny other host, or a script
- 1A host that does not sign in over OAuth takes the URL and a bearer header with your key.
- 2Keys are issued at https://antecedint.com/account; the evaluation tier is free.
{
"mcpServers": {
"antecedint": {
"url": "https://mcp.antecedint.com/api/v1/mcp",
"headers": {
"Authorization": "Bearer ak_live_..."
}
}
}
}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"}' 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.
| Tool | Name | What it does | Credits |
|---|---|---|---|
| Ask Antecedint | ask | 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. | free |
| List Antecedint Areas | list_areas | 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. | free |
| List Antecedint Gardens | list_gardens | The tuned data and the ways to walk it. | free |
| List Antecedint Tools | list_tools | 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. | free |
| Describe Antecedint Tool | describe_tool | 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 |
| Run Antecedint Tool | run_tool | Run any tool that reads: a search, a patent's text, a record, a chart, a guidance section. | the capability’s |
| Update Antecedint Workspace | update_workspace | Run 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 Job | get_job | 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. | free |
| Read Antecedint Reference | read_reference | 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. | free |
| Check Antecedint Status | get_status | What 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
| Fact | Value | n | Measured | Source |
|---|---|---|---|---|
| rows in the search namespace (US and EP records) | 9,848,869 | 2026-08-18 | sourcing/TURBOPUFFER_MEASURED.md | |
| share of search results that are non-US records (get_patent_claims cannot resolve them; each carries reachable: false) | 11.2% | 125 | 2026-09-09 | server/src/mcp/callContext.js |
| success@100 on the examiner-citation holdout ; population: 609,723 examiner-cited US patents, frozen corpus; not the live index | 0.5939 | 97,913 | 2026-09-11 | research/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 index | 0.4329 | 97,913 | 2026-09-11 | research/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.1438 | 0.1799 | 239 | 2026-07-28 | research/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
| Fact | Value | n | Measured | Source |
|---|---|---|---|---|
| citation rows in application_citations (examiner and applicant) | 391,716,310 | 2026-08-19 | research/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
| Fact | Value | n | Measured | Source |
|---|---|---|---|---|
| analysed gaps (voids) in the whitespace atlas | 1,792 | 2026-09-15 | server/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,752 | 2026-09-15 | server/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,748 | 2026-09-15 | server/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.
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
| Fact | Value | n | Measured | Source |
|---|---|---|---|---|
| examiner profiles | 10,308 | 2026-09-08 | loader manifest, GET /patent-intel/coverage | |
| art units with statistics | 596 | 2026-09-08 | loader 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
| Fact | Value | n | Measured | Source |
|---|---|---|---|---|
| publications with a main CPC symbol on record | 8,482,985 | 2026-09-08 | loader manifest, GET /patent-intel/coverage | |
| CPC scheme nodes | 261,024 | 2026-09-08 | loader manifest, GET /patent-intel/coverage | |
| symbols with empirical art-unit routing | 229,096 | 2026-09-08 | loader 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
| Fact | Value | n | Measured | Source |
|---|---|---|---|---|
| MPEP sections | 1,873 | 2026-09-08 | loader manifest, scripts/ops/guidance/plan.js | |
| EPO Guidelines sections | 1,641 | 2026-09-08 | loader manifest, scripts/ops/guidance/plan.js | |
| MPEP cross-reference graph nodes | 7,761 | 2026-09-08 | loader manifest, scripts/ops/guidance/plan.js | |
| MPEP cross-reference graph edges | 33,954 | 2026-09-08 | loader manifest, scripts/ops/guidance/plan.js | |
| EPO cross-reference graph nodes | 3,897 | 2026-09-08 | loader manifest, scripts/ops/guidance/plan.js | |
| EPO cross-reference graph edges | 13,240 | 2026-09-08 | loader 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
| Fact | Value | n | Measured | Source |
|---|---|---|---|---|
| form paragraphs | 401 | 2026-09-08 | loader 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
| Fact | Value | n | Measured | Source |
|---|---|---|---|---|
| USPTO design search codes | 1,589 | 2026-09-08 | loader 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
| Fact | Value | n | Measured | Source |
|---|---|---|---|---|
| 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% | 20 | 2026-10-15 | research/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% | 20 | 2026-10-15 | research/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% | 18 | 2026-10-15 | research/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
| Fact | Value | n | Measured | Source |
|---|---|---|---|---|
| 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% | 60 | 2026-10-15 | research/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% | 30 | 2026-10-15 | research/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% | 30 | 2026-10-15 | research/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% | 60 | 2026-10-15 | research/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% | 30 | 2026-10-15 | research/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% | 20 | 2026-10-15 | research/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.848 | 263 | 2026-10-13 | research/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.711 | 263 | 2026-10-13 | research/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% | 25 | 2026-10-15 | research/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
| Fact | Value | n | Measured | Source |
|---|---|---|---|---|
| passages searched | 110,143,104 | 2026-10-19 | caselaw/manifest/gardens.jsonl (case_passages_v2, 970cf29defd0) | |
| opinions held in full text | 6,887,931 | 2026-10-19 | caselaw/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.658 | 38 | 2026-10-19 | research/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.566 | 1,011 | 2026-10-19 | research/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% | 6 | 2026-10-19 | research/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.
| Type | Question | Walks | Encoder | Credits |
|---|---|---|---|---|
| prior_art_claim | What 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-art | yes | 10 |
| examiner_citations | What 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.citations | no | 1 |
| patent_landscape | What 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-map | yes | 3 |
| claim_defects | Which 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.claims | no | 1 |
| examiner_profile | Who 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.examiners | no | 1 |
| cpc_routing | Where 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.classification | no | 1 |
| examination_rule | Which 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-epo | no | 1 |
| form_paragraph | What 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-paragraphs | no | 1 |
| design_code | What 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-codes | no | 1 |
| case_treatment | Is 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.cases | no | 0 |
| case_lookup | Which 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.cases | no | 0 |
| case_authorities | What 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-web | no | 0 |
| case_research | Which 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.passages | no | 0 |
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
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
| Name | Type | Description |
|---|---|---|
| question req | string | The 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 | integer | Documents per answer (default 10). (min 1, max 100) |
| budget | integer | Character 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 | boolean | false returns ids, refs, scores and dates only (default true). What an evaluation or a dedup pass reads. |
| asOf | string | The 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 | string | The older name for asOf, honoured when asOf is absent. |
| excludeFamilyOf | string | US 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 | boolean | Run the ColBERT reranker in prior_art_claim (slower; loads a second model on a cold hub). |
| dig | boolean | prior_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 | boolean | Force 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 | boolean | Wait 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
| Name | Type | Description |
|---|---|---|
| area | string | One 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
| Name | Type | Description |
|---|---|---|
| corpus | string | Only gardens and questions over this corpus. (one of patents, prosecution, guidance, caselaw, tax) |
| id | string | One 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
| Name | Type | Description |
|---|---|---|
| area | string | An area id, such as ip. (pattern ^[a-z][a-z0-9_-]*$) |
| garden | string | A garden id, such as ip.records. (pattern ^[a-z]+\.[a-z-]+$) |
| path | string | A path id, such as ip.provisional. (pattern ^[a-z]+\.[a-z-]+$) |
| query | string | Words 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
| Name | Type | Description |
|---|---|---|
| tool req | string | The 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
| Name | Type | Description |
|---|---|---|
| warm | boolean | Start the search models if they are cold. |
| rerank | boolean | With warm, also load the reranker. |
| wait | integer | With warm, seconds to wait for the models to be ready. (min 0, max 120) |
| credits | integer | A 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
| Name | Type | Description |
|---|---|---|
| claims | string | Claim text (independent claim 1 works best). (min length 10, max length 20000) |
| abstract | string | Optional abstract or invention summary. (max length 10000) |
| count | integer | Number of references to return (default 50). (min 1, max 100) |
| rerank | boolean | Apply the ColBERT reranker to the top results (slower, higher precision). |
| filedBefore | string | Exclude 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 | string | A 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 | boolean | Also 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 | boolean | Rewrite 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 | boolean | Return 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
| Name | Type | Description |
|---|---|---|
| appNumbers req | string[] | US application numbers, digits only. These are the application_number values a search returns. (max 25 items) |
| format | string | parsed (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 | boolean | Return 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
| Name | Type | Description |
|---|---|---|
| appNum req | string | US application number, digits only. (pattern ^\d{7,12}$) |
| year | integer | Filing 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
| Name | Type | Description |
|---|---|---|
| query | string | Free-text technical description to locate. Provide either query or appNum. (min length 8, max length 4000) |
| appNum | string | US application number to locate by its stored vector; the application itself is excluded from the neighbours. (pattern ^\d{7,12}$) |
| topK | integer | Number 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
| Name | Type | Description |
|---|---|---|
| appNum req | string | US application number, digits only (7-12 digits). (pattern ^\d{7,12}$) |
| topK | integer | Number 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
| Name | Type | Description |
|---|---|---|
| limit | integer | Max gaps to return (default 100). (min 1, max 500) |
| section | string | CPC section letter filter (A-H, Y). (pattern ^[A-HYa-hy]$) |
| minOpportunity | number | Minimum 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
| Name | Type | Description |
|---|---|---|
| claims | object[] | The claim set, in order. Provide either claims or appNum. (max 300 items) |
| appNum | string | US application number, digits only; pulls the claims from the warehouse. (pattern ^\d{7,8}$) |
| minSeverity | string | Lowest severity to report (default low = everything). (one of high, medium, low) |
| includeSuppressed | boolean | Also 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
| Name | Type | Description |
|---|---|---|
| appNum | string | US 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 | boolean | Walk the continuity chain and check each parent spec for support (default true when appNum is given). |
| maxAncestors | integer | Cap on ancestors to check (default 6). (min 0, max 12) |
| ocr | boolean | Allow 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
| Name | Type | Description |
|---|---|---|
| name | string | Surname, or a prefix of the surname-first full name. (min length 2, max length 80) |
| artUnit | string | Restrict to one art unit. (pattern ^\d{3,4}$) |
| limit | integer | Maximum 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
| Name | Type | Description |
|---|---|---|
| examiner req | string | Examiner id, or USPTO surname-first full name. (min length 2, max length 120) |
| include | string | Comma-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
| Name | Type | Description |
|---|---|---|
| artUnit req | string | USPTO 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
| Name | Type | Description |
|---|---|---|
| code req | string | CPC symbol, e.g. C11D or C11D7/261. (pattern ^[A-HYa-hy][0-9A-Za-z/]{0,18}$) |
| childLimit | integer | How many child symbols to return (default 50). (min 0, max 500) |
| distributionLimit | integer | How 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
| Name | Type | Description |
|---|---|---|
| number req | string | Publication 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
| Name | Type | Description |
|---|---|---|
| sectionId req | string | MPEP 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
| Name | Type | Description |
|---|---|---|
| sectionId req | string | EPO 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
| Name | Type | Description |
|---|---|---|
| nodeId req | string | Graph node id, prefixed mpep- or epo-. (pattern ^(mpep|epo)-[0-9A-Za-z.()\-]{1,40}$) |
| limit | integer | Maximum 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
| Name | Type | Description |
|---|---|---|
| code req | string | Form 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
| Name | Type | Description |
|---|---|---|
| rejectionType | string | A 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 | string | MPEP section the paragraph rests on, e.g. 706, 707 or 2175. (pattern ^[0-9A-Za-z.()\-]{1,40}$) |
| limit | integer | How 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
| Name | Type | Description |
|---|---|---|
| code req | string | Design 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
| Name | Type | Description |
|---|---|---|
| query req | string | A case name, a reporter citation or a CourtListener opinion id. (min length 1, max length 300) |
| asOf | string | Only 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 | boolean | Only opinions the web has read, not cases it knows from citations alone. |
| limit | integer | How 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
| Name | Type | Description |
|---|---|---|
| id req | string | Case id from find_case. (pattern ^(\d{1,12}|(?:key:)?\d{1,5}\|[A-Za-z0-9.]{1,24}\|\d{1,6})$) |
| asOf | string | Read 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
| Name | Type | Description |
|---|---|---|
| id req | string | Case id from find_case. (pattern ^(\d{1,12}|(?:key:)?\d{1,5}\|[A-Za-z0-9.]{1,24}\|\d{1,6})$) |
| asOf | string | Only 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 | string | treatment (most negative first, the default), newest, oldest or most_mentions. (one of treatment, newest, oldest, most_mentions) |
| limit | integer | Page size (default 25). (min 1, max 100) |
| offset | integer | Page 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 | string | Citing opinions decided on or after this date. (pattern ^\d{4}-\d{2}-\d{2}$) |
| decidedTo | string | Citing 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
| Name | Type | Description |
|---|---|---|
| id req | string | Case id from find_case. (pattern ^(\d{1,12}|(?:key:)?\d{1,5}\|[A-Za-z0-9.]{1,24}\|\d{1,6})$) |
| asOf | string | Only 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 | string | treatment (most negative first, the default), newest, oldest or most_mentions. (one of treatment, newest, oldest, most_mentions) |
| limit | integer | Page size (default 25). (min 1, max 100) |
| offset | integer | Page 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
| Name | Type | Description |
|---|---|---|
| id req | string | Case id from find_case. (pattern ^(\d{1,12}|(?:key:)?\d{1,5}\|[A-Za-z0-9.]{1,24}\|\d{1,6})$) |
| asOf | string | The 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
| Name | Type | Description |
|---|---|---|
| id req | string | Case id from find_case. (pattern ^(\d{1,12}|(?:key:)?\d{1,5}\|[A-Za-z0-9.]{1,24}\|\d{1,6})$) |
| direction | string | in follows who cites (default); out follows what is cited. (one of in, out) |
| depth | integer | Levels to walk (default 2). (min 1, max 2) |
| fanout | integer | Edges kept per node (default 10). (min 1, max 25) |
| asOf | string | Only 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 | integer | First-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
| Name | Type | Description |
|---|---|---|
| edgeId req | string | edge_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
| Name | Type | Description |
|---|---|---|
| query req | string | A question, a doctrine, or pasted opinion text. (min length 2, max length 20000) |
| asOf | string | Only 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 | string | Only cases decided on or after this date. (pattern ^\d{4}-\d{2}-\d{2}$) |
| decidedTo | string | Only cases decided before this date. (pattern ^\d{4}-\d{2}-\d{2}$) |
| excludeCluster | string | A cluster id to leave out, such as the case being briefed. (pattern ^\d{1,12}$) |
| limit | integer | How 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
| Name | Type | Description |
|---|---|---|
| job_id req | string | The whole job_id an async call returned, job_<id>.<key>. (min length 20, max length 80) |
| wait_seconds | integer | Wait up to this long for the job to finish before answering. 0 answers at once. (min 0, max 25) |
| page | integer | Which 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
| Name | Type | Description |
|---|---|---|
| uri | string | A reference uri, such as antecedint://service/jobs. Returns its content. (min length 12, max length 200, pattern ^antecedint://) |
| query | string | Words 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
| Name | Type | Description |
|---|---|---|
| garden req | string | The 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 req | string | incorrect_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 req | string | Why: 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 | string | The 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 | string | The 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 | string | The value as served. (max length 2000) |
| proposed_value | string | The value it should be. (max length 2000) |
| sources | string[] | Links to the source record, up to 5. (max 5 items) |
| certainty | string | How sure you are: confirmed against a source record, likely, or unsure. Unsure reports are welcome. (one of confirmed, likely, unsure) |
| anonymous | boolean | true 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
| Name | Type | Description |
|---|---|---|
| garden req | string | The garden the search read, such as ip.prior-art (every answer names its gardens). (pattern ^[a-z]+\.[a-z-]+$) |
| note req | string | What the judgement rests on. No personal or confidential details: this is stored and read by people. (min length 10, max length 4000) |
| tool | string | The tool that ran the search, such as search_prior_art or ask. (pattern ^[a-z][a-z0-9_]{1,60}$) |
| query | string | The query or claim as searched. Optional, and kept only if sent; leave it out if it is confidential. (max length 20000) |
| as_of | string | The date bound the search used, if any. (pattern ^\d{4}(-\d{2}(-\d{2})?)?$) |
| filters | object | Other 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 | string | How sure you are. (one of confirmed, likely, unsure) |
| anonymous | boolean | true 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
| Name | Type | Description |
|---|---|---|
| status | string | Only reports with this status. (one of submitted, accepted, rejected, duplicate) |
| id | string | One 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.
| Messages | 120 per minute | Per key. Counts every JSON-RPC message, including tools/list and ping. |
| Tool calls | 30 per minute | Per key. Counts only tools/call. |
| Requests | 1,000 per day | Default on a new key. Set per key when it is issued. |
| Requests | 30,000 per month | Default 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.
| Status | Code | Cause |
|---|---|---|
| 400 | UNSUPPORTED_PROTOCOL_VERSION | The MCP-Protocol-Version header is malformed or names a revision older than 2024-11-05. |
| 400 | BATCH_TOO_LARGE | More than 20 messages in one batch. |
| 400 | BATCH_TOO_MANY_TOOL_CALLS | More than 2 tools/call in one batch. Send them as separate requests. |
| 401 | MISSING_API_KEY | No Authorization header. The response carries a WWW-Authenticate challenge. |
| 401 | INVALID_AUTH_FORMAT | The header is not of the form "Bearer <key>". |
| 401 | KEY_NOT_FOUND | The key does not exist, is suspended, or is revoked. |
| 401 | API_KEY_EXPIRED | The key is past its expiry date. |
| 403 | ORIGIN_NOT_ALLOWED | A browser Origin header we do not allow. Server-to-server callers send no Origin and are unaffected. |
| 403 | IP_NOT_WHITELISTED | The key has an IP allowlist and the request came from outside it. |
| 405 | Any method other than POST. | |
| 413 | Request body over 2 MB. | |
| 429 | MCP_RATE_LIMIT_EXCEEDED | Over the per-minute message limit. |
| 429 | MCP_TOOL_RATE_LIMIT_EXCEEDED | Over the per-minute tool-call limit. |
| 429 | USAGE_LIMIT_EXCEEDED | Over the daily or monthly quota. The body reports the limit it enforced and when it resets. |
| 503 | The 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:
| -32600 | Invalid Request. The body is not a JSON-RPC 2.0 message, or the batch was empty. |
| -32601 | Method not found. |
| -32602 | Invalid params, including a tool name that is not in the registry. |
| -32603 | Internal error. The tool failed rather than the transport. |
Claude
ChatGPT
~/.gemini/settings.json
Perplexity