Skip to main content
Glama
thenavidm

Fluent WordPress MCP Server

by thenavidm

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
FLUENT_WP_URLNoLegacy alias for FLUENT_WP_SITE_URL; conflicting canonical values refuse.
FLUENT_WP_PASSNoLegacy alias for FLUENT_WP_APP_PASSWORD; conflicting canonical values refuse.
FLUENT_WP_USERNoWordPress username; no colon/control characters.
FLUENT_WP_ACCOUNTSNoPrivate unique named site_url/username/app_password or password_file profiles as a JSON array.
FLUENT_WP_SITE_URLNoTrusted HTTPS site root, optional install subdirectory. Do not append wp-json, put a password in the URL, or include a query/fragment.
FLUENT_WP_AUDIT_LOGNoPrivate best-effort JSONL guard log, no payloads.
FLUENT_WP_READ_ONLYNo1/true hides and directly refuses 13 confirmed operations.
FLUENT_WP_APP_PASSWORDNoPrivate dedicated Application Password; never main login.
FLUENT_WP_PASSWORD_FILENoAbsolute owner-private non-symlink password-only file, <=64 KiB.
FLUENT_WP_DEFAULT_ACCOUNTNoExact selected private site label.
FLUENT_WP_ALLOW_DESTRUCTIVENo0/false refuses all confirmed operations; default true.
FLUENT_WP_REQUEST_TIMEOUT_MSNo30000 default; integer 100–300000; no automatic retry.
FLUENT_WP_MIN_REQUEST_INTERVAL_MSNo250 default; integer 0–10000; process spacing only.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
fcrm_dashboard_statsA

Retrieve overall dashboard statistics including active contacts count, campaigns count, emails sent, active automations, onboarding progress, quick links, recent contacts, recent campaigns, active automations list, and system recommendations.

Required capability: fcrm_view_dashboard

Enforced by ReportPolicy::verifyRequest(), the policy default for this route group.

fcrm_list_contactsA

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.

fcrm_get_contactA

Retrieve a single contact by ID or email. Supports eager-loading related data like stats, custom values, custom field definitions, and commerce stats via the with[] parameter.

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.

fcrm_search_contactsA

Search contacts by name or email. Returns a lightweight object of contacts keyed by ID, suitable for dropdowns and autocomplete widgets. Optionally loads default contacts when no search term is provided.

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.

fcrm_create_contactA

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.

fcrm_update_contactA

Update an existing contact's fields, custom values, tags, and lists. Supports attaching and detaching tags/lists in a single request. The subscriber object or individual fields can be passed in the request body.

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.

fcrm_contact_notesB

Retrieve a paginated list of notes for a contact. Supports searching notes by title. Each note includes the user who created it.

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.

fcrm_add_contact_noteA

Add a new note to a contact. The note description supports SmartCode/merge tags which are parsed before saving. If created_at is not provided, it defaults to the current WordPress time.

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.

fcrm_list_tagsA

Retrieve a paginated list of tags. Optionally includes subscriber counts and a separate array of all tags for dropdown/select usage.

Required capability: fcrm_manage_contact_cats

Enforced by TagPolicy::verifyRequest(), the policy default for this route group.

fcrm_list_listsA

Retrieve a paginated list of contact lists. Optionally includes subscriber counts and a separate array of all lists for dropdown/select usage.

Required capability: fcrm_manage_contact_cats

Enforced by ListPolicy::verifyRequest(), the policy default for this route group.

fcrm_list_campaignsA

Retrieve a paginated list of email campaigns. Supports filtering by status, search term, labels, and sorting. Optionally includes campaign statistics.

Required capability: fcrm_read_emails or fcrm_manage_emails : which one applies depends on the action being performed.

Enforced by CampaignPolicy::verifyRequest(), the policy default for this route group.

fcrm_get_campaignA

Retrieve a single campaign by ID. Optionally include related data (template, subjects) via the with parameter. When viewCampaign is set, returns the campaign with its paginated emails. Also returns available email templates and the server's current time.

Required capability: fcrm_read_emails or fcrm_manage_emails : which one applies depends on the action being performed.

Enforced by CampaignPolicy::verifyRequest(), the policy default for this route group.

fcrm_campaign_statsA

Get overview statistics for a campaign including sent count, email status breakdown, and open/click analytics. This is a lighter-weight alternative to the full campaign status endpoint, suitable for dashboard widgets or summary views.

Required capability: fcrm_read_emails or fcrm_manage_emails : which one applies depends on the action being performed.

Enforced by CampaignPolicy::verifyRequest(), the policy default for this route group.

fcrm_list_sequencesB

Retrieve a paginated list of email sequences. Optionally include statistics (email count, subscriber count, revenue) for each sequence. Requires FluentCampaign Pro.

Required capability: fcrm_read_emails or fcrm_manage_emails : which one applies depends on the action being performed.

Enforced by SequencePolicy::verifyRequest(), the policy default for this route group.

Requires: FluentCampaign Pro. Without it the route does not exist.

fcrm_list_automationsA

Retrieve a paginated list of automation funnels. Supports sorting, searching by title, and filtering by label IDs. Optionally includes trigger definitions.

Required capability: fcrm_read_funnels or fcrm_write_funnels : which one applies depends on the action being performed.

Enforced by FunnelPolicy::verifyRequest(), the policy default for this route group.

fcrm_automation_reportA

Retrieve statistical reporting data for a specific automation funnel. Returns aggregated stats generated by the Reporting service.

Required capability: fcrm_read_funnels or fcrm_write_funnels : which one applies depends on the action being performed.

Enforced by FunnelPolicy::verifyRequest(), the policy default for this route group.

fcrm_contact_emailsA

Retrieve a paginated list of emails sent to a contact. Supports filtering by open/click status. Can also show FluentSMTP logs when the tab parameter is set to fluentsmtp.

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.

fc_list_spacesB

Returns the paginated list of spaces with each one formatted for display, including the current user permissions and membership within it.

Controller: SpaceController@getAllSpaces Route source: fluent-community/app/Http/Routes/api.php:34

fc_get_spaceB

Returns one space with its settings, topics, the current user membership and the permissions they hold inside it.

Controller: SpaceController@getBySlug Route source: fluent-community/app/Http/Routes/api.php:10

fc_list_feedsA

Returns a page of posts the current user is allowed to read, transformed for display, with the pinned post of a space returned separately on the first page.

Controller: FeedsController@get Route source: fluent-community/app/Http/Routes/api.php:45

fc_get_feedA

Returns a single post by numeric id; the id is resolved to a slug and then handled exactly as the by-slug endpoint.

Controller: FeedsController@getFeedById Route source: fluent-community/app/Http/Routes/api.php:53

fc_create_feedB

Creates a post, renders its Markdown, attaches media and topics, and returns the transformed post ready to prepend to the feed.

Controller: FeedsController@store Route source: fluent-community/app/Http/Routes/api.php:46 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

fc_update_feedA

Replaces the body and metadata of an existing post, re-renders it, reconciles its media and topics, and records an edit history entry.

Controller: FeedsController@update Route source: fluent-community/app/Http/Routes/api.php:47 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

fc_delete_feedA

Deletes a post from the community.

Controller: FeedsController@deleteFeed Route source: fluent-community/app/Http/Routes/api.php:64 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

fc_list_commentsA

Returns every comment on a post in chronological order, with each author profile attached and the current user liked state flagged.

Controller: CommentsController@getComments Route source: fluent-community/app/Http/Routes/api.php:55

fc_create_commentA

Posts a comment or a threaded reply on a feed item, renders its Markdown, links any attached media and bumps the post comment count.

Controller: CommentsController@store Route source: fluent-community/app/Http/Routes/api.php:56 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

fc_update_commentA

Replaces the body of an existing comment, re-renders it, and reconciles its attached media with the submitted list.

Controller: CommentsController@update Route source: fluent-community/app/Http/Routes/api.php:57 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

fc_delete_commentA

Deletes a comment, recounts the comments on its post and hands any attached media to the media cleanup hook.

Controller: CommentsController@deleteComment Route source: fluent-community/app/Http/Routes/api.php:60 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

fc_react_to_feedA

Adds or removes the current user reaction on a post and returns the updated count : a second route onto the same behaviour as the reactions toggle endpoint.

Controller: CommentsController@addOrRemovePostReact Route source: fluent-community/app/Http/Routes/api.php:59 Toggle semantics are not idempotent; inspect state before deliberately repeating. Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

fc_list_coursesB

Returns the paginated list of courses the current user may manage, each with its student count and its section and lesson totals.

Controller: CourseAdminController@getCourses Route source: fluent-community/Modules/Course/Http/course_api.php:22

fc_get_courseA

Returns one course in its editable form, with the lock screen configuration, the attached category ids and : when it has students : the completion count and average progress.

Controller: CourseAdminController@findCourse Route source: fluent-community/Modules/Course/Http/course_api.php:24

fc_course_studentsB

Returns the paginated roster of a course, each student carrying their enrolment pivot and their completion percentage.

Controller: CourseAdminController@getCourseStudents Route source: fluent-community/Modules/Course/Http/course_api.php:29

fc_course_lessonsB

Returns the lessons of a course in display order, optionally narrowed to one section.

Controller: CourseAdminController@getLessons Route source: fluent-community/Modules/Course/Http/course_api.php:52

fc_space_membersA

Returns the paginated active membership of a space, each entry carrying the member profile and their role, plus the count of outstanding join requests.

Controller: SpaceController@getMembers Route source: fluent-community/app/Http/Routes/api.php:18

fc_get_profileB

Returns one member public profile by username, with the navigation tabs the portal should render for that member.

Controller: ProfileController@getProfile Route source: fluent-community/app/Http/Routes/api.php:89

fc_scheduled_postsA

Returns the paginated list of posts one member has scheduled but not yet published, soonest first.

Controller: SchedulePostsController@getScheduledPosts Route source: fluent-community-pro/app/Http/Routes/api.php:112 Requires FluentCommunity Pro and its native scheduled-post permission. It is not a scheduling action.

fc_analytics_top_membersA

Returns ten member profiles ordered by lifetime points, drawn from those who joined within the requested range.

Controller: MembersReportsController@getTopMembers Route source: fluent-community-pro/app/Http/Routes/api.php:82 Requires FluentCommunity Pro native report permissions; the response is not a whole-site audience export.

fc_analytics_top_commentersA

Returns the ten members who wrote the most comments within the requested range, each with their comment count.

Controller: MembersReportsController@topCommenters Route source: fluent-community-pro/app/Http/Routes/api.php:84 Requires FluentCommunity Pro native report permissions; the response is not a whole-site audience export.

fc_analytics_top_post_startersA

Returns the ten members who published the most posts within the requested range, each with their post count.

Controller: MembersReportsController@topPostStarter Route source: fluent-community-pro/app/Http/Routes/api.php:83 Requires FluentCommunity Pro native report permissions; the response is not a whole-site audience export.

fc_analytics_member_activityA

Returns a gap-filled time series of member signups across the requested range.

Controller: MembersReportsController@activity Route source: fluent-community-pro/app/Http/Routes/api.php:81 Requires FluentCommunity Pro native report permissions; the response is not a whole-site audience export.

ff_list_formsB

Read one Forms page with current native sorting and date filters. Requires fluentform_dashboard_access and applicable native form permissions. Not an all-forms snapshot.

ff_get_formA

Read one native form with formMeta; may include private integration/settings data. Requires fluentform_forms_manager for the selected form.

ff_form_fieldsA

Read current native field definitions; no field edits. Requires fluentform_forms_manager for the selected form.

ff_list_submissionsB

Read one native individual-entry page for an explicitly selected form. Corrects old GET /report/submissions. Requires fluentform_entries_viewer for that form. Entry bodies are private; no automatic detail call or mark-as-read action.

ff_form_reportA

Read the native form report with explicit approval because ReportService::form invokes ReportHelper::maybeMigrateData. It may update stored reporting data. Requires native form-scoped fluentform_entries_viewer; hidden/refused in read-only mode. No automatic retries.

ff_form_statsA

Read native date-range form statistics. Requires form-scoped fluentform_entries_viewer when form_id is selected; all-forms permission otherwise. Native reports may change via site hooks and version-specific provider behavior. Not guaranteed lifetime revenue or all plugin statistics.

get_current_userA

One authenticated WordPress current-user GET with view context; verifies one user read, not site ownership or all plugin permissions. Native private output is untrusted.

list_accountsC

Local profile labels/default/credential source only; no site URL, username, password path, provider identity or network request.

get_operation_schemaA

Local method/path/query/body schema and pinned provenance for one selected native tool. No provider call or credentials.

fc_analytics_overviewC

Retained legacy selector mapped to four fixed reviewed native Pro report routes. Not a whole-community analytics export; native report permissions apply.

preview_site_batchA

Local native validation/hash for 1–20 CRM/Community writes. Binds selected profile label/site/username, request order and packaged schemas. No password read/provider state check or remote approval token.

submit_site_batchA

Confirmed 1–20 ordered CRM/Community writes. Validate every request and exact review hash before first request, stop on first failure with known receipts and unattempted indices; no retries/rollback/continuation.

read_site_snapshotA

Prevalidate 1–20 native reads for one exact private site profile; return at most5 MiB combined CRM/Community/Forms responses. No auto-pages, stateful report, browser cookies, uploads or atomic provider snapshot. Native records may contain private personal data.

save_site_snapshotA

Confirmed 1–20 prevalidated native reads delivered only to an exclusive new0600 JSON file. No record body echoed, overwrites, upload or all-pages guarantee. Failures remove only this helper’s newly created file and return indices without native records.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.1/5.0

Scored across 54 tools

Disambiguation3/5

Within each product family (fcrm_, fc_, ff_) the list/get/create/update/delete tools are mostly distinct, but there is real overlap: fc_analytics_overview is explicitly a 'legacy selector mapped to four fixed routes' that duplicates the four specific fc_analytics_* tools, fcrm_dashboard_stats/fcrm_campaign_stats/fcrm_automation_report are competing stats endpoints, and the four generic batch/snapshot tools (preview_site_batch, submit_site_batch, read_site_snapshot, save_site_snapshot) shadow the individual read/write tools. An agent could easily pick the wrong stats or batch tool.

Naming Consistency3/5

Inside the fcrm_ and fc_ prefixes there is a fairly predictable verb_noun pattern (list_contacts, get_contact, create_contact, update_contact), with minor exceptions like fcrm_contact_notes (noun-only) and fcrm_add_contact_note. However the server mixes four naming families (fcrm_, fc_, ff_) plus an unprefixed generic set (get_current_user, list_accounts, preview_site_batch) and fc_analytics_overview breaking its own prefix, so the overall surface is readable but not uniform.

Tool Count2/5

54 tools is very heavy for an MCP surface, and while the server does span three products (FluentCRM, FluentCommunity, FluentForms) plus generic helpers, the count is well past the comfortable 3-15 range. Several tools are near-duplicates (batch wrappers vs. single calls, legacy analytics selector vs. four specific analytics tools), so not every tool clearly earns its place.

Completeness3/5

Read coverage is broad and the community side has full CRUD for feeds and comments, but there are notable gaps: FluentCRM campaigns, sequences, and automations are read-only (no create/update/delete), and the FluentForms family is entirely read-only with no form or submission write operations. Agents can work around some gaps but cannot complete full lifecycle workflows in several domains.

Maintenance

ActivityMaintained
ResponsivenessNo issues