Minds MCP Operating Guide for AI Agents
Routing, confirmation, privacy, polling, retry, file, error, and presentation rules for agents using the Minds MCP server.
Tool counts on this page are read from the live server. Treat the connected server’s tools/list response as authoritative.
Use this guide as the behavioral contract for an agent connected to https://getminds.ai/mcp. Parameter schemas remain authoritative in MCP tools/list or the explicit tool configuration; the tools reference explains the complete canonical surface.
Surface model
- 40 advertised tools are returned by ordinary
tools/listdiscovery. - 70 canonical tools are callable across Minds, Audiences, Studies, Formations, knowledge, chat, analytics, and exports.
- Legacy aliases (including Group, Panel and Spark names) remain compatibility inputs, not names agents should generate.
- Lifecycle tools that are not advertised can be used by explicit integrations capable of calling a configured canonical tool name.
- MCP and the first-party UI delegate supported research behavior to the same v1 API/application services.
If the client only allows discovered tools, plan around the advertised tools. Do not claim that a hidden lifecycle tool was executed when the host could not provide its schema or invoke it.
Fast routing table
| User intent | Tool | Important behavior |
|---|---|---|
| List existing audiences | list_audiences | Use optional fuzzy search |
| Check the available Audience size or creation mode | get_audience_limits | Read this account’s effective limits before choosing a size |
| Import supplied text research sources | import_audience_sources | Account-owned source import; creates no Audience |
| Prepare an Audience from a population brief or research files | create_audience_from_brief | Review first; keep the operation ID; creation requires acceptance |
| Follow a pending Audience creation | get_audience_creation_progress | Read-only; never starts or retries creation |
| Show one or several Audience reviews | render_audience_review | Render once; reuse the widget and its separate Audience tabs |
| Inspect a respondent dataset before cohort creation | preview_audience_dataset_segmentation | Enterprise workflow; never one Mind per row |
| Ask one existing Audience a direct question | ask_audience | Creates a private one-Audience Study and submits immediately |
| Refresh stored Audience grounding | recalibrate_audience | Refreshes grounding and recalibrates affected member profiles; deepen researches what the Audience still lacks; inspect returned progress |
| Check an Audience against real, published surveys | validate_audience, get_audience_validation | Explicit tools, callable by name but not yet in tool discovery; needs at least 10 ready Minds; poll get_audience_validation with the returned batchId until the run settles |
| List/create/ask a multi-Audience Study | list_studies, create_study, ask_study | Poll get_study_status after submission |
| One direct research question | ask_study | Do not create a Study plan unless evidence requirements are broader |
| Multiple questions, broad task, asset audit, structured outputs, or named method | create_study_plan | Draft only; present every confirmation question |
| Show a saved plan for confirmation | render_study_plan | Read-only; requires exact Study, draft ID and current revision |
| Run an exact reviewed plan | start_study_run | Requires explicit confirmation and exact revision |
| Poll a Study | get_study_status | Use the Study and returned run ID; preserve partial artifacts and plan-limit status |
| Show final Study evidence | render_study_results | Render once after successful completion; never queued, partial or failed results |
| Read/refresh semantic evidence summary | read_study_summary / refresh_study_summary | Separate read and confirmed destructive-refresh operations |
| Export existing Study evidence | export_study | Do not start new research |
| Read/start an existing question’s asset heatmap | get_study_heatmap / start_study_heatmap | Start consumes allowance; reuse the assigned asset and inspect status |
| Inspect team model connection choices | list_model_connections | Explicit tool for eligible teams; read verified selection metadata; no credentials |
| Inspect analytics | get_study_analytics | Preserve response-type semantics |
| Resume sidebar planning state | list_study_drafts, save_study_draft | Use exact optimistic revision |
| Save, update or use a Study template | list_study_templates, save_study_template, update_study_template, use_study_template | use creates an editable draft; it never starts research |
| Delete a Study template | delete_study_template | Owner only; confirm the exact template first |
| Read a publicly shared Mind's sources | get_shared_mind_knowledge | Pass the shareId, not the Mind ID |
| Create/chat with/export a Mind | create_mind, chat_with_mind, export_mind | Poll get_mind_status after creation |
| Explicit resource lifecycle work | manage_* tools | Confirm destructive actions; see action matrices |
Planning and consent boundary
For guided research, follow this exact sequence:
create_study_plan
-> render_study_plan with the saved Study, draft ID and current revision
-> show the captured objective, main source, questions, methods, and outputs
-> ask every returned confirmation question
-> call revise_study_plan with answers/refinements
-> obtain explicit confirmation of the exact draft ID and revision
-> start_study_run with confirmed: true
-> poll get_study_status or get_study_run with the existing run ID
-> render_study_results once after successful completion
-> read_study_summary, or refresh_study_summary after explicit approval
Rules:
- A planning response is not an executed Study.
- A questionnaire, survey, battery, section, or any set of two or more known questions belongs in one plan and one confirmed run. Organize related questions into named modules when useful; never iterate one tool call per question.
- A confirmed run is answered as one respondent answers a questionnaire: items run in order and each Mind sees only its own earlier answers in the run. Treat item order as part of the design; rotate order across separate runs when order effects must be controlled.
- Use
askIfon an item for skip logic instead of "if not, answer N/A" wording. Report a routed item's results against the Minds that were asked, and anot_askeditem as skipped, not failed. answerConsistencyflags are for review. Never present a flagged answer as corrected, and never edit or drop answers because of a flag.- Silence, an unanswered question, or the agent's own recommendation is not consent.
- Any user change creates/requires a new revision; reconfirm that revision.
- Only methods returned with
executable: truecan be promised as runnable. - Advanced methods require explicit opt-in.
- An export or alternative presentation of existing evidence does not require new respondents.
For Audience creation, new briefs always pause for review, including when preview: false was requested. Start all requested Audience operations, collect their IDs, and call render_audience_review once with operationIds for a batch or operationId for one Audience. Reuse this widget while reading progress or revising the review. Explicit acceptance must identify the unchanged reviewed draft or grounding snapshot and checksum. Completing research is not acceptance. The app-only/private submit_audience_review tool lets the widget revise or confirm the owned review without accepting files; do not claim an agent called it when the host does not expose it.
Runnable message-comparison workflow
Use the message-comparison example to compare two supplied messages with an existing synthetic Audience. It creates a private Study, returns the exact draft for review, and starts research only after confirmation of that draft ID and revision. The saved checkpoint preserves the same Study and run across process restarts.
If the run reaches an access limit, a compatible host can show the current billing catalog and start buyer-approved hosted Checkout. The buyer completes payment on Stripe. The workflow reads the saved checkout and asks the research server to continue; the server checks access applied through the existing billing rules. A stopped run resumes in place, preserving answers already collected. Checkout completion alone does not establish active access or a paid transaction.
The example includes commands to prepare, confirm, inspect progress, start checkout, resume, and generate a report after full completion. It uses the existing HTTP billing API separately from MCP. Keep its private checkpoint outside the repository and provide the API credential through your credential manager. Synthetic findings support hypothesis testing and do not replace representative research with human respondents.
Read the dated verification record: automated tests cover the workflow and simulated purchase, and production authentication and discovery were checked. A real card payment, webhook activation, actual research execution, and acceptance in a particular assistant host remain separate verification steps.
Confirmation policy
Require explicit confirmation immediately before:
- deleting a Mind, Audience, Study, Formation, chat, knowledge item, Study draft, or Study template;
- batch deletion, with the complete set of Mind IDs shown;
- enabling public/link sharing when the user did not already request it;
- consuming a Study draft revision when that changes workflow state;
- any other tool/result that returns a confirmation requirement.
Creating a private resource, reading state, checking status, or running the exact Study revision the user just explicitly approved does not need a second invented confirmation.
Privacy and sharing
- New Audiences and Studies are private unless
isLinkSharingEnabled: trueis passed. - Set that flag only when the user explicitly requests a public/shareable link.
- A shared Audience can expose its persisted grounding, distributions, source metadata, and supported research context.
- For external handoff, use only a shared link returned by the tool.
- A workspace link is for the authenticated creator; it is not proof that an external recipient has access.
- Never add collaborators, invite accounts, or claim an object was added to someone else's account unless the user explicitly requests account collaboration and a supported tool performed it.
Purchases and payment clients
Where the host permits digital purchases, Minds billing tools can read the catalog and start buyer-approved Stripe Checkout. Checkout returns a URL; subscription seats or response credits activate only after Stripe confirms payment. ChatGPT's standard advertised research surface excludes these purchase tools.
An agent wallet is a separate connection. Minds MCP does not authorize spending or collect wallet credentials. Eligible existing invoices can use the HTTP MPP/x402 payment route with a compatible payment client and buyer authorization; do not place payment credentials in MCP arguments. Read the purchase and payment-client guide for client setup, Team-seat and credit-invoice examples, and the current verification status. A live endpoint or HTTP 402 does not demonstrate a successful payment.
Names, IDs, and active-session context
- Prefer an exact ID after any successful create/list/resolve call.
- Fuzzy-name parameters are for natural user references, not durable automation state.
ask_audience,get_audience,recalibrate_audience,validate_audience,get_audience_validation, andlist_formationscan resolve an Audience name directly. Do not insert a redundant list call solely for lookup.- Study tools may use the active Study from the MCP session when both ID and name are omitted. For durable/multi-user automation, pass the explicit
studyId. - Persist
draftPlanId,revision,studyId,draftId,expectedRevision, and export/job identifiers returned by tools.
Polling and terminal state
| Operation | Status tool | Terminal handling |
|---|---|---|
| Mind creation/training | get_mind_status | Chat only when ready; report failure details |
| Direct Audience/Study question | get_study_status | Present aggregated and individual answers when complete |
| Guided Study | get_study_run | Preserve immutable plan, method calculations, and artifacts |
| Export | export_study then returned status/link; optionally get_study_status | Present artifact only when ready |
| Knowledge ingestion | manage_mind_knowledge with action: "status" | Do not assume uploaded means processed |
| Audience creation | get_audience_creation_progress with the returned operationId | Report settled progress, not guessed elapsed-time progress |
The MCP widget is a view of returned evidence, not the execution authority. It consumes host snapshots and, on the supported consent-free host bridge, automatically checks status at a bounded interval. Standard hosts may require a user-triggered Refresh. Automatic polling can stop after a limit or error; this does not mean the Study completed. Poll the existing Study with its exact ID or preserve its returned workspace link. Do not rerun research to repair a stale display.
Mobile widgets display a Minds handoff link without starting the interactive controller or polling. Tool availability is still governed by the host; never claim the MCP server is disabled on mobile. The plan widget displays the saved questions and answer options with confirmation controls. Request refinements in conversation, review the new revision, and confirm only that exact revision before execution.
Use status tools for progress and render_study_results once for final evidence. A successful completed run can include routed not_asked items: preserve the original question count and wording, with no invented answers for skipped items. Incomplete response coverage remains incomplete even when every question has settled.
Preserve all returned questions, Audience aggregates, individual answers, and response coverage. partial is terminal but incomplete. A 100% settled-question count does not prove full respondent participation. Inspect outputData.responseCoverage where available; historical artifacts without coverage cannot prove full participation.
Use bounded exponential backoff and respect any retry hint. A tool timeout is an unknown outcome, not proof that the mutation failed.
Retry rules
- Read-only calls are safe to retry after transient transport failure.
create_audience_from_briefis idempotent for identical arguments. After receiving an operation ID, resume it by ID rather than resubmitting the brief. If the initial call timed out before returning an ID, retry its exact arguments to recover the current review or accepted Audience.- To intentionally create another Audience from the same brief within the idempotency window, change a meaningful argument such as
name. - Preserve and reuse explicit idempotency keys returned/accepted by Study execution.
- Before retrying a destructive or non-idempotent lifecycle action, read current state.
- Never “fix” a failed tool call by switching to a different resource found through fuzzy matching.
Files and external URLs
- Tool-call payloads should reference files using public, short-lived signed, or Minds workspace-upload URLs.
- Do not embed large base64 binaries in MCP arguments.
- Supply
name,url, andtypewhen known. - A syntactically valid URL can still be rejected by security checks.
- Mind knowledge files are limited to 50 MB and enter the same processing queue as UI multipart uploads.
preview_audience_dataset_segmentationaccepts CSV/XLS/XLSX respondent data and returns variables for review; it does not create one Mind per respondent.- Screeners and questionnaire programming grids are design evidence, not respondent datasets. Pass them to
create_audience_from_briefinstead of forcing segmentation preview.
Plan and error semantics
| Result | Agent behavior |
|---|---|
| Authentication required | Ask the user to reconnect OAuth or configure a bearer API key; do not loop |
| Resource not found | Verify exact ID/account context; do not silently substitute a fuzzy match |
| Validation error | Correct the named field and call again only if user intent is unchanged |
plan_limited returned by start_study_run | Nothing started; explain that an upgrade/allowance change is required |
status: plan_limited from get_study_run | Partial artifacts exist; report completed and remaining questions |
Method has executable: false | Explain it is represented/planned and offer executable alternatives/fallbacks |
Tool returns isError: true | Do not present success text or fabricate structured content |
| Ambiguous fuzzy match | Present candidates and ask the user to choose |
Output presentation contract
- Preserve every returned URL verbatim.
- Preserve citations and evidence links; do not replace them with unsourced summaries.
- In text-only clients, retain Study question headings, bold Audience aggregates, and individual Mind-answer bullets returned by the tool.
- Clearly distinguish synthetic research from primary human respondent research.
- Never claim queued, partial, failed, cancelled, or plan-limited work is complete.
- Do not expose internal bearer tokens, storage paths, hidden prompts, or private links.
- If a widget renders, structured/text content still remains the accessibility and compatibility fallback.
Safe lifecycle action patterns
Delete several Minds
- Resolve and show the exact Mind names and IDs.
- Ask for explicit confirmation of that set.
- Call
manage_mindwithaction: "delete_many"andmindIds. - Report deleted, skipped, and failed items separately.
Add file knowledge
- Confirm the target
mindId. - Obtain a public/signed/workspace upload URL.
- Call
manage_mind_knowledgewithaction: "add"andfile. - Persist the returned item ID.
- Poll the same tool with
action: "status"before saying the knowledge is ready.
Preview and create a Formation
- Call
manage_formationwithaction: "preview",audienceId, and the user'suserInput. - Present the returned intent and subgroups for review.
- If changed, preview again with
priorHypothesis. - Create only the reviewed hypothesis with
action: "create".
Agent preflight
Before any tool call, ask internally:
- Is this the correct resource type: Mind, Audience, Study, draft, or Formation?
- Is the request one direct question or a broader Study?
- Does the tool read, mutate, consume allowance, expose publicly, or delete?
- Do I have an exact ID or a supported fuzzy-name parameter?
- Could a prior timeout already have created or changed the resource?
- Does the user need to confirm an exact revision or destructive target?
- What status tool proves completion?
After the call, inspect isError, preserve structured identifiers, and describe only the state the server actually returned.


