Let the agent do it.
Your assistant chooses the right tool from plain language. No integration backend to build.
- Claude Desktop, Claude Code, Cursor
- Three clear tools
- Readable answers by default
Developers
Connect once. Your software can ask a Mind Twin how a teammate will think, feel, say, and act, then keep that understanding current from the same workspace.
YouAsk Maya's Mind Twin what would make her reject this rollout.
{ target: "[email protected]" }Start with what you are building
Both paths upload, check readiness, and ask. Choose who should make the call.
Your assistant chooses the right tool from plain language. No integration backend to build.
Your server controls every request and receives structured JSON. No SDK required.
The complete integration
Three actions take a Mind Twin from a meeting to a decision-ready answer.
Send a dated transcript. VTT, SRT, text, and agent JSON all work.
upload_transcriptLearning runs in the background. Poll periodically until the status is ready.
get_statusAsk about a past decision or a new situation. Get the answer and the reasoning around it.
chat_with_twinBuilt in Re-uploading the same content and date is de-duplicated. It is not an error.
Path 01 · MCP
One hosted server gives an MCP-capable assistant everything it needs to keep a Mind Twin current and ask it questions.
The command below runs through npx, which comes with Node.js.
brew install nodenodejs.orgDownload sudo apt install nodejsnode --version
npx --versionOpen MCP Twin in the app. Your twin:chat key is already there.
The installer connects every supported MCP client it detects.
If the tools do not appear, quit and reopen the client. Then ask which mind-twin tools it sees.
npx -y add-mcp mcp-remote --name mind-twin \
--args=https://mcp-twins.reasoner.com/mcp \
--args=--header --args="Authorization: Bearer dev_YOUR_TWIN_CHAT_KEY" \
--all -g -ySome clients load new servers only when they open. If the three tools do not appear, fully quit and reopen the client, then ask which mind-twin tools it can see.
https://mcp-twins.reasoner.com/mcpmind-twinAgent integrations
The universal installer is the supported fast path. It detects compatible clients, adds the hosted server, and includes your Bearer header.
Call in. Result out.
Ask one consequential question and request JSON when your agent needs structure.
{
"name": "chat_with_twin",
"arguments": {
"message": "What would make you reject this rollout?",
"target": "[email protected]",
"format": "json"
}
}{
"answer": "I would reject a company-wide rollout without a contained pilot.",
"think": "The upside is clear. The implementation risk is not.",
"feel": "Interested, but exposed if adoption fails.",
"say": "Show me one region working first.",
"act": "Approve a 30-day pilot with a stop point."
}Good to knowformat defaults to text. Pass json for the structured answer, think, feel, say, and act object. Empty TFSA fields are omitted.
Path 02 · REST API
Use ordinary HTTPS from any server language. Every authenticated request carries the same Bearer key.
200 · application/json
answer is the complete response. say is the short spoken line. Any empty Think, Feel, Say, or Act field is omitted.
const response = await fetch(
"https://app.reasoner.com/api/twin-mcp/chat",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.MINDTWINS_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
message: "What would make you reject this rollout?",
target: "[email protected]",
}),
},
);
if (!response.ok) {
throw new Error(`MindTwins request failed: ${response.status}`);
}
const mindTwin = await response.json();{
"answer": "I would reject a company-wide rollout without a contained pilot.",
"think": "The upside is clear. The implementation risk is not.",
"feel": "Interested, but exposed if adoption fails.",
"say": "Show me one region working first.",
"act": "Approve a 30-day pilot with a stop point."
}https://app.reasoner.com/api/twin-mcpMind Twin Teams
Add a teammate's email as target. The same chat, upload, and status action now goes to their team Mind Twin.
{ "target": "[email protected]" }Complete reference
Scan the map first. Open an endpoint only when you need the exact fields.
chat_with_twinmessage required, 1 to 10,000 · target optional · format defaults to text; pass json for structured TFSA
upload_transcripttranscript and the real meeting date required · title, format, and target optional · limit 10,000,000 characters (roughly 10 MB)
get_statusNo fields for your own Mind Twin · target optional · no twin yet and ready + ingesting are expected conditions
| Intent | MCP tool | REST endpoint | Returns |
|---|---|---|---|
| Ask a Mind Twin | chat_with_twin | POST/chat | Answer + TFSA |
| Add a meeting | upload_transcript | POST/upload | Processing state |
| Check readiness | get_status | GET/me/status | Status + progress |
| Check service | Not exposed | GET/health | Service status |
/chatAsk a Mind TwinSend one question. Omit target for your own Mind Twin.
messagestring · required · 1 to 10,000The question to answer.
targetstring · optionalA teammate email. Requires twin:upload.
POST https://app.reasoner.com/api/twin-mcp/chat
Authorization: Bearer $MINDTWINS_KEY
Content-Type: application/json
{
"message": "What would make you reject this rollout?",
"target": "[email protected]"
}{
"answer": "I would reject a company-wide rollout without a contained pilot.",
"think": "The upside is clear. The implementation risk is not.",
"feel": "Interested, but exposed if adoption fails.",
"say": "Show me one region working first.",
"act": "Approve a 30-day pilot with a stop point."
}/uploadAdd a meetingSend up to 50 MB through REST. The MCP tool has a separate 10,000,000 characters (roughly 10 MB) limit.
transcriptstring · requiredVTT, SRT, plain text, or agent JSON.
dateISO-8601 · requiredUse the real meeting date. Never guess or default to today. Confirm each transcript separately.
titlestring · optional · max 500A human-readable meeting name.
formatenum · optionalvtt, srt, text, or agent-json. Omit to auto-detect.
targetstring · optionalA teammate email. Requires twin:upload.
REST-only contextoptionalparticipants, duration, source, selfSpeaker, and segments. The MCP tool does not accept these fields.
POST https://app.reasoner.com/api/twin-mcp/upload
Authorization: Bearer $MINDTWINS_KEY
Content-Type: application/json
{
"date": "2026-08-05",
"title": "Pricing strategy call",
"format": "vtt",
"transcript": "WEBVTT\n\n00:00:01.000 --> 00:00:04.000\n...",
"target": "[email protected]"
}{
"success": true,
"data": {
"status": "processing"
}
}/me/statusCheck readinessUse [email protected] for a teammate. Poll periodically, not continuously.
GET https://app.reasoner.com/api/twin-mcp/me/[email protected]
Authorization: Bearer $MINDTWINS_KEY{
"status": "building",
"progress": 42
}/healthCheck service livenessNo key required. Use it for a simple service liveness check.
GET https://app.reasoner.com/api/twin-mcp/health{
"status": "ok"
}Authentication and boundaries
Every authenticated request is tied to one caller and one workspace. The request never supplies a workspace id.
twin:chatEveryoneChat, upload, and status are all available for the key owner.
twin:uploadMind Twin TeamsUse all three actions on a teammate's team Mind Twin inside the same workspace.
Provisioned for you Keys are created in the app. There is no public create-key endpoint.
Keep it server-side. Never ship a dev_ key in browser or mobile code.
Rotate on exposure. Regenerate in MCP Twin. The old key stops working immediately.
Use the narrow path. Drop target when you only need the key owner's Mind Twin.
Errors and retries
Errors return JSON with error and code. Some responses also include message.
| Status | Code | Meaning | Your next move |
|---|---|---|---|
400 | VALIDATION | Invalid or missing field | Fix the request. Check message, date, and format. |
401 | None | Missing, malformed, or expired key | Re-copy or regenerate the Bearer key. |
403 | INSUFFICIENT_SCOPENO_CALLER | Scope or caller problem | Drop target, use a Mind Twin Teams key, or verify the key owner. |
404 | NOT_FOUND | No first transcript or reachable target | Upload the first transcript for no twin yet; otherwise check the teammate and workspace. |
413 | CONTENT_TOO_LARGE | Message or transcript too large | Keep MCP at or below 10 MB and REST at or below 50 MB. |
429 | None | Rate limit reached | Wait for retryAfter, then retry with backoff. |
500 / 502 / 504 | INTERNALTIMEOUT | Transient service or upstream failure | Retry with bounded exponential backoff. |
Run the copied install command again, confirm the Bearer key is present, then restart the MCP client.
That is expected for a fresh Mind Twin. In MCP, a blank or zero learned-transcript count is not a live meter. Check periodically. Only failed needs attention.
This is expected before the first upload. REST returns 404. Upload a transcript to start building.
Keep chatting. The Mind Twin remains ready while the new transcript lands; recall of it sharpens shortly.
Ask for the real meeting date. Never guess or default to today. Confirm each transcript separately.
The same content and date were de-duplicated successfully. Do not upload it again.
A valid provisioned key starts with dev_ and contains 41 characters. Re-copy it from MCP Twin.
One key. One workspace.
Open MCP Twin, copy the key that is already waiting, and choose the path your software needs.