Skip to main content
Glama
thenavidm

Fluent WordPress MCP Server

by thenavidm

fcrm list contacts

fcrm_list_contacts
Read-onlyIdempotent

Retrieve a paginated list of FluentCRM contacts with simple or advanced filtering by tags, lists, statuses, and custom fields.

Instructions

Retrieve a paginated list of contacts. Supports both simple filtering (by tags, lists, statuses) and advanced filtering with complex filter groups. Optionally includes custom field values.

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination.
tagsNoFilter by tag IDs (simple filter mode only).
listsNoFilter by list IDs (simple filter mode only).
searchNoSearch contacts by name, email, or other searchable fields.
accountNoExact configured private account profile label; not a tenant or provider account ID.
sort_byNoColumn to sort by.id
per_pageNoNumber of contacts per page.
statusesNoFilter by contact statuses (simple filter mode only).
sort_typeNoSort direction.DESC
company_idsNoFilter by company IDs.
filter_typeNoType of filtering to apply.simple
has_commerceNoFilter by commerce integration availability.
sms_statusesNoFilter by SMS statuses (simple filter mode only).
custom_fieldsNoSet to `true` to include custom field values in the response.
advanced_filtersNoJSON-encoded advanced filter groups (advanced filter mode only).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv3.0.0

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context beyond them: the required capability (fcrm_read_contacts/fcrm_manage_contacts) and the enforcing policy hook, which an agent needs to know before calling. It stops short of describing pagination limits or response shape.

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?

The functional description is front-loaded in three tight sentences, and the capability/policy note is clearly separated. The policy-enforcement boilerplate is slightly verbose but does carry real authorization meaning, so little is wasted.

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

Completeness4/5

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

For a 15-parameter read tool with 100% schema coverage and no output schema, the description covers purpose, filtering modes, and auth requirements adequately. The main omission is guidance on how simple vs advanced mode maps to parameters and what the advanced_filters JSON should contain, but the schema carries most of that burden.

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% and every parameter is documented in the schema itself, so baseline is 3. The description echoes the filtering concepts (tags, lists, statuses, custom fields) but adds no syntax, format, or interaction detail beyond what the schema already provides.

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 ('Retrieve a paginated list of contacts') and names the two filtering modes plus optional custom-field inclusion. It does not, however, differentiate from the sibling fcrm_search_contacts or fcrm_get_contact, so an agent cannot tell from the description alone which contact-retrieval tool to pick.

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

Usage Guidelines3/5

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

The description implies usage by describing simple vs advanced filtering modes and mentions the required capability, but never states when to choose this over fcrm_search_contacts or fcrm_get_contact, nor any exclusion conditions. Mode selection is left to inference from the filter_type param.

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