Documentation

MCP server

20 read-only tools over prior-art retrieval, patent space, and §112 claim analysis. One endpoint, one bearer token, 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 and count once.

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

Sign in

Connect

Most hosts take a URL and a header. Paste this into your client's config, restart it, and the 20 tools appear.

Client configuration
{
  "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"}'
Load your key above to run this.

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

Tools

Every tool is read-only: nothing here 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.

Prior Art Search

Timeout 120s

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. 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.

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). 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.
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. While it is off, each result carries title_source: "namespace", meaning the title came from the vector index rather than the authoritative lookup and may name another patent.
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

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.

Parameters

NameTypeDescription
appNumbers reqstring[]US application numbers, digits only. These are the application_number values a search returns. (max 25 items)

Patent Neighborhood

Timeout 120s

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)

Cited Prior Art Map

Timeout 120s

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)

Semantic Patent-Space Locate

Timeout 120s

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.

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 own abstract + first claim. (pattern ^\d{7,12}$)
topK integerNumber of nearest patents (default 20). (min 1, max 100)

Antecedent Basis Check

Timeout 120s

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

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.

Patent Whitespace Opportunities

Timeout 120s

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)

CPC Code Lookup

Timeout 120s

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

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}$)

Art Unit Profile

Timeout 120s

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}$)

Examiner Search

Timeout 120s

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

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).

Warm the Inference Hub

Timeout 120s

Start the encoder before you need it. The inference hub scales to zero, so the first search_prior_art or locate_in_patent_space after an idle period waits about 40 seconds for models to load. Call this first and that wait happens outside your search. Returns immediately by default with an estimate; pass wait to block until the models are ready instead of polling. Free, and it never counts against quota. Set rerank only if the search will set rerank, since the reranker costs another 25 seconds to load.

Parameters

NameTypeDescription
rerank booleanAlso load the ColBERT reranker. Only needed if the search that follows sets rerank; it adds about 25 seconds to the warm-up.
wait integerSeconds to block until the models are ready, up to 120. The default of 0 returns straight away with an estimate, which suits warming ahead of other work. Set it to turn a polling loop into one call. (min 0, max 120)

MPEP Section

Timeout 120s

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

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, e.g. g-ii-3.3 or c-iv-2. (pattern ^[0-9A-Za-z.\-]{1,40}$)

Office Action Form Paragraph

Timeout 120s

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

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)

Guidance Cross-References

Timeout 120s

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)

USPTO Design Search Code

Timeout 120s

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}$)

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 real analyses over 10.5M+ filings, not lookups, and the slow ones 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-06-18. Also accepts 2025-03-26 and 2024-11-05, and echoes back the version it agreed to.
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 names a version we do not speak.
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.