Onymu
Grátis para usar na web, grátis via MCP. O Onymu verifica nomes em 1.400 TLDs e nunca vende o que você pesquisa.
Documentação
A referência completa para o servidor onymu: todas as 11 ferramentas que um assistente pode chamar, o que cada uma recebe e o que retorna. A interface abaixo é fixa. O servidor responde à descoberta hoje e as chamadas chegam em seguida.
Endpoint
/api/v1/mcp
Transporte
streamable-http
Autenticação
OAuth 2.1 ou uma chave
Ferramentas
11
Visão geral
O servidor expõe a mesma maquinaria que o site usa através do Model Context Protocol: verifica um nome contra 1.400 extensões em milissegundos, gera candidatos a partir de uma palavra e lê e escreve os mesmos favoritos, lista de seleção e histórico que o navegador usa.
search_domains é a ferramenta que tudo mais suporta. Os dados de disponibilidade são atualizados diariamente, e uma verificação de mil extensões responde em milissegundos mesmo quando o assistente pergunta sobre o catálogo inteiro. As ferramentas de conta existem para direcioná-la: favoritos restringem quais extensões importam, o histórico diz o que já foi tentado, e a lista de seleção é onde vai qualquer coisa que valha a pena guardar.
Encontrar
A razão pela qual o servidor existe: disponibilidade para qualquer nome, e candidatos quando ainda não há nome.
TLDs favoritos
As extensões que esta pessoa realmente registra, para que as sugestões sejam limitadas a elas em vez de classificar mil resultados que ela ignorará.
Domínios salvos
A lista de seleção. Escrita a partir da conversa, lida de volta no navegador: a mesma biblioteca de qualquer forma.
Histórico
O que esta pessoa já viu no site, para que um assistente possa retomar uma sessão de nomeação em vez de começar do zero. Somente leitura: nada feito através dessas ferramentas é adicionado a ele.
Conectar
Aponte seu cliente para o endpoint. Ele lê os metadados do próprio servidor, descobre onde pedir autorização e abre um navegador. Você aprova uma vez e está conectado. Não há nada para copiar e nenhum segredo para guardar.
Um comando no Claude Code, uma URL no Claude Desktop, um bloco no Cursor, VS Code, Windsurf, Cline, Gemini CLI ou Codex. Escolha o seu abaixo para o arquivo e os nomes de campos que ele deseja. Qualquer coisa que fale streamable-http funciona, listada aqui ou não.
- 1Execute o comando em qualquer terminal.
- 2Aprove o prompt do navegador que abre.
- 3Digite /mcp dentro do Claude Code para confirmar que conectou.
Terminal
claude mcp add --transport http onymu https://onymu.com/api/v1/mcp
Sem navegador? Um job cron, um contêiner ou uma máquina compartilhada pode enviar uma chave em vez disso. Crie uma em o cartão de conexão, onde ela é mostrada uma vez ao lado de um comando finalizado com a chave já incluída, e envie-a como Authorization: Bearer <key>.
A descoberta é pública: GET /api/v1/mcp retorna o status do servidor e esta lista de ferramentas, para que um cliente possa testar o suporte e obter uma resposta honesta em vez de um 404.
Autenticação
Toda ferramenta exige uma conta. Esta não é uma API pública. O site permite que qualquer pessoa pesquise e gere. O endpoint MCP não permite. Um cliente se conecta como uma pessoa específica, e toda chamada, incluindo search_domains, é atribuída a ela.
O servidor age como você, e há duas maneiras de um cliente provar qual você é.
OAuth 2.1, o caminho que a maioria dos clientes seguirá. Uma chamada não autenticada responde 401 com um cabeçalho WWW-Authenticate apontando para /.well-known/oauth-protected-resource, que nomeia o servidor de autorização. O cliente se registra, seja hospedando um documento de metadados de ID do cliente ou através de registro dinâmico, então envia você para a tela de consentimento e troca o código por um token vinculado a este recurso. PKCE (S256) é obrigatório, tokens de atualização rotacionam e tokens de acesso têm vida curta.
Uma chave de portador, para qualquer coisa que não possa abrir um navegador: Authorization: Bearer <key>. Um navegador conectado também pode usar seu cookie de sessão. Um cliente sem nenhum dos três recebe o 401 acima antes de qualquer ferramenta rodar, então não há caminho anônimo para a lista de ferramentas.
O acesso concedido através de OAuth pode ser retirado revogando o cliente. Chaves são criadas em o cartão de conexão, até 5 por vez, para que um laptop e um desktop possam ter chaves diferentes e qualquer uma possa ser revogada sozinha. Apenas um hash é armazenado: a chave é mostrada uma vez, na criação, e nada pode imprimi-la novamente. A revogação tem efeito na próxima chamada. Criar chaves exige a sessão do site, nunca uma chave. Uma chave vazada pode dirigir as ferramentas, mas não pode criar suas sucessoras.
Encontrar
A razão pela qual o servidor existe: disponibilidade para qualquer nome, e candidatos quando ainda não há nome.
search_domains
Ferramenta principalPOST /api/v1/domains/check
A ferramenta principal. Verifica um ou mais rótulos contra um conjunto de TLDs e classifica cada combinação em disponível ou ocupada. Os dados de disponibilidade são atualizados diariamente, e uma única chamada cobre todas as extensões de uma vez, respondendo em milissegundos mesmo em todo o catálogo. Deixe tlds\ de fora e ela usa os favoritos do chamador, caindo para as extensões mais populares para uma conta nova. Nomes x extensões não devem exceder 5.000 em uma chamada.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
names | string[] | Sim | Rótulos simples para verificar, sem ponto. Até 25 por chamada. |
tlds | string[] | Não | Extensões para verificar, sem o ponto inicial. Padrão: os TLDs favoritos do chamador, ou os mais populares. |
Retorna
Uma linha por nome, dividindo as extensões em available\ (não nos dados de registro mais recentes) e taken\. Também informa quantas extensões foram verificadas e de onde essa lista veio.
{
"name": "search_domains",
"arguments": {
"names": ["northbeam"],
"tlds": ["com", "io", "dev"]
}
}
{
"results": [
{
"name": "northbeam",
"available": ["dev"],
"taken": ["com"]
}
],
"tldsChecked": 3,
"tldSource": "requested"
}
check_usernames
POST /api/v1/usernames/check
A outra metade de escolher um nome: um domínio só está realmente disponível se os handles também estiverem. Verifica X, Instagram, Facebook, YouTube, TikTok, Snapchat, Pinterest, LinkedIn, Discord, GitHub, Telegram e Twitch, e conta quantos apps já carregam o nome na App Store e no Google Play. Diferente da busca de domínios, não há conjunto de dados por trás disso, porque nenhuma plataforma publica sua lista de usernames, então cada plataforma é verificada ao vivo e responde por si. Os resultados de handles são divididos em quatro categorias, e as duas últimas importam: unknown\ significa que a verificação não pôde ser concluída (a plataforma bloqueou ou expirou) e nunca deve ser relatada como livre, enquanto invalid\ significa que as regras de username da própria plataforma rejeitam a string diretamente. Duas respondem a uma pergunta mais restrita do que seu nome sugere: linkedin\ verifica a URL de vaidade da empresa em vez de um perfil pessoal /in/, e facebook\ só relata ocupado ou desconhecido, porque sua superfície sem login não consegue distinguir um handle livre de um privado. As duas lojas de apps são relatadas separadamente dos handles, sob appStores\, porque nenhuma tem um namespace de usernames: elas respondem quantos anúncios já têm esse nome, e juntá-las em taken\ relataria uma colisão de handle que não existe. Verificar vários nomes de uma vez pula o X, que bane por volume.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
usernames | string[] | Sim | Handles para verificar, sem @. Até 10 por chamada. |
platforms | string[] | Não | Limite a verificação a estes IDs de plataforma: x, instagram, facebook, youtube, tiktok, snapchat, pinterest, linkedin, discord, github, telegram, twitch, appstore, googleplay. Padrão: todos os quatorze. |
Retorna
Uma linha por username, dividindo as plataformas de handle em available\, taken\, unknown\ e invalid\, mais um objeto appStores\ contando os anúncios da App Store e do Play que já carregam o nome. Qualquer coisa pulada é nomeada em notChecked\ com o motivo.
{
"name": "check_usernames",
"arguments": {
"usernames": ["northbeam"]
}
}
{
"results": [
{
"username": "northbeam",
"available": ["twitch", "telegram", "linkedin"],
"taken": ["x", "github", "youtube", "instagram"],
"unknown": ["facebook"],
"invalid": [],
"appStores": {
"appstore": {
"appsNamedThis": 1,
"appsMentioningThis": 1,
"exactTitleMatches": 0,
"listingsScanned": 34,
"countsAreFloors": false,
"examples": ["Northbeam Analytics (Northbeam, Inc.)"]
},
"googleplay": {
"appsNamedThis": 0,
"appsMentioningThis": 0,
"exactTitleMatches": 0,
"listingsScanned": 12,
"countsAreFloors": true
}
}
}
]
}
generate_domains
PUT /api/v1/domains/generate
Aplica o gerador de nomes determinístico a uma palavra-chave e retorna candidatos que estão livres para registrar: palavras inventadas, compostos de palavras reais e palavras relacionadas, misturados com os sinônimos da palavra-chave por padrão e opcionalmente seus antônimos, classificados por quão bem soam. Nenhum modelo está envolvido, então a mesma palavra-chave sempre retorna a mesma lista. A geração continua sorteando até count\ nomes estarem livres sob pelo menos uma das extensões verificadas, então o que volta é registrável em vez de meramente plausível. Passe qualquer coisa promissora para search_domains para o catálogo completo.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
keyword | string | Sim | A palavra para construir nomes. Letras e dígitos; qualquer outra coisa é removida. |
count | number | Não | Quantos candidatos livres retornar. Padrão: 8, máximo 25. |
minLength | number | Não | Descarta candidatos mais curtos que isso. |
maxLength | number | Não | Descarta candidatos mais longos que isso. |
prefix | string | Não | Mantém apenas candidatos que começam com esta string. |
suffix | string | Não | Mantém apenas candidatos que terminam com esta string. |
mustContain | string | Não | Mantém apenas candidatos que contêm esta string. |
synonyms | boolean | Não | Mistura os sinônimos da palavra-chave. Padrão: verdadeiro. |
antonyms | boolean | Não | Mistura os antônimos da palavra-chave. Padrão: falso. |
realWords | boolean | Não | Apenas nomes feitos de palavras de dicionário: os parentes da palavra-chave e compostos deles, sem finais inventados ou misturas. Padrão: falso. |
maxWords | number | Não | De quantas palavras um nome pode ser feito, 1 a 3; uma mistura conta como uma. Padrão: 2. |
tlds | string[] | Não | Extensões para verificar os candidatos. Padrão: os favoritos do chamador, ou os mais populares. |
Retorna
Uma lista de candidatos livres, cada um com seu domain\, de quantas words\ é feito, se é feito de real\ palavras, o que foi builtFrom\, e as extensões sob as quais é available\, mais quantos nomes foram scanned\ para encontrá-los.
{
"name": "generate_domains",
"arguments": {
"keyword": "orbit",
"count": 3
}
}
{
"keyword": "orbit",
"tldsChecked": ["com", "io", "dev"],
"scanned": 24,
"candidates": [
{ "domain": "orbitly", "words": 1, "real": false,
"builtFrom": ["orbit"], "available": ["io", "dev"] },
{ "domain": "orbithub", "words": 2, "real": true,
"builtFrom": ["orbit", "hub"], "available": ["com", "io", "dev"] },
{ "domain": "lunarlab", "words": 2, "real": true,
"builtFrom": ["lunar", "lab"], "available": ["com", "dev"] }
]
}
TLDs favoritos
As extensões que esta pessoa realmente registra, para que as sugestões sejam limitadas a elas em vez de classificar mil resultados que ela ignorará.
list_favorite_tlds
GET /api/v1/favorites/tlds
Retorna os TLDs favoritos salvos na conta chamadora, na ordem em que foram salvos. Chame antes de search_domains para limitar uma verificação às extensões que esta pessoa realmente se importa, ou deixe search_domains fazer isso, que é o que ela faz quando você não passa tlds\. Uma lista vazia também pode significar que a pessoa mantém suas extensões no navegador em vez de na conta, e essa cópia está fora de alcance aqui.
Parâmetros
Nenhum.
Retorna
As extensões salvas sem seus pontos iniciais, quantas são, e o limite da conta.
{
"name": "list_favorite_tlds",
"arguments": {}
}
{
"tlds": ["com", "io", "dev", "co"],
"total": 4,
"limit": 200
}
add_favorite_tld
POST /api/v1/favorites/tlds
Salva um TLD na conta chamadora. Toda busca posterior verifica favoritos primeiro e os mostra acima do resto da grade. Adicionar um que já está salvo retorna um erro em vez de silenciosamente não fazer nada, para que um assistente possa dizer a diferença. Se a pessoa tiver "Salvar na minha conta" desligado, suas extensões vivem apenas no navegador: nada é armazenado e a resposta diz isso.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tld | string | Sim | A extensão, com ou sem o ponto inicial. |
Retorna
O que foi salvo, e o novo total da conta contra seu limite, ou added: null\ e uma nota quando a conta mantém suas extensões no navegador.
{
"name": "add_favorite_tld",
"arguments": { "tld": ".ai" }
}
{
"added": "ai",
"total": 5,
"limit": 200
}
remove_favorite_tld
DELETE /api/v1/favorites/tlds/:tld
Remove um TLD da conta do chamador. Remover um que não está salvo retorna um erro, então uma chamada equivocada é visível em vez de silenciosa.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tld | string | Sim | A extensão a remover, com ou sem o ponto inicial. |
Retorno
O que foi removido e o novo total da conta.
{
"name": "remove_favorite_tld",
"arguments": { "tld": "xyz" }
}
{
"removed": "xyz",
"total": 4,
"limit": 200
}
Domínios salvos
A lista de favoritos. Escrita a partir da conversa, lida de volta no navegador: a mesma biblioteca de qualquer forma.
list_saved_domains
GET /api/v1/favorites/domains
Retorna os domínios marcados como favoritos na conta do chamador, do mais recente para o mais antigo. Use para responder "o que eu salvei até agora?" sem que a pessoa saia da conversa, ou para verificar novamente uma lista de favoritos em relação a search_domains antes de comprar.
Parâmetros
Nenhum.
Retorno
Uma lista de nomes salvos com quando cada um foi salvo, além do limite da conta.
{
"name": "list_saved_domains",
"arguments": {}
}
{
"domains": [
{ "domain": "northbeam.dev", "savedAt": "2026-08-26T11:31:40Z" },
{ "domain": "sprouted.io", "savedAt": "2026-08-24T09:02:11Z" }
],
"total": 2,
"limit": 500
}
save_domain
POST /api/v1/favorites/domains
Marca um nome como favorito na conta do chamador. Ele aparece na biblioteca do site imediatamente e sobrevive à conversa, que é o objetivo: a lista de favoritos dura mais que a janela de chat. Aceita um domínio completo ou um rótulo simples, da mesma forma que o site salva um nome sendo comparado entre extensões.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
domain | string | Sim | O nome a salvar, com ou sem extensão. |
Retorno
O que foi salvo e o novo total da conta em relação ao limite.
{
"name": "save_domain",
"arguments": { "domain": "northbeam.dev" }
}
{
"saved": "northbeam.dev",
"total": 3,
"limit": 500
}
remove_saved_domain
DELETE /api/v1/favorites/domains/:domain
Remove um nome marcado como favorito da conta do chamador. É o equivalente a save_domain, para quando um candidato é descartado no meio da conversa. Remover algo que nunca foi salvo retorna um erro.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
domain | string | Sim | O nome salvo a remover, exatamente como foi salvo. |
Retorno
O que foi removido e o novo total da conta.
{
"name": "remove_saved_domain",
"arguments": { "domain": "sprigly.io" }
}
{
"removed": "sprigly.io",
"total": 2,
"limit": 500
}
Histórico
O que esta pessoa já pesquisou no site, para que um assistente possa retomar uma sessão de escolha de nomes em vez de começar do zero. Somente leitura: nada feito por meio dessas ferramentas é adicionado a ele.
get_recent_searches
GET /api/v1/history/searches
Retorna o histórico de buscas da conta, do mais recente para o mais antigo. É a forma mais barata de um assistente retomar uma sessão de escolha de nomes: o que já foi tentado e, portanto, o que não sugerir novamente. Isso é o que a pessoa pesquisou no site: search_domains não grava aqui, então verificar um nome por meio de um assistente nunca adiciona a ele.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
limit | number | Não | Quantas entradas retornar. O padrão é 20, limitado a 200 da conta. |
{
"name": "get_recent_searches",
"arguments": { "limit": 3 }
}
{
"searches": [
{ "query": "northbeam", "searchedAt": "2026-08-26T11:32:02Z" },
{ "query": "harbor", "searchedAt": "2026-08-26T11:31:58Z" },
{ "query": "ledger", "searchedAt": "2026-08-25T16:20:44Z" }
],
"count": 3
}
get_recent_generations
GET /api/v1/history/generations
Retorna o histórico de gerações da conta, do mais recente para o mais antigo: as palavras-semente, não os candidatos. Útil para retomar uma sessão de escolha de nomes de onde parou ou para notar em qual direção alguém continua voltando. Como o histórico de buscas, registra apenas o site: generate_domains não grava aqui.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
limit | number | Não | Quantas entradas retornar. O padrão é 20, limitado a 200 da conta. |
Retorno
Uma lista de palavras-semente com carimbos de data/hora, do mais recente para o mais antigo.
{
"name": "get_recent_generations",
"arguments": { "limit": 3 }
}
{
"generations": [
{ "keyword": "orbit", "generatedAt": "2026-08-26T11:31:51Z" },
{ "keyword": "bloom", "generatedAt": "2026-08-26T10:14:03Z" },
{ "keyword": "harbor", "generatedAt": "2026-08-25T16:19:30Z" }
],
"count": 3
}
Limites de taxa
60 chamadas por minuto e 600 por hora, contadas por conta em vez de por chave. Uma segunda chave não compra um segundo orçamento. Um assistente respondendo a uma pergunta de escolha de nomes faz algumas chamadas, então exceder isso significa que algo está em loop.
Acima do limite, o endpoint responde 429 com um Retry-After em segundos. Toda resposta bem-sucedida carrega RateLimit-Remaining, para que um cliente possa desacelerar antes de chegar lá. Os limites da conta para TLDs favoritos, domínios salvos e comprimento do histórico são separados e vêm da própria ferramenta.
Erros
Algo que o chamador pode corrigir, como um favorito duplicado, uma lista de favoritos cheia ou um argumento malformado, retorna como um resultado normal da ferramenta com isError: true e uma mensagem dizendo o que deu errado, para que o modelo possa ler e ajustar em vez de ver a conexão falhar. As duas tabelas abaixo são as falhas que acontecem antes de uma ferramenta ser executada.
HTTP: a requisição nunca chegou a uma ferramenta
401 | Sem chave e sem sessão, ou uma chave que foi revogada. Crie uma na página do MCP. |
|---|---|
429 | Limite de taxa excedido. 60 chamadas por minuto ou 600 por hora, por conta. A resposta carrega Retry-After. |
405 | Um GET pedindo apenas text/event-stream. Este servidor não envia fluxo de servidor para cliente, então tudo responde no POST. |
503 | O servidor está desligado (MCP_ENABLED=false). |
JSON-RPC: o protocolo rejeitou a mensagem
-32700 | O corpo não é JSON válido. |
|---|---|
-32600 | JSON válido, mas não é uma requisição JSON-RPC 2.0. |
-32601 | Método desconhecido. Este servidor implementa initialize, ping, tools/list e tools/call. |
-32602 | Nome de ferramenta desconhecido ou ausente. |
-32603 | A ferramenta lançou algo inesperado. Isso é um bug, e a mensagem diz o quê. |
Status
Ativo. Todas as 11 ferramentas são chamáveis, e cada uma delas executa o mesmo código que o site. Um nome salvo a partir de uma conversa está na sua biblioteca quando você recarrega a página, e uma busca feita lá aparece no seu histórico.
GET /api/v1/mcp não precisa de chave e informa a versão do servidor, as versões de protocolo que ele fala, os limites de taxa e esta lista de ferramentas, o que é suficiente para um cliente sondar antes de conectar.