MCP-Server

Mimiq: test pages and sign-up flows on simulated people

io.github.victorgulchenko/mimiq-mcp
Design & Kreativ Marketing & Werbung Öffentlich und erreichbar MCP 2026-07-28

Was dieses MCP kann

Tests copy, pages, components, and user flows with simulated audiences and compares alternatives to support product and marketing decisions.

mimiq.ask_audience
Ask an audience
Ask simulated people a multiple-choice question (2 to 10 options) and get each person's pick and reasoning. Use it for naming, positioning, or which feature to build next. Each person answers on their own.
Eingabeschema
{'type': 'object', 'required': ['audience', 'question', 'options'], 'properties': {'count': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'How many simulated people (default 10, max 50).'}, 'context': {'type': 'string', 'default': 'Product validation survey', 'maxLength': 500, 'description': 'What the question is for.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 10, 'minItems': 2, 'description': 'Answer options (2 to 10).'}, 'audience': {'type': 'string', 'maxLength': 500, 'description': 'Who to ask, e.g. "SaaS founders with 10 to 50 employees".'}, 'question': {'type': 'string', 'maxLength': 500, 'minLength': 1, 'description': 'The question.'}, 'concurrency': {'type': 'integer', 'default': 6, 'maximum': 20, 'minimum': 1, 'description': 'Parallel workers (default 6).'}, 'timeout_seconds': {'type': 'integer', 'default': 300, 'maximum': 900, 'minimum': 30}}}
Ausgabeschema
{'type': 'object', 'required': ['tool'], 'properties': {'run': {'type': 'object', 'additionalProperties': True}, 'call': {'type': 'object', 'properties': {'pick': {'type': ['string', 'null']}, 'reason': {'type': 'string'}, 'headline': {'type': 'string'}}, 'additionalProperties': True}, 'tool': {'type': 'string'}, 'status': {'type': 'string'}, 'report_url': {'type': ['string', 'null']}, 'summary_card': {'type': 'string'}}, 'additionalProperties': True}
mimiq.compare_copy
Compare two versions of copy
Compare two versions of copy or an email on the same simulated people and get Mimiq's call on which to ship. The same people see version A and version B. Mimiq's call combines a forecast of how people like them behave, asked in both orders, with how the same people moved: clear, leaning, or too close to call (no pick). Returns the call, the reason in one sentence, how many people moved toward each version, each version's top objections, and a link to the report. Without a key, an agent also gets one free A/B test on up to 10 simulated people per version, while the daily free A/B allowance lasts. With a key, any size. The forecast has held up on headlines (76% right on 1,000 real headline A/B tests, against 61% for the best rule of thumb); on emails, text messages and ads it was no better than chance at ranking small wording changes, and on real web page tests it did not beat the simplest guess.
Eingabeschema
{'type': 'object', 'required': ['version_a', 'version_b'], 'properties': {'count': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 3, 'description': 'How many simulated people see both versions (default 10). Use 5 or more: from 5 people up, Mimiq reads who moved. Uses count credits to recruit plus count for version B.'}, 'format': {'enum': ['copy', 'email'], 'type': 'string', 'default': 'copy', 'description': '"copy" for a headline, tagline or short message people come across; "email" for an email in an inbox (a first line "Subject: ..." is read as the subject).'}, 'audience': {'type': 'string', 'maxLength': 500, 'description': 'Who the simulated people should be, in plain words, e.g. "startup founders in SF" or "parents shopping for kids toys". If omitted, Mimiq picks the likely audience from the content.'}, 'version_a': {'type': 'string', 'maxLength': 20000, 'minLength': 1, 'description': 'Version A, usually the current one.'}, 'version_b': {'type': 'string', 'maxLength': 20000, 'minLength': 1, 'description': 'Version B, usually the new one.'}, 'timeout_seconds': {'type': 'integer', 'default': 480, 'maximum': 900, 'minimum': 60}}}
Ausgabeschema
{'type': 'object', 'required': ['tool'], 'properties': {'run': {'type': 'object', 'additionalProperties': True}, 'call': {'type': 'object', 'properties': {'pick': {'type': ['string', 'null']}, 'reason': {'type': 'string'}, 'headline': {'type': 'string'}}, 'additionalProperties': True}, 'tool': {'type': 'string'}, 'status': {'type': 'string'}, 'report_url': {'type': ['string', 'null']}, 'summary_card': {'type': 'string'}}, 'additionalProperties': True}
mimiq.compare_urls
Compare two pages
Compare two web pages (for example a preview deployment and production) on the same simulated people and get Mimiq's call on which to ship. The same people see page A and page B. Mimiq's call combines a forecast, asked in both orders, with how the same people moved: clear, leaning, or too close to call (no pick). Returns the call, the reason in one sentence, how many people moved toward each page, each page's top objections, and a link to the report. Needs public URLs. Without a key, an agent also gets one free A/B test on up to 10 simulated people per version, while the daily free A/B allowance lasts. With a key, any size. On real web page tests the forecast did not beat the simplest guess in a pre-registered run: treat the call as a fast first read.
Externer Zugriff
Eingabeschema
{'type': 'object', 'required': ['url_a', 'url_b'], 'properties': {'count': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 3, 'description': 'How many simulated people see both pages (default 10). Use 5 or more: from 5 people up, Mimiq reads who moved.'}, 'url_a': {'type': 'string', 'format': 'uri', 'maxLength': 2000, 'description': 'Page A, usually the current one (for example production).'}, 'url_b': {'type': 'string', 'format': 'uri', 'maxLength': 2000, 'description': 'Page B, usually the new one (for example a preview deployment).'}, 'audience': {'type': 'string', 'maxLength': 500, 'description': 'Who the simulated people should be, in plain words, e.g. "startup founders in SF" or "parents shopping for kids toys". If omitted, Mimiq picks the likely audience from the content.'}, 'timeout_seconds': {'type': 'integer', 'default': 600, 'maximum': 900, 'minimum': 60}}}
Ausgabeschema
{'type': 'object', 'required': ['tool'], 'properties': {'run': {'type': 'object', 'additionalProperties': True}, 'call': {'type': 'object', 'properties': {'pick': {'type': ['string', 'null']}, 'reason': {'type': 'string'}, 'headline': {'type': 'string'}}, 'additionalProperties': True}, 'tool': {'type': 'string'}, 'status': {'type': 'string'}, 'report_url': {'type': ['string', 'null']}, 'summary_card': {'type': 'string'}}, 'additionalProperties': True}
mimiq.show_report
Show a Mimiq report
Show the finished result of a saved Mimiq test, or two saved tests compared: the call, counts, objections in simulated people's words, and a full report link. Use session IDs from an earlier test result or report URL. Reads your account only and spends no credits.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['session_id'], 'properties': {'session_id': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{1,100}$'}, 'compare_session_id': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{1,100}$'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'required': ['title', 'kind', 'headline', 'reason', 'report_url', 'limitation', 'versions'], 'properties': {'kind': {'type': 'string'}, 'title': {'type': 'string'}, 'reason': {'type': 'string'}, 'headline': {'type': 'string'}, 'versions': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'title', 'counts', 'objections'], 'properties': {'label': {'type': 'string'}, 'title': {'type': 'string'}, 'counts': {'type': 'object', 'required': ['total', 'stayed', 'left'], 'properties': {'left': {'type': 'integer', 'minimum': 0}, 'rated': {'type': 'integer', 'minimum': 0}, 'total': {'type': 'integer', 'minimum': 0}, 'stayed': {'type': 'integer', 'minimum': 0}, 'partway': {'type': 'integer', 'minimum': 0}, 'finished': {'type': 'integer', 'minimum': 0}, 'for_them': {'type': 'integer', 'minimum': 0}, 'understood': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}, 'objections': {'type': 'array', 'items': {'type': 'object', 'required': ['quote', 'person', 'count'], 'properties': {'count': {'type': 'integer', 'minimum': 1}, 'quote': {'type': 'string'}, 'person': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}, 'maxItems': 2, 'minItems': 1}, 'limitation': {'type': 'string'}, 'report_url': {'type': 'string', 'format': 'uri'}}, 'additionalProperties': False}
mimiq.test_component
Test a UI component
Show a UI component (a button, card, form, modal, navigation or pricing table) to simulated people and hear whether they understand it, trust it and would use it. Provide component_html, component_text, or both. With a key, the result ends with a link to the full report in the Mimiq app.
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'goal': {'type': 'string', 'maxLength': 500, 'description': 'What the component should achieve, e.g. "get people to click upgrade".'}, 'count': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'How many simulated people (default 10, max 50).'}, 'audience': {'type': 'string', 'maxLength': 500, 'description': 'Who the simulated people should be, in plain words, e.g. "startup founders in SF" or "parents shopping for kids toys". If omitted, Mimiq picks the likely audience from the content.'}, 'component_html': {'type': 'string', 'maxLength': 50000, 'description': 'The HTML of the component.'}, 'component_text': {'type': 'string', 'maxLength': 20000, 'description': 'A description of the component (instead of, or with, the HTML).'}, 'timeout_seconds': {'type': 'integer', 'default': 180, 'maximum': 900, 'minimum': 30}}}
Ausgabeschema
{'type': 'object', 'required': ['tool'], 'properties': {'run': {'type': 'object', 'additionalProperties': True}, 'call': {'type': 'object', 'properties': {'pick': {'type': ['string', 'null']}, 'reason': {'type': 'string'}, 'headline': {'type': 'string'}}, 'additionalProperties': True}, 'tool': {'type': 'string'}, 'status': {'type': 'string'}, 'report_url': {'type': ['string', 'null']}, 'summary_card': {'type': 'string'}}, 'additionalProperties': True}
mimiq.test_copy
Test copy
Show one piece of copy (a headline, tagline, value proposition, email subject line or call to action) to simulated people and hear how they react and why. To choose between two versions, use mimiq.compare_copy. This tool still accepts variant_b and then runs that same comparison. Returns each person's reaction, objections and what would help, and the counts. With a key, the result ends with a link to the full report in the Mimiq app.
Eingabeschema
{'type': 'object', 'required': ['variant_a'], 'properties': {'count': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'How many simulated people (default 10, max 50).'}, 'audience': {'type': 'string', 'maxLength': 500, 'description': 'Who the simulated people should be, in plain words, e.g. "startup founders in SF" or "parents shopping for kids toys". If omitted, Mimiq picks the likely audience from the content.'}, 'variant_a': {'type': 'string', 'maxLength': 20000, 'description': 'The copy to test.'}, 'variant_b': {'type': 'string', 'maxLength': 20000, 'description': 'Optional second version. With it, this runs mimiq.compare_copy.'}, 'timeout_seconds': {'type': 'integer', 'default': 180, 'maximum': 900, 'minimum': 30}}}
Ausgabeschema
{'type': 'object', 'required': ['tool'], 'properties': {'run': {'type': 'object', 'additionalProperties': True}, 'call': {'type': 'object', 'properties': {'pick': {'type': ['string', 'null']}, 'reason': {'type': 'string'}, 'headline': {'type': 'string'}}, 'additionalProperties': True}, 'tool': {'type': 'string'}, 'status': {'type': 'string'}, 'report_url': {'type': ['string', 'null']}, 'summary_card': {'type': 'string'}}, 'additionalProperties': True}
mimiq.test_flow
Test a flow
Starts immediately at 80% audience fit or more and includes audience summary, examples and fit in the result. Only below 80% returns audience_review: show the warning, then use review_id, confirm_audience and audience_fit_acknowledged to continue, or audience_correction to recruit again. Send simulated people through a multi-step flow (signup, onboarding, checkout) in a real browser, clicking and typing, to find the step where they get stuck or give up. Slower than test_page, and each person uses 5 credits. Returns each person's steps, where they stopped and why.
Externer Zugriff
Eingabeschema
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'maxLength': 2000, 'description': 'Where the flow starts. Must be publicly reachable. For localhost, open a cloudflared tunnel and pass the tunnel URL.'}, 'goal': {'type': 'string', 'maxLength': 500, 'description': 'The task each person tries, e.g. "complete the signup and reach the dashboard". Default: sign up and start using it.'}, 'count': {'type': 'integer', 'default': 5, 'maximum': 10, 'minimum': 1, 'description': 'How many simulated people (default 5, max 10; without a key a free flow has up to 3, and defaults to 3). Each runs a full browser session and uses 5 credits.'}, 'audience': {'type': 'string', 'maxLength': 500, 'description': 'Who the simulated people should be, in plain words, e.g. "startup founders in SF" or "parents shopping for kids toys". If omitted, Mimiq picks the likely audience from the content.'}, 'max_steps': {'type': 'integer', 'maximum': 60, 'minimum': 10, 'description': 'Optional step limit per person (10 to 60). The server defaults to 40.'}, 'review_id': {'type': 'string', 'maxLength': 100, 'description': 'The review_id from a low-fit review or completed/running result. Bound to this URL and test kind.'}, 'timeout_seconds': {'type': 'integer', 'default': 1200, 'maximum': 1800, 'minimum': 60}, 'confirm_audience': {'type': 'boolean', 'description': 'Start with the reviewed people after showing them to the user.'}, 'audience_correction': {'type': 'string', 'maxLength': 1500, 'description': 'Not quite? Change who and rerun: use with review_id. Recruits a new crowd under the existing credit rules; starts at 80% fit or more, otherwise returns a new review.'}, 'audience_fit_acknowledged': {'type': 'boolean', 'description': 'Set only after telling the user about a below-80% fit warning and they choose to continue.'}}}
Ausgabeschema
{'type': 'object', 'required': ['tool'], 'properties': {'run': {'type': 'object', 'additionalProperties': True}, 'call': {'type': 'object', 'properties': {'pick': {'type': ['string', 'null']}, 'reason': {'type': 'string'}, 'headline': {'type': 'string'}}, 'additionalProperties': True}, 'tool': {'type': 'string'}, 'status': {'type': 'string'}, 'report_url': {'type': ['string', 'null']}, 'summary_card': {'type': 'string'}}, 'additionalProperties': True}
mimiq.test_page
Test a page
Starts immediately at 80% audience fit or more and includes audience summary, examples and fit in the result. Only below 80% returns audience_review: show the warning, then use review_id, confirm_audience and audience_fit_acknowledged to continue, or audience_correction to recruit again. Show a web page to simulated people and hear how they react: who would stay, who would leave, and why. Each person scrolls the page and says what confused them, what they doubted and what would change their mind. Use it after you build or change a landing, pricing or signup page, then fix what they raised and test again. Needs a public URL (for localhost, open a tunnel first; see the server instructions). Returns each person's action, thoughts and objections, and the counts. With a key, the result ends with a link to the full report in the Mimiq app.
Externer Zugriff
Eingabeschema
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'maxLength': 2000, 'description': 'The page to test. Must be publicly reachable. For localhost, open a cloudflared tunnel and pass the tunnel URL.'}, 'goal': {'type': 'string', 'maxLength': 500, 'description': 'What the page should get people to do, e.g. "sign up for the waitlist".'}, 'count': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'How many simulated people (default 10, max 50). Each person uses one credit.'}, 'audience': {'type': 'string', 'maxLength': 500, 'description': 'Who the simulated people should be, in plain words, e.g. "startup founders in SF" or "parents shopping for kids toys". If omitted, Mimiq picks the likely audience from the content.'}, 'review_id': {'type': 'string', 'maxLength': 100, 'description': 'The review_id from a low-fit review or completed/running result. Bound to this URL and test kind.'}, 'timeout_seconds': {'type': 'integer', 'default': 300, 'maximum': 900, 'minimum': 30}, 'confirm_audience': {'type': 'boolean', 'description': 'Start with the reviewed people after showing them to the user.'}, 'audience_correction': {'type': 'string', 'maxLength': 1500, 'description': 'Not quite? Change who and rerun: use with review_id. Recruits a new crowd under the existing credit rules; starts at 80% fit or more, otherwise returns a new review.'}, 'audience_fit_acknowledged': {'type': 'boolean', 'description': 'Set only after telling the user about a below-80% fit warning and they choose to continue.'}}}
Ausgabeschema
{'type': 'object', 'required': ['tool'], 'properties': {'run': {'type': 'object', 'additionalProperties': True}, 'call': {'type': 'object', 'properties': {'pick': {'type': ['string', 'null']}, 'reason': {'type': 'string'}, 'headline': {'type': 'string'}}, 'additionalProperties': True}, 'tool': {'type': 'string'}, 'status': {'type': 'string'}, 'report_url': {'type': ['string', 'null']}, 'summary_card': {'type': 'string'}}, 'additionalProperties': True}
mimiq.test_text
Test text
Show any text (a positioning statement, feature description, error message, instructions or an announcement) to simulated people and hear how they react. Pass goal to say what the text should achieve. Returns each person's reaction, objections and what would help. With a key, the result ends with a link to the full report in the Mimiq app.
Eingabeschema
{'type': 'object', 'required': ['text'], 'properties': {'goal': {'type': 'string', 'maxLength': 500, 'description': 'What the text should achieve, e.g. "get people to update their card".'}, 'text': {'type': 'string', 'maxLength': 20000, 'description': 'The text to test.'}, 'count': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'How many simulated people (default 10, max 50).'}, 'audience': {'type': 'string', 'maxLength': 500, 'description': 'Who the simulated people should be, in plain words, e.g. "startup founders in SF" or "parents shopping for kids toys". If omitted, Mimiq picks the likely audience from the content.'}, 'timeout_seconds': {'type': 'integer', 'default': 180, 'maximum': 900, 'minimum': 30}}}
Ausgabeschema
{'type': 'object', 'required': ['tool'], 'properties': {'run': {'type': 'object', 'additionalProperties': True}, 'call': {'type': 'object', 'properties': {'pick': {'type': ['string', 'null']}, 'reason': {'type': 'string'}, 'headline': {'type': 'string'}}, 'additionalProperties': True}, 'tool': {'type': 'string'}, 'status': {'type': 'string'}, 'report_url': {'type': ['string', 'null']}, 'summary_card': {'type': 'string'}}, 'additionalProperties': True}
Geändert
mimiq.compare_urls
1. October 2026 02:42
Geändert
mimiq.compare_copy
1. October 2026 02:42
Geändert
mimiq.ask_audience
1. October 2026 02:42
Geändert
mimiq.test_component
1. October 2026 02:42
Geändert
mimiq.test_text
1. October 2026 02:42
Geändert
mimiq.test_copy
1. October 2026 02:42
Geändert
mimiq.test_flow
1. October 2026 02:42
Geändert
mimiq.test_page
1. October 2026 02:42
Hinzugefügt
mimiq.show_report
1. October 2026 02:42
Geändert
mimiq.test_flow
27. September 2026 02:41
Hinzugefügt
mimiq.compare_urls
25. September 2026 02:44
Hinzugefügt
mimiq.compare_copy
25. September 2026 02:44
Hinzugefügt
mimiq.ask_audience
25. September 2026 02:44
Hinzugefügt
mimiq.test_component
25. September 2026 02:44
Hinzugefügt
mimiq.test_text
25. September 2026 02:44
Hinzugefügt
mimiq.test_copy
25. September 2026 02:44
Hinzugefügt
mimiq.test_flow
25. September 2026 02:44
Hinzugefügt
mimiq.test_page
25. September 2026 02:44