A Model Context Protocol (MCP) server that provides tools for searching and retrieving USPTO trademark information using the TSDR API.
This MCP server provides the following tools:
- trademark_search_by_serial: Search for trademark information using an 8-digit serial number
- trademark_search_by_registration: Search for trademark information using a 7-8 digit registration number
- trademark_status: Get comprehensive status information for a trademark (HTML format)
- trademark_image: Retrieve trademark image URLs
- trademark_documents: Get document bundle URLs for a trademark
pnpm install
pnpm build
Important: The USPTO TSDR API requires an API key since October 2020. You must:
- Register at USPTO Developer Portal
- Get your API key from your account dashboard
- Set environment variable:
USPTO_API_KEY=your_api_key_here
Without an API key, all requests will return 401 Unauthorized errors.
You can run the server directly using npx without installing:
# Set your API key first
export USPTO_API_KEY=your_api_key_here
# Then run the server
npx trademark-mcp-server
This will start the MCP server in stdio mode, ready to receive MCP protocol messages.
If you have the package installed locally:
pnpm start
# or directly
node dist/bin.js
A convenience shell script is provided:
./start-mcp-server.sh
# Set your API key first
export USPTO_API_KEY=your_api_key_here
# Start HTTP server (default port 3000)
pnpm serve
# or directly
node dist/server.js
# Or specify a custom port
PORT=8080 pnpm serve
The HTTP server provides:
- Health check:
http://localhost:3000/health
- Server info:
http://localhost:3000/
- MCP endpoint:
http://localhost:3001/mcp
(FastMCP on port+1)
Run the trademark server as a Docker container:
# Pull and run from GitHub Container Registry
docker run -d \
--name trademark-mcp-server \
-p 3000:3000 \
-e USPTO_API_KEY=your_api_key_here \
ghcr.io/jordanburke/trademark-mcp-server:latest
Create a docker-compose.yml
file:
version: '3.8'
services:
trademark-mcp-server:
image: ghcr.io/jordanburke/trademark-mcp-server:latest
ports:
- "3000:3000"
environment:
- USPTO_API_KEY=your_api_key_here
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
Then run:
docker-compose up -d
# Build the image
docker build -t trademark-mcp-server .
# Run the container
docker run -d \
--name trademark-mcp-server \
-p 3000:3000 \
-e USPTO_API_KEY=your_api_key_here \
trademark-mcp-server
# View logs
docker logs trademark-mcp-server
# Health check
curl http://localhost:3000/health
- Base Image:
node:18-alpine
(lightweight Linux distribution) - Multi-architecture: Supports both
linux/amd64
andlinux/arm64
- Security: Runs as non-root user (
trademark:nodejs
) - Health Checks: Built-in health monitoring on
/health
- Production Ready: Optimized for production deployments
# Set your API key first
export USPTO_API_KEY=your_api_key_here
# Run in development mode with file watching
pnpm serve:dev
# Run with MCP Inspector for debugging and testing
pnpm inspect
# or use the convenience script
./inspect-server.sh
# Run tests
pnpm test
# Lint and format
pnpm lint
pnpm format
The MCP Inspector provides a web-based interface for testing MCP servers:
# Start the inspector (opens browser at http://localhost:5173)
pnpm inspect
# Or use the standalone script
./inspect-server.sh
The inspector allows you to:
- Test all tools interactively through a web UI
- View server capabilities and available tools
- Send requests and see responses in real-time
- Debug issues with detailed logging
- Validate MCP protocol compliance
This server uses the USPTO TSDR (Trademark Status & Document Retrieval) API:
- Base URL:
https://tsdrapi.uspto.gov/ts/cd
- Status Info (JSON):
/casestatus/sn[SERIAL]/info.json
or/casestatus/rn[REGISTRATION]/info.json
- Status Info (HTML):
/casestatus/sn[SERIAL]/content.html
- Trademark Images:
/rawImage/[SERIAL]
- Document Bundles:
/casedocs/bundle.pdf?sn=[SERIAL]
- Visit USPTO Developer Portal
- Create an account or log in
- Navigate to your account dashboard
- Generate a new API key for TSDR access
- Copy your API key for use with this server
For questions about API keys, contact: [email protected]
- General API calls: 60 requests per minute per API key
- PDF/ZIP downloads: 4 requests per minute per API key
You can test these examples using the MCP Inspector (pnpm inspect
) or by calling the tools directly.
// Example serial number: 78787878
{
"name": "trademark_search_by_serial",
"arguments": {
"serialNumber": "78787878"
}
}
// Example registration number: 1234567
{
"name": "trademark_search_by_registration",
"arguments": {
"registrationNumber": "1234567"
}
}
{
"name": "trademark_image",
"arguments": {
"serialNumber": "78787878"
}
}
Try these working examples in the MCP Inspector:
- Apple trademark: Serial number
78462704
- Nike trademark: Serial number
72016902
- Microsoft trademark: Serial number
78213220
Add this to your claude_desktop_config.json
:
{
"mcpServers": {
"trademark-mcp-server": {
"command": "npx",
"args": ["trademark-mcp-server"],
"env": {
"USPTO_API_KEY": "your_api_key_here"
}
}
}
}
If you have the package installed locally:
{
"mcpServers": {
"trademark-mcp-server": {
"command": "node",
"args": ["/path/to/trademark-mcp-server/dist/bin.js"],
"env": {
"USPTO_API_KEY": "your_api_key_here"
}
}
}
}
You can also use the provided shell script:
{
"mcpServers": {
"trademark-mcp-server": {
"command": "/path/to/trademark-mcp-server/start-mcp-server.sh",
"env": {
"USPTO_API_KEY": "your_api_key_here"
}
}
}
}
MIT
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests and linting:
pnpm test && pnpm lint
- Submit a pull request
For more information about the USPTO TSDR API, visit: