Testimonial.to MCP Server & CLI

A free, open source Testimonial.to MCP server and CLI that lets Claude Code, Codex, Cursor and other AI agents read, import and export your testimonials, and send request emails.

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

    Add it with a single command in a terminal.

    Put your own API key in place of the example.

    claude mcp add testimonial \
    -e TESTIMONIAL_API_KEY=YOUR_API_KEY \
    -- npx -y @thenavidm/testimonial-mcp-cli@latest
  2. 2

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

    /mcp

Needs Node 22 or newer and a Testimonial.to API key, on the Ultimate or Ultimate+ plan. Get it in a minute.

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 Testimonial.to MCP server and CLI gives your AI real access to your Testimonial.to Space: its text and video testimonials, your Wall of Love and your request emails. It reads and filters your testimonials, imports ones customers already gave you, sends request emails and saves an export.

It's one install with two ways in. Claude, Codex, Cursor or any other MCP app calls its 10 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 Testimonial.to 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 10 tools for Testimonial.to: read your testimonials, import ones customers already gave you, send request emails and export them.
Testimonial.to's API comes with its Ultimate and Ultimate+ plans, with one key for each Space.
Every import, request email and export waits for your approval, and nothing reaches your Wall of Love without the customer's consent marked.
The same tools run as a CLI, which costs your AI nothing until it runs.

What is the Testimonial.to MCP server & CLI?

The Testimonial.to MCP server & CLI is a free, open source program that lets AI agents work with your Testimonial.to testimonials 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 Testimonial.to's own API.

The CLI is the same program as commands. testimonial-cli list-testimonials runs the same code your AI runs when you ask for your newest testimonials, 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 Testimonial.to. 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
Show my ten newest text testimonials.
Which testimonials are on my Wall of Love and tagged webinar?
List my video testimonials, and tell me which ones I've highlighted.
Import this email from Sam Lee as a text testimonial with five stars. Sam said I can use it publicly.
Send Alex at alex@example.com a request for a testimonial.
Export every testimonial tagged coaching to a file.

The fifth one shows why this is useful. Asking a happy customer takes one sentence, and the email goes out only after you approve it.

It works well next to my Kit MCP server and WordPress MCP server, so your AI can email your customers and put the best ones on your site in the same chat. Every server I've made is on my MCP servers page.

For sharing the best ones, my free X quote generator and LinkedIn quote generator help too.

How to install the Testimonial.to 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: Each API key belongs to one Space. To work with two Spaces, set up each one as its own account, as shown further down.

Set up your Testimonial.to account

It takes a minute, once your Space is on a plan with the API.

Get your API key0/4

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

Check that it works

Run the doctor with --network. It checks your settings, then asks Testimonial.to to verify the key, without importing, publishing or emailing anything.

npx -y @thenavidm/testimonial-mcp-cli doctor --network

When every line has a check mark, restart your app and ask it for your newest testimonial. A failed check usually means the key came from a different Space, or the Space isn't on a plan with the API.

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

Use the Testimonial.to CLI

The CLI is the same 10 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 list_testimonials runs as testimonial-cli list-testimonials.

npm install -g @thenavidm/testimonial-mcp-cli
testimonial-cli
testimonial-cli list-testimonials --type text --limit 10
testimonial-cli list-testimonials --liked --tag webinar
testimonial-cli send-testimonial-request --name Alex --email alex@example.com --spaceName Acme --adminName Sam --confirm
testimonial-cli export-testimonials --output-file ~/exports/testimonials.json --confirm

The bare testimonial-cli lists every command, testimonial-cli which <words> finds the command for a task, and testimonial-cli <command> --help shows what a command takes. Imports, request emails, batches and exports need --confirm, the terminal's version of your approval.

testimonial-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
4Testimonial.to rejected the credentials
5Testimonial.to 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 10 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
4,900 tokens
CLI
Nothing
Every message, in Claude Code
MCP server
520 tokens
CLI
Nothing
When Testimonial.to comes up
MCP server
Nothing more, or in Claude Code the tools it picks
CLI
2,400 tokens, once
20 messages with Testimonial.to in one, every tool loaded
MCP server
98,000 tokens
CLI
2,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 Testimonial.to 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 Testimonial.to 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 50 tokens.

When the whole conversation is about Testimonial.to, 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 collecting testimonials. In Claude Code that's the /mcp panel, and every AI app has its own switch. TESTIMONIAL_READ_ONLY=1 cuts it to the five 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.

Ask, import, then export

send_testimonial_request emails a real person, so it runs only for the name and address you give it, after you approve. An email can't be unsent.

When you import a testimonial a customer already gave you, customer_consent records whether they agreed to public use, and it starts as no. The server won't put a testimonial on your Wall of Love unless that consent is marked yes, and marking it is your word that the customer agreed.

For several at once, preview_testimonial_batch checks up to 20 imports or request emails on your computer and gives the batch a fingerprint. submit_testimonial_batch runs them in order only with that same fingerprint, so nothing can change between your review and the send. It stops at the first failure and tells you which ones ran.

export_testimonials saves your testimonials to a new JSON file, up to 10,000 at a time, and never overwrites a file. Testimonial.to's list has no pages, so an export that hits its limit can leave some out.

Watch out: A video shows up in the list only once Testimonial.to has finished processing it, so one you just imported can take a while to appear.

Every Testimonial.to tool

The tables below list all 10 tools, grouped by what they're for. Of these, five only read, and five change something in your Space or on your computer.

Testimonials and request emails

list_testimonials
What it does
Lists a Space's testimonials, text and finished videos, filtered by type, Wall of Love, highlight or tag.
Kind
Reads
submit_text_testimonial
What it does
Adds a text testimonial a customer already gave you, with their name, rating and photo.
Kind
Asks first
submit_video_testimonial
What it does
Adds a video testimonial from a public video link a customer already gave you.
Kind
Asks first
send_testimonial_request
What it does
Emails someone a request to leave you a testimonial.
Kind
Asks first

Batches and exports

preview_testimonial_batch
What it does
Checks up to 20 imports or request emails on your computer and gives the batch a fingerprint.
Kind
Reads
submit_testimonial_batch
What it does
Runs a checked batch in order, only with the fingerprint from its preview.
Kind
Asks first
export_testimonials
What it does
Saves your testimonials to a new private JSON file, up to 10,000 at a time.
Kind
Asks first

Your Spaces and requests

verify_space
What it does
Checks your key and shows which Space it belongs to.
Kind
Reads
list_accounts
What it does
Lists the Spaces you've set up, without their keys.
Kind
Reads
get_operation_schema
What it does
Shows every field Testimonial.to accepts for one of its requests.
Kind
Reads

Is the Testimonial.to MCP server safe?

A testimonial carries a real customer's words, and a request email reaches a real inbox. So five tools ask first: every import, request email, batch and export. They're the ones marked "Asks first" in the tool tables above.

Reading your testimonials 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 TESTIMONIAL_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 Testimonial.to.

Make it read-only

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

Keep a log of every write

Set TESTIMONIAL_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: Testimonials are written by your customers, and one can try to give your AI orders. Treat them as data, and use TESTIMONIAL_READ_ONLY=1 for an agent working on its own.

Your data

Your requests go straight to Testimonial.to, with no server of ours in between and no tracking. Your key stays in your app's config, your shell or your token file.

Testimonials carry your customers' names, emails and words, so an export file holds personal data. Keep it private, and delete it when you're done.

To disconnect, remove the server from your app's config. If a key ever gets out, ask Testimonial.to's support to replace it, since its help pages don't show a button for that.

Connect more than one Testimonial.to Space

Each key belongs to one Space, so each Space is its own account here. Set TESTIMONIAL_ACCOUNTS to a JSON list with a name and a key, or a token file, for each Space, and TESTIMONIAL_DEFAULT_ACCOUNT to the one that acts when a tool names none. Every tool takes an optional account.

An account never borrows another one's key. If the Space you name has no key, the call stops instead of using a different Space.

Testimonial.to MCP server settings

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

TESTIMONIAL_API_KEY
Default
none
What it does
Holds your Space's API key
TESTIMONIAL_TOKEN_FILE
Default
none
What it does
Points at a private file holding the key, instead
TESTIMONIAL_ACCOUNTS
Default
none
What it does
Lists several Spaces, as JSON
TESTIMONIAL_DEFAULT_ACCOUNT
Default
the first one
What it does
Picks the Space that acts when a tool names none
TESTIMONIAL_REQUEST_TIMEOUT_MS
Default
30000
What it does
Gives up on a Testimonial.to request after this many milliseconds
TESTIMONIAL_MIN_REQUEST_INTERVAL_MS
Default
250
What it does
Waits this many milliseconds between requests
TESTIMONIAL_READ_ONLY
Default
off
What it does
1 hides every tool that changes something
TESTIMONIAL_ALLOW_DESTRUCTIVE
Default
on
What it does
0 refuses the tools that ask first
TESTIMONIAL_AUDIT_LOG
Default
none
What it does
Names a file that gets one line per attempted write
TESTIMONIAL_SURFACE
Default
full
What it does
search lists three tools that find, describe and run the rest
TESTIMONIAL_TOOL_TIMEOUT_MS
Default
none
What it does
Gives up on any tool after this many milliseconds
TESTIMONIAL_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
TESTIMONIAL_HTTP_PORT
Default
8787
What it does
Sets the port for --http
TESTIMONIAL_HTTP_HOST
Default
127.0.0.1
What it does
Sets the address for --http, and any other needs a token
TESTIMONIAL_HTTP_TOKEN
Default
none
What it does
Sets the bearer token every --http request needs
TESTIMONIAL_HTTP_ALLOWED_ORIGINS
Default
none
What it does
Lists other websites allowed to call --http, comma separated
TESTIMONIAL_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 key check failsThe key is from a different Space, or the Space isn't on Ultimate or Ultimate+. Copy the key again from the Space's ⋯ menu
A video you imported isn't listedTestimonial.to lists a video only once it's processed. Check it in your dashboard
A testimonial won't go on your Wall of LoveIts customer consent isn't marked yes. Mark it only if the customer agreed
A batch says the fingerprint doesn't matchSomething changed since the preview. Preview the batch again and submit the new fingerprint
An export won't savePick a new file in a folder only you can read. An export never overwrites a file
"…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.

More free tools for social proof

Collect testimonials in Senja too, or send them to your email list.

FAQs about the Testimonial.to MCP server & CLI

Here are the questions people ask most about the Testimonial.to MCP server and CLI.

The Testimonial.to MCP server & CLI is a free, open source program that lets an AI app like Claude, Codex or Cursor work with your Testimonial.to testimonials.

It has 10 tools for reading, importing, requesting and exporting testimonials, 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 Testimonial.to CLI is the same program as the Testimonial.to 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 Testimonial.to 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 Testimonial.to MCP server is free and open source under the AGPL-3.0 license.

The API itself comes with Testimonial.to's Ultimate and Ultimate+ plans, so you pay Testimonial.to for that, and for your own AI app.

You need the Ultimate or Ultimate+ plan, because Testimonial.to's API comes with those.

It's set for each Space, so the Space you connect has to be on one of them.

Yes, it can, once the customer's consent to public use is marked yes.

The server refuses otherwise, and marking it is your word that the customer agreed.

No, it never emails anyone on its own.

A request email goes only to the name and address you give it, and only after you approve that exact email.

Yes, it saves up to 10,000 testimonials to a new private JSON file after you approve.

Testimonial.to's list has no pages, so an export that hits its limit can leave some out.

Yes, the Testimonial.to MCP server connects as many Spaces as you set up in TESTIMONIAL_ACCOUNTS, each with its own key.

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

The Testimonial.to 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 Testimonial.to 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