Skip to main content
Glama

query_trademarks

Search US trademarks from USPTO data by mark text, owner name, class, status, or date range to verify availability and check registrations.

Instructions

Search US trademarks from the USPTO. Filter by mark text, owner name, international class, status, and filing/registration date range. Source: USPTO TSDR and bulk XML data, updated weekly.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
mark_textNoTrademark text/name (partial match, e.g. 'APPLE')
owner_nameNoTrademark owner/applicant name (partial match)
international_classNoNice Classification code (e.g. '009' for computers/electronics)
statusNoTrademark status (e.g. REGISTERED, PENDING, ABANDONED, CANCELLED)
date_fromNoStart date for filing/registration (YYYY-MM-DD)
date_toNoEnd date for filing/registration (YYYY-MM-DD)
limitNoMaximum results to return (default 25, max 100)

Implementation Reference

  • The 'query_trademarks' tool is registered and implemented within 'registerTrademarkTools' in 'src/tools/trademarks.ts'. It uses a Zod schema for input validation and performs an asynchronous API call to fetch trademark data.
    server.registerTool(
      "query_trademarks",
      {
        title: "Query Trademarks",
        description:
          "Search US trademarks from the USPTO. Filter by mark text, owner name, " +
          "international class, status, and filing/registration date range. " +
          "Source: USPTO TSDR and bulk XML data, updated weekly.",
        inputSchema: {
          mark_text: z
            .string()
            .optional()
            .describe("Trademark text/name (partial match, e.g. 'APPLE')"),
          owner_name: z
            .string()
            .optional()
            .describe("Trademark owner/applicant name (partial match)"),
          international_class: z
            .string()
            .optional()
            .describe("Nice Classification code (e.g. '009' for computers/electronics)"),
          status: z
            .string()
            .optional()
            .describe("Trademark status (e.g. REGISTERED, PENDING, ABANDONED, CANCELLED)"),
          date_from: z
            .string()
            .optional()
            .describe("Start date for filing/registration (YYYY-MM-DD)"),
          date_to: z
            .string()
            .optional()
            .describe("End date for filing/registration (YYYY-MM-DD)"),
          limit: z
            .number()
            .int()
            .min(1)
            .max(100)
            .optional()
            .describe("Maximum results to return (default 25, max 100)"),
        },
      },
      async ({ mark_text, owner_name, international_class, status, date_from, date_to, limit }) => {
        const res = await apiGet<TrademarkQueryResponse>("/api/v1/trademarks", {
          mark_text,
          owner_name,
          international_class,
          status,
          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} trademark(s).`;
        const json = JSON.stringify(data, null, 2);
    
        return {
          content: [{ type: "text" as const, text: `${summary}\n\n${json}` }],
        };
      },
    );

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/carrierone/verilexdata-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server