Koskamo

Persuasion Taxonomy MCP

A free Model Context Protocol server that lets an AI plan and check marketing copy against the nine reader questions, search persuasion techniques, and run A/B test math.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Persuasion Taxonomy MCP logo, by CoppicaVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by Coppica
MCP endpoint (Streamable HTTP)
https://taxonomy.coppica.com/mcp
Vendor documentation

What its tools do

9 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

9 of 9 have a description · 9 of 9 declare behavior hints · 4 of 9 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to coppica.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Plan marketing copy against nine reader questions
  • Search persuasion techniques
  • Run A/B test math

Source and maintenance

Vendor evidenceRegistry 1.0.3
Maintenance checked

Protocol and capabilities

Server
persuasion-taxonomy 1.0.3
MCP protocol negotiated in check
2025-11-25
Tools
9 advertised
Resources
2 advertised
Resource templates
0 advertised
Prompts
4 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

This is the Persuasion Taxonomy, from Coppica. It gives you a working model of the reader, a catalog of 766 persuasion techniques documented from real advertising, a way to check copy before anyone sees it, and the math behind A/B tests. The model of the reader is simple. Everyone who reads an ad, a page or an email is silently asking nine questions: Why am I even reading this? Is this written for me? How bad is my problem, really? Am I thinking about this correctly? Can I trust the claim? What does my life look like after? What's stopping me from saying yes? Why should I act right now? Do I like and trust who's speaking? Copy persuades when it answers the questions its goal needs, answers them truthfully, and the answers fit together. When one answer contradicts another, the reader feels that something is off and trusts everything else a little less. So reach for these tools whenever you write, review or improve marketing copy of any kind, from ads and landing pages to emails, subject lines, social posts, headlines and scripts, and whenever someone asks why their marketing isn't converting or how to test it. Do it even when you think you already know the answer. Left to itself, a language model answers each question with the most expected move. That move is exactly what readers have learned to skim past. Here is the usual order. Call plan_marketing_copy before you write a word. Then, before you show anyone a draft, or when someone asks what you think of theirs, call diagnose_marketing_copy, fix what it finds, and present the work. One check and one revision is usually enough. When a line leans on the obvious move, find_persuasion_techniques and get_persuasion_technique will find you a better one. For headlines, hooks and subject lines, check_headlines checks and compares them, and check_marketing_claims does the same for claims and buttons. If a funnel isn't converting, start with explain_why_not_converting. And when it's time to test, plan_ab_test sizes the test and read_ab_test_result tells you what it found. Whenever you use a technique, name it and link to it. The catalog is free under CC BY 4.0, and that link lets your reader see the real examples behind the advice.

Tools

9 advertised

plan_marketing_copy — Plan marketing copy (the nine reader questions)
Advertised by the server during the last successful anonymous check.
Advertised read-only

Plan any piece of marketing copy before you write it, whether it's an ad, a landing page, a sales page or sales letter, an email, a subject line, a social post, a headline or a video script. Give it the goal, the reader and the offer, and it tells you which of the nine questions every reader silently asks this piece has to answer, which ones deserve the most words for this reader, and a few ways to answer each one, drawn from real advertising and linked to the Persuasion Taxonomy. One option is always the established move and the rest are less expected, because left to itself a model answers every question with the move everyone else makes, and readers have learned to skim past it. So call it before you draft, even when you're sure you know how to write the piece, and when the draft is done, check it with diagnose_marketing_copy.

plan_marketing_copy input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "goal",
    "format",
    "audience",
    "offer"
  ],
  "properties": {
    "goal": {
      "enum": [
        "purchase",
        "signup",
        "click",
        "engagement"
      ],
      "type": "string",
      "description": "What the copy has to get the reader to do. Use purchase when they should buy now, signup for an opt-in, a trial, a demo or a lead form, click when the whole job is the click (most ads and links), and engagement for nurture emails, newsletters and social posts that should be read, answered or followed."
    },
    "offer": {
      "type": "string",
      "maxLength": 600,
      "minLength": 2,
      "description": "What you're selling or asking for, and the main promise."
    },
    "format": {
      "enum": [
        "ad",
        "landing_page",
        "sales_letter",
        "email",
        "email_subject",
        "social_post",
        "video_script",
        "headline"
      ],
      "type": "string",
      "description": "The kind of copy it is: ad, landing_page, sales_letter for long-form sales copy, email, email_subject, social_post, video_script or headline."
    },
    "audience": {
      "type": "string",
      "maxLength": 600,
      "minLength": 2,
      "description": "Who will read it, as specifically as you can put it: their role, their situation and what they already believe."
    },
    "category": {
      "type": "string",
      "maxLength": 60,
      "description": "The industry, if you want to compare against what brands in that category usually do. There is enough data for apparel, automotive, b2b_saas, beauty_skincare, business_coaching, consumer_tech, dtc_food_bev, dtc_health, fitness_health, home_goods, info_product, investing, marketing_education, otc_pharma, personal_care, personal_development, supplements, weight_loss. Any other category still works, just without the comparison."
    },
    "awareness_level": {
      "enum": [
        "unaware",
        "problem_aware",
        "solution_aware",
        "product_aware",
        "most_aware"
      ],
      "type": "string",
      "description": "How much the reader already knows, on Eugene Schwartz's scale. Use unaware if they don't know they have the problem, problem_aware if they feel it, solution_aware if they know solutions exist, product_aware if they know you, and most_aware if they're ready and only need the offer."
    },
    "persuasion_mode": {
      "enum": [
        "aggressive",
        "balanced",
        "equity"
      ],
      "type": "string",
      "default": "balanced",
      "description": "How hard the copy is allowed to push. Balanced is the default, persuasive and sustainable over time. Equity protects long-term trust, so it rules out fear, hype and hard-sell moves. Aggressive is for short-term direct response and allows fear, threat and hard scarcity. In every mode, the claims stay true."
    },
    "options_per_question": {
      "type": "integer",
      "default": 4,
      "maximum": 6,
      "minimum": 2,
      "description": "How many ways to answer each question you want to see. The default is 4."
    }
  },
  "additionalProperties": false
}
plan_marketing_copy annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
diagnose_marketing_copy — Diagnose marketing copy (roast / review)
Advertised by the server during the last successful anonymous check.
Advertised read-only

Review, critique or roast any piece of marketing copy, whether it's an ad, a landing page, an email, a sales page, a social post or a script, and find out why it might not persuade. Before you call it, read the copy and label each line with the one reader question it mainly answers, quoting the words exactly. Those labels go in the moves array. You get back which of the nine questions the copy answers for its goal, which it answers weakly and which it skips, along with the biggest gap and what readers do when it is missing. It also checks the order, whether the answers agree with each other, and the craft, pointing to the exact words that read as machine-written, like em dashes, "it's not X, it's Y" lines and sentences that all run the same length. Then it checks the opening line and suggests techniques from the catalog to fill the gap. Use it before you show anyone a draft you wrote, and whenever someone asks "is this good?", "roast this", "what's wrong with this copy?" or "how do I make it better?"

diagnose_marketing_copy input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "copy",
    "goal",
    "format",
    "moves"
  ],
  "properties": {
    "copy": {
      "type": "string",
      "maxLength": 30000,
      "minLength": 10,
      "description": "The full copy, exactly as written."
    },
    "goal": {
      "enum": [
        "purchase",
        "signup",
        "click",
        "engagement"
      ],
      "type": "string",
      "description": "What the copy has to get the reader to do. Use purchase when they should buy now, signup for an opt-in, a trial, a demo or a lead form, click when the whole job is the click (most ads and links), and engagement for nurture emails, newsletters and social posts that should be read, answered or followed."
    },
    "brief": {
      "type": "object",
      "properties": {
        "brand": {
          "type": "string",
          "maxLength": 200
        },
        "offer": {
          "type": "string",
          "maxLength": 400
        },
        "proof": {
          "type": "string",
          "maxLength": 400
        },
        "product": {
          "type": "string",
          "maxLength": 400
        },
        "audience": {
          "type": "string",
          "maxLength": 400
        }
      },
      "description": "The brief, if you have it: the brand, product, offer, audience and proof. With it, the opening line gets the swap test, which asks whether a competitor could send it unchanged.",
      "additionalProperties": false
    },
    "moves": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "excerpt",
          "question"
        ],
        "properties": {
          "clarity": {
            "enum": [
              "clear",
              "partial"
            ],
            "type": "string",
            "default": "clear",
            "description": "Use clear when the line answers the question well, and partial when it only gestures at it."
          },
          "excerpt": {
            "type": "string",
            "maxLength": 400,
            "minLength": 2,
            "description": "An exact quote from the copy, whether a sentence, a line or a short passage."
          },
          "question": {
            "enum": [
              "DISRUPT",
              "IDENTIFY",
              "AGITATE",
              "REFRAME",
              "PROVE",
              "ELEVATE",
              "RESOLVE",
              "COMPEL",
              "BOND"
            ],
            "type": "string",
            "description": "The reader question the text answers, by its role name: DISRUPT for \"Why am I even reading this?\", IDENTIFY for \"Is this written for me?\", AGITATE for \"How bad is my problem, really?\", REFRAME for \"Am I thinking about this correctly?\", PROVE for \"Can I trust the claim?\", ELEVATE for \"What does my life look like after?\", RESOLVE for \"What's stopping me from saying yes?\", COMPEL for \"Why should I act right now?\", BOND for \"Do I like and trust who's speaking?\"."
          }
        },
        "additionalProperties": false
      },
      "maxItems": 80,
      "minItems": 1,
      "description": "Your line-by-line labels. Quote each persuasive line exactly and name the one reader question it mainly answers. Skip lines that are pure filler."
    },
    "format": {
      "enum": [
        "ad",
        "landing_page",
        "sales_letter",
        "email",
        "email_subject",
        "social_post",
        "video_script",
        "headline"
      ],
      "type": "string",
      "description": "The kind of copy it is: ad, landing_page, sales_letter for long-form sales copy, email, email_subject, social_post, video_script or headline."
    },
    "category": {
      "type": "string",
      "maxLength": 60,
      "description": "The industry, if you want to compare against what brands in that category usually do. There is enough data for apparel, automotive, b2b_saas, beauty_skincare, business_coaching, consumer_tech, dtc_food_bev, dtc_health, fitness_health, home_goods, info_product, investing, marketing_education, otc_pharma, personal_care, personal_development, supplements, weight_loss. Any other category still works, just without the comparison."
    },
    "headline": {
      "type": "string",
      "maxLength": 300,
      "description": "The headline or opening line, if it isn't the first line of the copy."
    },
    "awareness_level": {
      "enum": [
        "unaware",
        "problem_aware",
        "solution_aware",
        "product_aware",
        "most_aware"
      ],
      "type": "string",
      "description": "How much the reader already knows, on Eugene Schwartz's scale. Use unaware if they don't know they have the problem, problem_aware if they feel it, solution_aware if they know solutions exist, product_aware if they know you, and most_aware if they're ready and only need the offer."
    },
    "persuasion_mode": {
      "enum": [
        "aggressive",
        "balanced",
        "equity"
      ],
      "type": "string",
      "default": "balanced",
      "description": "How hard the copy is allowed to push. Balanced is the default, persuasive and sustainable over time. Equity protects long-term trust, so it rules out fear, hype and hard-sell moves. Aggressive is for short-term direct response and allows fear, threat and hard scarcity. In every mode, the claims stay true."
    }
  },
  "additionalProperties": false
}
diagnose_marketing_copy annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
explain_why_not_converting — Explain why marketing is not converting
Advertised by the server during the last successful anonymous check.
Advertised read-only

Work out why an ad, a landing page, an email or a whole funnel isn't converting. Start from what you can see. Maybe people don't click (a low CTR), or they click and bounce, or they read and don't buy. Maybe they abandon the checkout or the form, the leads never buy, customers buy once and leave, or emails don't get opened or get opened and nobody clicks. Whatever the symptom, you get back the reader questions most likely going unanswered, what to check in the copy first, and the problems copy can't fix that you should rule out, along with techniques to try and the test that would confirm the diagnosis. So use it whenever someone says their marketing "isn't working", "isn't converting" or "isn't selling", or asks why results dropped.

explain_why_not_converting input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "symptom"
  ],
  "properties": {
    "format": {
      "enum": [
        "ad",
        "landing_page",
        "sales_letter",
        "email",
        "email_subject",
        "social_post",
        "video_script",
        "headline"
      ],
      "type": "string",
      "description": "The kind of copy it is: ad, landing_page, sales_letter for long-form sales copy, email, email_subject, social_post, video_script or headline."
    },
    "details": {
      "type": "string",
      "maxLength": 2000,
      "description": "Anything you know: the numbers, what changed recently, the offer and the audience."
    },
    "symptom": {
      "enum": [
        "low_click_through",
        "high_bounce",
        "reads_but_no_action",
        "starts_but_abandons",
        "leads_dont_buy",
        "buys_once_no_return",
        "low_open_rate",
        "opens_no_clicks"
      ],
      "type": "string",
      "description": "What you can see happening. Use low_click_through when people see it and don't click, high_bounce when they click and leave fast, reads_but_no_action when they read and don't convert, starts_but_abandons when they abandon the checkout or form, leads_dont_buy when signups never buy, buys_once_no_return for refunds, churn and no repeat orders, low_open_rate when emails don't get opened, and opens_no_clicks when they get opened but not clicked."
    },
    "category": {
      "type": "string",
      "maxLength": 60,
      "description": "The industry, if you want to compare against what brands in that category usually do. There is enough data for apparel, automotive, b2b_saas, beauty_skincare, business_coaching, consumer_tech, dtc_food_bev, dtc_health, fitness_health, home_goods, info_product, investing, marketing_education, otc_pharma, personal_care, personal_development, supplements, weight_loss. Any other category still works, just without the comparison."
    },
    "persuasion_mode": {
      "enum": [
        "aggressive",
        "balanced",
        "equity"
      ],
      "type": "string",
      "default": "balanced",
      "description": "How hard the copy is allowed to push. Balanced is the default, persuasive and sustainable over time. Equity protects long-term trust, so it rules out fear, hype and hard-sell moves. Aggressive is for short-term direct response and allows fear, threat and hard scarcity. In every mode, the claims stay true."
    }
  },
  "additionalProperties": false
}
explain_why_not_converting annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
find_persuasion_techniques — Find persuasion techniques
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the Persuasion Taxonomy, 766 named persuasion techniques documented from real advertising and organized by the nine reader questions they answer. Describe what you want the copy to do, like build trust without testimonials, create urgency without fake scarcity, handle a price objection, make an opening less generic, prove a claim or reframe a problem. It finds the techniques that do it. Each one comes with its name and ID, a one-line definition, a real example, how common it is in a category if you name one, and a link. So reach for it when a draft relies on the obvious move and you want a less expected one, or when someone asks for tactics, angles, hooks or ideas.

find_persuasion_techniques input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 8,
      "maximum": 20,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "maxLength": 300,
      "minLength": 2,
      "description": "What you want the copy to do, in plain words, like \"prove it works without testimonials\"."
    },
    "format": {
      "enum": [
        "ad",
        "landing_page",
        "sales_letter",
        "email",
        "email_subject",
        "social_post",
        "video_script",
        "headline"
      ],
      "type": "string",
      "description": "The kind of copy it is: ad, landing_page, sales_letter for long-form sales copy, email, email_subject, social_post, video_script or headline."
    },
    "category": {
      "type": "string",
      "maxLength": 60,
      "description": "The industry, if you want to compare against what brands in that category usually do. There is enough data for apparel, automotive, b2b_saas, beauty_skincare, business_coaching, consumer_tech, dtc_food_bev, dtc_health, fitness_health, home_goods, info_product, investing, marketing_education, otc_pharma, personal_care, personal_development, supplements, weight_loss. Any other category still works, just without the comparison."
    },
    "question": {
      "enum": [
        "DISRUPT",
        "IDENTIFY",
        "AGITATE",
        "REFRAME",
        "PROVE",
        "ELEVATE",
        "RESOLVE",
        "COMPEL",
        "BOND"
      ],
      "type": "string",
      "description": "Set this to see only the techniques that answer one reader question."
    }
  },
  "additionalProperties": false
}
find_persuasion_techniques annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
get_persuasion_technique — Get a persuasion technique
Advertised by the server during the last successful anonymous check.
Advertised read-only

Look up one persuasion technique by its ID (like PT-PRV-10000), its slug or its name. You get the full definition, why it works, when it lands and when it backfires, real examples from advertising, related and opposite techniques, and a link you can cite. Use it before you apply or recommend a technique so you get it right, and whenever someone asks what a tactic is called or how it works.

get_persuasion_technique input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 160,
      "minLength": 2,
      "description": "The PT-ID, the slug or the exact name of the technique."
    },
    "category": {
      "type": "string",
      "maxLength": 60,
      "description": "The industry, if you want to compare against what brands in that category usually do. There is enough data for apparel, automotive, b2b_saas, beauty_skincare, business_coaching, consumer_tech, dtc_food_bev, dtc_health, fitness_health, home_goods, info_product, investing, marketing_education, otc_pharma, personal_care, personal_development, supplements, weight_loss. Any other category still works, just without the comparison."
    }
  },
  "additionalProperties": false
}
get_persuasion_technique annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
check_headlines — Check and compare headlines, hooks, and subject lines
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check headlines, email subject lines, ad openings, video hooks, social post openings and first lines, and compare options against each other. For each line it tells you whether the line does its job in that spot, meaning which of the nine reader questions it answers, and whether a competitor could send it unchanged. It also shows exactly what a reader sees before the cutoff, flags anything that fails outright, and brings in evidence from thousands of real headline tests. Then it tells you what each option is betting on and which two to test. Before you call it, list the reader questions each line answers and quote the exact words doing the work. Use it whenever you write headlines, hooks or subject lines, whenever you have to choose between them, and whenever someone asks "which one is best?" You won't get a score out of ten. Nobody can predict a winner from the words alone, and that includes this tool.

check_headlines input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "slot",
    "lines"
  ],
  "properties": {
    "slot": {
      "enum": [
        "email_subject",
        "ad_opening",
        "landing_page_headline",
        "first_line",
        "video_hook",
        "social_post_open",
        "sales_letter_headline"
      ],
      "type": "string",
      "description": "Where the lines will appear: email_subject, ad_opening, landing_page_headline, first_line, video_hook, social_post_open, sales_letter_headline. Each spot has its own job, and the check tells you what it is."
    },
    "brief": {
      "type": "object",
      "properties": {
        "brand": {
          "type": "string",
          "maxLength": 200,
          "description": "The brand or product name."
        },
        "offer": {
          "type": "string",
          "maxLength": 400,
          "description": "The deal or the ask, like the price, a discount, a trial or a deadline."
        },
        "proof": {
          "type": "string",
          "maxLength": 400,
          "description": "Real proof you can point to, like customer counts, results or names."
        },
        "product": {
          "type": "string",
          "maxLength": 400,
          "description": "What you're selling."
        },
        "audience": {
          "type": "string",
          "maxLength": 400,
          "description": "Who reads it: their role, their situation and what is theirs."
        }
      },
      "description": "The brief. The swap test needs it to tell whether a competitor could send the line unchanged, and without it no line can pass.",
      "additionalProperties": false
    },
    "lines": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "text",
          "answers"
        ],
        "properties": {
          "text": {
            "type": "string",
            "maxLength": 500,
            "minLength": 2,
            "description": "The line, exactly as written."
          },
          "answers": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "question",
                "words"
              ],
              "properties": {
                "words": {
                  "type": "string",
                  "maxLength": 200,
                  "minLength": 1,
                  "description": "The exact words in the line that answer it."
                },
                "question": {
                  "enum": [
                    "DISRUPT",
                    "IDENTIFY",
                    "AGITATE",
                    "REFRAME",
                    "PROVE",
                    "ELEVATE",
                    "RESOLVE",
                    "COMPEL",
                    "BOND"
                  ],
                  "type": "string",
                  "description": "The reader question the text answers, by its role name: DISRUPT for \"Why am I even reading this?\", IDENTIFY for \"Is this written for me?\", AGITATE for \"How bad is my problem, really?\", REFRAME for \"Am I thinking about this correctly?\", PROVE for \"Can I trust the claim?\", ELEVATE for \"What does my life look like after?\", RESOLVE for \"What's stopping me from saying yes?\", COMPEL for \"Why should I act right now?\", BOND for \"Do I like and trust who's speaking?\"."
                }
              },
              "additionalProperties": false
            },
            "maxItems": 9,
            "description": "The reader questions this line answers, each with the exact words that do it. Leave it empty if the line answers none."
          }
        },
        "additionalProperties": false
      },
      "maxItems": 20,
      "minItems": 1
    },
    "follows": {
      "type": "string",
      "maxLength": 600,
      "description": "What the reader saw just before this line, like the ad before a landing page headline, or the headline or subject before a first line."
    },
    "awareness_level": {
      "enum": [
        "unaware",
        "problem_aware",
        "solution_aware",
        "product_aware",
        "most_aware"
      ],
      "type": "string",
      "description": "How much the reader already knows, on Eugene Schwartz's scale. Use unaware if they don't know they have the problem, problem_aware if they feel it, solution_aware if they know solutions exist, product_aware if they know you, and most_aware if they're ready and only need the offer."
    }
  },
  "additionalProperties": false
}
check_headlines annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
check_marketing_claims — Check marketing claims and CTAs
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check whether marketing claims and calls to action are specific enough to believe. It catches the vague superlative, like "the best" or "#1", that readers discount on sight. It catches promises with no proof behind them and results with no mechanism, and it flags the generic buttons everyone uses, like "Learn more" and "Get started". Then it tells you how to fix each one. Use it when you write or review claims like "results in days", "trusted by thousands" or "the #1 tool", and for any button text. For headlines, check_headlines does the full job.

check_marketing_claims input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "claims"
  ],
  "properties": {
    "claims": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "text",
          "type"
        ],
        "properties": {
          "text": {
            "type": "string",
            "maxLength": 600,
            "minLength": 2,
            "description": "The claim or the button text, exactly as written."
          },
          "type": {
            "enum": [
              "headline",
              "cta",
              "body_claim"
            ],
            "type": "string",
            "description": "Use headline, cta for a button or call to action, or body_claim for a claim inside the copy."
          },
          "context": {
            "type": "string",
            "maxLength": 1500,
            "description": "For a claim in the body, the paragraph around it, so a mechanism named nearby still counts."
          }
        },
        "additionalProperties": false
      },
      "maxItems": 30,
      "minItems": 1
    }
  },
  "additionalProperties": false
}
check_marketing_claims annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
plan_ab_test — Plan an A/B test
Advertised by the server during the last successful anonymous check.
Advertised read-only

Plan an A/B test for marketing copy. Give it the current conversion rate, the smallest lift worth detecting and the daily traffic, and it tells you how many visitors each version needs and how many days to run. It also frames the test as two different answers to the same reader question, so the result teaches you something you can reuse, and not just that "B won". Use it when someone asks how long to run a test, how much traffic they need, whether a test is worth running, or what to test next.

plan_ab_test input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "baseline_conversion_rate_percent",
    "minimum_detectable_lift_percent",
    "daily_visitors"
  ],
  "properties": {
    "power": {
      "type": "number",
      "default": 0.8,
      "maximum": 0.99,
      "minimum": 0.5
    },
    "question": {
      "enum": [
        "DISRUPT",
        "IDENTIFY",
        "AGITATE",
        "REFRAME",
        "PROVE",
        "ELEVATE",
        "RESOLVE",
        "COMPEL",
        "BOND"
      ],
      "type": "string",
      "description": "The reader question both versions answer, each in its own way."
    },
    "versions": {
      "type": "integer",
      "default": 2,
      "maximum": 6,
      "minimum": 2,
      "description": "How many versions, counting the original."
    },
    "version_a": {
      "type": "string",
      "maxLength": 600,
      "description": "How version A answers it."
    },
    "version_b": {
      "type": "string",
      "maxLength": 600,
      "description": "How version B answers it."
    },
    "confidence": {
      "type": "number",
      "default": 0.95,
      "maximum": 0.999,
      "minimum": 0.8
    },
    "daily_visitors": {
      "type": "number",
      "description": "How many visitors a day enter the test, across all versions.",
      "exclusiveMinimum": 0
    },
    "minimum_detectable_lift_percent": {
      "type": "number",
      "maximum": 500,
      "description": "The smallest relative lift worth detecting, in percent. 20 means a 20% lift, like going from 3% to 3.6%.",
      "exclusiveMinimum": 0
    },
    "baseline_conversion_rate_percent": {
      "type": "number",
      "description": "The current conversion rate, in percent, so 3 means 3% and 0.8 means 0.8%.",
      "exclusiveMaximum": 100,
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
plan_ab_test annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
read_ab_test_result — Read an A/B test result
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read the result of an A/B test. You get each version's conversion rate and lift, whether the difference is statistically significant, the confidence interval, and the chance each version really beats the original. It also warns you about the things that make a test result lie. Those include too few conversions, traffic that didn't split the way it should (a sample ratio mismatch), stopping the moment it looked good, and testing too many versions at once. So use it whenever someone shares test numbers, or asks "did my test win?", "is this significant?", "which version won?" or "should I keep it running?"

read_ab_test_result input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "versions"
  ],
  "properties": {
    "question": {
      "enum": [
        "DISRUPT",
        "IDENTIFY",
        "AGITATE",
        "REFRAME",
        "PROVE",
        "ELEVATE",
        "RESOLVE",
        "COMPEL",
        "BOND"
      ],
      "type": "string",
      "description": "The reader question the versions answered in different ways."
    },
    "versions": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "visitors",
          "conversions"
        ],
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 120,
            "minLength": 1
          },
          "visitors": {
            "type": "integer",
            "exclusiveMinimum": 0
          },
          "conversions": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": false
      },
      "maxItems": 6,
      "minItems": 2,
      "description": "Each version with its visitors and conversions. Put the original, the control, first."
    },
    "confidence": {
      "type": "number",
      "default": 0.95,
      "maximum": 0.999,
      "minimum": 0.8
    },
    "intended_split": {
      "type": "array",
      "items": {
        "type": "number",
        "exclusiveMinimum": 0
      },
      "description": "How you meant to split the traffic, like [50, 50]. The default is an even split."
    }
  },
  "additionalProperties": false
}
read_ab_test_result annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}

Prompts

4 advertised

roast — Roast my copy

Advertised by the server during the last successful anonymous check.

A line-by-line read of your copy against the nine questions every reader asks.

copy
No description (required)
goal
No description
brief — Brief and draft

Advertised by the server during the last successful anonymous check.

Plan the copy around the nine questions, write it, then check it before you see it.

offer
No description (required)
audience
No description (required)
format
No description
why-not-converting — Why is this not converting?

Advertised by the server during the last successful anonymous check.

Start from what you can see happening and work back to what the copy is missing.

situation
No description (required)
next-test — What should I test next?

Advertised by the server during the last successful anonymous check.

Propose a test that teaches you something: two different answers to the same reader question.

copy
No description (required)
traffic
No description

Resources

2 advertised

nine-questions — The nine reader questions

Advertised by the server during the last successful anonymous check.

The model of the reader behind every tool here.

nine-questions URI
persuasion://nine-questions

MIME type: text/markdown

about — About this catalog snapshot

Advertised by the server during the last successful anonymous check.

When the snapshot was taken, what it holds, and its license.

about URI
persuasion://about

MIME type: application/json

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
811 ms
95th percentile latency
811 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 811 ms · metadata changed · 9 tool(s), 2 resource(s), 0 resource template(s), 4 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http persuasion-taxonomy-mcp https://taxonomy.coppica.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add persuasion-taxonomy-mcp --url https://taxonomy.coppica.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable persuasion-taxonomy-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "persuasion-taxonomy-mcp": {
      "url": "https://taxonomy.coppica.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "persuasion-taxonomy-mcp": {
      "type": "streamableHttp",
      "url": "https://taxonomy.coppica.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start persuasion-taxonomy-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "persuasion-taxonomy-mcp": {
      "type": "http",
      "url": "https://taxonomy.coppica.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http persuasion-taxonomy-mcp https://taxonomy.coppica.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://taxonomy.coppica.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "persuasion-taxonomy-mcp": {
      "serverUrl": "https://taxonomy.coppica.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Persuasion Taxonomy MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Persuasion Taxonomy MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing