{
  "serverInfo": {
    "name": "goalieip-trademarks",
    "version": "1.0.0"
  },
  "authentication": {
    "required": true,
    "schemes": [
      "bearer",
      "oauth"
    ]
  },
  "tools": [
    {
      "name": "search_trademarks",
      "title": "Search US trademarks",
      "description": "Use this to look up and filter existing U.S. trademarks by any field — even if the user doesn't say \"trademark.\" For example: finding who owns a brand, listing an owner's or a competitor's filings, finding marks that cover certain goods or services, checking a mark's status or dates, or finding a logo by its USPTO text description. Searches Goalie IP's daily-refreshed copy of the U.S. federal (USPTO) trademark register — 14M+ applications and registrations — by mark text (exact, contains, or a typo-tolerant spelling lookup), owner, goods/services, class, status, dates, attorney of record, and more. Text matches ignore punctuation between words — \"COCA COLA\" also finds COCA-COLA and COCACOLA — so there is no need to retry spelling variants of separators. The spelling lookup is not a proposed-name conflict screen: it does not search phonetic equivalents or rank potential conflicts. To screen a proposed brand, product, app, or company name for conflicting or similar marks — including sound-alikes — use find_similar_marks instead. Not for domain names, social media handles, state business-name registrations, unregistered common-law use, or non-U.S. trademark offices. Every search needs at least one text filter (markLiteral, ownerName, serialNumber, registrationNumber, goodsAndServices, attorneyName, markDescription, pseudoMark, translation, transliteration, or disclaimer); class, status, and date filters alone are not enough. Returns summary rows — use get_trademark for a full record. Results are register records, not legal advice or a clearance opinion.",
      "inputSchema": {
        "type": "object",
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "markLiteral": {
            "description": "The mark text to search for, e.g. \"GOALIE\". Minimum 3 characters unless markLiteralMode is \"exact\".",
            "type": "string"
          },
          "markLiteralMode": {
            "description": "How to match markLiteral. \"contains\" (default) substring; \"exact\" whole-string, required for short marks like \"3M\"; \"fuzzy\" typo-tolerant spelling lookup (approximate written-text matching), for misspellings and spelling variants of a mark already on the register. Fuzzy is not a proposed-name conflict screen: it does not search phonetic equivalents (KWIK vs QUICK) or rank potential conflicts — for that, use find_similar_marks.",
            "type": "string",
            "enum": [
              "contains",
              "exact",
              "fuzzy"
            ]
          },
          "ownerName": {
            "description": "Owner name, substring match. Minimum 3 characters.",
            "type": "string"
          },
          "goodsAndServices": {
            "description": "Text from the goods/services description. Minimum 3 characters (\"contains\") or 2 (\"words\").",
            "type": "string"
          },
          "goodsAndServicesMode": {
            "description": "\"contains\" substring (default); \"words\" full-text word match, better for multi-word phrases.",
            "type": "string",
            "enum": [
              "contains",
              "words"
            ]
          },
          "serialNumber": {
            "description": "Exact USPTO serial number.",
            "type": "string"
          },
          "registrationNumber": {
            "description": "Exact USPTO registration number.",
            "type": "string"
          },
          "attorneyName": {
            "description": "Attorney of record, substring match. Minimum 3 characters.",
            "type": "string"
          },
          "markDescription": {
            "description": "The USPTO description of the mark (its design/literal elements in words), substring match. Minimum 3 characters.",
            "type": "string"
          },
          "pseudoMark": {
            "description": "USPTO-assigned alternate spelling of the mark — the office normalizes stylized, misspelled, or phonetic marks (e.g. \"GR8\" → \"GREAT\", \"U\" → \"YOU\"). The best field for catching phonetic and stylized variants. Substring match, minimum 3 characters.",
            "type": "string"
          },
          "translation": {
            "description": "English translation of non-English wording in the mark, substring match. Minimum 3 characters.",
            "type": "string"
          },
          "transliteration": {
            "description": "Transliteration of non-Latin characters in the mark, substring match. Minimum 3 characters.",
            "type": "string"
          },
          "disclaimer": {
            "description": "Disclaimed wording in the mark, substring match. Minimum 3 characters.",
            "type": "string"
          },
          "internationalClasses": {
            "description": "International class numbers, e.g. [\"025\",\"009\"]. NOT a narrowing filter on its own.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "currentStatusCode": {
            "description": "USPTO status codes; ranges like \"700-750\" are accepted. Code ranges mix live and dead (710 is CANCELLED); to keep only live or only dead marks, use liveStatus. NOT a narrowing filter on its own.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "liveStatus": {
            "description": "\"live\" for registered and pending marks only; \"dead\" for abandoned, cancelled, or expired only. NOT a narrowing filter on its own.",
            "type": "string",
            "enum": [
              "live",
              "dead"
            ]
          },
          "filingDateFrom": {
            "description": "Earliest filing date, YYYY-MM-DD.",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "filingDateTo": {
            "description": "Latest filing date, YYYY-MM-DD.",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "registrationDateFrom": {
            "description": "Earliest registration date, YYYY-MM-DD.",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "registrationDateTo": {
            "description": "Latest registration date, YYYY-MM-DD.",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "page": {
            "description": "1-based page number. Default 1.",
            "type": "integer",
            "minimum": 1,
            "maximum": 1000
          },
          "pageSize": {
            "description": "Results per page, 1-15. Default 10.",
            "type": "integer",
            "minimum": 1,
            "maximum": 15
          }
        }
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "get_trademark",
      "title": "Get a US trademark record",
      "description": "Use this when the user gives a U.S. trademark serial number, or wants full details on a specific mark found with search_trademarks. Returns the complete record from Goalie IP's daily-refreshed copy of the USPTO register: full goods/services text, owner details, status and status history, classifications, and filing and registration dates. Takes a serial number; to look up a registration number, find its serial with search_trademarks first.",
      "inputSchema": {
        "type": "object",
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "serialNumber": {
            "type": "string",
            "minLength": 1,
            "description": "The USPTO serial number to look up."
          }
        },
        "required": [
          "serialNumber"
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "find_similar_marks",
      "title": "Find similar US trademarks",
      "description": "Use this when a user is choosing, checking, or planning to register a name for a product, brand, app, or company and wants to know which existing U.S. trademarks might conflict with it or stand in the way — before filing, launching, or rebranding, even if they only say \"is this name taken?\" This is the tool for any proposed name. Screens it against Goalie IP's daily-refreshed copy of the U.S. federal (USPTO) register in one call, catching exact matches, spelling variants, sound-alikes (KWIK vs QUICK, SAYKO vs SEIKO), and the USPTO's own readings of stylized marks (EZ read as EASY), ranked by match strength and by how closely their classes relate to the user's, using the USPTO coordinated-class table. Give the international classes for the goods or services when known. It matches spelling and sound, not meaning: when the name's idea has other common wordings (GOALIE, GOALKEEPER, GOALTENDER), screen each of them too. Returns every strong match (more when the field is crowded), with dead marks listed separately. Covers U.S. federal filings only — not web, marketplace, state, or foreign use. A screening aid, not a clearance search or legal opinion; use search_trademarks to explore the register by owner, goods, or dates, and get_trademark for a full record.",
      "inputSchema": {
        "type": "object",
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "mark": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "The proposed mark: the word or phrase being considered, e.g. \"KWIK KLEEN\"."
          },
          "classes": {
            "description": "International class numbers for the goods or services, e.g. [\"3\"] or [\"009\",\"042\"]. Related classes are added automatically using the USPTO coordinated-class table. Strongly recommended: without classes every class is searched and results are broader.",
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "includeDead": {
            "description": "Abandoned, cancelled, or expired marks, listed separately from live marks. \"recent\" (default): died within the last 3 years, plus older marks that match exactly or nearly (same text, USPTO reading, or the same or nearly the same sound) in the same or a closely related class. \"all\": any age. Either way the strongest few (5, plus up to 3 older near-exact matches in recent mode) are listed. \"none\": omit.",
            "type": "string",
            "enum": [
              "recent",
              "all",
              "none"
            ]
          },
          "minTier": {
            "description": "Lowest match strength to return. Default: all high matches, plus medium ones when fewer than 10 are high — so the result size reflects how crowded the field is, from a handful to dozens. \"medium\" or \"low\" widens the list.",
            "type": "string",
            "enum": [
              "high",
              "medium",
              "low"
            ]
          },
          "page": {
            "description": "Page of the selected matches, 100 per page; the summary says how many pages there are. Default 1.",
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          }
        },
        "required": [
          "mark"
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "get_deadlines",
      "title": "Get US trademark deadlines",
      "description": "Use this when the user asks what is due, or when, for a U.S. trademark or a trademark portfolio — office action response dates, statement of use and extension deadlines after a notice of allowance, Section 8 and Section 71 declarations, Section 9 renewals, grace periods, and revival windows. Give a serialNumber for one mark, or an ownerName for upcoming deadlines across that owner's marks, soonest first. Each deadline comes with the date it was computed from, the filing window and grace period where they apply, and the extended date where a fee-paid extension is available. When a date falls on a weekend or Federal holiday, fileBy gives the next business day, the last day a filing is timely (37 CFR 2.196). Owner results are paged, 15 per page. Dates are computed from the status and dates in Goalie IP's daily-refreshed copy of the USPTO register, so a filing made in the last few days may not be reflected yet. Covers U.S. federal deadlines only — not WIPO renewals of international registrations, and not TTAB-set trial dates. A computed date to confirm with the USPTO, not legal advice.",
      "inputSchema": {
        "type": "object",
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "serialNumber": {
            "description": "A USPTO serial number: report the next deadline for that one mark.",
            "type": "string"
          },
          "ownerName": {
            "description": "Owner name, substring match, minimum 3 characters: report upcoming deadlines across the owner's marks. Substring matching can include similarly named owners — each result names its owner.",
            "type": "string"
          },
          "withinDays": {
            "description": "ownerName mode: include deadlines due up to this many days ahead, or whose filing window (Section 8, 71, or 9) opens within it. Default 365. When none qualify, the next deadline after the window is returned, marked beyondWindow. Deadlines already passed are included while still curable — inside a grace period or a fee-paid extension.",
            "type": "integer",
            "minimum": 1,
            "maximum": 3650
          },
          "includeDead": {
            "description": "ownerName mode: include abandoned or cancelled marks that are still inside a revival or transformation window. Default false.",
            "type": "boolean"
          },
          "page": {
            "description": "ownerName mode: page of the deadlines, 15 per page, soonest first; the summary says how many pages there are. Default 1.",
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          }
        }
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      }
    },
    {
      "name": "get_account",
      "title": "Get account status",
      "description": "Use this when the user asks which Goalie account is connected, what plan it is on, how many API calls are used or left this month, when the allowance resets, or why searches are being refused for a usage limit. Reports the connected account's email, plan, authentication method (OAuth or API key), and calls used, included, and remaining this billing period, plus the reset date. Takes no arguments, reports only on the connected account, and does not count against the monthly allowance.",
      "inputSchema": {
        "type": "object",
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {}
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      }
    }
  ],
  "resources": [],
  "prompts": []
}
