Skip to main content
Glama

Create a contact

create_contact

Add a person to the CRM who has not called, chatted or filled in a form. Needs at least one of name, email or phone. IF THE EMAIL OR PHONE ALREADY BELONGS TO A CONTACT, NO NEW CONTACT IS CREATED: the existing one is returned with created=false. Whenever created is false, any identifier the existing contact was missing is filled in from what you sent, and so is a first or last name whose stored value is null; a name they already have is never overwritten, and their lifecycle stage is never touched. created is the ONLY field that tells you whether a person was added. matchedOn names the identifier this tool matched on when it can attribute the match, and is null otherwise — it is a hint, never the answer to "did this already exist". Worked examples: a new person gives created=true, matchedOn=null. An email that already belongs to someone gives created=false, matchedOn=email. Never re-run this to force a second contact.

Input Schema

NameRequiredDescriptionDefault
emailNoEmail address
phoneNoPhone number, any format
last_nameNoLast name
first_nameNoFirst name
lifecycle_stageNoLifecycle stage; defaults to lead

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only cover non-destructive write/openWorld, but the description discloses the entire upsert contract: existing contact returned with created=false, missing identifiers backfilled, non-null names never overwritten, lifecycle stage untouched. It also explains that created is the only authoritative signal and matchedOn is merely a hint, which prevents a real class of agent errors.

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

Conciseness4/5

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

Front-loaded with the purpose, then the match semantics, then worked examples; nearly every sentence carries non-obvious information. The all-caps and the two worked examples are slightly heavy but they disambiguate a genuinely tricky return contract.

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

Completeness5/5

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

No output schema exists, so the description must explain the return payload itself — and it does, defining created and matchedOn and their interaction. Combined with the merge rules, an agent has everything needed to interpret results and avoid duplicate creation.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds a constraint not encoded in the schema: required is empty yet 'at least one of name, email or phone' must be supplied. It also clarifies that the stored lifecycle stage is never overwritten on match.

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

Purpose4/5

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

States a specific verb+resource ('Add a person to the CRM') and narrows scope with 'who has not called, chatted or filled in a form', which implicitly separates it from create_lead for inbound leads. It never names that sibling explicitly, so differentiation requires a small inference.

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?

Gives clear when-to-use conditions and an explicit prohibition ('Never re-run this to force a second contact'), plus the minimum-identifier rule. It stops short of naming an alternative tool for the excluded channels (e.g. create_lead).

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