Skip to main content
Glama

Get Trademark By Serial

get_trademark_by_serial
Read-onlyIdempotent

Look up one US trademark by its 8-digit serial (application) number: mark text, current status and live flag, registration number, owners of record, attorney of record, filing/registration/publication/renewal dates, filing basis, 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": {
      "serial_number": "79153306"
    },
    "name": "get_trademark_by_serial"
  }
}

Input Schema

NameRequiredDescriptionDefault
api_keyNoOptional USPTO TSDR API key (free at account.uspto.gov/api-manager). Omit for the keyless register record.
serial_numberYesUSPTO serial number (e.g., "79153306")

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",
      -    "serial_number": "97123456"
      -  },
      -  {
      -    "serial_number": "90876543"
      -  }
      -]New value: +[
      +  {
      +    "serial_number": "79153306"
      +  }
      +]
    • changedInput schema / properties / api_key / description
      Previous value: -"USPTO API key (register free at account.uspto.gov/api-manager)"New value: +"Optional USPTO TSDR API key (free at account.uspto.gov/api-manager). Omit for the keyless register record."
    • changedInput schema / properties / serial_number / description
      Previous value: -"USPTO serial number (e.g., \"97123456\")"New value: +"USPTO serial number (e.g., \"79153306\")"
    • 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",
      +    "serial_number": "97123456"
      +  },
      +  {
      +    "serial_number": "90876543"
      +  }
      +]
  4. First observed

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so safety/idempotency are covered. The description adds real context — keyless operation, data_as_of freshness, and that api_key switches to USPTO's TSDR record — but omits rate limits, error behavior for invalid serials, and cross-source result differences beyond the one-line mention.

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 core lookup verb and key, followed by a compact field list and a short api_key clause. The field enumeration is somewhat long given an output schema exists, but it remains readable and earns most of its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only single-record lookup with full schema coverage, annotations, and an output schema, the description covers the essentials: what it returns, that it is keyless, and the TSDR switch. Missing only edge-case behavior (invalid serial, no-hit handling), which is minor given the structured fields.

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 description coverage is 100%, so both parameters are already documented. The description's api_key explanation overlaps with the schema's own 'Omit for the keyless register record' note and adds little beyond it; serial_number format is also restated from the schema. Baseline 3 is appropriate.

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?

States a specific verb ('Look up') and resource ('one US trademark by its 8-digit serial (application) number'), and enumerates the returned fields (status, registration number, owners, classes, dates). The serial-number framing distinguishes it from get_trademark_by_registration and search_trademarks without opening either schema.

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?

Clear that this is the one-record lookup to use when you already have a serial number, and the api_key sentence explains when the alternate data path (TSDR case-status) is engaged. It stops short of explicitly naming siblings like get_trademark_by_registration or search_trademarks as alternatives when only a registration number or a name is known.

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.