# MCP for AI agents — domain passport

> How to connect the ZRAZU MCP server to Claude, ChatGPT or Cursor: the address, the domain passport tool, limits and what the agent never sees.

URL: https://zrazu.com/en/docs/api-mcp/

MCP is a way to give an AI assistant access to an external tool. The ZRAZU server is open: no key and no registration. It has one tool — the domain passport — and only reads.

## What the agent gets

A domain passport: who the registrar is, when the domain was registered and when it expires, registry statuses in plain language, when the name may become available, nameservers, and the state of DNS, the site certificate and mail with ready fixes.

- Nothing can be changed through MCP: not a domain, not records, not an invoice.
- We never give out the domain owner's personal data.
- MCP never says “available”. Only the registry can prove a name is free, and only at the moment of purchase. If the sources did not confirm that the domain is taken, the answer is “could not check”.

## Connect

Server address: `https://api.zrazu.com/mcp`. Authentication — “none”.

**Claude, ChatGPT and other clients with remote MCP servers.**

1. Open the connections (connectors) settings of your client and add a custom MCP server.
2. Enter the address `https://api.zrazu.com/mcp`.
3. In the authentication field choose “none”.

**Claude Code:**

```sh
claude mcp add --transport http zrazu https://api.zrazu.com/mcp
```

**Cursor, VS Code and other clients with a JSON configuration:**

```json
{ "mcpServers": { "zrazu": { "type": "http", "url": "https://api.zrazu.com/mcp" } } }
```

The transport is Streamable HTTP. Each request is a separate POST, the answer is one JSON.

## The `domain_passport` tool

Input — `domain`: a domain name (`kava.com.ua`), a page address (`https://kava.com.ua/menu`) or an email address (`hello@kava.com.ua`). The domain is extracted automatically, up to 300 characters.

Example request to an agent: “Check kava.com.ua: when does it expire and is the mail fine?”

Output — the passport as JSON and the same as text:

| Field | What it is |
| --- | --- |
| `state` | `taken` — the domain is taken; `unknown` — could not check |
| `phrase` | one sentence about the domain in plain language |
| `bars` | four status bars: `domain`, `dns`, `site`, `mail` |
| `statuses` | registry statuses with an explanation |
| `lifecycle` | stage, registration and expiry dates, when the name may become available |
| `nameservers`, `registrar` | nameservers and registrar |
| `problems` | problems found, what they risk, a ready fix |
| `checked_at` | when exactly it was checked |

If the name could not be checked, the answer is short: `state: "unknown"`, a reason `reason` and `retry: true` — worth asking later.

## Manual request

A session starts with `initialize`; the server returns a session number in the `Mcp-Session-Id` header. The number is valid for 24 hours.

```sh
curl -si https://api.zrazu.com/mcp -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}' \
  | grep -i mcp-session-id

curl -s https://api.zrazu.com/mcp -H 'content-type: application/json' -H 'Mcp-Session-Id: <number>' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"domain_passport","arguments":{"domain":"kava.com.ua"}}}'
```

## Limits

| What | Limit |
| --- | --- |
| Passport through MCP | 30 per minute and 300 per hour per session |
| All sessions from one address | 10 times more |
| New sessions from one address | 600 per hour |

The passport is cached for up to 6 hours (15 minutes for a domain in the deletion queue). The `checked_at` field shows when it was checked.

## Privacy

Each request is logged without your address and without the domain name: only the tool, the result and the time. Every name that is checked goes onto a stop list for 90 days: we do not take it for ourselves, and the stop list holds a fingerprint of the name, not the name.

## If it didn't work

- **A `404` answer.** The session number has expired (valid for 24 hours). Start with `initialize` again.
- **A result with `isError: true`.** The agent sent a name without a zone, an IP address instead of a domain, or a string that is too long. The error text can be shown to a person.
- **`state: "unknown"` and `retry: true`.** The sources did not confirm the state or the limit is used up. Ask again in a few minutes.
- **The client asks for a key.** Choose “none”: no API key is needed here.
- To work with your own domains (list, DNS, certificates), use the [API with a key](https://zrazu.com/en/docs/api-overview.md).
