@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.govOffice Action APIs are dead (blanket 301 todata.uspto.gov/home, confirmed 2026-10-18). This pack calls their live replacements onapi.uspto.gov. - The replacement routes’ query-parameter names are not independently
confirmed. USPTO publishes no machine-readable spec for the four
office-action*routes (thedata.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 siblingpatentspack’s/applications/searchroute (q, Lucenefield:valuesyntax,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-sourcepatent-dev/uspto-odpGo 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 asnulleverywhere in this pack’s output (an ungranted application has nogrant_date, not a 1-AD one). obsoleteDocumentIdentifier(USPTO’s own, oddly-retained field name) is exposed to callers asdocument_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.govand 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 fieldsget_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/peget_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