Examples

Real interactions with the neuroflash MCP server. The LLM picks the best mode based on the server's instructions — you just ask naturally. Pick an example from the sidebar.

Traditional Mode

Chat with a Digital Twin

Traditional Mode fits here because the task is a clear, linear sequence: find the group, pick a twin, send a message. No branching logic or data transformation required.

Ask the Gen-Z twin what they think about our new campaign tagline "Think Different, Create Better"

I'll find the Gen-Z twin group, pick a twin, and ask them directly.

Technical Details
list_static_groups()
{ "groups": [{ "key": "gen_z", "label": "Gen-Z (18–26)", "size": 120 }, { "key": "millennials", "label": "Millennials (27–42)", "size": 95 }, { "key": "gen_x", "label": "Gen-X (43–58)", "size": 80 }] }
list_twins(workspace_id="ws-4f9a2c", group_key="gen_z", size=1)
{ "twins": [{ "id": "twin-0c81d4", "name": "Lena K.", "age": 22, "interests": ["social media", "sustainability", "design"] }] }
chat_with_twin(workspace_id="ws-4f9a2c", twin_id="twin-0c81d4", message="What do you think about the campaign tagline 'Think Different, Create Better'?")
{ "response": "Honestly? It gives me Apple flashbacks — 'Think Different' is basically theirs. The second half 'Create Better' is more interesting though, it hints at tools that actually help you improve, not just look cool. If you want to reach people my age, I'd lean harder into the 'Create Better' part and drop the echo." }

Here's what Lena (Gen-Z, 22) had to say:

"It gives me Apple flashbacks — 'Think Different' is basically theirs. The 'Create Better' part is more interesting though. Lean harder into 'Create Better' and drop the echo."

The first half reads as derivative to younger audiences. The second half lands — it's benefit-driven and actionable.

Traditional Mode

Import a Brand Voice from a URL

A single import operation. Look up the workspace, then one tool call does the work — note the new country, language, and audienceModelId parameters.

Import our brand voice from https://neuroflash.com and name it "neuroflash official"

I'll look up your workspace first, then run the import.

Technical Details
list_workspaces()
{ "workspaces": [{ "id": "ws-4f9a2c", "name": "neuroflash Main", "plan": "Business" }] }
import_brand_voice_from_url(workspace_id="ws-4f9a2c", url="https://neuroflash.com", name="neuroflash official", country="de", language="en", audienceModelId="538b1efc6f88ad88feebf7acd8c618facb54fe82")
{ "id": "bv-a92f3d", "name": "neuroflash official", "status": "ready", "attributes": { "tone": "confident, approachable", "formality": "semi-formal", "personality": ["innovative", "clear", "empowering"] } }

Done. The brand voice "neuroflash official" has been created (ID bv-a92f3d). Detected tone: confident, approachable; semi-formal; personality: innovative, clear, empowering.

Traditional Mode

Generate a LinkedIn Post

Three sequential lookups, no conditional logic — Traditional Mode handles this cleanly.

Write a LinkedIn post about our Digital Twins feature using our brand voice

I'll find your workspace, locate the brand voice, then generate the post.

Technical Details
list_workspaces()
{ "workspaces": [{ "id": "ws-4f9a2c", "name": "neuroflash Main" }] }
list_brand_voices(workspace_id="ws-4f9a2c")
{ "brand_voices": [{ "id": "bv-a92f3d", "name": "neuroflash official" }] }
generate_text(workspace_id="ws-4f9a2c", prompt="Write a LinkedIn post announcing neuroflash Digital Twins...", brand_voice_id="bv-a92f3d")
{ "content": "What if you could get feedback from 120 real customers before publishing a single word? Meet neuroflash Digital Twins..." }

Here's your LinkedIn post in the neuroflash official voice — ready to copy or tune further.

Plan Mode

Three Brand Voices in Parallel

Plan Mode fits — list voices, fan out three generations concurrently, return a structured comparison. parallel trims wall-clock to one round-trip.

Compare content output for our top 3 brand voices — generate a tagline with each and tell me which sounds best

I'll list the brand voices, fan out three taglines in parallel, then return the lot.

Technical Details
execute_plan(plan={...})
{
  "version": "1",
  "steps": [
    {"id":"bv","call":{"method":"GET",
      "path":"/api/brand-voice-service/v1/workspaces/{workspace_id}/brand-voices"},
     "args":{"workspace_id":"$ctx.workspace_id"}},
    {"id":"top3","let":{"op":"take","from":"$bv.data","args":{"n":3}}},
    {"id":"a","let":{"op":"first","from":"$top3"}},
    {"id":"b","let":{"op":"pick","from":"$top3","args":{"path":"[1]"}}},
    {"id":"c","let":{"op":"pick","from":"$top3","args":{"path":"[2]"}}},
    {"parallel":[
      {"id":"ta","call":{"method":"POST",
        "path":"/api/ds-prototypes/content_generation/chat/completions"},
       "args":{"workspace_id":"$ctx.workspace_id","brand_voice_id":"$a.id",
               "prompt":"Write a short tagline for neuroflash."}},
      {"id":"tb","call":{"method":"POST",
        "path":"/api/ds-prototypes/content_generation/chat/completions"},
       "args":{"workspace_id":"$ctx.workspace_id","brand_voice_id":"$b.id",
               "prompt":"Write a short tagline for neuroflash."}},
      {"id":"tc","call":{"method":"POST",
        "path":"/api/ds-prototypes/content_generation/chat/completions"},
       "args":{"workspace_id":"$ctx.workspace_id","brand_voice_id":"$c.id",
               "prompt":"Write a short tagline for neuroflash."}}
    ]}
  ],
  "return":{"a":{"voice":"$a.name","tagline":"$ta.content"},
            "b":{"voice":"$b.name","tagline":"$tb.content"},
            "c":{"voice":"$c.name","tagline":"$tc.content"}}
}
{ "result": { "a": {"voice":"neuroflash official","tagline":"Write smarter. Publish faster. Stand out always."}, "b": {"voice":"Product Blog","tagline":"Where AI meets your creative voice — content that clicks."}, "c": {"voice":"Sales Outreach","tagline":"Close more deals with words that work."} } }

neuroflash official is the strongest general tagline. Use Sales Outreach for pitch decks or cold email. The three generations ran concurrently — total wall-clock was one chat round-trip.

Exploratory Mode

Compare Usage Between Workspaces

Open-ended comparison — the LLM discovers what's available, then pulls parallel data with compare.

How does usage compare between our marketing and sales workspaces?

I'll explore what's available, then pull both in parallel.

Technical Details
discover(domain="usage")
{ "actions": [{"action":"get_workspace_quotas","params":[{"name":"workspace_id","required":true}]}] }
compare(queries=[{"label":"Marketing","domain":"usage","action":"get_workspace_quotas","params":{"workspace_id":"ws-4f9a2c"}},{"label":"Sales","domain":"usage","action":"get_workspace_quotas","params":{"workspace_id":"ws-7b3e91"}}])
[{"label":"Marketing","data":{"words_used":38200,"words_limit":50000,"twins_chats_used":89,"twins_chats_limit":100}},{"label":"Sales","data":{"words_used":9400,"words_limit":50000,"twins_chats_used":4,"twins_chats_limit":100}}]

Marketing is at 76% words and 89% twin chats. Sales has plenty of headroom. Consider reallocating before the cycle ends.

Plan Mode

Survey Multiple Twin Groups and Compare Reactions

Two parallel surveys plus a small comparison payload — Plan Mode runs both groups concurrently and returns just the summaries, no client-side loop.

Ask Gen Z and Millennials what they think about our new pricing model, then summarize the differences.

I'll fan out two group-opinion calls in parallel and pull just the summaries back.

Technical Details
execute_plan(plan={...})
{
  "version": "1",
  "steps": [
    {"parallel":[
      {"id":"gz","call":{"method":"POST",
        "path":"/api/digital-twin-service/v1/workspaces/{workspace_id}/twin-group-chat-opinions"},
       "args":{"workspace_id":"$ctx.workspace_id","group_key":"gen_z",
               "message":"What do you think about a $15/mo pricing tier with 50k words and unlimited twin chats?",
               "sample_size":10}},
      {"id":"mi","call":{"method":"POST",
        "path":"/api/digital-twin-service/v1/workspaces/{workspace_id}/twin-group-chat-opinions"},
       "args":{"workspace_id":"$ctx.workspace_id","group_key":"millennials",
               "message":"What do you think about a $15/mo pricing tier with 50k words and unlimited twin chats?",
               "sample_size":10}}
    ]},
    {"id":"gz_summary","let":{"op":"pick","from":"$gz","args":{"path":"summary"}}},
    {"id":"mi_summary","let":{"op":"pick","from":"$mi","args":{"path":"summary"}}}
  ],
  "return":{"gen_z":"$gz_summary","millennials":"$mi_summary"}
}
{ "result": { "gen_z":"Mostly positive on the price ($15 feels fair vs Spotify/Netflix) but split on value: half want unlimited image generation included, the other half don't care about images at all and want the words limit raised to 100k.", "millennials":"Skeptical of 'unlimited' claims — several asked for the fair-use cap upfront. Price is fine but they want annual billing with a discount, and clearer messaging on what the twin chats actually do." } }

Gen Z reacts to the price emotionally (fair vs streaming services) and wants more raw quota. Millennials react analytically — they distrust "unlimited" framing and want annual billing options. Recommendation: keep the $15 number but rephrase "unlimited" with a soft cap, and offer an annual plan up front.

Traditional Mode

Full Brand Voice Pipeline: URL → Content → Twin Test

A linear three-step pipeline, no branching. Demonstrates the new required params on import_brand_voice_from_url.

Import our brand voice from neuroflash.com, generate a tagline with it, and ask a Gen-Z twin for feedback.

Three steps: import, generate, test.

Technical Details
import_brand_voice_from_url(workspace_id="ws-4f9a2c", url="https://neuroflash.com", name="neuroflash official", country="de", language="en", audienceModelId="538b1efc6f88ad88feebf7acd8c618facb54fe82")
{ "id": "bv-a92f3d", "status": "ready" }
generate_text(workspace_id="ws-4f9a2c", prompt="Write a 6-word tagline for neuroflash AI writing tools.", brand_voice_id="bv-a92f3d")
{ "content": "Words that work. Tools that think." }
list_twins(workspace_id="ws-4f9a2c", group_key="gen_z", size=1)
{ "twins": [{ "id": "twin-0c81d4", "name": "Lena K." }] }
chat_with_twin(workspace_id="ws-4f9a2c", twin_id="twin-0c81d4", message="Rate this tagline 1–10 and tell me why: 'Words that work. Tools that think.'")
{ "response": "7/10. The rhythm is good and it's short enough to remember, but 'Tools that think' is a bit overused in AI marketing right now. The 'Words that work' half is the stronger one — it's specific to writing." }

Pipeline complete. Lena (Gen-Z) gave the tagline a 7/10 — strong first half, second half feels generic for AI tooling. Worth iterating on the second clause.

Traditional Mode

Create an Audience from a Website and Generate Targeted Content

Linear pipeline. Note import_audience_from_url takes urls (plural) and create_target_audience requires a full demographic profile on every call.

Build a target audience from our product page and write a campaign email for them.

Import → create audience with full profile → generate the email.

Technical Details
import_audience_from_url(workspace_id="ws-4f9a2c", urls="https://neuroflash.com/product", audienceModelId="538b1efc6f88ad88feebf7acd8c618facb54fe82")
{ "extracted": { "residence": "Germany, Austria, Switzerland", "pain_points": ["writing slowly", "inconsistent tone", "blank-page paralysis"], "interests": ["marketing", "AI tools", "productivity"], "needs": ["faster content turnaround", "brand consistency"], "min_age": 25, "max_age": 45 } }
create_target_audience(workspace_id="ws-4f9a2c", name="Product Page Visitors", residence="Germany, Austria, Switzerland", pain_points="writing slowly, inconsistent tone, blank-page paralysis", interests="marketing, AI tools, productivity", needs="faster content turnaround, brand consistency", min_age=25, max_age=45, gender_female=0.45, gender_male=0.5, gender_non_binary=0.03, gender_prefer_not_to_say=0.02)
{ "id": "aud-7b3e91", "name": "Product Page Visitors" }
generate_text(workspace_id="ws-4f9a2c", prompt="Campaign email for marketers aged 25–45 in DACH who struggle with slow writing and inconsistent tone. CTA: free 7-day trial.", target_audience_id="aud-7b3e91")
{ "content": "Subject: Stop staring at the blank page.\n\nIf your team's content calendar feels like a treadmill that's slowly speeding up, you're not alone..." }

Audience created (aud-7b3e91) and the email is ready — opens with the blank-page pain point and ends on a 7-day trial CTA.

Traditional Mode

Multi-Turn Content Refinement Conversation

Persistent conversations preserve context across turns — much better than calling generate_text repeatedly with manual history. Note workspace_id is now required on get_conversation_messages.

Start a conversation to help me refine our product description over multiple rounds.

I'll spin up a conversation and we can iterate.

Technical Details
create_conversation(workspace_id="ws-4f9a2c", title="Product description refinement")
{ "uuid": "conv-9a2f1c" }
chat_in_conversation(workspace_id="ws-4f9a2c", conversation_uuid="conv-9a2f1c", message="Draft a 60-word product description for neuroflash, an AI writing platform with brand voices and digital twins.")
{ "response": "neuroflash is an AI writing platform that learns your brand voice and tests your content against AI personas built from real demographic data..." }
chat_in_conversation(workspace_id="ws-4f9a2c", conversation_uuid="conv-9a2f1c", message="Tighter — under 40 words, lead with the twin testing feature, drop the word 'platform'.")
{ "response": "Test your content with AI personas built from real demographic data. neuroflash learns your brand voice, generates on-brand copy, then shows you how Gen-Z, Millennials, or any audience will react — before you publish." }
get_conversation_messages(workspace_id="ws-4f9a2c", conversation_uuid="conv-9a2f1c")
{ "messages": [{"role":"user","content":"Draft a 60-word..."},{"role":"assistant","content":"neuroflash is..."},{"role":"user","content":"Tighter..."},{"role":"assistant","content":"Test your content..."}] }

Refined down to 38 words, leading with twin testing as requested. The persistent conversation kept the constraints (length, dropped word, lead-with rule) without re-prompting.

Plan Mode

Bulk Clean Up Brand Voices

Filter then bulk-delete in a single plan. filter selects the inactive rows; foreach sends one DELETE per row (capped at 20 iterations).

Delete all brand voices that haven't been used — keep only the ones marked active.

I'll list, filter to the inactive ones, confirm the count with you, and only then send the DELETEs in a second plan.

Technical Details — step 1: dry run
execute_plan(plan={...})
{
  "version": "1",
  "steps": [
    {"id":"bv","call":{"method":"GET",
      "path":"/api/brand-voice-service/v1/workspaces/{workspace_id}/brand-voices"},
     "args":{"workspace_id":"$ctx.workspace_id"}},
    {"id":"inactive","let":{"op":"filter","from":"$bv.data",
      "args":{"where":{"eq":["$item.active",false]},"as":"item"}}},
    {"id":"names","let":{"op":"map","from":"$inactive","args":{"path":"name"}}},
    {"id":"n","let":{"op":"count","from":"$inactive"}}
  ],
  "return":{"will_delete":"$names","count":"$n"}
}
{ "result": { "count":4, "will_delete":["Old Newsletter","Test Voice","2024 Q1 Campaign","Draft"] } }

4 inactive voices match. Confirming with you before I run the destructive plan…

Technical Details — step 2: bulk delete
execute_plan(plan={...})
{
  "version": "1",
  "steps": [
    {"id":"bv","call":{"method":"GET",
      "path":"/api/brand-voice-service/v1/workspaces/{workspace_id}/brand-voices"},
     "args":{"workspace_id":"$ctx.workspace_id"}},
    {"id":"inactive","let":{"op":"filter","from":"$bv.data",
      "args":{"where":{"eq":["$item.active",false]},"as":"item"}}},
    {"id":"deletes","foreach":"$inactive","as":"v","max":20,"collect":"$d",
     "do":[{"id":"d","call":{"method":"DELETE",
             "path":"/api/brand-voice-service/v1/workspaces/{workspace_id}/brand-voices/{brand_voice_id}"},
            "args":{"workspace_id":"$ctx.workspace_id","brand_voice_id":"$v.id"}}]}
  ],
  "return":{"deleted":"$deletes"}
}
{ "result": { "deleted": [ {"d":{"status":"ok"}},{"d":{"status":"ok"}},{"d":{"status":"ok"}},{"d":{"status":"ok"}} ] } }

Cleaned up 4 inactive brand voices. The active ones are untouched. Two-step pattern (dry-run plan, then destructive plan) is the recommended flow whenever a plan would mutate user data — plans run server-side and can't pause for confirmation.

Traditional Mode

Image Generation with Brand-Consistent Prompt

Two sequential calls. generate_image requires model, aspect_ratio, output_format, and num_images — omitting any returns 422.

Generate a hero image for our LinkedIn announcement about Digital Twins.

I'll pick an image model first, then generate at 16:9 for LinkedIn.

Technical Details
list_image_models(workspace_id="ws-4f9a2c")
{ "models": [{ "id": "flux-pro-1.1", "label": "Flux Pro 1.1" }, { "id": "dalle-3", "label": "DALL·E 3" }] }
generate_image(workspace_id="ws-4f9a2c", model="flux-pro-1.1", prompt="A cinematic hero image: a translucent holographic figure of a young person made of flowing data particles, sitting opposite a marketer at a glass desk, soft cyan and deep navy lighting, futuristic but warm, photoreal, 8k", aspect_ratio="16:9", output_format="png", num_images=1)
{ "images": [{ "url": "https://cdn.neuroflash.com/img/twin-hero-9a2f1c.png", "width": 1920, "height": 1080 }] }

Hero image generated at 1920×1080. Drop the URL straight into your LinkedIn draft, or run edit_image with an image_url to iterate.

Plan Mode

Seed a Brand Voice if None Exist

Conditional setup — list brand voices, and only import a default one when the list is empty. Showcases if/then + count.

Make sure we have at least one brand voice in this workspace — if not, seed it from a short description of our company.

I'll check the count, and only import a starter voice if the workspace has none.

Technical Details
execute_plan(plan={...})
{
  "version": "1",
  "steps": [
    {"id":"bv","call":{"method":"GET",
      "path":"/api/brand-voice-service/v1/workspaces/{workspace_id}/brand-voices"},
     "args":{"workspace_id":"$ctx.workspace_id"}},
    {"id":"n","let":{"op":"count","from":"$bv.data"}},
    {"if":{"eq":["$n",0]},
     "then":[
       {"id":"seed","call":{"method":"POST",
         "path":"/api/brand-voice-service/v1/workspaces/{workspace_id}/brand-voice-text-imports"},
        "args":{"workspace_id":"$ctx.workspace_id",
                "text":"We build reliable, no-nonsense AI content tools for marketers. Clear. Practical. Verifiable.",
                "name":"Default Voice","country":"us","language":"en",
                "audienceModelId":"538b1efc6f88ad88feebf7acd8c618facb54fe82"}}
     ]},
    {"id":"summary","let":{"op":"format",
      "args":{"template":"Workspace had {n} brand voice(s).",
              "values":{"n":"$n"}}}}
  ],
  "return":{"existing_count":"$n","summary":"$summary"}
}
{ "result": { "existing_count": 0, "summary": "Workspace had 0 brand voice(s)." } }

Workspace was empty, so I imported a starter voice from a short description. Re-running the plan now would skip the import branch since the count is 1. The same pattern works for any "create-if-missing" setup step — onboarding, default audiences, sample conversations.