Skip to main content
Glama
john-walkoe

USPTO Final Petition Decisions MCP Server

by john-walkoe

USPTO Final Petition Decisions MCP Server

A high-performance Model Context Protocol (MCP) server for the USPTO Final Petition Decisions API with token-saving context reduction capabilities, user-customizable fields, and cross-MCP integration for complete patent lifecycle analysis.

Platform Support Python API License: MIT

📚 Documentation

Document

Description

📥 Installation Guide

Complete cross-platform setup with automated scripts

🔑 API Key Guide

Step-by-step instructions for obtaining USPTO and Mistral API keys with screenshots

📖 Usage Examples

Function examples, workflows, and integration patterns

🎯 Prompt Templates

Detailed guide to sophisticated prompt templates for legal & research workflows

⚙️ Field Customization

Comprehensive guidance on customizing field sets for the minimal and balanced tools

🔒 Security Guidelines

Comprehensive security best practices

🛡️ Security Scanning

Automated secret detection and prevention guide

📜 Content Provenance

Retrieved-text handling: verbatim serving, provenance labeling, injection annotation

🧪 Testing Guide

Test suite documentation and API key setup

⚖️ License

MIT License terms and conditions

Related MCP server: USPTO Patent Citation MCP Server

⚡Quick Start

Windows Install

Run PowerShell as Administrator, then:

# Navigate to your user profile
cd $env:USERPROFILE

# If git is installed:
git clone https://github.com/john-walkoe/uspto_fpd_mcp.git
cd uspto_fpd_mcp

# If git is NOT installed:
# Download and extract the repository to C:\Users\YOUR_USERNAME\uspto_fpd_mcp
# Then navigate to the folder:
# cd C:\Users\YOUR_USERNAME\uspto_fpd_mcp

# The script detects if uv is installed and if it is not it will install uv - https://docs.astral.sh/uv

# Run setup script (sets execution policy for this session only):
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process
.\deploy\windows_setup.ps1

## View INSTALL.md for sample script output.
# Close Powershell Window.
# If choose option to "configure Claude Desktop integration" during the script then restart Claude Desktop

The PowerShell script will:

  • ✅ Check for and auto-install uv (via winget or PowerShell script)

  • ✅ Install dependencies and create executable

  • ✅ Prompt for USPTO API key (required) and Mistral API key (optional) or Detect if you had installed the developer's other USPTO MCPs and ask if want to use existing keys from those installation.

  • 🔒 If entering in API keys, the script will automatically store API keys securely using Windows DPAPI encryption

  • ✅ Ask if you have USPTO PFW MCP already installed, and if so will used the USPTO PFW MCP's default centralized proxy

  • ✅ Ask if you want Claude Desktop integration configured

  • 🔒 Offer secure configuration method (recommended) or traditional method (API keys in plain text in the MCP JSON file)

  • ✅ Backups and then automatically merge with existing Claude Desktop config (preserves other MCP servers)

  • ✅ Provide installation summary and next steps

Claude Desktop Configuration - Manual installs

{
  "mcpServers": {
    "uspto_fpd": {
      "command": "uv",
      "args": [
        "--directory",
        "C:/Users/YOUR_USERNAME/uspto_fpd_mcp",
        "run",
        "fpd-mcp"
      ],
      "env": {
        "USPTO_API_KEY": "your_actual_USPTO_api_key_here",
        "MISTRAL_API_KEY": "your_mistral_api_key_here_OPTIONAL",
        "MISTRAL_OCR_MODEL": "mistral-ocr-latest_OPTIONAL_pin_a_dated_slug",
        "CENTRALIZED_PROXY_PORT": "none",
        "FPD_PROXY_PORT": "8081"
      }
    }
  }
}

Proxy Configuration Notes:

  • CENTRALIZED_PROXY_PORT:

    • Set to "none" for standalone use (not recommended)

    • Set to 8080 When USPTO PFW MCP is installed and PFW is using its default port for the local proxy. (If PFW is not using its default port change this value to match)

  • FPD_PROXY_PORT: Local proxy port (default: 8081, avoids conflict with PFW on 8080)

    • Only used in standalone mode (no PFW MCP detected)

    • When PFW MCP is installed, FPD automatically uses PFW's centralized proxy (port 8080), but will fall back to FPD's local proxy port

    • Centralized Proxy Benefits: Single port for all USPTO MCPs, 7-day persistent links, unified rate limiting

🚀 FastMCP 4.0

The server runs on FastMCP 4.0.1 (fastmcp[apps]>=4.0.0,<5.0.0) over the MCP Python SDK 2.x, speaking MCP protocol revision 2026-07-28. It ships MCP Apps (petition search cards + recent-downloads panel render as iframes in Claude Desktop), progress notifications during document extraction, 7-day persistent download links, dual STDIO/HTTP transport, and a Dockerfile for containerized deployment.

Environment variables:

Variable

Default

Purpose

USPTO_API_KEY

Required. USPTO ODP API key

MISTRAL_API_KEY

unset

Optional. Enables the Mistral OCR tier for scanned documents

MISTRAL_OCR_MAX_PAGES

50

Per-document page cap for the Mistral OCR tier; a capped extraction is always marked

MISTRAL_OCR_DAILY_BUDGET_USD

5.00

Daily (UTC) ceiling on metered Mistral OCR usage. Unset uses the built-in default; 0 opts out

DOCLING_SERVE_URL

unset

Enables the self-hosted Docling OCR tier (e.g. https://docling.example.com)

DOCLING_TIMEOUT

300

Docling read timeout (seconds)

DOCLING_MAX_PAGES

25

Skip Docling above this page count (petition decisions are short)

FASTMCP_TRANSPORT

stdio

stdio (Claude Desktop) or http (Docker/claude.ai)

FASTMCP_HOST

127.0.0.1

HTTP bind address

FASTMCP_PORT

8000

HTTP port (cluster convention: fpd = 8005)

FASTMCP_STATELESS_HTTP

true

Stateless streamable HTTP: no server-side session table, every request self-contained. Required for clients that don't replay mcp-session-id (GitHub Copilot) and for load-balanced / multi-replica deploys. Stateful clients still work — they just get an ephemeral session per request.

CORS_EXTRA_ORIGIN

unset

Extra CORS origins for HTTP mode (e.g. https://claude.ai)

INTERNAL_AUTH_SECRET

unset

Required in HTTP mode (X-API-KEY auth); also signs centralized-proxy JWTs — must match PFW's

ENABLE_PROXY_SERVER

true

Enable the local download proxy

ENABLE_ALWAYS_ON_PROXY

true

Start the proxy at startup vs on-demand

FPD_PROXY_PORT

8081

Local download proxy port

FPD_PROXY_BASE_URL

unset

Externally reachable proxy base URL (Docker/reverse proxy) — used in emitted persistent links

PROXY_TOKEN

auto

Fixed proxy auth token for cross-process registration

PROXY_ALLOWED_IPS

unset

Extra client IPs/CIDRs allowed at the proxy (Docker subnets)

CENTRALIZED_PROXY_URL

unset

Full base URL of the PFW centralized proxy. Docker: http://pfw:8080; production: the production deployment's published PFW proxy base. Takes precedence over CENTRALIZED_PROXY_PORT. Requires PFW ≥ commit 311dc2a (registration returns browser-openable persistent links) and PFW's PROXY_ALLOWED_IPS admitting this host

CENTRALIZED_PROXY_PORT

unset

Legacy port-only PFW config (localhost)

MCP_APP_EXTRA_DOMAINS

unset

Extra CSP domains for MCP App iframes (comma-separated)

LOG_LEVEL

INFO

Logging level. Logs record flow metadata only — never query text, response bodies, OCR text, or link hashes

LOG_DIR

~/.uspto_fpd_mcp/logs

Log directory override (Docker volumes)

FPD_LOG_MAX_BYTES / FPD_LOG_BACKUP_COUNT

10485760 / 5

File log rotation

MISTRAL_OCR_MODEL

mistral-ocr-latest

Mistral OCR model slug; pin to a dated version if needed

USPTO_TIMEOUT

30.0

API request timeout (seconds)

USPTO_DOWNLOAD_TIMEOUT

60.0

PDF download timeout (seconds)

FPD_ENABLE_USER_MANAGEMENT

false

Enable admin-tool registration; must be true in OAuth deployments

FPD_AUTH_MODE

none

none (default, no OAuth) or oauth (Google + Entra dual IdP, HTTP only)

FPD_AUTH_BASE_URL

unset

Public HTTPS origin (required if FPD_AUTH_MODE=oauth)

FPD_AUTH_JWT_SECRET

unset

JWT signing secret (required if FPD_AUTH_MODE=oauth; generate with openssl rand -hex 32)

FPD_AUTH_GOOGLE_CLIENT_ID / _SECRET

unset

Google OAuth credentials (optional; omit if using Entra only)

FPD_AUTH_MS_CLIENT_ID / _SECRET

unset

Entra (Microsoft) OAuth credentials (optional; omit if using Google only)

FPD_AUTH_MS_TENANT

common

Entra tenant: common (any tenant), organizations (work/school only), or tenant GUID

FPD_AUTH_INTERNAL_TOKEN

unset

Static bearer token for headless clients (grants fpd:user scope only)

FPD_AUTH_INTERNAL_ADMIN_TOKEN

unset

Separate static bearer for machine clients requiring admin scope (grants fpd:user + fpd:admin)

FPD_AUTH_REGISTER_URL

unset

Optional "Request access" link shown on sign-in screen

FPD_AUTH_ACCESS_TTL

3600

Access token lifetime (seconds; default 1 hour)

FPD_AUTH_REFRESH_TTL

2592000

Refresh token lifetime (seconds; default 30 days, idle timeout)

FPD_AUTH_DB_PATH

data/mcp_auth.db

SQLite user database; may be shared across MCP servers on the same host

USPTO_SHARED_RATE_LIMIT_DIR

unset

Enable cross-process rate limiter; bind-mounted directory (unset = disabled)

USPTO_SHARED_RATE_LIMIT_RPS

4.0

Token bucket rate (tokens/sec, shared across all 4 USPTO MCPs)

USPTO_SHARED_MAX_CONCURRENT

2

Concurrency slots (shared in-flight requests across all 4 MCPs)

USPTO_MAX_RESPONSE_CHARS

40000

Character budget for structured tool responses (searches, petition details)

USPTO_MAX_CONTENT_CHARS

120000

Character budget for document-content responses

USPTO_RESPONSE_BOUNDS_ENABLED

true

false disables the response-size guard entirely

FPD_TOOL_DEADLINE_SECONDS

150

Overall deadline for one content-extraction tool call

FPD_MAX_PDF_BYTES

26214400

Per-document extraction byte cap (25MB)

FPD_MAX_EGRESS_PDF_BYTES

104857600

Cap on a PDF streamed through the download proxy (100MB)

FPD_MAX_MCP_BODY_BYTES

4194304

Request body cap on the /mcp surface

FPD_TRUSTED_PROXY_IPS

unset

Reverse-proxy addresses (IP/CIDR) whose X-Forwarded-For is honored

ENVIRONMENT

unset (production)

development / dev / test enable detailed error envelopes

Response-size markers

Tool responses are measured in characters (len(json.dumps(...))), not token estimates, because an oversized result is replaced client-side with a truncation error the server never sees. Every search envelope carries a paging block (limit_requested, limit_applied, offset, returned, total, has_more, next_offset). Three further markers appear only when they applied and are absent entirely on a no-op:

Marker

Meaning

limit_clamped

{requested, applied, note}. The search ceiling (100) reduced the requested limit rather than rejecting it

_bounds

{applied, reason, size_chars, size_limit, stages, slimmed_fields, items_returned, items_total, note}. A structured response was slimmed and/or truncated to fit the budget

_window

{unit, offset, returned, total, has_more, next_offset, note}. Document content was paged rather than dropped; all counters are in characters. Page it with char_offset / max_chars on FPD_get_document_content_with_ocr

FPD_get_guidance(section="limits") prints the live budgets and this marker contract at runtime.

Testing: see tests/TEST_SUITE.md for the manual end-to-end suite; automated tests via plain uv run pytest (the key-management/storage tests that touch real encrypted key storage are excluded via addopts in pyproject.toml and additionally gated by FPD_RUN_KEY_TESTS=1).

🔑 Key Features

  • ⚙️User-Customizable Fields - Configure field sets through YAML without code changes

  • 🎯Context Reduction - Get focused responses instead of massive API dumps (80-99% reduction)

  • 📊Progressive Disclosure Strategy - Minimal discovery → Balanced analysis → Document extraction

  • 🔍Petition-Type Focused Search - Specialized tools for art unit and application-specific searches

  • ✨Intelligent Document Extraction - Auto-optimized hybrid extraction (native pypdf text layer → OCR fallback for scanned pages) with secure browser downloads

  • 🆕Centralized Proxy Integration - Auto-detects PFW MCP and uses unified proxy (port 8080) for persistent links and cross-MCP downloads

  • 🌐Secure Browser Downloads - Click proxy URLs to download PDFs directly while keeping API keys secure

  • 👁️Advanced OCR Capabilities - Extract text from scanned PDFs using Mistral OCR when needed

  • 📁 Document Bag Integration - Full petition document access alongside structured petition data

  • Extraction Method Transparency - Reports which extraction method was used for every document

  • 🔐 Secure API Key Storage - Optional Windows DPAPI encryption keeps API keys secure (no plain text in config files)

  • 🚀High Performance - Retry logic with exponential backoff, rate limiting compliance

  • 🛡️ Production Ready - Enhanced error handling, structured logging with request IDs, comprehensive security guidelines

  • 💻Cross-Platform - Works seamlessly on Linux and Windows

  • 📋Complete API Coverage - All USPTO Final Petition Decisions endpoints supported

  • 🔗Cross-MCP Integration - Seamless integration with Patent File Wrapper and PTAB MCPs for complete lifecycle analysis

Workflow Design - All Performed by the LLM with Minimal User Guidance

User Requests the following:

  • "Find all petitions filed by TechCorp and tell me about any red flags"

  • "Show me revival petitions for art unit 2128 - I'm analyzing abandonment patterns"

  • "Get me the petition history for application 17414168"

  • "Research this company's petition track record and correlate with their PTAB challenges" - * Requires that the USPTO Patent Trial and Appeal Board (PTAB) be installed - uspto_ptab_mcp and also recommended to ask LLM to perform a FPD_get_guidance tool call prior to this or any cross MCP prompt (see quick reference chart for section selection, additional details in Usage Examples)

  • "Analyze this art unit's prosecution quality by looking at petition frequency and types"

LLM Performs these steps:

Step 1: Discovery (Minimal)Step 2: Selection and Analysis (Balanced - Optional)Step 3: Detailed Petition ReviewStep 4 (Optional): Select specific petition documents for examinationStep 5 (Optional): Retrieve document_id(s) from documentBagStep 6 (Optional): Document Extraction for LLM use and/or Download Links of PDFs for user's use

The field configuration supports an optimized research progression:

  1. Discovery (Minimal) returns 50-100 petitions efficiently without document bloat

  2. Selection and Analysis (Balanced - Optional) from the retrieved select likely petition(s). Optional balanced search(es) performed if needed in advanced workflows and/or cross-MCP workflows with Patent File Wrapper or PTAB

  3. Detailed Petition Review via FPD_Get_petition_details for selected petitions with complete structured data for LLM's use in analysis

  4. Select specific petition documents for examination (Optional) e.g. Decision letters, petition filings, supporting evidence

  5. Retrieve document_id(s) from documentBag (Optional) use FPD_Get_petition_details with include_documents=True to get the document_id(s)

  6. Document Extraction for LLM use and/or Download Links (Optional) Document extraction via intelligent hybrid tool that auto-optimizes for speed and quality, and Downloads of the documents as PDFs uses URLs from an HTTP proxy that obscures the USPTO's API key from chat history

🎯 Prompt Templates

This MCP server includes sophisticated AI-optimized prompt templates for complex petition workflows. Prompt templates are opt-in server-side: they register only when the server is started with FPD_ENABLE_PROMPTS=true (default off - no prompts are advertised). For detailed documentation on all templates, features, and usage examples, see PROMPTS.md.

Quick Template Overview

Category

Templates

Purpose

Legal Analysis

/company_petition_risk_assessment_PFW, /patent_vulnerability_assessment_ptab, /litigation_research_setup_pfw

Due diligence, PTAB risk assessment, litigation preparation

Research & Prosecution

/art_unit_quality_assessment, /prosecution_quality_correlation_pfw, /revival_petition_analysis

Art unit analysis, examiner behavior, abandonment patterns

Document Management

/petition_document_research_package, /complete_portfolio_due_diligence_pfw_ptab

Organized retrieval, comprehensive lifecycle analysis

Key Features Across All Templates:

  • Enhanced Input Processing - Flexible identifier support (petition IDs, application numbers, company names)

  • Smart Validation - Automatic format detection and guidance

  • Cross-MCP Integration - Seamless workflows with PFW, PTAB, and Citations MCPs

  • Context Optimization - Token reduction through progressive disclosure

📊 Available Functions

Search Functions (4 Focused Tools)

Registered Tool Name

Context Reduction

Use Case

FPD_Search_petitions_minimal

typical 95-99%

Ultra-fast petition discovery (user-customizable minimal fields)

FPD_Search_petitions_balanced

typical 80-88%

Key fields for detailed analysis (no documentBag)

FPD_Search_petitions_by_art_unit

typical 80-88%

Art unit quality assessment with date range filtering

FPD_Search_petitions_by_application

typical 80-88%

Complete petition history for specific application

Search Strategies

Specialized Search Strategies

  • Art Unit Quality Assessment - Use FPD_Search_petitions_by_art_unit to analyze petition patterns across art units for examiner behavior and technology difficulty assessment

  • Application Petition History - Use FPD_Search_petitions_by_application to get complete petition timeline for specific applications during prosecution

  • Cross-MCP Integration - Link petition data with PFW prosecution history using applicationNumberText and PTAB challenges using patentNumber

  • Red Flag Identification - Focus on revival petitions (37 CFR 1.137), examiner disputes (37 CFR 1.181), and denied decisions for prosecution quality analysis

Query Examples

# Art unit quality assessment
FPD_Search_petitions_by_art_unit(
    art_unit="2128",
    date_range="2020-01-01:2024-12-31",
    limit=100
)

# Complete application petition history
FPD_Search_petitions_by_application(
    application_number="17414168",
    include_documents=False
)

# Cross-MCP workflow example
# 1. Find applications with PFW
# 2. Check petition history for red flags
FPD_Search_petitions_by_application(
    application_number=app_from_pfw,
    include_documents=True
)

Document Processing Functions

Registered Tool Name

Purpose

Requirements

FPD_Get_petition_details

Full petition details by UUID with optional documentBag

USPTO_API_KEY

FPD_get_document_content_with_ocr

Intelligent hybrid document extraction

USPTO_API_KEY (+ MISTRAL_API_KEY or DOCLING_SERVE_URL to OCR scanned pages)

FPD_get_document_download

Secure browser-accessible download URLs

USPTO_API_KEY

Document Processing Capabilities

  • Petition Details Tier (FPD_Get_petition_details): Complete petition data retrieval

    • UUID-based lookup - Find petition by unique identifier

    • Optional document bag - Include/exclude documents based on need

    • LLM-optimized parsing - Extracts issues, rules cited, statutes, decision details

    • Cross-reference fields - applicationNumberText, patentNumber, groupArtUnitNumber for cross-MCP workflows

  • Intelligent Extraction Tier (FPD_get_document_content_with_ocr): Hybrid auto-optimized extraction

    • Capability-ordered tiers - Reads the PDF's native text layer with pypdf first; falls back to OCR only for pages that have no usable text layer

    • Quality detection - Automatically determines whether the native text layer is usable or the page needs OCR

    • Two OCR backends - Mistral OCR (MISTRAL_API_KEY, optional) or a self-hosted Docling backend such as docling-serve (DOCLING_SERVE_URL); either is sufficient, neither is required for text-layer PDFs

    • Transparent reporting - extraction_method names the tier that produced the text (pypdf, Mistral OCR (...), or Docling (docling-serve))

    • Unified interface - Single tool handles all document types (eliminates tool confusion)

    • Speed - Instant for text-layer PDFs; OCR of scanned documents is slower per page

  • Browser Download Tier (FPD_get_document_download): Secure proxy downloads with enhanced filenames

    • Click-to-download URLs that work directly in any browser

    • Centralized proxy integration - If set up, auto-detects PFW MCP and uses unified proxy (port 8080) for all USPTO documents downloads, will fall back to local proxy if issues detected with centralized proxy.

      • Persistent links - 7-day encrypted links when using PFW centralized proxy (work across MCP restarts)

      • Unified architecture - Single HTTP proxy (port 8080) for all USPTO MCPs when PFW installed

      • Standalone fallback - Local proxy (port 8081) when PFW not detected

    • Enhanced filenames - Professional format with petition date, app/patent numbers, and description

      • Format: PET-2013-09-10_APP-13632078_PAT-8803593_PATENT_PROSECUTION_HIGHWAY_DECISION.pdf

      • Chronological sorting by petition filing date

      • Instant context for patent attorneys and file management

    • API key security - USPTO credentials never exposed in chat history or browser

    • Rate limiting compliance - Automatic enforcement of USPTO's 5 downloads per 10 seconds

LLM Guidance Function

Registered Tool Name

Purpose

Requirements

FPD_get_guidance

Context-efficient sectioned LLM guidance (80-95% token reduction)

None

Admin Function (OAuth deployments only)

Registered Tool Name

Purpose

Requirements

FPD_manage_users

Registered-user management (list/add/set_role/activate/deactivate)

FPD_ENABLE_USER_MANAGEMENT=true; in OAuth mode hidden unless the signed-in identity has the fpd:admin scope

  • Context-Efficient Guidance System

    FPD_get_guidance Tool - Solves MCP Resources visibility problem with selective guidance sections:

🎯 Quick Reference Chart - What section for your question?

​ 🔍 "Find petitions by company/art unit" → tools

​ 🚩 "Identify petition red flags" → red_flags

​ 📄 "Download petition documents" → documents

​ 🤝 "Correlate petitions with prosecution" → workflows_pfw

​ ⚖️ "Analyze petition + PTAB patterns" → workflows_ptab

​ 📊 "Citation quality + petition correlation" → workflows_citations

​ 🏢 "Complete portfolio due diligence" → workflows_complete

​ 📚 "Research CFR rules with Assistant" → workflows_assistant

​ 🎯 "Ultra-minimal PFW + FPD workflows" → ultra_context

​ "Choose an extraction approach" → extraction

​ 📏 "Why was my response truncated / how do I page it?" → limits

​ 🗓️ "Why did an old petition return zero results?" → coverage

The tool provides specific workflows, field recommendations, API call optimization strategies, anti-patterns to avoid, and cross-MCP integration patterns for maximum efficiency. See USAGE_EXAMPLES.md for detailed examples and integration workflows.

💻 Usage Examples & Integration Workflows

For comprehensive usage examples, including:

  • Basic petition searches (company, type, outcome)

  • Art unit quality assessment (petition frequency, types, examiner disputes)

  • Application petition history (complete lifecycle tracking)

  • Cross-MCP integration workflows (FPD + PFW + PTAB + Pinecone)

  • Red flag identification (revival petitions, examiner disputes, denied petitions)

  • Document extraction and downloads (hybrid pypdf text-layer / OCR approach)

  • Extraction strategy guidance

See the detailed USAGE_EXAMPLES.md documentation.

🔧 Field Customization

The MCP server supports user-customizable field sets through YAML configuration for optimal context reduction. You can modify field sets without changing any code!

Configuration file: field_configs.yaml (in project root)

For complete customization guidance, including progressive workflow strategies, token optimization, and advanced field selection patterns, see CUSTOMIZATION.md.

🔗 Cross-MCP Integration

This MCP is designed to work seamlessly with other USPTO MCPs and knowledge bases for comprehensive patent lifecycle analysis:

MCP Server

Purpose

GitHub Repository

USPTO Patent File Wrapper (PFW)

Prosecution history & documents

uspto_pfw_mcp

USPTO Final Petition Decisions (FPD)

Petition decisions during prosecution

uspto_fpd_mcp

USPTO Enhanced Citations

AI-extracted citation intelligence from Office Actions mailed Oct 2017-present (apps filed 2015+)

uspto_enriched_citation_mcp

USPTO Patent Trial and Appeal Board (PTAB)

Post-grant challenges

uspto_ptab_mcp

Pinecone Assistant MCP

Patent law knowledge base with AI-powered chat and citations (MPEP, examination guidance) - 1 API key, limited free tier

pinecone_assistant_mcp

Pinecone RAG MCP

Patent law knowledge base with custom embeddings (MPEP, examination guidance) - Requires Pinecone + embedding model, monthly resetting free tier

pinecone_rag_mcp

Integration Overview

The Final Petition Decisions (FPD) MCP bridges prosecution and post-grant challenges, tracking procedural petitions that reveal prosecution quality issues. When combined with the other MCPs, it enables:

  • FPD + PFW: Understand petition context by cross-referencing with prosecution history

  • FPD + PFW + Enhanced Citations: Correlate petition patterns with examiner citation quality for comprehensive prosecution assessment (Oct 2017+ applications)

  • FPD + PTAB: Correlate petition red flags with post-grant challenge outcomes

  • PFW + FPD + PTAB: Complete patent lifecycle tracking from filing through post-grant challenges

  • PFW + FPD + Enhanced Citations: Art unit quality assessment with citation intelligence and petition pattern analysis

  • FPD + Pinecone (Assistant or RAG): Research MPEP guidance and petition standards before pulling full document text

Key Integration Patterns

Cross-Referencing Fields:

  • applicationNumberText - Primary key linking petitions to PFW prosecution and Enhanced Citations

  • patentNumber - Secondary key linking granted patents to PTAB challenges

  • groupArtUnitNumber - Art unit analysis across all MCPs (FPD, PFW, Enhanced Citations, PTAB)

  • firstApplicantName - Party matching across MCPs

  • examinerCitedReferenceIndicator (Citations MCP) - Examiner vs applicant citation analysis for petition quality correlation

Progressive Workflow:

  1. Discovery (FPD): Find petitions using minimal search

  2. Prosecution Context (PFW): Cross-reference petition applications with prosecution history

  3. Citation Intelligence (Enhanced Citations): Analyze examiner citation quality for applications with petitions (Oct 2017+ only)

  4. Challenge Assessment (PTAB): Check if patents with petition red flags faced post-grant challenges

  5. Knowledge Research (RAG): Research MPEP petition guidance if available

  6. Detailed Analysis (FPD): Extract petition documents for Director's reasoning

  7. Risk Scoring: Quantify prosecution quality based on petition patterns, citation quality, and outcomes

For detailed integration workflows, cross-referencing examples, and complete use cases, see USAGE_EXAMPLES.md.

🆕Centralized Proxy Integration (PFW + FPD)

When both PFW and FPD MCPs are installed, FPD automatically integrates with PFW's centralized proxy for unified document management:

Architecture Benefits:

  • Single Port - One HTTP server (port 8080) for all USPTO document downloads

  • Persistent Links - 7-day encrypted links via PFW's SQLite database (work across MCP restarts)

  • Unified Rate Limiting - Shared USPTO limits (5 requests/10 seconds) across all MCPs

  • Cross-MCP Caching - PFW caches documents from all USPTO MCPs for faster access

  • Automatic Detection - FPD detects PFW at startup and switches to centralized mode

How It Works:

  1. FPD extracts PDF download URL from USPTO API response

  2. FPD generates enhanced filename: PET-{date}_APP-{app}_PAT-{patent}_{description}.pdf

  3. FPD registers document with PFW: POST /register-fpd-document (includes enhanced filename)

  4. PFW stores metadata in database (petition_id, download_url, api_key, enhanced_filename)

  5. FPD returns download link: http://localhost:8080/download/{petition_id}/{doc_id}

  6. User clicks link → PFW fetches from USPTO → streams PDF with enhanced filename

  7. Link persists for 7 days and works across MCP restarts

Standalone Mode:

  • Without PFW: FPD uses local proxy (port 8081) for immediate session-based downloads

  • Enhanced filenames still work (same generation logic used locally)

  • Graceful fallback ensures FPD works independently with full filename functionality

📈 Performance Comparison

Method

Response Size

Context Usage

Features

Direct curl

~100KB+

High

Raw API access

MCP Balanced

~10KB

Medium

Key fields for analysis

MCP Minimal

~2KB

Very Low

Essential data only

🧪 Testing

Automated Suite

uv run pytest

Runs offline (network boundaries are mocked). The live-API tests in tests/test_integration.py skip automatically unless USPTO_API_KEY is set, and the key-management/storage tests that touch real encrypted key storage are excluded via addopts in pyproject.toml (gated by FPD_RUN_KEY_TESTS=1).

Core Tests (Essential)

With uv (Recommended):

# Test core functionality and field configuration
uv run python tests/test_basic.py

# Expected: ALL TESTS PASSED!

With traditional Python:

python tests/test_basic.py

Expected Outputs

test_basic.py:

[OK] Settings imported successfully
[OK] FieldManager imported successfully
[OK] FPDClient initialized successfully
ALL TESTS PASSED!

See tests/README.md for comprehensive testing guide.

📁 Project Structure

uspto_fpd_mcp/
├── field_configs.yaml             # Root-level field customization
├── .security/                      # Commit-time security scanning components
│   ├── prompt_injection_detector.py     # Base prompt injection detection
│   ├── fpd_prompt_injection_detector.py # FPD-specific detection patterns
│   └── check_prompt_injections.py # Standalone scanning script (pre-commit hook)
├── src/
│   └── fpd_mcp/
│       ├── main.py                 # Composition root: FastMCP server, 9 tools (8 registered by default; FPD_manage_users needs FPD_ENABLE_USER_MANAGEMENT), OAuth wiring
│       ├── __main__.py            # Entry point for -m execution
│       ├── runtime.py             # Settings/logging bootstrap + service singletons
│       ├── server_bootstrap.py    # Transport startup + proxy lifecycle
│       ├── middleware.py          # HTTP auth / security-header middleware
│       ├── validators.py          # Input validation (petition IDs, dates, identifiers)
│       ├── shared_secure_storage.py # Cross-MCP encrypted API key storage
│       ├── tools/                 # Tool implementations (registered by main.py)
│       │   ├── petitions.py       # 5 search/details tools
│       │   ├── documents.py       # Download + content-extraction tools
│       │   ├── guidance.py        # FPD_get_guidance
│       │   └── admin.py           # FPD_manage_users (registration-gated)
│       ├── config/
│       │   ├── field_manager.py   # Configuration management
│       │   ├── settings.py        # Environment configuration
│       │   ├── tool_reflections.py # Sectioned LLM guidance (80-95% token reduction)
│       │   ├── log_config.py      # Logging setup (sanitizing filter on every handler)
│       │   ├── api_constants.py   # API configuration constants
│       │   ├── feature_flags.py
│       │   └── storage_paths.py    # Storage path management
│       ├── prompts/               # 10 prompt templates (opt-in via FPD_ENABLE_PROMPTS)
│       ├── api/
│       │   ├── fpd_client.py      # FPD API client (retries, circuit breakers, cache)
│       │   ├── docling_client.py  # Self-hosted Docling OCR client
│       │   └── field_constants.py # Field name constants
│       ├── proxy/
│       │   ├── server.py          # HTTP proxy for secure downloads
│       │   ├── secure_link_cache.py # 7-day encrypted persistent links
│       │   ├── centralized_integration.py # PFW centralized-proxy mode
│       │   └── rate_limiter.py    # USPTO rate limiting compliance
│       ├── auth/                  # OAuth 2.1 provider (Google + Entra dual IdP)
│       ├── shared/
│       │   ├── injection_scan.py  # Runtime detection-only injection scanner + provenance note
│       │   ├── error_utils.py     # Error handling utilities
│       │   ├── circuit_breaker.py # Circuit breaker pattern
│       │   ├── internal_auth.py   # Internal authentication
│       │   ├── log_sanitizer.py   # Sink-level log sanitization
│       │   ├── uspto_shared_rate_limiter.py # Cross-process shared rate limiter
│       │   ├── structured_logging.py
│       │   └── security_logger.py # Security event logging
│       ├── services/
│       │   ├── fpd_service.py     # Core business logic layer
│       │   └── document_extraction.py # pypdf -> Mistral OCR -> Docling pipeline
│       ├── ui/                    # MCP App HTML view resources
│       └── util/
│           ├── database.py
│           ├── identity.py        # Per-caller viewer keys for the downloads page
│           └── secure_logger.py   # Secure logging functionality
├── deploy/
│   ├── linux_setup.sh            # Linux deployment script
│   ├── windows_setup.ps1         # PowerShell deployment script
│   ├── manage_api_keys.ps1       # API key management utilities
│   ├── Validation-Helpers.psm1   # PowerShell validation module
│   └── Validation-Helpers.sh     # Bash validation helpers
├── docs/
│   └── CONTENT_PROVENANCE.md     # Retrieved-text handling / provenance posture
├── tests/                         # Automated pytest suite (see tests/README.md)
│   ├── conftest.py               # mock_runtime fixture (mocked client, real service layer)
│   ├── test_basic.py             # Core functionality test
│   ├── test_integration.py       # Live-API tests (skip without USPTO_API_KEY)
│   ├── test_injection_scan.py    # Runtime injection-scan unit + wiring tests
│   ├── TEST_SUITE.md             # Manual end-to-end suite
│   └── README.md                 # Testing documentation
├── reference/
│   ├── Document_Descriptions_List.csv
│   ├── FinalPetitionDecisions_swagger.yaml
│   ├── petition-decision-schema.json
│   └── README.md
├── documentation_photos/          # Visual documentation
├── pyproject.toml                 # Package configuration
├── README.md                      # This file
├── INSTALL.md                     # Comprehensive installation guide
├── USAGE_EXAMPLES.md             # Function examples and workflows
├── CUSTOMIZATION.md              # Field configuration and optimization guide
├── PROMPTS.md                    # Prompt templates documentation
├── SECURITY_GUIDELINES.md        # Security best practices
├── SECURITY_SCANNING.md          # Automated secret detection guide
└── LICENSE                       # MIT License

🔍 Troubleshooting

Common Issues

API Key Issues

  • For Claude Desktop: API keys in config file are sufficient

  • For test scripts: Environment variables must be set

Setting USPTO API Key:

  • Windows Command Prompt: set USPTO_API_KEY=your_key

  • Windows PowerShell: $env:USPTO_API_KEY="your_key"

  • Linux/macOS: export USPTO_API_KEY=your_key

Setting Mistral API Key (for OCR):

  • Windows Command Prompt: set MISTRAL_API_KEY=your_key

  • Windows PowerShell: $env:MISTRAL_API_KEY="your_key"

  • Linux/macOS: export MISTRAL_API_KEY=your_key

uv vs pip Issues

  • uv advantages: Better dependency resolution, faster installs

  • Mixed installation: Can use both uv sync and pip install -e .

  • Testing: Use uv run prefix for uv-managed projects

Fields Not Returning Data

  • Cause: Field name not in YAML config

  • Solution: Edit field_configs.yaml to include desired fields

Authentication Errors

  • Cause: Missing or invalid API key

  • Solution: Verify USPTO_API_KEY environment variable or Claude Desktop config

MCP Server Won't Start

  • Cause: Missing dependencies or incorrect paths

  • Solution: Re-run setup script, restart all PowerShell windows, restart Claude Desktop (or other MCP Client) and verify configuration

  • If problems persist: Reset the MCP installation (see "Resetting MCP Installation" below)

Virtual Environment Issues (Windows Setup)

  • Symptom: "No pyvenv.cfg file" errors during windows_setup.ps1

  • Cause: Claude Desktop locks .venv files when running, preventing proper virtual environment creation

  • Solution:

    1. Close Claude Desktop completely before running setup script

    2. Remove .venv folder: Remove-Item ./.venv -Force -Recurse -ErrorAction SilentlyContinue

    3. Run .\deploy\windows_setup.ps1 again

Resetting MCP Installation

If you need to completely reset the MCP installation to run the Windows Quick installer again:

# Navigate to the project directory
cd C:\Users\YOUR_USERNAME\uspto_fpd_mcp

# Remove Python cache directories
Get-ChildItem -Path ./src -Directory -Recurse -Force | Where-Object { $_.Name -eq '__pycache__' } | Remove-Item -Recurse -Force

# Remove virtual environment
if (Test-Path ".venv") {
    Remove-Item ./.venv -Force -Recurse -ErrorAction SilentlyContinue
}

# Remove database files (if any)
Remove-Item ./proxy_documents.db -Force -ErrorAction SilentlyContinue
Remove-Item ./petition_links.db -Force -ErrorAction SilentlyContinue

# Now you can run the setup script again
.\deploy\windows_setup.ps1

Linux/macOS Reset:

# Navigate to the project directory
cd ~/uspto_fpd_mcp

# Remove Python cache directories
find ./src -type d -name '__pycache__' -exec rm -rf {} + 2>/dev/null || true

# Remove virtual environment and database files
rm -rf .venv
rm -f proxy_documents.db petition_links.db

# Run setup script again
./deploy/linux_setup.sh

Getting Help

  1. Check the test scripts for working examples

  2. Review the field configuration in field_configs.yaml

  3. Verify your Claude Desktop configuration matches the provided templates in INSTALL.md

🛡️ Security & Production Readiness

Enhanced Error Handling

  • Retry logic with exponential backoff - Automatic retries for transient failures (3 attempts with 1s, 2s, 4s delays)

  • Smart retry strategy - Doesn't retry authentication errors or client errors (4xx)

  • Structured logging - Request ID tracking for better debugging and monitoring

  • Production-grade resilience - Handles timeouts, network issues, and API rate limits gracefully

  • Configurable timeouts - USPTO_TIMEOUT and USPTO_DOWNLOAD_TIMEOUT environment variables for API request tuning

Security Features

  • 🔐 Windows DPAPI Secure Storage - API keys encrypted with Windows Data Protection API (user-specific encryption)

  • 🛡️ Safe Logging with Auto-Sanitization - All logging automatically masks API keys, tokens, and sensitive data; file-based audit trail with rotation in ~/.uspto_fpd_mcp/logs/

  • Environment variable API keys - No hardcoded credentials anywhere in codebase

  • Zero plain text API keys - Secure storage option eliminates API keys from Claude Desktop config files

  • Cross-platform security - Automatic fallback to environment variables on non-Windows systems

  • Secure test patterns - Test files use environment variables with fallbacks

  • Comprehensive .gitignore - Prevents accidental credential commits

  • Security guidelines - Complete documentation for secure development practices

  • Automated secret scanning - CI/CD and pre-commit hooks prevent API key leaks (detect-secrets)

  • 20+ secret types detected - AWS keys, GitHub tokens, JWT, private keys, API keys, and more

  • Prompt injection detection - 70+ pattern detection system protects against AI-specific attacks

  • Baseline management - Tracks known placeholders while catching real secrets

  • Field name constants - Eliminates magic strings, reduces typo-based security issues

Content Provenance & Injection Annotation

Retrieved petition text is served verbatim — nothing is stripped or rewritten, because verbatim fidelity of legal text is the product. The defense against prompt-injection-shaped content inside retrieved documents is labeling and detection, not mutation:

  • Every successful FPD_get_document_content_with_ocr response carries a provenance_note stating that extracted/OCR text is quoted data from USPTO petition documents, never instructions to the consuming model, and that petitioner- or office-drafted characterizations should be presented as attributed positions.

  • A detection-only scanner (src/fpd_mcp/shared/injection_scan.py, stdlib only) checks extracted text for instruction-override, prompt-extraction, and encoding-evasion language plus invisible-Unicode steganography density. On a hit, the response gains an injection_scan annotation naming the petition, document identifier, and pattern kind — never the matched text. The key is absent entirely when the text is clean.

  • The server instructions include a matching provenance-posture paragraph, and the five petition search/details tools return structured metadata only (no free-text passages), so they carry no annotation.

Full write-up: docs/CONTENT_PROVENANCE.md. This runtime layer is separate from the commit-time .security/ codebase scanners described in SECURITY_SCANNING.md.

Request Tracking & Debugging

All API requests include unique request IDs (8-char UUIDs) for correlation:

[a1b2c3d4] Starting GET request to petition/decisions/search
[a1b2c3d4] Request successful on attempt 1

Documentation

  • SECURITY_GUIDELINES.md - Comprehensive security best practices

  • SECURITY_SCANNING.md - Automated secret detection and prevention guide

  • tests/README.md - Complete testing guide with API key setup

  • Enhanced error messages with request IDs for better support

📝 Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Add tests for new functionality

  4. Ensure all tests pass

  5. Submit a pull request

📄 License

MIT License

⚠️ Disclaimer

THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND.

Independent Project Notice: This is an independent personal project and is not affiliated with, endorsed by, or sponsored by the United States Patent and Trademark Office (USPTO).

The author makes no representations or warranties, express or implied, including but not limited to:

  • Accuracy & AI-Generated Content: No guarantee of data accuracy, completeness, or fitness for any purpose. Users are specifically cautioned that outputs generated or assisted by Artificial Intelligence (AI) components, including but not limited to text, data, or analyses, may be inaccurate, incomplete, fictionalized, or represent "hallucinations" (confabulations) by the AI model.

  • Availability: USPTO API and Mistral API dependencies may cause service interruptions.

  • Legal Compliance: Users are solely responsible for ensuring their use of this software, and any submissions or actions taken based on its outputs, strictly comply with all applicable laws, regulations, and policies, including but not limited to:

  • Legal Advice: This tool provides data access and processing only, not legal counsel. All results must be independently verified, critically analyzed, and professionally judged by qualified legal professionals.

  • Commercial Use: Users must verify USPTO and Mistral terms for commercial applications.

  • Confidentiality & Data Security: The author makes no representations regarding the confidentiality or security of any data, including client-sensitive or technical information, input by the user into the software's AI components or transmitted to third-party AI services (e.g., Mistral API). Users are responsible for understanding and accepting the privacy policies, data retention practices, and security measures of any integrated third-party AI services.

  • Foreign Filing Licenses & Export Controls: Users are solely responsible for ensuring that the input or processing of any data, particularly technical information, through this software's AI components does not violate U.S. foreign filing license requirements (e.g., 35 U.S.C. 184, 37 CFR Part 5) or export control regulations (e.g., EAR, ITAR). This includes awareness of potential "deemed exports" if foreign persons access such data or if AI servers are located outside the United States.

LIMITATION OF LIABILITY: Under no circumstances shall the author be liable for any direct, indirect, incidental, special, or consequential damages arising from use of this software, even if advised of the possibility of such damages.

USER RESPONSIBILITY: YOU ARE SOLELY RESPONSIBLE FOR THE INTEGRITY AND COMPLIANCE OF ALL FILINGS AND ACTIONS TAKEN BEFORE THE USPTO.

  • Independent Verification: All outputs, analyses, and content generated or assisted by AI within this software MUST be thoroughly reviewed, independently verified, and corrected by a human prior to any reliance, action, or submission to the USPTO or any other entity. This includes factual assertions, legal contentions, citations, evidentiary support, and technical disclosures.

  • Duty of Candor & Good Faith: You must adhere to your duty of candor and good faith with the USPTO, including the disclosure of any material information (e.g., regarding inventorship or errors) and promptly correcting any inaccuracies in the record.

  • Signature & Certification: You must personally sign or insert your signature on any correspondence submitted to the USPTO, certifying your personal review and reasonable inquiry into its contents, as required by 37 CFR 11.18(b). AI tools cannot sign documents, nor can they perform the required human inquiry.

  • Confidential Information: DO NOT input confidential, proprietary, or client-sensitive information into the AI components of this software without full client consent and a clear understanding of the data handling practices of the underlying AI providers. You are responsible for preventing inadvertent or unauthorized disclosure.

  • Export Controls: Be aware of and comply with all foreign filing license and export control regulations when using this tool with sensitive technical data.

  • Service Compliance: Ensure compliance with all USPTO (e.g., Terms of Use for USPTO websites, USPTO.gov account policies, restrictions on automated data mining) and Mistral terms of service. AI tools cannot obtain USPTO.gov accounts.

  • Security: Maintain secure handling of API credentials and client information.

  • Testing: Test thoroughly before production use.

  • Professional Judgment: This tool is a supplement, not a substitute, for your own professional judgment and expertise.

By using this software, you acknowledge that you have read this disclaimer and agree to use the software at your own risk, accepting full responsibility for all outcomes and compliance with relevant legal and ethical obligations.

Note for Legal Professionals: While this tool provides access to patent research tools commonly used in legal practice, it is a data retrieval and AI-assisted processing system only. All results require independent verification, critical professional analysis, and cannot substitute for qualified legal counsel or the exercise of your personal professional judgment and duties outlined in the USPTO Guidance on AI Use.

💝 Support This Project

If you find this USPTO Final Petition Decisions MCP Server useful, please consider supporting the development! This project was developed during my personal time over many hours to provide a comprehensive, production-ready tool for the patent community.

Donate with PayPal

Your support helps maintain and improve this open-source tool for everyone in the patent community. Thank you!

Acknowledgments

  • USPTO for providing the Final Petition Decisions API

  • Model Context Protocol for the MCP specification

  • Claude Code for exceptional development assistance, architectural guidance, documentation creation, PowerShell automation, test organization, and comprehensive code development throughout this project

  • Claude Desktop for additional development support and testing assistance


Questions? See INSTALL.md for complete cross-platform installation guide or review the test scripts for working examples.

OAuth sign-in (optional)

Set FPD_AUTH_MODE=oauth to protect the HTTP endpoint with Google + Microsoft sign-in (OAuth 2.1 with dynamic client registration — works as a Claude.ai / Claude Desktop custom connector). Access is controlled by a local SQLite user list; role admin unlocks the FPD_manage_users user-management tool and its MCP App panel. The default (none) and STDIO are unchanged. Full walkthrough: SSO_SETUP.md.

Admin-tool gating: The FPD_manage_users tool is registered only when FPD_ENABLE_USER_MANAGEMENT=true (default off). In OAuth mode, the tool is additionally gated behind the fpd:admin scope. Important: OAuth deployments must set FPD_ENABLE_USER_MANAGEMENT=true in the compose/systemd config or the admin tool will not appear in the tool list, even if the user has admin role.

Internal authentication split: Headless clients (internal gateway services) send Authorization: Bearer <token> to bypass the browser OAuth flow. The plain FPD_AUTH_INTERNAL_TOKEN grants fpd:user scope only (read access); admin operations require the separate FPD_AUTH_INTERNAL_ADMIN_TOKEN, which grants both fpd:user and fpd:admin. Most deployments should leave the admin token unset unless you have a machine caller that needs user management.

Shared USPTO rate limiting (multi-MCP deployments)

If you run all 4 USPTO MCPs (Citations, PFW, PTAB, FPD) as HTTP containers on the same box, serving multiple users, under one USPTO API key, each server's own in-process limiter can't see what the other 3 processes are doing — and USPTO's documented limits are per-key (burst=1, 4-15 req/sec depending on call type, plus weekly quotas), not per-process. Point all 4 containers at one bind-mounted directory and they share a single cross-process token bucket + a bounded pool of in-flight-request slots, arbitrated via POSIX file locks (crash-safe — a dead process's lock is released by the kernel). Single-MCP or STDIO deployments need nothing; the limiter is off unless the directory variable is set.

# docker-compose.yml (excerpt, all 4 USPTO MCP services)
volumes:
  uspto-rate-limit: {}
services:
  fpd-mcp:
    volumes:
      - uspto-rate-limit:/var/run/uspto-shared-rate-limit
    environment:
      USPTO_SHARED_RATE_LIMIT_DIR: /var/run/uspto-shared-rate-limit
      USPTO_SHARED_RATE_LIMIT_RPS: "4"       # default; total across ALL 4 MCPs
      USPTO_SHARED_MAX_CONCURRENT: "2"       # default; shared in-flight slots

One token bucket and 2 concurrency slots are shared across every process mounting the directory — a heavier MCP naturally draws more of the budget under load, and a long PDF download occupies a slot for its full duration (not just connection setup), per USPTO's burst=1 guidance.

Available Tools

8 tools
FPD_get_document_content_with_mistral_ocrA

Extract full text from USPTO petition documents with intelligent hybrid extraction (PyPDF2 first, Mistral OCR fallback).

PREREQUISITE: First use fpd_get_petition_details to get document_identifier from documentBag. Auto-optimizes cost: free PyPDF2 for text-based PDFs, ~$0.001/page Mistral OCR only for scanned documents. MISTRAL_API_KEY is optional - without it, only PyPDF2 extraction is available (works well for text-based PDFs).

USE CASES:

  • Analyze petition legal arguments and Director's reasoning

  • Extract petition issues, CFR rules cited, statutory references

  • Detect patterns across multiple petitions (e.g., common denial reasons)

  • Correlate petition text with PTAB challenge strategies

  • Profile examiner behavior from supervisory review petitions

COST OPTIMIZATION:

  • auto_optimize=True (default): Try free PyPDF2 first, fallback to Mistral OCR if needed (70% cost savings)

  • auto_optimize=False: Use Mistral OCR directly (~$0.001/page)

Returns: extracted_content, extraction_method, processing_cost_usd, page_count

Example workflow:

  1. fpd_get_petition_details(petition_id='0b71b685-...', include_documents=True)

  2. fpd_get_document_content(petition_id='0b71b685-...', document_identifier='DSEN5APWPHOENIX')

  3. Analyze extracted text for legal arguments, issues, and patterns

For document selection strategies and cost optimization, use FPD_get_guidance('cost').

ParametersJSON Schema
NameRequiredDescriptionDefault
petition_idYes
document_identifierYes
auto_optimizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It thoroughly explains the tool's behavior: the hybrid extraction process (PyPDF2 first, Mistral OCR fallback), cost optimization details (free vs. $0.001/page), dependency on MISTRAL_API_KEY, and return values (extracted_content, extraction_method, etc.). It also covers practical aspects like cost savings (70%) and fallback mechanisms, providing rich context beyond basic functionality.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (PREREQUISITE, USE CASES, COST OPTIMIZATION, Example workflow) and front-loaded key information. However, it includes some redundancy (e.g., repeating cost details in multiple sections) and could be slightly more concise by integrating the example workflow more seamlessly. Overall, most sentences earn their place by adding value, but minor trimming is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (hybrid extraction, cost optimization, prerequisites) and the absence of annotations, the description is highly complete. It explains the extraction process, cost implications, dependencies, use cases, and workflow integration. With an output schema present, it doesn't need to detail return values, but it still lists them (extracted_content, etc.) for clarity. This provides all necessary context for effective tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must compensate. It adds significant meaning for all parameters: petition_id is contextualized in the prerequisite and example workflow, document_identifier is explained as coming from documentBag via fpd_get_petition_details, and auto_optimize is detailed with its default (True) and effects on cost and extraction method. This goes beyond the schema's basic titles and types, clarifying how and why to use each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Extract full text from USPTO petition documents with intelligent hybrid extraction (PyPDF2 first, Mistral OCR fallback).' It specifies the verb ('extract'), resource ('USPTO petition documents'), and method ('hybrid extraction'), distinguishing it from sibling tools like FPD_get_document_download (which likely downloads files) and Get_petition_details (which retrieves metadata).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool, including prerequisites ('First use fpd_get_petition_details to get document_identifier from documentBag'), alternatives (e.g., using auto_optimize=False for direct OCR), and sibling tool references (e.g., 'For document selection strategies and cost optimization, use FPD_get_guidance('cost')'). It also lists specific use cases like analyzing legal arguments and detecting patterns, helping differentiate from other search or download tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

FPD_get_document_downloadA

Generate browser-accessible download URL for petition documents (PDFs) via secure proxy.

ALWAYS-ON PROXY (DEFAULT): Proxy server starts with MCP - download links work immediately.

Workflow:

  1. fpd_get_petition_details(petition_id='uuid', include_documents=True) → get documentBag

  2. fpd_get_document_download(petition_id='uuid', document_identifier='ABC123') → get download link

  3. Provide download link to user

CRITICAL RESPONSE FORMAT - Always format with BOTH clickable link and raw URL: 📁 Download {DocumentType} ({PageCount} pages) | Raw URL: {proxy_url}

Why both formats?

  • Clickable links work in Claude Desktop and most clients

  • Raw URLs enable copy/paste in Msty and other clients where links aren't clickable

Document types:

  • Petition document: Original petition filed with USPTO

  • Decision document: Director's final decision

  • Supporting exhibits: Declarations, prior art, technical documents

Parameters:

  • petition_id: Petition UUID from search results

  • document_identifier: Document identifier from documentBag

  • proxy_port: Optional (defaults to FPD_PROXY_PORT env var or 8081)

  • generate_persistent_link: Generate 7-day persistent link (default: True)

    • True: Attempts persistent link via USPTO PFW MCP (works across MCP restarts)

    • False: Session-based link (works while MCP running, no PFW required)

ParametersJSON Schema
NameRequiredDescriptionDefault
petition_idYes
document_identifierYes
proxy_portNo
generate_persistent_linkNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure and does so effectively. It explains the proxy behavior ('ALWAYS-ON PROXY (DEFAULT): Proxy server starts with MCP'), link persistence options ('True: Attempts persistent link via USPTO PFW MCP', 'False: Session-based link'), and response format requirements ('CRITICAL RESPONSE FORMAT - Always format with BOTH clickable link and raw URL'). The only minor gap is lack of explicit mention about authentication requirements 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, proxy info, workflow, response format, document types, parameters) and front-loads the core purpose. While comprehensive, some sections like the detailed workflow and response format justification could be slightly more concise. Every sentence earns its place by adding value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 parameters, no annotations, but with output schema), the description is remarkably complete. It covers purpose, workflow integration, behavioral details (proxy, persistence), parameter semantics, response formatting requirements, and document type context. The presence of an output schema means the description doesn't need to explain return values, and it focuses appropriately on the operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by providing detailed semantic explanations for all parameters. It explains petition_id ('Petition UUID from search results'), document_identifier ('Document identifier from documentBag'), proxy_port ('Optional (defaults to FPD_PROXY_PORT env var or 8081)'), and generate_persistent_link with its two modes and implications. This goes well beyond what the bare schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool's purpose: 'Generate browser-accessible download URL for petition documents (PDFs) via secure proxy.' This is a specific verb ('Generate') + resource ('download URL for petition documents') that clearly distinguishes it from sibling tools like Get_petition_details (which retrieves details) or FPD_get_document_content_with_mistral_ocr (which extracts content via OCR).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit workflow guidance: '1. fpd_get_petition_details(petition_id='uuid', include_documents=True) → get documentBag 2. fpd_get_document_download(petition_id='uuid', document_identifier='ABC123') → get download link 3. Provide download link to user.' It clearly positions this as step 2 in a sequence and distinguishes it from content extraction tools by focusing on URL generation rather than document analysis.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

FPD_get_guidanceA

Get selective USPTO FPD guidance sections for context-efficient workflows.

🎯 QUICK REFERENCE - What section for your question?

🔍 "Find petitions by company/art unit" → tools 🚩 "Identify petition red flags" → red_flags 📄 "Download petition documents" → documents 🤝 "Correlate petitions with prosecution" → workflows_pfw ⚖️ "Analyze petition + PTAB patterns" → workflows_ptab 📊 "Citation quality + petition correlation" → workflows_citations 🏢 "Complete portfolio due diligence" → workflows_complete 📚 "Research CFR rules with Assistant" → workflows_assistant 🎯 "Ultra-minimal PFW + FPD workflows" → ultra_context 💰 "Reduce extraction costs" → cost

Available sections:

  • overview: Available sections and MCP overview (default)

  • workflows_pfw: FPD + PFW integration workflows

  • workflows_ptab: FPD + PTAB integration workflows

  • workflows_citations: FPD + Citations integration workflows

  • workflows_complete: Four-MCP complete lifecycle analysis

  • workflows_assistant: Pinecone Assistant + FPD research workflows

  • tools: Tool catalog, progressive disclosure, parameters

  • red_flags: Petition red flag indicators and CFR rules

  • documents: Document extraction, downloads, proxy configuration

  • ultra_context: PFW fields parameter + ultra-minimal workflows

  • cost: Cost optimization for document extraction

Context Efficiency Benefits:

  • 80-95% token reduction (2-8KB per section vs 62KB total)

  • Targeted guidance for specific workflows

  • Same comprehensive content organized for efficiency

  • Consistent pattern with PFW MCP

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionNooverview

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key traits: it's a read-only operation (implied by 'get'), offers token reduction benefits (80-95%), and provides targeted guidance. However, it lacks details on potential errors, rate limits, or authentication requirements, which prevents a score of 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a clear purpose and quick reference, but it includes repetitive or verbose elements, such as listing sections twice (in the quick reference and 'Available sections') and adding marketing-like benefits (e.g., 'Context Efficiency Benefits'). Some sentences could be trimmed without losing essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (1 parameter, no annotations, but with an output schema), the description is complete enough. It explains the purpose, usage, parameters, and benefits, and since an output schema exists, it doesn't need to detail return values. The description adequately covers what users need to know to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage for its single parameter 'section', but the description compensates fully by listing all available sections (e.g., 'overview', 'workflows_pfw') with brief explanations. This adds significant meaning beyond the schema, making the parameter's purpose and options clear to users.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to 'Get selective USPTO FPD guidance sections for context-efficient workflows.' It specifies the verb ('get'), resource ('USPTO FPD guidance sections'), and benefit ('context-efficient workflows'). However, it doesn't explicitly distinguish this tool from its siblings (e.g., document-focused tools like FPD_get_document_content_with_mistral_ocr), which would be needed for a score of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool versus alternatives through the 'QUICK REFERENCE' section, which maps specific questions (e.g., 'Find petitions by company/art unit') to recommended sections (e.g., 'tools'). It also lists all available sections with brief descriptions, helping users select the appropriate one based on their workflow needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Get_petition_detailsA

Get complete details for a specific petition by petition ID (UUID).

⚠️ CRITICAL: Proxy URLs in documentBag require proxy server to be running! MANDATORY WORKFLOW when include_documents=True:

  1. Call fpd_get_petition_details(petition_id=X, include_documents=True)

  2. Call fpd_get_document_download(petition_id=X, document_identifier=DOC1) - starts proxy

  3. NOW provide all document download links to user - proxy is ready

Use for: Deep dive into specific petition, document metadata access, full legal context review.

Returns:

  • All petition fields (no filtering)

  • Document metadata if include_documents=True (file names, page counts, identifiers)

  • Full legal context (all issues, CFR rules, statutes cited)

  • Complete timeline (petition filed → decision issued)

Document access:

  • Use documentIdentifier from documentBag with fpd_get_document_download for browser access

  • Typical documents: Petition PDF, Decision PDF, supporting exhibits

Parameters:

  • petition_id: Petition decision record identifier (UUID from search results)

  • include_documents: Include documentBag with file metadata (default True)

ParametersJSON Schema
NameRequiredDescriptionDefault
petition_idYes
include_documentsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes critical behavioral traits: the proxy requirement for document URLs, the mandatory workflow steps when include_documents=True, and what the tool returns (petition fields, document metadata, legal context, timeline). However, it doesn't mention error conditions, rate limits, or authentication needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (critical warnings, workflow, use cases, returns, document access, parameters). Every sentence adds value, though the workflow section is somewhat lengthy. It's appropriately sized for a complex tool with critical dependencies.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (document access workflow, proxy requirement) and the presence of an output schema, the description is mostly complete. It covers purpose, usage, critical behaviors, and parameter semantics. The output schema handles return value details, so the description appropriately focuses on workflow and context rather than repeating output structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for the schema's lack of parameter documentation. It adds meaningful semantics: petition_id is 'Petition decision record identifier (UUID from search results)' and include_documents 'Include documentBag with file metadata (default True).' This provides crucial context about parameter sources and effects, though it could elaborate more on the documentBag structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get complete details for a specific petition by petition ID (UUID).' It specifies the verb ('Get'), resource ('petition details'), and scope ('complete details for a specific petition'), distinguishing it from search-oriented sibling tools like Search_petitions_balanced.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool: 'Use for: Deep dive into specific petition, document metadata access, full legal context review.' It also distinguishes it from search tools by specifying it's for a 'specific petition' and outlines a mandatory workflow for document access, clearly indicating when to use sibling tools like fpd_get_document_download.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Search_petitions_balancedA

Balanced search for Final Petition Decisions with comprehensive fields (10-20 results).

Balanced tier convenience parameters (14 total) - adds 5 advanced filters to minimal tier.

Use for: Detailed petition analysis after minimal search, cross-referencing with PFW/PTAB data, analyzing petition types and legal context. Returns: 18 key fields including petition type, art unit, technology center, prosecution status, legal issues, CFR rules cited, statutes cited, entity status, and invention title.

All Minimal Parameters (9) - same as Search_petitions_minimal:

  • applicant_name, application_number, patent_number

  • decision_type, deciding_office

  • petition_date_start/end, decision_date_start/end

Additional Balanced Parameters (5):

  • petition_type_code: Petition type (e.g., '551' = revival, '182' = restriction)

  • art_unit: Art unit number (e.g., '2128') - enables PFW cross-reference

  • technology_center: Tech center (e.g., '21', '2100')

  • prosecution_status: Status (e.g., 'During examination', 'Patented Case')

  • entity_status: Entity type (e.g., 'Small', 'Large', 'Undiscounted')

Examples:

# Revival petitions (type 551) that were denied
fpd_search_petitions_balanced(petition_type_code="551", decision_type="DENIED", limit=20)

# Complex combination for quality analysis
fpd_search_petitions_balanced(
    art_unit="2128", petition_type_code="551",
    decision_type="DENIED", prosecution_status="During examination", limit=20
)

Progressive Disclosure Workflow:

  1. Discovery: fpd_search_petitions_minimal(decision_type='DENIED', limit=100)

  2. User selects interesting petitions

  3. Analysis: fpd_search_petitions_balanced with advanced filters (art_unit, petition_type_code)

  4. Cross-reference: Use art_unit with PFW, use patentNumber with PTAB

Cross-MCP Integration:

  • applicationNumberText -> pfw_search_applications_minimal with fields parameter for targeted data

  • patentNumber -> ptab_search_proceedings_minimal(patent_number=X)

  • groupArtUnitNumber -> pfw_search_applications_minimal(art_unit=X, fields=[...])

  • firstApplicantName -> Match parties across PFW/PTAB MCPs

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
limitNo
offsetNo
applicant_nameNo
application_numberNo
patent_numberNo
decision_typeNo
deciding_officeNo
petition_date_startNo
petition_date_endNo
decision_date_startNo
decision_date_endNo
petition_type_codeNo
art_unitNo
technology_centerNo
prosecution_statusNo
entity_statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it's a search operation (implied read-only), returns 10-20 results with 18 key fields, and provides specific examples of how to use parameters. However, it doesn't mention potential limitations like rate limits, authentication requirements, or error conditions, which keeps it from a perfect score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage, parameters, examples, workflow, integration) and uses bold formatting effectively. While comprehensive, it's somewhat lengthy; every sentence serves a purpose, but some redundancy exists (e.g., repeating parameter lists in different sections). The front-loaded purpose and usage are clear, making it efficient for understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (17 parameters, no annotations, 0% schema coverage) and the presence of an output schema, the description is remarkably complete. It explains the tool's purpose, when to use it, all parameters with semantics, provides examples, outlines a workflow, and describes cross-tool integration. The output schema handles return values, so the description appropriately focuses on usage context rather than output details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage for 17 parameters, the description fully compensates by providing detailed parameter information. It clearly lists all 14 parameters (grouped as 9 minimal and 5 balanced), explains what each represents with examples (e.g., 'petition_type_code: Petition type (e.g., '551' = revival, '182' = restriction)'), and includes practical code examples showing parameter usage, adding substantial value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs a 'balanced search for Final Petition Decisions with comprehensive fields (10-20 results)', specifying both the action (search) and resource (Final Petition Decisions). It explicitly distinguishes from the sibling 'Search_petitions_minimal' by explaining this adds 5 advanced filters to the minimal tier, making the differentiation clear and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool: 'Use for: Detailed petition analysis after minimal search, cross-referencing with PFW/PTAB data, analyzing petition types and legal context.' It also includes a 'Progressive Disclosure Workflow' section that shows how this tool fits into a sequence with the minimal search tool, and mentions cross-MCP integration alternatives, giving comprehensive usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Search_petitions_by_applicationA

Get all petition decisions for a specific application number.

Use for: Complete petition history, red flag identification, cross-referencing with PFW prosecution timeline.

Examples:

  • Basic petition check: fpd_search_petitions_by_application(application_number="17896175")

  • With documents: fpd_search_petitions_by_application(application_number="17896175", include_documents=True)

Red flag analysis:

  • Multiple petitions → Difficult prosecution (missed deadlines, examiner conflicts)

  • Revival petitions (37 CFR 1.137) → Application was abandoned

  • Examiner disputes (37 CFR 1.181) → Contentious relationship with examiner

  • Denied petitions → Unsuccessful arguments, potential prosecution quality issues

Cross-MCP integration:

  1. Use pfw_search_applications_minimal with fields parameter for prosecution context

  2. Compare petition dates with prosecution timeline (office actions, RCEs)

  3. Identify if petitions correlate with examiner changes or specific prosecution events

  4. If patented, check PTAB for post-grant challenges

Parameters:

  • application_number: USPTO application number (e.g., "17896175", "15/123,456")

  • include_documents: Include documentBag in response (default False)

ParametersJSON Schema
NameRequiredDescriptionDefault
application_numberYes
include_documentsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and adds significant behavioral context. It explains the tool's role in red flag analysis (e.g., multiple petitions indicate difficult prosecution) and cross-referencing workflows, though it doesn't explicitly mention rate limits, auth needs, or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections (Use for, Examples, Red flag analysis, Cross-MCP integration, Parameters). Every sentence adds value, though it's somewhat lengthy. The purpose is front-loaded, and information is efficiently organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 2 parameters, 0% schema coverage, no annotations, but an output schema exists, the description is highly complete. It covers purpose, usage, examples, analysis context, integration with other tools, and parameter details, compensating for gaps in structured data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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. It provides detailed parameter semantics: application_number format examples ('17896175', '15/123,456') and include_documents behavior ('Include documentBag in response'). This adds substantial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verb ('Get') and resource ('all petition decisions for a specific application number'), distinguishing it from siblings like Search_petitions_by_art_unit or Search_petitions_minimal. It precisely defines the scope of retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use for' section explicitly lists three scenarios: complete petition history, red flag identification, and cross-referencing. The 'Cross-MCP integration' section provides detailed alternatives and sequencing with other tools, including pfw_search_applications_minimal and PTAB checks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Search_petitions_by_art_unitA

Search petitions by art unit number for examiner/art unit quality analysis.

Use for: Art unit quality assessment, systematic petition patterns, examiner behavior analysis. Returns balanced field set for cross-referencing with PFW examiner data and PTAB challenge rates.

Example:

  • fpd_search_petitions_by_art_unit(art_unit="2128", limit=50)

  • fpd_search_petitions_by_art_unit(art_unit="2128", date_range="2020-01-01:2024-12-31")

Analysis patterns:

  • High petition frequency → Difficult examiners or challenging technology

  • Frequent revival petitions (37 CFR 1.137) → Docketing/procedural issues

  • Examiner disputes (37 CFR 1.181) → Communication/quality problems

  • Denied petitions → Weak prosecution practices

Cross-MCP integration:

  • applicationNumberText → pfw_search_applications_minimal with fields parameter for examiner names

  • Group petitions by examiner to identify individual patterns

  • patentNumber → PTAB MCP to correlate petition history with challenge success

Parameters:

  • art_unit: Art unit number (e.g., "2128", "3600")

  • date_range: Optional date range (format: "YYYY-MM-DD:YYYY-MM-DD")

  • limit: Maximum results (default 50, max 200)

ParametersJSON Schema
NameRequiredDescriptionDefault
art_unitYes
date_rangeNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by explaining the tool's purpose, return format ('balanced field set for cross-referencing'), and integration patterns. It describes analysis patterns for interpreting results and cross-MCP workflows. However, it doesn't mention rate limits, authentication needs, or error conditions, leaving some behavioral aspects uncovered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, use cases, examples, analysis patterns, integration, parameters) and every sentence adds value. It's appropriately sized for a complex tool with integration needs, though slightly longer than minimal. The front-loaded purpose statement immediately clarifies the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 parameters, 0% schema coverage, no annotations, but with output schema), the description is remarkably complete. It covers purpose, usage guidelines, parameter semantics, analysis patterns, and cross-tool integration workflows. The output schema existence means return values don't need explanation, and the description provides everything else needed for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by providing detailed parameter explanations: art_unit format examples ('2128', '3600'), date_range format specification ('YYYY-MM-DD:YYYY-MM-DD'), and limit details (default 50, max 200). It adds practical examples showing parameter usage, giving clear semantic meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches petitions by art unit number for examiner/art unit quality analysis, using specific verbs ('search', 'returns') and resources ('petitions', 'art unit number'). It distinguishes from siblings like Search_petitions_by_application by focusing on art unit rather than application, and from Search_petitions_balanced/minimal by specifying balanced field sets for cross-referencing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use for:' section explicitly lists specific scenarios (art unit quality assessment, systematic petition patterns, examiner behavior analysis). It provides clear alternatives by mentioning cross-MCP integration with pfw_search_applications_minimal and PTAB MCP, and distinguishes from siblings by focusing on art unit analysis rather than application-based or minimal searches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Search_petitions_minimalA

Ultra-fast discovery search for Final Petition Decisions (50-100 results).

NEW: Minimal tier convenience parameters (9 total) - no query syntax needed!

Use for: High-volume petition discovery, finding petitions by applicant, decision type, or date range. Returns: 8 essential fields - petition ID, application number, patent number, applicant name, decision type, petition mail date, decision date, deciding office.

Convenience Parameters:

  • applicant_name: Company/party name (e.g., 'Apple Inc.')

  • application_number: Application number (e.g., '17896175')

  • patent_number: Patent number if granted (e.g., '11788453')

  • decision_type: Outcome (e.g., 'GRANTED', 'DENIED', 'DISMISSED')

  • deciding_office: Office that decided (e.g., 'OFFICE OF PETITIONS')

  • petition_date_start/end: Filing date range (YYYY-MM-DD)

  • decision_date_start/end: Decision date range (YYYY-MM-DD)

Examples:

# Denied petitions for company
fpd_search_petitions_minimal(applicant_name="TechCorp Inc.", decision_type="DENIED", limit=50)

# Hybrid: keywords + convenience
fpd_search_petitions_minimal(query="machine learning", decision_type="DENIED", limit=50)

Progressive Disclosure Workflow:

  1. Use THIS TOOL for discovery with minimal params (50-100 results)

  2. Present top results to user for selection

  3. Use fpd_search_petitions_balanced for detailed analysis (10-20 selected)

    • Balanced tier adds: petition_type_code, art_unit, technology_center, prosecution_status, entity_status

  4. Use fpd_get_petition_details for complete petition data

Cross-MCP Integration:

  • {QueryFieldNames.APPLICATION_NUMBER} -> Links to Patent File Wrapper MCP

  • {QueryFieldNames.PATENT_NUMBER} -> Links to PTAB MCP for post-grant challenges

  • Use balanced tier to get {QueryFieldNames.ART_UNIT} for PFW cross-reference

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
limitNo
offsetNo
applicant_nameNo
application_numberNo
patent_numberNo
decision_typeNo
deciding_officeNo
petition_date_startNo
petition_date_endNo
decision_date_startNo
decision_date_endNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key traits: it's a search tool (implied read-only), specifies result limits ('50-100 results'), mentions 'ultra-fast discovery' (performance hint), and details the return format ('8 essential fields'). However, it lacks explicit information on permissions, rate limits, or error handling, which are important for a tool with 12 parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections like 'Use for:', 'Returns:', 'Convenience Parameters:', 'Examples:', and 'Progressive Disclosure Workflow,' making it easy to scan. However, it includes some verbose elements like 'NEW: Minimal tier convenience parameters (9 total) - no query syntax needed!' and extensive cross-MCP integration details that, while informative, could be trimmed for conciseness without losing core value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (12 parameters, no annotations, but has output schema), the description is highly complete. It covers purpose, usage guidelines, parameter details, return fields, examples, workflow integration with sibling tools, and cross-MCP references. The output schema exists, so return values need not be explained in depth, and the description provides enough context for effective tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 fully. It adds significant meaning beyond the schema by explaining all 12 parameters in the 'Convenience Parameters' section with examples (e.g., 'applicant_name': Company/party name), clarifying data types and usage. It also describes the 'query' parameter in examples and mentions 'limit' and 'offset' in the schema, though less explicitly, but overall provides comprehensive parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs 'Ultra-fast discovery search for Final Petition Decisions' with '50-100 results,' specifying the verb (search), resource (Final Petition Decisions), and scope (minimal tier). It distinguishes from siblings by emphasizing 'minimal tier convenience parameters' and explicitly mentions the sibling tool 'fpd_search_petitions_balanced' for detailed analysis, making the purpose specific and differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool vs. alternatives. It states 'Use for: High-volume petition discovery' and outlines a 'Progressive Disclosure Workflow' that directs users to start with this tool for discovery, then use 'fpd_search_petitions_balanced' for detailed analysis, and 'fpd_get_petition_details' for complete data. This includes clear when-to-use and alternative tool references.

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.

  1. 8 tool updates
    • First observedFPD_get_document_content_with_mistral_ocr
    • First observedFPD_get_document_download
    • First observedFPD_get_guidance
    • First observedGet_petition_details
    • First observedSearch_petitions_balanced
    • First observedSearch_petitions_by_application
    • First observedSearch_petitions_by_art_unit
    • First observedSearch_petitions_minimal

TDQS

A4.7/5.0

Scored across 8 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: search functions target different scopes (minimal, balanced, by application, by art unit), get_petition_details retrieves full details, get_document_content extracts text, get_document_download provides download links, and get_guidance offers contextual help. The descriptions explicitly differentiate their use cases, preventing misselection.

Naming Consistency5/5

All tool names follow a consistent 'fpd_' prefix with snake_case and descriptive verb_noun patterns (e.g., fpd_search_petitions_minimal, fpd_get_petition_details). The naming is uniform across all eight tools, making them predictable and easy to understand at a glance.

Tool Count5/5

With 8 tools, the server is well-scoped for USPTO petition analysis, covering search (4 variants), detail retrieval, document access (content and download), and guidance. Each tool serves a specific role in the workflow, from discovery to deep analysis, without redundancy or bloat.

Completeness5/5

The tool set provides complete coverage for the domain: multiple search options for discovery, detailed petition retrieval, document extraction and download for full access, and guidance for workflow optimization. There are no gaps in the CRUD/lifecycle for petition analysis, enabling agents to handle end-to-end tasks without dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers