Skip to main content
Glama

Search Patents

search_patents
Read-onlyIdempotent

Search USPTO patent applications and grants — without a granted_after/granted_before bound this returns the APPLICATION corpus sorted newest-FILED-first, not issued patents. USPTO publishes an application ~18 months after filing and typically takes 2+ years to grant it, so the newest rows in an unfiltered search are always recent, unexamined filings with grant_date: null — that is expected, not stale data. Pick the date field on the QUESTION'S VERB, not on the word "recent": a question asking who has FILED / applied for / sought patents in a window wants filed_after/filed_before — the default application corpus already includes pending AND granted patents, so no granted_after is needed or wanted, and adding one will silently drop recently-filed-but-not-yet-examined applications (grant lags filing by 2+ years, so "filed in the last 3 years" AND "granted in the last 3 years" are mostly DISJOINT sets). Only use granted_after/granted_before when the question explicitly says GRANTED / ISSUED / APPROVED / "has a patent" (not just "recent patents"). 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. A curated, short list of known synonym/abbreviation pairs for concepts that patents describe inconsistently (e.g. cfRNA / cell-free RNA / circulating RNA; MRD / minimal residual disease / residual cancer) is recognized in query — quoted or bare — and expanded to an OR group before the search runs, so "cfRNA" and "cell-free RNA" are treated as the same concept rather than requiring the caller to guess a specific patent's exact wording (marked synonyms_expanded: true in the response; this is a fixed, documented list, not general synonym invention). A question that names several DISTINCT ways of describing the same idea (e.g. a condition plus a detection method, each expressed as its own quoted phrase) should still be passed as one query — if the literal AND-of-everything match returns zero, the tool automatically retries once with those same quoted phrases OR'd together instead and marks the response broadened: true; it only ever relaxes multi-phrase AND to OR on a genuine zero, so a search that is narrow for a real reason (e.g. one specific applicant with no matching filings, or an ordinary bare-keyword AND) still correctly returns zero. 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).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoNumber 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.
queryNoFree-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. A curated set of known synonyms/abbreviations (e.g. cfRNA / cell-free RNA / circulating RNA, or MRD / minimal residual disease / residual cancer) is automatically expanded to an OR group within the query — quoted or bare, either form is recognized — so you do not need to guess which exact wording a given patent uses (see `synonyms_expanded` in the response). If several quoted phrases — or two recognized synonym-group concepts, quoted or not — ANDed together still match nothing, the tool retries once with them OR'd instead (see `broadened` in the response) rather than returning a bare zero.
titleNoOptional. 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".
numberNoOptional. A specific US application number, digits only or formatted — "16123456" or "16/123,456". Accepted synonyms: `application_number`, `patent_number`.
_apiKeyNoUSPTO ODP API key. Get free at https://data.uspto.gov/myodp. Falls back to platform key if configured.
inventorNoOptional. Inventor name as recorded on the filing; a last name matches most reliably. Examples: "Hinton", "Bengio". Accepted synonyms: `inventor_name`, `author`.
applicantNoOptional. 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.
filed_afterNoOptional. Filter to patents FILED on/after this date (ISO YYYY-MM-DD). Use this for "who has filed / applied for patents on X (recently / in the last N years)" — it covers both pending applications and already-granted patents, so it is the right bound even when the question also says "recent". Do NOT substitute `granted_after` for a filing-activity question: grant lags filing by 2+ years, so a recent filing window under `granted_after` typically returns zero even when filing activity is real.
filed_beforeNoOptional. Filter to patents FILED on/before this date (ISO YYYY-MM-DD).
granted_afterNoOptional. Filter to patents GRANTED (issued) on/after this date (ISO YYYY-MM-DD) — use ONLY when the question explicitly says GRANTED / ISSUED / APPROVED, not for a plain "recent patents" or "who has filed" question (use `filed_after` for those — see its description). Accepted synonym: `issued_after`.
granted_beforeNoOptional. Filter to patents GRANTED (issued) on/before this date (ISO YYYY-MM-DD). Accepted synonym: `issued_before`.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
noteNoPresent when total exceeds the returned records — explains the 25-record ODP page cap
queryYesThe composed ODP query string actually sent
totalYesTotal number of matching applications (USPTO ODP returns at most 25 records per search regardless of limit)
filtersYesEcho of the structured filters applied; each is null when unused
patentsYesSame records with full ODP fields
resultsYesBack-compat summary shape (title, number, dates, applicant)
warningNoPresent when an applicant filter matched nothing — ODP matches the corporate name literally ("APPLE INC." not "Apple")
returnedYesNumber of records in this response

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "query": "machine learning neural networks"
      -  },
      -  {
      -    "query": "blockchain cryptocurrency"
      -  },
      -  {
      -    "applicant": "APPLE INC."
      -  },
      -  {
      -    "inventor": "Hinton",
      -    "query": "neural"
      -  }
      -]New value: +[
      +  {
      +    "filed_after": "2023-09-25",
      +    "filed_before": "2026-09-25",
      +    "query": "\"cell-free RNA\""
      +  },
      +  {
      +    "query": "machine learning neural networks"
      +  },
      +  {
      +    "query": "blockchain cryptocurrency"
      +  },
      +  {
      +    "applicant": "APPLE INC."
      +  },
      +  {
      +    "inventor": "Hinton",
      +    "query": "neural"
      +  }
      +]
    • changedInput schema / properties / filed_after / description
      Previous value: -"Optional. Filter to patents filed on/after this date (ISO YYYY-MM-DD)."New value: +"Optional. Filter to patents FILED on/after this date (ISO YYYY-MM-DD). Use this for \"who has filed / applied for patents on X (recently / in the last N years)\" — it covers both pending applications and already-granted patents, so it is the right bound even when the question also says \"recent\". Do NOT substitute `granted_after` for a filing-activity question: grant lags filing by 2+ years, so a recent filing window under `granted_after` typically returns zero even when filing activity is real."
    • changedInput schema / properties / filed_before / description
      Previous value: -"Optional. Filter to patents filed on/before this date (ISO YYYY-MM-DD)."New value: +"Optional. Filter to patents FILED on/before this date (ISO YYYY-MM-DD)."
    • changedInput schema / properties / granted_after / description
      Previous value: -"Optional. Filter to patents GRANTED (issued) on/after this date (ISO YYYY-MM-DD). This is the argument that answers \"recent/latest patents\" — without it, results are unexamined applications, not issued patents. Accepted synonym: `issued_after`."New value: +"Optional. Filter to patents GRANTED (issued) on/after this date (ISO YYYY-MM-DD) — use ONLY when the question explicitly says GRANTED / ISSUED / APPROVED, not for a plain \"recent patents\" or \"who has filed\" question (use `filed_after` for those — see its description). Accepted synonym: `issued_after`."
    • changedInput schema / properties / query / description
      Previous value: -"Free-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."New value: +"Free-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. A curated set of known synonyms/abbreviations (e.g. cfRNA / cell-free RNA / circulating RNA, or MRD / minimal residual disease / residual cancer) is automatically expanded to an OR group within the query — quoted or bare, either form is recognized — so you do not need to guess which exact wording a given patent uses (see `synonyms_expanded` in the response). If several quoted phrases — or two recognized synonym-group concepts, quoted or not — ANDed together still match nothing, the tool retries once with them OR'd instead (see `broadened` in the response) rather than returning a bare zero."
  2. Changed2 schema fields changed
    • changedInput schema / properties / granted_after / description
      Previous value: -"Optional. Filter to patents granted on/after this date (ISO YYYY-MM-DD)."New value: +"Optional. Filter to patents GRANTED (issued) on/after this date (ISO YYYY-MM-DD). This is the argument that answers \"recent/latest patents\" — without it, results are unexamined applications, not issued patents. Accepted synonym: `issued_after`."
    • changedInput schema / properties / granted_before / description
      Previous value: -"Optional. Filter to patents granted on/before this date (ISO YYYY-MM-DD)."New value: +"Optional. Filter to patents GRANTED (issued) on/before this date (ISO YYYY-MM-DD). Accepted synonym: `issued_before`."
  3. Changed14 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "query": "machine learning neural networks"
      -  },
      -  {
      -    "query": "blockchain cryptocurrency"
      -  }
      -]New value: +[
      +  {
      +    "query": "machine learning neural networks"
      +  },
      +  {
      +    "query": "blockchain cryptocurrency"
      +  },
      +  {
      +    "applicant": "APPLE INC."
      +  },
      +  {
      +    "inventor": "Hinton",
      +    "query": "neural"
      +  }
      +]
    • addedInput schema / properties / inventor
      Added value: +{
      +  "description": "Optional. Inventor name as recorded on the filing; a last name matches most reliably. Examples: \"Hinton\", \"Bengio\". Accepted synonyms: `inventor_name`, `author`.",
      +  "type": "string"
      +}
    • addedInput schema / properties / number
      Added value: +{
      +  "description": "Optional. A specific US application number, digits only or formatted — \"16123456\" or \"16/123,456\". Accepted synonyms: `application_number`, `patent_number`.",
      +  "type": "string"
      +}
    • addedInput schema / properties / title
      Added value: +{
      +  "description": "Optional. 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\".",
      +  "type": "string"
      +}
    • addedOutput schema / properties / filters
      Added value: +{
      +  "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"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / note
      Added value: +{
      +  "description": "Present when total exceeds the returned records — explains the 25-record ODP page cap",
      +  "type": "string"
      +}
    • changedOutput schema / properties / patents / description
      Previous value: -"List of patent summaries"New value: +"Same records with full ODP fields"
    • changedOutput schema / properties / query / description
      Previous value: -"The search query used"New value: +"The composed ODP query string actually sent"
    • addedOutput schema / properties / results
      Added value: +{
      +  "description": "Back-compat summary shape (title, number, dates, applicant)",
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / returned / description
      Previous value: -"Number of patents in this response"New value: +"Number of records in this response"
    • addedOutput schema / properties / total
      Added value: +{
      +  "description": "Total number of matching applications (USPTO ODP returns at most 25 records per search regardless of limit)",
      +  "type": "number"
      +}
    • removedOutput schema / properties / total_results
      Removed value: -{
      -  "description": "Total number of matching patents",
      -  "type": "number"
      -}
    • addedOutput schema / properties / warning
      Added value: +{
      +  "description": "Present when an applicant filter matched nothing — ODP matches the corporate name literally (\"APPLE INC.\" not \"Apple\")",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "query",
      -  "total_results",
      -  "returned",
      -  "patents"
      -]New value: +[
      +  "query",
      +  "filters",
      +  "total",
      +  "returned",
      +  "results",
      +  "patents"
      +]
  4. Changed3 schema fields changed
    • changedInput schema / properties / applicant / description
      Previous value: -"Optional. 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). Wrong suffix = ODP silently returns the whole unfiltered pool, not zero. 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 a `warning` field back, the filter missed — retry with a different corporate form."New value: +"Optional. 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."
    • changedInput schema / properties / limit / description
      Previous value: -"Number of results (1–100, default 10)."New value: +"Number 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."
    • changedInput schema / properties / query / description
      Previous value: -"Free-text search across title/abstract/inventor/etc. Examples: \"lithium battery\", \"crispr\", \"neural network\". Pass \"*\" if you only want to filter by applicant/date with no keyword constraint."New value: +"Free-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."
  5. Changed1 schema field changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "query": "machine learning neural networks"
      -  },
      -  {
      -    "per_page": 20,
      -    "query": "blockchain cryptocurrency"
      -  }
      -]New value: +[
      +  {
      +    "query": "machine learning neural networks"
      +  },
      +  {
      +    "query": "blockchain cryptocurrency"
      +  }
      +]
  6. Changed2 schema fields changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "query": "machine learning neural networks"
      +  },
      +  {
      +    "per_page": 20,
      +    "query": "blockchain cryptocurrency"
      +  }
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "patents": {
      +      "description": "List of patent summaries",
      +      "items": {
      +        "properties": {
      +          "assignee_organization": {
      +            "description": "Assignee organization name or null",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "date": {
      +            "description": "Patent filing date or null",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "inventors": {
      +            "description": "List of inventors",
      +            "items": {
      +              "properties": {
      +                "first_name": {
      +                  "description": "Inventor first name or null",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "last_name": {
      +                  "description": "Inventor last name or null",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "patent_number": {
      +            "description": "Patent number",
      +            "type": "string"
      +          },
      +          "title": {
      +            "description": "Patent title",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "patent_number",
      +          "title",
      +          "date",
      +          "inventors",
      +          "assignee_organization"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "query": {
      +      "description": "The search query used",
      +      "type": "string"
      +    },
      +    "returned": {
      +      "description": "Number of patents in this response",
      +      "type": "number"
      +    },
      +    "total_results": {
      +      "description": "Total number of matching patents",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "query",
      +    "total_results",
      +    "returned",
      +    "patents"
      +  ],
      +  "type": "object"
      +}
  7. Changed1 schema field changed
    • changedInput schema / properties / applicant / description
      Previous value: -"Optional. Company applicant name. Use the canonical ALL-CAPS form (e.g., \"APPLE INC.\", \"GOOGLE LLC\", \"MICROSOFT CORPORATION\"). Lower-case forms work poorly. Filtering is approximate."New value: +"Optional. 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). Wrong suffix = ODP silently returns the whole unfiltered pool, not zero. 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 a `warning` field back, the filter missed — retry with a different corporate form."
  8. Changed7 schema fields changed
    • addedInput schema / properties / applicant
      Added value: +{
      +  "description": "Optional. Company applicant name. Use the canonical ALL-CAPS form (e.g., \"APPLE INC.\", \"GOOGLE LLC\", \"MICROSOFT CORPORATION\"). Lower-case forms work poorly. Filtering is approximate.",
      +  "type": "string"
      +}
    • addedInput schema / properties / filed_after
      Added value: +{
      +  "description": "Optional. Filter to patents filed on/after this date (ISO YYYY-MM-DD).",
      +  "type": "string"
      +}
    • addedInput schema / properties / filed_before
      Added value: +{
      +  "description": "Optional. Filter to patents filed on/before this date (ISO YYYY-MM-DD).",
      +  "type": "string"
      +}
    • addedInput schema / properties / granted_after
      Added value: +{
      +  "description": "Optional. Filter to patents granted on/after this date (ISO YYYY-MM-DD).",
      +  "type": "string"
      +}
    • addedInput schema / properties / granted_before
      Added value: +{
      +  "description": "Optional. Filter to patents granted on/before this date (ISO YYYY-MM-DD).",
      +  "type": "string"
      +}
    • changedInput schema / properties / query / description
      Previous value: -"Free-text search query — plain keywords only. Examples: \"lithium battery\", \"crispr\", \"neural network\". Field-prefix syntax (e.g. applicantName:X) is not supported and will return an error."New value: +"Free-text search across title/abstract/inventor/etc. Examples: \"lithium battery\", \"crispr\", \"neural network\". Pass \"*\" if you only want to filter by applicant/date with no keyword constraint."
    • removedInput schema / required
      Removed value: -[
      -  "query"
      -]
  9. Changed2 schema fields changed
    • removedInput schema / examples
      Removed value: -[
      -  {
      -    "query": "machine learning neural networks"
      -  },
      -  {
      -    "per_page": 20,
      -    "query": "blockchain cryptocurrency"
      -  }
      -]
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "patents": {
      -      "description": "List of patent summaries",
      -      "items": {
      -        "properties": {
      -          "assignee_organization": {
      -            "description": "Assignee organization name or null",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "date": {
      -            "description": "Patent filing date or null",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "inventors": {
      -            "description": "List of inventors",
      -            "items": {
      -              "properties": {
      -                "first_name": {
      -                  "description": "Inventor first name or null",
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "last_name": {
      -                  "description": "Inventor last name or null",
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                }
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "patent_number": {
      -            "description": "Patent number",
      -            "type": "string"
      -          },
      -          "title": {
      -            "description": "Patent title",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "patent_number",
      -          "title",
      -          "date",
      -          "inventors",
      -          "assignee_organization"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "query": {
      -      "description": "The search query used",
      -      "type": "string"
      -    },
      -    "returned": {
      -      "description": "Number of patents in this response",
      -      "type": "number"
      -    },
      -    "total_results": {
      -      "description": "Total number of matching patents",
      -      "type": "number"
      -    }
      -  },
      -  "required": [
      -    "query",
      -    "total_results",
      -    "returned",
      -    "patents"
      -  ],
      -  "type": "object"
      -}New value: +null
  10. Changed1 schema field changed
    • changedInput schema / properties / query / description
      Previous value: -"Search query. Examples: \"lithium battery\", \"applicantName:\\\"Apple Inc.\\\"\", \"inventionTitle:crispr\", \"firstInventorName:smith\". USPTO ODP uses simplified query syntax (see https://data.uspto.gov/documents/documents/ODP-API-Query-Spec.pdf)."New value: +"Free-text search query — plain keywords only. Examples: \"lithium battery\", \"crispr\", \"neural network\". Field-prefix syntax (e.g. applicantName:X) is not supported and will return an error."
  11. Changed4 schema fields changed
    • addedInput schema / properties / _apiKey
      Added value: +{
      +  "description": "USPTO ODP API key. Get free at https://data.uspto.gov/myodp. Falls back to platform key if configured.",
      +  "type": "string"
      +}
    • addedInput schema / properties / limit
      Added value: +{
      +  "description": "Number of results (1–100, default 10).",
      +  "type": "number"
      +}
    • removedInput schema / properties / per_page
      Removed value: -{
      -  "description": "Number of results to return (default 10, max 25)",
      -  "type": "number"
      -}
    • changedInput schema / properties / query / description
      Previous value: -"Keyword or phrase to search in patent abstracts"New value: +"Search query. Examples: \"lithium battery\", \"applicantName:\\\"Apple Inc.\\\"\", \"inventionTitle:crispr\", \"firstInventorName:smith\". USPTO ODP uses simplified query syntax (see https://data.uspto.gov/documents/documents/ODP-API-Query-Spec.pdf)."
  12. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "patents": {
      +      "description": "List of patent summaries",
      +      "items": {
      +        "properties": {
      +          "assignee_organization": {
      +            "description": "Assignee organization name or null",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "date": {
      +            "description": "Patent filing date or null",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "inventors": {
      +            "description": "List of inventors",
      +            "items": {
      +              "properties": {
      +                "first_name": {
      +                  "description": "Inventor first name or null",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "last_name": {
      +                  "description": "Inventor last name or null",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "patent_number": {
      +            "description": "Patent number",
      +            "type": "string"
      +          },
      +          "title": {
      +            "description": "Patent title",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "patent_number",
      +          "title",
      +          "date",
      +          "inventors",
      +          "assignee_organization"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "query": {
      +      "description": "The search query used",
      +      "type": "string"
      +    },
      +    "returned": {
      +      "description": "Number of patents in this response",
      +      "type": "number"
      +    },
      +    "total_results": {
      +      "description": "Total number of matching patents",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "query",
      +    "total_results",
      +    "returned",
      +    "patents"
      +  ],
      +  "type": "object"
      +}
  13. Changed1 schema field changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "query": "machine learning neural networks"
      +  },
      +  {
      +    "per_page": 20,
      +    "query": "blockchain cryptocurrency"
      +  }
      +]
  14. First observed

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare read-only/idempotent, but the description adds rich behavioural context the annotations cannot: the default corpus is applications sorted newest-filed-first, grant_date is often null by design, USPTO caps results at 25, synonyms_expanded and broadened flags appear in responses, and the OR-retry only triggers on a genuine zero.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical default-corpus caveat is front-loaded and bolded, which is good, but the prose is very long and repeats the filed-vs-granted lag explanation in multiple places (description body and filed_after/granted_after schema fields), adding bulk without new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter search tool with an output schema, the description covers selection logic, pagination cap, synonym handling, failure modes, and authentication (_apiKey). Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema: choosing the date field based on the question's verb, the exact corporate-suffix requirement for applicant with worked examples, and the "*" wildcard for keyword-free filtering. Some content duplicates the schema, but the routing logic is net-new.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Search USPTO patent applications and grants") and immediately differentiates scope from siblings like get_patent and search_inventors by describing the default corpus behaviour. An agent can distinguish this from retrieval tools without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use rules: filed_after/filed_before for filing-activity questions, granted_after/granted_before only when the question says GRANTED/ISSUED/APPROVED, and warns that adding a grant bound silently drops pending applications. It also names the fallback behaviour (broadened retry) and when zero is genuinely correct.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.