Skip to main content
Glama

Add or update a contact

postfjord_add_contact
Idempotent

Adds or updates a contact who asked to hear from your workspace, with an optional double opt-in email to confirm consent before they receive emails or automations.

Instructions

Adds a person to the contacts, or updates the contact with that address. Only for someone who asked to hear from the workspace, never an address found elsewhere. askToConfirm true sends them an email to confirm they want the emails (double opt-in): only confirmed people get emails or automations. That email goes out at once, so confirm with the person you are helping before you set askToConfirm true. While the workspace is paused no email goes out, and the answer says so. An address that unsubscribed or bounced is not added. Tag them afterwards with postfjord_tag_contact. Needs email switched on and the Publish scope. On a retry after a timeout or error, send the same idempotency_key: the first answer comes back and nothing is made or sent twice.

Input Schema

NameRequiredDescriptionDefault
emailYes
lastNameNo
firstNameNo
askToConfirmNoSend the confirmation email now. Default false.
idempotency_keyNoYour own id for this one action, for example post-20261006-launch. Make a new one for each new thing; send the same one again only when you retry. Left out, the exact same call within 10 minutes counts as a retry.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.5/5.0
Behavior3/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), and the description adds genuinely non-obvious side effects beyond them: the opt-in email fires immediately, paused workspaces suppress it, and unsubscribed/bounced addresses are silently refused. It also explains the retry contract for idempotency_key. However it never says what a success response looks like (created vs. updated, whether a confirmation email was queued), which is the main remaining behavioral gap for a mutation tool with no output schema.

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?

Every sentence carries distinct, decision-relevant information: scope, opt-in mechanics, the paused-workspace edge case, the tag follow-on, prerequisites, and the retry contract. The purpose is front-loaded in the first sentence and there is no filler or repetition.

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?

For a 5-parameter mutation tool with annotations present and no output schema, this covers the full decision surface: consent eligibility, irreversible side effects, prerequisites, suppression conditions, and retry safety. The only thin spot is the shape of the returned answer, which is hinted at ('the answer says so') but not enumerated.

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 only 40%, so the description must carry the weight, and it does for the two non-obvious parameters: askToConfirm is explained as double opt-in with immediate send timing, and idempotency_key gets an explicit same-key-on-retry rule. firstName and lastName are left entirely to their self-evident names and maxLength constraints, which is an acceptable but real omission.

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?

States a specific verb and resource with the upsert semantics spelled out: 'Adds a person to the contacts, or updates the contact with that address.' It also scopes the eligible population ('only for someone who asked to hear from the workspace') and points to postfjord_tag_contact for the follow-on step, so it is distinguishable from postfjord_list_contacts and the other contact-adjacent siblings.

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

Usage Guidelines5/5

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

Gives an explicit when ('someone who asked to hear from the workspace'), an explicit when-not ('never an address found elsewhere'), a prerequisite (email switched on plus the Publish scope), and a named follow-on (postfjord_tag_contact). It even adds a pre-call caution: confirm with the person before setting askToConfirm true.

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

Deploy Server

Other Tools