Referência do servidor MCP
O Revolink suporta o Model Context Protocol (MCP): um padrão aberto que permite que assistentes de IA (Claude, Cursor, Windsurf e outros) interajam com serviços externos como ferramentas.
Depois de configurado, o seu assistente de IA pode criar links, atualizar regras de roteamento e consultar análises sem que você precise sair do chat.
Endpoint
POST https://api.revolink.link/apiv1/mcp
Transporte: Streamable HTTP (sem estado, uma requisição por chamada de ferramenta).
Autenticação
O MCP do Revolink suporta duas formas de conexão. Escolha a que combina com o seu caso:
| Chave de API | OAuth 2.0 | |
|---|---|---|
| Ideal para | Scripts, ferramentas de desenvolvimento, automação | claude.ai na web, apps, equipes |
| Configuração | Gere uma chave e cole na configuração | Basta colar a URL e aprovar o acesso |
| Gerenciamento de chaves | Você gerencia a chave | Nenhum: é automático |
Método 1: chave de API
Gere uma chave em Perfil → Integrações, ative as permissões (scopes) de MCP de que precisa e informe-a na configuração do seu cliente. Veja Configuração abaixo para as instruções de cada cliente.
Erros:
| HTTP | Causa |
|---|---|
401 | Chave de API ausente ou inválida, ou chave expirada |
403 | A chave existe, mas não tem permissões de MCP ativadas |
Método 2: OAuth 2.0
Para clientes como o claude.ai (web) que suportam OAuth: não é preciso chave. Você aprova o acesso uma vez e o cliente cuida de tudo automaticamente.
Como conectar (claude.ai na web):
- Vá em Settings → Integrations no claude.ai.
- Clique em Add MCP server.
- Cole:
https://api.revolink.link/apiv1/mcp - Clique em Connect: você será redirecionado ao Revolink para aprovar o acesso.
- Pronto. As ferramentas do Revolink já estão disponíveis no seu chat.
Para revogar o acesso a qualquer momento: Perfil → Aplicativos conectados → Revogar.
Permissões do MCP
As permissões do MCP são independentes das permissões normais da API. Uma chave pode ter acesso total à API e nenhum ao MCP, ou o contrário. Permissões (scopes) disponíveis:
| Permissão | O que libera |
|---|---|
links:read | list_links, get_link |
links:write | create_link, update_link |
links:delete | delete_link |
links:bulk | bulk_create_links |
analytics:read | get_link_analytics, get_workspace_analytics |
Na autenticação por chave de API, as permissões são configuradas por chave em Perfil → Integrações → MCP no aplicativo.
No OAuth, as permissões são solicitadas pelo cliente e aprovadas pelo usuário durante o fluxo de consentimento.
Configuração
Chave de API: passo a passo
- Vá em Perfil → Integrações no aplicativo Revolink.
- Clique em Criar chave de API.
- Dê um nome à chave (por ex.
Claude MCP). - Em MCP, ative as permissões que quer conceder. Cada permissão pode ser ativada de forma independente.
- Clique em Criar e copie a chave: ela é exibida apenas uma vez.
Uma chave com MCP ativado mas sem permissões de MCP selecionadas será rejeitada no endpoint do MCP com um erro
403.
Configure o seu cliente de IA (chave de API)
Claude Desktop (claude_desktop_config.json)
O Claude Desktop usa transporte stdio. Use a ponte mcp-remote para se conectar ao endpoint HTTP do Revolink.
{
"mcpServers": {
"revolink": {
"command": "npx",
"args": [
"mcp-remote",
"https://api.revolink.link/apiv1/mcp",
"--header",
"X-Api-Key:YOUR_API_KEY"
]
}
}
}
Abra por: menu do Claude → Settings → Developer → Edit Config. Reinicie o Claude Desktop depois de salvar.
Claude Code (CLI)
claude mcp add --transport http revolink https://api.revolink.link/apiv1/mcp \
--header "X-Api-Key: YOUR_API_KEY"
Ou adicione a .claude/settings.json:
{
"mcpServers": {
"revolink": {
"type": "http",
"url": "https://api.revolink.link/apiv1/mcp",
"headers": {
"X-Api-Key": "YOUR_API_KEY"
}
}
}
}
Cursor / Windsurf (.cursor/mcp.json or .codeium/windsurf/mcp_config.json)
{
"mcpServers": {
"revolink": {
"url": "https://api.revolink.link/apiv1/mcp",
"headers": {
"X-Api-Key": "YOUR_API_KEY"
}
}
}
}
VS Code (.vscode/mcp.json)
{
"servers": {
"revolink": {
"type": "http",
"url": "https://api.revolink.link/apiv1/mcp",
"headers": {
"X-Api-Key": "${input:revolinkApiKey}"
}
}
},
"inputs": [
{
"id": "revolinkApiKey",
"type": "promptString",
"description": "Revolink API Key",
"password": true
}
]
}
Requer o VS Code 1.99+ com GitHub Copilot. O prompt ${input:revolinkApiKey} pedirá sua chave no primeiro uso.
Zed (~/.config/zed/settings.json)
{
"context_servers": {
"revolink": {
"settings": {
"url": "https://api.revolink.link/apiv1/mcp",
"api_key": "YOUR_API_KEY"
}
}
}
}
Configure o seu cliente de IA (OAuth)
claude.ai (web)
Não é preciso configuração. Quando você adicionar um novo servidor MCP em claude.ai → Settings → Integrations, informe:
https://api.revolink.link/apiv1/mcp
O Claude redirecionará você automaticamente para a página de consentimento do Revolink.
Espaços de trabalho: seleção automática
Você nunca precisa informar um ID de espaço de trabalho manualmente. Quando você envia uma requisição sem escolher um espaço de trabalho, o servidor devolve uma lista dos seus espaços de trabalho disponíveis. A IA escolhe o certo com base no contexto e continua a operação automaticamente. Do seu ponto de vista isso é invisível: basta descrever o que precisa em linguagem natural.
Ferramentas disponíveis
list_links
Retorna uma lista paginada dos links de um espaço de trabalho.
Permissão necessária: links:read
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
page | integer | — | Número da página (padrão: 1) |
limit | integer | — | Links por página, de 1 a 100 (padrão: 20) |
search | string | — | Filtra por nome ou slug |
tagIds | string[] | — | Filtra por IDs de tags |
get_link
Retorna todos os detalhes de um link, incluindo as regras de roteamento.
Permissão necessária: links:read
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
linkId | string | ✅ | ID do link |
create_link
Cria um novo link inteligente com regras de roteamento.
Permissão necessária: links:write
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | ✅ | Nome do link (máx. 255 caracteres) |
rules | Rule[] | ✅ | Regras de roteamento: veja o Objeto de regra abaixo. Exatamente uma deve ter isDefault: true |
slug | string | — | Slug personalizado (minúsculas, hifens permitidos). Gerado automaticamente se omitido |
domain | string | — | Domínio personalizado. Padrão: o do espaço de trabalho |
description | string | — | Nota interna (máx. 1000 caracteres) |
active | boolean | — | Se o link está ativo (padrão: true) |
tagIds | string[] | — | IDs das tags a anexar |
clicksLimit | integer | — | Desativa o link após N cliques. 0 = sem limite |
expirationDate | string | — | Data e hora ISO 8601. O link é desativado depois dessa data |
conversionTracking | boolean | — | Ativa o pixel de conversão |
gpsTracking | boolean | — | Ativa a captura de localização GPS no clique |
abTest | AbTest | — | Configuração do teste A/B: veja o Objeto de teste A/B abaixo |
Exemplo de pedido:
«Crie um link chamado "Product Hunt Launch" que envie visitantes de computador para a landing page de desktop e visitantes de celular para a landing page mobile.»
update_link
Atualiza um link existente. Inclua apenas os campos que quer alterar.
Permissão necessária: links:write
Os mesmos parâmetros de create_link, além de:
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
linkId | string | ✅ | ID do link a atualizar |
ogTitle | string | — | Título OG exibido quando o link é compartilhado nas redes sociais (máx. 255 caracteres) |
ogDescription | string | — | Descrição OG para as prévias nas redes sociais (máx. 500 caracteres) |
appearanceColor | string | — | Cor da marca em hex (por ex. #FF5733) |
Quando
rulesé informado, todo o array de regras é substituído. Inclua todas as regras que quer manter, não só as alteradas. A IA busca internamente os IDs das regras existentes antes de atualizar.
delete_link
Exclui um link de forma permanente.
Permissão necessária: links:delete
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
linkId | string | ✅ | ID do link a excluir |
bulk_create_links
Cria vários links em uma única requisição. Sujeito à cota de links do plano.
Permissão necessária: links:bulk
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
links | LinkInput[] | ✅ | Array de objetos de link (de 1 a 100). Cada um tem os mesmos campos de create_link |
A resposta inclui os arrays created (bem-sucedidos) e failed (com falha, com o motivo), então é possível um sucesso parcial.
get_link_analytics
Retorna as análises de cliques de um link, detalhadas por país, dispositivo, navegador, SO, regra de roteamento e variante A/B.
Permissão necessária: analytics:read
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
linkId | string | ✅ | ID do link |
from | string | — | Data inicial YYYY-MM-DD (padrão: todo o período) |
to | string | — | Data final YYYY-MM-DD (padrão: hoje) |
get_workspace_analytics
Retorna as análises de cliques agregadas de todos os links de um espaço de trabalho.
Permissão necessária: analytics:read
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
from | string | — | Data inicial YYYY-MM-DD (padrão: todo o período) |
to | string | — | Data final YYYY-MM-DD (padrão: hoje) |
Objeto de regra
Todo link deve ter pelo menos uma regra. Exatamente uma regra deve ter isDefault: true: é a reserva quando as condições de nenhuma outra regra são atendidas. A regra padrão não pode ter nenhuma condição.
| Campo | Tipo | Descrição |
|---|---|---|
targetUrl | string | URL de destino (obrigatório) |
isDefault | boolean | true para a regra de reserva (obrigatório) |
country | string[] | Códigos ISO 3166-1 alpha-2, por ex. ["UA", "DE"] |
city | string[] | Nomes de cidade. Exige que country seja informado |
device | string[] | "desktop" "mobile" "tablet" "console" "smarttv" "wearable" "embedded" |
os | string[] | "Windows" "macOS" "Linux" "iOS" "Android" |
browser | string[] | "Chrome" "Firefox" "Safari" "Edge" "Opera" "Brave" |
timeStart | string | Início da janela ativa "HH:MM" UTC. Deve vir junto com timeEnd |
timeEnd | string | Fim da janela ativa "HH:MM" UTC. Deve vir junto com timeStart |
daysOfWeek | integer[] | Dias: 0 = domingo … 6 = sábado |
locale | string[] | Códigos de idioma do navegador, por ex. ["uk", "en"] |
name | string | Rótulo opcional para esta regra |
Objeto de teste A/B
Quando abTest.enabled é true, os cliques são divididos entre as variantes de acordo com os pesos. As regras de roteamento ainda se aplicam primeiro: a divisão A/B só acontece para os visitantes que correspondem a uma determinada regra.
| Campo | Tipo | Descrição |
|---|---|---|
enabled | boolean | true para ativar o teste A/B |
variants | Variant[] | São necessárias pelo menos 2 variantes quando ativado |
Variante:
| Campo | Tipo | Descrição |
|---|---|---|
url | string | URL de destino desta variante |
weight | number | Parte relativa do tráfego. Por ex. 70 e 30 significa uma divisão 70 %/30 % |
Tratamento de erros
O servidor MCP retorna erros JSON-RPC padrão. Os erros no nível da ferramenta usam estes códigos:
| Código | Significado |
|---|---|
-32602 | Parâmetros inválidos: entrada incorreta (erro de validação, slug em uso etc.) |
-32603 | Erro interno: falha do lado do servidor |
Erros no nível HTTP (antes de a ferramenta ser chamada):
| HTTP | Causa |
|---|---|
401 | Chave de API / token Bearer ausente ou inválido |
403 | A chave não tem permissões de MCP ativadas, ou o dono da chave não tem acesso ao espaço de trabalho |
404 | Espaço de trabalho não encontrado |
Exemplos de chamadas de ferramentas
Liste seus links:
«Mostre todos os links do meu espaço de trabalho com a tag
summer-sale.»
Crie um link com segmentação geográfica:
«Crie um link chamado "App Download". Envie usuários de iOS para a App Store, os de Android para o Google Play e todos os outros para o site.»
Atualize as regras de roteamento:
«Atualize o link
664a1b2c…: adicione uma regra que redirecione visitantes da Alemanha parahttps://de.example.com.»
Obtenha as análises da semana passada:
«Quais foram os principais países do link
664a1b2c…na semana passada?»