Lookup Patent
lookup_patentLook up a US patent by number to retrieve full details including title, abstract, assignee, inventors, classifications, dates, claims, and citations.
Instructions
Look up a single US patent by patent number. Returns full details including title, abstract, assignee, inventors, CPC classifications, grant date, filing date, number of claims, and citation counts. Source: USPTO PatentsView.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| patent_number | Yes | Patent number (e.g. 11234567, D123456, RE12345) |
Implementation Reference
- src/tools/patents.ts:129-150 (handler)Handler function for the lookup_patent tool. Calls the API endpoint /api/v1/patents/{patent_number} with the user-provided patent number, returns patent details (title, abstract, assignee, inventors, CPC classifications, dates, claims count, citations) as JSON.
async ({ patent_number }) => { const res = await apiGet<{ dataset: string; data: Record<string, unknown> }>( `/api/v1/patents/${encodeURIComponent(patent_number)}`, ); if (!res.ok) { const msg = res.status === 404 ? `Patent ${patent_number} not found in the patent dataset.` : `API error (${res.status}): ${JSON.stringify(res.data)}`; return { content: [{ type: "text" as const, text: msg }], isError: res.status !== 404, }; } return { content: [ { type: "text" as const, text: JSON.stringify(res.data.data, null, 2) }, ], }; }, - src/tools/patents.ts:114-128 (schema)Schema/input definition for lookup_patent tool. Requires a single 'patent_number' string validated by regex (/^[A-Z]{0,2}\d{1,10}[A-Z]?\d*$/). Title and description explain it returns full patent details from USPTO PatentsView.
server.registerTool( "lookup_patent", { title: "Lookup Patent", description: "Look up a single US patent by patent number. Returns full details including title, " + "abstract, assignee, inventors, CPC classifications, grant date, filing date, " + "number of claims, and citation counts. Source: USPTO PatentsView.", inputSchema: { patent_number: z .string() .regex(/^[A-Z]{0,2}\d{1,10}[A-Z]?\d*$/, "Invalid patent number format") .describe("Patent number (e.g. 11234567, D123456, RE12345)"), }, }, - src/tools/patents.ts:114-151 (registration)Registration of the lookup_patent tool on the MCP server via server.registerTool('lookup_patent', ...) within the registerPatentTools function.
server.registerTool( "lookup_patent", { title: "Lookup Patent", description: "Look up a single US patent by patent number. Returns full details including title, " + "abstract, assignee, inventors, CPC classifications, grant date, filing date, " + "number of claims, and citation counts. Source: USPTO PatentsView.", inputSchema: { patent_number: z .string() .regex(/^[A-Z]{0,2}\d{1,10}[A-Z]?\d*$/, "Invalid patent number format") .describe("Patent number (e.g. 11234567, D123456, RE12345)"), }, }, async ({ patent_number }) => { const res = await apiGet<{ dataset: string; data: Record<string, unknown> }>( `/api/v1/patents/${encodeURIComponent(patent_number)}`, ); if (!res.ok) { const msg = res.status === 404 ? `Patent ${patent_number} not found in the patent dataset.` : `API error (${res.status}): ${JSON.stringify(res.data)}`; return { content: [{ type: "text" as const, text: msg }], isError: res.status !== 404, }; } return { content: [ { type: "text" as const, text: JSON.stringify(res.data.data, null, 2) }, ], }; }, ); - src/index.ts:33-61 (registration)Top-level registration: registerPatentTools(server) is called at line 45 in createMcpServer(), which registers all patent tools including lookup_patent.
function createMcpServer() { const server = new McpServer({ name: "verilex-data", version: "0.3.3", }); registerNpiTools(server); registerSecTools(server); registerPacerTools(server); registerWeatherTools(server); registerOtcTools(server); registerTrademarkTools(server); registerPatentTools(server); registerCompanyTools(server); registerCryptoTools(server); registerSanctionsTools(server); registerWhaleTools(server); registerLabelTools(server); registerHolderTools(server); registerDexTools(server); registerContractTools(server); registerPmTools(server); registerPmArbTools(server); registerPmResolutionTools(server); registerEconTools(server); registerPmMicroTools(server); return server; } - src/client.ts:44-76 (helper)The apiGet helper function used by the lookup_patent handler to make HTTP GET requests to the Verilex API.
export async function apiGet<T = unknown>( path: string, params?: Record<string, string | number | undefined>, ): Promise<ApiResponse<T>> { const url = buildUrl(path, params); const headers: Record<string, string> = { Accept: "application/json", "User-Agent": "verilex-mcp-server/0.1.0", }; // Forward x402 payment token if present in env (for paid endpoints) const paymentToken = process.env.VERILEX_PAYMENT_TOKEN; if (paymentToken) { headers["X-Payment-Token"] = paymentToken; } const res = await fetch(url, { headers }); const data = (await res.json()) as T; const stale = res.headers.get("X-Data-Stale"); const lastUpdated = res.headers.get("X-Data-Last-Updated"); const ageSeconds = res.headers.get("X-Data-Age-Seconds"); return { ok: res.ok, status: res.status, data, stale: stale === "true", lastUpdated: lastUpdated ?? undefined, ageSeconds: ageSeconds ? Number(ageSeconds) : undefined, }; }