Repository avatar
AI Tools
v0.1.4
active

mcp-server

domains.unique/mcp-server

Domain names, words, TLDs, registrar prices, the domain market, trends and the agenda.

Documentation

Unique Domains MCP server

An MCP server for the Unique Domains API. It lets an AI assistant read domain names, words, TLDs, registrar prices, the domain market, trends and the industry agenda from the Unique Domains catalog.

Every tool reads stored data as of its day. None registers, buys or changes a name.

  • Hosted, no install and no key: https://mcp.unique.domains/mcp
  • On your machine: npx -y @uniquedomains/mcp-server

Connect your assistant

Claude

In Claude (web or Desktop), open Customize, then Connectors, click "+ Add", then "Add custom connector", name it Unique Domains and paste https://mcp.unique.domains/mcp. No sign-in is needed. On a Team or Enterprise plan, an Owner adds it in Organization settings, then Connectors, and members connect it from Customize, then Connectors.

To run it on your machine instead, add this to Claude Desktop's claude_desktop_config.json:

{
  "mcpServers": {
    "uniquedomains": { "command": "npx", "args": ["-y", "@uniquedomains/mcp-server"] }
  }
}

Claude Code

claude mcp add --transport http uniquedomains https://mcp.unique.domains/mcp

Or on your machine, with a member key:

claude mcp add uniquedomains -e UD_API_KEY=ud_live_your_key -- npx -y @uniquedomains/mcp-server

Cursor

Add to Cursor (the direct link is cursor://anysphere.cursor-deeplink/mcp/install?name=uniquedomains&config=eyJ1cmwiOiJodHRwczovL21jcC51bmlxdWUuZG9tYWlucy9tY3AifQ==), or put this in .cursor/mcp.json:

{
  "mcpServers": {
    "uniquedomains": { "url": "https://mcp.unique.domains/mcp" }
  }
}

VS Code

code --add-mcp '{"name":"uniquedomains","type":"http","url":"https://mcp.unique.domains/mcp"}'

Or in .vscode/mcp.json:

{
  "servers": {
    "uniquedomains": { "type": "http", "url": "https://mcp.unique.domains/mcp" }
  }
}

ChatGPT

Go to chatgpt.com/plugins, select the plus button, then "Add custom MCP server". Name it Unique Domains, enter https://mcp.unique.domains/mcp as the server URL with no authentication, then "Create as a plugin". Install the plugin, then in a new conversation type @ and pick it. Your account's or workspace's policies decide whether custom servers can be added.

Any other client

Streamable HTTP at https://mcp.unique.domains/mcp, or stdio with npx -y @uniquedomains/mcp-server.

Plugins

The plugin/ folder is a plugin for the AI assistants that take one. It holds the hosted connector and one skill, which tells the assistant which tool answers which question. It runs nothing on your machine and uses no key.

In Claude Code, run this line:

/plugin install unique-domains --marketplace UniqueDomains/mcp-server

Claude Code asks you to confirm this repository as a marketplace, then opens the plugin's page, where you install it. The line needs Claude Code 2.1.275 or later. On an earlier version, do the same in two steps:

/plugin marketplace add UniqueDomains/mcp-server
/plugin install unique-domains@uniquedomains

Three other tools read files of this repository. Grok Build reads plugin/.grok-plugin/plugin.json, in the same folder. Gemini CLI reads gemini-extension.json at the root, which adds the hosted connector without the skill. For Devin, npm run plugin:devin builds the folder its marketplace takes.

Free tools and a member key

Without a key, the server answers what the Unique Domains website shows anyone: a name's status and registry record, an ending's facts, registrar prices, market aggregates, trends and the agenda.

A member key adds the keyed tools of its plan, the Founder or the Investor plan. Create the key in Unique Domains under Settings, Account, API, then pass it to the server on your machine:

UD_API_KEY=ud_live_your_key npx -y @uniquedomains/mcp-server

The server reads the key's plan once at start and lists the tools that plan opens. The plans are described at unique.domains/api.

The hosted connector serves the free tools only and takes no key. Five free tools are on the npm server only. Three answer one word or one ending a caller a day, and the hosted connector is one caller for all its users: ud_get_market_sales_word, ud_get_word_market, ud_list_tld_prices. ud_get_domain answers what ud_get_name answers, and ud_get_meta_freshness reports how current each part of the data is, which every answer's meta already dates.

What an answer holds

  • structuredContent: the API's data, meta and links, as the tool's output schema describes them.
  • content: one line for a reader (the name and its headline fact, or the row count and the first names), then the same JSON as text.
  • links.details: the public Unique Domains page about the subject, when there is one (hosted connector).
  • On the hosted connector, internal ids (catalog ids, row ids, UUIDs) are left out, times become their UTC day (an auction's deadline keeps its hour), and the stamps of when a figure was computed are dropped. The npm server and the API keep them.
  • A list answers 20 rows by default. When meta.cursor is set, pass it as cursor to read the next page.
  • A refusal is a sentence the assistant can act on: what was wrong, what is accepted, or when a limit resets.

Privacy and security

  • What the connector logs. Nothing of its own. It stores no question, no answer and no caller. It passes each tool's input to the Unique Domains API, and the API's request log keeps one line per call for 12 months: the path, which holds the name or word asked about, with its time, its status and how long it took. A monthly job deletes older lines. The connector calls the API under its own name, so the API never sees your address or an account of yours. When your assistant runs on your own machine, it connects to the connector from your IP address. The connector's hosting providers see it, as they see the address behind any web request, and the connector does not store it. Section 8 of the privacy policy says what the API keeps and why.
  • Registry records. A name's registry answer repeats the registry's public record, which can include the holder's name or organization when the registry publishes it.
  • Every origin is accepted. /mcp answers any Origin with Access-Control-Allow-Origin: *. The server is public, needs no sign-in, holds no session and never serves a member key over HTTP, so checking the origin would protect nothing, and strict origin checks break some assistants' own clients.
  • HTTPS only. The hosted connector answers over HTTPS and sends Strict-Transport-Security: max-age=31536000.
  • Reporting a vulnerability. Write to contact@unique.domains; please do not open a public issue for it.

The same data elsewhere

Tools

56 tools answer without a key (51 on the hosted connector); a member key adds 25 more, the Investor ones for an Investor key only.

ToolWhat it readsNeeds
ud_get_nameStored answer for one domain namefree
ud_batch_namesStored answers for up to 100 domain names in one callInvestor key
ud_check_nameReads one name live from its registry and a registrarmember key
ud_get_name_pricesEvery stored registrar quote for one namemember key
ud_get_name_registryLatest stored registry record of one namefree
ud_get_name_registry_historyStored registry record versions of one name and what moved between themInvestor key
ud_get_name_dnsLatest stored DNS reading of one namefree
ud_list_name_changesChange events of one name, newest firstInvestor key
ud_get_name_historyWeb history of one name in bandsInvestor key
ud_get_name_valueStored value estimate of one name and its last 20 estimatesmember key
ud_appraise_nameRuns the appraisal of one stored name when its estimate is missingInvestor key
ud_get_name_compsSimilar-sales aggregate of one name and how many endings its word sold onfree
ud_get_name_auctionOpen auction of one name, if anyfree
ud_resolve_wordTurns what a caller typed into the catalog word it namesfree
ud_list_word_categoriesCatalog's word categories, by namefree
ud_batch_wordsUp to 100 word profiles in one callInvestor key
ud_list_wordsSearches the catalog's words by text and facetsmember key
ud_get_wordA word's profilemember key
ud_get_word_endingsA word's endings as stored on the latest dayfree
ud_list_word_namesA word's catalog names on the endings that sell, by namemember key
ud_get_word_trademarksA word's trademark counts and its exact-match marksInvestor key
ud_get_word_notabilityA word's Wikipedia and Wikidata factsfree
ud_get_word_marketA word's stored sales and auction aggregatesfree, npm only
ud_list_related_wordsA word's synonyms then related wordsInvestor key
ud_list_word_fitsHow well the word fits each ending whose keywords list itInvestor key
ud_request_wordBrings a word into the catalogInvestor key
ud_get_word_requestState of a word requestInvestor key
ud_list_domainsOne-word catalog names under filtersfree
ud_get_domainOne catalog name, by name or catalog idfree, npm only
ud_list_expiring_domainsCatalog names expiring or expired, by expiry dayInvestor key
ud_get_domain_dropsNames dropping on one day, counted by endingfree
ud_list_domain_hacksDomain hacksfree
ud_list_domain_changesChanges across the catalog's names, newest firstInvestor key
ud_get_catalog_statsCatalog headline totals for the latest dayfree
ud_list_tldsEvery root TLD with its registry facts and launch phasesfree
ud_get_tldOne TLD in fullfree
ud_get_tld_statsEnding's latest market figuresfree
ud_list_tld_phasesEvery dated launch phase of the ending, chronologicalfree
ud_list_tld_changesEnding's public registry changes, newest firstfree
ud_list_tld_keywordsKeywords the catalog attaches to the ending, by typefree
ud_list_tld_applications2026 new gTLD round as ICANN publishes itfree
ud_list_tld_application_changesEvery recorded status or contention change of the roundfree
ud_get_tld_application_stringOne applied-for stringfree
ud_list_registrarsNine registrars whose daily price lists are comparedfree
ud_list_registrar_pricesA registrar's list prices, alphabetical by endingfree
ud_list_registrar_changesA registrar's confirmed list-price changes, newest firstfree
ud_get_registrar_footprintNames tracked under the registrar on the latest footprint daymember key
ud_list_tld_pricesEvery registrar's list price for one endingfree, npm only
ud_list_tld_price_historyChange-only price rows of one ending, newest firstInvestor key
ud_list_price_changesConfirmed registrar price changes across the ninefree
ud_list_price_trapsEndings whose cheapest first year renews at a trap pricefree
ud_list_cheapest_pricesCheapest registrar per ending for up to 100 endingsmember key
ud_list_venuesParking and marketplace venues with a profile and their rounded footprintfree
ud_get_venueOne venue's profile with its verified listing termsfree
ud_list_iana_registrarsIANA registrar list as stored, by IANA idfree
ud_get_iana_registrarOne IANA registrar by idfree
ud_get_market_salesDomain sales pulse as headline aggregatesfree
ud_list_market_sales_seriesOne sales series by day, week or month, oldest firstfree
ud_list_market_sales_endingsEach ending's 12-month and 30-day sales figuresfree
ud_get_market_sales_lengthsSales by label length for .com, .ai, .io and .cofree
ud_list_market_sales_moversUp to ten words whose sales moved over the last 30 daysfree
ud_get_market_sales_wordOne word's sales market over 12 monthsfree, npm only
ud_get_market_auctionsToday's domain auctions by venuefree
ud_list_market_auctions_sampleDay's fixed sample of up to 20 single-word names at auctionfree
ud_list_market_auction_venuesSeven auction venues with their verified rules and today's countsfree
ud_list_market_auction_outcomesConfirmed auction outcomes by venueInvestor key
ud_list_trendsEvery published trend with its latest edition figures and its first and last edition dayfree
ud_get_trendOne trendfree
ud_list_trend_categoriesTrend categories, to narrow the trends byfree
ud_list_trend_poolTrend candidates the daily editions draw frommember key
ud_list_eventsIndustry events of one monthfree
ud_get_eventOne industry event with its organizerfree
ud_get_agendaWhole public agenda of one monthfree
ud_get_latest_editionLatest daily edition of Business Ideas or Trending Domainsfree
ud_get_editionOne dated daily edition of Business Ideas or Trending Domainsfree
ud_get_meta_enumsEvery list of values the answers usefree
ud_get_meta_freshnessHow current each part of the stored data isfree, npm only
ud_list_meta_datasetsFree GitHub datasets that hold the same rows as these answersfree
ud_list_meta_trademark_classes45 Nice classes a trademark is filed underfree
ud_get_meta_providersRegistrar identities and the auction venue and parking service catalogsfree
ud_get_keyWhat the calling member key opensmember key

Settings

VariableProfileWhat it does
UD_API_KEYlocalA member key: adds the keyed tools of its plan.
UD_MCP_PROFILEbothlocal (the default) or hosted.
UD_API_BASEbothAnother API base, for a local run of the API.
UD_CONNECTOR_SECREThostedThe connector's shared secret, sent as X-UD-Connector-Secret.
UD_WELLKNOWN_FILEShostedFiles served under /.well-known/, as a JSON object (see below).
PORThostedThe HTTP port, 8080 by default.

The hosted profile registers the free tools only, sends no Authorization header whatever UD_API_KEY holds, removes the register and product links from answers and adds links.details. Without a key (the hosted profile, or the npm server with no UD_API_KEY), the inputs only a key may send, such as sort or prefix, are not listed.

UD_WELLKNOWN_FILES maps a file name to its body (served as plain text) or to { "body": "...", "contentType": "..." }, so a directory's proof takes a variable change and no deploy:

{
  "openai-apps-challenge": "<the token from OpenAI's portal>",
  "mcp-registry-auth": "v=MCPv1; k=ed25519; p=<public key>",
  "glama.json": { "body": "{\"$schema\":\"https://glama.ai/mcp/schemas/connector.json\",\"claim\":\"<token>\"}", "contentType": "application/json" }
}

Run the hosted connector yourself

docker build -t uniquedomains-mcp-server .
docker run -p 8080:8080 uniquedomains-mcp-server

The image runs node dist/http.js with UD_MCP_PROFILE=hosted: POST /mcp (stateless Streamable HTTP, plain JSON answers), GET /healthz, and the well-known files. Every answer is Cache-Control: no-store with Strict-Transport-Security: max-age=31536000, and /mcp allows any origin (its preflight offers POST and OPTIONS).

The same image speaks stdio when given the stdio entry, for catalogs that inspect a server that way:

docker run -i --rm -e UD_MCP_PROFILE=local uniquedomains-mcp-server dist/stdio.js

Development

npm ci
npm run build
npm test
npm run smoke
  • npm run generate rebuilds src/generated/tools.ts, openapi/v1.json and the tool list above from the API document that @uniquedomains/sdk ships; -- --check fails when they are out of date, -- --live compares the live document.
  • npm run smoke runs the MCP Inspector against both transports and a fixture API; -- --live uses the live API.
  • npm run plugin builds dist/chatgpt-plugin.zip from directories/openai/review.json (the review texts, the test cases, the release notes) and checks it against OpenAI's limits and categories; npm run plugin:test also builds a sheet marked as a placeholder.
  • npm run plugin:devin builds dist/devin/plugins/unique-domains/ (the manifest Devin's validator accepts, a 256 px logo and a copy of the skill) for a pull request to Devin's marketplace.
  • The nightly contract workflow opens its pull request with the workflow token, which needs the repository setting "Allow GitHub Actions to create and approve pull requests" (Settings, Actions, General).

License

MIT

NPM
@uniquedomains/mcp-server
Install Command
npm install @uniquedomains/mcp-server

Remote