Rightshold™ Sign up

Answers · MCP security

I'm publishing an MCP server. How do I name it so users don't confuse it with someone else's server and scanners don't flag it as a lookalike?

Last updated

TL;DR: Choose a name that is still distinct once you ignore case and separators, publish it under a namespace users can tie to you, and use the exact same name everywhere. Lookalike checks usually normalize names before comparing them, so data-bot, databot, data_bot and Data Bot all count as the same name. Many also flag a name that is another name plus a suffix, such as databot and databot-pro. Before you publish, search the places your users look (the official MCP Registry, npm or PyPI, GitHub) for your candidate's normalized form and its prefixes. If you own a domain, publish as com.yourdomain/… rather than io.github.you/…, because the registry ties that namespace to DNS or HTTP proof that users can match to your website. Don't put another company's product name at the front of yours unless you are that company; say what you integrate with in the description instead. npm's naming guidelines ask for names that don't use someone else's trademark or confuse people about authorship. Don't publish extra variants of your name to reserve them in the MCP Registry, either: its moderation policy treats the same server submitted under different names as spam.

What should I check, step by step?

1. If you have a domain, use the reverse-DNS namespace (com.yourcompany/server-name) and prove it with a DNS TXT record or the /.well-known/mcp-registry-auth file. Users can match that to your website, which an io.github namespace can't offer them.

  1. Use one name everywhere: the registry name's server part, the npm or PyPI package name, the repository name, the serverInfo.name your server returns from initialize, and the name in your docs. When these don't match, honest servers look like impersonators.
  2. Normalize your candidate the way lookalike checks do (lowercase, turn every hyphen, underscore, space and dot into one separator, then drop the separators) and compare it with existing names. An equal result, or one name being a prefix of the other, means users can confuse the two.
  3. Search before you publish: the official registry's API accepts /v0/servers?search=<name>; also search npm or PyPI and GitHub for the normalized form, and check Rightshold's public record with name_collision_check.
  4. Leave other vendors' brands out of the name (no slack-, github- or notion- prefix unless you're that vendor). Write "for Slack" in the description and title instead, so the name doesn't suggest the vendor published it.
  5. Don't publish your server several times under variant names to reserve them. The MCP Registry's moderation policy lists "the same server being submitted multiple times under different names" as spam. On npm, publish under a scope you own, which can't be imitated with punctuation.
  6. Keep the display title in one script. Registry names allow only ASCII letters, digits, dots, hyphens and underscores, but a title or client label can mix scripts, and Unicode's security report gives "paypal" written with a Cyrillic а as its example of a mixed-script confusable.
  7. Link the registry listing from your website and README, and link your website from the listing, so a user can confirm the server from either end.

How do lookalike and typosquat checks compare MCP server names?

Many checks reduce each name to a canonical form, a skeleton, and compare skeletons, so changes in case or punctuation don't make a name look new. Rightshold's name-collision check is one example and publishes its rules: names are trimmed, lowercased, have a leading @ removed and have every run of hyphens, underscores, spaces and dots folded into one hyphen. Two names then collide if they are equal (exact_normalized), equal once the separators are removed (separator_variant), or if one separator-free name is a prefix of the other and the shorter one has at least four characters (prefix_variant).

What do the MCP Registry and npm enforce about server and package names?

The official MCP Registry enforces the name's format: a namespace and a name part, starting and ending with a letter or digit, with dots and hyphens (and underscores in the name part) in between. Namespace authentication stops anyone else publishing under your GitHub account or domain. The moderation policy says the registry won't remove servers that do the same thing as other servers, so a similar name under someone else's namespace can stay listed.

How do I check my MCP server name for lookalikes before publishing?

name_collision_check takes a candidate name and returns every public name on Rightshold's record that it reads like (agent handles, display names, verified claimed registry names, and registered servers' names and slugs), the rule each one matched, and the normalized form and skeleton it used, so you can recompute the result. It needs no key and registers nothing.

How do I ask Rightshold about this (free, no key)?

Add the MCP server https://www.rightshold.com/mcp to Claude, Cursor, ChatGPT, Grok or VS Code, then ask: “I'm about to publish an MCP server under this name. Does it read like any agent or server name already on Rightshold's public record, under which rule, and what normalized form and skeleton were compared?”

One-click setup

{
  "tool": "name_collision_check",
  "arguments": {
    "name": "<your candidate server name>"
  }
}

name_collision_check applies three published rules (exact after normalization, separator variant, prefix variant) to names on Rightshold's public record. It computes no edit distance or Unicode confusables, doesn't search the MCP Registry, npm, PyPI or GitHub, and gives no trademark advice.

What are the sources?

Related

Not legal advice. JSON · Markdown · All answers

Get a free API key in one call

No card and no email needed. 100 free credits; the license and policy checks stay free without a key.

curl -s -X POST https://www.rightshold.com/v1/accounts/signup -H "Content-Type: application/json" -d '{"accept_terms":true}'
export RIGHTSHOLD_API_KEY=rs_...   # the api_key from the reply (shown once)
curl -s https://www.rightshold.com/v1/licenses/check -H "Authorization: Bearer $RIGHTSHOLD_API_KEY" \
  -H "Content-Type: application/json" -d '{"license":"MIT","intended_use":{"commercial_use":true}}'