USPTO Patent File Wrapper MCP Server について
USPTO Patent File Wrapper MCP Server は、USPTO Patent File Wrapper API に接続し、特許調査や法律業務で使えるサーバーです。段階的なフィールド選択、文書抽出、安全なダウンロードにより、取得するコンテキストを抑えられます。
主な機能
- 01USPTO PFW API エンドポイント対応
- 02段階的なフィールド選択と取得
- 03複数方式の発明者検索
- 04特許文書の抽出と PDF ダウンロード
- 05フィールド設定のカスタマイズ
- 06API キーの安全な保存オプション
活用シーン
- 01特許出願の検索と絞り込み
- 02特許の請求項と要約の分析
- 03審査書類の内容抽出
- 04特許 PDF のダウンロードリンク作成
MCP 対応
MCP クライアントに特許出願、メタデータ、文書の取得ツールを公開します。任意のプロンプトと MCP Apps によって、ワークフロー案内や検索結果の可視化も行えます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
USPTO Patent File Wrapper MCP サーバー
コンテキスト削減機能によるトークン節約、スマートなフィールドマッピング、ブラウザーから安全にアクセスできるダウンロードに対応した、USPTO Patent File Wrapper API 用の高性能な Model Context Protocol(MCP)サーバーです。
📚 ドキュメント
| ドキュメント | 説明 |
|---|---|
| 📥 インストールガイド | 自動スクリプトを使用した、クロスプラットフォームの完全なセットアップ |
| 🔑 API キーガイド | USPTO と Mistral の API キーを取得する手順を、スクリーンショット付きで解説します |
| 📖 使用例 | 関数の例、ワークフロー、統合パターン |
| 🎯 プロンプトテンプレート | 法務および調査のワークフロー向けの高度なプロンプトテンプレートを詳しく解説します |
| ⚙️ フィールドのカスタマイズ | 最小構成ツールとバランス構成ツールのフィールドセットをカスタマイズする方法を詳しく解説します |
| 🔒 セキュリティガイドライン | セキュリティのベストプラクティスを詳しく解説します |
| 🛡️ セキュリティスキャン | シークレットの自動検出とプロンプトインジェクション対策のガイド |
| コンテンツの出所 | 取得したドキュメントのテキストにラベルを付け、注釈を付ける方法(データを命令として扱わない方針) |
| 🧪 テストガイド | テストスイートのドキュメントと API キーのセットアップ |
| ⚖️ ライセンス | MIT ライセンスの利用規約 |
⚡クイックスタート
Windows へのインストール
PowerShell を管理者として実行し、次に以下を実行します。
# Navigate to your user profile
cd $env:USERPROFILE
# If git is installed:
git clone https://github.com/john-walkoe/uspto_pfw_mcp.git
cd uspto_pfw_mcp
# If git is NOT installed:
# Download and extract the repository to C:\Users\YOUR_USERNAME\uspto_pfw_mcp
# Then navigate to the folder:
# cd C:\Users\YOUR_USERNAME\uspto_pfw_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
PowerShell スクリプトは、次の処理を行います。
- ✅ uv を確認し、自動でインストールします(winget または PowerShell スクリプトを使用)
- ✅ 依存関係をインストールし、実行可能ファイルを作成します
- ✅ USPTO API キー(必須)と Mistral API キー(任意)を入力するよう求めます。または、開発者のほかの USPTO MCP をインストール済みかどうかを検出し、既存のインストールで使用しているキーを使うかどうかを尋ねます。
- 🔒 API キーを入力する場合、スクリプトは Windows DPAPI 暗号化を使用して API キーを安全に保存します
- ✅ Claude Desktop との統合を設定するかどうかを尋ねます
- 🔒 安全な設定方法(推奨)または従来の方法(MCP JSON ファイルに API キーを平文で記載)を提示します
- ✅ 既存の Claude Desktop 設定をバックアップしてから自動的に統合します(ほかの MCP サーバーは保持されます)
- ✅ インストールの概要と次の手順を表示します
Claude Desktop の設定 — 手動インストール
{
"mcpServers": {
"uspto_pfw": {
"command": "uv",
"args": [
"--directory",
"C:/Users/YOUR_USERNAME/uspto_pfw_mcp",
"run",
"patent-filewrapper-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",
"DOCLING_SERVE_URL": "http://localhost:5001",
"PROXY_PORT": "8080"
}
}
}
}
インストールの詳細、手動セットアップ、トラブルシューティングについては、INSTALL.md を参照してください。
🎯主なメリット
-
🔒 API キーの安全な保存 - API キーを Windows DPAPI で暗号化します(セットアップ時に安全な保存方法を選択できます)
-
🗺️ スマートなフィールドマッピング -
"applicationMetaData.inventionTitle"ではなく、"inventionTitle"のようなシンプルな名前を使用できます -
⚙️ ユーザーがカスタマイズできるフィールド - コードを変更せずに、YAML でフィールドセットを設定できます
-
🎯 コンテキストの削減 - 大量の API データではなく、必要な情報に絞った応答を取得できます
-
🔍 複数の検索戦略 - 発明者を包括的、あいまい一致、完全一致で検索できます
-
⚡ 便利なパラメーター - 弁護士向けの検索パラメーター(art_unit、examiner_name、applicant_name など)により、複雑なクエリー構文が不要になります
-
🏛️ プロフェッショナル向けフィールド - 特許審査、国際業務、分析に役立つ追加フィールド
-
🔄 サーキットブレーカーによる回復性 - 指数バックオフによる自動再試行ロジックで、API の障害を防ぎます
-
📊 段階的な情報開示 - 最小限 → バランス → 詳細の最適化されたワークフローにより、コンテキストを削減します
-
🔗 MCP 間の連携 - Developer の他の PTAB、FPD、Citations、Pinecone(Assistant または RAG)MCP と連携する、複数データベースを対象とした特許調査向けの設計です
- 🆕 ドキュメントハブの一元化 - PFW プロキシが、すべての USPTO MCP で共通して利用できるダウンロード基盤として機能するようになりました(FPD ドキュメントの登録に対応)
-
📝 弁護士向けプロンプトテンプレート - 法律調査、訴訟、デューデリジェンス向けの高度なワークフローテンプレートを 10 種類以上用意しています(サーバー側での有効化はオプトイン方式です。登録するには
PFW_ENABLE_PROMPTS=trueを設定してください。デフォルトでは無効です) -
✨ インテリジェントなドキュメント抽出 - 4 段階のハイブリッド抽出:USPTO のフリーテキスト形式 → pypdf のネイティブテキストレイヤー → Mistral OCR → Docling OCR(セルフホスト可能。
DOCLING_SERVE_URLを設定)。どちらの OCR バックエンドもオプションです -
🌐 安全なブラウザーダウンロード - プロキシ URL をクリックすると、API キーを安全に保ったまま PDF を直接ダウンロードできます
-
👁️ 高度な OCR 機能 - Mistral OCR または Docling(EasyOCR エンジン)を使用し、スキャンされた PDF、数式、図、複雑なレイアウトから LLM で利用するテキストを抽出します
-
📁 Document Bag 連携 - XML による特許・出願内容の分析に加え、審査書類(Abstract、Claims、NOA など)に完全にアクセスできます
-
🚀 高パフォーマンス - 対象を絞ったフィールド選択と指数バックオフによる再試行ロジックで、AI ワークフローに最適化されています
-
🛡️ 本番環境対応 - エラーハンドリングの強化、リクエスト ID を含む構造化ログ、包括的なセキュリティガイドラインを備えています
-
💻 クロスプラットフォーム対応 - Linux と Windows でシームレスに動作します
-
📋 API を完全にカバー - USPTO Patent File Wrapper のすべてのエンドポイントに対応しています
🔍 ツール検索の最適化(Claude Code v2.1.7+)
新機能:PFW MCP は Claude Code に組み込まれたツール検索の最適化に対応しました。動的なツール検出により、コンテキストウィンドウの使用量を 65~75% 削減します。
仕組み
- 自動的に有効化:MCP ツールがコンテキストの 10% を超えると、ツール検索が自動的に有効になります
- スマートな検出:Claude はまず必須ツールのみを読み込み、必要に応じて MCPSearch 経由でほかのツールを検出します
- トークンを節約:約 8~12K トークン → 約 2~3K トークン(実際の作業に使えるトークンが 5~10K 増えます)
- 設定不要:Claude Code v2.1.7+ でそのまま動作します
エントリーポイントツール(常に利用可能)
すばやくアクセスできるよう、次の 3 つのツールがすぐに読み込まれます。
PFW_search_applications_minimal- 特許出願を検索するための主要なツールPFW_get_guidance- ワークフローのガイダンスとドキュメントPFW_get_application_documents- 特許出願のドキュメント一覧
段階的なツール検出
Claude は必要に応じて追加のツールを検出します。
- Tier 1(最小限):高速。必須フィールドのみ(約 10 個)
- Tier 2(バランス):一般的なユースケース向け(約 25 個)
- Tier 3(完全):利用可能なすべてのデータ(50 個以上)
ツール検索を有効にする
ツール検索が自動的に有効にならない場合は、次の手順を実行してください。
Windows:
$env:ENABLE_TOOL_SEARCH = "true"
claude
Linux/Mac:
export ENABLE_TOOL_SEARCH=true
claude
動作を確認する
Claude Code で /context を実行してください。
MCP tools: loaded on-demand (N servers) ← Tool search IS working
ワークフロー設計 - すべてLLMが最小限のユーザーガイダンスで実行
ユーザーのリクエスト例:
- 「QLEDに関連するLCD TV技術の特許を探してください」
- 「2024年に出願されたAppleの特許出願を見せてください」
- 「特許「Integrated delivery and protection device for digital objects」のPDFダウンロードリンクを取得してください」
- 「特許7971071の詳細を調べて、要約してください」
- 「IPR事件IPR2025-00562を調査し、元の審査手続きと比較してください」 -* USPTO Patent Trial and Appeal Board(PTAB)のインストールが必要です - uspto_ptab_mcp。また、このリクエストやMCPをまたぐプロンプトの前に、LLMにPFW_get_guidanceツールを呼び出すよう依頼することを推奨します(セクション選択についてはクイックリファレンス表を参照してください。詳しくは使用例をご覧ください)。
LLMが以下の手順を実行します:
ステップ1:最小限の検索 → ステップ2:選択(および検索のバランス調整 - 任意) → ステップ3:内容分析 → ステップ4(任意):審査書類を追加で選択して確認 → ステップ5(任意):documentBagから選択した文書のdoc_id(s)を取得 → ステップ6(任意):LLMでの使用に向けた文書抽出、および/またはユーザーが使用するPDFのダウンロードリンク取得
フィールド設定では、最適化された調査プロセスをサポートしています:
- 最小限の検索では、審査書類が大量に返されることなく、出願を効率的に20~50件取得できます。
- 取得した出願から、可能性の高い出願/特許を**選択(および検索のバランス調整 - 任意)**します。高度なワークフローやUSPTO PTAB(Patent Trial and Appeal Board)MCPとの連携ワークフローで必要な場合は、任意でバランス調整した検索を実行します。
- 選択した特許をXMLで取得して内容を分析し、LLMが分析に使用できる構造化データを得ます。
- 確認する審査書類を追加で選択します(任意)。例:許可通知、出願人による引用(開示された先行技術)、審査官による拒絶理由通知など。
- documentBagから選択した文書のdoc_id(s)を取得します(任意)。出願書類取得ツールを使用してdoc_id(s)を取得します。
- LLMでの使用に向けて文書を抽出し、および/またはユーザーが使用するPDFのダウンロードリンクを取得します(任意)。文書の抽出には、速度と品質が自動で最適化されるインテリジェントなハイブリッドツールを使用します。文書をPDFとしてダウンロードする際は、チャット履歴からUSPTOのAPIキーを隠すHTTPプロキシのURLを使用します。
🎯 プロンプトテンプレート
このMCPサーバーには、複雑な特許ワークフロー向けに高度に最適化されたAIプロンプトテンプレートが含まれています。すべてのテンプレート、機能、使用例の詳細については、**PROMPTS.md**をご覧ください。
テンプレートの概要
| カテゴリ | テンプレート | 目的 |
|---|---|---|
| 法的分析 | /patent_search、/patent_explanation_for_attorneys、/patent_invalidity_analysis_defense_pinecone_PTAB | 特許の検索、技術的な翻訳、防御的訴訟 |
| 調査と審査手続き | /art_unit_quality_assessment_FPD、/litigation_research_setup_PTAB_FPD、/technology_landscape_mapping_PTAB | 審査官の分析、訴訟準備、競合情報 |
| 文書管理 | /complete_patent_package、/document_filtering_assistant、/inventor_portfolio_analysis | 整理された取得、スマートなフィルタリング、ポートフォリオのマッピング |
すべてのテンプレートに共通する主な機能:
- 入力処理の強化 - 柔軟な識別子に対応(特許番号、出願番号、タイトルのキーワード)
- スマートな検証 - 形式を自動検出し、ガイダンスを提供
- MCP間連携 - PTAB、FPD、Citations、Pinecone MCPとのシームレスなワークフロー
- コンテキストの最適化 - 段階的な開示によるトークン削減
🖼️ MCP Apps(Claude のビジュアル UI)
PFW MCP には、Claude Desktop 内の iframe として表示される、組み込みのビジュアルビューが 4 つあります(5 つ目のユーザー管理パネルは、PFW_ENABLE_USER_MANAGEMENT=true を設定した OAuth デプロイでのみ表示されます)。
| トリガー | ビュー | 表示内容 |
|---|---|---|
任意の PFW_search_* ツール | 検索結果 | ステータス/アートユニットのフィルターピルと Patent Center へのリンクを備えた結果テーブル |
PFW_get_patent_or_application_xml | 請求項・要約リーダー | IND/DEP 請求項の検出機能を備えた、請求項/要約のタブ切り替えビューアー |
PFW_get_document_download / PFW_get_granted_patent_documents_download | 最近のダウンロード | ダウンロードした最新 10 件の文書を、クリック可能な PDF リンク付きで表示 |
PFW_get_family | 特許ファミリー | 世代ごとのファミリーツリーと、CON/CIP/DIV の関係ラベル、Patent Center および Google Patents へのリンク |
MCP Apps を使用するには、FASTMCP_TRANSPORT=http モードが必要です。Claude Desktop は、FastMCP 4 Apps 拡張機能(fastmcp.apps からインポート)を介して、ui://pfw/ リソースを自動的に読み込みます。
📊利用可能な関数
登録済み MCP ツール名:以下の表では、ツールの表示用の名前を使用しています。
tools/listでは、サーバーに次の正確な名前で 17 個のツールが登録されています。PFW_search_applications、PFW_search_inventor、PFW_search_applications_minimal、PFW_search_applications_balanced、PFW_search_inventor_minimal、PFW_search_inventor_balanced、PFW_get_application_documents、PFW_get_patent_or_application_xml、PFW_get_granted_patent_documents_download、PFW_get_oa_rejections、PFW_get_oa_text、PFW_get_document_content_with_ocr、PFW_get_document_download、PFW_get_family、PFW_get_term_adjustment、PFW_get_guidance、および OAuth デプロイでPFW_ENABLE_USER_MANAGEMENT=trueが設定されている場合のみ利用できるpfw_manage_users。
識別子の形式
8 桁の数字だけの値は、有効な米国特許番号であると同時に、有効な出願シリアル番号でもあります(特許番号は 2024 年に 12,000,000 を超えました)。そのため、識別子を受け取るツールは、それらを単独では区別できません。解決時には、まず特許番号の検索先を、次に出願シリアル番号の検索先を照会します。また、該当するすべての応答では、identifier_resolved_as、identifier_lanes_tried が報告されます。入力に曖昧さがあった場合は、さらに identifier_ambiguous と identifier_note も報告されます。
曖昧さがなくなる形式で識別子を指定してください。
| 対象 | 指定方法 | 理由 |
|---|---|---|
| 出願シリアル番号 11/752,072 | 11/752,072 | スラッシュがあればシリアル番号だと明確になり、解決時に出願の検索先が優先されます |
| スラッシュを使えない場合の出願シリアル番号 | 11752072 と content_type='application' | 出願の検索先を強制します |
| 登録特許 7,971,071 | 7971071 または 7,971,071 | 7 桁以下の数字は特許番号なので、曖昧さがありません |
| 登録特許 11,752,072 | 11752072 または 11,752,072 | カンマのみの数字は、特許番号を優先する検索先で処理されます。登録特許にはこの方法が適しています |
したがって、11752072 だけを入力すると、特許 11,752,072(出願
16816197、「歯髄覆髄用のクイックセットセメントおよび関連する使用方法」)として扱われ、出願 11/752,072 にはなりません。認識されない content_type の値を渡すと、auto に暗黙にフォールバックするのではなく、400 エラーになります。
レスポンスマーカー(上限付きまたはページ分割されたレスポンスの表示方法)
大きすぎるツールの結果は、サーバー側では検知できないクライアント側の切り捨てエラーに置き換えられるため、レスポンスはサーバー側で上限が設定され、上限ごとに通知されます。予算は文字数の予算(len(json.dumps(...)))であり、トークン数の推定値ではありません。何も変更されない場合、4つのマーカーはすべて表示されず、上限のないレスポンスはバイト単位で同一のまま返されます。
| マーカー | 表示される条件 | 含まれる内容 |
|---|---|---|
_bounds | レスポンスが上限に収まるようにスリム化または切り捨てられた場合 | applied、reason("size" または "window")、size_chars、size_limit、stages、slimmed_fields、items_returned、items_total、note |
_window | ページ分割されたテキスト(PFW_get_document_content_with_ocr、PFW_get_oa_text) | unit(常に "char"。以下のカウンターの単位)、edges("char" または "page":ウィンドウの境界がページマーカーに揃えられたかどうか)、offset、returned、total、has_more、next_offset、note。続きは next_offset を char_offset として渡してください |
paging | すべての検索 | limit_requested、limit_applied、offset、returned、total、has_more、next_offset。サイズガードがページをトリミングした場合、実際に返された行に合わせて書き換えられるため、next_offset で行がスキップされることはありません |
limit_clamped | MAX_SEARCH_LIMIT(100)を超える件数を要求する検索 | requested、applied、note。呼び出しは上限に調整されて実行され、400エラーにはなりません。limit < 1 の場合は引き続き400エラーになります |
PFW_get_guidance("limits") では、現在の予算と同じ仕様が表示されます。
環境変数:USPTO_MAX_RESPONSE_CHARS、USPTO_MAX_CONTENT_CHARS、
USPTO_RESPONSE_BOUNDS_ENABLED(INSTALL.md を参照)。
検索関数(特化した6つのツール)
| 関数(表示名) | コンテキスト削減率 | 用途 |
|---|---|---|
PFW_search_applications(カスタム出願検索) | 可変 | ユーザー定義フィールドを使用したカスタム特許検索 |
PFW_search_inventor(カスタム発明者検索) | 可変 | 複数の戦略を用いたスマートな発明者検索 |
PFW_search_applications_minimal(最小限の出願検索) | 通常95~99% | 超高速検索(ユーザーがカスタマイズ可能な最小限のフィールド) |
PFW_search_applications_balanced(バランス型出願検索) | 通常85~95% | 発見に必要な主要フィールド(documentBagなし) |
PFW_search_inventor_minimal(最小限の発明者検索) | 通常95~99% | 超高速な発明者検索(ユーザーがカスタマイズ可能) |
PFW_search_inventor_balanced(バランス型発明者検索) | 通常85~95% | バランスの取れた発明者検索(documentBagなし) |
検索戦略
発明者検索の戦略
exact- 名前の完全一致のみfuzzy- 名前の複数の表記形式comprehensive- すべての戦略と部分一致
クエリの例
# Exact strategy
"applicationMetaData.inventorBag.inventorNameText:\"John Smith\""
# Comprehensive strategy
[
"applicationMetaData.inventorBag.inventorNameText:\"John Smith\"",
"applicationMetaData.inventorBag.inventorNameText:\"Smith, John\"",
"applicationMetaData.inventorBag.inventorNameText:Smith*",
"applicationMetaData.inventorBag.inventorNameText:*Smith*"
]
書類処理機能
| 関数(表示名) | 目的 | 要件 |
|---|---|---|
PFW_get_patent_or_application_xml(Get patent or application xml) | include_raw_xml=False(推奨)による91-99%のトークン削減と、選択的な抽出のための任意のinclude_fields指定により、LLMでの利用に適した特許/出願の構造化XMLコンテンツを取得します | USPTO_API_KEY |
PFW_get_granted_patent_documents_download(Get granted patent documents download) | 付与済み特許の完全なパッケージ(要約、図面、明細書、請求項)を、ブラウザーから安全にアクセスできるダウンロードURLとして1回の呼び出しで取得します | USPTO_API_KEY |
PFW_get_application_documents(Get application documents) | 高度なフィルタリング(document_code、direction_category)を使用して、documentBagから審査経過書類のdoc_idを取得します | USPTO_API_KEY |
PFW_get_document_content_with_ocr(PFW get document content with ocr) | 4段階のハイブリッドテキスト抽出:USPTOのフリーテキスト版 → pypdfのネイティブテキストレイヤー → Mistral OCR → Docling OCR | USPTO_API_KEY(スキャン書類の場合はMISTRAL_API_KEYまたはDOCLING_SERVE_URLも必要) |
PFW_get_document_download(PFW get document download) | ブラウザーから安全にアクセスできるダウンロードURLを取得します | USPTO_API_KEY |
PFW_get_oa_rejections(PFW get OA rejections) | USPTO ODP Office Action API — 各非最終/最終拒絶に関する拒絶の種類(§101/§102/§103/§112)と、各アクションのテキストから取得した陳述数を返します | USPTO_API_KEY |
PFW_get_oa_text(PFW get OA text) | USPTO ODP Office Action API — オフィスアクションの全文と、セクション別の抜粋を返します | USPTO_API_KEY |
PFW_get_family(PFW get family) | 正規化された継続出願ファミリーのグラフ(CON/CIP/DIVの関係タイプを持つノードとエッジ、最も早い祖先)と外国優先権の主張を返します。深さ2の探索は任意です。 | USPTO_API_KEY |
PFW_get_term_adjustment(PFW get term adjustment) | ODP /adjustmentエンドポイントから特許期間調整を取得します:合計日数、A/B/Cの各日数と出願人による遅延、および上限付きのイベント履歴。満了日は算出しません。 | USPTO_API_KEY |
PFW_get_guidance(PFW get guidance) | 推奨:コンテキスト効率に優れた、選択可能なガイダンスセクション(95-99%のトークン削減)を取得します | なし |
書類処理機能
- XML コンテンツ階層(
PFW_get_patent_or_application_xml):コンテキストを極限まで最適化した、特許/出願の構造化コンテンツ- 🎯 推奨:
include_raw_xml=False— 生の XML による約 50K トークンのオーバーヘッドを削減(トークンを 91% 削減!) - フィールドの選択的抽出(
include_fields) — 必要なフィールドのみを指定し、トークンを 95~99% 削減 - デフォルトで最適化されたレスポンス — 要約、クレーム、明細書を返します(
include_raw_xml=Falseの場合、約 5K トークン) - 超高効率モード — クレームのみ(約 1.5K トークン)、引用のみ(569 トークン)、発明者のみ(428 トークン)
- 特許から出願へのインテリジェントなマッピング — 登録済み特許に対応する出願を自動的に検索
- 自動判定 — 識別子から特許か出願かを自動的に判定
- LLM 向けに最適化された解析 — 要約、クレーム、発明者、分類、引用を必要に応じて抽出
- 2 種類の XML に対応 — PTGRXML(登録済み特許)と APPXML(出願)を処理
- データの制限 — 2001 年 1 月 1 日以降に出願された特許/出願のみ利用可能
- 🎯 推奨:
- 特許書類一式階層(
PFW_get_granted_patent_documents_download):登録済み特許を 1 回の呼び出しで取得- 一括取得の利便性 — 要約、図面、明細書、クレームを 1 回の呼び出しで取得(個別の 4 回の呼び出しを置き換えます)
- 構成要素のインテリジェントな選択 — 原出願時と登録時のどちらのクレームを使うかを自動選択し、図面も任意で取得
- 整理されたダウンロードリンク — すべての構成要素について、プロキシ経由のダウンロード URL を含む構造化メタデータを返します
- 弁護士に最適 — デューデリジェンス、訴訟準備、ポートフォリオレビュー、紙媒体の作成に最適です
- 効率的なワークフロー — 手作業で書類を探す代わりに、「特許をください」というリクエストに使用できます
- 部分的な取得にも対応 — 4 つの構成要素のうち 3 つ以上が利用可能であれば成功し、不足項目を明確に示します
- LLM 向けに最適化されたガイダンス — クリック可能な Markdown リンクを作成するための書式設定指示を内蔵
- 総ページ数 — 計画を立てやすいよう、書類の総ページ数を事前に表示します(通常 40~80 ページ)
- 審査書類階層(
PFW_get_application_documents):documentBag から対象を絞って書類にアクセス- トークン効率に優れた設計 — 必要なときだけ審査書類を取得します(検索結果の肥大化なし)
- 高度なフィルタリング —
document_code(NOA、CTFR、892 など)およびdirection_category(INCOMING/OUTGOING/INTERNAL)で絞り込み - コンテキストの削減 — 訴訟が多い出願で 98.6% の削減を実現(200 件以上の書類 → 1~2 件)
- スマートな書類フィルタリング — 主要な書類(ABST、CLM、SPEC、NOA など)に絞り込み
- ワークフローの最適化 — 発見検索の後、特定の出願に対して使用します
- 書類に関するガイダンス — インテリジェントな要約とダウンロードの推奨を提供
- 検索時の documentBag を置き換え — 発見ワークフローでトークンが 100 倍に膨れ上がるのを防止
- ✨ インテリジェント抽出階層(
PFW_get_document_content_with_ocr):自動最適化された抽出- Tier 0 — テキスト形式のバリエーション(即時、OCR 不要):USPTO API が PDF レンダリングと併せて提供する
.docx、xmlarchive、またはアップロード時のままの PDF(USPTO が作成した書類、および電子出願されたクレーム/意見書/IDS)。各バリエーションは、指定された出願番号と照合されます - Tier 1 — pypdf(即時):テキストベースの PDF に対応します。テキストレイヤーがすべて空の場合は、成功ではなく失敗として報告します
- Tier 2 — Mistral OCR:スキャンされた USPTO 書類に対応します。
MISTRAL_API_KEYが必要です(任意) - Tier 3 — Docling OCR:
DOCLING_SERVE_URL経由のセルフホスト型 EasyOCR。Mistral と同じスキャン済み書類に対応し、Mistral の後段としてだけでなく、Mistral の代わりに設定することもできます - 階層のエスカレーション — ネイティブのテキストレイヤーが存在しない、または使用できない場合にのみ OCR 階層を実行します。認証情報またはエンドポイントが設定されていない階層はスキップされます
- 透明性のある報告 — すべてのレスポンスで
extraction_methodを返します - 統一されたインターフェース — すべての書類タイプを 1 つのツールで処理します(ツール選択の混乱を解消)
- Tier 0 — テキスト形式のバリエーション(即時、OCR 不要):USPTO API が PDF レンダリングと併せて提供する
- ブラウザーダウンロード階層(
PFW_get_document_download):安全なプロキシ経由のダウンロード- クリックしてダウンロードできる URL。どのブラウザーでも直接利用できます
- API キーのセキュリティ — USPTO API の認証情報がチャット履歴やブラウザーに漏れることはありません
- レート制限への準拠 — USPTO の 10 秒あたり 5 件のダウンロード制限を自動的に適用します
- わかりやすいファイル名 — PFW と FPD の両方の書類に、専門的で読みやすいファイル名を付けます:
- PFW:
APP-{app_number}_PAT-{patent_number}_{invention_title}_{type}.pdf - FPD:
PET-{date}_APP-{app}_PAT-{patent}_{description}.pdf
- PFW:
- ハイブリッドサーバーアーキテクチャ — HTTP プロキシが MCP サーバーと並行して動作します
- TCP ポートの調整 — HTTP プロキシの TCP ポートは環境変数で変更できます
- 🆕 集約型プロキシハブ — PFW プロキシ(ポート 8080)が FPD MCP からの書類登録を受け付け、USPTO MCP 間で統一されたダウンロード体験を提供するようになりました。(将来的に PTAB の集約型プロキシハブを予定)
- デフォルトでは CORS を localhost に制限 — プロキシと MCP App は
localhostからのリクエストのみを受け付けます。リバースプロキシまたは MCP ゲートウェイへのデプロイでは、CORS_EXTRA_ORIGINとMCP_APP_EXTRA_DOMAINSの環境変数で設定できます。INSTALL.md を参照してください
PFW_get_document_download および PFW_get_granted_patent_documents_download で使用される拡張ファイル名形式
システムは、アプリケーションのメタデータを使用して、説明的なファイル名を自動生成します。
PFW 文書 — 登録特許の場合:
APP-11752072_PAT-7971071_INTEGRATED_DELIVERY_AND_PROTECTION_ABST.pdf
APP-14171705_PAT-9049188_HYBRID_DEVICE_HAVING_A_PERSONAL_DIGITAL_CLM.pdf
PFW 文書 — 係属中の出願の場合:
APP-18462633_SURFACE_DENSITY_DEVICE_CALIBRATION_APPARATU_SPEC.pdf
APP-18823722_BACK_CONTACT_SOLAR_CELL_AND_METHOD_FOR_PREP_DRW.pdf
FPD 文書 — 申立てに関する決定の場合:
PET-2025-09-03_APP-13632078_PAT-8803593_PATENT_PROSECUTION_HIGHWAY_DECISION.pdf
PET-2024-05-15_APP-17414168_PAT-12252554_REVIVAL_PETITION_DECISION.pdf
生成されるファイル名に含まれる出願番号は、USPTO API が返す数字のみの値(
applicationNumberText)です。ツールに出願シリアル番号を入力する場合は、スラッシュとカンマを使った形式(11/752,072)を使用してください。上記の識別子の形式を参照してください。
機能:
- APP- プレフィックスで出願番号を明確に識別
- PAT- プレフィックスで登録特許番号を表示(利用可能な場合)
- PET- プレフィックスで決定日を含む FPD 申立て文書を表示
- 可読性を高める 40 文字のタイトル(PFW)、または 40 文字の説明(FPD)
- 文書種別コード(PFW:ABST、CLM、SPEC、DRW、FPD:DECISION など)
- 時系列順の並べ替え — FPD のファイル名は日付で始まるため、タイムラインを簡単に確認できます
- クロスプラットフォームで安全な文字と長さの制限
- 特許弁護士にとってポートフォリオ管理しやすい構成
LLM ガイダンス関数
| 関数(表示名) | 目的 | 要件 |
|---|---|---|
PFW_get_guidance(PFW ガイダンスを取得) | コンテキスト効率に優れた選択的ガイダンス | なし |
コンテキスト効率に優れたガイダンスシステム
新機能:PFW_get_guidance ツール — ガイダンスのセクションを選択できるようにすることで、MCP リソースの可視性に関する問題を解決します。
🎯 クイックリファレンス表 — 呼び出すセクションを確認できます。
- 🔍 「発明者/企業/技術部門で特許を検索」→
PFW_get_guidance("fields") - 📄 「特許の完全なパッケージ/文書を取得」→
PFW_get_guidance("documents") - 🔖 「文書コード(NOA、CTFR、892 など)を解読」→
PFW_get_guidance("document_codes") - 🤝 「IPR と審査手続きのパターンを調査」→
PFW_get_guidance("workflows_ptab") - 🚩 「申立ての危険信号と審査手続きを分析」→
PFW_get_guidance("workflows_fpd") - 📊 「審査官の行動を引用情報から分析」→
PFW_get_guidance("workflows_citations") - 🧠 「法的枠組み(§101、§103、§112)に関するドメインベースの RAG」→
PFW_get_guidance("workflows_pinecone") - 🏢 「企業の包括的なデューデリジェンス」→
PFW_get_guidance("workflows_complete") - ⚙️ 「利便性の高いパラメーター検索」→
PFW_get_guidance("tools") - ❌ 「検索エラーまたはダウンロードの問題」→
PFW_get_guidance("errors") - ⚡ 「抽出とコンテキストの使用を最適化」→
PFW_get_guidance("cost")
スマートフィールドマッピング
複雑な API フィールド名を、ユーザーにとって使いやすい名称に変換します。
# User-friendly (automatically mapped)
fields = [
"applicationNumberText", # Direct passthrough
"inventionTitle", # applicationMetaData.inventionTitle
"patentNumber", # applicationMetaData.patentNumber
"filingDate", # applicationMetaData.filingDate
"parentPatentNumber" # parentContinuityBag.parentPatentNumber
]
# Advanced API paths (still supported)
fields = [
"applicationMetaData.inventionTitle",
"applicationMetaData.examinerNameText",
"parentContinuityBag.parentApplicationNumberText"
]
サポートされているフィールドマッピング
| ユーザー向けの名称 | 対応する API フィールド |
|---|---|
inventionTitle | applicationMetaData.inventionTitle |
patentNumber | applicationMetaData.patentNumber |
filingDate | applicationMetaData.filingDate |
applicationStatusDescriptionText | applicationMetaData.applicationStatusDescriptionText |
firstInventorName | applicationMetaData.firstInventorName |
parentPatentNumber | parentContinuityBag.parentPatentNumber |
docketNumber | applicationMetaData.docketNumber |
30 以上のフィールドを含む完全なマッピングは、src/patent_filewrapper_mcp/api/helpers.py で確認できます。
💻 使用例と統合ワークフロー
以下を含む包括的な使用例については、
- 利便性の高いパラメーター検索(技術部門、審査官、出願人、日付)
- 高度な文書フィルタリング(文書コード、方向カテゴリ、コンテキストの削減)
- 複数の MCP をまたいだ統合ワークフロー(PFW + PTAB + FPD + Pinecone)
- ライフサイクル全体のデューデリジェンスの例
- 訴訟調査のパターン
- 技術部門の品質評価
- 抽出とコンテキスト効率化の戦略
詳しくは、詳細な USAGE_EXAMPLES.md ドキュメントを参照してください。
🔧 フィールドのカスタマイズ
MCP サーバーは、コンテキストを最適に削減できるよう、YAML 設定によるユーザー独自のフィールドセットに対応しています。コードを変更せずにフィールドセットをカスタマイズできます。
設定ファイル: field_configs.yaml(プロジェクトルートにあります)
段階的なワークフロー戦略、トークンの最適化、高度なフィールド選択パターンなど、カスタマイズの詳細については、CUSTOMIZATION.md を参照してください。
🔗 MCP 間の連携
この MCP は、包括的な特許ライフサイクル分析を実現するため、ほかの 3 つの USPTO MCP とシームレスに連携するよう設計されています。
関連する USPTO MCP サーバー
| MCP サーバー | 目的 | GitHub リポジトリ |
|---|---|---|
| USPTO Patent File Wrapper (PFW) | 審査経過と文書 | uspto_pfw_mcp |
| USPTO Patent Trial and Appeal Board (PTAB) | 特許審判部の手続 | uspto_ptab_mcp |
| USPTO Enriched Citation | 特定の特許出願に関するオフィスアクションで引用された参考文献や先行技術に関する情報です。USPTO Enriched Citation API v3 を使用します。 | uspto_enriched_citation_mcp |
| USPTO Final Petition Decisions (FPD) | 最終請願決定 | uspto_fpd_mcp |
| Pinecone Assistant MCP | AI を活用したチャットと引用機能を備えた特許法ナレッジベース(MPEP、審査ガイダンス)— API キー 1 つ、無料枠には制限あり | pinecone_assistant_mcp |
| Pinecone RAG MCP | カスタム埋め込みを使用する特許法ナレッジベース(MPEP、審査ガイダンス)— Pinecone と埋め込みモデルが必要、無料枠は毎月リセット | pinecone_rag_mcp |
連携の概要
Patent File Wrapper (PFW) MCP は、審査経過と文書へのアクセスを提供し、特許調査の基盤となります。ほかの MCP と組み合わせることで、次のことが可能になります。
- PFW + PTAB:訴訟調査のため、PTAB の手続と審査経過を相互参照する
- PFW + Enriched Citations:AI を活用した審査官による引用文献の分析と先行技術調査のパターン分析
- PFW + FPD:審査中の請願履歴と手続上の問題を把握する
- PFW + FPD + PTAB:出願から付与後の異議申立てまで、特許ライフサイクル全体を追跡する
- PFW + Pinecone(Assistant または RAG):審査経過の全書類をコンテキストに取り込む前に、MPEP のガイダンスを調査する
主要な統合パターン
相互参照するフィールド:
applicationNumberText- PTAB 手続きと PFW の審査を結び付ける主キーgroupArtUnitNumber- すべての MCP にわたる技術分野の分析examinerNameText- 審査官の行動パターンと品質評価firstApplicantName/inventorBag- MCP 間での当事者の照合
段階的なワークフロー:
- 検索(PFW):利便性の高いパラメーターを使った最小限の検索で、出願・特許を見つけます
- 引用分析(Enriched Citations):審査官の引用パターンと先行技術文献を分析します
- 申立ての確認(FPD):審査手続きの履歴を確認します
- 異議申立ての評価(PTAB):特許付与後の異議申立てを確認します
- ナレッジ調査(Pinecone):利用可能な場合は、MPEP のガイダンスを調査します(Assistant MCP:
assistant_context/RAG MCP:semantic_search) - 文書分析(PFW):対象を絞った審査関連文書を抽出します
統合ワークフロー、相互参照の例、ユースケースの全容については、USAGE_EXAMPLES.md を参照してください。
📈パフォーマンス比較
| 方法 | 応答サイズ | コンテキスト使用量 | 機能 |
|---|---|---|---|
| 直接 curl | ~100KB+ | 高 | 生の API アクセス |
| MCP バランス | ~5KB | 中 | 主要フィールド+マッピング |
| MCP 最小限 | ~1KB | 非常に低 | 必要なデータのみ |
🧪テスト
ステップ 1:手動のエンドツーエンドテスト(ここから開始)
この MCP サーバーに接続した状態で Claude Desktop を開き、tests/TEST_SUITE.md のプロンプトを貼り付けます。これにより、既知の期待される出力と照合しながら、稼働中の USPTO API に対して、対象となる 12 個のツールを使った 21 個のテスト(テスト 0 からテスト 20)が実行されます。コードは不要です。PFW_get_family、PFW_get_term_adjustment、PFW_search_inventor、PFW_search_inventor_balanced はテスト対象ではありません。
初期設定後、アップグレード後、またはツールのロジックを変更した後に実行してください。
ステップ 2:開発者向けテスト
# Full test suite (pytest, asyncio_mode=auto)
# test_unified_key_management.py is excluded because it overwrites the real
# secure-storage keys mid-test — only run it deliberately.
uv run pytest --ignore=tests/test_unified_key_management.py
# If no download proxy is running on port 8080, skip the proxy integration test:
SKIP_PROXY_TESTS=1 uv run pytest --ignore=tests/test_unified_key_management.py
# Single-file smoke test
uv run python tests/test_fields_fix.py
プロキシサーバー、OCR 抽出、API キー設定を含む開発者向けテストスイートの全容については、テストガイド を参照してください。
📁プロジェクト構成
uspto_pfw_mcp/
├── field_configs.yaml # Root-level field customization
├── launcher.py # Entry point launcher
├── .security/ # Security scanning components
│ ├── patent_prompt_injection_detector.py # Enhanced prompt injection detection
│ ├── check_prompt_injections.py # Standalone scanning script with baseline support
│ └── .prompt_injections.baseline # Baseline tracking for prompt injection findings
├── src/
│ └── patent_filewrapper_mcp/
│ ├── main.py # FastMCP server assembly (instructions, resources, tool registration)
│ ├── server_bootstrap.py # Entry point, transport selection, proxy lifecycle
│ ├── fastmcp_compat.py # FastMCP 4 / MCP SDK 2.x shims (defer_loading, tool titles)
│ ├── middleware.py # Streamable-HTTP probe shim and x-api-key gate
│ ├── guidance.py # PFW_get_guidance section bodies
│ ├── app_uris.py # ui://pfw/ MCP App resource URIs
│ ├── client_registry.py # Shared USPTO API client (lazy init)
│ ├── __init__.py
│ ├── __main__.py
│ ├── exceptions.py
│ ├── shared_secure_storage.py # Cross-platform secure API key storage (DPAPI / Fernet)
│ ├── config/
│ │ ├── field_manager.py # Configuration management
│ │ ├── tool_reflections.py # Migration notices (guidance moved to PFW_get_guidance)
│ │ └── log_config.py # 🆕 Logging configuration with file-based rotation
│ ├── api/
│ │ ├── enhanced_client.py # 4-tier extraction (free-text variants → pypdf → Mistral → Docling)
│ │ ├── docling_client.py # docling-serve REST client (self-hosted OCR via DOCLING_SERVE_URL)
│ │ ├── office_action_client.py # USPTO ODP Office Action API (search + full text)
│ │ ├── field_constants.py # Field constant definitions
│ │ └── helpers.py # Field mapping & utilities
│ ├── models/
│ │ ├── constants.py # System constants
│ │ └── search_params.py # Search parameter models
│ ├── prompts/ # AI prompt templates
│ │ ├── patent_search.py
│ │ ├── patent_explanation_for_attorneys.py
│ │ ├── patent_invalidity_analysis_defense_Pinecone_PTAB_FPD_Citations.py
│ │ ├── litigation_research_setup_PTAB_FPD.py
│ │ ├── technology_landscape_mapping_PTAB.py
│ │ ├── art_unit_quality_assessment_FPD.py
│ │ ├── complete_patent_package_retrieval_PTAB_FPD.py
│ │ ├── document_filtering_assistant.py
│ │ ├── inventor_portfolio_analysis.py
│ │ ├── examiner_behavior_intelligence_CITATION.py
│ │ └── prior_art_analysis_CITATION.py
│ ├── proxy/
│ │ ├── server.py # HTTP proxy for secure downloads
│ │ ├── rate_limiter.py # USPTO rate limiting compliance
│ │ ├── secure_link_cache.py
│ │ ├── models.py
│ │ ├── fpd_document_store.py
│ │ └── ptab_document_store.py
│ ├── reflections/ # Reflection system (legacy)
│ │ ├── base_reflection.py
│ │ ├── pfw_reflections.py
│ │ └── reflection_manager.py
│ ├── services/
│ │ └── ocr_service.py # OCR quality detection and processing
│ ├── tools/ # MCP tool registration (search, documents, OA, guidance, admin)
│ ├── auth/ # Optional OAuth 2.1 sign-in (PFW_AUTH_MODE=oauth)
│ ├── ui/ # MCP App HTML views (ui://pfw/ resources)
│ ├── shared/
│ │ ├── injection_scan.py # Runtime detection-only injection scanner + provenance note
│ │ ├── internal_auth.py # Shared authentication
│ │ ├── log_sanitizer.py # Automatic sensitive data sanitization
│ │ ├── safe_logger.py # Safe logger with auto-sanitization
│ │ ├── response_bounds.py # Shared response-size guard (_bounds / _window)
│ │ ├── fernet_key_store.py
│ │ └── uspto_shared_rate_limiter.py # Cross-process shared USPTO rate limiter
│ ├── util/
│ │ ├── database.py
│ │ ├── dpapi_utils.py
│ │ ├── error_handlers.py
│ │ ├── identifier_normalization.py
│ │ ├── identifier_resolution.py # Patent-vs-application lane resolution
│ │ ├── linux_secret_store.py
│ │ ├── input_processing.py
│ │ ├── logging.py # Enhanced logging utilities
│ │ ├── package_manager.py
│ │ └── security_logger.py
│ └── json/
│ └── search_query.json # Sample JSON structures
├── 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
├── tests/ # Current test files (see tests/README.md for the full list)
│ ├── README.md # Testing documentation
│ ├── TEST_SUITE.md # Manual end-to-end suite against the live USPTO API
│ ├── conftest.py
│ ├── test_fields_fix.py # Core functionality test
│ ├── test_proxy_simple.py # Proxy server test
│ ├── test_quality_detection.py # Extraction quality detection test
│ ├── test_unified_key_management.py # Secure key storage test (excluded by default)
│ ├── test_identifier_resolution_order.py # Resolve-then-validate order guard
│ ├── test_response_bounds.py # Shared response-size guard
│ ├── test_download.py
│ ├── test_enhanced_filename.py
│ ├── test_fpd_integration.py
│ ├── test_granted_patent_documents_download.py
│ ├── test_injection_scan.py # Runtime injection scanner + tool wiring tests
│ ├── test_mistral_key_logic.py
│ ├── test_optional_mistral.py
│ ├── test_placeholder_detection.py
│ ├── test_ptab_integration.py
│ ├── test_resilience_features.py
│ ├── test_tool_reflections.py
│ └── test_utils.py
├── reference/
│ ├── README.md
│ ├── Document_Descriptions_List.csv
│ └── PatentFileWrapper_swagger.yaml
├── scripts/
│ ├── manage_mcp_users.py # Bootstrap and manage the OAuth mcp_users table
│ └── rotate_internal_auth_secret.py # Rolling rotation for INTERNAL_AUTH_SECRET
├── docs/
│ └── CONTENT_PROVENANCE.md # Retrieved-text provenance and injection-annotation posture
├── pyproject.toml # Package configuration
├── uv.lock # uv lockfile
├── 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
├── API_KEY_GUIDE.md # USPTO and optional Mistral key setup
├── SSO_SETUP.md # OAuth 2.1 sign-in (Google / Entra ID)
├── SECURITY_GUIDELINES.md # Security best practices
├── SECURITY_SCANNING.md # Automated secret detection guide
└── .env.example # Every environment variable, commented
🔍トラブルシューティング
よくある問題
API キーの問題
- Claude Desktop の場合: 設定ファイル内の API キーで十分です
- テストスクリプトの場合: 環境変数を設定する必要があります
USPTO API キーの設定:
- Windows コマンドプロンプト:
set USPTO_API_KEY=your_key - Windows PowerShell:
$env:USPTO_API_KEY="your_key" - Linux/macOS:
export USPTO_API_KEY=your_key
Mistral API キーの設定(OCR 用):
- Windows コマンドプロンプト:
set MISTRAL_API_KEY=your_key - Windows PowerShell:
$env:MISTRAL_API_KEY="your_key" - Linux/macOS:
export MISTRAL_API_KEY=your_key
uv と pip の問題
- uv の利点: 依存関係の解決に優れ、インストールが高速です
- 混在インストール:
uv syncとpip install -e .の両方を使用できます - テスト: uv で管理するプロジェクトでは、
uv runを先頭に付けて実行します
フィールドからデータが返されない
- 原因: フィールド名がマッピングに含まれていません
- 解決策:
helpers.pyのfield_mappingに追加するか、API の完全なフィールド名を使用します
認証エラー
- 原因: API キーがないか、無効です
- 解決策:
USPTO_API_KEY環境変数または Claude Desktop の設定を確認します
MCP サーバーが起動しない
- 原因: 依存関係が不足しているか、パスが正しくありません
- 解決策: セットアップスクリプトを再実行し、すべての PowerShell ウィンドウを再起動し、Claude Desktop(またはその他の MCP クライアント)を再起動して、設定を確認します
- 問題が解決しない場合: MCP のインストールをリセットします(下記の「MCP のインストールをリセットする」を参照)
仮想環境の問題(Windows のセットアップ)
- 症状:
windows_setup.ps1の実行中に「No pyvenv.cfg file」エラーが発生する - 原因: Claude Desktop の実行中は
.venvファイルがロックされるため、仮想環境を適切に作成できません - 解決方法:
- セットアップスクリプトを実行する前に、Claude Desktop を完全に終了します
.venvフォルダーを削除します:Remove-Item ./.venv -Force -Recurse -ErrorAction SilentlyContinue.\deploy\windows_setup.ps1を再度実行します
MCP のインストールをリセットする
Windows Quick インストーラーを再度実行するために MCP のインストールを完全にリセットする必要がある場合:
# Navigate to the project directory
cd C:\Users\YOUR_USERNAME\uspto_pfw_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
Remove-Item ./proxy_link_cache.db -Force -ErrorAction SilentlyContinue
Remove-Item ./fpd_documents.db -Force -ErrorAction SilentlyContinue
Remove-Item ./ptab_documents.db -Force -ErrorAction SilentlyContinue
# Now you can run the setup script again
.\deploy\windows_setup.ps1
Linux/macOS のリセット:
# Navigate to the project directory
cd ~/uspto_pfw_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_link_cache.db fpd_documents.db ptab_documents.db
# Run setup script again
./deploy/linux_setup.sh
ヘルプの利用
- テストスクリプトで動作する例を確認します
src/patent_filewrapper_mcp/api/helpers.pyのフィールドマッピングを確認します- Claude Desktop の設定が INSTALL.md に記載されているテンプレートと一致していることを確認します
🛡️ セキュリティと本番環境への対応
強化されたエラー処理
- 指数バックオフによるリトライロジック - 一時的な障害に対して自動的に再試行します(1秒、2秒、4秒の間隔で3回)
- スマートなリトライ戦略 - 認証エラーやクライアントエラー(4xx)は再試行しません
- 構造化ログ - リクエスト ID を追跡し、デバッグと監視を改善します
- 本番環境レベルの回復力 - タイムアウト、ネットワークの問題、API のレート制限に適切に対処します
セキュリティ機能
- 環境変数による API キー管理 - コードベース内に認証情報をハードコードしません
- 安全なテストパターン - テストファイルではフォールバック付きの環境変数を使用します
- 包括的な .gitignore - 認証情報の誤ったコミットを防ぎます
- セキュリティガイドライン - 安全な開発手法に関する完全なドキュメントを提供します
- localhost に限定した CORS - プロキシと MCP App は、デフォルトでクロスオリジンリクエストを拒否します。
CORS_EXTRA_ORIGIN/MCP_APP_EXTRA_DOMAINSにより、リバースプロキシ/ゲートウェイ向けに設定できます(INSTALL.md を参照) - 自動シークレットスキャン - CI/CD とプレコミットフックにより、API キーの漏えいを防止します(detect-secrets)
- 20 種類以上のシークレットを検出 - AWS キー、GitHub トークン、JWT、秘密鍵、API キーなどを検出します
- ベースライン管理 - 既知のプレースホルダーを追跡しながら、実際のシークレットを検出します
- 🆕 自動サニタイズ機能付き SafeLogger - すべてのログメッセージ内の API キー、JWT、パスワード、IP アドレス、メールアドレスを自動的にマスキングします(CWE-532)
- 🆕 ローテーション対応のファイルベースロギング - 10MB ごとにローテーションし、5/10 個のバックアップを保持する永続的な監査証跡を提供します(CWE-778)
- 🆕 プロンプトインジェクションのベースラインシステム - 既知の検出結果を追跡し、SHA256 フィンガープリントを使用して新しいパターンのみを警告します
- プロンプトインジェクションの検出 - 70 種類以上のパターン検出システムで、AI 固有の攻撃から保護します
- 特許関連のセキュリティ - USPTO API のバイパスやデータ抽出の試みを検出するカスタムパターンを使用します
- 強化されたフィルタリング - 包括的な脅威カバレッジを維持しながら、誤検出を最小限に抑えます
コンテンツの出所とインジェクションの注釈
取得した審査記録のテキストは、そのまま提供されます。法的テキストの忠実な再現がこの製品の価値であるため、削除や書き換えは行いません。代わりに、サーバーがラベル付けと注釈を行います。
provenance_note— テキストを返すすべてのツール (PFW_get_document_content_with_ocr、PFW_get_oa_text、PFW_get_patent_or_application_xml)は、取得したファイルラッパーのテキストが指示ではなく引用データであること、また出願人または審査官が作成した評価は、各作成者の見解として扱うことを示す、機械可読な注記を付加します。injection_scan— 検出のみを行うランタイムスキャナー (src/patent_filewrapper_mcp/shared/injection_scan.py)は、返される OCR 出力、拒絶理由通知のテキスト、XML コンテンツを検査し、指示の上書き、プロンプトの抽出、エンコーディングの回避を試みる表現と、不可視の Unicode の不審な密度を検出します。検出された場合、レスポンスには、フラグが立った文書と見つかったパターンの種類を示す注釈が追加されます。該当したテキスト自体は含まれません。コンテンツに問題がなければ、このキーは一切含まれません。- サーバーの指示でも同じ方針を定めているため、利用するモデルは、取得した文書内の指示のような表現を、従うべき指示ではなく、報告対象の引用コンテンツとして扱います。
このランタイム層は、.security/ のコミット時コードベーススキャナーを補完するものです(SECURITY_SCANNING.md を参照)。詳細な説明は次のとおりです。
docs/CONTENT_PROVENANCE.md。
リクエストの追跡とデバッグ
すべての API リクエストには、関連付けのための一意なリクエスト ID(8 文字の UUID)が含まれます。
[a1b2c3d4] Starting GET request to applications/search
[a1b2c3d4] Request successful on attempt 1
ドキュメント
SECURITY_GUIDELINES.md- セキュリティのベストプラクティスを網羅したガイドSECURITY_SCANNING.md- シークレットの自動検出と防止に関するガイドtests/README.md- API キーの設定を含む、テストの完全ガイド- サポートをより円滑にするため、リクエスト ID を含むエラーメッセージを強化
📝貢献
- リポジトリをフォークします
- フィーチャーブランチを作成します
- 新しい機能のテストを追加します
- すべてのテストが成功することを確認します
- プルリクエストを送信します
📄ライセンス
MIT ライセンス
⚠️ 免責事項
本ソフトウェアは「現状有姿」で提供され、いかなる種類の保証もありません。
独立プロジェクトに関するお知らせ:これは個人による独立したプロジェクトであり、米国特許商標庁(USPTO)と提携、承認、または支援を受けているものではありません。
作者は、明示的または黙示的を問わず、以下を含みますがこれらに限定されない、いかなる表明も保証も行いません。
- 正確性とAI生成コンテンツ:データの正確性、完全性、またはいかなる目的への適合性も保証されません。ユーザーは、テキスト、データ、分析などを含むもののこれらに限定されない、人工知能(AI)コンポーネントによって生成または支援された出力が、不正確、不完全、架空の内容を含む、またはAIモデルによる「ハルシネーション」(作話)を表している可能性があることに特にご注意ください。
- 可用性:USPTO APIおよびMistral APIへの依存により、サービスが中断する場合があります。
- 法令遵守:ユーザーは、本ソフトウェアの使用、およびその出力に基づいて行う提出や措置が、以下を含みますがこれらに限定されない、適用されるすべての法律、規制、ポリシーを厳格に遵守することについて、単独で責任を負います。
- 最新の米国特許商標庁での手続きにおける人工知能ベースのツールの使用に関するガイダンス(USPTOガイダンス)。
- USPTOの誠実義務(例:37 CFR 1.56、11.303)。これには、重要な情報を開示し、誤りを訂正する義務が含まれます。
- USPTOの署名要件(例:37 CFR 1.4(d)、2.193(c)、11.18)。これらは、人による確認と合理的な調査を証明するものです。
- 発明者に関するすべての規則(例:各請求対象の発明には、少なくとも1人の人間の発明者が必要です)。
- 法律上の助言:このツールはデータへのアクセスと処理のみを提供し、法律上の助言は行いません。すべての結果は、資格を有する法律専門家が独自に検証し、批判的に分析し、専門的な判断を行う必要があります。
- 商用利用:ユーザーは、商用利用に関するUSPTOおよびMistralの規約を確認する必要があります。
- 機密保持とデータセキュリティ:作者は、クライアントの機密情報や技術情報を含め、ユーザーが本ソフトウェアのAIコンポーネントに入力したデータ、またはMistral APIなどのサードパーティAIサービスに送信したデータの機密性やセキュリティについて、いかなる表明も行いません。ユーザーは、統合されたサードパーティAIサービスのプライバシーポリシー、データ保持の慣行、セキュリティ対策を理解し、受け入れる責任を負います。
- 外国出願ライセンスと輸出管理:ユーザーは、特に技術情報などのデータを本ソフトウェアのAIコンポーネントを通じて入力または処理することが、米国の外国出願ライセンス要件(例:35 U.S.C. 184、37 CFR Part 5)や輸出管理規制(例:EAR、ITAR)に違反しないようにする責任を単独で負います。これには、外国人がそのようなデータにアクセスする場合や、AIサーバーが米国外に設置されている場合に、「みなし輸出」が発生する可能性を認識することも含まれます。
**責任の制限:**いかなる場合も、損害が発生する可能性について知らされていたとしても、作者は、本ソフトウェアの使用に起因する直接的、間接的、付随的、特別、または結果的な損害について責任を負いません。
ユーザーの責任:USPTO へのすべての提出書類および実施するすべての行為の完全性とコンプライアンスについては、ユーザーが単独で責任を負います。
- 独立した検証:本ソフトウェア内で AI が生成または支援したすべての出力、分析、コンテンツは、USPTO またはその他の機関に依拠したり、行動を起こしたり、提出したりする前に、人間が十分に確認し、独立して検証したうえで修正する必要があります。これには、事実に関する主張、法律上の主張、引用、証拠による裏付け、技術情報の開示が含まれます。
- 誠実義務および善意義務:発明者に関する情報や誤りなどの重要な情報を開示し、記録上の不正確な情報を速やかに訂正することを含め、USPTO に対する誠実義務および善意義務を遵守してください。
- 署名および証明:37 CFR 11.18(b) で求められるとおり、USPTO に提出するすべての書簡には、内容を自ら確認し、合理的な調査を行ったことを証明するため、本人が署名するか、自身の署名を挿入する必要があります。AI ツールは書類に署名できず、必要な人間による調査を行うこともできません。
- 機密情報:基盤となる AI プロバイダーのデータ取り扱い方針を十分に理解し、クライアントから完全な同意を得ていない限り、本ソフトウェアの AI コンポーネントに機密情報、専有情報、またはクライアントの機微情報を入力しないでください。不注意または無許可の情報開示を防ぐ責任はユーザーにあります。
- 輸出管理:機微な技術データを使用する場合は、外国出願ライセンスおよび輸出管理に関するすべての規制を把握し、遵守してください。
- サービスのコンプライアンス:USPTO の利用規約(USPTO ウェブサイトの利用規約、USPTO.gov アカウントポリシー、自動データマイニングの制限など)および Mistral の利用規約をすべて遵守してください。AI ツールは USPTO.gov アカウントを取得できません。
- セキュリティ:API 認証情報およびクライアント情報を安全に取り扱ってください。
- テスト:本番環境で使用する前に、十分にテストしてください。
- 専門的判断:本ツールは補助的なものであり、ユーザー自身の専門的な判断や専門知識に代わるものではありません。
本ソフトウェアを使用することで、ユーザーは本免責事項を読んだことを認め、ソフトウェアを自己責任で使用し、すべての結果および関連する法的・倫理的義務の遵守について全責任を負うことに同意するものとします。
法律専門家への注意:本ツールは法律実務で一般的に使用される特許調査ツールにアクセスできますが、データ取得および AI 支援による処理のみを行うシステムです。すべての結果について独立した検証と専門的な批判的分析が必要であり、資格を有する法律顧問に相談することや、USPTO の AI 利用に関するガイダンスで定められた個人の専門的判断および義務を果たすことに代わるものではありません。
🔗関連リンク
- USPTO オープンデータポータル
- USPTO Enriched Citation API v3
- USPTO Patent Trial and Appeal Board(PTAB)API v2
- Model Context Protocol
- Claude
- uv パッケージマネージャー
- Mistral OCR
💝 このプロジェクトを支援する
この USPTO Patent File Wrapper MCP Server が役に立った場合は、ぜひ開発へのご支援をご検討ください!このプロジェクトは、特許コミュニティに包括的で本番環境に対応できるツールを提供するため、私が個人の時間を長時間費やして開発しました。
皆さまのご支援は、特許コミュニティのすべての人が利用できるこのオープンソースツールの維持と改善に役立ちます。ありがとうございます!
謝辞
- Patent File Wrapper API を提供している USPTO
- MCP の仕様を定めている Model Context Protocol
- Claude Code:このプロジェクト全体を通じて、優れた開発支援、アーキテクチャに関する助言、ドキュメント作成、PowerShell による自動化、テストの整理、包括的なコード開発を提供してくれました
- Claude Desktop:追加の開発支援とテスト支援を提供してくれました
ご質問はありますか? クロスプラットフォームでのインストール手順については INSTALL.md をご覧いただくか、テストスクリプトで動作例をご確認ください。
OAuth サインイン(任意)
PFW_AUTH_MODE=oauth を設定すると、Google と Microsoft のサインイン(動的クライアント登録を使用する OAuth 2.1)で HTTP エンドポイントを保護できます。Claude.ai / Claude Desktop のカスタムコネクターとして動作します。アクセスはローカルの SQLite ユーザーリストで制御されます。admin ロールでは、ユーザー管理ツール pfw_manage_users とその MCP App パネルが利用可能になります。このツールは PFW_ENABLE_USER_MANAGEMENT=true の場合にのみ登録されます(デフォルトではオフです。STDIO および OAuth 以外の HTTP では、代わりに scripts/manage_mcp_users.py を使用してください)。デフォルト(none)と STDIO の動作に変更はありません。詳細な手順については SSO_SETUP.md をご覧ください。
USPTO の共有レート制限(複数 MCP のデプロイ)
USPTO MCP(Citations、PFW、PTAB、FPD)4 つすべてを、同じマシン上の HTTP コンテナーとして実行し、1 つの USPTO API キーで複数のユーザーにサービスを提供している場合、各サーバーのプロセス内リミッターでは、他の 3 つのプロセスの状況を把握できません。USPTO が公表している制限はプロセス単位ではなくキー単位(バースト=1、呼び出しの種類に応じて毎秒 4~15 リクエスト、さらに週単位のクォータ)です。4 つすべてのコンテナーで同じバインドマウントディレクトリを指定すると、プロセス間で共有される FIFO キュー 1 つ、上限付きの処理中リクエストスロットプール、容量 1 のトークンバケット、429 クールダウンファイル(cooldown.json:キーに対する 429 が 1 件発生すると、すべてのプロセスが次の送信まで max(5 s, Retry-After) 待機します)が使用されます。POSIX ファイルロックによって調停されるため、プロセスがクラッシュしても安全です(終了したプロセスのロックはカーネルが解放します)。単一の MCP または STDIO のデプロイでは何もする必要はありません。ディレクトリ変数が設定されていない場合、リミッターは無効です。
# docker-compose.yml (excerpt, all 4 USPTO MCP services)
volumes:
uspto-rate-limit: {}
services:
pfw-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: "1" # default; shared in-flight slots (USPTO burst=1)
USPTO_SHARED_MAX_WAIT_SECONDS: "45" # default; queue wait ceiling, then the
# rate-limit envelope (no retry)
ディレクトリをマウントするすべてのプロセスで、キュー 1 つ、トークンバケット 1 つ、同時実行スロット 1 つが共有され、到着順に処理されます。プロキシ経由の PDF ダウンロードでは、スロットを使用して USPTO からのデータをバッファリングし、エンドユーザーへの最初のバイトの送信前にスロットを解放します。そのため、スロットの使用時間はユーザーの接続速度ではなく、USPTO の転送速度によって決まります。429 が発生すると、すべての ODP 呼び出し箇所で共有クールダウンが記録されます。その後、待機時間が 10 秒以下で呼び出しの予算内に収まる場合は、max(5 s, Retry-After) 待機して 1 回だけ再試行します。それ以外の場合は、レート制限エンベロープ(retry_after_seconds = max(5, Retry-After))を返します。待機時間が上限を超える呼び出しは、同じエンベロープ(rate_limit_source: "shared_uspto_limiter")をただちに返します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
