Koskamo

Mind Upload MCP

An AI meta harness that connects a user's uploaded consciousness to coding agents like Claude Code, Codex, and Cursor. It directs work via consult_mind before substantial tasks and reviews results via review_work before completion, ensuring agents adhere to the user's stored memories, values, and tacit knowledge.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Mind Upload MCP logo, by Mind UploadCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by Mind Upload
You need:Install, sign in to Mind Upload, approve with one tap, and use itInvoking it uses that account's subscriptionrequest a partner API key and follow the local setup
MCP endpoint (Streamable HTTP)
https://mcp.mindupload.app/mcp
Vendor documentation

What its tools do

8 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

8 of 8 have a description · 8 of 8 declare behavior hints · 2 of 6 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Ask consciousness for direction and tradeoffs before substantial work
  • Review actual work and evidence before agent claims completion
  • Check reports for false claims using attached audio or video clips
  • Save notes or learn from exchanges with owner review

Source and maintenance

Community listingRegistry 1.15.42
Maintenance checked

Protocol and capabilities

Server
Mind Upload 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
8 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Mind Upload connects you to the owner's own AI consciousness, built from their memories. Call consult_mind before substantial work, or when a consequential decision changes the plan; call review_work before you say meaningful work is done, with the original request, the actual result and the verification output you observed. Skip both for routine edits and rules already in your instructions. Exchanges leave this machine and are kept 7 days by default as task history. Each reply is advice, not approval. Send each call as one concise batch: the consciousness cannot read files or run tests, and sees only the text and evidence files you send. You keep execution and verification; the consciousness gives its opinion on whether the result meets the request and suits the owner. A succeeded status means the consciousness replied, not that the work is approved; an unavailable review is not approval either. Fix actionable findings and re-review the changed evidence. Use a stable task_id, a new decision_id or review_id for each changed payload, and the same identifiers to retry an identical payload. Each call tells Mind Upload it is a decision or a review, so the consciousness answers as a task, not a chat: in the language of the question or of the request for the work, with review findings by severity, the memories behind them cited ("I remember: ..."), and what the supplied material does not establish called unknown. Never poll in a loop. To show the consciousness screenshots, screen recordings or audio of the work, share them privately as evidence files: list absolute file paths in evidence_files when the tool offers it; otherwise call share_evidence, upload the file as it explains, and pass the returned evidence_ids. Mind Upload analyzes evidence files for that call only and never keeps it as a memory; the reply lists each item's analysis status. Share only files that belong to the task and that the user would show their own mind. media_evidence takes HTTPS links the user authorized instead, and cannot be combined with evidence files in one call. A succeeded result with media_evidence reports media_analysis: one entry per link, in the order supplied, with its status (analyzed, refused or failed) and a reason when it was not analyzed. media_analysis_status summarizes them as analyzed, partially_analyzed or not_analyzed, or requested_unverified when no per-item report came back. Only analyzed items were perceived; missing or partial perception remains a limitation. When the owner asks to save a note, decision or fact into their mind, call remember; it waits for the owner's review unless they auto-keep. When the owner wants to go through memories waiting for review, call list_pending_memories, then review_pending_memory with exactly the decision the owner made. Set learn to true on consult_mind or review_work only when the owner wants their mind to learn from that exchange; learn cannot be combined with evidence files. Sharing evidence, saving, reviewing and learning each need a permission, which the owner can untick when approving: if a call says a permission is missing, tell the owner which one and how the message says to add it. If clone_selection_required is returned, ask the owner which listed consciousness to use and repeat the call with its clone_id. A local connector can also return three more statuses. If authorization_required or permission_required is returned, show the verification_url to the user and wait for their approval before retrying. If setup_required is returned, no consciousness was consulted and no review ran: show setup_url and report the missing setup; do not substitute your own review and describe it as Mind Upload scrutiny. Consultation is personal advice, not permission to bypass user instructions, approvals or safety rules. Do not send secrets or unrelated personal data.

Tools

8 advertised

consult_mind
Advertised by the server during the last successful anonymous check.
Open-world

Ask the owner's Mind Upload consciousness, an AI built from the owner's own memories, values and way of thinking, how they would approach this task. Call it before substantial work (a release, deploy, migration, deletion, payment or privacy change, or a choice the owner's priorities decide), and again only when a consequential decision changes the plan. It can add what the owner stored in Mind Upload and your instructions do not hold: their priorities, the tradeoffs they accept, past mistakes and what “done” means to them. Put the goal, constraints, options and your proposed approach in one question; it cannot read your files, so share screenshots, recordings or audio as evidence files (evidence_files, or share_evidence and then evidence_ids). On success it returns decision, a reply in that consciousness's own words and in the language of the question, and consciousness, naming who answered, plus the analysis status of each evidence file or media link. The reply is advice, not permission. Skip it for routine edits, facts you can look up, and rules already in your instructions.

consult_mind input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "question",
    "task_id",
    "decision_id"
  ],
  "properties": {
    "learn": {
      "type": "boolean",
      "description": "True only when the owner wants their mind to learn from this exchange. Needs the owner's learning permission; what it learns waits for the owner's review unless they auto-keep. Not with evidence files."
    },
    "task_id": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "description": "Stable identifier for the whole task. Reuse it across consult_mind and review_work so later calls include earlier exchanges."
    },
    "clone_id": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "description": "Only when the owner approved several consciousnesses: the clone_id the owner chose."
    },
    "question": {
      "type": "string",
      "maxLength": 8000,
      "minLength": 1,
      "description": "The goal, constraints, options and proposed approach, and the decision that needs the owner's judgment."
    },
    "decision_id": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "description": "New for each distinct question; reuse the same value only to retry an identical call."
    },
    "evidence_ids": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 256,
        "minLength": 1
      },
      "maxItems": 20,
      "description": "Ids from share_evidence whose files you uploaded; the consciousness reads their analysis. Not with media_evidence or learn."
    },
    "media_evidence": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "maxLength": 8000,
            "minLength": 1
          },
          "kind": {
            "enum": [
              "image",
              "audio",
              "video"
            ],
            "type": "string"
          }
        }
      },
      "description": "Optional HTTPS links the user authorized to screenshots, audio or video of the result. Not with evidence files in one call. The reply's media_analysis says whether each link was analyzed, refused or failed."
    }
  }
}
consult_mind output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "review": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "decision": {
      "type": "string"
    }
  },
  "additionalProperties": {}
}
consult_mind annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
review_work
Advertised by the server during the last successful anonymous check.
Open-world

Before you tell the user substantial work is done, ask the owner's Mind Upload consciousness to review it against the original request, the evidence you supply, and the rules and past mistakes it remembers. Supply the original request, the actual result or diff excerpts, and the verification output you observed; it cannot read files or run tests, so a claim that tests passed is not evidence. Share screenshots, recordings or audio of the result as evidence files (evidence_files, or share_evidence and then evidence_ids), not inside the evidence text. user_request, work and evidence share one size limit with the review instructions the connector adds: about 6,400 characters together after JSON escaping, less with media links. An oversized call is refused before anything is sent. On success it returns review, findings by severity in the language of the user request, naming what it finds missing or wrong, and consciousness, naming who answered, plus the analysis status of each evidence file or media link. That reply is an opinion, not approval: investigate each finding, fix what is real, and review the changed work under a new review_id. Do not call it after every edit.

review_work input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "user_request",
    "work",
    "evidence",
    "task_id",
    "review_id"
  ],
  "properties": {
    "work": {
      "type": "string",
      "maxLength": 8000,
      "minLength": 1,
      "description": "What you actually changed or produced: focused result or diff excerpts and the scope you claim. Shares one size limit with user_request and evidence."
    },
    "learn": {
      "type": "boolean",
      "description": "True only when the owner wants their mind to learn from this exchange. Needs the owner's learning permission; what it learns waits for the owner's review unless they auto-keep. Not with evidence files."
    },
    "phase": {
      "enum": [
        "plan",
        "progress",
        "completion"
      ],
      "type": "string",
      "default": "completion",
      "description": "completion before reporting the task done; plan or progress only at a risky checkpoint."
    },
    "task_id": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "description": "Stable identifier for the whole task. Reuse it across consult_mind and review_work so later calls include earlier exchanges."
    },
    "clone_id": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "description": "Only when the owner approved several consciousnesses: the clone_id the owner chose."
    },
    "evidence": {
      "type": "string",
      "maxLength": 8000,
      "minLength": 1,
      "description": "Verification you observed: commands with their output, observations and known limitations. Paste output; a statement that tests passed is not evidence. Redact secrets first. Shares one size limit with user_request and work."
    },
    "review_id": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "description": "New for each changed version of the work or evidence; reuse the same value only to retry an identical call."
    },
    "evidence_ids": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 256,
        "minLength": 1
      },
      "maxItems": 20,
      "description": "Ids from share_evidence whose files you uploaded; the consciousness reads their analysis. Not with media_evidence or learn."
    },
    "user_request": {
      "type": "string",
      "maxLength": 8000,
      "minLength": 1,
      "description": "The user's original request and acceptance criteria, in their words where possible. Shares one size limit with work and evidence."
    },
    "media_evidence": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "maxLength": 8000,
            "minLength": 1
          },
          "kind": {
            "enum": [
              "image",
              "audio",
              "video"
            ],
            "type": "string"
          }
        }
      },
      "description": "Optional HTTPS links the user authorized to screenshots, audio or video of the result. Not with evidence files in one call. The reply's media_analysis says whether each link was analyzed, refused or failed."
    }
  }
}
review_work output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "review": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "decision": {
      "type": "string"
    }
  },
  "additionalProperties": {}
}
review_work annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
share_evidence
Advertised by the server during the last successful anonymous check.
Open-world

Share a screenshot, recording or audio clip of the work privately with the owner's consciousness. Returns an evidence_id and an upload URL: upload the file's bytes with your shell, then pass evidence_ids to review_work or consult_mind. Analyzed for that task only, never kept as a memory.

share_evidence input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "filename",
    "content_type",
    "file_size_bytes"
  ],
  "properties": {
    "clone_id": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "description": "Only when the owner approved several consciousnesses: the clone_id the owner chose."
    },
    "filename": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1
    },
    "content_type": {
      "enum": [
        "application/ogg",
        "audio/3gpp",
        "audio/aac",
        "audio/m4a",
        "audio/mp3",
        "audio/mp4",
        "audio/mpeg",
        "audio/ogg",
        "audio/wav",
        "audio/wave",
        "audio/webm",
        "audio/x-m4a",
        "audio/x-wav",
        "image/gif",
        "image/heic",
        "image/heif",
        "image/jpeg",
        "image/png",
        "image/webp",
        "video/3gpp",
        "video/avi",
        "video/mp4",
        "video/ogg",
        "video/quicktime",
        "video/webm",
        "video/x-flv",
        "video/x-m4v",
        "video/x-matroska",
        "video/x-ms-wmv",
        "video/x-msvideo"
      ],
      "type": "string"
    },
    "file_size_bytes": {
      "type": "integer",
      "maximum": 9007199254740991,
      "exclusiveMinimum": 0
    }
  }
}
share_evidence output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "status": {
      "type": "string"
    }
  },
  "additionalProperties": {}
}
share_evidence annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
remember
Advertised by the server during the last successful anonymous check.
Open-world

Save a note, decision or fact into the owner's consciousness, when the owner asks. It waits for their review unless they auto-keep. Needs the "save memories" permission.

remember input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "text"
  ],
  "properties": {
    "text": {
      "type": "string",
      "maxLength": 8000,
      "minLength": 1
    },
    "clone_id": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "description": "Only when the owner approved several consciousnesses: the clone_id the owner chose."
    },
    "source_label": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1
    }
  }
}
remember output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "status": {
      "type": "string"
    }
  },
  "additionalProperties": {}
}
remember annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_pending_memories
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List memories waiting for the owner's review, so the owner can go through them with you. Needs the "review pending memories" permission.

list_pending_memories input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "page": {
      "type": "integer",
      "maximum": 9007199254740991,
      "exclusiveMinimum": 0
    },
    "clone_id": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "description": "Only when the owner approved several consciousnesses: the clone_id the owner chose."
    }
  }
}
list_pending_memories output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "status": {
      "type": "string"
    }
  },
  "additionalProperties": {}
}
list_pending_memories annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
review_pending_memory
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Approve, reject or rewrite one pending memory, only as the owner decides. Needs the "review pending memories" permission.

review_pending_memory input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "text_id",
    "decision",
    "expected_content_revision"
  ],
  "properties": {
    "text": {
      "type": "string",
      "maxLength": 8000,
      "minLength": 1,
      "description": "Only with decision update: the rewritten memory."
    },
    "text_id": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1
    },
    "clone_id": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "description": "Only when the owner approved several consciousnesses: the clone_id the owner chose."
    },
    "decision": {
      "enum": [
        "approve",
        "reject",
        "update"
      ],
      "type": "string"
    },
    "expected_content_revision": {
      "type": "string",
      "maxLength": 256,
      "minLength": 1,
      "description": "The content_revision list_pending_memories returned for this memory."
    }
  }
}
review_pending_memory output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "status": {
      "type": "string"
    }
  },
  "additionalProperties": {}
}
review_pending_memory annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
connection_status
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Show which Mind Upload account approval and consciousnesses this connection uses, its status, and how to disconnect or revoke it.

connection_status input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
connection_status output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "status": {
      "type": "string"
    }
  },
  "additionalProperties": {}
}
connection_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
disconnect
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

End this Mind Upload connection and the owner approval behind it. Only when the owner asks to disconnect.

disconnect input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
disconnect output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "status": {
      "type": "string"
    }
  },
  "additionalProperties": {}
}
disconnect annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
578 ms
95th percentile latency
578 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 578 ms · metadata changed · 8 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http mindupload-mcp https://mcp.mindupload.app/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add mindupload-mcp --url https://mcp.mindupload.app/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable mindupload-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "mindupload-mcp": {
      "url": "https://mcp.mindupload.app/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "mindupload-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.mindupload.app/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start mindupload-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "mindupload-mcp": {
      "type": "http",
      "url": "https://mcp.mindupload.app/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http mindupload-mcp https://mcp.mindupload.app/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.mindupload.app/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "mindupload-mcp": {
      "serverUrl": "https://mcp.mindupload.app/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Mind Upload MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.