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.
Open MCP Twin in the app. Your twin:chat key is already there.
The installer connects every supported MCP client it detects.
Ask the client which reasoner-twin tools it can see. It should list all three.
npx -y add-mcp mcp-remote --name reasoner-twin \
--args=https://mcp-twins.reasoner.com/mcp \
--args=--header --args="Authorization: Bearer dev_YOUR_TWIN_CHAT_KEY" \
--all -g -yhttps://mcp-twins.reasoner.com/mcpAgent integrations
The universal installer is the supported fast path. It detects compatible clients, adds the hosted server, and includes your Bearer header.
upload_transcriptAdd one meeting to your own or a teammate's Mind Twin.
get_statusSee whether the Mind Twin is building, ready, or failed.
chat_with_twinGet a readable answer or request structured JSON.
Path 02 · REST API
Use ordinary HTTPS from any server language. Every authenticated request carries the same Bearer key.
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]",
}),
},
);
const mindTwin = await response.json();200 · application/json
answer is the complete response. say is the short spoken line. Any empty Think, Feel, Say, or Act field is omitted.
{
"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-mcpMindTwins 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 optional, text or json
upload_transcripttranscript and date required · title, format, and target optional
get_statusNo fields for your own Mind Twin · target optional for a teammate's team Mind Twin
| 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.
200{ answer, think?, feel?, say?, act? }
/uploadAdd a meetingSend up to roughly 50 MB. Learning continues in the background.
transcriptstring · requiredVTT, SRT, plain text, or agent JSON.
dateISO-8601 · requiredControls ordering and de-duplication.
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.
more contextoptionalparticipants, duration, source, and selfSpeaker are also accepted.
{
"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]"
}200{ "success": true, "data": { "status": "processing" } }
/me/statusCheck readinessUse [email protected] for a teammate. Poll periodically, not continuously.
200{ "status": "building", "progress": 42 }
/healthCheck service livenessNo key required. Use it for a simple service liveness check.
200{ "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:uploadTeams onlyUse 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 Teams key, or verify the key owner. |
404 | NOT_FOUND | No reachable Mind Twin | Check the teammate email and workspace membership. |
413 | CONTENT_TOO_LARGE | Message or transcript too large | Reduce the payload and retry. |
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 an explicit failed state indicates a problem.
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.