Skip to main content
Glama
riemannzeta

USPTO Patent MCP Server

by riemannzeta

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
LOG_LEVELNoLogging level. Options: DEBUG, INFO, WARNING, ERROR, CRITICALINFO
MAX_RETRIESNoMaximum number of retry attempts3
API_BASE_URLNoBase URL for ODP API (usually does not need to change)https://api.uspto.gov
USPTO_API_KEYNoYour USPTO Open Data Portal API key. Required for ODP and PTAB tools.
ENABLE_CACHINGNoEnable/disable session caching. Set to 'true' or 'false'.true
PPUBS_BASE_URLNoBase URL for PPUBS API (usually does not need to change)https://ppubs.uspto.gov
RETRY_MAX_WAITNoMaximum wait time between retries (seconds)10
RETRY_MIN_WAITNoMinimum wait time between retries (seconds)2
REQUEST_TIMEOUTNoRequest timeout in seconds30.0
SESSION_EXPIRY_MINUTESNoHow long to cache ppubs sessions (minutes)30

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
check_api_statusA

Check status and availability of all patent and trademark data sources.

USE THIS TOOL WHEN: You encounter errors or want to verify which APIs
are available and properly configured before starting research.

Returns status of each data source including:
- Configuration status (API keys, credentials)
- Connection availability
- Rate limit information where available
get_cpc_infoA

Look up a CPC (Cooperative Patent Classification) symbol at any depth.

USE THIS TOOL WHEN: You need the title of a CPC code — section (G),
class (G06), subclass (G06N), main group (G06N 3/00) or subgroup
(G06N 3/08) — its place in the hierarchy, or the groups beneath it,
whether reading the codes on a patent or choosing codes for a
`.cpc.` search.

Sections and classes come from a bundled table. Subclasses and groups
come from USPTO's published CPC scheme page for the subclass (one
fetch per subclass per day, no key), so titles track the current CPC
version.

Args:
    cpc_code: Any CPC symbol form: "G06N3/08", "G06N 3/08",
           "H04B7/0417 20130101" (as PPUBS prints it), "G06N", "G06",
           "G".

Returns:
    Section: title, description and its classes. Class: section and
    class titles. Subclass or group: `title`, `level`, `hierarchy`
    from the subclass down to the code, direct `children`, and the
    source page. If the scheme page cannot be fetched, the static
    section and class titles come back with a `scheme_error`.
get_status_codeA

Look up USPTO application status code meaning.

USE THIS TOOL WHEN: You encounter a status code in application data
and need to understand what examination stage it represents.

Args:
    code: Status code number (e.g., "30" for "Docketed New Case")

Returns:
    Status code description and examination stage.
ppubs_search_patentsA

Search granted US patents in Patent Public Search (ppubs.uspto.gov).

USE THIS TOOL WHEN: You need full-text search of US patents with daily
updates, or need access to the most recent patent filings.

Args:
    query: Search query using USPTO BRS syntax. Multi-word terms are
           AND-ed across all fields by default — quote phrases that
           must appear together. Examples:
           - '"machine learning"' - exact phrase, all fields
           - machine learning - both terms anywhere (AND)
           - '"neural network".ti.' - title contains phrase
           - smith.in. AND IBM.as. - inventor Smith, assignee IBM
           - G06N3/08.cpc. - CPC classification
           Field qualifiers are dotted suffixes (.ti., .ab., .in.,
           .as., .cpc., .pn.) — the legacy slash-prefix forms
           (TTL/, IN/, AN/, CPC/) no longer work: they silently
           return 0 results, and TTL/"phrase" returns a server 500.
           Default `sort="date_publ desc"` means broad queries return
           the latest grants first — narrow with field qualifiers
           to get relevant matches.
    offset: Starting position for pagination (default: 0)
    limit: Maximum results to return (default: 20, max: 500). Results
           over the token budget are cut to 20 anyway, so raise this
           only when paging with `offset`.
    sort: Sort order (default: "date_publ desc")

Returns:
    Normalized response with patent results including GUID, title,
    abstract, dates, inventors, and classification codes.
ppubs_search_applicationsA

Search published US patent applications in Patent Public Search.

USE THIS TOOL WHEN: You need to search pre-grant published applications
(applications publish 18 months after filing, before grant).

Args:
    query: Search query using USPTO BRS syntax (same as
           ppubs_search_patents). Multi-word terms are AND-ed —
           quote phrases that must appear together (e.g.
           '"machine learning"'). Field qualifiers are dotted
           suffixes (.ti., .ab., .in., .as., .cpc.) — the legacy
           slash-prefix forms (TTL/, IN/) no longer work.
    offset: Starting position for pagination (default: 0)
    limit: Maximum results to return (default: 20, max: 500). Results
           over the token budget are cut to 20 anyway, so raise this
           only when paging with `offset`.
    sort: Sort order (default: "date_publ desc")

Returns:
    Normalized response with application results.
ppubs_get_full_documentA

Get complete patent document by GUID from PPUBS.

USE THIS TOOL WHEN: You have a document GUID from search results
and need the patent text. A whole document runs 20-40k tokens, most
of it the description — ask for `sections` when you need less.

Args:
    guid: Document GUID (e.g., "US-9876543-B2")
    source_type: Document type - "USPAT" for patents, "US-PGPUB" for applications
    sections: Which parts to return; omit for everything. Any of
           "biblio" (front-page data: parties, dates, classification,
           references cited), "abstract", "claims", "description".
           ["biblio", "claims"] answers most questions in ~5k tokens.

Returns:
    Document with the requested sections. Empty fields and search
    highlight fields are dropped.
ppubs_get_patent_by_numberA

Get a granted patent's full text by patent number.

USE THIS TOOL WHEN: You know the patent number and need the patent
text. A whole document runs 20-40k tokens, most of it the
description — ask for `sections` when you need less.

Args:
    patent_number: Patent number. Separators, a leading "US" and a
           kind code are ignored, and design/reissue/plant prefixes
           are kept: "7123456", "US 10,000,000 B2", "D845123",
           "RE49123" all work.
    sections: Which parts to return; omit for everything. Any of
           "biblio" (front-page data: parties, dates, classification,
           references cited), "abstract", "claims", "description".
           ["biblio", "claims"] answers most questions in ~5k tokens.

Returns:
    Patent document with the requested sections. Empty fields and
    search highlight fields are dropped.
ppubs_download_patent_pdfA

Download a patent as PDF (base64 encoded).

USE THIS TOOL WHEN: You need the official PDF document of a patent.
Note: Claude Desktop may not fully support PDF display.

Args:
    patent_number: Patent number ("7123456", "US 10,000,000 B2",
           "D845123" and "RE49123" all work).

Returns:
    Dictionary with base64-encoded PDF data.
ppubs_get_citing_patentsA

Find later granted patents that cite a patent (forward citations).

USE THIS TOOL WHEN: You want to know who built on a patent, gauge its
influence, or find later art in the same space. This is the working
replacement for the decommissioned Enriched Citation API. For the
references a patent itself cites (backward citations), read its front
page instead: ppubs_get_patent_by_number(number, sections=["biblio"])
returns them in usRefGroup, foreignRefGroup and otherRefPub.

Searches the references-cited field (.urpn.) of granted patents.
Published applications do not index that field, so citing
applications that have not yet issued are not included. Verified live
2026-09-26.

Args:
    patent_number: The cited patent ("7123456", "US 10,000,000 B2",
           "D845123" and "RE49123" all work)
    offset: Starting position for pagination (default: 0)
    limit: Maximum results to return (default: 20, max: 500)
    sort: Sort order (default: "date_publ desc", newest citing patent first)

Returns:
    Normalized search response; `total` is the forward-citation count
    and each result is a citing patent with GUID, title, dates,
    inventors and classification.
odp_get_applicationA

Get patent application data from USPTO Open Data Portal.

USE THIS TOOL WHEN: You need prosecution/file wrapper data for an
application including status, dates, and basic metadata.

Args:
    app_num: Application number without slashes or commas (e.g., "14412875")

Returns:
    Application data including filing date, status, and basic info.
odp_get_application_metadataA

Get detailed metadata for a patent application.

USE THIS TOOL WHEN: You need comprehensive application metadata
including examiner info, art unit, and detailed status.

Args:
    app_num: Application number without slashes (e.g., "14412875")
odp_get_continuityA

Get patent family/continuity data (parent and child applications).

USE THIS TOOL WHEN: You need to understand the patent family tree -
parent applications, continuations, divisionals, and CIPs.

Args:
    app_num: Application number without slashes (e.g., "14412875")

Returns:
    Continuity data showing parent/child relationships and priority claims.
odp_get_assignmentA

Get patent assignment/ownership records.

USE THIS TOOL WHEN: You need to know current and historical owners
of a patent or application.

Args:
    app_num: Application number without slashes (e.g., "14412875")
odp_get_adjustmentA

Get patent term adjustment (PTA) data.

USE THIS TOOL WHEN: You need to calculate the actual expiration date
of a patent accounting for USPTO delays.

Args:
    app_num: Application number without slashes (e.g., "14412875")
odp_get_attorneyB

Get attorney/agent of record for an application.

Args:
    app_num: Application number without slashes (e.g., "14412875")
odp_get_foreign_priorityA

Get foreign priority claims for an application.

USE THIS TOOL WHEN: You need to find priority claims to foreign
applications that may affect the effective filing date.

Args:
    app_num: Application number without slashes (e.g., "14412875")
odp_get_transactionsA

Get prosecution transaction history for an application.

USE THIS TOOL WHEN: You need the complete timeline of prosecution
events including office actions, responses, and fee payments.

Args:
    app_num: Application number without slashes (e.g., "14412875")
odp_get_documentsA

List the documents in an application's file wrapper (prosecution history).

USE THIS TOOL WHEN: You need to find office actions, responses,
notices of allowance, claims, IDS forms or examiner citations for an
application, then read one with odp_download_document.

Args:
    app_num: Application number without slashes (e.g., "14412875")
    document_code: Comma-separated USPTO document codes to keep. Common
           ones: CTNF (non-final rejection), CTFR (final rejection),
           NOA (notice of allowance), REM (applicant remarks/arguments),
           CLM (claims), SPEC (specification), IDS and 1449 (applicant
           citations), 892 (examiner citations), ADS, N417 (EFS receipt).
           `metadata.code_counts` in any response lists every code in
           the wrapper.
    direction: "INCOMING" (from applicant), "OUTGOING" (from USPTO) or
           "INTERNAL" (examiner search notes etc.)
    offset: Starting position within the filtered list (default: 0)
    limit: Max documents to return (default: 50)

Returns:
    Documents newest first, each with documentIdentifier (pass it to
    odp_download_document), documentCode, description, officialDate,
    directionCategory, page count and available formats.
odp_download_documentA

Read one file-wrapper document, as plain text or as a PDF.

USE THIS TOOL WHEN: odp_get_documents or odp_search_office_actions
gave you a document identifier and you need to read the office
action, applicant's remarks (REM), claims (CLM), notice of allowance,
petition decision or other paper itself.

Prefer format="text": it returns the paper's body as plain text (an
office action is typically 10-20k characters) from the XML USPTO
publishes with the document. Claim amendments keep their markup,
deletions as ~~text~~ and insertions as ++text++. Applicant papers
are OCR text and can carry OCR errors. Documents listed with an
"XML" format have text; others (older papers, drawings) return
NO_TEXT_AVAILABLE, and format="pdf" still works for them.

Args:
    app_num: Application number without slashes (e.g., "16123456")
    document_id: documentIdentifier from odp_get_documents, or
           document_id from odp_search_office_actions
           (e.g., "K87AK41FRXEAPX5")
    format: "text" (plain text) or "pdf" (base64 PDF, the default)
    text_offset: With format="text", the character to start from.
           Long papers come back in 24k-character pages; pass the
           previous response's next_offset to continue.

Returns:
    format="text": {"success": True, "text", "total_chars",
    "text_offset", "next_offset" (None when done), "source_file"}.
    format="pdf": {"success": True, "filename", "content_type",
    "size_bytes", "content"} with the PDF as base64. Documents over
    4 MB are refused with RESPONSE_TOO_LARGE. Requires USPTO_API_KEY.
odp_search_applicationsA

Search patent applications in USPTO Open Data Portal.

USE THIS TOOL WHEN: You need to search applications with filtering
by applicant metadata, dates, or other criteria not available in PPUBS.

Supports both free-text queries and structured multi-field filtering.
Typed filters are AND-ed together; pass a Lucene-style string in
`query` for OR or more complex expressions.

Args:
    query: Free-text or Lucene-style query (e.g. 'neural network',
           'applicationMetaData.firstInventorName:Smith OR
           applicationMetaData.firstInventorName:Jones')
    application_number: Filter by application number (exact match)
    patent_number: Filter by patent number (exact match)
    inventor_name: Filter by inventor name (matches first inventor)
    assignee_name: Filter by applicant/assignee name (matches first applicant)
    filing_date_from: Filing date range start (YYYY-MM-DD)
    filing_date_to: Filing date range end (YYYY-MM-DD)
    offset: Starting position (default: 0)
    limit: Max results (default: 25)

Returns:
    Normalized response with matching applications.
odp_search_office_actionsA

Search office actions across all applications by what the examiner wrote.

USE THIS TOOL WHEN: You need to find office actions across many
applications by their text ("means-plus-function", "Alice",
"inherent anticipation"), by statute (101/102/103/112), by art unit
or by date, or to count them. metadata.facets gives document-code and
rejection-type counts for the whole match set, so limit=1 answers
"how many 101 rejections did art unit 3689 issue in 2026" in one call.
For one application's history, odp_get_documents is cheaper.

IMPORTANT: text_preview holds only the first 500 characters. The API
searches the full text but returns no more. To read a hit, pass its
app_num and document_id to odp_download_document(format="text").

Coverage: office actions mailed from mid-2007 on (19.9M records).
Typed filters are AND-ed; pass a Lucene string in `query` for OR.

Args:
    query: Lucene query; bare words search everything, or name a field
           such as officeActionText:"printed matter"
    app_num: Application number without slashes (e.g. "18402543")
    patent_number: Patent number; resolved to its application first
    document_code: Comma-separated codes: CTNF (non-final rejection),
           CTFR (final rejection), NOA (allowance), CTRS (restriction),
           CTAV (advisory), APEA (examiner's answer), PETDEC
    rejection_type: Comma-separated statutes, all of which must apply:
           101, 102, 103, 112, DoublePatent, Other
    art_unit: Group art unit (e.g. "3689")
    date_from: Earliest mail (submission) date, YYYY-MM-DD
    date_to: Latest mail (submission) date, YYYY-MM-DD
    record_id: officeActionRecordIdentifier from an earlier result
    sort: "newest" (default) or "oldest" by mail date
    offset: Starting position (default: 0)
    limit: Max results (default: 25, at most 100)

Returns:
    Office actions with record_id, app_num, document_code, description,
    submission_date, art_unit, title, rejection_types, document_id and
    text_preview, plus metadata.facets.
odp_search_petition_decisionsA

Search USPTO decisions on patent petitions.

USE THIS TOOL WHEN: You need petition decisions on reviving abandoned
applications, reinstating patents after a missed maintenance fee,
delayed priority claims, petitions to make special, or supervisory
review of an examiner, or want to see how the Office of Petitions has
ruled on an argument (search its text with `query`). metadata.facets
gives outcome, deciding-office and petition-type counts for the whole
match set, so grant rates take one call.

Coverage: 1.1M decisions, 1991 on. The text is OCR and can be noisy
("EENITED STATES"), so prefer single terms or proximity
(ocrSearchText:"unintentional delay"~3) to long exact phrases. Typed
filters are AND-ed; pass a Lucene string in `query` for OR.

Args:
    query: Lucene query; bare words search everything, or name a field
           such as ocrSearchText:"unintentional delay"
    app_num: Application number without slashes
    patent_number: Patent number
    petition_type: Numeric petition type code (e.g. "533", reinstate
           patent for delayed maintenance fee) or words from its
           description (e.g. "revive")
    outcome: GRANTED, GRANTED-IN-PART, DENIED or DISMISSED
    deciding_office: e.g. "Office of Petitions", "Technology Center",
           "International Division"
    technology_center: e.g. "2600"
    date_from: Earliest decision date, YYYY-MM-DD
    date_to: Latest decision date, YYYY-MM-DD
    final_only: Only decisions marked final agency action (in the data
           so far, exactly the DENIED decisions)
    record_id: petitionDecisionRecordIdentifier from an earlier result
    include_full_text: Add each decision's full OCR text as full_text
           (about 1.5-3k characters each, prefixed by the record's
           metadata). Off by default.
    sort: "newest" (default) or "oldest" by decision date
    offset: Starting position (default: 0)
    limit: Max results (default: 25, at most 100)

Returns:
    Decisions with record_id, app_num, patent_number, dates, petition
    type, outcome, deciding office, final_decision, text (an excerpt,
    with query matches marked «like this») and documents (pass a
    documentIdentifier and app_num to odp_download_document with
    format="text" for the decision letter), plus metadata.facets.
odp_search_datasetsA

Search USPTO bulk data products/datasets.

USE THIS TOOL WHEN: You need to find bulk download datasets
available from USPTO for large-scale analysis.

Args:
    query: Search query for dataset names/descriptions
    offset: Starting position (default: 0)
    limit: Max results (default: 25)
odp_get_datasetB

Get details of a specific bulk dataset product.

Args:
    product_id: Dataset product identifier
ptab_search_proceedingsA

Search PTAB trial proceedings (IPR, PGR, CBM, derivation).

USE THIS TOOL WHEN: You need to find patent validity challenges at
the Patent Trial and Appeal Board. Live via USPTO ODP v3.0.

Trial types:
- IPR: Inter Partes Review (most common, based on patents/publications)
- PGR: Post-Grant Review (broader grounds, within 9 months of grant)
- CBM: Covered Business Method (for financial method patents, sunsetted)
- DER: Derivation proceedings

Args:
    query: Full-text search query
    trial_type: Type of trial (IPR, PGR, CBM, DER)
    patent_number: Patent number being challenged
    party_name: Petitioner or patent owner name
    filing_date_from: Filing date range start (YYYY-MM-DD)
    filing_date_to: Filing date range end (YYYY-MM-DD)
    status: Proceeding status (Pending, Instituted, Terminated, FWD Entered)
    offset: Starting position (default: 0)
    limit: Max results (default: 25)

Returns:
    Normalized response with matching proceedings.
ptab_get_proceedingA

Get details of a specific PTAB proceeding. Live via USPTO ODP v3.0.

Args:
    proceeding_number: Proceeding number (e.g., "IPR2023-00001")

Returns:
    Proceeding details including parties, patent, status, and dates.
ptab_get_documentsB

Get documents filed in a PTAB proceeding. Live via USPTO ODP v3.0.

Args:
    proceeding_number: Proceeding number (e.g., "IPR2023-00001")
    document_type: Filter by type (petition, response, declaration, etc.)
    offset: Starting position (default: 0)
    limit: Max results (default: 25)
ptab_search_decisionsB

Search PTAB trial decisions. Live via USPTO ODP v3.0.

Args:
    query: Full-text search in decision text
    decision_type: Type (institution, final, termination)
    proceeding_number: Filter by proceeding number
    patent_number: Filter by patent number
    decision_date_from: Date range start (YYYY-MM-DD)
    decision_date_to: Date range end (YYYY-MM-DD)
    offset: Starting position (default: 0)
    limit: Max results (default: 25)
ptab_get_decisionB

Get details of a specific PTAB decision. Live via USPTO ODP v3.0.

Args:
    decision_id: Decision identifier (trial number, e.g. IPR2022-00001)
ptab_search_appealsA

Search ex parte appeal decisions. Live via USPTO ODP v3.0.

Args:
    query: Full-text search query
    application_number: Filter by application number
    patent_number: Filter by patent number
    decision_date_from: Date range start (YYYY-MM-DD)
    decision_date_to: Date range end (YYYY-MM-DD)
    offset: Starting position (default: 0)
    limit: Max results (default: 25)
ptab_get_appealC

Get details of a specific ex parte appeal decision. Live via USPTO ODP v3.0.

Args:
    appeal_number: Appeal number
tsdr_get_trademark_statusA

Get current status of a trademark application or registration from TSDR.

USE THIS TOOL WHEN: You have a trademark serial number or registration
number and need its authoritative live status, mark text, owner,
international classes, filing/registration dates, or prosecution stage.
TSDR is the official USPTO status source (requires API key).

Exactly one of serial_number or registration_number is required.

Args:
    serial_number: 8-digit application serial number (e.g., "78787878")
    registration_number: Registration number (e.g., "3500027")

Returns:
    Normalized response with the trademark status record.
tsdr_list_trademark_documentsA

List prosecution document metadata for a trademark (no downloads).

USE THIS TOOL WHEN: You want to see what file-wrapper documents exist
for a trademark application (office actions, responses, specimens,
registration certificates) before downloading anything. Unlike
tsdr_download_trademark_documents, this returns metadata only and is
NOT subject to the 4 req/min PDF rate limit. Use the DocumentTypeCode
values it returns (e.g. "OOA", "SPE") as the document_type filter when
downloading.

Args:
    serial_number: 8-digit application serial number (e.g., "78787878")

Returns:
    Document metadata records (type, description, dates).
tsdr_download_trademark_documentsA

Download the prosecution document bundle for a trademark as PDF (base64).

USE THIS TOOL WHEN: You need office actions, responses, specimens, or
other file-wrapper documents for a trademark application.

NOTE: TSDR limits PDF downloads to 4 requests per minute per API key,
and unfiltered full wrappers can exceed 10 MB (rejected with
RESPONSE_TOO_LARGE above 4 MB). Call tsdr_list_trademark_documents
first, then filter by document_type and/or date range.

Args:
    serial_number: 8-digit application serial number (e.g., "78787878")
    document_type: Optional document type filter (e.g., "OOA" for
        outgoing office actions, "SPE" for specimens)
    date_from: Optional start date filter (YYYY-MM-DD)
    date_to: Optional end date filter (YYYY-MM-DD)

Returns:
    Dictionary with base64-encoded PDF data.
tsdr_get_trademark_imageA

Get the mark image (drawing) for a trademark as base64.

USE THIS TOOL WHEN: You need the visual representation of a design mark
or stylized word mark.

Args:
    serial_number: 8-digit application serial number (e.g., "78787878")

Returns:
    Dictionary with base64-encoded image data.
tm_search_trademarksA

Search US federal trademark applications and registrations.

USE THIS TOOL WHEN: You need to find trademarks by mark text, owner,
goods/services description, or Nice/international class — e.g.
clearance/knockout searches for a proposed mark, or mapping a company's
trademark portfolio.

NOTE: Backed by the undocumented internal API behind tmsearch.uspto.gov
(the TESS replacement) — same risk profile as PPUBS; may break without
notice. For authoritative status of a specific mark, use
tsdr_get_trademark_status. Federal marks only (no common-law/state marks).

Args:
    query: Raw query string for advanced searches
    mark_text: Word mark text to search (e.g., "ACME")
    owner_name: Owner/applicant name to search
    goods_services: Goods/services description terms (e.g., "athletic
        footwear") — useful for clearance searches across wording
    registration_number: Exact registration number to look up
    international_class: Nice class number 1-45 (e.g., "9" for software;
        use get_trademark_class_info to look up classes)
    status_filter: "live" (active marks), "dead" (abandoned/cancelled/
        expired), or omit for both
    offset: Starting position for pagination (default: 0)
    limit: Maximum results to return (default: 25, max: 100)

Returns:
    Normalized response with matching trademark records.
tm_get_trademarkA

Get a trademark's search-index record by serial number.

USE THIS TOOL WHEN: You have a serial number from tm_search_trademarks
results and want the full indexed record. For authoritative live status,
prefer tsdr_get_trademark_status.

Args:
    serial_number: 8-digit application serial number (e.g., "78787878")

Returns:
    Normalized response with the trademark record.
tm_search_assignmentsA

Search recorded trademark assignment (ownership transfer) records.

USE THIS TOOL WHEN: You need to trace ownership history of a trademark,
find the current owner, or find marks transferred to/from a company.
Covers recorded assignments from 1955 to present, via the USPTO
Assignment Center public API (no API key required).

At least one filter is required; multiple filters combine (AND).

Args:
    serial_number: Trademark application serial number
    registration_number: Trademark registration number
    assignee_name: Assignee (new owner) name
    assignor_name: Assignor (previous owner) name
    reel_frame: Recordation reel/frame identifier (e.g., "9006/0093")
    offset: Starting position for pagination (default: 0)
    limit: Maximum results to return (default: 25)

Returns:
    Normalized response with assignment records (reel/frame, assignors,
    assignees, conveyance, and affected properties).
get_trademark_class_infoA

Look up a Nice/international trademark class (1-45).

USE THIS TOOL WHEN: You need to know what goods (classes 1-34) or
services (classes 35-45) a trademark class covers, or pick the right
classes for a clearance search.

Args:
    class_number: International class number (e.g., "9" for computer
        software, "25" for clothing, "42" for software services)

Returns:
    Class title, type (goods/services), and description.
get_trademark_status_codeA

Look up a USPTO trademark status code meaning.

USE THIS TOOL WHEN: Trademark data contains a numeric status code you
need to interpret (e.g., "700" = Registered, "686" = Published for
opposition).

Args:
    code: Trademark status code (e.g., "700")

Returns:
    Status code description and prosecution stage.
get_office_action_rejectionsA

Get claim-level rejection data from office actions.

USE THIS TOOL WHEN: You need which claims an examiner rejected, objected
to or allowed in each office action, and under which statute (101, 102,
103, 112, double patenting); or claim-level 101 analytics across
applications, such as actions citing Alice or Mayo in an art unit
(case_law="alice", art_unit="3689"). For the action's text, search with
odp_search_office_actions and read it with odp_download_document.

Results come grouped by office action. statutes and case_law describe
the whole action; claims sums up the claim numbers by what happened to
them; claim_groups keeps the dataset's rows (each with action,
legal_section, form paragraph and claims). The rows are extracted by
machine from the action's text, so treat them as a guide and read the
action for anything that matters.

Coverage: actions mailed from 2012 on (93M rows), appearing about a
week after mailing. Pagination counts rows, not actions; an action can
straddle two pages. Continue from metadata.next_offset, not offset +
count: when the token budget drops actions, next_offset points at the
first row of the first one dropped.

Args:
    application_number: Application number without slashes (e.g. "18402543")
    mail_date: Mail date of one action, YYYY-MM-DD
    patent_number: Patent number; resolved to its application first
    document_id: File-wrapper documentIdentifier of one action
    statute: Comma-separated statutes, all of which the action must
        apply: 101, 102, 103, 112, DP (double patenting)
    case_law: Comma-separated cases, all of which the action must cite:
        alice, mayo, myriad, bilski
    document_code: Comma-separated codes, e.g. CTNF (non-final), CTFR (final)
    art_unit: Group art unit (e.g. "3689")
    date_from: Earliest mail date, YYYY-MM-DD
    date_to: Latest mail date, YYYY-MM-DD
    query: Extra Solr clause, AND-ed with the filters
        (e.g. nationalClass:"705")
    offset: Row offset (default: 0)
    limit: Rows to read (default: 50, at most 200)

Returns:
    Office actions with document_id, app_num, document_code, mail_date,
    art_unit, statutes, case_law, claims and claim_groups. total counts
    rows; metadata.next_offset continues the scan.
get_office_action_citationsA

Get the prior art examiners cited in office actions.

USE THIS TOOL WHEN: You need the references an examiner cited against
an application, and under which statute (102 or 103); or, in reverse,
which applications' office actions cited a given patent or publication
(cited_reference="US 2013/0120945 A1"). For citations on an issued
patent's front page, ppubs_get_patent_by_number(sections=["biblio"])
is cheaper; for later patents citing it, ppubs_get_citing_patents.

Coverage: office actions from about 2012 on; rows appear about a week
after mailing. Rows carry no mail date, so mail_date (with an
application or patent number) finds that day's actions in the
rejection dataset first.

Args:
    application_number: Application number without slashes (e.g. "18402543")
    mail_date: Mail date of one action, YYYY-MM-DD (needs
        application_number or patent_number)
    patent_number: Patent number; resolved to its application first
    document_id: File-wrapper documentIdentifier of one action
    cited_reference: A cited US patent or publication number, with or
        without "US", separators or kind code
    legal_section: Comma-separated sections the reference was applied
        under: 102, 103
    examiner_cited: True for references the examiner cited
    art_unit: Group art unit (e.g. "1798")
    tech_center: Technology center (e.g. "1700")
    query: Extra Solr clause, AND-ed with the filters
    offset: Row offset (default: 0)
    limit: Rows to read (default: 50, at most 200)

Returns:
    Citations with app_num, document_id, reference (as written),
    reference_number (digits, when USPTO parsed them), legal_section,
    action, examiner_cited, applicant_cited, relied_on_in_action,
    art_unit and tech_center.

Prompts

Interactive templates invoked by user choice

NameDescription
prior_art_searchGuide for conducting a comprehensive prior art search. USE THIS PROMPT WHEN: You need to find existing patents and publications relevant to an invention for patentability assessment or invalidity analysis. All arguments are optional; any given are placed in a Subject section ahead of the workflow. Args: invention: The invention or claim language to search against, in a sentence or two keywords: Comma-separated search terms and synonyms cpc_codes: Comma-separated CPC codes already known to be relevant
patent_validity_analysisGuide for analyzing patent validity and prosecution history. USE THIS PROMPT WHEN: You need to assess the strength and validity of a patent by reviewing its prosecution history and any challenges. All arguments are optional; any given are placed in a Subject section ahead of the workflow. Args: patent_number: The patent under review, e.g. 9876543 or US 10,000,000 B2
competitor_portfolio_analysisGuide for analyzing a company's patent portfolio. USE THIS PROMPT WHEN: You need to understand a competitor's IP position, technology focus areas, and patent strategy. All arguments are optional; any given are placed in a Subject section ahead of the workflow. Args: company: The company whose portfolio to analyze, with any known name variants technology: Optional technology area or CPC codes to concentrate on
ptab_proceeding_researchGuide for researching PTAB proceedings (IPR/PGR/CBM). USE THIS PROMPT WHEN: You need to research Patent Trial and Appeal Board proceedings, decisions, and outcomes for validity challenges. All arguments are optional; any given are placed in a Subject section ahead of the workflow. Args: patent_number: Patent whose PTAB history to research proceeding_number: A specific trial, e.g. IPR2023-00001 party: Petitioner or patent owner name
freedom_to_operateGuide for freedom-to-operate (FTO) analysis. USE THIS PROMPT WHEN: You need to assess patent infringement risk for a product or technology before commercialization. All arguments are optional; any given are placed in a Subject section ahead of the workflow. Args: product: What is to be made, used or sold, with its key technical features cpc_codes: Comma-separated CPC codes already known to be relevant
patent_landscapeGuide for patent landscape analysis. USE THIS PROMPT WHEN: You need to map the competitive patent environment in a technology area to identify trends and opportunities. All arguments are optional; any given are placed in a Subject section ahead of the workflow. Args: technology: The field to map, in a phrase cpc_codes: Comma-separated CPC codes that bound the field
trademark_clearance_searchGuide for trademark clearance (knockout) searching. USE THIS PROMPT WHEN: You need to assess whether a proposed mark is available by finding existing federal trademarks that could block it. All arguments are optional; any given are placed in a Subject section ahead of the workflow. Args: mark: The word mark or name to clear goods_services: What the mark will be used on classes: Comma-separated international class numbers, e.g. 9, 42
trademark_portfolio_reviewGuide for reviewing a trademark portfolio. USE THIS PROMPT WHEN: You need to inventory a company's trademarks, check statuses and class coverage, and flag renewal deadlines. All arguments are optional; any given are placed in a Subject section ahead of the workflow. Args: owner: The company or person whose marks to review
trademark_status_monitoringGuide for monitoring trademark status and conflicts. USE THIS PROMPT WHEN: You need to track application/registration status over time or watch for new conflicting filings and oppositions. All arguments are optional; any given are placed in a Subject section ahead of the workflow. Args: serial_numbers: Comma-separated application serial or registration numbers to track mark: A mark to watch for new conflicting filings

Resources

Contextual data attached and managed by the client

NameDescription
resource_cpc_sectionsGet all CPC section overview. Returns summary of all 9 CPC sections (A-H, Y) with their titles and descriptions for patent classification reference.
resource_status_codesGet USPTO application status code definitions. Returns all status codes used in patent application tracking with descriptions and examination stages.
resource_data_sourcesGet information about available patent data sources. Returns details about all integrated APIs including coverage, rate limits, authentication requirements, and best use cases.
resource_search_syntaxGet search query syntax guide for all APIs. Returns documentation on query syntax for PPUBS, PatentsView, ODP, and trademark search APIs with examples.
resource_trademark_classesGet all Nice/international trademark classes. Returns all 45 international classes (goods 1-34, services 35-45) with titles and descriptions for trademark classification reference.
resource_trademark_status_codesGet USPTO trademark status code definitions. Returns commonly encountered trademark status codes with descriptions and prosecution stages.

TDQS

A3.7/5.0

Scored across 42 tools

Disambiguation4/5

Descriptions do real work separating near-neighbors: ppubs_search_patents vs ppubs_search_applications vs odp_search_applications, and tm_get_trademark vs tsdr_get_trademark_status explicitly say which to prefer. A few pairs remain easy to confuse (odp_get_application vs odp_get_application_metadata, get_status_code vs get_trademark_status_code, odp_get_documents vs tsdr_list_trademark_documents), but they are scoped to different resources or domains.

Naming Consistency4/5

The dominant pattern is domain-prefix + verb_noun (odp_, ppubs_, ptab_, tsdr_, tm_) with consistent verbs (get_, search_, list_, download_). The deviation is a set of bare get_/check_ tools (get_cpc_info, get_status_code, get_office_action_citations, get_office_action_rejections, check_api_status) that break the prefix convention even though some of them clearly belong to the ODP family.

Tool Count3/5

42 tools is heavy and above the comfortable band, though the server genuinely spans five distinct USPTO data domains (ODP applications, PPUBS patents, PTAB, TSDR/trademarks, classification lookups). Most tools cover a distinct endpoint, but redundancy (two application-search tools, application vs application-metadata, tm_get_trademark vs tsdr_get_trademark_status) means not every tool clearly earns its slot.

Completeness4/5

Coverage is broad: search/get/download across patents, applications, office actions, petitions, PTAB trials/appeals, trademarks, assignments, CPC and status codes, plus dataset and API-status tools. Minor gaps remain — patent assignment lookup is only by application number, PTAB document bodies lack a direct download path, and maintenance-fee/expiration lifecycle data is only partially covered via PTA.

Maintenance

ActivityActive
ResponsivenessResponsive