# IP Patent & Trademark MCP Server (`ryanclinton/ip-patent-trademark-mcp`) Actor

MCP intelligence server for ip patent trademark detection and analysis.

- **URL**: https://apify.com/ryanclinton/ip-patent-trademark-mcp.md
- **Developed by:** [ryan clinton](https://apify.com/ryanclinton) (community)
- **Categories:** AI, Developer tools
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 us patent searches

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## IP Patent & Trademark MCP Server

Intellectual property intelligence — U.S. patents via USPTO PatentsView, European patents via EPO Open Patent Services, and EU trademarks via EUIPO — all accessible via the Model Context Protocol (MCP). Connect this server to Claude Desktop, Cursor, or any MCP-compatible AI client and run patent and trademark queries through natural language.

**Why use this?** Patent landscape analysis requires searching multiple national/regional databases with different APIs, query formats, and classification systems. This MCP server does it in one query — running USPTO and EPO patent searches in parallel, then identifying shared CPC classification codes and common filers across jurisdictions to surface cross-border IP activity.

### Available tools

This MCP server exposes 5 intellectual property tools that your AI assistant can call:

#### Patent search
| Tool | Description |
|------|-------------|
| `ip_us_patents` | Search U.S. patents via PatentsView (USPTO). Find patents by keyword, inventor, assignee, CPC code, patent type, and date range. Returns titles, abstracts, inventors, assignees, citation counts, and CPC classifications. |
| `ip_eu_patents` | Search European patents via EPO Open Patent Services. Find patents by title, applicant, inventor, publication number, country, and date range. Returns bibliographic data, IPC/CPC classifications, and patent family info. |

#### Trademark search
| Tool | Description |
|------|-------------|
| `ip_eu_trademarks` | Search EU trademarks via EUIPO. Find trademarks by verbal element (name), Nice class, status, applicant, mark type, and date range. Returns registration details, goods/services descriptions, and images. |

#### Composite intelligence
| Tool | Description |
|------|-------------|
| `ip_global_patent_search` | **Composite tool** — runs USPTO and EPO patent searches in parallel for a technology keyword. Identifies shared CPC classification codes and common filers across U.S. and European jurisdictions. |
| `ip_list_sources` | List all data sources with descriptions and capabilities. |

### Data sources

| Source | Coverage | Update Frequency | Auth Required |
|--------|----------|------------------|---------------|
| USPTO (PatentsView) | 12M+ U.S. patents from 1976 to present | Weekly | Yes (free API key) |
| EPO (Open Patent Services) | 130M+ patent documents worldwide | Daily | Yes (free credentials) |
| EUIPO | 2.5M+ EU trademark registrations | Continuously updated | Yes (free credentials) |

### How to connect

#### Claude Desktop

Add this to your `claude_desktop_config.json`:

```json
{
    "mcpServers": {
        "ip-patent-trademark": {
            "url": "https://actors-mcp-server.apify.actor/mcp?actorId=ryanclinton/ip-patent-trademark-mcp&token=YOUR_APIFY_TOKEN"
        }
    }
}
````

#### Cursor

Add the same URL to your Cursor MCP settings:

```
https://actors-mcp-server.apify.actor/mcp?actorId=ryanclinton/ip-patent-trademark-mcp&token=YOUR_APIFY_TOKEN
```

#### Direct HTTP

```bash
curl -X POST "https://actors-mcp-server.apify.actor/mcp?actorId=ryanclinton/ip-patent-trademark-mcp&token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
        "name": "ip_us_patents",
        "arguments": {
            "keyword": "solid state battery",
            "assignee": "Toyota",
            "max_results": 10,
            "api_key": "YOUR_PATENTSVIEW_KEY"
        }
    },
    "id": 1
  }'
```

### Example conversations

#### U.S. patent landscape

> **You:** "How many patents does Apple have on LiDAR technology?"
>
> **AI:** *Calls `ip_us_patents` with keyword="LiDAR", assignee="Apple"*
>
> "Found 47 U.S. patents assigned to Apple Inc. related to LiDAR. The most recent is from 2025 covering a 'Compact LiDAR Module for Augmented Reality Devices.' Total citations across all 47 patents: 312. Primary CPC codes are G01S (determining distance/velocity by radar) and G06T (image data processing)."

#### Cross-jurisdictional patent search

> **You:** "Search for solid-state battery patents filed in both the US and Europe"
>
> **AI:** *Calls `ip_global_patent_search` with keyword="solid state battery"*
>
> "Found 25 U.S. patents and 25 European patents. Cross-jurisdictional analysis: 4 CPC code groups appear in both jurisdictions (H01M for electrochemical energy storage, C01G for inorganic compounds). 3 common filers identified: Samsung SDI, Toyota Motor, and QuantumScape — suggesting these companies are pursuing IP protection in both markets simultaneously."

#### EU trademark clearance

> **You:** "Is the trademark 'AURORA' registered in the EU for software products?"
>
> **AI:** *Calls `ip_eu_trademarks` with query="AURORA", nice\_class="9,42", status="REGISTERED"*
>
> "Found 8 registered EU trademarks for 'AURORA' in Nice classes 9 (software/electronics) and 42 (technology services). Applicants include Aurora Innovation Inc. (autonomous vehicles), Aurora Labs Ltd. (software maintenance), and others. 3 marks are word marks and 5 are figurative marks. Earliest registration dates to 2014."

#### European patent search

> **You:** "Find recent EPO patents from Siemens on wind turbine technology"
>
> **AI:** *Calls `ip_eu_patents` with applicant="Siemens", title\_keywords="wind turbine", date\_from="2024"*
>
> "Found 18 European patents from Siemens related to wind turbines published since 2024. Key areas include blade design optimization (F03D), grid integration systems (H02J), and predictive maintenance algorithms (G06N). 4 patents are in the EP-A1 stage (published applications) and 14 are EP-B1 (granted patents)."

### Output examples

#### U.S. patent search

```json
{
    "total": 47,
    "uniqueAssignees": 1,
    "totalCitations": 312,
    "data": [
        {
            "patentId": "US-11860280-B2",
            "patentDate": "2025-01-02",
            "title": "Compact LiDAR Module for Augmented Reality Devices",
            "abstract": "A compact light detection and ranging module...",
            "assignees": "Apple Inc.",
            "inventors": ["Smith, John", "Chen, Wei"],
            "cpcCodes": ["G01S7/4814", "G06T7/521"],
            "citationCount": 12
        }
    ]
}
```

#### Cross-jurisdictional patent analysis

```json
{
    "keyword": "solid state battery",
    "sources": ["USPTO (PatentsView)", "EPO (Open Patent Services)"],
    "usPatents": {
        "total": 25,
        "hasData": true
    },
    "euPatents": {
        "total": 25,
        "hasData": true
    },
    "crossJurisdiction": {
        "sharedCpcCodes": ["H01M", "C01G", "H01B", "C04B"],
        "commonFilers": 3,
        "note": "4 CPC code group(s) appear in both US and EU results, suggesting overlapping technology areas"
    }
}
```

### Use cases

- **Patent landscape analysis** — use `ip_global_patent_search` to map technology areas across U.S. and European jurisdictions in one query
- **Freedom-to-operate studies** — search existing patents by CPC code to identify potential blocking patents before product launch
- **Competitive intelligence** — track competitor patent filings by assignee/applicant name across both USPTO and EPO
- **Trademark clearance** — search `ip_eu_trademarks` by Nice class before filing a new EU trademark application
- **Technology scouting** — find emerging technologies by keyword across patent databases, identifying active filers and trending CPC codes
- **IP due diligence** — assess a company's patent portfolio strength by assignee search and citation analysis

### How it works

The server runs as an Express.js application using the MCP SDK's Streamable HTTP transport. Each incoming request creates a fresh `McpServer` instance (stateless). When a tool is called:

1. `Actor.charge()` records usage for pay-per-event billing
2. The tool calls the underlying Apify actor(s) via `apify-client`
3. Results are filtered, aggregated, and returned as structured JSON
4. The composite `ip_global_patent_search` tool runs USPTO and EPO actors in parallel via `Promise.all`, then identifies shared CPC codes and common filers across jurisdictions

### Limitations

- **All 3 sources require free API credentials** — USPTO needs a PatentsView key, EPO needs OPS consumer key/secret, EUIPO needs developer portal credentials. Without them, tools return setup instructions.
- **PatentsView covers 1976 to present** — earlier U.S. patents are not available through this API
- **EPO OPS has rate limits** — 10 requests per second with free credentials; the actor handles throttling internally
- **EUIPO covers EU trademarks only** — national trademarks in individual EU member states are not included
- **CPC cross-referencing uses 4-digit prefixes** — the composite tool compares CPC codes at the subclass level (e.g., "G06F"), not at the full classification level
- **Common filer detection uses fuzzy matching** — company names must partially match between USPTO assignee and EPO applicant fields

### Combine with other Apify Actors

- **[USPTO Patent Search](https://apify.com/ryanclinton/patent-search)** — standalone U.S. patent search with full parameter control
- **[EPO European Patent Search](https://apify.com/ryanclinton/epo-patent-search)** — standalone European patent search with raw CQL query support
- **[EUIPO EU Trademark Search](https://apify.com/ryanclinton/euipo-trademark-search)** — standalone EU trademark search with image URLs
- **[SEC EDGAR Filing Analyzer](https://apify.com/ryanclinton/sec-edgar-filing-analyzer)** — cross-reference patent holders with their SEC filings for IP valuation context
- **[OpenCorporates Search](https://apify.com/ryanclinton/opencorporates-search)** — verify corporate identity of patent assignees across 140+ jurisdictions

### Tips for best results

- **Use CPC codes for precise technology searches** — "G06F" (computing), "H01M" (batteries), "A61K" (pharmaceuticals) are more precise than keywords
- **Search by assignee for portfolio analysis** — `ip_us_patents` with `assignee="Samsung"` returns the full patent portfolio
- **Use `ip_global_patent_search` for competitive landscapes** — it automatically identifies cross-border filers
- **Filter EUIPO by Nice class** — class 9 (software/electronics), 25 (clothing), 35 (business services) are the most common
- **Use publication\_number for direct EPO lookups** — "EP1234567" returns the exact patent without searching
- **Sort USPTO results by citations** — `sort_by="patent_num_us_patents_cited"` surfaces the most influential patents

### FAQ

#### What is MCP?

The Model Context Protocol (MCP) is an open standard for connecting AI assistants to external tools and data sources. It lets AI applications like Claude Desktop call functions on remote servers — think of it as a standardized plugin system for AI.

#### Where do I get API credentials?

- **PatentsView**: Register at [patentsview.org/apis](https://patentsview.org/apis) — free, instant
- **EPO OPS**: Register at [developers.epo.org](https://developers.epo.org) — free, requires account approval
- **EUIPO**: Register at [dev.euipo.europa.eu](https://dev.euipo.europa.eu) — free developer portal

#### What's the difference between this and the individual actors?

The standalone actors return raw datasets. This MCP server adds an AI-accessible interface, cross-jurisdictional intelligence (the composite `ip_global_patent_search` tool), and works through natural language conversation.

#### How much does each query cost?

Each tool call is billed via Apify's pay-per-event system. Individual tool calls are inexpensive. The composite `ip_global_patent_search` tool costs more as it runs 2 actors in parallel.

#### Can I search for design patents?

Yes — `ip_us_patents` supports `patent_type="design"` for U.S. design patents. EUIPO trademark search covers figurative marks with images. EPO covers design-adjacent utility patents but not registered community designs.

# Actor input Schema

## Actor input object example

```json
{}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("ryanclinton/ip-patent-trademark-mcp").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("ryanclinton/ip-patent-trademark-mcp").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call ryanclinton/ip-patent-trademark-mcp --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ryanclinton/ip-patent-trademark-mcp",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "IP Patent & Trademark MCP Server",
        "description": "MCP intelligence server for ip patent trademark detection and analysis.",
        "version": "1.0",
        "x-build-id": "3b7abSx5YWxnQVwIC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ryanclinton~ip-patent-trademark-mcp/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ryanclinton-ip-patent-trademark-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ryanclinton~ip-patent-trademark-mcp/runs": {
            "post": {
                "operationId": "runs-sync-ryanclinton-ip-patent-trademark-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ryanclinton~ip-patent-trademark-mcp/run-sync": {
            "post": {
                "operationId": "run-sync-ryanclinton-ip-patent-trademark-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {}
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
