# Ferramentas grátis (API e MCP)

> Verificar e-mail, conferir SPF, DKIM e DMARC de qualquer domínio e explicar erros SMTP pela API do Couryo, sem chave e sem custo, e pelo servidor MCP público sem login.

Fonte: https://couryo.com/docs/tools

Três ferramentas do Couryo são abertas para qualquer pessoa, com ou sem conta: verificar um endereço de e-mail, conferir a configuração de e-mail de um domínio e explicar um erro SMTP em português. Elas também estão no site, em [Ferramentas](https://couryo.com/ferramentas), e no MCP.

Nenhuma delas envia e-mail nem abre conexão SMTP com o servidor de ninguém: só consultas de DNS e regras. Os endereços verificados não são guardados.

## Limites

Sem chave, o limite é por IP, por dia. Com qualquer chave do Couryo (`Authorization: Bearer ck_...`, inclusive de uma conta grátis), o limite é da conta e bem maior.

| Ferramenta | Sem chave (por IP) | Com chave (por conta) |
|---|---|---|
| `GET /v1/tools/verify-email` | 50 por dia | 2.000 por dia |
| `GET /v1/tools/check-domain` | 20 por dia | 300 por dia |
| `POST /v1/tools/explain-smtp` | 50 por dia | 2.000 por dia |

As respostas trazem `RateLimit-Limit` e `RateLimit-Remaining`. Acima do limite, a resposta é `429` com o código [`tool_limit_reached`](https://couryo.com/docs/errors.md#tool_limit_reached) e o cabeçalho `Retry-After`. As chamadas aceitam CORS de qualquer origem, então funcionam direto do navegador.

## Verificar um e-mail

```bash
curl "https://api.couryo.com/v1/tools/verify-email?email=ana@gmail.com.br"
```

```json
{
  "email": "ana@gmail.com.br",
  "verdict": "invalid",
  "reason": "typo",
  "did_you_mean": "ana@gmail.com",
  "checks": {
    "syntax": true,
    "domain": "gmail.com.br",
    "receives_email": "yes",
    "disposable": false,
    "role": false,
    "free_provider": false
  },
  "mailbox_checked": false,
  "message": "Parece erro de digitação. Você quis dizer ana@gmail.com?"
}
```

| Campo | O que é |
|---|---|
| `verdict` | `valid` (formato certo e o domínio recebe e-mail), `risky` (provável erro de digitação, e-mail temporário ou DNS sem resposta) ou `invalid` (formato errado, o domínio não recebe e-mail ou erro certo de digitação de um provedor grande, como `gmail.com.br`) |
| `reason` | o motivo principal: `ok`, `bad_syntax`, `no_mail_server`, `typo`, `disposable`, `role` ou `dns_unavailable` |
| `did_you_mean` | o endereço corrigido quando o domínio parece erro de digitação de um provedor grande (`gmial.com`, `hotmail.con`, `gmail.com.br`) |
| `checks.receives_email` | `yes` quando o domínio tem MX (ou um endereço, sem MX, como manda a RFC 5321), `no` quando não tem ou publica um MX nulo, `unknown` quando o DNS não respondeu |
| `checks.disposable` | serviço de caixa temporária |
| `checks.role` | caixa compartilhada, como `contato@` ou `vendas@` |
| `checks.free_provider` | Gmail, Outlook, Yahoo, UOL, BOL, Terra e outros gratuitos |
| `mailbox_checked` | sempre `false`: a caixa em si nunca é testada |

Use no cadastro do seu app para pegar o erro de digitação antes de mandar a confirmação. Um endereço `invalid` com certeza devolveria o e-mail; um `risky` merece um "você quis dizer...?" na tela.

## Conferir um domínio

```bash
curl "https://api.couryo.com/v1/tools/check-domain?domain=exemplo.com.br"
```

Aceita o domínio, uma URL ou um endereço (só o domínio é usado). O parâmetro opcional `dkim_selector` procura um seletor DKIM além dos mais comuns (é o `s=` do cabeçalho `DKIM-Signature`).

| Campo | O que é |
|---|---|
| `score` e `grade` | nota de 0 a 100 e conceito de A a F; SPF, DKIM e DMARC pesam 25 cada, o MX 15 e MTA-STS, TLS-RPT e BIMI o resto |
| `summary` | o resumo em uma frase |
| `mail_provider` | quem recebe o e-mail do domínio, pelo MX (Google Workspace, Microsoft 365...) |
| `spf_lookups` | quantas consultas de DNS o SPF precisa (o limite é 10) |
| `dkim_selectors_found` | os seletores em que achamos chave DKIM |
| `checks[]` | um item por verificação (`mx`, `spf`, `dkim`, `dmarc`, `mta_sts`, `tls_rpt`, `bimi`), com `status` (`ok`, `warning`, `error`, `missing` ou `info`), `title`, `detail`, `records` (o que o DNS respondeu), `fix` e `suggested_record`, um registro pronto para copiar quando há um |

A resposta fica em cache por 10 minutos: depois de corrigir o DNS, espere um pouco antes de conferir de novo.

## Explicar um erro SMTP

```bash
curl -X POST https://api.couryo.com/v1/tools/explain-smtp \
  -H "Content-Type: application/json" \
  -d '{ "message": "550 5.7.515 Access denied, sending domain does not meet the required authentication level" }'
```

| Campo | O que é |
|---|---|
| `code` e `enhanced_code` | o código básico (`550`) e o estendido (`5.7.515`); numa mensagem expirada, vale o motivo de dentro (por exemplo, `452 4.2.2` caixa cheia) |
| `kind` | `hard` (o endereço não funciona), `soft` (temporário), `policy` (regra do provedor, não o endereço) ou `unknown` (sem código no texto) |
| `provider` | o provedor citado no texto, quando há |
| `explanation` e `next_step` | o que aconteceu e o que fazer, em português ou inglês conforme o `Accept-Language` |
| `retry` | se mandar de novo depois pode funcionar sem mudar nada |

## No MCP

As mesmas ferramentas, mais os geradores de SPF e DMARC, estão em dois lugares:

- **Servidor público, sem login:** `https://mcp.couryo.com/tools`. Qualquer agente usa, com o limite por IP. Claude Code: `claude mcp add --transport http couryo-tools https://mcp.couryo.com/tools`.
- **Servidor principal** (`https://mcp.couryo.com`, com OAuth ou chave): disponíveis para qualquer conta, inclusive a grátis, com o limite da conta.

| Ferramenta | O que faz |
|---|---|
| `verify_email` | verifica um endereço |
| `check_domain_dns` | confere SPF, DKIM, DMARC, MX, MTA-STS, TLS-RPT e BIMI de um domínio |
| `explain_smtp_error` | explica um erro ou devolução |
| `generate_spf` | monta um registro SPF |
| `generate_dmarc` | monta um registro DMARC |

Veja também [MCP e agentes](https://couryo.com/docs/mcp.md) e o guia [SPF, DKIM e DMARC](https://couryo.com/guias/spf-dkim-dmarc.md).
