Trademark search, monitoring and conflict research across 30+ registers, with provenance.
Connect Claude (Desktop or Code), or any Model Context Protocol client, to MarkMesh: a normalised trademark corpus across 30+ national and regional registers.
Three things this gives an agent that a wrapper around office APIs cannot:
For trademark lawyers and IP teams who want their portfolio one question away, and for builders putting trademark data underneath their own product.
mm_test_… to experiment, mm_live_… for a real portfolio).https://markmesh.com/api/v1/mcp with header
Authorization: Bearer <your-key>. Full steps in SETUP.md.Once connected, this is the shape of a real exchange:
You: Is "Kestrel" already taken in software, in the EU and UK?
Claude: I checked EUIPO and UKIPO for classes 9 and 42.
Three candidates, closest first:
KESTREL EUIPO 018745231 registered
text similarity 1.00 · shares classes 9, 42 · same territory
https://euipo.europa.eu/eSearch/#details/trademarks/018745231
(from our corpus, fetched 30 Jul 2026)
KESTRAL UKIPO UK00003891234 registered
text similarity 0.94 · shares class 9 · same territory
https://trademarks.ipo.gov.uk/...
KESTREL LABS EUIPO 018991002 pending
text similarity 0.72 · shares class 42 · same territory
Both offices answered, so nothing is missing from this run.
I can't tell you whether the name is clear to use. That turns on
how the goods and services are worded and whether these marks are
actually in use, which needs a qualified professional. Want me to
watch the pending one for status changes?
Note what it does not say. There's no risk score and no verdict, because the API deliberately returns neither.
| You say | It uses |
|---|---|
| "List my trademarks for client Acme." | list_trademarks, list_clients |
| "What's expiring in the next 90 days?" | list_filings (deadline fields) |
| "Search USPTO and EUIPO for 'orbital'." | search_office |
| "Does 'Kestrel' conflict with anything in class 9?" | search_conflicts |
| "Import EU trademark 018xxxxxx for Acme." | import_filing_from_office |
| "Tell me if that filing's status changes." | create_watch |
| "What changed since Monday?" | watch_changes_since |
mm_test_* key gets its own isolated portfolio —
trademarks, filings, clients and watches are separate from any live
organisation. Office search is not sandboxed: search_office and
search_conflicts read the same public register corpus a live key does,
so a sandbox search returns real marks, not fixtures. That is deliberate
(registers are public data, not tenant data) and it means you can
evaluate real cross-office coverage before you pay. Only calls that go
out to a live office adapter are routed to test endpoints.Questions or a key that won't connect → your MarkMesh administrator, or the Developers section of the app. Found a bug in this skill or these docs → open an issue on this repo.
MIT licensed. © MarkMesh LTD.
This listing does not have a supported local package template. Use the maintainer’s documentation for its hosted endpoint, authentication, and client-specific setup. No install command has been inferred.