# One voice profile, every tool: ChatGPT, Claude, Gemini, Cursor, Muse · ScriptGrain

> Make ChatGPT, Claude, Gemini and any MCP client write in your style from one measured profile that they read live over MCP, rather than a description you paste and re-paste. The profile, the connector and scoring are free.

Canonical: https://scriptgrain.com/us/one-voice-profile-every-tool

# One voice profile across every tool you write in

*By Jack Stovell · published 2026-09-24 · updated 2026-09-20*

One measured profile can serve every assistant you write in, because ScriptGrain's MCP server lets ChatGPT, Claude, Gemini CLI, Cursor and Muse read the profile and score their drafts live, on every plan including Free. No pasting. No re-explaining your voice each time you open a new tab.

Below this section sits the prompt builder: paste a sample and it measures it in the browser, then writes the one-page version for tools that cannot connect. The live route, where the profile is read over MCP and every draft is scored with [check_voice_match](https://scriptgrain.com/reference/mcp-tool-reference), is the rest of this page.

## Why pasting a style description degrades

Here's the thing about a pasted style guide: it gets read once, at the top of a session, and then it drifts. The model treats it as context, not as a constraint it keeps checking against. Ask it for three more paragraphs an hour later and the guide has already faded into the background noise.

SGR-002 measured this directly. Five blog posts from one author, two held out as the test. A study profile built from the other three, 2,447 words. Each held-out post became a brief, run three ways: GPT-5 bare, GPT-5 with the free prompt builder's one-page measured prompt, and ScriptGrain generating against the profile. Mean voice match against the study profile: ScriptGrain 0.83, bare GPT-5 0.74, GPT-5 with the prompt 0.62.

That's the prompt arm scoring worse than doing nothing at all. The prompt asked for about 14 contractions per 1,000 words and a formality score of 3.7. GPT-5 delivered 0.5 contractions per 1,000 words and a judged formality of 7.2, while still obeying the countable rules: no em dashes, more short sentences. It followed the instructions it could count and ignored the ones it couldn't feel.

Length drifted too. Bare GPT-5 wrote 2,309 words against a 1,393 target, with 17.5 em dashes per draft. ScriptGrain wrote 1,302 words. None.

## One profile, read live

So the fix isn't a better prompt. It's a profile the tool can query mid-task instead of reading once and forgetting.

The loop looks like this: create_profile, generate_content, check_voice_match, save_edit. You build the profile once. Every generation gets scored against it with check_voice_match, free, before you commit to it. Edits you keep get saved back through save_edit, also free, and that feeds the profile's learning rather than vanishing into a chat log.

That's the difference between a description and a live reference. A description says "write casually." A profile says your contraction rate runs at 18 per 1,000 words and your average sentence length sits at 16.9 words, then checks the draft against those numbers rather than trusting the model's sense of "casual." SGR-001 showed what that checking does in practice: run the same banking brief bare and through a profile on the same model, and average sentence length fell from about 17 words to about 11, sentences under eight words doubled from 24% to 48%, contractions rose by roughly 70%, and ten em dashes became none.

One run per arm, unedited. Still, the direction is clear enough.

## Connecting each tool

**ChatGPT.** Settings, Connectors, Add custom connector, paste `https://mcp.scriptgrain.com/mcp`, sign in where your plan allows it. Full walkthrough at [/works-with/chatgpt](https://scriptgrain.com/works-with/chatgpt).

**Claude.** Claude Code: `claude mcp add scriptgrain https://mcp.scriptgrain.com/mcp --transport http --header "Authorization: Bearer sg_live_…"`. On claude.ai: Settings, Connectors, Add custom connector, paste the URL, sign in. Details at [/works-with/claude](https://scriptgrain.com/works-with/claude).

**Gemini CLI.** Add the server to `settings.json`: an `mcpServers` block naming `scriptgrain`, pointing at the same URL, with your bearer key in the headers. See [/works-with/gemini](https://scriptgrain.com/works-with/gemini) for the exact file.

**Cursor.** Same URL, same bearer header, added as a custom MCP client. Covered at [/works-with/cursor](https://scriptgrain.com/works-with/cursor).

**Meta Muse.** The same MCP URL again, added as a custom integration. See [/works-with/muse](https://scriptgrain.com/works-with/muse).

Every route ends at the same server: `https://mcp.scriptgrain.com/mcp`, streamable HTTP, legacy SSE at `/sse`, 30 tools, bearer header or OAuth with a one-time sign-in on ScriptGrain's consent page. One server, five doors in.

## What stays free

Free gets you one voice profile and one full writing analysis across all 45 attributes, no card needed. That extraction is a one-time thing for the life of the account, so choose the samples well. Free also connects ChatGPT, Claude and any MCP client; the wiring costs nothing.

What costs credits is generation itself: seeing your profile is free, writing with it is paid. Writer, at $17 a month ($17), gives you 40 generations a month against 1 profile, plus 2 extractions and 1 brand mimic monthly. Operator, at $40 a month ($40), scales that to 3 profiles and 75 generations.

The checking tools ride along free on any plan: check_voice_match, compare_voice, ai_detect, save_edit. So does polling and browsing your own profiles. You can score drafts against your voice all day without touching a credit; you only spend credits when ScriptGrain writes the draft for you.

## The one-page fallback

Some tools don't do connectors yet. For those, the prompt builder turns your profile into a single measured prompt: contraction targets, formality score, sentence length, the lot, written as instructions rather than a live reference.

It's better than nothing, and SGR-002's numbers show exactly how much better: 0.62 against the profile, against 0.83 when the same profile is read live through generation. The countable instructions get followed. The felt ones (voice, warmth, rhythm) drift, because a model reading a paragraph once at the start of a session has no way to check itself against it later.

Compare that to Noren's approach, which exports the profile as a Markdown file you paste into each LLM by hand, no API, no MCP server, so the profile travels by hand every single time. The prompt builder here is a fallback for tools that force that same hand-carrying. It is not the main road. The main road is [/ai-writing-api-and-mcp-server](https://scriptgrain.com/ai-writing-api-and-mcp-server), where the profile travels by API and MCP instead, live, on every plan, checked rather than remembered.

## Questions

### Does the same profile work across ChatGPT, Claude and Cursor at once?

Yes. The profile lives on ScriptGrain's server, not inside any one tool, so ChatGPT, Claude, Gemini CLI, Cursor and Muse all query the same profile through the same MCP endpoint. Nothing about the profile changes per client; only the connection method does, and each is documented per tool.

### Is checking a draft against my profile free?

Yes, on every plan including Free. check_voice_match, compare_voice, ai_detect and save_edit all run without spending credits. Credits are only charged for generate_content (1 per variant), polish, humanize and brand mimics, and only after delivery, so scoring your own drafts costs nothing regardless of plan.

### What happens if I paste my voice description instead of connecting the profile?

It degrades. SGR-002 found a pasted, one-page measured prompt scored 0.62 against the profile, worse than bare GPT-5 at 0.74, because the model followed countable rules (no em dashes, shorter sentences) while missing felt ones like contraction rate and formality. A read-live connection scored 0.83.

### How many samples do I need to build a profile?

Between 1 and 20 writing samples, each between 50 and 5,000 words. SGR-002's study profile used three posts totalling 2,447 words. More samples generally mean a steadier read on your attributes, but the extraction itself runs once free per account, so choose samples that represent your actual range.

### Can I use the profile without ever paying for a generation?

Yes. Free includes one profile and one full analysis across all 45 attributes, no card required, plus connections to ChatGPT, Claude and any MCP client. You can check drafts against it indefinitely for free. Generation credits only apply once you ask ScriptGrain itself to write the draft.
