URL: /mcp/tools/contacts

---
title: Contact tools
description: Manage org-wide contacts and assign them to domains as registrant, admin, technical, or billing.
---

A contact is a reusable address record. Each domain has up to four roles: `registrant`, `admin`, `technical`, `billing`. The same contact can fill more than one role.

## `list_contacts`

Required scope: `contacts:read`.

<ParamField path="org_oid" type="string" required>Organisation OID from `whoami`.</ParamField>

Returns the org's contacts.

## `create_contact`

Required scope: `contacts:write`. Caller must be `owner` or `admin`.

<ParamField path="org_oid" type="string" required />
<ParamField path="first_name" type="string" required />
<ParamField path="last_name" type="string" required />
<ParamField path="address_one" type="string" required />
<ParamField path="suburb" type="string" required />
<ParamField path="state" type="string" required />
<ParamField path="country" type="string" required>ISO-2 country code (e.g. `AU`).</ParamField>
<ParamField path="postcode" type="string" required />
<ParamField path="phone" type="string" required>International format (e.g. `+61.412345678`).</ParamField>
<ParamField path="email" type="string" required />
<ParamField path="organisation" type="string">Optional company name.</ParamField>
<ParamField path="address_two" type="string">Optional second address line.</ParamField>

## `update_contact`

Replaces an entire contact record — supply every field, not just changed ones.

Required scope: `contacts:write`. Caller must be `owner` or `admin`.

<ParamField path="contact_id" type="string" required>Contact UUID.</ParamField>

All other params match `create_contact`.

## `delete_contact`

Required scope: `contacts:write`. Caller must be `owner` or `admin`.

<ParamField path="org_oid" type="string" required />
<ParamField path="contact_id" type="string" required />

Returns `{ "deleted": true, "contact_id": "..." }`.

## `get_domain_contacts`

Required scope: `contacts:read`.

<ParamField path="org_oid" type="string" required />
<ParamField path="domain" type="string" required />

Returns up to four entries — one per assigned role. Missing roles aren't in the list.

## `set_domain_contact`

Required scope: `contacts:write`. Caller must be `owner` or `admin`.

<ParamField path="org_oid" type="string" required />
<ParamField path="domain" type="string" required />
<ParamField path="contact_type" type="string" required>One of `registrant`, `admin`, `technical`, `billing`.</ParamField>
<ParamField path="contact_id" type="string" required>UUID from `list_contacts`.</ParamField>

The change is local. The next sync cycle pushes it to the registrar.

## `unset_domain_contact`

Required scope: `contacts:write`. Caller must be `owner` or `admin`.

<ParamField path="org_oid" type="string" required />
<ParamField path="domain" type="string" required />
<ParamField path="contact_type" type="string" required />
