Skip to main content
Glama

Create contact

create_contact

Add one contact to a project, for example from the user's signup code. Fails with contact_exists when the address is already there; use upsert_contacts to add or update many in one call. A new contact is enrolled in every live campaign whose audience it matches.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "project_id": "<project_id>",
      "email": "<email>",
      "first_name": "<first_name>",
      "last_name": "<last_name>",
      "timezone": "<timezone>",
      "tags": "<tags>",
      "attributes": "<attributes>"
    },
    "name": "create_contact"
  }
}

Input Schema

NameRequiredDescriptionDefault
tagsYes
emailYes
timezoneYesIANA time zone. Null to send on each campaign's own time zone.
last_nameYes
attributesYesKeys are lowercase letters, digits and _.
first_nameYes
project_idYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic write profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds two things annotations cannot: a named error condition (contact_exists) that signals non-idempotency in practice, and a real side effect — the new contact is enrolled in every live campaign whose audience it matches, which can trigger sends. It stops short of stating required permissions or whether that enrollment can be suppressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the core action front-loaded, then failure behavior, then the bulk alternative, then the side effect. Every sentence carries information an agent needs; nothing is restated from the name or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a seven-required-parameter mutation with no output schema, the description covers the important behavioral risks (duplicate failure, campaign auto-enrollment) but leaves the return value unknown and the attribute/tag payload format unexplained. It is adequate to decide whether to call the tool, less adequate to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 29% (timezone and attributes are the only documented properties), yet the description adds no parameter meaning at all — it never explains tags format, attribute key/value constraints, or why first_name/last_name are nullable but required. Only the email field is referenced obliquely via "the address", leaving five of seven parameters undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Add one contact to a project") and immediately pins down the cardinality ("one") against the bulk sibling upsert_contacts. An agent can distinguish this from update_contact and upsert_contacts without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete use case (from the user's signup code) and an explicit routing rule: use upsert_contacts to add or update many in one call, and expect contact_exists when the address already exists. The only gap is that it never points to update_contact as the alternative for modifying an existing contact, so an agent hitting contact_exists has to infer the next step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources