Fluent WordPress MCP Server & CLI

A free, open source Fluent WordPress MCP server and CLI that lets Claude Code, Codex, Cursor and other AI agents work with FluentCRM, FluentCommunity and Fluent Forms on your site.

Navid Moazzezby Navid Moazzez·Updated Oct 5, 2026·15 min read·
Your computer
  1. 1

    Add it with a single command in a terminal.

    Put your own site address, username and application password in place of the examples.

    claude mcp add fluent-wp \
    -e FLUENT_WP_SITE_URL=https://example.com \
    -e FLUENT_WP_USER=YOUR_USERNAME \
    -e FLUENT_WP_APP_PASSWORD=YOUR_APPLICATION_PASSWORD \
    -- npx -y @thenavidm/fluent-wp-mcp-cli@latest
  2. 2

    In Claude Code, type /mcp. WordPress should show as connected.

    /mcp

Needs Node 22 or newer, an HTTPS WordPress site and an application password. Make one in two minutes.

It's free and open source. If it saves you time, star it on GitHub, so more people find it.

Rate this tool

This free Fluent WordPress MCP server and CLI gives your AI real access to the Fluent plugins on your WordPress site: FluentCRM, FluentCommunity and Fluent Forms. It reads and updates CRM contacts, campaigns and automations, posts and comments in your community, follows course progress, and reads form submissions and stats.

It's one install with two ways in. Claude, Codex, Cursor or any other MCP app calls its 54 tools for you, and the same tools work as a CLI that agents like Claude Code, Codex and OpenCode run, or that you type yourself.

In this guide, I'll show you:

  • What the Fluent WordPress MCP server & CLI is, and what you can ask it
  • How to install it and check that it works
  • When to use the MCP server, and when the CLI
  • Every tool, and how to keep your account safe

Every tool on this page comes from the server itself, and every cost was measured in Claude Code.

key_takeaways.mdTL;DR

Key takeaways

It gives Claude, Codex, Cursor and any other MCP app 54 tools for the Fluent plugins on your WordPress site: FluentCRM, FluentCommunity and Fluent Forms.
It signs in with a WordPress application password, never your main password, and works with the plugins your site already has.
Every change waits for your approval, because a tag can start an automation and a post can notify your members.
The same tools run as a CLI, which costs your AI nothing until it runs.

What is the Fluent WordPress MCP server & CLI?

The Fluent WordPress MCP server & CLI is a free, open source program that lets AI agents work with FluentCRM, FluentCommunity and Fluent Forms on your WordPress site for you, in two ways. The MCP server is what an AI app like Claude, Codex or Cursor connects to, through MCP (Model Context Protocol), the open standard AI apps use to call outside tools.

You ask in plain language. Your AI picks the right tool, and the server makes the call to your own WordPress site.

The CLI is the same program as commands. fluent-wp-cli fcrm-list-contacts runs the same code your AI runs when you ask for your newest contacts, whether an agent like Claude Code runs it or you do.

In an AI OS, the layer that connects your AI to your context, your data and your tools, a server like this is how your AI reaches Fluent WordPress. I explain how the parts fit together in how to build an AI operating system, and here's how I use AI myself.

What can you ask it?

Once it's set up, you ask the way you'd ask an assistant. These are real prompts it handles:

Try asking
Who joined my CRM this week, and which tags do they have?
Tag jane@example.com as a customer and add her to my newsletter list.
How did my last email campaign do?
Post a welcome message in my community's General space.
Which students are behind in my course?
Show me the latest submissions to my contact form.

The second one shows why this is useful. Your AI updates the contact in FluentCRM, and you approve it first, because a new tag can start an automation.

It works well next to my WordPress MCP server and Calendly MCP server, so your AI can edit the posts and pages on the same site and book calls with your contacts in the same chat. Every server I've made is on my MCP servers page.

For the emails themselves, my free email subject line generator and email subject line tester help too.

How to install the Fluent WordPress MCP server

Pick your app in the box at the top of this page. Each one is a single command or a pasted block, and they all run through npx, so there's nothing to install first.

Windsurf, Zed and Cline take the same server, though they don't have a tab in the box yet. Follow the box's Cursor tab, and put its block here instead:

AppWhere the block goes
WindsurfIn the Cascade panel, open the Actions menu (…) and choose Open MCP config file, then paste the block.
ClineClick the MCP Servers icon in the Cline panel, open the Configure tab, click Configure MCP Servers, and paste the block.
ZedGo to Settings, then AI, then MCP Servers, and choose Add Server, then Add Local Server. Enter the block's command, arguments and variables, and Zed saves them under context_servers.
Before you start0/3

Watch out: Use an application password, never your main WordPress password. It's a separate password for one app, and you can revoke it any time without changing your login.

Set up your WordPress site

It takes two minutes.

Create an application password0/5

Sign in as a WordPress user who's allowed to do what you'll ask for in each plugin, because the server can do only what that user can.

The site address is the root, like https://example.com, without /wp-json at the end. If you don't see Application Passwords, your site may not be on HTTPS, or a security plugin or your host may have turned them off.

To keep the password out of your app's config, save it alone in a file only you can read, and point FLUENT_WP_PASSWORD_FILE at that file's full path instead.

Check that it works

Run the doctor with --network. It checks your settings, then reads the WordPress user the password belongs to, which proves the password works. It doesn't change anything.

npx -y @thenavidm/fluent-wp-mcp-cli doctor --network

When every line has a check mark, restart your app and ask it for your newest contacts. If the user check passes but a Fluent tool fails, that plugin isn't active, or the user isn't allowed to use it.

In Claude Code, /mcp also shows whether the Fluent WordPress server is connected. It's one of the Claude Code commands worth knowing.

Use the Fluent WordPress CLI

The CLI is the same 54 tools as commands. AI agents that run commands, like Claude Code, Codex and OpenCode, use it on their own, and you can type the same commands in a terminal or a script.

Every tool name becomes a command with dashes, so fcrm_list_contacts runs as fluent-wp-cli fcrm-list-contacts.

npm install -g @thenavidm/fluent-wp-mcp-cli
fluent-wp-cli
fluent-wp-cli fcrm-list-contacts --per-page 5
fluent-wp-cli fcrm-list-tags --per-page 10
fluent-wp-cli fc-list-spaces
fluent-wp-cli ff-list-submissions --form-id 3 --per-page 5

The bare fluent-wp-cli lists every command, fluent-wp-cli which <words> finds the command for a task, and fluent-wp-cli <command> --help shows what a command takes. Every change needs --confirm, the terminal's version of your approval.

fluent-wp-cli install <app> adds the server to Claude Code, Codex, Claude Desktop, Cursor, VS Code or Gemini CLI, in each app's own format.

These are the flags you'll use most:

FlagWhat it does
--jsonPrints JSON
--compactPrints the JSON on one line
--select a,b.cKeeps only those fields, and a dotted path goes deeper
--agentMachine mode: compact JSON, no prompts, and it never confirms anything
--confirmLets a write that asks first go ahead
--dry-runShows what a write would do, without doing it

A script can branch on the exit code:

Exit codeWhat it means
0It worked
1Something unexpected went wrong
2The command was typed wrong, or a write needed --confirm
3It wasn't found
4Fluent WordPress rejected the credentials
5Fluent WordPress failed or couldn't be reached
7You hit a rate limit, so wait and try again
10Nothing is set up yet

MCP server or CLI: which one?

Both are the same program with the same 54 tools. The difference is when your AI pays for them, in the tokens it reads.

Every message, in an app that loads every tool
MCP server
25,700 tokens
CLI
Nothing
Every message, in Claude Code
MCP server
1,300 tokens
CLI
Nothing
When Fluent WordPress comes up
MCP server
Nothing more, or in Claude Code the tools it picks
CLI
1,400 tokens, once
20 messages with Fluent WordPress in one, every tool loaded
MCP server
515,000 tokens
CLI
1,400 tokens
Works in Claude Desktop's chat
MCP server
Yes
CLI
No, there's no terminal there
Works in a script, a cron job or CI
MCP server
No
CLI
Yes

An app that loads every tool up front sends the full list with every message, whether you mention Fluent WordPress or not. Claude Code doesn't by default: its tool search sends only the tool names and the server's instructions, and loads a tool's full definition when your AI reaches for it.

The CLI costs nothing until Fluent WordPress comes up. Then your agent reads its skill file once and runs the commands it needs. With the skill added, Claude Code also lists its one-line description with every message, about 60 tokens.

When the whole conversation is about Fluent WordPress, the gap closes. Then the MCP server is the better experience, because you ask in plain language and your AI never has to look up a command.

How to spend less

In Claude Code, leave tool search on, which it is unless you've set ENABLE_TOOL_SEARCH=false.

Turn the server off when you aren't working on your site. In Claude Code that's the /mcp panel, and every AI app has its own switch. FLUENT_WP_READ_ONLY=1 cuts it to the 41 reading tools.

Or install the CLI and connect the server later, on the days it earns its place. Every tool stays in reach, and the standing cost drops to nothing.

Every number here was measured on October 5, 2026 in Claude Code 2.1.286 with Claude Opus 5.5. It's the same one-line prompt with and without the server connected, once with tool search off so every tool loads, and once with Claude Code's default. The skill was measured the same way, and other apps and models count tokens a little differently.

What a change can set off

A change in one of these plugins can do more than it looks. Tagging a contact, adding them to a list or changing their status in FluentCRM can start an automation or an email, and a new contact with double opt-in gets a confirmation email.

In FluentCommunity, a new post, comment or reaction can notify real members, and an announcement can email them. Reading spaces, posts and courses never does.

Fluent Forms submissions are read a page at a time, and reading them doesn't mark them as read. ff_form_report is the one form tool that asks first, because building the report can update data Fluent Forms stores.

For several changes at once, preview_site_batch checks up to 20 CRM or community changes on your computer and gives the batch a fingerprint, and submit_site_batch runs them in order only with that same fingerprint. read_site_snapshot reads up to 20 lists or records in one go, and save_site_snapshot saves them to a new private file.

Watch out: The server sees only the plugins your site has. If FluentCommunity isn't installed, its tools still show up, and they fail when called. Email sequences need FluentCampaign Pro, and community analytics and scheduled posts need FluentCommunity Pro.

Every Fluent WordPress tool

The tables below list all 54 tools, grouped by plugin. Of these, 41 only read, and 13 change something on your WordPress site or your computer.

FluentCRM

fcrm_dashboard_stats
What it does
Reads your CRM dashboard: active contacts, campaigns, emails sent and active automations.
Kind
Reads
fcrm_list_contacts
What it does
Lists contacts, filtered by tags, lists, status or advanced filters.
Kind
Reads
fcrm_get_contact
What it does
Reads one contact by ID or email, with their stats and custom fields.
Kind
Reads
fcrm_search_contacts
What it does
Finds contacts by name or email.
Kind
Reads
fcrm_create_contact
What it does
Adds a contact, with tags and lists.
Kind
Asks first
fcrm_update_contact
What it does
Changes a contact's fields, status, tags and lists.
Kind
Asks first
fcrm_contact_notes
What it does
Reads a contact's notes.
Kind
Reads
fcrm_add_contact_note
What it does
Adds a note to a contact.
Kind
Asks first
fcrm_list_tags
What it does
Lists your tags, with how many contacts have each one.
Kind
Reads
fcrm_list_lists
What it does
Lists your lists, with how many contacts are on each one.
Kind
Reads
fcrm_list_campaigns
What it does
Lists your email campaigns, filtered by status or search.
Kind
Reads
fcrm_get_campaign
What it does
Reads one campaign.
Kind
Reads
fcrm_campaign_stats
What it does
Shows a campaign's sends, opens and clicks.
Kind
Reads
fcrm_list_sequences
What it does
Lists your email sequences, which need FluentCampaign Pro.
Kind
Reads
fcrm_list_automations
What it does
Lists your automation funnels.
Kind
Reads
fcrm_automation_report
What it does
Shows how one automation funnel is doing.
Kind
Reads
fcrm_contact_emails
What it does
Lists the emails sent to a contact, and whether they opened or clicked.
Kind
Reads

FluentCommunity

fc_list_spaces
What it does
Lists your community spaces.
Kind
Reads
fc_get_space
What it does
Reads one space, with its settings and topics.
Kind
Reads
fc_list_feeds
What it does
Lists the posts you can read, with each space's pinned post.
Kind
Reads
fc_get_feed
What it does
Reads one post.
Kind
Reads
fc_create_feed
What it does
Publishes a post in a space, with media and topics.
Kind
Asks first
fc_update_feed
What it does
Changes a post, and keeps an edit history.
Kind
Asks first
fc_delete_feed
What it does
Deletes a post.
Kind
Asks first
fc_list_comments
What it does
Lists a post's comments, oldest first.
Kind
Reads
fc_create_comment
What it does
Posts a comment or a reply.
Kind
Asks first
fc_update_comment
What it does
Changes a comment.
Kind
Asks first
fc_delete_comment
What it does
Deletes a comment.
Kind
Asks first
fc_react_to_feed
What it does
Adds or removes your reaction on a post.
Kind
Asks first
fc_space_members
What it does
Lists a space's members and their roles, with pending join requests.
Kind
Reads
fc_get_profile
What it does
Reads one member's public profile.
Kind
Reads
fc_scheduled_posts
What it does
Lists a member's scheduled posts, soonest first, which needs FluentCommunity Pro.
Kind
Reads

FluentCommunity courses

fc_list_courses
What it does
Lists the courses you can manage, with their students, sections and lessons.
Kind
Reads
fc_get_course
What it does
Reads one course, with its settings.
Kind
Reads
fc_course_students
What it does
Lists a course's students and how far each one has got.
Kind
Reads
fc_course_lessons
What it does
Lists a course's lessons in order.
Kind
Reads

FluentCommunity analytics

fc_analytics_top_members
What it does
Lists the 10 members with the most points who joined in a date range.
Kind
Reads
fc_analytics_top_commenters
What it does
Lists the 10 members who commented most in a date range.
Kind
Reads
fc_analytics_top_post_starters
What it does
Lists the 10 members who posted most in a date range.
Kind
Reads
fc_analytics_member_activity
What it does
Shows member signups over a date range.
Kind
Reads
fc_analytics_overview
What it does
Picks one of four community reports, which need FluentCommunity Pro.
Kind
Reads

Fluent Forms

ff_list_forms
What it does
Lists your forms.
Kind
Reads
ff_get_form
What it does
Reads one form with its settings.
Kind
Reads
ff_form_fields
What it does
Lists a form's fields.
Kind
Reads
ff_list_submissions
What it does
Lists a form's submissions, without marking them as read.
Kind
Reads
ff_form_report
What it does
Builds a form's report, which can update the report data Fluent Forms stores.
Kind
Asks first
ff_form_stats
What it does
Shows a form's stats over a date range.
Kind
Reads

Your sites, batches and snapshots

get_current_user
What it does
Reads the WordPress user the password belongs to.
Kind
Reads
list_accounts
What it does
Lists the sites you've set up, without their passwords.
Kind
Reads
get_operation_schema
What it does
Shows every field one of these requests takes.
Kind
Reads
preview_site_batch
What it does
Checks up to 20 CRM or community changes on your computer and gives the batch a fingerprint.
Kind
Reads
submit_site_batch
What it does
Runs a checked batch in order, only with the fingerprint from its preview.
Kind
Asks first
read_site_snapshot
What it does
Reads up to 20 lists or records from one site in a single go.
Kind
Reads
save_site_snapshot
What it does
Saves up to 20 reads to a new private JSON file.
Kind
Asks first

Is the Fluent WordPress MCP server safe?

A tag can start an automation, and a post can notify your whole community. So 13 tools ask first: every change to a contact, note, post, comment or reaction, the form report, and the batch and snapshot tools that write. They're the ones marked "Asks first" in the tool tables above.

Reading contacts, posts, courses and submissions never asks, because it changes nothing.

When your AI calls one of them, the call needs a yes first. Where you use it decides who gives it:

  • Claude Code (2.1.246 and later) asks you before every call, in every one of its permission modes.
  • An app that can show forms asks you in a form.
  • Any other app takes your AI's confirm: true as the yes, so tell your AI to check with you first.
  • An agent with no person to ask needs FLUENT_WP_CONFIRM=model, so its confirm: true counts in every app.
  • In a terminal, you add --confirm to the command.

If the answer is no, nothing reaches Fluent WordPress.

Make it read-only

Set FLUENT_WP_READ_ONLY=1 and every tool that asks first disappears from the tool list, leaving 41 reading tools.

Keep a log of every write

Set FLUENT_WP_AUDIT_LOG to a file path. The server writes one line per attempted write, allowed or blocked, with what it was about to do and who approved it.

Watch out: Contacts, community posts and form submissions are written by other people, and one can try to give your AI orders. Treat them as data, and use FLUENT_WP_READ_ONLY=1 for an agent working on its own.

Your data

Your requests go straight to your own WordPress site, with no server of ours in between and no tracking. Your application password stays in your app's config, your shell or your password file.

Contacts, members and form submissions are your people's personal data, so keep any snapshot file private and delete it when you're done.

To cut access, revoke the application password under Users, then Profile, and remove the server from your app's config.

Connect more than one WordPress site

Set FLUENT_WP_ACCOUNTS to a JSON list with a name, the site address, the username and a password or password file for each site, and FLUENT_WP_DEFAULT_ACCOUNT to the one that acts when a tool names none. Every tool takes an optional account.

A site never borrows another one's password. If the site you name has no password, the call stops instead of reaching a different site.

Fluent WordPress MCP server settings

Every setting is an environment variable, in your app's config or your shell.

FLUENT_WP_SITE_URL
Default
none
What it does
Holds your site's address, like https://example.com
FLUENT_WP_URL
Default
none
What it does
Holds the same, under its older name
FLUENT_WP_USER
Default
none
What it does
Holds the WordPress username the password belongs to
FLUENT_WP_APP_PASSWORD
Default
none
What it does
Holds the application password
FLUENT_WP_PASS
Default
none
What it does
Holds the same, under its older name
FLUENT_WP_PASSWORD_FILE
Default
none
What it does
Points at a private file holding the password, instead
FLUENT_WP_ACCOUNTS
Default
none
What it does
Lists several sites, as JSON
FLUENT_WP_DEFAULT_ACCOUNT
Default
the first one
What it does
Picks the site that acts when a tool names none
FLUENT_WP_REQUEST_TIMEOUT_MS
Default
30000
What it does
Gives up on a request to your site after this many milliseconds
FLUENT_WP_MIN_REQUEST_INTERVAL_MS
Default
250
What it does
Waits this many milliseconds between requests
FLUENT_WP_READ_ONLY
Default
off
What it does
1 hides every tool that changes something
FLUENT_WP_ALLOW_DESTRUCTIVE
Default
on
What it does
0 refuses the tools that ask first
FLUENT_WP_AUDIT_LOG
Default
none
What it does
Names a file that gets one line per attempted write
FLUENT_WP_SURFACE
Default
full
What it does
search lists three tools that find, describe and run the rest
FLUENT_WP_TOOL_TIMEOUT_MS
Default
none
What it does
Gives up on any tool after this many milliseconds
FLUENT_WP_CONFIRM
Default
human
What it does
model lets your AI's confirm: true approve on its own, for an agent with no person to ask
FLUENT_WP_HTTP_PORT
Default
8787
What it does
Sets the port for --http
FLUENT_WP_HTTP_HOST
Default
127.0.0.1
What it does
Sets the address for --http, and any other needs a token
FLUENT_WP_HTTP_TOKEN
Default
none
What it does
Sets the bearer token every --http request needs
FLUENT_WP_HTTP_ALLOWED_ORIGINS
Default
none
What it does
Lists other websites allowed to call --http, comma separated
FLUENT_WP_DEBUG
Default
off
What it does
1 prints debug lines

Troubleshooting

Run the doctor first. It names the step that failed and the fix.

What you seeWhat to do
The user check failsThe password was revoked or mistyped, or a security plugin blocks it. Make a new application password
The user check passes, but a Fluent tool failsThat plugin isn't active, or the user isn't allowed to use it. Some features need the Pro version
There's no Application Passwords sectionYour site needs HTTPS, and a security plugin or your host may have turned them off
A page of HTML comes back instead of dataCheck the site address. Use the root, without /wp-json, and one that doesn't redirect
The form report asks firstBuilding it can update stored report data. Use ff_form_stats for a plain read
A batch says the fingerprint doesn't matchSomething changed since the preview. Preview again and submit the new fingerprint
"…so it will not run without confirm: true"That's the safety check working. Approve it when your app asks

If the server doesn't show up in your app at all, run the command your app runs, in a terminal, and read the error.

FAQs about the Fluent WordPress MCP server & CLI

Here are the questions people ask most about the Fluent WordPress MCP server and CLI.

The Fluent WordPress MCP server & CLI is a free, open source program that lets an AI app like Claude, Codex or Cursor work with FluentCRM, FluentCommunity and Fluent Forms on your WordPress site.

It has 54 tools for FluentCRM, FluentCommunity and Fluent Forms, and the same tools run as a CLI that agents like Claude Code and Codex use, or that you type yourself.

An MCP server is a standard way to give an AI app real access to a tool, so it can act instead of guessing.

MCP stands for Model Context Protocol, and Claude, Codex, Cursor and many other AI apps speak it.

Every server I've made is on my MCP servers page.

The Fluent WordPress CLI is the same program as the Fluent WordPress MCP server, run as commands.

AI agents like Claude Code, Codex and OpenCode run them for you, and you can type them in a terminal or a script.

One npm package installs both.

Use the Fluent WordPress MCP server in an AI app with no terminal, like Claude Desktop's chat, and the CLI in a terminal, a script or a cron job.

In an AI app that can run commands, like Claude Code, Codex or Cursor, the CLI is the lighter choice, because it costs nothing until it runs.

Yes, the Fluent WordPress MCP server is free and open source under the AGPL-3.0 license.

It works with the Fluent plugins already on your site, so you pay only for any Pro licenses you choose, and for your own AI app.

It works with FluentCRM, FluentCommunity and Fluent Forms on your WordPress site.

You can use any of them on its own, and the tools for a plugin you don't have simply fail.

No, most tools work with the free plugins.

Email sequences need FluentCampaign Pro, and community analytics and scheduled posts need FluentCommunity Pro.

An application password is a separate password for one app, so your main WordPress login never leaves your site.

You can revoke it any time without changing your login.

Yes, the Fluent WordPress MCP server connects as many sites as you set up in FLUENT_WP_ACCOUNTS, each with its own address, user and password.

Every tool takes an optional account, and a site never borrows another one's password.

To disconnect the Fluent WordPress MCP server, revoke its application password under Users, then Profile, which cuts access right away.

Then remove the server from your AI app's config.

The Fluent WordPress MCP server works with any app that speaks MCP.

That includes Claude Code, Claude Desktop, Codex, Cursor, VS Code, Windsurf, Zed, Cline, GitHub Copilot CLI, Gemini CLI, OpenCode, OpenClaw, Antigravity and Hermes.

I did.

I'm Navid Moazzez, and I made the Fluent WordPress MCP server & CLI as one of my free tools on navid.me.

You can read more about me.

The code is on GitHub under the AGPL-3.0 license, and the package is on npm.

More MCP servers & CLIs

Related free tools

Navid Moazzez

AI business strategist

Navid Moazzez helps creators and founders master AI and build their own AI Operating System (AI OS) to automate their business and life.

Navid.me is reader-supported. When you buy through links on this site, I may earn an affiliate commission. Read the affiliate disclaimer.

Free AI newsletter

The most actionable AI newsletter for founders

Every week, get proven AI strategies, curated tools, and step-by-step systems to grow your audience, create better content, and build a profitable creator business.

No fluff, no filler, no BS. Just five minutes each week that might level up your online business and life.

P.S. Sign up now to get free access to my ultimate AI tools guide for creators.

Loved by 10,000+ readers
Loved by 10,000+ readers