Skip to main content
Glama
thenavidm

Fluent WordPress MCP Server

by thenavidm

fcrm create contact

fcrm_create_contact
Destructive

Create a FluentCRM contact and optionally send a double opt-in email; set force update to modify an existing contact with the same email instead of returning an error.

Instructions

Create a new contact. If __force_update is set to yes, it will update an existing contact with the same email instead of returning an error. Optionally sends a double opt-in email.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by SubscriberPolicy::verifyRequest(), the policy default for this route group. Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cityNoCity.
tagsNoTag IDs to assign.
emailNoContact email address. Must be unique unless `__force_update` is `yes`.
listsNoList IDs to assign.
phoneNoPhone number.
stateNoState or province.
prefixNoName prefix (e.g., Mr, Mrs, Ms).
sourceNoContact source.
statusNoContact subscription status.
accountNoExact configured private account profile label; not a tenant or provider account ID.
confirmNoSet true only when the user asked for exactly this action.
countryNoTwo-letter country code.
payloadNoComplete native JSON body; do not mix with body flags or payload_file. Arrays use repeated JSON object flags or a whole native array in a private file.
timezoneNoTimezone identifier.
last_nameNoLast name.
first_nameNoFirst name.
postal_codeNoPostal/zip code.
contact_typeNoContact type.
double_optinNoSend double opt-in confirmation email.
payload_fileNoAbsolute regular non-symlink JSON body file, at most 1 MiB. Cannot mix with payload/body flags.
date_of_birthNoDate of birth (YYYY-MM-DD).
__force_updateNoIf `yes`, updates existing contact with the same email instead of failing.
address_line_1NoAddress line 1.
address_line_2NoAddress line 2.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv3.0.0

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the required capability, the SubscriberPolicy::verifyRequest enforcement, the mandatory local-confirmation gate, downstream side effects on other people, the no-retry policy, and the upsert-versus-error behavior of `__force_update`. That is unusually rich behavioral context for a destructive, non-idempotent write.

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?

Purpose and upsert behavior are front-loaded and efficient. The closing capability/policy block is dense and slightly awkward ("`fcrm_read_contacts` or `fcrm_manage_contacts` : which one applies depends on the action being performed"), a mild structural blemish on otherwise tight prose.

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 24-parameter, nested-object, destructive write with no output schema, the description covers the critical unknowns: confirmation requirement, policy enforcement, duplicate-email behavior, opt-in email, and retry policy. Return values are unspecified but no output schema exists to anchor them, and the schema handles all field-level semantics.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every field. The description's notes on `__force_update` and double opt-in largely restate schema text ("instead of returning an error", "Send double opt-in confirmation email"), so it adds little beyond the baseline.

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 and resource ("Create a new contact") and clarifies the upsert branch via `__force_update`, which meaningfully distinguishes it from fcrm_update_contact. It never explicitly names the update sibling, so the differentiation is inferable rather than stated.

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?

Clear conditions are given: explicit local confirmation is required, hooks/announcements/automations may affect other people, and no retries. The `__force_update` condition and the `confirm` flag guidance add real routing help, but no alternative tool (e.g. fcrm_update_contact) is named for the modify-existing case.

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