Skip to main content
Glama

Get Trademark By Registration

get_trademark_by_registration
Read-onlyIdempotent

Look up one US trademark by its registration number (e.g. "4872338"): mark text, serial number, current status and live flag, owners of record, attorney of record, registration/renewal/cancellation dates, international classes and goods/services, with data_as_of. Keyless. Optional api_key switches to USPTO's TSDR case-status record instead.

Example tool call

This call uses example arguments supplied in the tool’s input schema.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "registration_number": "4872338"
    },
    "name": "get_trademark_by_registration"
  }
}

Input Schema

NameRequiredDescriptionDefault
api_keyNoOptional USPTO TSDR API key. Omit for the keyless register record.
registration_numberYesUSPTO registration number (e.g., "4872338")

Output Schema

NameRequiredDescriptionDefault
hintNo
foundNoKeyless path: whether the register holds this number
reasonNoWhen found is false: not_in_register, invalid_number or upstream_unavailable
recordNoRegister record (keyless path)
sourceNo
statusNoCurrent status of the trademark
attorneyNoAttorney name if applicable
deliveryNo
mark_textNoText or verbal element of the mark
data_as_ofNo
owner_nameNoOwner/applicant name
filing_dateNoApplication filing date
status_dateNoDate of the current status
other_matchesNo
raw_availableNoWhether raw XML data was available
serial_numberNoUSPTO serial number
goods_servicesNoGoods and services description
registration_dateNoTrademark registration date
international_classNoInternational classification number
registration_numberNoTrademark registration number

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "api_key": "your-trademarks-api-key",
      -    "registration_number": "1234567"
      -  },
      -  {
      -    "registration_number": "5678901"
      -  }
      -]New value: +[
      +  {
      +    "registration_number": "4872338"
      +  }
      +]
    • changedInput schema / properties / api_key / description
      Previous value: -"USPTO API key"New value: +"Optional USPTO TSDR API key. Omit for the keyless register record."
    • changedInput schema / properties / registration_number / description
      Previous value: -"USPTO registration number (e.g., \"1234567\")"New value: +"USPTO registration number (e.g., \"4872338\")"
    • addedOutput schema / description
      Added value: +"Without api_key: {found, source, data_as_of, record} from the USPTO register. With a TSDR api_key: the flat TSDR case-status fields."
    • addedOutput schema / properties / data_as_of
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / delivery
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / found
      Added value: +{
      +  "description": "Keyless path: whether the register holds this number",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / hint
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / other_matches
      Added value: +{
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / reason
      Added value: +{
      +  "description": "When found is false: not_in_register, invalid_number or upstream_unavailable",
      +  "type": "string"
      +}
    • addedOutput schema / properties / record
      Added value: +{
      +  "description": "Register record (keyless path)",
      +  "properties": {
      +    "abandon_date": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "assignment_recorded": {
      +      "type": "boolean"
      +    },
      +    "attorney_of_record": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "cancel_date": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "current_basis": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "data_as_of": {
      +      "description": "When USPTO last loaded this record into the register index",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "disclaimer": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "filed_date": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "first_use_date": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "first_use_in_commerce_date": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "goods_services": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "international_classes": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "international_registration_number": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "live": {
      +      "type": "boolean"
      +    },
      +    "mark_description": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "mark_type": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "original_basis": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "owner": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "owners_of_record": {
      +      "items": {
      +        "properties": {
      +          "citizenship": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "entity_type": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "location": {
      +            "description": "City / state / country for organisations only; always null for natural persons. Street addresses are never served.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "natural_person": {
      +            "type": "boolean"
      +          },
      +          "role": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "published_for_opposition_date": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "register": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "registration_date": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "registration_number": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "renewal_date": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "serial_number": {
      +      "type": "string"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "status_code": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "url": {
      +      "type": "string"
      +    },
      +    "wordmark": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / source
      Added value: +{
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "attorney": {
      +      "description": "Attorney name if applicable",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "filing_date": {
      +      "description": "Application filing date",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "goods_services": {
      +      "description": "Goods and services description",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "international_class": {
      +      "description": "International classification number",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "mark_text": {
      +      "description": "Text or verbal element of the mark",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "owner_name": {
      +      "description": "Owner/applicant name",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "raw_available": {
      +      "description": "Whether raw XML data was available",
      +      "type": "boolean"
      +    },
      +    "registration_date": {
      +      "description": "Trademark registration date",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "registration_number": {
      +      "description": "Trademark registration number",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "serial_number": {
      +      "description": "USPTO serial number",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "status": {
      +      "description": "Current status of the trademark",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "status_date": {
      +      "description": "Date of the current status",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  3. Changed1 schema field changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "api_key": "your-trademarks-api-key",
      +    "registration_number": "1234567"
      +  },
      +  {
      +    "registration_number": "5678901"
      +  }
      +]
  4. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover read-only, idempotency, open-world and non-destructiveness, so the description only needed to add what they don't say — and it does: "Keyless" (no auth required by default) and the api_key switch to a different upstream record source. It also mentions data_as_of, hinting at data freshness. It stops short of stating not-found behavior for a bad registration number.

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

Conciseness4/5

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

Front-loaded with the verb and identifier, then a dense but purposeful field list, then the auth branch. The middle field enumeration is long but each item is a distinct return field an agent would want to know about; only minor trimming is possible.

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?

An output schema exists so return structure needs no prose, annotations carry the safety profile, and the description still covers auth mode, alternate upstream source, and a concrete example value. An agent has everything needed to select and invoke this correctly.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented, and the description's api_key sentence largely restates the schema's own "Omit for the keyless register record." The one genuine addition is naming the alternate source as TSDR case-status rather than just "TSDR record," which helps an agent anticipate a different payload shape.

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+identifier ("Look up one US trademark by its registration number") and enumerates what comes back: mark text, serial, status/live flag, owners, attorney, dates, classes, goods/services, data_as_of. That enumeration plus the registration-number key distinguishes it cleanly from get_trademark_by_serial and the search tools.

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

Usage Guidelines4/5

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

The identifier-based framing makes the when-to-use condition clear (you have a registration number, not a serial number or a query) and the second sentence gives the one branch point that exists: keyless default vs. api_key for TSDR case status. It never names get_trademark_by_serial or get_trademark_documents explicitly, so the exclusion is inferred rather than stated.

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.