Your voice, in any AI.
Add Idiolect AI to Claude, ChatGPT, or your coding agent once. From then on, when it writes for you, it writes as you — and can check the result against your own writing before you send it.
Add it to your AI.
Idiolect AI is one URL. Paste it into your AI’s connector settings and sign in — nothing to install, no key to manage.
https://idiolect.app/api/mcpWhere that goes, app by app:
Chat apps
Idiolect AI is listed in Claude's connector directory — find it under Settings → Connectors and sign in. Or add it by URL: Settings → Connectors → Add custom connector. Works on web, desktop, and mobile.
Listed as Idiolect. The directory link opens inside claude.ai, so it needs you signed in there; the connector URL works either way. Claude's Free plan allows one custom connector.
Settings → Connectors → Advanced → turn on Developer mode. Then add a connector with the URL and sign in.
ChatGPT keeps custom connectors behind Developer Mode for now, so the free tier can't add one yet. One-click install lands with our directory listing.
Add a custom connector in Perplexity's connector settings, paste the URL, and sign in.
Perplexity keeps custom remote connectors on its paid plans.
Coding agents
One command, then sign in from inside Claude Code.
claude mcp add --transport http idiolect https://idiolect.app/api/mcp/mcpPick idiolect → Authenticate in the panel that opens. Add --scope user to use it in every project.
Or let Claude Code set itself up
Add the Idiolect AI MCP server for me: run `claude mcp add --transport http idiolect https://idiolect.app/api/mcp`, then tell me to run /mcp and choose Authenticate.One command — nothing to clone. Grab a key from Settings → API keys first.
codex mcp add idiolect \
--env IDIOLECT_API_KEY=your-key-here \
--env IDIOLECT_BASE=https://idiolect.app \
-- npx -y idiolect-mcpThat writes an [mcp_servers.idiolect] entry to ~/.codex/config.toml with your key — no shell export needed.
Or let Codex set itself up
Set up the Idiolect AI MCP server in Codex: run `codex mcp add idiolect --env IDIOLECT_API_KEY=<paste my key> --env IDIOLECT_BASE=https://idiolect.app -- npx -y idiolect-mcp`, then confirm it's registered.Editors
One click adds it, then sign in. Or add it by hand under Settings → Tools & MCP with the URL below.
Add to CursorOne click adds it, then sign in. The command line works too, and is the easier path over SSH.
Add to VS Codecode --add-mcp '{"name":"idiolect","type":"http","url":"https://idiolect.app/api/mcp"}'Whole workspace
These are set up once for a tenant. Everyone on it keeps their own voice — the connector resolves each person separately when they sign in.
On your agent: Add a tool → New tool → Model Context Protocol. Paste the URL, then pick Dynamic discovery as the OAuth 2.0 type — this connector registers itself from there.
Copilot Studio dropped SSE in 2025; this connector speaks the Streamable transport it expects.
Using something else? Any client that supports remote MCP servers can use the same URL — Zed, Windsurf, Cline, Amazon Q, and Docker's MCP Toolkit all take it as-is.
Nothing new to learn — just ask for writing the way you already would. Your AI reaches for Idiolect AI on its own.
- “Reply to this email in my voice.”
- “Score this LinkedIn post against how I actually write.”
- “Rewrite this paragraph so it sounds like me, and tell me whether it got closer.”
- “Draft a newsletter intro from these notes, in my voice.”
What it can do.
All 15 tools are free during beta. Draft and rewrite still require an authenticated account with a saved Voice Profile. get_credit_status is the source of truth for access; draft and rewrite results carry the same structured credit state.
The four native-onboarding tools are remote OAuth-only for Claude. The local stdio package intentionally remains the existing six-tool API-key surface; native orchestration is not silently advertised there.
| Tool | Input | Plan |
|---|---|---|
| get_idiolect_stateremote OAuth only | none | Free beta |
| select_onboarding_methodremote OAuth only | workflowId, baseVersion, method | Free beta |
| approve_voice_evidenceremote OAuth only | workflowId, baseVersion, idempotencyKey, confirmation, evidence with text and sourceType | Free beta |
| record_voice_feedbackremote OAuth only | workflowId, baseVersion, outputId, status, correctionText, critique, idempotencyKey | Free beta |
| get_my_voice | none | Free beta |
| create_my_voice | samples and/or guided answers from the user; name and idempotencyKey optional; remote native mode uses workflowId and baseVersion and forbids samples/answers | Free beta |
| list_writing_profiles | none | Free beta |
| create_writing_profile | samples and/or guided answers from the user; name optional | Free beta |
| add_samples_to_writing_profile | profileId and samples | Free beta |
| set_current_writing_profile | profileId | Free beta |
| delete_writing_profile | profileId; replacementProfileId when required | Free beta |
| get_credit_status | none | Free beta |
| score_voice | text — 1–8,000 characters | Free beta |
| rewrite_in_voice | text — 1–8,000 characters; targetRegister — email | slack | social | essay (optional); instructions — 1–4,000 characters (optional); `changeScope` — `polish` | `rewrite` | `transform` (optional); `effects` — up to 6 named effects (optional); situation (optional); onboarding optional | Free beta |
| draft_in_voice | brief — 1–8,000 characters; format — linkedin | x_post | x_thread | newsletter | email | generic (optional); `changeScope` — `polish` | `rewrite` | `transform` (optional); `effects` — up to 6 named effects (optional); situation (optional); onboarding optional | Free beta |
Starts or resumes Claude's versioned onboarding state and returns no private writing.
What the model sees
Start or resume the authenticated user's private native onboarding workflow and return only aggregate progress and the four setup options.
Selects one of four setup methods for the current Claude workflow.
What the model sees
Select one of the four native onboarding methods for the authenticated user's versioned workflow.
Stores only exact blocks the user selected under the server's canonical disclosure.
What the model sees
Persist only the exact writing blocks the authenticated user explicitly selected, under Idiolect AI's canonical disclosure and scope.
Reports back on a real succeeded output — a verdict every time, the user's final text only when the assistant actually has it. What is kept is private profile evidence, kept because the user wrote it: the tool takes no permission argument and the assistant answers nothing on their behalf.
What the model sees
Record what the user did with an Idiolect AI draft or rewrite, against the outputId from its receipt. Report back every time they respond to one, not merely when something went wrong — a status by itself is useful. status is accepted, corrected_and_accepted, or rejected. Put what you observed in critique: what changed, why, or what they said. Send correctionText when you have their final text verbatim, and omit it otherwise; a summary of the edit belongs in critique.
Your Voice Card plus the structured profile behind it — tone, signature moves, rhythm, and the things you’d never write. Called once, before your AI writes.
What the model sees
Use this when you are about to write anything on the user's behalf — emails, posts, messages, commit messages, PR descriptions, docs. Loads the user's Idiolect AI voice so you write as them.
Builds your Voice Profile from writing you provide or approve, without sending the writing back in the tool response. If the evidence is too thin, it tells you exactly what is missing.
What the model sees
Compatibility setup action for creating a first Voice Profile from approved writing. Use create_writing_profile for explicit multi-profile creation.
What the model sees
List the authenticated user's Writing Profiles and identify the current profile.
What the model sees
Create a new Writing Profile from approved writing. This never changes an existing profile.
What the model sees
Add approved writing samples to the exact Writing Profile identified by profileId.
What the model sees
Make the exact Writing Profile identified by profileId current for future writing.
What the model sees
Delete the exact Writing Profile identified by profileId. A current profile may require a replacementProfileId.
Returns the server-resolved generation and credit state. During free beta, the starter balance is a preview and drafts and rewrites do not consume it.
What the model sees
Return the authenticated account's generation access and credit balance. During the free beta, the balance is a preview and drafting does not use it.
Voice Match is relative: how much closer a draft reads to you than to generic model prose. Not a detector, and not forensic.
What the model sees
Check how close candidate prose is to the selected voice. Returns Voice Match only when the saved corpus and candidate are eligible; otherwise returns an unmeasured reason and safe evidence provenance.
If the rewrite scores worse than what you wrote, it keeps yours and says so, rather than handing back something flatter.
What the model sees
Rewrite supplied prose in the selected voice. Returns the safe recommendation, generated candidate, diagnostic delta, and measurement details; absolute Voice Match stays withheld unless independent held-out evidence and the target register support it. When the candidate regresses, the recommendation retains the original.
Writes from a brief in your voice. It matches how you write — never invents what you think.
What the model sees
Draft new prose in the selected voice from a supplied brief. Returns measurement details; absolute Voice Match stays withheld unless independent held-out evidence and the target register support it.
What comes back
Scores arrive with their own provenance, so a client can always tell a real measurement from an unmeasured one — and never present an estimate as more than it is.
{
"voiceMatch": 84,
"measured": true,
"validated": true,
"instrument": "LUAR-MUD authorship embedding (validated)",
"register": "reddit-casual",
"approximate": true,
"reason": null,
"evidence": { "scoringEligible": true, "blockCount": 9, "characterCount": 4210 }
}relativeThe delta is the robust signal; register names the corpus the absolute anchors were fit on, and approximate stays true while they are. Full method and limits: Voice Match.
Credit status
Free beta is explicit in both relay copy and machine fields. The starter balance is a preview, not a countdown; generation charges zero credits.
{
"state": "free_beta",
"mode": "free",
"balance": 30,
"balancePreview": true,
"unitCost": 0,
"charged": 0,
"generationAvailable": true,
"purchaseRequired": false,
"manageUrl": null,
"message": "Free during beta. No credits are being used."
}In the dormant credits-mode contract, a known zero balance returns a structuredpurchase_required tool error and the stable first-party management path. A temporary accounting outage returns accounting_unavailable without suggesting purchase. Retry safety is stated only for these pre-generation denials; paid enforcement remains disabled.
Building on this directly? The connector speaks Streamable HTTP and authenticates with OAuth 2.1; the same endpoint also accepts a personal API key as a bearer token. There’s a REST Score API too.
If something’s off.
It asks you to sign in again
The connection expired or was never completed. Remove the connector, add it again, and finish the sign-in. In ChatGPT, check Developer Mode is still on — switching it off drops the connection.
“No voice saved on this account yet”
You’re signed in, but this account has no voice yet. Make one at idiolect.app/onboard — and check you signed into the connector with the same account.
Rewrite or draft says you don’t have access
Generation is free during beta. Reload the connector and try once more; if the message remains, contact hello@idiolect.app.
“Rate limit reached”
Writing and scoring are capped at 30 calls every 5 minutes. It clears on its own.
You get the writing, but no Voice Match
There isn’t enough of your writing saved yet to score against — roughly 600 characters across four separate pieces. You still get the draft; we’d rather withhold the number than show one that doesn’t mean anything. Add more samples in your Voice Profile.
Your AI never uses it
Check the connector is switched on for that conversation, then ask for the writing directly — “reply to this in my voice.” Some apps only pick up a new connector in a fresh chat.
Still stuck?
Email us. Tell us which app you connected from and roughly when it happened — that’s enough for us to find it. A person answers.
support@idiolect.app →What we do with your writing is set out in the privacy policy.