USPTO Patent MCP Server
A local or HTTP MCP server that gives Claude Desktop/Code live access to USPTO patent and trademark data across PPUBS, ODP, PTAB, TSDR, and trademark search/assignment APIs.
Patent search & retrieval — full-text search of granted patents and published applications (PPUBS, dotted-suffix query syntax), fetch a patent's full text/claims/abstract/front page by GUID or number, download patent PDFs, and find forward citations.
Prosecution history (ODP) — application metadata, continuity/patent family, assignments, term adjustment, attorney of record, foreign priority, transaction history, file-wrapper document lists, and reading individual documents (office actions, remarks, amended claims) as text or PDF.
Office actions & petitions — search ~19.9M office actions (2007 on) by text, statute, art unit and date; search ~1.1M petition decisions; get claim-level rejections (101/102/103/112/DP, with Alice/Mayo/Myriad/Bilski flags) and cited references, searchable in reverse.
PTAB — search IPR/PGR/CBM proceedings, decisions and ex parte appeals; fetch proceeding details and filed documents.
Bulk data — search USPTO bulk dataset products and get product details.
Trademarks — full-text mark/owner/goods/class search, authoritative live status and prosecution documents/images via TSDR, and recorded ownership assignments (1955–present).
Reference lookups — CPC classification (any depth), patent status codes, Nice classes, trademark status codes, plus API status checks.
Workflow support — MCP prompts for prior-art search, validity, FTO, landscapes, PTAB research and trademark clearance/portfolio/monitoring, plus MCP resources for CPC, status codes and query syntax.
Deployment — runs over stdio for Claude Desktop/Code, or as a shared stateless streamable-HTTP service; ODP/PTAB and TSDR keys are optional (PPUBS, trademark search and assignments need none).
Legacy tools — ~23 tools for shut-down APIs (PatentsView, Patent Litigation, legacy office action/enriched citation) are hidden by default, and return
API_UNAVAILABLEwith workaround guidance if enabled.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@USPTO Patent MCP Serversearch for patents related to quantum computing"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
USPTO Patent & Trademark MCP Server
An MCP server (Python SDK 2.x, MCPServer) for accessing United States Patent and Trademark Office (USPTO) patent and trademark data through multiple APIs including the Patent Public Search API, the Open Data Portal (ODP) API, PTAB API v3, the TSDR trademark status API, and USPTO trademark search. Using this server, Claude Desktop can pull data from USPTO APIs, search through PTAB proceedings and decisions, research prosecution history, run trademark clearance searches, track trademark status, 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.
Features
This server provides 42 tools across six live USPTO data sources (23 more, for APIs USPTO has shut down, stay in the code behind ENABLE_LEGACY_TOOLS):
Patent Search - Full-text search of granted patents and published applications via PPUBS
Full Text Documents - Get the text of a patent by number, or just its claims, abstract or front page to save context
PDF Downloads - Download patents as PDF files (Claude Desktop doesn't support this as a client currently)
Prosecution History - Transactions, file-wrapper document lists filtered by type (office actions, responses, notices of allowance), and the documents themselves as plain text or PDF via ODP
Office Action Search - Search 19.9M office actions (2007 on) by examiner language, rejection statute, art unit and date, with counts by document code and statute
Claim-Level Rejections and Citations - Which claims each office action rejected, objected to or allowed and under which statute, with Alice/Mayo/Myriad/Bilski flags (2012 on), and the references each action cited, searchable in reverse to find every application whose examiner cited a given patent
Petition Decisions - Search 1.1M decisions on patent petitions (revival, reinstatement, make special, supervisory review) by text, type, outcome and office
Patent Family Data - Continuity information, foreign priority, and related applications
Bulk Datasets - Search and access USPTO bulk data products including PatentsView disambiguated data
Forward Citations - Find the later patents that cite a patent
Trademark Search - Full-text search of US federal trademarks by mark text, owner, goods/services, and class (clearance/knockout searches)
Trademark Status & Documents - Authoritative live status, prosecution documents, and mark images via TSDR
Trademark Assignments - Recorded ownership transfer records from 1955 to present (no API key needed)
It runs locally over stdio for Claude Desktop and Claude Code, or over HTTP as a shared, stateless service — see Remote hosting over HTTP.
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; office action search, rejections and citations have since returned on ODP (
odp_search_office_actions,get_office_action_rejections,get_office_action_citations). The Patent Litigation API is not offered on the USPTO Open Data Portal; litigation data is available as a bulk download. The 23 affected tools stay in the code but are not registered by default, since their schemas cost every client about 6k tokens per session and they can only fail; setENABLE_LEGACY_TOOLS=trueto register them, and each returns workaround guidance pointing to a live tool.
Related MCP server: USPTO Patent MCP Server
API Sources
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) |
tsdrapi.uspto.gov (TSDR) | Trademark status, prosecution documents, mark images | Yes (TSDR API Key — separate from ODP) | Active |
tmsearch.uspto.gov | Full-text trademark search (internal API behind the TESS replacement) | No | Active (unofficial) |
assignmentcenter.uspto.gov | Trademark ownership transfer records (1955-present) | No | Active |
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 |
ODP Office Action Search | Office actions 2007 on: text search, statutes, art units (text returned to 500 chars) | Yes (ODP API Key) | Active (2026-10) |
ODP Petition Decisions | Decisions on patent petitions, 1991 on | Yes (ODP API Key) | Active (2026-10) |
ODP Office Action Rejections & Citations | Claim-level rejections (2012 on) and cited references per office action | Yes (ODP API Key) | Active (2026-10) |
Office Action APIs (developer.uspto.gov) | Office action text and search | N/A | Decommissioned early 2026 |
Prerequisites
Python 3.10-3.13 (3.12 recommended); the server builds on the MCP Python SDK 2.x (
mcp>=2,<3)Claude Desktop (for integration). Other models and MCP clients have not been tested.
UV for Python version and dependency management
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 | shInstallation
From PyPI (no clone needed)
uvx downloads and runs the published package on demand. Point Claude Desktop at it in claude_desktop_config.json, passing your API keys in the environment:
{
"mcpServers": {
"patents": {
"command": "uvx",
"args": ["patent-mcp-server"],
"env": {
"USPTO_API_KEY": "your_odp_key",
"TSDR_API_KEY": "your_tsdr_key"
}
}
}
}or in Claude Code:
claude mcp add patents -e USPTO_API_KEY=your_odp_key -e TSDR_API_KEY=your_tsdr_key -- uvx patent-mcp-serverThe keys are optional (see API Key Setup); the PPUBS patent tools, trademark search and assignment search work without any. A .env file is read from the working directory, which under uvx is wherever the client started the server, so pass keys through env as above.
From source
Clone this repository:
git clone https://github.com/riemannzeta/patent_mcp_server cd patent_mcp_serverInstall dependencies with uv:
uv syncVerify installation:
uv run patent-mcp-serverShould output:
INFO Starting USPTO Patent MCP server with stdio transport
API Key Setup
USPTO ODP API Key (Required for most tools)
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
Complete your data.uspto.gov customer profile (job title, organization, intended use). ODP deactivates keys whose profile is incomplete, and a key that stops working with 401/403 usually means this.
Create a
.envfile in the patent_mcp_server directory:USPTO_API_KEY=your_actual_key_hereNote: The PPUBS patent tools, trademark search (
tm_*search tools), and trademark assignment search work without any API key.
TSDR API Key (Trademark status/document tools)
The TSDR tools (tsdr_*) require a TSDR-specific API key sent as the USPTO-API-KEY header. The ODP key does not work for TSDR — it passes the gateway's auth check, but every request then fails with BACKEND RESPONSE STATUS: 404.
Sign in to the USPTO API Key Manager with a free MyUSPTO account
Select the TSDR API product and click "Request API key" (the key is emailed and stored under your account)
Add it to your
.env:TSDR_API_KEY=your_tsdr_key_here
TSDR rate limits (peak hours 5am-10pm ET): 60 requests/minute general, 4 requests/minute for PDF document bundles (120/12 off-peak). Use tsdr_list_trademark_documents (metadata only, not rate-limited like PDFs) before downloading bundles.
Trademark search and AWS WAF (no key needed)
tm_search_trademarks / tm_get_trademark use the internal API behind tmsearch.uspto.gov, which sits behind AWS WAF. It currently answers plain requests, but if USPTO tightens the WAF and searches start failing with 403/202 errors, copy the aws-waf-token cookie from a browser session on tmsearch.uspto.gov (valid ~4 days) and set:
TMSEARCH_WAF_TOKEN=your_cookie_value_hereConfiguration
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 # ODP/PTAB tools
TSDR_API_KEY=your_tsdr_key_here # TSDR trademark tools (separate key — see above)
TMSEARCH_WAF_TOKEN=... # Optional - only if trademark search hits the WAF
# Tool registration
ENABLE_LEGACY_TOOLS=false # Also register the 23 tools for shut-down APIs (they return API_UNAVAILABLE)
# Logging
LOG_LEVEL=INFO # Options: DEBUG, INFO, WARNING, ERROR, CRITICAL
# MCP Transport (see "Remote hosting over HTTP" below)
MCP_TRANSPORT=stdio # stdio (default) or streamable-http
MCP_HOST=127.0.0.1 # Bind address when serving over HTTP
MCP_PORT=8000 # Port when serving over HTTP
MCP_PATH=/mcp # URL path of the MCP endpoint
MCP_STATELESS=true # Keep no per-client state between HTTP requests
MCP_JSON_RESPONSE=false # Reply with plain JSON instead of an SSE stream
# 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)
TSDR_BASE_URL=https://tsdrapi.uspto.gov/ts/cd
TMSEARCH_BASE_URL=https://tmsearch.uspto.gov
TM_ASSIGNMENT_BASE_URL=https://assignmentcenter.uspto.gov
CPC_SCHEME_BASE_URL=https://www.uspto.gov/web/patents/classification/cpc/htmlClaude Desktop Configuration
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.jsonon 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_serverwith 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.
Claude Code Configuration
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.
Remote hosting over HTTP
The server speaks stdio by default, which is what the Claude Desktop and Claude Code configurations above launch. It can instead serve the MCP endpoint over HTTP, so one deployment can back a whole team rather than every person running their own copy with their own API keys:
patent-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000The endpoint is then at http://<host>:8000/mcp. Point an MCP client at
that URL — in Claude Code:
claude mcp add --transport http patents http://your-host:8000/mcpThis endpoint has no authentication of its own, and it holds your USPTO
and TSDR API keys. Anyone who can reach it can spend your USPTO rate
limits. Bind to 127.0.0.1 (the default) and put an authenticating reverse
proxy in front of it, or otherwise restrict network access. The server logs
a warning at startup when it is bound to anything other than loopback.
Requests are stateless by default: the server keeps no per-client state between them, so it can run behind a load balancer with several replicas and no session affinity. Each worker holds its own upstream USPTO Public Search session, which it establishes on demand and refreshes when it expires.
Flag | Default | Purpose |
|
|
|
|
| Bind address for HTTP |
|
| Port for HTTP |
|
| URL path of the MCP endpoint |
| off | Keep per-client session state; needs session affinity to scale |
| off | Reply with plain JSON instead of an SSE stream |
Each flag has a matching environment variable (see Configuration above); the command line wins where both are set.
Available Tools
Utility Tools
Tool | Description |
| Check status of all USPTO APIs |
| CPC title at any depth (section to subgroup) with hierarchy and children; groups come live from USPTO's scheme pages |
| Look up USPTO status code meaning |
| Look up a Nice/international trademark class (1-45) |
| Look up a USPTO trademark status code meaning |
Patent Public Search (ppubs.uspto.gov)
Tool | Description |
| Search granted patents (full-text, daily updates) |
| Search published patent applications |
| Get a document by GUID; |
| Get a patent's text by number ("US 10,000,000 B2", "D845123" and "RE49123" all work), with the same |
| Forward citations: later granted patents that cite a patent |
| Download patent as PDF |
Open Data Portal (api.uspto.gov)
Tool | Description |
| Get basic application data |
| Search applications with filters |
| Get comprehensive metadata |
| Get patent family/continuity data |
| Get ownership/assignment records |
| Get patent term adjustment data |
| Get attorney/agent of record |
| Get foreign priority claims |
| Get prosecution transaction history |
| List file wrapper documents, filtered by document code (CTNF, CTFR, NOA, REM, CLM, 892…) and direction |
| Read one file wrapper document as plain text ( |
| Search office actions across applications by text, document code, rejection statute, art unit and date; previews are cut at 500 characters, so read hits with |
| Claims rejected, objected to or allowed in each office action, by statute (101/102/103/112/DP), with Alice/Mayo/Myriad/Bilski flags; filter by application, patent, date, art unit or case law |
| References each office action cited, with the 102/103 section; |
| Search petition decisions by text, petition type, outcome, deciding office and date, with outcome counts |
| Search bulk data products |
| Get dataset product details |
PTAB Trial API (api.uspto.gov ODP v3.0)
Tool | Description |
| Search IPR/PGR/CBM proceedings by patent number, party, status |
| Get details for a specific proceeding by number |
| List documents filed in a proceeding |
| Search PTAB decisions |
| Get a specific decision by trial number |
| Search ex parte appeals |
| Get details for a specific appeal |
TSDR - Trademark Status and Document Retrieval (tsdrapi.uspto.gov)
Tool | Description |
| Get authoritative live status by serial or registration number |
| List prosecution document metadata (no rate limit, no downloads) |
| Download prosecution document bundle as PDF (4/min rate limit) |
| Get the mark image (drawing) as base64 |
Trademark Search & Assignments
Tool | Description |
| Full-text search by mark text, owner, goods/services, class, live/dead status |
| Get a trademark's search-index record by serial number |
| Search recorded ownership transfers, 1955-present (Assignment Center, no key) |
Note:
tm_search_trademarksandtm_get_trademarkuse the undocumented internal API behind tmsearch.uspto.gov (the TESS replacement) — the same situation as the PPUBS patent search API. USPTO offers no official REST API for full-text trademark search. The request/response contract was verified live on 2026-06-10, but these tools may break without notice if USPTO changes the internal API. TTAB proceedings (oppositions/cancellations) have no REST API; daily TTAB XML is available as bulk datasets viaodp_search_datasets.
Legacy tools (hidden unless ENABLE_LEGACY_TOOLS=true)
The 23 tools below are for APIs USPTO has shut down. They stay in the code and keep their names, but the server registers them only when ENABLE_LEGACY_TOOLS=true, because their schemas cost every client about 6k tokens per session and every call returns API_UNAVAILABLE. Each response carries a workaround naming the live tool that covers the need.
Patent Litigation API (Unavailable — not offered on ODP, issue #16)
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 |
| OCE Patent Litigation bulk dataset |
| OCE Patent Litigation bulk dataset |
| OCE Patent Litigation bulk dataset or |
| OCE Patent Litigation bulk dataset |
PatentsView API (Unavailable — shut down March 2026)
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Office Action APIs (Unavailable — decommissioned early 2026)
These 2 Office Action tools return API_UNAVAILABLE; odp_search_office_actions replaces them. get_office_action_citations and get_office_action_rejections are live again on ODP (v1.8.0).
Tool | Workaround |
|
|
|
|
Enriched Citation APIs (Unavailable — decommissioned early 2026)
All 3 Enriched Citation tools return API_UNAVAILABLE. Forward citations come from ppubs_get_citing_patents; the references a patent cites are on its front page (ppubs_get_patent_by_number(sections=["biblio"])).
Tool | Workaround |
|
|
|
|
|
|
Resources and Prompts
The server also provides MCP Resources (accessible via @ mentions):
patents://cpc/{code}- CPC classification information at any depth (groups from USPTO's scheme pages)patents://status-codes- USPTO status code definitionspatents://sources- Data source informationpatents://search-syntax- Query syntax guide (patents and trademarks)trademarks://classes- Nice/international trademark classes (1-45)trademarks://status-codes- Trademark status code definitions
And MCP Prompts (workflow templates). Each takes optional arguments; whatever you give is placed in a Subject section ahead of the steps, so the workflow starts with your specifics instead of asking for them:
prior_art_search(invention,keywords,cpc_codes) - Comprehensive prior art search guidepatent_validity_analysis(patent_number) - Patent validity analysis workflowcompetitor_portfolio_analysis(company,technology) - Competitor portfolio analysisptab_proceeding_research(patent_number,proceeding_number,party) - PTAB proceeding research guidefreedom_to_operate(product,cpc_codes) - FTO analysis workflowpatent_landscape(technology,cpc_codes) - Technology landscape mappingtrademark_clearance_search(mark,goods_services,classes) - Trademark clearance/knockout search guidetrademark_portfolio_review(owner) - Trademark portfolio and deadline reviewtrademark_status_monitoring(serial_numbers,mark) - Trademark status and conflict watching
Testing
The 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_serverIntegration tests save each tool's output to test/test_results/ for inspection. The directory is git-ignored: the files are rewritten on every run and nothing reads them back. Recorded responses that tests depend on belong in test/fixtures/.
The unit suite also runs in CI on every push to main and every pull request, across Python 3.10–3.13 (.github/workflows/tests.yml). Integration tests stay deselected there, so CI needs no API keys.
Development
To install development dependencies:
uv sync --devPublishing to PyPI
Releases go out through the Publish to PyPI GitHub Actions workflow (.github/workflows/publish.yml), which uploads with PyPI trusted publishing, so no API token is stored anywhere. After the version bump (pyproject.toml and the USER_AGENT in config.py) is merged to main, run the workflow from the Actions tab. It refuses a version PyPI already has, runs the tests, builds, publishes, and creates the vX.Y.Z tag and GitHub release.
To build locally:
rm -rf dist/ && uv run python -m buildContributing
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.
Version History
v1.8.1 (Current)
Releases publish from GitHub Actions: the new Publish to PyPI workflow uploads through PyPI trusted publishing, so no API token is stored anywhere, and it tags each release and creates its GitHub release. This is the first version it published
Docs: the legacy tool count now reads 23 everywhere (it said 25 in a few places after the two office action dataset tools went live in v1.8.0)
v1.8.0
get_office_action_rejectionsandget_office_action_citationsare live again, on ODP's claim-level datasets (/api/v1/patent/oa/oa_{rejections,citations}/v2/records) instead of the decommissioned developer.uspto.gov paths. Rejections come grouped by office action: the statutes it applies (101, 102, 103, 112, double patenting), the Alice, Mayo, Myriad and Bilski flags, and which claims were rejected, objected to or allowed. Filter by application or patent number, mail date, date range, statute, case law, document code and art unit, socase_law="alice", art_unit="3689"finds an art unit's Alice rejections. Citations list each reference an action cited and the section it was applied under;cited_referenceruns the lookup in reverseBoth tools return each action's
document_id, whichodp_download_document(format="text")readsCoverage: rejections from 2012 on (93M rows), about a week behind the mail date
Tool count: 42 registered by default (65 with
ENABLE_LEGACY_TOOLS)Verified live 2026-10-15
v1.7.0
Full text of file-wrapper papers:
odp_download_documenttakesformat="text"and returns a paper's body as plain text from the XML USPTO publishes beside the PDF, so an office action (typically 10–20k characters) no longer has to be read as a base64 PDF. It covers office actions, notices of allowance, petition decisions, and applicant papers such as remarks (REM), claims (CLM) and IDS forms; amended claims keep their markup as~~deleted~~and++inserted++. Long papers come in 24k-character pages split at paragraph breaks (text_offset/next_offset). A document without XML returnsNO_TEXT_AVAILABLE, and the PDF remains the default formatParsed with the standard library; XML that declares entities is refused
Verified live 2026-10-14 on CTNF, CTFR, NOA, REM, CLM, IDS, PET.PCT, PETDEC and SPEC papers from 2011 to 2026
v1.6.0
New
odp_search_office_actionssearches ODP's Office Action dataset (19.9M actions mailed since mid-2007) by full text, document code, rejection statute (101/102/103/112/double patenting), art unit, date and patent number. Every response carries facet counts by document code and statute for the whole match set, solimit=1answers counting questions. The API returns only the first 500 characters of each action; a hit'sdocument_idis the file-wrapper documentIdentifier, soodp_download_documentreads the restNew
odp_search_petition_decisionssearches 1.1M petition decisions (1991 on) by text, petition type code or words, outcome, deciding office, technology center, date and final-agency-action flag, with outcome, office and type facets. Query matches in the excerpt are marked «like this»;include_full_textadds each decision's full OCR textThe
get_office_action_textandsearch_office_actionslegacy stubs now point to the new tool;check_api_statuslists both datasets as active401/403 from these endpoints carry a hint about ODP's customer-profile requirement
Tool count: 40 registered by default (65 with
ENABLE_LEGACY_TOOLS)Verified live 2026-10-14
v1.5.0
CPC titles below subclass level:
get_cpc_info(andpatents://cpc/{code}) used a bundled table that stopped at the class level, soG06N 3/08came back as "Computing; Calculating; Counting". Subclasses, main groups and subgroups now come from USPTO's published CPC scheme page for the subclass (www.uspto.gov/web/patents/classification/cpc/html/cpc-G06N.html; no key), fetched once a day per subclass:G06N 3/08→ "Learning methods", with the hierarchyG06N › 3/00 › 3/02 › 3/08and the subgroups beneath it. Accepts every form the other tools print (G06N3/08,G06N 3/08,H04B7/0417 20130101). A code the scheme does not contain returnsNOT_FOUNDwith the subclass's main groups; if the page cannot be fetched, the static section and class titles come back with ascheme_errorPrompt arguments: all nine workflow prompts take optional arguments (patent number, company, mark, CPC codes, …). Whatever you give appears in a Subject section ahead of the steps; with no arguments the prompts read as before
New
CPC_SCHEME_BASE_URLsetting; newcpc_schemeentry incheck_api_statusVerified live 2026-09-26: G06N 3/08, G06N, A61K, H04B 7/0417, and an unknown subclass and group
v1.4.0
httpx→httpx2for the nine USPTO clients and the logging transport.httpx2is the successor from the same author (now under the pydantic organization) and is what mcp 2 already depends on;httpx0.28.1 (December 2024) andhttpcore1.0.9 (April 2025) have stopped moving. The API is the same for everything this code uses (AsyncClient,AsyncHTTPTransport,Cookies,build_request/send(stream=True), the exception classes), so the change is a rename across 20 files;httpxandhttpcoreleave the dependency tree entirely. The PPUBS session handling, PDF print job, TSDR XML document list, tmsearch, Assignment Center v3 and the ODP document download redirect were each re-verified live on 2026-09-26 (whole suite, nothing deselected)
v1.3.0
MCP Python SDK 2.x: the server now builds on
mcp>=2,<3(MCPServer, the renamedFastMCP), which lifts themcp<2pin v1.2.1 added. Tool names, arguments and results are unchanged; the--host/--port/--path/--stateful/--json-responseflags andMCP_*variables keep their meaning. Under the hood the transport settings move from the server constructor torun_streamable_http_async(), the protocol tests use mcp 2's in-memoryClient, and the dependency drops the[cli]extra (empty in 2.x)Structured output off: mcp 2 sends every dict result twice by default, as JSON text and again as
structured_content, against an output schema of "any object" — measured at 2.0x wire size on documents and searches. Tools register withstructured_output=False, so results travel once, as beforePinned
click>=8.3.3(PYSEC-2026-2132; a transitive dependency via uvicorn that predates this release) sopip-auditis clean on the new treeVerified 2026-09-26: unit suite on mcp 2.2.0; the live suite (unit plus integration, nothing deselected); a clean
uvxinstall from the built wheel; stdio and streamable-http smoke tests through mcp 2's own client
v1.2.1
Fixed fresh installs:
mcp[cli]>=1.27resolved to mcp 2.x, which renamedmcp.server.fastmcptomcp.server.mcpserver, souvx patent-mcp-serverandpip install patent-mcp-servercrashed on import (ModuleNotFoundError: No module named 'mcp.server.fastmcp'). mcp 2.0.0 shipped on 2026-07-28, so v1.1.1 and v1.2.0 were both affected; the checked-inuv.lock(mcp 1.28.1) hid it from local runs and CI. The dependency is nowmcp[cli]>=1.27,<2. Migrating to the mcp 2 API is a separate piece of work
v1.2.0
Fixed patent-number parsing:
"US 9,876,543 B2"was read as 98765432 (the kind code folded into the number) and"D845123"as 845123, a 1907 utility patent. Numbers now keep their D/RE/PP prefix and lose separators, a leading "US" and the kind code. The lookup also dropped a deadpatentNumber:"…"query that returned nothing and cost ~3 s per callsectionsonppubs_get_full_documentandppubs_get_patent_by_number: choosebiblio,abstract,claims,description. A whole document is ~24k tokens;["biblio", "claims"]is ~6k. Empty and search-highlight fields are dropped from every documentSmaller search results: each PPUBS hit carried two 7 KB references-cited lists; three hits are now 5k characters instead of 41k.
ppubs_search_*default tolimit=20(the truncation step cut larger responses to 20 anyway)New
odp_download_documentfetches a file-wrapper document (office action, response, notice of allowance…) as PDF, following ODP's signed 30-second redirect; documents over 4 MB are refused.odp_get_documentsgainsdocument_codeanddirectionfilters, paging, and a per-code count of the whole wrapperNew
ppubs_get_citing_patents: forward citations via the.urpn.field of granted patents;totalis the citation countLegacy tools hidden by default: the 25 tools for shut-down APIs made up 39% of the schema text sent to every client (~6k tokens). Set
ENABLE_LEGACY_TOOLS=trueto register them; the functions, names and workaround messages are unchangedRead-only annotations on every tool, so clients that honor them need not confirm each call
The competitor-portfolio, freedom-to-operate and patent-landscape prompts, the
patentsview_*workaround messages and this README still taught the slash-prefix search syntax that stopped working in August (AN/,IN/,CPC/); all now use.as.,.in.,.cpc.and@pdRemoved
test/test_patents.py: two script-style live checks that logged errors instead of asserting, so they always passed while calling USPTO and rewritingjson/andpdfs/on every defaultpytestrun, including CI. The default suite now makes no network callsFixed
tm_search_assignments: Assignment Center moved its search API from/ipas/search/api/v2/to/v3/, and CloudFront now refuses POST on the old path with a 403 HTML page. Same request body and response envelope; only the path changed429 handling in the ODP and PTAB clients: a rate-limited call now waits (Retry-After, else exponential backoff) and retries up to
MAX_RETRIESinstead of returning the 429 to the caller. api.uspto.gov limits per key, so a burst of tool calls tripped itIntegration tests:
test/test_tools.pyandtest/test_tools_pytest.pywere duplicates; the pytest one survives under the shorter name, minus eight skipped PatentsView tests, with itspatentNumber:"…"queries andnumFoundassertions (neither matched the live API or the tool envelope any more) fixed, and with live tests forsections, prefixed numbers,ppubs_get_citing_patents, theodp_get_documentsfilter andodp_download_document.uv run pytest -m ""runs the whole suite, unit and live, and passesLive-verified 2026-09-26:
.pn.with D/RE prefixes,.urpn., the ODP document listing and download redirect, Assignment Center v3Tool count: 38 registered by default (63 with
ENABLE_LEGACY_TOOLS)
v1.1.1
Fixed
ppubs_download_patent_pdf: USPTO moved the PDF download endpoint — the old/api/internal/print/save/{pdfName}path now returns 404; the client uses the live/api/print/save/{pdfName}endpoint (verified live 2026-08-05 with a real search, document fetch, and PDF download)Corrected PPUBS search syntax guidance: the slash-prefix field qualifiers (
TTL/,IN/,AN/,CPC/) no longer work on the live API — they silently return 0 results, andTTL/"phrase"returns a server 500. Search tool docstrings, the prior-art prompt, and thepatents://search-syntaxguide now teach the working dotted-suffix forms (.ti.,.ab.,.clm.,.spec.,.in.,.as.,.pn.,.cpc.,@pd/@addate ranges), each verified liveBoth breakages were USPTO-side drift predating v1.1.0 (confirmed by running the same live test against v1.0.0-era code)
v1.1.0
Remote hosting over HTTP: new
--transport streamable-httpmode serves the MCP endpoint over the network, so one deployment can back a whole team instead of every user running a local copy.stdioremains the default, so existing Claude Desktop and Claude Code configurations are unchanged. New flags--host,--port,--path,--stateful,--json-response, each with a matchingMCP_*environment variable. See "Remote hosting over HTTP" for the security caveat — the endpoint holds your API keys and does not authenticate callersStateless by default: HTTP requests carry no per-client state, so the server can run behind a load balancer with several replicas and no session affinity
Fixed a session race in the Public Search client (affects stdio users too): concurrent tool calls each reset the shared cookie jar and raced to swap the access token, so requests already in flight could be signed with a half-replaced session. Session setup is now serialized, a 403 refresh is skipped when another call has already replaced the token, and the token travels per request instead of living on the shared client's default headers
Fixed shutdown: closing the nine HTTP clients no longer happens in an
atexithook that spun up a fresh event loop; it now runs in the loop the clients were opened on. Deliberately not a FastMCP lifespan — in stateless HTTP mode that runs once per request, which would close the clients after the first tool callRaised the MCP SDK floor to
>=1.27(was>=1.3.0, which allowed installs to resolve an SDK without streamable HTTP)Added MCP protocol-layer tests: the suite previously called tool functions directly and never exercised schema generation, resource/prompt registration, or serialization. 19 new tests (378 total, up from 359)
v1.0.0
Trademark support: 9 new trademark tools across three new clients, all verified against the live USPTO services on 2026-06-10
TSDR (
tsdr_get_trademark_status,tsdr_list_trademark_documents,tsdr_download_trademark_documents,tsdr_get_trademark_image) — official trademark status/document API. Requires a TSDR-specific key (the ODP key does not work); error responses detect the wrong-key signature and explain how to get the right one. Document bundles above 4 MB are rejected with filter guidance (full wrappers can exceed 10 MB)Trademark search (
tm_search_trademarks,tm_get_trademark) — full-text search by mark text, owner, goods/services, and Nice class via the internal Elasticsearch API behind tmsearch.uspto.gov (no official REST API exists). Verified live; handles AWS WAF rejections withTMSEARCH_WAF_TOKENsupportTrademark assignments (
tm_search_assignments) — USPTO Assignment Center public API (assignmentcenter.uspto.gov, no key required), searchable by serial/registration number, assignee, assignor, and reel/frame. Replaced the legacy assignment-api.uspto.gov XML API decommissioned June 5, 2026
New reference tools and resources:
get_trademark_class_info,get_trademark_status_code,trademarks://classes,trademarks://status-codes(all 45 Nice classes, common trademark status codes)3 new workflow prompts:
trademark_clearance_search,trademark_portfolio_review,trademark_status_monitoringFixed
ppubs_download_patent_pdf(calleddownload_imagewith the wrong signature, raisingTypeError)Rewrote patent workflow prompts to reference live tools (the old prompts still pointed at decommissioned PatentsView/Office Action/citation tools)
New env vars:
TSDR_API_KEY,TMSEARCH_WAF_TOKEN,TSDR_BASE_URL,TMSEARCH_BASE_URL,TM_ASSIGNMENT_BASE_URLTool count: 61 registered (36 active, 25 unavailable)
v0.9.5
Re-enable 7 PTAB tools on USPTO ODP v3.0:
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.Active tool count: 27 (up from 20); unavailable: 25 (down from 32); total registered remains 52
v0.9.4
Fix
ppubs_search_patents/ppubs_search_applicationsquery semantics (issue #21): default operator changed fromORtoAND, so multi-word queries likemachine learningno longer match the entire corpus and collapse into the latest-grants fallback underdate_publ descsort.Fix template-mutation bug in PPUBS client (
search_query.copy()→copy.deepcopy(...)), eliminating a concurrency hazard between parallel calls.Fix
odp_search_applicationsfilters being silently ignored upstream (issue #21): switched from GET query-string params to POST with a Lucene-styleqbody.assignee_name,inventor_name,application_number,patent_number, and filing-date ranges are now properly AND-combined into the search. Tool now returnsMISSING_FILTERrather than dumping the full 12.8M-record corpus when called with no filters.Updated
ppubs_search_patents/ppubs_search_applications/odp_search_applicationsdocstrings to reflect the corrected semantics and document Lucene query support on ODP.Added
CONTRIBUTING.md,AGENTS.md, bug-report + feature-request issue templates, and a PR template.
v0.9.0
Handle PTAB Trial API and Patent Litigation API unavailability on ODP (issue #16)
All 7
ptab_*tools and 4 litigation tools now returnAPI_UNAVAILABLEwith workaround guidance pointing to PPUBS tools and USPTO bulk datasetsActive tool count: 20 (down from 31); unavailable: 32 (up from 21); total registered remains 52
Added unit tests for all 11 newly-unavailable tools and extended the shared error-structure parametrization
Updated
check_api_status,resources.pydata sources, client docstrings, and README to reflect the shutdown
v0.8.0
Handle decommissioned PatentsView API (shut down March 20, 2026)
All 14
patentsview_*tools returnAPI_UNAVAILABLEwith workaround guidanceFixed circular references in office_actions resources that pointed to unavailable PatentsView tools
Updated API Sources table, configuration, and documentation
v0.7.0
Handle decommissioned Office Action and Enriched Citation APIs (developer.uspto.gov)
All 7 affected tools return
API_UNAVAILABLEwith workaround guidanceAdded
test/unit/test_unavailable_tools.pyfor decommissioned tool testingCode cleanup: removed dead code, improved docstrings
v0.6.2
Updated API key registration instructions: keys are now obtained from data.uspto.gov ("My ODP")
Clarified that
api.uspto.govis the correct API endpoint (notdata.uspto.govwhich is the web portal)Noted PTAB API v3 migration to ODP and Office Action API migration (early 2026)
v0.6.1
Added PatentsView attorney search tools (
patentsview_search_attorneys,patentsview_get_attorney)Added PatentsView IPC classification tools (
patentsview_lookup_ipc,patentsview_search_by_ipc)Fixed bug in
search_publicationsmethod (pagination options not being passed)
v0.6.0
PyPI release preparation
v0.5.0
Focused on USPTO-only data sources
Renamed ODP tools with
odp_prefix for clarityImproved function signatures (using
queryinstead ofq)
v0.3.0
Added 33 new tools (PTAB, PatentsView, Office Actions, Citations, Litigation)
Rate limiting support for PatentsView API
Comprehensive async client architecture
v0.2.2
Centralized configuration with environment variables
Standardized error handling
Input validation with Pydantic
Retry logic with exponential backoff
Session caching for PPUBS
License
MIT
Available Tools
42 toolscheck_api_statusARead-onlyIdempotent
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context by enumerating what comes back: configuration status (API keys, credentials), connection availability, and rate-limit information where available.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose, then a labeled trigger block, then a scannable bullet list of return contents. Every sentence carries information and nothing is redundant padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return-value burden, and it does so by listing the three categories of status reported. Combined with the annotations covering the safety profile, an agent has everything needed to invoke and interpret this no-arg diagnostic tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which sets the baseline at 4. The description correctly does not invent parameter semantics, and the empty schema confirms there is nothing further to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Check status and availability of all patent and trademark data sources') and clearly occupies a diagnostic niche distinct from every sibling, which all retrieve substantive patent/trademark data. An agent can tell instantly that this is a health-check tool, not a data-fetch tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger via 'USE THIS TOOL WHEN: You encounter errors or want to verify which APIs are available ... before starting research', covering both reactive and preflight contexts. It stops short of stating when not to use it or naming a fallback sibling, so it is clear context rather than full when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cpc_infoARead-onlyIdempotent
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`.
| Name | Required | Description | Default |
|---|---|---|---|
| cpc_code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent/openWorld annotations by disclosing the data provenance split (bundled table for sections/classes vs. USPTO scheme page for subclasses/groups), the fetch cost ('one fetch per subclass per day, no key'), and the degradation path ('scheme_error' fallback to static titles). That is exactly the operational context an agent cannot infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the one-line purpose, then organizes the rest into labeled WHEN and Args/Returns blocks so an agent can skim. Length is justified by the accepted-input variety and the branchy return shape; no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return contract at every depth (section title/description/classes; class titles; subclass/group title, level, hierarchy, direct children, source page) plus the partial-failure case. For a 1-parameter tool this leaves nothing an agent needs missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% — the single parameter has no description — so the description carries the full burden and does so thoroughly, enumerating accepted forms: compact ('G06N3/08'), spaced ('G06N 3/08'), PPUBS-style with date ('H04B7/0417 20130101'), and bare hierarchy prefixes ('G06N', 'G06', 'G'). This is meaning the schema does not supply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (look up) and resource (a CPC symbol) with the exact depths supported (section, class, subclass, main group, subgroup) and explicitly what it returns at each depth. No sibling tool covers CPC classification, so the agent can rule out the rest of the list immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN' block gives concrete triggering contexts — reading CPC codes off a patent or selecting codes for a `.cpc.` search — which is clear positive guidance. It stops short of naming an alternative or stating when not to use it, but that is largely because no sibling does CPC lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_office_action_citationsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No | ||
| art_unit | No | ||
| mail_date | No | ||
| document_id | No | ||
| tech_center | No | ||
| legal_section | No | ||
| patent_number | No | ||
| examiner_cited | No | ||
| cited_reference | No | ||
| application_number | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the read-only/idempotent/open-world profile, so the description adds real operational context: data starts around 2012, rows lag mailing by about a week, and rows contain no mail date, plus the workaround of using the rejection dataset to pin down the day. Missing rate limits and nothing on behavior when no filter is supplied, which keeps it out of the top score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the one-line purpose, then routes with when-to-use and cheaper alternatives, then coverage caveats, then args, then returns. Because the schema itself has zero field descriptions, the per-argument block is not redundant and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The returns fields are enumerated in prose (necessary since there is no output schema), coverage limits are disclosed, and all filters are explained. The one unaddressed case is that zero parameters are required, yet nothing says whether an unfiltered call is valid or would sweep the whole corpus; a note on that (and on offset/limit paging behavior) would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does: it documents all 12 parameters with formats ('18402543' without slashes, YYYY-MM-DD), inter-parameter dependencies (mail_date needs application_number or patent_number), accepted input variants for cited_reference, the meaning of legal_section values, and the 200-row cap on limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (retrieve prior-art references examiners cited in office actions) and explicitly separates itself from the nearest siblings get_office_action_rejections, ppubs_get_citing_patents and ppubs_get_patent_by_number. The reverse-lookup mode (which applications cited a given reference) is called out, so an agent can identify the tool without reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'USE THIS TOOL WHEN' block gives both forward and reverse lookup conditions, and names cheaper alternatives with the exact condition that selects them (front-page citations -> ppubs_get_patent_by_number(sections=["biblio"])). Nothing about when-to-use or when-to-use-something-else is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_office_action_rejectionsARead-onlyIdempotent
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No | ||
| date_to | No | ||
| statute | No | ||
| art_unit | No | ||
| case_law | No | ||
| date_from | No | ||
| mail_date | No | ||
| document_id | No | ||
| document_code | No | ||
| patent_number | No | ||
| application_number | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), and the description adds substantive behavior beyond them: coverage window (2012 on, 93M rows, ~1 week lag), a machine-extraction caveat ('treat them as a guide and read the action'), and the critical pagination quirk that offsets count rows not actions so an action can straddle pages.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and usage, then cleanly sectioned into Args and Returns. It is long, but with 13 undocumented params the length is largely earned; a few arg descriptions (e.g., statute/case_law examples) are slightly redundant with the Returns list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-param, zero-schema-description tool with no output schema, the description supplies the return shape (document_id, app_num, document_code, mail_date, art_unit, statutes, case_law, claims, claim_groups), total row counting, and metadata.next_offset continuation. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 13 params, so the description carries the full burden and does so: it documents each arg with format and semantics (application_number without slashes, comma-separated statutes that must ALL apply, comma-separated cases that must ALL be cited, query as an AND-ed Solr clause, offset default 0, limit default 50/max 200). This adds meaning the bare schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get claim-level rejection data from office actions') and immediately distinguishes itself from siblings by naming odp_search_office_actions (for text) and odp_download_document (to read it). An agent can tell exactly what this returns versus adjacent tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN' block gives concrete triggering conditions (which claims an examiner rejected/objected/allowed and under which statute, plus claim-level 101 analytics like case_law="alice", art_unit="3689"). It also routes the agent to alternatives for the action's text, covering both when-to-use and when-to-use-something-else.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_status_codeARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds the return shape (description plus examination stage), which is valuable since there is no output schema. It does not say how it behaves for an invalid code, a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by tightly scoped USE WHEN, Args, and Returns sections. Every sentence earns its place; the structured formatting is slightly heavier than needed for a single-parameter lookup.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial one-parameter lookup with no output schema, the description covers purpose, trigger, parameter semantics, and return values. Only the behavior on an unrecognized code is left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden, and it does: it names the parameter, explains it is a status code number, and gives a concrete example ('30' for 'Docketed New Case'). It does not cover edge cases like unknown codes, keeping it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Look up USPTO application status code meaning.' The word 'application' distinguishes it from the sibling get_trademark_status_code, so an agent can route correctly, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A distinct 'USE THIS TOOL WHEN' block gives an explicit triggering condition (encountering a status code in application data). It lacks a when-not clause or named alternative, but the trigger is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trademark_class_infoARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| class_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description usefully adds what the tool returns (class title, type, description), but says nothing about error behavior for out-of-range values or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line summary followed by clearly labeled USE/RETURNS/Args sections; every sentence contributes. The Args and Returns blocks are slightly verbose for a single-parameter lookup but remain scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by naming the returned fields, and the range/goods-services framing gives the agent what it needs to call the tool. Missing only edge-case behavior (invalid class numbers) and any format details for the returned description text.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it does: it defines the parameter as an international class number constrained to 1-45, and gives concrete examples ('9' for computer software, '25' for clothing, '42' for software services). It could mention the string-vs-integer expectation, but the examples imply string usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Look up a Nice/international trademark class (1-45)') and scopes it with the goods/services split. This is clearly distinguishable from siblings like tsdr_get_trademark_status or get_cpc_info, so an agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The explicit 'USE THIS TOOL WHEN' block gives concrete triggers: needing to know what a class covers, or picking classes for a clearance search. It gives no explicit alternatives or when-not-to-use cases, but the triggers are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trademark_status_codeARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and open-world, so the safety profile is covered. The description adds useful behavioral context by stating what is returned ('Status code description and prosecution stage'), which the annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, followed by a clear usage trigger and Args/Returns blocks. Efficient and scannable; the Args section lightly restates the schema but the structure is sound.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only, single-parameter lookup with no output schema, the description covers what the tool does, when to reach for it, and what it returns. Nothing essential an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema's bare 'Code' string gives little, but the description compensates by naming the parameter as a 'Trademark status code' and supplying concrete value examples with meanings. This adds real semantic value beyond the schema for the single required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (look up) and resource (USPTO trademark status code meaning), with the domain qualifier 'USPTO trademark' disambiguating it from the generic sibling get_status_code. However, it does not explicitly contrast itself with that sibling or with tsdr_get_trademark_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN' line gives a concrete triggering condition ('Trademark data contains a numeric status code you need to interpret') and reinforces it with real examples (700=Registered, 686=Published for opposition). No when-not or explicit alternative routing is offered, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_download_documentARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | ||
| app_num | Yes | ||
| document_id | Yes | ||
| text_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent/open-world profile, but the description adds substantial extra behavior: NO_TEXT_AVAILABLE for non-XML documents, OCR error risk on applicant papers, 24k-character paging with next_offset, a 4 MB refusal (RESPONSE_TOO_LARGE), and the USPTO_API_KEY requirement. Claim-markup conventions (~~deletions~~, ++insertions++) are also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Clear front-loaded purpose followed by WHEN / Args / Returns sections, and virtually every sentence carries operational information. It runs long and the Args block partly restates parameter names already visible in the schema, so it is dense rather than tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotation-level detail, the description must supply everything an agent needs: both return shapes, the pagination contract, the failure modes (NO_TEXT_AVAILABLE, RESPONSE_TOO_LARGE), and the auth prerequisite. Nothing essential to a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does: app_num format without slashes, document_id provenance and an example, format's two legal values and the pdf default, and text_offset's exact meaning tied to the previous response's next_offset. No parameter is left ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one file-wrapper document') plus the two output modes, which cleanly separates it from the sibling lookup tools that only return identifiers. An agent can tell this is the retrieval/read step of the odp document workflow without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'USE THIS TOOL WHEN:' block names the two feeding siblings (odp_get_documents, odp_search_office_actions) and the precondition (you have a document identifier). It also gives a positive preference ('Prefer format="text"') and states when the alternative (format="pdf") is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_get_adjustmentARead-onlyIdempotent
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")
| Name | Required | Description | Default |
|---|---|---|---|
| app_num | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, covering the safety profile. The description adds useful context on what PTA represents and why it's requested, but says nothing about rate limits, response contents, or data freshness. With annotations doing the heavy lifting, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one line, followed by a use-case trigger and parameter note. The 'Args:' block is slightly boilerplate for a single parameter but overall it is tight and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only lookup with no output schema, the description covers purpose, when to use it, and parameter format. It omits any hint of what the returned PTA data looks like, which is a minor gap given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it specifies the format ('without slashes') and gives a concrete example ('14412875') that the schema's bare 'App Num' string type does not convey. This is meaningful syntax guidance for the single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieving patent term adjustment (PTA) data. This is distinct from siblings like odp_get_application or odp_get_continuity, though it does not explicitly name or contrast those alternatives. An agent can identify the resource clearly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The explicit 'USE THIS TOOL WHEN' clause gives a concrete condition: calculating a patent's actual expiration date accounting for USPTO delays. It lacks any when-not guidance or named alternatives, but the positive trigger is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_get_applicationARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| app_num | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety and repeatability profile is fully covered. The description adds useful context about what is returned (filing date, status, basic info), but says nothing about rate limits, auth requirements, or error behavior for an invalid application number. Adequate given the annotation coverage, but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, a scannable USE THIS TOOL WHEN clause, and a compact args/returns block. Every line earns its place and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only lookup with full annotation coverage and no output schema, the definition tells the agent what it gets and how to format the input. The one real gap is sibling disambiguation against odp_get_application_metadata and odp_get_documents, which the description never addresses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden – and it does: it specifies the format ('without slashes or commas') and gives a concrete example ('14412875'). That is genuinely beyond what the bare string schema provides, though it doesn't state whether leading zeros or check-digit variants are accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get patent application data') plus the data source (USPTO Open Data Portal), so the agent knows what it retrieves. However, it does not distinguish itself from the closely-named sibling odp_get_application_metadata, whose scope ('basic metadata') appears to overlap with this tool's stated 'basic info', leaving an ambiguity an agent must resolve by guessing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
An explicit 'USE THIS TOOL WHEN' clause gives a clear triggering condition: needing prosecution/file wrapper data (status, dates, metadata). It stops short of naming when NOT to use it or pointing at alternatives, and gives no guidance for cases that fit both this tool and odp_get_application_metadata or the odp_search_* family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_get_application_metadataARead-onlyIdempotent
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")
| Name | Required | Description | Default |
|---|---|---|---|
| app_num | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered structurally. The description adds only that the payload includes examiner/art-unit/status content; it says nothing about auth requirements, rate limits, or error behavior on invalid application numbers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded: the purpose sentence comes first, followed by the usage condition and parameter note. The 'Args:' boilerplate is slightly redundant but the example earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description partially fills that gap by naming the returned fields (examiner info, art unit, status). For a single-parameter read tool this is largely sufficient, with the main omission being how it differs from odp_get_application.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% – the schema only declares a string with no description. The description compensates by specifying the format constraint ('without slashes') and a concrete example ('14412875'), which is exactly the detail an agent needs to form a valid call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get detailed metadata for a patent application'. The 'detailed' qualifier hints at depth, but the description never distinguishes this from the sibling odp_get_application, so an agent must guess which metadata tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN' block gives a clear triggering condition and enumerates what the response covers (examiner info, art unit, detailed status). It stops short of naming an alternative or stating when not to use it, which matters given the near-identical sibling odp_get_application.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_get_assignmentARead-onlyIdempotent
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")
| Name | Required | Description | Default |
|---|---|---|---|
| app_num | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered structurally. The description adds one useful behavioral fact — that results include historical as well as current owners — but says nothing about permissions, rate limits, or result size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short blocks — purpose, when-to-use, args — with the resource and trigger front-loaded and the parameter format detail last. No sentence is redundant and nothing important is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers purpose, trigger, and parameter format, and clarifies that the target may be a patent or an application. It stops short of describing the returned record's shape or whether results can span multiple assignments.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter has no title-level documentation, so the description must compensate — and it does, specifying 'Application number without slashes' plus a concrete example ('14412875'). That format constraint is exactly the kind of detail an agent would otherwise get wrong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get patent assignment/ownership records') and the parenthetical scope 'current and historical owners' clarifies what kind of record. The 'patent' qualifier implicitly separates it from the trademark-side sibling tm_search_assignments, but no sibling is named explicitly, so it falls just short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The explicit 'USE THIS TOOL WHEN: You need to know current and historical owners of a patent or application' gives a clear triggering condition. It offers no when-not guidance and names no alternative (e.g., tm_search_assignments for trademarks, or odp_get_application for general bibliographic data), so it stops at 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_get_attorneyBRead-onlyIdempotent
Get attorney/agent of record for an application.
Args:
app_num: Application number without slashes (e.g., "14412875")
| Name | Required | Description | Default |
|---|---|---|---|
| app_num | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered elsewhere. The description adds nothing behavioral beyond the purpose statement (no data source, no handling of missing attorneys, no freshness/return-shape context). With annotations carrying the burden, the description's contribution here is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two lines and front-loads the purpose before the argument detail. The 'Args:' block is docstring boilerplate but its content (format + example) earns its place; nothing else is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only lookup with annotations covering safety and no output schema, the description supplies the essential purpose and the non-obvious input format. Remaining gaps (behavior when no attorney of record exists, data source) are minor for a tool this simple.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema only exposes 'app_num' with no description, so the description must compensate. It does so with a concrete format rule ('without slashes') and an example value ('14412875'), which is exactly the kind of input-format detail an agent needs to construct a valid call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: get the attorney/agent of record for an application. This is clearly distinguishable from siblings like odp_get_application or odp_get_assignment, though it never explicitly contrasts itself with them. Purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus related ODP getters, no prerequisites, and no mention of what to do when no attorney is on record. The description only states what the tool does, not when to reach for it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_get_continuityARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| app_num | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds only a brief statement of what the return contains (parent/child relationships, priority claims); it says nothing about auth, rate limits, or empty-result behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by terse labeled sections (WHEN/Args/Returns). No filler, though the template headers add slight verbosity relative to the tiny payload.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers purpose, trigger, argument format, and return content. It is adequately complete; only edge-case behavior (no family found, invalid app number) is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one parameter and 0% schema description coverage, the description carries the burden and does compensate: it specifies the format ('without slashes') and gives a concrete example ('14412875'), which an agent needs to form a valid call. It doesn't note validation or error behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states a specific verb and resource ('Get patent family/continuity data') and clarifies the scope with 'parent and child applications'. It is distinguishable from siblings like odp_get_foreign_priority, though it never names an alternative to sharpen the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN' block gives clear context (understanding the family tree – parents, continuations, divisionals, CIPs), which is genuinely helpful selection guidance. It stops short of exclusions or naming a sibling tool to use instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_get_datasetBRead-onlyIdempotent
Get details of a specific bulk dataset product.
Args:
product_id: Dataset product identifier
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered. The description adds only the 'bulk dataset product' framing and nothing about return shape, rate limits, or auth, so with the lowered bar it is adequate but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely short and front-loaded, with the core action stated first. The Args block is boilerplate but harmless given a single parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-id tool with full annotation coverage and no output schema, the description is minimally sufficient. It omits where product_id comes from and gives no sense of what 'details' are returned, which an agent would want for a bulk dataset lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden. It labels product_id as a 'Dataset product identifier,' which adds minimal semantic value beyond the parameter name, but at least confirms it is an identifier rather than free text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get details of a specific bulk dataset product.' An agent can distinguish it from the sibling odp_search_datasets by the 'specific' qualifier, though the contrast is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of odp_search_datasets as the way to discover the product_id this tool requires. The only hint of context is 'specific,' which leaves the agent to infer that an identifier must already be known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_get_documentsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| app_num | Yes | ||
| direction | No | ||
| document_code | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, non-destructive behavior. The description goes further by describing sort order (newest first), returned fields (documentIdentifier, documentCode, dates, page count, formats), pagination via offset/limit, direction categories, and metadata.code_counts, adding substantial context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then usage, args, and returns, with clear headings. The document-code examples are lengthy but directly useful for an undocumented parameter; no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description describes the return shape and key fields. For a 5-param listing tool with rich annotations and complex filtering, the description supplies enough context about arguments, behavior, and return format to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema provides no descriptions or enums, so the description carries the full burden. It defines app_num format, explains document_code syntax and lists common codes, specifies direction values, and gives defaults for offset and limit—compensating completely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('documents in an application's file wrapper'), and disambiguates from the download tool by naming odp_download_document as the read step. An agent can identify this as the prosecution-history listing tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit 'USE THIS TOOL WHEN' section enumerating document types and names the follow-up tool for reading a single document. It does not say when to prefer this over sibling search tools like odp_search_office_actions, nor does it state when not to use it, so it falls short of full when/when-not/alternatives coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_get_foreign_priorityARead-onlyIdempotent
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")
| Name | Required | Description | Default |
|---|---|---|---|
| app_num | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and openWorld, covering the safety profile. The description adds semantic value by explaining the claims may affect the effective filing date, but says nothing about return format or result shape. Given annotation coverage, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by a usage cue and the arg format; nothing is redundant. The "USE THIS TOOL WHEN" header and Args section add slight boilerplate but remain efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-param read-only tool, the description covers purpose, when to use it, and the parameter's required format. No output schema exists, but the description needn't explain return values; only a brief hint on returned claim contents would push this higher.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the parameter burden. It documents the single param's format ("Application number without slashes") and gives a concrete example ("14412875"), which is exactly the missing detail the schema omits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (foreign priority claims for an application), which is concrete and unambiguous. It does not name a sibling or explicitly distinguish itself from related tools like odp_get_continuity or odp_get_application, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"USE THIS TOOL WHEN: You need to find priority claims to foreign applications that may affect the effective filing date" gives a clear triggering condition. It lacks explicit exclusions or named alternatives, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_get_transactionsARead-onlyIdempotent
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")
| Name | Required | Description | Default |
|---|---|---|---|
| app_num | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety and repeatability profile is covered. The description adds useful content scope (what event types are included) but says nothing about pagination, result volume, or whether the full history is always returned — modest added value over the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short blocks with zero filler: the purpose sentence first, then the selection trigger, then the argument format. Every line earns its place and the reader gets the essential facts immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers purpose, selection trigger, and argument format adequately, and its enumeration of event types substitutes partially for a missing return schema. The remaining gap — result size/pagination behavior — is minor given the annotations and tool simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden, and it does: it specifies the format ('without slashes') and gives a concrete example ('14412875'), which is exactly the kind of detail the bare schema lacks. It does not add anything further, but for a single required string parameter this is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get prosecution transaction history for an application.' The parenthetical content (office actions, responses, fee payments) clarifies the resource scope, distinguishing it reasonably from sibling tools like odp_get_documents or odp_search_office_actions, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN' block gives a clear selection condition — needing the complete prosecution timeline rather than a subset of events. It provides positive guidance but no when-not condition and does not point to alternatives such as odp_get_documents for actual document retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_search_applicationsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No | ||
| assignee_name | No | ||
| inventor_name | No | ||
| patent_number | No | ||
| filing_date_to | No | ||
| filing_date_from | No | ||
| application_number | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds genuinely useful behavioral detail beyond that: typed filters are AND-ed, OR requires a Lucene string in `query`, and defaults are stated for offset/limit. It stops short of describing result normalization details or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then a clearly delimited usage block, then Args, then Returns. Given 0% schema coverage the parameter list is necessary rather than padding, and no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description gives only a thin return statement ('Normalized response with matching applications'). For a 9-parameter search tool it is otherwise complete: all filters, formats, and the AND/OR semantics are covered, but pagination behavior (whether offset+limit is the only paging mechanism, total counts) is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it does: every one of the 9 parameters is documented with meaning and format ('filing_date_from: Filing date range start (YYYY-MM-DD)', 'inventor_name: matches first inventor'). The Lucene example clarifies the otherwise opaque `query` field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search patent applications in USPTO Open Data Portal') and immediately differentiates itself from the PPUBS sibling by scoping to filtering not available there. An agent can distinguish it from ppubs_search_applications and the many odp_get_* tools without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN' block gives an explicit triggering condition ('filtering by applicant metadata, dates, or other criteria not available in PPUBS'), which is concrete usage guidance. It references PPUBS as the alternative but not by exact tool name, and offers no when-not guidance, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_search_datasetsARead-onlyIdempotent
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)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, covering the safety profile. The description adds no behavioral context of its own — no pagination semantics, no result shape, no rate limits — so it does little beyond the structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, the trigger sentence follows, and the args list is compact. Nothing is padded, though the Args block largely restates schema defaults rather than adding new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations present and only three optional parameters, the description plus schema is nearly sufficient for correct invocation. The main residual gap is that no output schema exists and the description doesn't hint at what a result record contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden, and it does: query, offset (starting position, default 0) and limit (max results, default 25) are all explained. It compensates for the empty schema, though the semantics remain minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource: 'Search USPTO bulk data products/datasets', which is distinguishable from the sibling odp_get_dataset by the search verb. It stops short of an explicit sibling comparison, so it lands at a clear-but-undifferentiated 4.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN' block gives a concrete trigger — finding bulk download datasets for large-scale analysis — which is more than implied usage. It omits the natural exclusion (once you have a dataset ID, use odp_get_dataset), so no alternative is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_search_office_actionsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | newest | |
| limit | No | ||
| query | No | ||
| offset | No | ||
| app_num | No | ||
| date_to | No | ||
| art_unit | No | ||
| date_from | No | ||
| record_id | No | ||
| document_code | No | ||
| patent_number | No | ||
| rejection_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, yet the description adds substantial non-obvious behavior: text_preview is capped at 500 characters while the API still searches full text, coverage starts mid-2007 with 19.9M records, typed filters are AND-ed versus Lucene OR, and metadata.facets enables counting with limit=1. It even routes the agent to odp_download_document(format="text") to read a hit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded and sectioned (purpose, USE THIS TOOL WHEN, IMPORTANT caveat, Coverage, Args, Returns). Every sentence is load-bearing given 0% schema coverage and no output schema; nothing is repeated from structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the Returns block enumerates the returned fields and metadata.facets; with 12 undocumented params, the Args block documents each. Caveats, coverage window, alternative tools, and result-reading workflow are all present, so an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does so for all 12 parameters: format examples for app_num, the patent-to-application resolution, the enumerated document_code values (CTNF/CTFR/NOA/CTRS/CTAV/APEA/PETDEC), the rejection_type list, date format, sort values, and limit/offset defaults with the 100 cap. This adds meaning far beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states a specific verb+resource+scope: search office actions across all applications by examiner text. It explicitly differentiates from the sibling odp_get_documents ("For one application's history, odp_get_documents is cheaper"), so an agent can route between them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The "USE THIS TOOL WHEN" block enumerates concrete triggering conditions (free text, statute, art unit, date, counting) and names the cheaper alternative with the condition that selects it. It also explains the AND/OR filter semantics, which directly affects whether an agent uses this tool or builds a Lucene query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odp_search_petition_decisionsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | newest | |
| limit | No | ||
| query | No | ||
| offset | No | ||
| app_num | No | ||
| date_to | No | ||
| outcome | No | ||
| date_from | No | ||
| record_id | No | ||
| final_only | No | ||
| patent_number | No | ||
| petition_type | No | ||
| deciding_office | No | ||
| include_full_text | No | ||
| technology_center | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), but the description layers on substantial non-obvious behavior: 1.1M records from 1991, OCR noise with a concrete degraded example ('EENITED STATES') and a proximity-search workaround, facet-based grant-rate aggregation in one call, the exact meaning of final_only (currently the DENIED set), and the ~1.5-3k character cost per record for include_full_text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded and organized under Purpose / When / Coverage / Args / Returns headings, with no filler sentences. It is long, but nearly all of that length is load-bearing documentation for 15 undescribed parameters, so the size is defensible rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the 'Returns' section describes the returned fields (record_id, dates, petition type, outcome, deciding office, final_decision, marked-up text excerpt) and includes the hand-off to odp_download_document using documentIdentifier plus app_num for the full decision letter. Nothing needed to call or chain this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 15 parameters, so the description carries the full burden and does so: every parameter is documented with format, examples, and semantics (app_num without slashes, petition_type as numeric code or description words, outcome enumerations, date format YYYY-MM-DD, record_id provenance, sort/offset/limit defaults and the 100 cap).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search USPTO decisions on patent petitions') and immediately scopes it to the Office of Petitions domain, which cleanly separates it from siblings like ptab_search_decisions, ptab_search_appeals, and odp_search_office_actions. An agent can identify the correct tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
An explicit 'USE THIS TOOL WHEN' block enumerates the concrete petition scenarios (revival of abandoned applications, reinstatement after missed maintenance fee, delayed priority claims, petitions to make special, supervisory review). It further tells the agent when to use `query` (searching argument text) and when typed filters suffice, plus the OR vs AND semantics that decide between the two paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppubs_download_patent_pdfARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| patent_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent and non-destructive behavior, so the bar is lower; the description still adds real context by disclosing the base64 payload format and warning that Claude Desktop may not fully support PDF display. It omits anything about size limits or failure modes for invalid patent numbers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then a short usage line, args, and return shape; every section earns its place. The "Args:"/"Returns:" scaffolding is slightly boilerplate-heavy for one parameter but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly describes the return value (dictionary with base64 PDF data) and flags the client-side display caveat that an agent would otherwise discover only by failing. Failure behavior for an unresolvable patent number is the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single parameter, so the description carries the burden, and it does so with concrete accepted formats ("7123456", "US 10,000,000 B2", "D845123", "RE49123"). That materially reduces trial-and-error, though it doesn't state whether non-US or application numbers are accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Download) plus resource (patent PDF) and the encoding (base64), which is enough for an agent to know exactly what it gets. It does not explicitly distinguish itself from near-siblings like ppubs_get_full_document or ppubs_get_patent_by_number, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"USE THIS TOOL WHEN: You need the official PDF document of a patent" gives a clear triggering condition. There is no explicit when-not guidance or named alternative for agents that only need text/metadata rather than the PDF, which keeps it at 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppubs_get_citing_patentsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | date_publ desc | |
| limit | No | ||
| offset | No | ||
| patent_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantive context beyond them: the search targets the .urpn. references-cited field, pending applications are not indexed so unissued citing applications are excluded, and it notes a live verification date. That coverage limitation is exactly the kind of behavior an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: purpose, when-to-use, mechanism/caveats, then Args and Returns sections. The 'working replacement for the decommissioned Enriched Citation API' line and the verification date are marginal but defensible context; otherwise every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still documents return shape (normalized search response, `total` as forward-citation count, per-result GUID/title/dates/inventors/classification). Combined with full parameter coverage and the index caveat, nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does: patent_number accepts multiple formats ("7123456", "US 10,000,000 B2", "D845123", "RE49123"), offset is for pagination, limit defaults to 20 with a max of 500, and sort defaults to "date_publ desc" meaning newest citing patent first.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with scope: 'Find later granted patents that cite a patent (forward citations).' It explicitly distinguishes the direction of citation from the sibling ppubs_get_patent_by_number, which returns backward citations, so an agent can route correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'USE THIS TOOL WHEN' block gives concrete intent triggers (who built on a patent, gauge influence, find later art) and names the alternative tool and its arguments for the opposite need (backward citations via ppubs_get_patent_by_number with sections=["biblio"]).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppubs_get_full_documentARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| guid | Yes | ||
| sections | No | ||
| source_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open-world, so the description correctly spends its budget on behavior they cannot express: typical document size (20-40k tokens, mostly description), the fact that omitting `sections` returns everything, per-section token economics, and that empty/highlight fields are dropped. This is materially useful operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose and usage guidance, with Args/Returns blocks that are easy to scan. The per-argument prose is slightly long for a three-parameter tool, but every sentence carries actionable content, so waste is minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still states the return shape ('document with the requested sections') and the field-dropping behavior, and it warns about token cost before the call. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load and it does: it gives a GUID example, enumerates source_type values ('USPAT', 'US-PGPUB'), and defines every section token ('biblio', 'abstract', 'claims', 'description') plus the default (omit = everything) and a recommended combination.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get complete patent document by GUID from PPUBS') and clarifies the retrieval channel ('GUID from search results'), which separates it from siblings like ppubs_get_patent_by_number and ppubs_download_patent_pdf. An agent can identify the tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'USE THIS TOOL WHEN' block names the precondition (you already have a GUID from search results) and offers a scoped alternative (request `sections` when you need less). The routing condition is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppubs_get_patent_by_numberARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sections | No | ||
| patent_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive behavior, so the safety profile is covered. The description adds genuinely useful non-annotation context: a whole document is 20-40k tokens dominated by the description, and empty/highlight fields are dropped from the response. That token-budget guidance is exactly the kind of behavioral cost disclosure an agent needs to plan a call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then clearly delimited USE THIS TOOL WHEN, Args and Returns blocks. No sentence is filler: the token-cost aside and the per-value section explanations all change how an agent would invoke the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two parameters, no output schema, and annotations covering safety, this description supplies everything needed to call correctly: the required identifier's accepted formats, the optional filter's vocabulary, expected document size, and what is trimmed from the result. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the full parameter burden, and it does. It spells out normalization rules for `patent_number` (separators, leading 'US' and kind codes ignored; design/reissue/plant prefixes kept) with four worked examples, and enumerates every legal value of `sections` with meaning and a concrete recommended combination.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get a granted patent's full text by patent number.' An agent immediately knows what it retrieves. It does not, however, distinguish itself from the sibling ppubs_get_full_document, which sounds like it may overlap, so it falls short of the sibling-differentiation bar for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN: You know the patent number and need the patent text' block gives an explicit trigger condition, and the token note routes the agent toward the `sections` parameter for lighter calls. It never names an alternative sibling (e.g. ppubs_search_patents or ppubs_get_full_document) or states when NOT to use it, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppubs_search_applicationsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | date_publ desc | |
| limit | No | ||
| query | Yes | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/open-world/non-destructive, so the safety profile is covered. The description still adds real behavioral context: the 18-month publication timeline, the token-budget truncation to 20 results, and the deprecation of legacy TTL//IN/ qualifier syntax. It doesn't describe pagination edge behavior or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, then labeled WHEN/Args/Returns blocks. Every sentence carries load — the syntax warnings and token-budget caveat are the kind of detail an agent needs to invoke correctly, not padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description only says 'Normalized response with application results', which is thin on return shape. However, for a search tool with annotations covering safety and thorough arg documentation, everything needed to make a correct call is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does so for all four params: BRS dotted field qualifiers with deprecated forms called out, AND-ed multi-word semantics with quoting guidance, offset's pagination role, limit's default/max plus the token-budget caveat, and the sort default. This is well beyond a baseline compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (search published US patent applications) and immediately scopes it to pre-grant publications that appear 18 months after filing, before grant. This clearly distinguishes it from ppubs_search_patents and from the odp_search_applications family without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'USE THIS TOOL WHEN' block gives an explicit triggering condition (need pre-grant published applications), and the args note points to ppubs_search_patents as the syntax-equivalent sibling. It stops short of an explicit negative rule (e.g. 'for granted patents use X instead'), so it doesn't reach a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppubs_search_patentsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | date_publ desc | |
| limit | No | ||
| query | Yes | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a safe, idempotent, read-only operation, yet the description adds real operational context the annotations cannot: legacy slash-prefix syntax silently returns 0 results and TTL/"phrase" triggers a server 500, and results exceeding the token budget are truncated to 20 regardless of the limit. These are exactly the failure modes an agent needs warned about.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded with clear USE THIS TOOL WHEN / Args / Returns sections, and the syntax examples are genuinely load-bearing. Minor redundancy: the 'date_publ desc' default and its effect on broad queries are restated after already appearing in the sort arg line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no schema descriptions, the description compensates fully: query grammar, pagination strategy, result caps, sort semantics, and a short Returns summary of fields (GUID, title, abstract, dates, inventors, classifications). An agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry all four parameters, and it does: query is documented with BRS field qualifiers (.ti., .ab., .in., .as., .cpc., .pn.) and worked examples, plus default AND behavior; offset, limit (default 20, max 500, with truncation caveat) and sort (default 'date_publ desc') are each explained. This is far beyond what the bare schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search granted US patents in Patent Public Search'), with scope narrowed to granted patents and full-text coverage, which implicitly separates it from the applications sibling. It never names ppubs_search_applications or ppubs_get_patent_by_number explicitly, so differentiation still requires the agent to infer from 'granted' vs 'applications'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN' block gives clear triggering conditions: full-text US patent search with daily updates, or access to the most recent filings. However, it offers no when-not guidance and does not name alternatives (e.g., ppubs_get_patent_by_number for known-number lookups), leaving the agent to infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ptab_get_appealCRead-onlyIdempotent
Get details of a specific ex parte appeal decision. Live via USPTO ODP v3.0.
Args:
appeal_number: Appeal number
| Name | Required | Description | Default |
|---|---|---|---|
| appeal_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds only 'Live via USPTO ODP v3.0', which hints at a real-time upstream source but says nothing about auth requirements, rate limits, caching, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is short and front-loaded, with no filler. The trailing 'Args:' block is redundant with the input schema and could be dropped, but the overall footprint is appropriately small.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description is responsible for conveying what 'details' means and what comes back; it does not. Combined with a 0%-documented single parameter, the definition is too thin for an agent to invoke confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden, yet it merely restates the schema title ('appeal_number: Appeal number'). It gives no format or example (e.g., the expected appeal number pattern), which is the one thing an agent actually needs here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (details of a specific ex parte appeal decision), which distinguishes it from search-oriented siblings like ptab_search_appeals and ptab_search_decisions. It does not, however, distinguish itself from the nearby ptab_get_decision or ptab_get_proceeding, so the boundary is only partly drawn.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no named alternatives. The closest thing to context is the provenance note 'Live via USPTO ODP v3.0', which tells the agent nothing about when this tool is the right choice over ptab_get_decision or ptab_search_appeals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ptab_get_decisionBRead-onlyIdempotent
Get details of a specific PTAB decision. Live via USPTO ODP v3.0.
Args:
decision_id: Decision identifier (trial number, e.g. IPR2022-00001)
| Name | Required | Description | Default |
|---|---|---|---|
| decision_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered structurally. The description adds only a minor data-source note ('Live via USPTO ODP v3.0') and no rate limits, auth needs, or result characteristics; with annotations doing the heavy lifting, this is a modest addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one sentence, followed by a compact args block. The 'Args:' formatting is slightly boilerplate for a single parameter, but the format example earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with annotations covering safety, the description is nearly sufficient, but with no output schema it never defines what 'details' actually contains, leaving the agent unsure of the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (the property is just 'Decision Id'), so the description must compensate, and it does: it defines the parameter as a decision identifier and supplies a concrete format example ('trial number, e.g. IPR2022-00001'). That is materially more than the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get details of a specific PTAB decision'), which clearly separates it from the sibling search tools like ptab_search_decisions. It does not name any sibling explicitly, but the singular-resource lookup framing makes the boundary obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative guidance is given. The framing implies you already hold a decision identifier, but nothing says how to obtain one (e.g. via ptab_search_decisions) or when this is preferable to search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ptab_get_documentsBRead-onlyIdempotent
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)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| document_type | No | ||
| proceeding_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the useful detail that results are fetched live from USPTO ODP v3.0 rather than cached, and exposes paging via offset/limit, but says nothing about rate limits, result ordering, or what a response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose and data-source note are front-loaded, followed by a compact Args block. No filler sentences, though the arg list partially duplicates defaults already present in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single required parameter, rich annotations, and no output schema, the definition covers invocation adequately. It falls short on the return side: an agent is not told the shape of a document record, whether a total count is returned for paging, or how document_type values are constrained beyond 'etc.'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load, and it documents all four parameters including a format example for proceeding_number and enumerated examples for document_type. Defaults are restated from the schema, which is modest redundancy but the added example and type hints are genuinely useful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (get) plus resource (documents filed in a PTAB proceeding), which clearly separates it from proceeding-level siblings like ptab_get_proceeding and decision-level ones like ptab_get_decision. It does not, however, explicitly distinguish itself from the similarly named odp_get_documents for patent applications, leaving that inference to the 'PTAB' qualifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says what the tool returns but never states when to reach for it over ptab_search_decisions, ptab_get_decision, or odp_get_documents, nor does it note prerequisites such as a valid proceeding number being required. Usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ptab_get_proceedingARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| proceeding_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and open-world behavior, so the safety profile is covered. The description adds that the data is live from USPTO ODP v3.0, indicating freshness rather than caching, but says nothing about auth, rate limits, or error behavior for an invalid proceeding number.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by compact Args/Returns blocks with no filler. The Returns list is slightly generic but earns its place given there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with full annotation coverage, the description supplies purpose, parameter format, data source freshness, and a summary of returned fields. Little an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, and it delivers a concrete format example ('IPR2023-00001') for the single required parameter. This is genuinely useful for formatting the proceeding number correctly, though it stops short of stating format rules or validation behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get details of a specific PTAB proceeding') and scopes it to a single proceeding, which distinguishes it from the search-oriented siblings like ptab_search_proceedings. It does not, however, explicitly name those siblings to route the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the required proceeding_number argument signals this is for retrieving a known proceeding, versus ptab_search_proceedings for discovery. There is no explicit when-to-use/when-not guidance or reference to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ptab_search_appealsARead-onlyIdempotent
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)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No | ||
| patent_number | No | ||
| decision_date_to | No | ||
| application_number | No | ||
| decision_date_from | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds useful context beyond that — live data via USPTO ODP v3.0 and the pagination defaults — but says nothing about result caps, rate limits, or what a paginated response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The two-line purpose statement is front-loaded and free of filler, and the Args block is a compact per-parameter reference. Nothing is repeated for its own sake, though the parameter lines echo the schema property names rather than adding syntax detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, zero-required-parameter search endpoint whose annotations already carry the safety profile, the description supplies the query semantics, field meanings, date format, and pagination controls. The absence of return-shape detail is the only omission, and it is modest for a search tool of this type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it largely meets it: each of the 7 params is glossed with its role, and the date fields are given a concrete format (YYYY-MM-DD) that the schema does not supply. Gaps remain — no stated maximum for limit, and no indication of how the filters combine with the free-text query.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Search ex parte appeal decisions") and names the data source (USPTO ODP v3.0), so an agent knows exactly what corpus is queried. However, it does not distinguish itself from the sibling ptab_search_decisions, which plausibly covers a broader decision set, leaving the agent to guess which one to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the word "Search" plus the appeal-scoped resource signal that this is the lookup path for ex parte appeal decisions. There is no explicit when-to-use, no condition that separates it from ptab_search_decisions or ptab_get_appeal, and no statement about whether query or an identifier is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ptab_search_decisionsBRead-onlyIdempotent
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)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No | ||
| decision_type | No | ||
| patent_number | No | ||
| decision_date_to | No | ||
| proceeding_number | No | ||
| decision_date_from | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds that results come live from the USPTO ODP v3.0 endpoint, implying freshness and live-network dependency, but says nothing about rate limits, result ordering, or pagination semantics beyond the offset/limit params.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in a single sentence, followed by a clean per-parameter list with no filler. The Args block is the conventional docstring form and each line earns its place, though the formatting is slightly mechanical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter search with no output schema and no annotations gaps, the description covers inputs adequately but never describes what a returned decision record contains or how pagination should be driven. An agent knows how to call it but not fully what to expect back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full load, and it does document all eight parameters with meaning beyond the bare titles ('Full-text search in decision text', date format YYYY-MM-DD, decision_type examples institution/final/termination). It stops short of clarifying offset/limit interaction or match semantics for query, so it is solid but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb+resource ('Search PTAB trial decisions'), which clearly distinguishes it from single-record siblings like ptab_get_decision or ptab_get_documents. It does not, however, explicitly contrast itself with ptab_search_proceedings or the other PTAB search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use context, no prerequisites, and no named alternatives. 'Live via USPTO ODP v3.0' is provenance, not guidance on when this search should be chosen over ptab_search_proceedings or ptab_get_decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ptab_search_proceedingsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No | ||
| status | No | ||
| party_name | No | ||
| trial_type | No | ||
| patent_number | No | ||
| filing_date_to | No | ||
| filing_date_from | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the full safety profile (readOnlyHint, idempotentHint, openWorldHint, destructiveHint=false). The description adds provenance ('Live via USPTO ODP v3.0') and trial-type semantics, which is useful, but says nothing about rate limits, auth, pagination behavior, or result shape beyond a one-line 'Returns' note. Net behavioral addition is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then organized under Trial types / Args / Returns headers. It is somewhat long because the Args block restates every schema parameter, but each line adds a short clarifying gloss, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-optional-parameter search tool with no output schema, the definition covers the domain (trial types), the trigger condition, every parameter, and a brief return summary. Only pagination semantics and result-field detail are thin, which is a minor gap given the low-stakes read-only nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and mostly meets it: it defines all nine parameters, supplies the status enum values (Pending, Instituted, Terminated, FWD Entered) that the schema lacks, gives the YYYY-MM-DD date format, and states offset/limit defaults. Explanations are terse but genuinely compensate for the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search') and resource ('PTAB trial proceedings') and enumerates the four trial types (IPR, PGR, CBM, DER), so an agent knows exactly what domain this covers. It is clearly distinguishable from siblings like ptab_get_proceeding or ptab_search_decisions by the 'proceedings' resource, but it never explicitly contrasts itself with those search siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN: You need to find patent validity challenges at the Patent Trial and Appeal Board' line gives a clear trigger condition. However, it names no alternatives and no when-not-to-use case (e.g., vs ptab_search_decisions or ptab_search_appeals), so routing between the search siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tm_get_trademarkARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| serial_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds the valuable behavioral fact that this returns an index record rather than live status, implying potential staleness — a meaningful distinction. It stops short of stating refresh cadence, caching, or error behavior for unknown serial numbers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by clear USE WHEN and Args sections; no wasted words. The Returns line ('Normalized response with the trademark record.') is thin filler that adds little, keeping it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers purpose, routing, and the one parameter's format. The return-value description is vague, but with annotations carrying the safety profile and only one input, nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (serial_number has no description in the schema), so the description must carry the load — and it does, specifying 8-digit application serial number with a concrete example ('78787878'). That format detail is exactly what the schema omits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get), resource (trademark search-index record), and retrieval key (serial number). It also distinguishes itself from tsdr_get_trademark_status by labeling itself the 'search-index record' and the other the authoritative live status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
An explicit 'USE THIS TOOL WHEN' clause gives the trigger condition (you have a serial number from tm_search_trademarks results), and it names the alternative (tsdr_get_trademark_status) with the condition that selects it (authoritative live status). No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tm_search_assignmentsARead-onlyIdempotent
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| reel_frame | No | ||
| assignee_name | No | ||
| assignor_name | No | ||
| serial_number | No | ||
| registration_number | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered; the description adds genuinely new behavior: the 1955–present coverage window, that no API key is required, and the critical constraint that at least one filter is required with filters ANDed together. It still says nothing about rate limits, result caps, or failure modes, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and usage in the first three lines, then cleanly sectioned Args/Returns. Every line adds information an agent needs; the parameter list is not a restatement of the schema since those fields have zero descriptions in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates with a Returns block describing the normalized record shape (reel/frame, assignors, assignees, conveyance, affected properties). Combined with the required-filter rule and full parameter coverage, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden — and it does: all seven parameters are documented, including the non-obvious semantics that assignee_name is the new owner and assignor_name the previous owner, a concrete reel_frame format example ('9006/0093'), and pagination defaults for offset/limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource ('Search recorded trademark assignment (ownership transfer) records') and disambiguates the legal meaning of 'assignment' with a parenthetical. The scope statement (recorded assignments 1955–present via USPTO Assignment Center) lets an agent separate it from the patent-side assignment siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN' block gives three concrete scenarios (trace ownership history, find current owner, find marks transferred to/from a company), which is clear positive guidance. However, it names no alternative tool and gives no when-not conditions, so routing decisions against siblings like tm_search_trademarks are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tm_search_trademarksARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No | ||
| mark_text | No | ||
| owner_name | No | ||
| status_filter | No | ||
| goods_services | No | ||
| international_class | No | ||
| registration_number | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the description goes further with genuinely non-obvious context: the backend is an undocumented internal API behind tmsearch.uspto.gov with real risk of breaking without notice, plus the federal-only scope boundary. It stops short of disclosing pagination behavior or rate limits, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then routes with a labeled WHEN block, a NOTE on risk, and a Args list where every line earns its place. The Args section is repetitive in prefixing each name, but the content is dense rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter search tool with no output schema, all inputs are documented and alternatives are named. The Returns block is thin ('Normalized response with matching trademark records') and says nothing about pagination semantics or result shape, which is the one meaningful gap since no output schema exists to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does it well: every one of the 9 parameters is explained with meaning and examples (mark_text "ACME", international_class 1-45 with "9" for software, status_filter's live/dead/omit values). It adds value the schema cannot, such as 'athletic footwear' being useful for clearance searches across wording, and limit's default 25 / max 100.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search US federal trademark applications and registrations') and immediately scopes it to federal marks only. This clearly separates it from tsdr_get_trademark_status (authoritative single-mark status) and tm_get_trademark without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'USE THIS TOOL WHEN' block names concrete scenarios (clearance/knockout searches, portfolio mapping) and routes the agent elsewhere for the authoritative-status case ('use tsdr_get_trademark_status') and for class lookup ('use get_trademark_class_info'). It also states an exclusion: no common-law or state marks, only federal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tsdr_download_trademark_documentsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | No | ||
| date_from | No | ||
| document_type | No | ||
| serial_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only/idempotent/non-destructive, and the description adds real operational constraints on top: a 4-requests-per-minute rate limit, an unfiltered-wrapper size ceiling of ~10 MB, and a hard RESPONSE_TOO_LARGE rejection above 4 MB. That is the kind of behavioral context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: purpose first, then the when-to-use block, then the critical limits, then args. The args/returns sections partially restate the schema, which adds some redundancy, but the operational caveats earn their space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description still tells the agent the return shape ('Dictionary with base64-encoded PDF data') and covers the workflow, rate limit, and size-failure mode. Nothing needed to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full param burden and does so: serial_number is documented as 8-digit with an example ('78787878'), document_type is given concrete filter codes ('OOA', 'SPE'), and both date params specify the YYYY-MM-DD format. Far more than the type-only schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb + resource + output format: 'Download the prosecution document bundle for a trademark as PDF (base64)'. This is clearly distinct from sibling reads like tsdr_list_trademark_documents (list) and tsdr_get_trademark_status (status), so an agent can select it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
An explicit 'USE THIS TOOL WHEN' block names the triggering need (office actions, responses, specimens, file-wrapper documents) and routes the agent through a prerequisite: 'Call tsdr_list_trademark_documents first, then filter by document_type and/or date range.' Both the when and the alternative are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tsdr_get_trademark_imageARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| serial_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, openWorld, so the safety profile is covered. The description adds the genuinely useful behavioral fact that the payload is a base64-encoded image rather than a URL or rendered file, which an agent must know to handle the result; it says nothing about rate limits or what happens when no image exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by clearly labelled USE THIS TOOL WHEN / Args / Returns sections, with no filler. The only minor redundancy is restating 'base64' in the Returns line already implied by the opening sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description correctly steps in to describe the return shape (dictionary with base64 image data). Combined with the single required parameter being fully specified, an agent has what it needs; only edge cases (missing image, non-image marks) are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema only says 'Serial Number' as an unannotated string, so the description carries the burden. It supplies the required format and an example ('8-digit application serial number, e.g., "78787878"'), which is exactly the missing guidance, though it does not say what happens with a malformed number.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the mark image (drawing) for a trademark as base64') and sharpens it with the qualifier 'design mark or stylized word mark'. This clearly separates it from the text-oriented siblings like tsdr_get_trademark_status or tsdr_list_trademark_documents without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN' block gives an explicit positive trigger (need the visual representation of a design/stylized mark). It does not name a contrasting alternative (e.g., tm_get_trademark for textual mark data) or state when the tool is unnecessary, so it stops just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tsdr_get_trademark_statusARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| serial_number | No | ||
| registration_number | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds real value beyond them: the API-key requirement and the exactly-one-of constraint on the two identifiers. It does not cover error behavior, throttling, or data freshness beyond 'live'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded imperative sentence followed by a usage block, the exclusivity constraint, and clearly labeled Args/Returns sections. No sentence is redundant; each line adds an actionable constraint or format detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only lookup with rich annotations and no output schema, the definition covers purpose, trigger, auth, input format, and input constraint adequately. The Returns section is thin ('Normalized response with the trademark status record'), but the missing field detail is largely recoverable from the field list in the usage block.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and both params are nullable with no required flag, so the description carries the full burden — and it delivers: it documents each identifier with format hints ('8-digit application serial number'), worked examples, and the critical exclusivity rule that exactly one must be supplied. That rule is invisible in the schema and would otherwise cause wrong calls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get current status of a trademark application or registration') and names the source system (TSDR). It positions itself as the 'official USPTO status source,' which implies differentiation from search-oriented siblings, but never explicitly names an alternative like tm_get_trademark or tsdr_get_trademark_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN' block gives clear triggering context — you hold a serial or registration number and need authoritative live status, owner, classes, or prosecution stage. It also flags the API-key requirement. However, there is no 'when not to use' or explicit routing to sibling tools when the need is an image, search, or document list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tsdr_list_trademark_documentsARead-onlyIdempotent
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).
| Name | Required | Description | Default |
|---|---|---|---|
| serial_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive. The description adds genuinely non-obvious context: metadata only, no downloads, and critically that it is NOT subject to the 4 req/min PDF rate limit that constrains the sibling. Pagination behavior is not stated, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then a clearly delineated usage block, args, and returns. Every sentence carries information; nothing is padding for a tool of this simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only metadata list with one required param, the description covers purpose, routing, rate-limit caveat, parameter format, and the shape of the return ('type, description, dates') despite the absence of an output schema. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter is undocumented in the schema, so the description must carry the load. It does: format ('8-digit application serial number') plus a concrete example ('78787878'), which is what an agent needs to invoke correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List prosecution document metadata for a trademark') and immediately scopes it with '(no downloads)'. This distinguishes it cleanly from the sibling tsdr_download_trademark_documents without requiring the agent to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'USE THIS TOOL WHEN' section names the exact scenario (see what file-wrapper documents exist before downloading) and names the alternative tool it is not. It further explains how its output feeds the download tool's document_type filter, closing the loop between the two tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
65 tool updates
v1.8.1- Changed
check_api_status1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "check_api_statusOutput", - "type": "object" -}New value: +null
- Removed
get_citation_metrics - Changed
get_cpc_info1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "get_cpc_infoOutput", - "type": "object" -}New value: +null
- Removed
get_enriched_citations - Removed
get_litigation_case - Changed
get_office_action_citations15 fields changed- added
Input schema / properties / application_number / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / application_number / defaultAdded value: +null - removed
Input schema / properties / application_number / typeRemoved value: -"string" - added
Input schema / properties / art_unitAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Art Unit" +} - added
Input schema / properties / cited_referenceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cited Reference" +} - added
Input schema / properties / document_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Document Id" +} - added
Input schema / properties / examiner_citedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Examiner Cited" +} - added
Input schema / properties / legal_sectionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Legal Section" +} - added
Input schema / properties / limitAdded value: +{ + "default": 50, + "title": "Limit", + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "title": "Offset", + "type": "integer" +} - added
Input schema / properties / patent_numberAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Patent Number" +} - added
Input schema / properties / queryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Query" +} - added
Input schema / properties / tech_centerAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tech Center" +} - removed
Input schema / requiredRemoved value: -[ - "application_number" -] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "get_office_action_citationsOutput", - "type": "object" -}New value: +null
- Changed
get_office_action_rejections16 fields changed- added
Input schema / properties / application_number / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / application_number / defaultAdded value: +null - removed
Input schema / properties / application_number / typeRemoved value: -"string" - added
Input schema / properties / art_unitAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Art Unit" +} - added
Input schema / properties / case_lawAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Case Law" +} - added
Input schema / properties / date_fromAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Date From" +} - added
Input schema / properties / date_toAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Date To" +} - added
Input schema / properties / document_codeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Document Code" +} - added
Input schema / properties / document_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Document Id" +} - added
Input schema / properties / limitAdded value: +{ + "default": 50, + "title": "Limit", + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "title": "Offset", + "type": "integer" +} - added
Input schema / properties / patent_numberAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Patent Number" +} - added
Input schema / properties / queryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Query" +} - added
Input schema / properties / statuteAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Statute" +} - removed
Input schema / requiredRemoved value: -[ - "application_number" -] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "get_office_action_rejectionsOutput", - "type": "object" -}New value: +null
- Removed
get_office_action_text - Removed
get_party_litigation - Removed
get_patent_litigation - Changed
get_status_code1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "get_status_codeOutput", - "type": "object" -}New value: +null
- Changed
get_trademark_class_info1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "get_trademark_class_infoOutput", - "type": "object" -}New value: +null
- Changed
get_trademark_status_code1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "get_trademark_status_codeOutput", - "type": "object" -}New value: +null
- Added
odp_download_document - Changed
odp_get_adjustment1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "odp_get_adjustmentOutput", - "type": "object" -}New value: +null
- Changed
odp_get_application1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "odp_get_applicationOutput", - "type": "object" -}New value: +null
- Changed
odp_get_application_metadata1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "odp_get_application_metadataOutput", - "type": "object" -}New value: +null
- Changed
odp_get_assignment1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "odp_get_assignmentOutput", - "type": "object" -}New value: +null
- Changed
odp_get_attorney1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "odp_get_attorneyOutput", - "type": "object" -}New value: +null
- Changed
odp_get_continuity1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "odp_get_continuityOutput", - "type": "object" -}New value: +null
- Changed
odp_get_dataset1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "odp_get_datasetOutput", - "type": "object" -}New value: +null
- Changed
odp_get_documents5 fields changed- added
Input schema / properties / directionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Direction" +} - added
Input schema / properties / document_codeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Document Code" +} - added
Input schema / properties / limitAdded value: +{ + "default": 50, + "title": "Limit", + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "title": "Offset", + "type": "integer" +} - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "odp_get_documentsOutput", - "type": "object" -}New value: +null
- Changed
odp_get_foreign_priority1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "odp_get_foreign_priorityOutput", - "type": "object" -}New value: +null
- Changed
odp_get_transactions1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "odp_get_transactionsOutput", - "type": "object" -}New value: +null
- Changed
odp_search_applications1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "odp_search_applicationsOutput", - "type": "object" -}New value: +null
- Changed
odp_search_datasets1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "odp_search_datasetsOutput", - "type": "object" -}New value: +null
- Added
odp_search_office_actions - Added
odp_search_petition_decisions - Removed
patentsview_get_assignee - Removed
patentsview_get_attorney - Removed
patentsview_get_claims - Removed
patentsview_get_description - Removed
patentsview_get_inventor - Removed
patentsview_get_patent - Removed
patentsview_lookup_cpc - Removed
patentsview_lookup_ipc - Removed
patentsview_search_assignees - Removed
patentsview_search_attorneys - Removed
patentsview_search_by_cpc - Removed
patentsview_search_by_ipc - Removed
patentsview_search_inventors - Removed
patentsview_search_patents - Changed
ppubs_download_patent_pdf1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "ppubs_download_patent_pdfOutput", - "type": "object" -}New value: +null
- Added
ppubs_get_citing_patents - Changed
ppubs_get_full_document2 fields changed- added
Input schema / properties / sectionsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sections" +} - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "ppubs_get_full_documentOutput", - "type": "object" -}New value: +null
- Changed
ppubs_get_patent_by_number2 fields changed- added
Input schema / properties / sectionsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sections" +} - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "ppubs_get_patent_by_numberOutput", - "type": "object" -}New value: +null
- Changed
ppubs_search_applications2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -100New value: +20 - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "ppubs_search_applicationsOutput", - "type": "object" -}New value: +null
- Changed
ppubs_search_patents2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -100New value: +20 - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "ppubs_search_patentsOutput", - "type": "object" -}New value: +null
- Changed
ptab_get_appeal1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "ptab_get_appealOutput", - "type": "object" -}New value: +null
- Changed
ptab_get_decision1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "ptab_get_decisionOutput", - "type": "object" -}New value: +null
- Changed
ptab_get_documents1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "ptab_get_documentsOutput", - "type": "object" -}New value: +null
- Changed
ptab_get_proceeding1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "ptab_get_proceedingOutput", - "type": "object" -}New value: +null
- Changed
ptab_search_appeals1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "ptab_search_appealsOutput", - "type": "object" -}New value: +null
- Changed
ptab_search_decisions1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "ptab_search_decisionsOutput", - "type": "object" -}New value: +null
- Changed
ptab_search_proceedings1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "ptab_search_proceedingsOutput", - "type": "object" -}New value: +null
- Removed
search_citations - Removed
search_litigation - Removed
search_office_actions - Changed
tm_get_trademark1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "tm_get_trademarkOutput", - "type": "object" -}New value: +null
- Changed
tm_search_assignments1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "tm_search_assignmentsOutput", - "type": "object" -}New value: +null
- Changed
tm_search_trademarks1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "tm_search_trademarksOutput", - "type": "object" -}New value: +null
- Changed
tsdr_download_trademark_documents1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "tsdr_download_trademark_documentsOutput", - "type": "object" -}New value: +null
- Changed
tsdr_get_trademark_image1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "tsdr_get_trademark_imageOutput", - "type": "object" -}New value: +null
- Changed
tsdr_get_trademark_status1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "tsdr_get_trademark_statusOutput", - "type": "object" -}New value: +null
- Changed
tsdr_list_trademark_documents1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "additionalProperties": true, - "title": "Result", - "type": "object" - } - }, - "required": [ - "result" - ], - "title": "tsdr_list_trademark_documentsOutput", - "type": "object" -}New value: +null
61 tool updates
v1.1.1- First observed
check_api_status - First observed
get_citation_metrics - First observed
get_cpc_info - First observed
get_enriched_citations - First observed
get_litigation_case - First observed
get_office_action_citations - First observed
get_office_action_rejections - First observed
get_office_action_text - First observed
get_party_litigation - First observed
get_patent_litigation - First observed
get_status_code - First observed
get_trademark_class_info - First observed
get_trademark_status_code - First observed
odp_get_adjustment - First observed
odp_get_application - First observed
odp_get_application_metadata - First observed
odp_get_assignment - First observed
odp_get_attorney - First observed
odp_get_continuity - First observed
odp_get_dataset - First observed
odp_get_documents - First observed
odp_get_foreign_priority - First observed
odp_get_transactions - First observed
odp_search_applications - First observed
odp_search_datasets - First observed
patentsview_get_assignee - First observed
patentsview_get_attorney - First observed
patentsview_get_claims - First observed
patentsview_get_description - First observed
patentsview_get_inventor - First observed
patentsview_get_patent - First observed
patentsview_lookup_cpc - First observed
patentsview_lookup_ipc - First observed
patentsview_search_assignees - First observed
patentsview_search_attorneys - First observed
patentsview_search_by_cpc - First observed
patentsview_search_by_ipc - First observed
patentsview_search_inventors - First observed
patentsview_search_patents - First observed
ppubs_download_patent_pdf - First observed
ppubs_get_full_document - First observed
ppubs_get_patent_by_number - First observed
ppubs_search_applications - First observed
ppubs_search_patents - First observed
ptab_get_appeal - First observed
ptab_get_decision - First observed
ptab_get_documents - First observed
ptab_get_proceeding - First observed
ptab_search_appeals - First observed
ptab_search_decisions - First observed
ptab_search_proceedings - First observed
search_citations - First observed
search_litigation - First observed
search_office_actions - First observed
tm_get_trademark - First observed
tm_search_assignments - First observed
tm_search_trademarks - First observed
tsdr_download_trademark_documents - First observed
tsdr_get_trademark_image - First observed
tsdr_get_trademark_status - First observed
tsdr_list_trademark_documents
TDQS
Scored across 42 tools
Tools are mostly distinct by domain prefix and resource/action, with clear separation between patent, trademark, PTAB, office action, and helper lookups. Some overlap remains (ppubs_get_full_document vs ppubs_get_patent_by_number; odp_get_application vs odp_get_application_metadata), but descriptions provide enough guidance.
Strong prefix_action pattern (odp_, ptab_, ppubs_, tsdr_, tm_ plus get/search/download/list) is mostly consistent across the set. Minor deviations exist: helper tools lack domain prefixes and get_office_action_* omits odp_, but the scheme remains readable and predictable.
42 tools is heavy, even for a server spanning patents, trademarks, PTAB, office actions, and datasets. Several tools cover adjacent retrieval paths or overlapping data sources, placing it above the ideal 3-15 range, though it is not an extreme 50+ mismatch.
Coverage is broad and read-only: patent search, application prosecution, assignments, continuity, PTAB, office actions, citations, trademarks, class/status lookups, datasets, and PDF retrieval. Minor gaps such as TTAB proceedings or maintenance-fee-specific operations remain, but core USPTO research workflows are well covered.
Maintenance
Related MCP Connectors
Patent search, USPTO data, patent landscape & pgvector prior-art search for agents.
EPO/USPTO search, citations, OCR, plus PATSTAT Portfolio Analytics, guarded SQL and Graph Analytics.
AI-powered patent intelligence for search & analysis
AI-optimized patent data marketplace providing structured JSON datasets.
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides access to USPTO enriched citation and office action citation APIs with smart context reduction and progressive disclosure workflows for patent citation analysis.107MIT
- AlicenseAqualityBmaintenanceEnables access to USPTO patent data through multiple APIs including patent search, prosecution history, PTAB proceedings, and patent litigation. Provides 52 tools across six data sources.15MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI agents to perform patent search, portfolio analysis, technology trend tracking, and semantic prior-art search using USPTO data.MIT
- AlicenseNot gradedqualityBmaintenanceEnables searching and retrieving US patent records and published applications via keyword, assignee, inventor, or patent number, with full details such as claims, citations, and patent family.198 npmMIT