Memlane

MCP tools

update_contact

Update a contact

Changes name, company, phones, emails, addresses, or birthday on a contact card and syncs to iCloud or Google when connected. phones, emails, and addresses are full list replacements (not append). To add one entry, call get_contact, then pass the existing list plus the new item. Omit an array to leave that list unchanged. Pass an empty array to clear that list. Each list allows up to 10 entries.

Annotations

{
  "title": "Update a contact",
  "readOnlyHint": false,
  "destructiveHint": false,
  "openWorldHint": true,
  "idempotentHint": false
}

Input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "contactId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "firstName": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 100
        },
        {
          "type": "null"
        }
      ]
    },
    "lastName": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 100
        },
        {
          "type": "null"
        }
      ]
    },
    "displayName": {
      "type": "string",
      "maxLength": 200
    },
    "company": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "null"
        }
      ]
    },
    "phones": {
      "description": "Full replacement phone list (up to 10). Omit to keep current phones. Empty array clears all phones.",
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "number": {
            "type": "string",
            "minLength": 1
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "number"
        ],
        "additionalProperties": false
      }
    },
    "emails": {
      "description": "Full replacement email list (up to 10). Omit to keep current emails. Empty array clears all emails.",
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "format": "email",
            "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "address"
        ],
        "additionalProperties": false
      }
    },
    "addresses": {
      "description": "Full replacement address list (up to 10). Omit to keep current addresses. Empty array clears all addresses.",
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "street": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "city": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "region": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "postalCode": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 40
              },
              {
                "type": "null"
              }
            ]
          },
          "country": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "label": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 40
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      }
    },
    "birthday": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 32
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "contactId"
  ],
  "additionalProperties": false
}

Auth

Bearer personal token (ml_…) or OAuth access token (mla_…). Memlane Pro and iCloud required.

Errors

  • 401 missing or invalid credentials
  • 403 account is not Pro or iCloud is not connected
  • 429 rate limit
  • Tool errors return isError text without a stack trace