by riemannzeta
Provides fast access to USPTO patent and application data via the Public Search and Open Data Portal APIs, enabling Claude Desktop and other MCP clients to retrieve search results, full-text documents, PDFs, and bibliographic metadata.
The server acts as a bridge between Claude Desktop (or any MCP‑compatible client) and United States Patent and Trademark Office data sources. It combines the Public Search API (ppubs.uspto.gov) for full‑text and PDF retrieval with the Open Data Portal API (api.uspto.gov) for comprehensive metadata, assignments, litigation, and continuity information.
uv sync.uv run patent-mcp-server; it starts with stdio transport..env file (USPTO_API_KEY=<your_key>) if you need metadata endpoints.ppubs_search_patents, get_app, download_applications) from the client to query patents.Do I need an API key for all operations?
No. Public Search endpoints work without a key but have rate limits. ODP endpoints require the USPTO_API_KEY.
Can I download PDFs on macOS? The server can download PDFs, but Claude Desktop currently does not expose the PDF tool to the UI.
Is bulk downloading supported? The Public Search API is not intended for bulk downloads; respect rate limits and consider ODP bulk dataset endpoints for large‑scale needs.
What Python version is required?
The project uses uv for version management; it will install the appropriate Python version automatically.
How do I run the test suite?
Execute uv run test/test_tools.py from the repository root; results are saved under test/test_results.
A FastMCP server for accessing United States Patent and Trademark Office (USPTO) patent and patent application data through the Patent Public Search API, the Open Data Portal (ODP) API, and Google Patents Public Datasets via BigQuery. Using this server, Claude Desktop can pull data from the USPTO APIs or search through 90M+ patent publications from 17+ countries via Google's BigQuery:

For an introduction to MCP servers see Introducing the Model Context Protcol.
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 tools for:
This server interacts with three patent data sources:
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 should do the trick.
Clone this repository:
git clone https://github.com/riemannzeta/patent_mcp_server
cd patent_mcp_server
Install dependencies with uv:
uv sync
If installed correctly, then:
uv run patent-mcp-server
Should write:
INFO Starting USPTO Patent MCP server with stdio transport
to the console. With an API key installed in the environment and Claude Desktop configured, the patents MCP server is ready.
To use the api.uspto.gov tools, you need to obtain an Open Data Portal (ODP) API key:
Visit USPTO's Getting Started page and follow the instructions to request an API key if you don't already have one.
Create a .env file in the patent_mcp_server directory with your API key:
USPTO_API_KEY=your_actual_key_here
You don't need quotes around your key. The ppubs tools will run without this API key, but the API key is required for the api.uspto.gov tools.
To use Google Patents Public Datasets, you need to set up Google Cloud credentials:
Create a Google Cloud Project:
Enable BigQuery API:
Create Service Account Credentials:
Configure Environment Variables:
Add to your .env file:
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/service-account-key.json
Cost Information: Google BigQuery provides 1TB of free queries per month. After that, queries cost $5 per TB. Patent queries are typically small and efficient. See BigQuery pricing for details.
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
# Google Cloud / BigQuery
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json
BIGQUERY_DATASET=patents-public-data:patents
BIGQUERY_LOCATION=US
BIGQUERY_QUERY_TIMEOUT=60
BIGQUERY_MAX_RESULTS=1000
# 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 for failed requests
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
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 in the sidebar, and "Edit Config."
Replace /Users/username/patent_mcp_server with the actual path to your patent_mcp_server directory if that's not where it was cloned. (If you're on a mac, this may mean simply replacing username with your username.)
When integrated with Claude Desktop, the server will be automatically started when needed and doesn't need to be run separately. The server uses stdio transport for communication with Claude Desktop or other MCP clients running on the same host.
The server provides the following functions to interact with USPTO data. Note that the Claude Desktop client does not fully support all of these tools. For example, Claude Desktop does not at present allow for download of PDFs.
ppubs_search_patents - Search for granted patents in USPTO Public Searchppubs_search_applications - Search for published patent applications in USPTO Public Searchppubs_get_full_document - Get full patent document details by GUID from ppubs.uspto.govppubs_get_patent_by_number - Get a granted patent's full text by number from ppubs.uspto.govppubs_download_patent_pdf - Download a granted patent as PDF from ppubs.uspto.gov (not currently supported by Claude Desktop)get_app(app_num) - Get basic patent application datasearch_applications(...) - Search for patent applications using query parametersdownload_applications(...) - Download patent applications using query parametersget_app_metadata(app_num) - Get application metadataget_app_adjustment(app_num) - Get patent term adjustment dataget_app_assignment(app_num) - Get assignment dataget_app_attorney(app_num) - Get attorney/agent informationget_app_continuity(app_num) - Get continuity dataget_app_foreign_priority(app_num) - Get foreign priority claimsget_app_transactions(app_num) - Get transaction historyget_app_documents(app_num) - Get document detailsget_app_associated_documents(app_num) - Get associated documentsget_status_codes(...) - Search for status codessearch_datasets(...) - Search bulk dataset productsget_dataset_product(...) - Get a specific product by its identifiergoogle_search_patents(query, country, limit) - Search patents by text in title/abstract across 90M+ publicationsgoogle_get_patent(publication_number) - Get complete patent details by publication numbergoogle_get_patent_claims(publication_number) - Get all claims for a patentgoogle_get_patent_description(publication_number) - Get full patent description/specificationgoogle_search_by_inventor(inventor_name, country, limit) - Find patents by inventor namegoogle_search_by_assignee(assignee_name, country, limit) - Find patents by company/assigneegoogle_search_by_cpc(cpc_code, country, limit) - Search patents by CPC classification codeSupported Countries: US, EP (European Patent Office), WO (WIPO/PCT), JP (Japan), CN (China), KR (South Korea), GB (Great Britain), DE (Germany), FR (France), CA (Canada), AU (Australia)
Note: Google Patents tools require Google Cloud credentials (see Google Cloud Setup above).
Refer to the function docstrings in the code for detailed parameter information.
This release includes significant improvements to code quality, reliability, and maintainability:
ApiError utility classThe /test/ directory contains test suites for validating the MCP server functionality:
test_tools_pytest.py - Modern pytest-based test suite for all MCP tools (recommended)test_tools.py - Legacy test runner (still functional)test_patents.py - Direct HTTP request tests for debuggingTest results in JSON and PDF format are stored in the /test/test_results subdirectory.
# Run all tests with pytest (recommended)
uv run pytest test/test_tools_pytest.py -v
# Run excluding slow tests (like PDF downloads)
uv run pytest test/test_tools_pytest.py -v -m "not slow"
# Run with coverage report
uv run pytest test/test_tools_pytest.py --cov=patent_mcp_server
# Run legacy test suite
uv run test/test_tools.py
To install development dependencies:
uv sync --dev
MIT
Please log in to share your review and rating for this MCP.
Explore related MCPs that share similar capabilities and solve comparable challenges
by exa-labs
Provides real-time web search capabilities to AI assistants via a Model Context Protocol server, enabling safe and controlled access to the Exa AI Search API.
by perplexityai
Enables Claude and other MCP‑compatible applications to perform real‑time web searches through the Perplexity (Sonar) API without leaving the MCP ecosystem.
by MicrosoftDocs
Provides semantic search and fetch capabilities for Microsoft official documentation, returning content in markdown format via a lightweight streamable HTTP transport for AI agents and development tools.
by elastic
Enables natural‑language interaction with Elasticsearch indices via the Model Context Protocol, exposing tools for listing indices, fetching mappings, performing searches, running ES|QL queries, and retrieving shard information.
by graphlit
Enables integration between MCP clients and the Graphlit platform, providing ingestion, extraction, retrieval, and RAG capabilities across a wide range of data sources and connectors.
by ihor-sokoliuk
Provides web search capabilities via the SearXNG API, exposing them through an MCP server for seamless integration with AI agents and tools.
by mamertofabian
Fast cross‑platform file searching leveraging the Everything SDK on Windows, Spotlight on macOS, and locate/plocate on Linux.
by spences10
Provides unified access to multiple search engines, AI response tools, and content processing services through a single Model Context Protocol server.
by cr7258
Provides Elasticsearch and OpenSearch interaction via Model Context Protocol, enabling document search, index management, cluster monitoring, and alias operations.
{
"mcpServers": {
"uspto-patent": {
"command": "uv",
"args": [
"run",
"patent-mcp-server"
],
"env": {
"USPTO_API_KEY": "<YOUR_API_KEY>"
}
}
}
}claude mcp add uspto-patent uv run patent-mcp-server