Help us improve
Share bugs, ideas, or general feedback.
From patent-search-mcp
Guides patent landscape analysis using Espacenet tools: exhaustive retrieval, stats on top applicants, filing trends, classifications, drill-down, and structured reports with analytics.
npx claudepluginhub navisbio/ops-patent-search-mcp --plugin patent-search-mcpHow this skill is triggered — by the user, by Claude, or both
Slash command
/patent-search-mcp:patent-landscapeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are conducting a patent landscape analysis using the Espacenet patent
Maps IP landscapes for tech domains: analyzes patent clusters, white spaces, competitors, FTO risks, and strategic positioning. Use before R&D, market entry, or patent filing.
Accesses USPTO patent data via PatentsView REST API and Google Patents BigQuery. Searches by inventor, assignee, CPC, keywords; analyzes portfolios and trends for IP landscape, prior art search, competitor monitoring.
Guides structured prior art searches using Espacenet: CQL query construction, abstract triage, full-text keyword search, paginated claim reading, family expansion, report generation. For patent novelty and invalidation.
Share bugs, ideas, or general feedback.
You are conducting a patent landscape analysis using the Espacenet patent tools. A landscape analysis maps the patent activity across a technology field to reveal who is filing, where the technology is heading, and where gaps exist.
Technology field definition
--> Build scoping CQL queries
--> Count results (size the landscape)
--> Exhaustive retrieval with auto_paginate + summary
--> Analyze: top applicants, year trends, classifications
--> Narrow into sub-segments for deeper analysis
--> Drill down on key patents/applicants
--> Structured landscape report
Work with the user to define the scope:
Translate these into CQL building blocks:
ta=)For CQL field codes, operators, and examples, load the reference: CQL Syntax Reference
Create 2-3 queries that define the landscape boundaries:
Example for "mRNA vaccine delivery":
Core: ta="mRNA" AND ta="vaccine" AND ta="lipid nanoparticle"
Broad: ta="mRNA" AND (ta="vaccine" OR ta="immunization") AND ta="delivery"
Class: ic="A61K48/" AND ta="mRNA" AND ta="nanoparticle"
Count each query first with count_only=true:
search_patents(query='ta="mRNA" AND ta="vaccine" AND ta="lipid nanoparticle"', count_only=true)
This tells you:
detail_level="compact" with auto_paginate=truedetail_level="summary" with auto_paginate=true for statistics, then narrow into segmentsAlways report the counts to the user before proceeding — the landscape size determines the entire analysis strategy.
This is where the auto_paginate and detail_level features shine.
search_patents(
query='ta="mRNA" AND ta="vaccine" AND ta="lipid nanoparticle"',
auto_paginate=true,
detail_level="summary",
max_results=5000
)
This returns aggregated statistics without flooding context:
search_patents(
query='ta="mRNA" AND ta="vaccine" AND ta="lipid nanoparticle"',
auto_paginate=true,
detail_level="compact",
max_results=2000
)
Returns title + applicant + date for every patent — enough for manual scanning.
Auto_paginate with year decomposition handles this automatically, but for better analysis, consider explicit segmentation:
# Recent 3 years in detail
search_patents(query='...', auto_paginate=true, detail_level="compact",
published_after="2023", max_results=1000)
# Earlier years in summary only
search_patents(query='...', auto_paginate=true, detail_level="summary",
published_after="2018", published_before="2022", max_results=5000)
From the summary/compact data, extract insights in these categories:
Note: Applicant names vary (e.g., "MODERNA INC", "MODERNA TX INC", "MODERNATX INC"). The tool normalizes common variants, but flag any suspected duplicates.
Based on the landscape overview, drill into specific segments:
search_patents(query='pa="MODERNA*" AND ta="mRNA" AND ta="vaccine"',
auto_paginate=true, detail_level="compact")
search_patents(query='ta="mRNA" AND ta="self-amplifying" AND ta="vaccine"',
detail_level="full")
search_patents(query='ta="mRNA" AND ta="vaccine" AND ta="lipid nanoparticle"',
published_after="2024", detail_level="full")
For the most interesting patents, get full bibliographic data:
get_patent_details(document_number="WO2023123456")
Executive Summary
Landscape Overview
Applicant Analysis
Technology Segmentation
Temporal Analysis
Key Patents
White Spaces and Opportunities
Methodology
topApplicants counts in summary mode come from the search query's scope. If you verify with a separate pa="X" AND ta="Y" query, you may get a different count because the query scope differs. Always match the exact same CQL when verifying. This is the most common source of "double counting."estimatedFamilies based on title deduplication. This is approximate — use it as a rough guide, not an exact count. For precise family counts, use get_patent_family on individual patents.auto_paginate with year decomposition handles this automatically for queries up to ~10,000+ results.ic="A61K48/" may not work as a wildcard prefix — use specific subgroups like ic="A61K48/00" or combine with ta= terms.auto_paginate retrieves fewer results than the total count (e.g., 200 of 658), the summary statistics are based on the retrieved subset only. Explicitly note this limitation in the report. Check whether non-dominant applicants from the landscape summary were missed by doing targeted pa= searches for any applicants with significant filing counts that weren't covered in the deep-dive phase.claims=, desc=, ftxt=) are unreliable for phrase searches and don't support wildcards. Use ta= for CQL filtering. For post-retrieval keyword analysis in specific patents, use search_in_patent_text.get_patent_details to verify its title, applicant, and dates. For batch efficiency, use the document_numbers array parameter to verify up to 100 patents in one call.get_patent_details and 3-5 applicant counts with targeted pa= searches as a quality gate.