Cobrain
Server Details
Cobrain is a hosted Markdown brain your AIs share. Connect Claude, ChatGPT, Claude Code, Codex or any MCP client once (remote MCP with OAuth, no API keys to paste) and they all read and write the same notes. Share one folder with a teammate, read-only or read-write, and their AI reads it too. Permissions are enforced in the database, the same for the web app and for AIs; writes are version-checked so two AIs can't silently overwrite each other. Plain .md, exportable, EU-hosted. Free plan available.
- Status
- Healthy
- OAuth
- Not checked
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Score is being calculated.
Available Tools
28 toolsappend_fileInspect
Add text to the end of a note (creates it if missing). Prefer this over write_file whenever you are adding to a note instead of rewriting it: an append is atomic in the database and never conflicts, even with two writers at the same second. To change text that is already in the note, use patch_file. The brain is found from the path: omit workspace unless the tool asks for it.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| content | Yes | ||
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
app_noteRead-onlyInspect
Used by the Cobrain app: one note, rendered, with where it lives and who changed it last.
| Name | Required | Description | Default |
|---|---|---|---|
| ws | Yes | ||
| path | Yes |
app_searchRead-onlyInspect
Used by the Cobrain app: notes whose text matches, with the matching lines.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
attach_fileInspect
Attach a real file (image, PDF, audio, anything) to the brain, next to a note: it lands in the attachments/ folder of the note's branch and a Markdown reference is appended to the note (link=false to skip, then place the returned Markdown yourself). Give the file in ONE of three ways: data (base64, files up to ~3 MB), url (a public URL, fetched server-side, up to 25 MB), or neither: you get a signed PUT URL to upload the bytes yourself (e.g. with curl), then call attach_file again with the returned name and confirm=true. Returns the brain path and the Markdown that references it.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public http(s) URL to fetch | |
| data | No | Base64 content (a data: URL prefix is fine) | |
| link | No | Append the reference to the note (default true when path is a note) | |
| name | Yes | File name with extension (accents and spaces are normalized) | |
| path | Yes | The note (…/nota.md) the file belongs to, or a folder | |
| confirm | No | Second step of the direct upload: the bytes are on R2, register them | |
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
brain_panelBrain notesRead-onlyInspect
Opens the Cobrain app in a tab beside the conversation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
create_unitInspect
Create a unit at path from the brain's template for type. type is free (studente, paziente, classe, cliente, progetto…): the template is _templates/<type>/ in the brain; if missing it is seeded the first time from the preset of that name (cliente, progetto) or, for any other type, from the generic template (_about.md with frontmatter status/context, _ai.md, decisions.md; placeholder {{name}}) — then shape _templates/<type>/ with the user so the next units of that type are born complete (see start_project). These names and keys are English in every brain, Italian ones included. On an existing folder it only adds the missing files (never overwrites) — use it to mark an imported folder as a unit. Then start_session and fill the sections following the for the AI comments in each section. In a Cobrain brain where you can write only a branch (shared with you by its owner) and not the root, the unit is still created from the default template.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| type | Yes | ||
| fields | No | ||
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
delete_fileDestructiveInspect
Move a note, an attachment or a folder (with everything in it) to the brain's trash: the brain's owner can restore it from the Trash page of Cobrain for 30 days, then it is deleted for good. Previous versions come back with the note. Trashed notes still count toward the plan's note limit. Everything stays inside Cobrain. No tool can see or restore the trash.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
dream_tidy_upRead-onlyInspect
The Dream: tidy up the brain's memory. Among the notes changed in the last N days (or all the notes of one folder) finds notes that say almost the same thing as another one, decision logs grown too long, [[links]] that lead nowhere, empty notes — and returns them with the step-by-step script: read, fix the safe things, tell the user what you found and ask once before anything that could lose content (merging different notes, deleting, superseding decisions). Use it when the user says 'dream', 'sogna', 'fai il sogno', 'tidy up', 'riordina', or pastes the sentence from Cobrain's Dream email or Dream page (that one names a saved pre-dream: pass saved=true).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many days back to look (1-15): only the notes changed in that period are checked, plus the older notes they are close to. «yesterday» = 1, «this week» = 7. Default 7. Ignored when path is given. | |
| path | No | A folder: dream on every note inside it, whatever its age (up to 300 notes). | |
| saved | No | true = use the pre-dream Cobrain already saved (the list in the email and on the Dream page) instead of checking again. Pass it when the user's sentence mentions «the pre-dream of <date>» / «il pre-sogno del <date>». | |
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
fetchRead-onlyInspect
Open a note by the id a search result carried, and get its whole text as JSON. If you are not ChatGPT, prefer read_file: same note, plus attachments and the version you need to rewrite it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| text | Yes | |
| title | Yes | |
| metadata | No |
files_by_tagRead-onlyInspect
Notes carrying a tag.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
find_notesRead-onlyInspect
Find notes, folders and attachments by NAME (part of the file name or path), like find on a filesystem. Use this to locate a unit's folder or a note you know by title, or to resolve a [[wikilink]] to a path.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
list_filesRead-onlyInspect
List the notes (.md) and the attachments (with size) under a folder. Omit path for the whole brain. If the folder does not exist you get similar folder names.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
list_tagsRead-onlyInspect
Tags with counts.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
list_unitsRead-onlyInspect
The units in the brain (folders with _about.md: clients, students, patients, projects… any type): path, type, status (status: in _about.md: active, closed or free text), notes, last change, open sub-units. Closed ones only with all=true.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | ||
| type | No | ||
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
list_workspacesRead-onlyInspect
Your brain plus brains shared with you (id, name, access). The first line says which account you are connected as.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
load_contextRead-onlyInspect
Everything under a folder (or with a tag) in one blob, INSTRUCTIONS FIRST: brain-wide rules (_ai.md at the root), the unit's _about.md and _ai.md, its context folders and the latest decisions are always included in full, then the notes of the branch (closed sub-units left out). Call this first when starting work on a unit. The header lists, by name, the notes that did NOT fit: open the ones you need with read_file instead of assuming the blob is the whole branch.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| path | No | ||
| max_chars | No | ||
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
move_fileDestructiveInspect
Rename or move a note or a whole folder (needs write access on both ends). Into another brain the attachments under it travel too. To move it into ANOTHER brain pass to_workspace (id, «mine», or the owner's name/email).
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | ||
| from | Yes | ||
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. | |
| to_workspace | No | The destination brain, only when it differs from the source one. |
open_brainCobrainRead-onlyInspect
Opens the Cobrain app full screen from ChatGPT's sidebar: the user browses and searches their brain and attaches notes to the chat.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
patch_fileDestructiveInspect
Change one part of a note without rewriting it: replaces old_text with new_text. old_text must be copied exactly from read_file (spaces and line breaks included) and appear once in the note; add a few surrounding words if it appears more than once, or pass replace_all: true to change every occurrence. An empty new_text deletes old_text. Only changes a note that exists. The brain is found from the path: omit workspace unless the tool asks for it.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| new_text | Yes | ||
| old_text | Yes | ||
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. | |
| replace_all | No |
read_fileRead-onlyInspect
Read a note. On an attachment path (see list_files) you get the file instead: small images inline, text files as text, anything else as a signed download URL valid one hour.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
recent_changesRead-onlyInspect
The most recently changed notes (who and when). Use it to catch up on what happened lately.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
searchRead-onlyInspect
Find notes by words in their text, across your brain and the brains shared with you. Returns note paths with the matching LINES as excerpts (marked with …). A hit from a shared brain is tagged [<owner>'s brain · workspace=<id>]: pass that workspace to read_file/load_context/start_session for it. Excerpts are not the note: before answering from one, call read_file on its path; for the surrounding context, load_context on the note's folder. Each hit carries the note's date (from its frontmatter or file name, else when it was written). Hits under a Maybe related line match only SOME of the words: prefer the ones above it. Use 2-4 keywords, not a sentence. path narrows the search to one branch (a client, a project): use it whenever you already know where you are working.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| query | Yes |
search_mentionsRead-onlyInspect
Used by ChatGPT's composer to let the user @-mention a note (typeahead by name). Other clients: use find_notes.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
settings_readRead-onlyInspect
Used by ChatGPT's plugin settings page: the settings, their current values and layout.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| layout | No | |
| schema | Yes | |
| values | Yes |
settings_updateInspect
Used by ChatGPT's plugin settings page to save the settings the user changed.
| Name | Required | Description | Default |
|---|---|---|---|
| set | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| values | Yes |
start_projectRead-onlyInspect
Guided brainstorming to set up a new unit in the brain — a client, a student, a patient, a project, whatever the user wants to track: returns the step-by-step script to follow with the user (what to track and what to call it, a few questions, structure proposal, create_unit, filling). Use it when the user says 'nuovo cliente', 'nuovo progetto', 'nuovo studente', 'start project' or wants to add someone/something to the brain.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
start_sessionRead-onlyInspect
The one-minute briefing on a unit (a folder with _about.md: a client, a student, a patient, a project… whatever the user tracks): brain-wide rules, its _about.md, _ai.md, context folders, latest decisions — in full — then its open sub-units and the last 15 changes. Call this FIRST when the user names a unit; then load_context on the sub-folder you need. unit is a path or a name. Special file names and frontmatter keys are English in every brain: facts about the unit go in _about.md (frontmatter status: active|closed, context: folders always loaded), decisions in decisions.md (append_file), templates in _templates/.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | Yes | ||
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
write_fileDestructiveInspect
Create a note, or REPLACE its whole content (needs write access). Adding a line to a note that already exists? Use append_file. Changing one part of it? Use patch_file — write_file with a short text erases everything else. Replacing an existing note: pass base = the version read_file printed at the end of that note, so you never overwrite what someone else (a person, another AI) changed since you read it — if it changed, you are told to re-read and merge. The brain is found from the path: omit workspace and pass it only when the tool asks for it (a new branch, or one present in several brains), with the brain the user chose.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | The note's version as printed at the end of read_file (an ISO timestamp). Pass it when replacing an existing note. | |
| path | Yes | ||
| content | Yes | ||
| overwrite | No | ||
| workspace | No | Brain to act on: its id, «mio» (yours), or the owner's name/email as shown by search. Usually OMIT it: a path that already lives in one brain is found there, for reads and writes alike. Pass it only when the tool tells you to (a NEW branch, or one that exists in several brains) — with the brain the user named; when they were not explicit ASK THEM. A brain where the branch does not exist is refused even if you name it. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
28 tool updates
- First observed
app_note - First observed
app_search - First observed
append_file - First observed
attach_file - First observed
brain_panel - First observed
create_unit - First observed
delete_file - First observed
dream_tidy_up - First observed
fetch - First observed
files_by_tag - First observed
find_notes - First observed
list_files - First observed
list_tags - First observed
list_units - First observed
list_workspaces - First observed
load_context - First observed
move_file - First observed
open_brain - First observed
patch_file - First observed
read_file - First observed
recent_changes - First observed
search - First observed
search_mentions - First observed
settings_read - First observed
settings_update - First observed
start_project - First observed
start_session - First observed
write_file
Publisher details
- Operator
- OverPress Media SRL
- Operator website
- https://cobrain.space
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://cobrain.space/guides
- Trust center
- https://cobrain.space/privacy
- Restrictions
- Free plan available (1,000 notes). Sign-in with a Cobrain account required (OAuth, no API key). In claude.ai, custom connectors require a paid Claude plan.
Related MCP Connectors
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
- OctopadOAuthapp.octopad
The AI brain for builders: ChatGPT, Claude and your other AIs share one workspace and one method.
Self-hostable shared brain for you and your AI agents — docs, flows, meetings, decisions, rationale
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables Claude, ChatGPT, and other AI apps to share one MCP-accessible hub of Markdown-based memories and skills, with per-app adapters, versioned writes, git history, saving policies, Google OAuth, and a web UI.MIT
- AlicenseAqualityAmaintenancePrivacy-first local memory vault every AI shares over MCP. Markdown + SQLite on your machine; Claude, ChatGPT, Cursor, and any MCP client read and write it live. No cloud, no account, no telemetry124MIT
- AlicenseNot gradedqualityAmaintenanceLocal-first, file-based memory layer for AI agents — one shared Markdown vault across Claude, Codex, Gemini, Cursor and any MCP client. Provides read/write memory tools with an audit trail, per-agent trust levels, and Git sync; no cloud and no lock-in.2MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI clients like Claude, ChatGPT, and Cursor to search, read, and write back to one cross-model Markdown library of saved articles, videos, PDFs, notes, and conversations. Hosted remote server with OAuth 2.1 or Agent-key auth and read_only, edit, or full permission tiers.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.