MarkMesh MCP — trademark data your agent can cite
Connect Claude (Desktop or Code), or any Model ContextProtocol client, to MarkMesh: anormalised trademark corpus across 30+ national and regional registers.
Three things this gives an agent that a wrapper around office APIs cannot:
- Provenance on every record. Which register it came from, when we fetchedit, and a link to that office's own entry where the office publishes one.Your agent cites us, we cite the register.
- Monitoring, not just search. Register a watch and poll what changed.Monitoring needs something persistent to compare against, and a pass-throughproxy holds nothing between calls.
- Predictable lookups. Most registers are served from our own store, so alookup doesn't wait on an office API. Where we do query an office live, theresponse says so. See the live coverage table.
For trademark lawyers and IP teams who want their portfolio one questionaway, and for builders putting trademark data underneath their own product.
Quickstart
- Get an API key — in MarkMesh, go to Developers → API keys(
mm_test_…to experiment,mm_live_…for a real portfolio). - Add the connector — point your client at
https://markmesh.com/api/v1/mcpwith headerAuthorization: Bearer <your-key>. Full steps in SETUP.md. - Ask — restart your client and try one of the questions below.
Thirty seconds in
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, becausethe API deliberately returns neither.
What you can ask
| 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 |
Build on it
- examples/watch_bot.py — a complete monitoringbot in one file, standard library only. Fork it.
- SKILL.md — the agent skill: drop it in a Claude Code skillsdir, or use it as guidance for any MCP client.
- reference/tools.md — full tool + argumentreference, including what every response guarantees.
- SETUP.md — get a key and wire up Claude Desktop / Claude Code.
- llms.txt — machine-readable summary ofthe whole surface.
Capabilities & limits
- Read trademarks, filings (with renewal/expiry deadlines), clients andorganisations.
- Search registers for marks, and run conflict research against ashortlist of names, scoped by Nice class.
- Import a filing into the portfolio, and refresh an existing one.
- Watch a filing and poll what changed.
- Scoped & safe: every request is limited to the key's organisation andgated by the same permissions as the app. There are no delete tools overMCP; destructive edits stay in the web app.
- Not legal advice. MarkMesh returns trademark data with its provenance.Whether a mark is available to use is a legal judgement for a qualifiedprofessional, and the conflict tool returns no verdict by design.
- Sandbox: a
mm_test_*key gets its own isolated portfolio —trademarks, filings, clients and watches are separate from any liveorganisation. Office search is not sandboxed:search_officeandsearch_conflictsread 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 canevaluate real cross-office coverage before you pay. Only calls that goout to a live office adapter are routed to test endpoints.
Support
Questions or a key that won't connect → your MarkMesh administrator, or theDevelopers section of the app. Found a bug in this skill or these docs →open an issue on this repo.
MIT licensed. © MarkMesh LTD.