Connect via MCP (Client Setup)
Your Brain isn't trapped inside MarketingSecrets.ai. It's exposed as an MCP server (Model Context Protocol) so every AI tool you use can read and write the same memory.
Once connected, Claude Desktop, Cursor, or a ChatGPT Custom GPT can search your Brain, add new facts, and stay perfectly in sync with your Chief of Staff.
Why this matters. Claude Desktop and Cursor are powerful, but they forget everything. Plug the Brain in once and they instantly have your business context — offers, audience, pricing, current projects, recent wins — in every conversation.
Step 1 — Generate an API key
- Open Chief of Staff → Manage → Memories and scroll to Connect an AI you already use
- Open the Advanced tab and click Generate new key
- Copy it — it's shown only once
- Name it after the tool you're connecting (e.g., "Claude Desktop")
Every key is scoped to your workspace. Revoke anytime.
Step 2 — Connect Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%/Claude/claude_desktop_config.json (Windows):
{
"mcpServers": {
"marketingsecrets-brain": {
"type": "http",
"url": "https://www.marketingsecrets.ai/api/mcp",
"headers": {
"x-api-key": "ms_YOUR_KEY"
}
}
}
}
Restart Claude Desktop. You'll see the Brain tools appear under the tools menu.
Step 3 — Connect Cursor
In Cursor, go to Settings → MCP → Add Server:
- Name:
marketingsecrets-brain - URL:
https://www.marketingsecrets.ai/api/mcp - Header:
x-api-key: ms_YOUR_KEY
Cursor loads the tool list on the next window reload.
Step 4 — Connect ChatGPT (Custom GPT)
- In ChatGPT, create a Custom GPT.
- Add to System Instructions: "Before answering, call the marketingsecrets_brain tool with the user's question to get their business context."
- Add a new Action: method
POST, URLhttps://www.marketingsecrets.ai/api/mcp, headerx-api-key: ms_YOUR_KEY. - Save. The Custom GPT now queries your Brain before every response.
Available tools
Any MCP client gets access to these tools:
| Tool | What it does |
|---|---|
memory_search | Keyword search across your Brain — returns the newest facts containing your query |
memory_save | Save a new fact to the Brain (with an optional category) |
memory_get_recent | List the most recent facts |
memory_get_profile | Fetch your structured profile (business, audience, goals) |
Every tool only sees the workspace that minted the key.
Search matches words, in any order. memory_search splits your query into words and finds the facts containing all of them, so stock watchlist finds "current stock watchlist (Q3)". If no fact has every word it retries with any word, then with translated and synonym keywords — so a question in one language still finds a fact you saved in another. Short, distinctive queries still work best; if a search comes back empty, try a single keyword or call memory_get_recent and browse.
Your Attractive Characters, stories and hooks
Your Brain remembers facts. Your Attractive Character material — the characters themselves, their voice style sheets, their story inventory and the hooks pulled out of those stories — is separate, and these tools let a client browse all of it. They are read-only and paginated.
| Tool | What it does |
|---|---|
list_attractive_characters | Your Attractive Characters. Start here — the ids it returns are what the other tools filter on |
get_attractive_character | One full character sheet: backstory, origin story, core flaw, pillars, voice style |
list_voices | The voice style sheets attached to your characters, with a preview of each |
get_voice | One voice style sheet in full |
list_stories | A page of your story inventory, newest first |
search_stories | Stories matching a keyword — across titles, summaries, bodies, false beliefs and themes |
get_story | One story in full, with its body and its candidate hooks |
list_hooks | Every hook line on your stories, one per row, each naming the story it came from |
search_hooks | The same, filtered to hooks containing a keyword |
list_customer_avatars | Your customer avatars, each as a full sheet |
get_customer_avatar | One customer avatar sheet |
These page. A workspace can hold thousands of stories, so a list tool returns at most 50 rows (25 by default) plus a page object carrying the true total and a next_offset to copy into your next call. Ask your client "how many stories do I have?" and it should quote page.total, not the length of the page it got.
Everything here is scoped to the workspace that minted your key, and none of the tools in this table can change anything.
Building an Attractive Character from your client
Your client can also write Attractive Character material, so an interview you have in ChatGPT or Claude ends up on your Attractive Characters page rather than as a note in your Brain.
| Tool | What it does |
|---|---|
create_attractive_character | Creates a new character — name, tagline, character type, core flaw, polarity, backstory, origin story, pillars, voice style |
update_attractive_character | Changes fields on a character you already have |
create_ac_voice | Adds a voice style sheet for one content type (email, podcast, YouTube, …) |
update_ac_voice | Refines an existing voice style sheet |
save_attractive_character_story | Files one story into your story inventory, with its hooks and narrative acts |
Ask for it in plain language — "interview me about my Attractive Character and save it" — and a well-behaved client will read list_attractive_characters first, then create or update.
Three things to expect:
- A new character or voice is usable straight away. Open it, generate from it, add voices to it — and your routines may use it — the moment the client saves it. There is nothing to approve, so a client that tells you to go and confirm it is wrong.
- Your own edits win. Every update has to quote the
revisionthe client last read. Edit a character in the app while your client is working on it and the client's write is refused rather than applied, with instructions to re-read and merge. Ask it to try again. - Deleting stays in the app. No client can remove a character, a voice or a story.
If a client saves a persona to your Brain with memory_save instead, that is the wrong tool — the persona becomes a note and your Attractive Characters page stays empty. Point it at create_attractive_character.
Your apps' content
You also get tools for the MarketingSecrets apps you have, so a client can pull the work itself — not just what the Brain remembers about it. The read tools are named <app>_list_<thing> and <app>_get_<thing>, for example:
| Tool | What it does |
|---|---|
one_to_many_list_presentation | Your VSL and webinar scripts (pass kind: "vsl" for VSLs only) |
one_to_many_list_email_sequence | Your email sequences |
one_to_many_list_social_post | Your social posts, with the images already rendered for them |
one_to_many_list_ad_creative | Your ad creatives |
influencer_secrets_list_campaign | Your influencer campaigns, with stage breakdown and reply rate |
influencer_secrets_list_outreach_message | Your outreach — pass status: "replies" for replies you haven't reviewed |
The exact list depends on which apps are enabled for you, so call tools/list rather than hard-coding it. Ask your client to "list my VSLs" or "show me the campaigns I'm running" and it will pick the right one.
Creating things from your client
One-to-Many also exposes write tools — one_to_many_create_sequence, one_to_many_create_social_project, one_to_many_create_social_idea, one_to_many_create_framework_project, one_to_many_create_ad_persona, one_to_many_update_email, and one_to_many_run_skill — so a client can start the work, not only read it. Each takes a single input object, and each is declared to your client as a non-read-only tool, so a well-behaved one asks you before it calls it.
Two things worth knowing:
- Writes need credits. A workspace sitting at a zero balance is refused with an insufficient-credits message instead of quietly doing nothing.
one_to_many_run_skillqueues a real generation and is billed like any other run. - Influencer Secrets stays read-only. You can list campaigns and read replies from your client, but sending outreach still happens in the app.
Troubleshooting
- Tools don't appear in Claude Desktop? Fully quit and relaunch — a reload isn't enough.
- Getting "invalid x-api-key"? Check there's no whitespace around the key and that it still starts with
ms_. - Key leaked or lost? Revoke it from the Advanced tab of the connect dialog (Chief of Staff → Manage → Memories → Connect an AI you already use) and generate a new one. Keys are stored server-side as SHA-256 hashes, so a lost key can't be recovered — only replaced.
Next
- Brain API Reference — raw HTTP for custom integrations
- MCP usage examples — real prompts and tool calls
- Developer Guide — build sub-apps that write to the Brain