# create_contact (/docs/mcp/tools/create-contact)

{/* Generated by scripts/sync-mcp-tools.mjs from happierleads-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/create_contact.mdx. */}

**Create contact** · Changes data

Saves a new person record (name, job title, company domain) and returns it with its _id. Its main use is to get a contactId for verify_contact. To find new people use search_people. To push someone into a CRM use push_lead_to_crm. The name, position, company domain and email (businessEmail, or personalEmail when there is no work email) are stored; phone and LinkedIn are not. Costs nothing. Errors: 405 when firstName, lastName or position is missing.

| Connection | Account URL, team member URL or OAuth |
| --- | --- |

## Parameters [#parameters]

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `websiteId` | `string` | Yes | Website ID from list_websites. Required by the tool schema; the saved record is not linked to it. |
| `firstName` | `string` | Yes | Person's first name. Required. |
| `lastName` | `string` | Yes | Person's last name. Required. |
| `position` | `string` | Yes | Job title, e.g. "Head of Marketing". Required. |
| `domain` | `string` | No | Company domain without protocol, e.g. "acme.example". Without it verify_contact cannot guess an address. |
| `businessEmail` | `string` | No | Work email. Saved on the contact; verify_contact checks it. |
| `personalEmail` | `string` | No | Personal email, used only when businessEmail is not given. |
| `linkedinUrl` | `string` | No | LinkedIn profile URL. Accepted but not stored. |
| `phone` | `string` | No | Phone number. Accepted but not stored. |

## Tool definition [#tool-definition]

What your assistant receives from `tools/list`:

```json
{
  "name": "create_contact",
  "title": "Create contact",
  "annotations": {
    "title": "Create contact",
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": false
  },
  "inputSchema": {
    "type": "object",
    "properties": {
      "websiteId": {
        "type": "string",
        "description": "Website ID from list_websites. Required by the tool schema; the saved record is not linked to it."
      },
      "firstName": {
        "type": "string",
        "description": "Person's first name. Required."
      },
      "lastName": {
        "type": "string",
        "description": "Person's last name. Required."
      },
      "position": {
        "type": "string",
        "description": "Job title, e.g. \"Head of Marketing\". Required."
      },
      "domain": {
        "type": "string",
        "description": "Company domain without protocol, e.g. \"acme.example\". Without it verify_contact cannot guess an address."
      },
      "businessEmail": {
        "type": "string",
        "description": "Work email. Saved on the contact; verify_contact checks it."
      },
      "personalEmail": {
        "type": "string",
        "description": "Personal email, used only when businessEmail is not given."
      },
      "linkedinUrl": {
        "type": "string",
        "description": "LinkedIn profile URL. Accepted but not stored."
      },
      "phone": {
        "type": "string",
        "description": "Phone number. Accepted but not stored."
      }
    },
    "required": [
      "websiteId",
      "firstName",
      "lastName",
      "position"
    ]
  }
}
```
