@hasna/trademarks
v0.1.5
Published
Universal trademark management for AI coding agents — CLI + MCP server + interactive TUI
Maintainers
Readme
@hasna/trademarks
Universal trademark management for AI coding agents — CLI + MCP server + REST API + Dashboard.
Architecture
3-surface architecture modeled after open-todos:
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ CLI │ │ MCP Server │ │ REST API + UI │
│ Commander + Ink │ │ @modelcontext │ │ Bun.serve + │
│ TUI interface │ │ protocol/sdk │ │ React dashboard │
└────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘
│ │ │
└─────────────────────┼─────────────────────┘
│
┌──────────▼──────────┐
│ SQLite (bun:sqlite)│
│ + FTS5 search │
└─────────────────────┘Quick Start
bun install
bun run build
# CLI
trademarks clients create "Acme Corp"
trademarks tm create "ACME" --client <id> --classes 9,42
trademarks search "ACME" --classes 9,42
trademarks file <id> --jurisdiction US
# MCP Server
TRADEMARKS_PROFILE=full trademarks-mcp | your-mcp-client
# REST API + Dashboard
trademarks-serve --port 3000 --openFeatures
- Client Management — Track clients (companies, individuals) with metadata
- Trademark Portfolio — Full CRUD with auto-generated short IDs (TM-00001)
- Clearance Search — FTS5-based similarity search with Levenshtein scoring
- Deep Research — Multi-jurisdiction research with risk categorization
- Application Filing — Structured filing workflow (ready for open-browser SDK)
- Docketing — Track deadlines, office actions, and milestone events
- Stages — Pipeline stages per trademark with status tracking
- MCP Server — Profile-based tool filtering (minimal/standard/full)
- REST API — JSON API with CORS, serves built dashboard
- React Dashboard — Stats cards, trademark table, status badges
SDK
import { createClient } from "@hasna/trademarks-sdk";
const api = createClient({ baseURL: "http://localhost:3000" });
const client = await api.clients.create({ name: "Acme Corp" });
const tm = await api.trademarks.create({ mark_name: "ACME", client_id: client.id });
const result = await api.search("ACME", { classes: [9, 42] });Database
SQLite via bun:sqlite with WAL mode, foreign keys, 5s busy timeout.
Path resolution:
TRADEMARKS_DB_PATHenv variable.trademarks/trademarks.dbin current directory (nearest).hasna/trademarks/trademarks.dbin home directory
License
Apache-2.0
