query_patents
Search US patents from the USPTO database by title, assignee, inventor, CPC section, type, or grant date range to find specific intellectual property information.
Instructions
Search US patents from the USPTO PatentsView database. Filter by patent title, assignee organization, inventor name, CPC section, patent type, and grant date range. Source: USPTO PatentsView API, updated weekly.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| patent_title | No | Patent title keyword search (partial match) | |
| assignee | No | Assignee organization name (partial match, e.g. 'Google') | |
| inventor | No | Inventor name (partial match, e.g. 'Smith') | |
| cpc_section | No | CPC section letter (A=Human Necessities, B=Operations, C=Chemistry, D=Textiles, E=Fixed Constructions, F=Mechanical Engineering, G=Physics, H=Electricity) | |
| patent_type | No | Patent type: utility, design, plant, reissue | |
| date_from | No | Start date for patent grant (YYYY-MM-DD) | |
| date_to | No | End date for patent grant (YYYY-MM-DD) | |
| limit | No | Maximum results to return (default 25, max 100) |
Implementation Reference
- src/tools/patents.ts:31-110 (handler)Registration and handler implementation for the query_patents tool.
server.registerTool( "query_patents", { title: "Query Patents", description: "Search US patents from the USPTO PatentsView database. Filter by patent title, " + "assignee organization, inventor name, CPC section, patent type, and grant date range. " + "Source: USPTO PatentsView API, updated weekly.", inputSchema: { patent_title: z .string() .optional() .describe("Patent title keyword search (partial match)"), assignee: z .string() .optional() .describe("Assignee organization name (partial match, e.g. 'Google')"), inventor: z .string() .optional() .describe("Inventor name (partial match, e.g. 'Smith')"), cpc_section: z .string() .optional() .describe("CPC section letter (A=Human Necessities, B=Operations, C=Chemistry, " + "D=Textiles, E=Fixed Constructions, F=Mechanical Engineering, G=Physics, H=Electricity)"), patent_type: z .string() .optional() .describe("Patent type: utility, design, plant, reissue"), date_from: z .string() .optional() .describe("Start date for patent grant (YYYY-MM-DD)"), date_to: z .string() .optional() .describe("End date for patent grant (YYYY-MM-DD)"), limit: z .number() .int() .min(1) .max(100) .optional() .describe("Maximum results to return (default 25, max 100)"), }, }, async ({ patent_title, assignee, inventor, cpc_section, patent_type, date_from, date_to, limit }) => { const res = await apiGet<PatentQueryResponse>("/api/v1/patents", { patent_title, assignee, inventor, cpc_section, patent_type, date_from, date_to, limit: limit ?? 25, }); if (!res.ok) { return { content: [ { type: "text" as const, text: `API error (${res.status}): ${JSON.stringify(res.data)}`, }, ], isError: true, }; } const { count, data } = res.data; const summary = `Found ${count} patent(s).`; const json = JSON.stringify(data, null, 2); return { content: [{ type: "text" as const, text: `${summary}\n\n${json}` }], }; }, );