search_patents

Pack: patents · Endpoint: https://gateway.pipeworx.io/patents/mcp

Search USPTO patent applications and grants. Use query for free-text keywords (“lithium battery”, “crispr”, “machine learning”); all terms are required (AND), and you can quote a phrase to keep it together. Optional structured filters: applicant (exact corporate name as filed, e.g. “APPLE INC.”), inventor (person name), title (words in the invention title), number (a specific application number), filed_after / filed_before, granted_after / granted_before. Common synonyms are understood — assignee, company and owner all reach applicant, and keywords, q or text all reach query. Results include title, application number, filing date, first applicant, all applicants, inventors, status, classification. total is the full match count but USPTO returns at most 25 records per search — narrow with applicant or a date range rather than raising limit. Powered by the USPTO Open Data Portal (data.uspto.gov).

Parameters

NameTypeRequiredDescription
querystringnoFree-text keywords. Every term must appear (they are AND-ed), so add words to narrow and remove words to widen. Wrap words in double quotes to require them adjacent: "machine learning" model needs the exact phrase plus the word model. Examples: “lithium battery”, “crispr”, “neural network”. Pass ”*” if you only want to filter by applicant/date with no keyword constraint.
applicantstringnoOptional. Company applicant name as it appears on the USPTO filing. Must include the exact corporate suffix the company uses (PBC / Inc. / LLC / Corporation / Co. / NV / AG / KK). A wrong or missing suffix matches nothing — “Apple” returns zero where “APPLE INC.” returns hundreds. Examples: “Anthropic, PBC” (not “Anthropic Inc.”), “Apple Inc.” (not “Apple”), “Alphabet Inc.” (not “Google”), “Meta Platforms, Inc.” (not “Facebook”), “Microsoft Corporation” (not “Microsoft Corp.”). If you get zero results plus a warning field, the name form is wrong rather than the company being absent — retry with a different corporate form.
inventorstringnoOptional. Inventor name as recorded on the filing; a last name matches most reliably. Examples: “Hinton”, “Bengio”. Accepted synonyms: inventor_name, author.
titlestringnoOptional. Words that must appear in the invention title, which narrows far harder than query does since query searches the whole record. Example: “solid state battery”.
numberstringnoOptional. A specific US application number, digits only or formatted — “16123456” or “16/123,456”. Accepted synonyms: application_number, patent_number.
filed_afterstringnoOptional. Filter to patents filed on/after this date (ISO YYYY-MM-DD).
filed_beforestringnoOptional. Filter to patents filed on/before this date (ISO YYYY-MM-DD).
granted_afterstringnoOptional. Filter to patents granted on/after this date (ISO YYYY-MM-DD).
granted_beforestringnoOptional. Filter to patents granted on/before this date (ISO YYYY-MM-DD).
limitnumbernoNumber of results to return (default 10). USPTO caps every search at 25 records, so values above 25 have no effect — use the filters to narrow instead.
_apiKeystringnoUSPTO ODP API key. Get free at https://data.uspto.gov/myodp. Falls back to platform key if configured.

Example call

Arguments

{
  "query": "machine learning neural networks"
}

curl

curl -X POST https://gateway.pipeworx.io/patents/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_patents","arguments":{"query":"machine learning neural networks"}}}'

TypeScript (@pipeworx/sdk)

import { Pipeworx } from '@pipeworx/sdk';
const pipeworx = new Pipeworx();

const result = await pipeworx.call('search_patents', {
  "query": "machine learning neural networks"
});

More examples

{
  "query": "blockchain cryptocurrency"
}
{
  "applicant": "APPLE INC."
}
{
  "query": "neural",
  "inventor": "Hinton"
}

Response shape

Always returns: query, filters, total, returned, results, patents

FieldTypeDescription
querystringThe composed ODP query string actually sent
filtersobjectEcho of the structured filters applied; each is null when unused
totalnumberTotal number of matching applications (USPTO ODP returns at most 25 records per search regardless of limit)
returnednumberNumber of records in this response
notestringPresent when total exceeds the returned records — explains the 25-record ODP page cap
warningstringPresent when an applicant filter matched nothing — ODP matches the corporate name literally (“APPLE INC.” not “Apple”)
resultsarrayBack-compat summary shape (title, number, dates, applicant)
patentsarraySame records with full ODP fields
Full JSON Schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "The composed ODP query string actually sent"
    },
    "filters": {
      "type": "object",
      "description": "Echo of the structured filters applied; each is null when unused",
      "properties": {
        "applicant": {
          "type": [
            "string",
            "null"
          ]
        },
        "filed_after": {
          "type": [
            "string",
            "null"
          ]
        },
        "filed_before": {
          "type": [
            "string",
            "null"
          ]
        },
        "granted_after": {
          "type": [
            "string",
            "null"
          ]
        },
        "granted_before": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "total": {
      "type": "number",
      "description": "Total number of matching applications (USPTO ODP returns at most 25 records per search regardless of limit)"
    },
    "returned": {
      "type": "number",
      "description": "Number of records in this response"
    },
    "note": {
      "type": "string",
      "description": "Present when total exceeds the returned records — explains the 25-record ODP page cap"
    },
    "warning": {
      "type": "string",
      "description": "Present when an applicant filter matched nothing — ODP matches the corporate name literally (\"APPLE INC.\" not \"Apple\")"
    },
    "results": {
      "type": "array",
      "description": "Back-compat summary shape (title, number, dates, applicant)",
      "items": {
        "type": "object"
      }
    },
    "patents": {
      "type": "array",
      "description": "Same records with full ODP fields",
      "items": {
        "type": "object",
        "properties": {
          "patent_number": {
            "type": "string",
            "description": "Patent number"
          },
          "title": {
            "type": "string",
            "description": "Patent title"
          },
          "date": {
            "type": [
              "string",
              "null"
            ],
            "description": "Patent filing date or null"
          },
          "inventors": {
            "type": "array",
            "description": "List of inventors",
            "items": {
              "type": "object",
              "properties": {
                "first_name": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Inventor first name or null"
                },
                "last_name": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Inventor last name or null"
                }
              }
            }
          },
          "assignee_organization": {
            "type": [
              "string",
              "null"
            ],
            "description": "Assignee organization name or null"
          }
        },
        "required": [
          "patent_number",
          "title",
          "date",
          "inventors",
          "assignee_organization"
        ]
      }
    }
  },
  "required": [
    "query",
    "filters",
    "total",
    "returned",
    "results",
    "patents"
  ]
}

Connect

Add this to your MCP client config, or use one-click install buttons:

{
  "mcpServers": {
    "patents": {
      "url": "https://gateway.pipeworx.io/patents/mcp"
    }
  }
}

See Getting Started for client-specific install steps.

Regenerated from source · build August 8, 2026