loading…
Search for a command to run...
loading…
Provides access to USPTO patent and patent application data through multiple APIs, enabling search, retrieval, and analysis of patents, PTAB proceedings, and li
Provides access to USPTO patent and patent application data through multiple APIs, enabling search, retrieval, and analysis of patents, PTAB proceedings, and litigation data via natural language.
A FastMCP server for accessing United States Patent and Trademark Office (USPTO) patent and patent application data through multiple APIs including the Patent Public Search API, the Open Data Portal (ODP) API, PTAB API v3, and Patent Litigation APIs. Using this server, Claude Desktop can pull data from USPTO APIs, search through PTAB proceedings and decisions, analyze patent litigation, research prosecution history, and more:

For an introduction to MCP servers see Introducing the Model Context Protocol.
Special thanks to Parker Hancock, author of the amazing Patent Client project, for blazing the trail to understanding of the string of requests and responses needed to pull data through the Public Search API.
This server provides 52 tools across 6 USPTO data sources (27 active, 25 unavailable due to API shutdowns):
Note on unavailable APIs: The PatentsView API (search.patentsview.org) was shut down on March 20, 2026, with its data migrated to ODP bulk datasets. The Office Action and Enriched Citation APIs (developer.uspto.gov) were decommissioned in early 2026. The Patent Litigation API is not offered on the USPTO Open Data Portal; litigation data is available as a bulk download. All 25 affected tools remain registered and return helpful workaround guidance pointing to alternative tools.
| Source | Description | Auth Required | Status |
|---|---|---|---|
| ppubs.uspto.gov | Full text documents, PDF downloads, advanced search (daily updates) | No | Active |
| api.uspto.gov (ODP) | Metadata, continuity, transactions, assignments, prosecution history | Yes (ODP API Key) | Active |
| PTAB Trial API | IPR/PGR/CBM proceedings, decisions, appeals | Yes (ODP API Key) | Active (ODP v3.0) |
| Patent Litigation API | 74,000+ district court patent cases | N/A | Not offered on ODP (issue #16) |
| PatentsView API | Disambiguated inventor/assignee data, advanced search | N/A | Shut down March 2026 |
| Office Action APIs | Full-text office actions, citations, rejections | N/A | Decommissioned early 2026 |
If you're a Python developer but still unfamiliar with uv, you're in for a treat. It's faster and easier than having a separate Python version manager (like pyenv) and setting up, activating, and maintaining virtual environments with venv and pip.
If you don't already have uv installed:
curl -LsSf https://astral.sh/uv/install.sh | sh
Clone this repository:
git clone https://github.com/riemannzeta/patent_mcp_server
cd patent_mcp_server
Install dependencies with uv:
uv sync
Verify installation:
uv run patent-mcp-server
Should output:
INFO Starting USPTO Patent MCP server with stdio transport
To use the api.uspto.gov tools (ODP, PTAB), you need an Open Data Portal API key. Without it, these endpoints return 403 Forbidden. The Patent Litigation API is not offered on ODP and does not require an API key.
Create a USPTO.gov account at data.uspto.gov (requires ID.me verification)
Once signed in, visit "My ODP" in the site navigation to get your API key
See the Getting Started guide for detailed instructions
Create a .env file in the patent_mcp_server directory:
USPTO_API_KEY=your_actual_key_here
Note: The PPUBS tools will work without this API key.
The server can be configured using environment variables in your .env file. All settings are optional with sensible defaults:
# API Keys
USPTO_API_KEY=your_key_here
# Logging
LOG_LEVEL=INFO # Options: DEBUG, INFO, WARNING, ERROR, CRITICAL
# HTTP Settings
REQUEST_TIMEOUT=30.0 # Request timeout in seconds
MAX_RETRIES=3 # Maximum number of retry attempts
RETRY_MIN_WAIT=2 # Minimum wait time between retries (seconds)
RETRY_MAX_WAIT=10 # Maximum wait time between retries (seconds)
# Session Management
SESSION_EXPIRY_MINUTES=30 # How long to cache ppubs sessions
ENABLE_CACHING=true # Enable/disable session caching
# API Endpoints (usually don't need to change)
PPUBS_BASE_URL=https://ppubs.uspto.gov
API_BASE_URL=https://api.uspto.gov # ODP API endpoint (NOT data.uspto.gov)
To integrate this MCP server with Claude Desktop:
Update your Claude Desktop configuration file (claude_desktop_config.json):
{
"mcpServers": {
"patents": {
"command": "uv",
"args": [
"--directory",
"/Users/username/patent_mcp_server",
"run",
"patent-mcp-server"
]
}
}
}
You can find claude_desktop_config.json on a Mac by opening the Claude Desktop app, opening Settings (from the Claude menu or by Command + ' on the keyboard), clicking "Developer" in the sidebar, and "Edit Config."
Replace /Users/username/patent_mcp_server with the actual path to your patent_mcp_server directory.
When integrated with Claude Desktop, the server will be automatically started when needed and doesn't need to be run separately.
To integrate this MCP server with Claude Code for a particular project, from the project root:
claude mcp add-json patents '{"command": "uv", "args": ["--directory", "/path/to/patent_mcp_server", "run", "patent-mcp-server"]}'
If you're already running Claude Code, you'll have to /exit and restart. Then /mcp to verify that it's configured.
| Tool | Description |
|---|---|
check_api_status |
Check status of all USPTO APIs |
get_cpc_info |
Get CPC classification information |
get_status_code |
Look up USPTO status code meaning |
| Tool | Description |
|---|---|
ppubs_search_patents |
Search granted patents (full-text, daily updates) |
ppubs_search_applications |
Search published patent applications |
ppubs_get_full_document |
Get full patent document by GUID |
ppubs_get_patent_by_number |
Get patent's full text by number |
ppubs_download_patent_pdf |
Download patent as PDF |
| Tool | Description |
|---|---|
odp_get_application |
Get basic application data |
odp_search_applications |
Search applications with filters |
odp_get_application_metadata |
Get comprehensive metadata |
odp_get_continuity |
Get patent family/continuity data |
odp_get_assignment |
Get ownership/assignment records |
odp_get_adjustment |
Get patent term adjustment data |
odp_get_attorney |
Get attorney/agent of record |
odp_get_foreign_priority |
Get foreign priority claims |
odp_get_transactions |
Get prosecution transaction history |
odp_get_documents |
Get file wrapper documents |
odp_search_datasets |
Search bulk data products |
odp_get_dataset |
Get dataset product details |
| Tool | Description |
|---|---|
ptab_search_proceedings |
Search IPR/PGR/CBM proceedings by patent number, party, status |
ptab_get_proceeding |
Get details for a specific proceeding by number |
ptab_get_documents |
List documents filed in a proceeding |
ptab_search_decisions |
Search PTAB decisions |
ptab_get_decision |
Get a specific decision by trial number |
ptab_search_appeals |
Search ex parte appeals |
ptab_get_appeal |
Get details for a specific appeal |
All 4 Litigation tools return API_UNAVAILABLE. The Patent Litigation API is not listed in the ODP Swagger catalog. The OCE Patent Litigation dataset (74,000+ district court cases) is distributed as a bulk download at https://www.uspto.gov/ip-policy/economic-research/research-datasets/patent-litigation-docket-reports-data.
| Tool | Workaround |
|---|---|
search_litigation |
OCE Patent Litigation bulk dataset |
get_litigation_case |
OCE Patent Litigation bulk dataset |
get_patent_litigation |
OCE Patent Litigation bulk dataset or ppubs_search_patents |
get_party_litigation |
OCE Patent Litigation bulk dataset |
All 14 PatentsView tools return API_UNAVAILABLE with workaround guidance. PatentsView data has been migrated to the USPTO Open Data Portal as bulk downloadable datasets. Use ppubs_search_patents for patent search, odp_search_datasets to find bulk datasets.
| Tool | Workaround |
|---|---|
patentsview_search_patents |
ppubs_search_patents |
patentsview_get_patent |
ppubs_get_patent_by_number |
patentsview_search_assignees |
ppubs_search_patents with AN/"name" query |
patentsview_get_assignee |
odp_search_datasets (bulk data) |
patentsview_search_inventors |
ppubs_search_patents with IN/"name" query |
patentsview_get_inventor |
odp_search_datasets (bulk data) |
patentsview_get_claims |
ppubs_get_full_document |
patentsview_get_description |
ppubs_get_full_document |
patentsview_search_by_cpc |
ppubs_search_patents with CPC/"code" query |
patentsview_lookup_cpc |
get_cpc_info |
patentsview_search_attorneys |
odp_get_attorney (per-application) |
patentsview_get_attorney |
odp_get_attorney (per-application) |
patentsview_search_by_ipc |
ppubs_search_patents with IPC query |
patentsview_lookup_ipc |
odp_search_datasets (bulk data) |
All 4 Office Action tools return API_UNAVAILABLE. Use odp_get_documents to access office action documents from the file wrapper.
| Tool | Workaround |
|---|---|
get_office_action_text |
odp_get_documents |
search_office_actions |
odp_get_documents or odp_get_transactions |
get_office_action_citations |
odp_get_documents |
get_office_action_rejections |
odp_get_documents |
All 3 Enriched Citation tools return API_UNAVAILABLE. Use odp_get_documents or ppubs tools as workarounds.
| Tool | Workaround |
|---|---|
get_enriched_citations |
odp_get_documents |
search_citations |
odp_get_documents |
get_citation_metrics |
odp_get_documents |
The server also provides MCP Resources (accessible via @ mentions):
patents://cpc/{code} - CPC classification informationpatents://status-codes - USPTO status code definitionspatents://sources - Data source informationpatents://search-syntax - Query syntax guideAnd MCP Prompts (workflow templates):
prior_art_search - Comprehensive prior art search guidepatent_validity - Patent validity analysis workflowcompetitor_portfolio - Competitor portfolio analysisptab_research - PTAB proceeding research guidefreedom_to_operate - FTO analysis workflowpatent_landscape - Technology landscape mappingThe project includes comprehensive test suites:
# Run unit tests (default - skips integration tests)
uv run pytest
# Run with verbose output
uv run pytest -v
# Run integration tests (requires network access)
uv run pytest -m integration
# Run all tests including integration
uv run pytest -m ""
# Run with coverage report
uv run pytest --cov=patent_mcp_server
Test results are stored in /test/test_results/.
To install development dependencies:
uv sync --dev
# Build distribution packages
rm -rf dist/ && uv run python -m build
# Upload to PyPI
uv run twine upload dist/*
Issues and PRs welcome. See CONTRIBUTING.md for the contribution guide, and AGENTS.md for guidance specific to AI agents. Use the bug report or feature request templates when filing an issue — they prompt for the tool call, the constructed request URL/body, and the raw API response, which is usually enough to land a fix in one turn.
ptab_search_proceedings, ptab_get_proceeding, ptab_get_documents, ptab_search_decisions, ptab_get_decision, ptab_search_appeals, ptab_get_appeal (issue #23). PTAB data relocated to ODP /api/v1/patent/trials/* and /api/v1/patent/appeals/* (paths not in the ODP Swagger UI); the standalone-API decommission (issue #16) was correct for the Patent Litigation API, but PTAB moved rather than disappeared.ppubs_search_patents / ppubs_search_applications query semantics (issue #21): default operator changed from OR to AND, so multi-word queries like machine learning no longer match the entire corpus and collapse into the latest-grants fallback under date_publ desc sort.search_query.copy() → copy.deepcopy(...)), eliminating a concurrency hazard between parallel calls.odp_search_applications filters being silently ignored upstream (issue #21): switched from GET query-string params to POST with a Lucene-style q body. assignee_name, inventor_name, application_number, patent_number, and filing-date ranges are now properly AND-combined into the search. Tool now returns MISSING_FILTER rather than dumping the full 12.8M-record corpus when called with no filters.ppubs_search_patents / ppubs_search_applications / odp_search_applications docstrings to reflect the corrected semantics and document Lucene query support on ODP.CONTRIBUTING.md, AGENTS.md, bug-report + feature-request issue templates, and a PR template.ptab_* tools and 4 litigation tools now return API_UNAVAILABLE with workaround guidance pointing to PPUBS tools and USPTO bulk datasetscheck_api_status, resources.py data sources, client docstrings, and README to reflect the shutdownpatentsview_* tools return API_UNAVAILABLE with workaround guidanceAPI_UNAVAILABLE with workaround guidancetest/unit/test_unavailable_tools.py for decommissioned tool testingapi.uspto.gov is the correct API endpoint (not data.uspto.gov which is the web portal)patentsview_search_attorneys, patentsview_get_attorney)patentsview_lookup_ipc, patentsview_search_by_ipc)search_publications method (pagination options not being passed)odp_ prefix for clarityquery instead of q)MIT
Выполни в терминале:
claude mcp add uspto-patent-mcp-server -- npx Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development