Help us improve
Share bugs, ideas, or general feedback.
From patent-search-mcp
Conducts Freedom-to-Operate (FTO) patent claim analysis using Espacenet tools to identify in-force patents, map claims to product features, check legal status, and produce structured risk assessments.
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:fto-analysisThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are conducting a Freedom-to-Operate analysis using the Espacenet patent tools.
Performs structured freedom-to-operate triage for products/features, building claim-charts against plausible patents and flagging open questions for patent counsel review.
Provides IP guidance for developers: prior art searches, patentability assessments, claim drafting, strategy advice, full patent drafts, and FTO analysis. Informational only.
Searches patents, academic papers, products, and open source for prior art to assess novelty/obviousness, challenge validity, support FTO, or document defensive publications.
Share bugs, ideas, or general feedback.
You are conducting a Freedom-to-Operate analysis using the Espacenet patent tools. FTO analysis determines whether a product or process can be commercialized without infringing active patent claims in the target markets.
This is the highest-stakes patent workflow. Be thorough and precise. Every claim element matters — a patent is only infringed if ALL elements of at least one independent claim are met.
Product/process description
--> Identify key features + target markets
--> Search for relevant patents (CQL)
--> Filter by legal status (in force only)
--> Read independent claims of active patents
--> Map claim elements to product features
--> Check family coverage (jurisdictions)
--> Assess risk level per patent
--> FTO risk report
Before searching, extract from the user's description:
Example: "We want to launch a PEGylated interferon-alpha formulation for hepatitis B in the US and EU"
Build targeted CQL queries covering:
For CQL syntax details, see the prior-art-search skill's CQL reference.
search_patents(query='ta="PEGylated" AND ta="interferon" AND ta="hepatitis"', count_only=true)
search_patents(query='pa="ROCHE*" AND ta="pegylated interferon"', count_only=true)
search_patents(query='ic="A61K47/60" AND ta="interferon alpha"', count_only=true)
For FTO, what matters is what's claimed, not what's described. However, CQL full-text fields (claims=, ftxt=) are unreliable for phrase searches and don't support wildcards. Use ta= for CQL queries, then search_in_patent_text to search within claims of specific patents. Note: cl= searches IPC+CPC classification, NOT claims text.
Focus on patents published in the last 20 years (patents expire ~20 years from filing).
This is the critical filter. Before reading claims in detail, check legal status:
get_patent_legal_status(document_number="EP1000000")
Classify each patent into:
| Status | Action | Why |
|---|---|---|
| Granted + In Force | Full claim analysis required | Active legal risk |
| Granted + Lapsed/Expired | Low priority — note but skip deep analysis | No longer enforceable |
| Pending Application | Monitor — check claims but flag as uncertain | May never grant; claims may narrow |
| Withdrawn/Refused | Skip | No legal risk |
Skip expired and withdrawn patents early — they cannot be infringed regardless of claim scope. This saves significant API calls on full-text reading.
For each in-force patent, read the claims:
get_patent_claims(document_number="EP1000000", max_characters=15000)
Important: Granted claims (B1/B2) are often not available via OPS full text. The tool will warn you if no claims are found. In that case:
get_patent_family to find a WO equivalent with full textFocus on independent claims only (typically claims 1, ~10-15, and ~20-25 depending on the patent). Independent claims define the broadest scope of protection.
How to identify independent claims:
For each independent claim, break it into individual elements and map against your product:
| Claim Element | Product Feature | Match? |
|---|---|---|
| "A PEGylated protein" | Our PEGylated interferon-alpha | Yes |
| "wherein the protein is interferon-beta" | Our product uses interferon-alpha | No |
| "for treating hepatitis C" | Our indication is hepatitis B | No |
Key principle: ALL elements must match for infringement. If even one element of an independent claim doesn't match your product, that claim is NOT infringed. This is called the "all-elements rule."
If you need to verify specific technical terms in the description:
search_in_patent_text(
document_number="EP1000000",
search_terms=["interferon-alpha", "interferon-beta", "IFN-alpha", "IFN-beta"]
)
Then read around the matches to understand the patent's intended scope:
get_patent_description(document_number="EP1000000", offset=42, max_characters=8000)
For patents that DO pose a risk (claim elements match), check family coverage:
get_patent_family(document_number="EP1000000")
A patent only blocks you in jurisdictions where it's been filed AND granted:
Cross-reference family members with your target markets.
For each analyzed patent, assign a risk level:
| Risk Level | Criteria |
|---|---|
| HIGH | In force, all independent claim elements match product, covers target market |
| MEDIUM | In force, most claim elements match but one element is arguable, or pending application with broad claims |
| LOW | In force but clear non-matching element in all independent claims, or only covers non-target markets |
| NONE | Expired/withdrawn, or no claim overlap |
Executive Summary
High-Risk Patents (detailed analysis for each)
Medium-Risk Patents (summary analysis)
Low-Risk / Cleared Patents
Search Coverage & Limitations
Recommendations
ta= searches (e.g., ta="hepatitis D" → 0 results; use ta="hepatitis delta" or ta="HDV"). Drug names in patent titles often use research codes (e.g., MK-3475) more than INN names (pembrolizumab), especially in earlier filings.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 before citing it in the report.