@pipeworx/uspto-office-actions

Connect: https://pipeworx.io/mcp — every tool in the catalog, including @pipeworx/uspto-office-actions’s. Install: one-click buttons

Connect to just the @pipeworx/uspto-office-actions pack

https://gateway.pipeworx.io/uspto-office-actions/mcp — only @pipeworx/uspto-office-actions’s own tools, nothing else in the catalog.

No MCP client? Skip the connection: POST https://gateway.pipeworx.io/v1/tools/search_packs {"query":"..."} to find a tool below, GET /v1/tools/<name> for its schema, POST the same URL with arguments for the data — see For AI agents.

Tools: 5

USPTO patent prosecution history — office action full text, examiner/applicant citations (plus AI/ML-extracted “enriched citation” metadata), claim-level rejection data (35 U.S.C. 101/102/103/112), and Commissioner final decisions on patent application petitions.

Tools

  • search_office_actions(application_number | patent_number, limit) — office actions on an application: action type, mail date, examiner employee number, art unit, newest first.
  • get_office_action_text(document_id | (application_number + mail_date)) — one office action’s full text, its length, and a truncation flag.
  • get_office_action_rejections(application_number, limit) — claim-level rejection data: AGGREGATE counts of 101/102/103/112/double-patenting rejection records first, per-record detail last.
  • get_office_action_citations(application_number, limit) — references cited in office actions, who cited them (examiner vs applicant), plus the AI/ML-extracted enriched-citation fields (category code, claim/paragraph passage mapping) when USPTO has them for that citation.
  • search_petition_decisions(query | application_number, decided_after, decided_before, limit, offset) — Commissioner / Office of Petitions final decisions: decision type, decision date, petition type, deciding office.

Auth

Platform key (PLATFORM_USPTO_KEY) with BYO override via _apiKey. Get a free key at https://data.uspto.gov/myodp. As of 2026-10, USPTO requires ID.me identity verification plus four profile fields on new/renewed ODP accounts — a BYO key from an account that has not completed that will read as rejected even though it is correctly formatted.

Data sources

  • USPTO, Open Data Portal — Office Action Text Retrieval dataset (public domain, CC0 mark). Covers published office actions starting with the 12-million application series.
  • USPTO, Open Data Portal — Office Action Citations dataset.
  • USPTO, Open Data Portal — Office Action Rejection dataset.
  • USPTO, Open Data Portal — Enriched Citation (AI/ML-extracted) dataset.
  • USPTO, Open Data Portal — Final Petition Decisions dataset.

Name the publisher and dataset only, never a route — the exact endpoints live in src/index.ts.

Notes

  • The legacy developer.uspto.gov Office Action APIs are dead (blanket 301 to data.uspto.gov/home, confirmed 2026-10-18). This pack calls their live replacements on api.uspto.gov.
  • The replacement routes’ query-parameter names are not independently confirmed. USPTO publishes no machine-readable spec for the four office-action* routes (the data.uspto.gov/apis/* docs are a client-rendered Angular app that returns an identical shell for every path when fetched without a browser, and every probe short of a real API key 401s before any query parsing happens — there is no way to learn the accepted parameter name by trial). This pack sends both the ODP-wide convention used by the sibling patents pack’s /applications/search route (q, Lucene field:value syntax, size) and the legacy Data Set API’s own names (criteria, rows) on every call — an unrecognized query parameter is ignored by this API gateway everywhere else it has been observed in this codebase. The response envelope is handled defensively for the same reason: either the classic Solr shape ({response:{numFound,start,docs:[...]}}, confirmed via real response examples from the open-source patent-dev/uspto-odp Go client) or any *Bag/array-valued ODP-native shape. An unrecognized shape throws loudly (upstream_parse: ...) with the raw body, rather than returning a quiet empty result.
  • Final Petition Decisions is fully confirmed, not inferred: both its route (/api/v1/petition/decisions/search, POST, JSON {q, pagination:{offset,limit}, filters:[{name,value}]}) and its response shape ({count, petitionDecisionDataBag:[...]}) match the same Go client’s checked-in real example responses, and the route itself was independently confirmed live (401 Unauthorized) by this pack’s own probe.
  • USPTO’s null-date sentinel is "0001-01-01T00:00:00" — treated as null everywhere in this pack’s output (an ungranted application has no grant_date, not a 1-AD one).
  • obsoleteDocumentIdentifier (USPTO’s own, oddly-retained field name) is exposed to callers as document_id — it is the stable per-document key, not actually obsolete data.
  • No fleet-held credential was reachable from a local/dev run while building this pack (the platform key lives only in the deployed gateway’s secret store), so the pre-deploy smoke test below exercises real network calls to api.uspto.gov and confirms the request/response code runs cleanly, but could only observe the auth-rejection path, not a real payload. The first real verification is the live, authenticated post-deploy probe.

Tools

  • search_office_actions — Search USPTO office actions (and related prosecution-history documents, e.g. petition decisions filed in the same document stream) for one patent application. Returns action type (non-final rejection,
  • get_office_action_text — Fetch one USPTO office action’s full text. Pass document_id (from search_office_actions’ document_id field) for an exact match, or application_number + mail_date to look it up by application and date.
  • get_office_action_rejections — Claim-level rejection data for every office action on one application. Returns AGGREGATE counts first (how many rejection records cite 35 U.S.C. 101/102/103/112, and double-patenting) and per-claim/pe
  • get_office_action_citations — References cited in office actions for one application — who cited each one (examiner vs applicant), the legal basis (102/103 etc.) it was cited under, and the AI/ML-extracted “enriched citation” fiel
  • search_petition_decisions — Search USPTO Commissioner / Office of Petitions final decisions. Pass application_number for one application’s petition history, or query for free-text search across decisions (petition issue text, in

Tools

  • get_office_action_citations — References cited in office actions for one application — who cited each one (examiner vs applicant), the legal basis (102/103 etc.) it was cited under, and the AI/ML-extracted enriched citation fields
  • get_office_action_rejections — Claim-level rejection data for every office action on one application. Returns AGGREGATE counts first (how many rejection records cite 35 U.S.C. 101/102/103/112, and double-patenting) and per-claim/pe
  • get_office_action_text — Fetch one USPTO office action's full text. Pass document_id (from search_office_actions' document_id field) for an exact match, or application_number + mail_date to look it up by application and date.
  • search_office_actions — Search USPTO office actions (and related prosecution-history documents, e.g. petition decisions filed in the same document stream) for one patent application. Returns action type (non-final rejection,
  • search_petition_decisions — Search USPTO Commissioner / Office of Petitions final decisions. Pass application_number for one application's petition history, or query for free-text search across decisions (petition issue text, in

Regenerated from source · build October 18, 2026