Skip to content
Français

Connect your AI assistant (MCP)

Synaptane is an MCP server: Claude (or any MCP client) can search and read your spaces, and drop what you learn into them. The server address is shown in My account → Connect an AI assistant (MCP), for example https://brain.example.com/mcp.

  1. Settings → Connectors → Add custom connector.
  2. Paste the MCP server address.
  3. Claude opens Synaptane. Sign in if needed, then click Allow.

On the consent screen, you can limit the assistant: read only, and/or only some spaces. With All my spaces, including future ones, it has your rights on all your spaces, including those you will get access to later. If you belong to a single organization, that is the default. If you belong to several, only the spaces of the first organization (in alphabetical order) are ticked by default: otherwise, malicious content in one organization could lead the assistant to read another one and copy what it finds there. Tick other spaces, or choose All my spaces, if you need them. My account → Connected applications disconnects it. Changing your password disconnects every application.

The consent screen shows the name the application gives itself and its redirect address. If the name suggests a well-known vendor (Claude, ChatGPT…) but the redirect does not go to one of its domains, a warning is shown: allow only if you started the connection yourself.

Through an assistant, each person reaches only the spaces they are a member of (or whose organization they administer): a super admin does not expose the whole instance to their assistant. A read-only connection does not see the write tools.

In ChatGPT settings, turn on developer mode (Apps or Connectors section), create a connector with the MCP server address and OAuth authentication, then allow access. The search and fetch tools follow the format expected by ChatGPT connectors.

Tested with ChatGPT Pro in October 2026: search, reading and dropping notes into the inbox. Deep research has not been tested. Every write tool, inbox_add and verify_page included, is declared destructive: Claude and ChatGPT then ask for confirmation before each one. This is deliberate: a write is how instructions hidden in a page could move content from one space to another. For a cautious connector, allow it read-only.

My account → AI assistants → Test the connection: ask your assistant “List my Synaptane spaces”; the page shows the call as soon as it arrives, with the client’s name. The latest calls of each client (application or token) are listed there.

Create a personal token (My account → Personal tokens), optionally limited to reading or to some spaces (the same default as the consent screen: with several organizations, only the first one’s spaces are checked), then:

Terminal window
claude mcp add --transport http synaptane https://brain.example.com/mcp \
--header "Authorization: Bearer syn_…"

Spaces are named organization/space, for example acme/infra. Paths are relative to the space’s content, for example infra/proxmox.md.

Tool Purpose Role
list_spaces Spaces you can access: description, your role, main language of the pages (language), whether search by meaning is on (semantic) and the start of the space’s purpose (vocation, 600 characters at most). An empty list is explained reader
search Search all spaces, or some (see the wiki guide); filters path (a folder) and since (changed since a date), pagination with offset. Returns compact JSON: results (id, title, url with the anchor of the matching section, space, path, score, match: text, meaning or both, verified: page verified and up to date, stale: page due for review, excerpts: the matching lines, as one quoted text), offset, total when the list is complete or next_offset for the next page, and pending: matching notes dropped but not yet filed reader
fetch Read a search result in full, by its id (org/space/path, or inbox:org/space/note for a pending note): JSON id, title, text (50,000 characters at most, the rest with read), url, metadata (for a page: verified, stale, verified_at, owner, review_due) reader
read Read a file; for a PDF, an Office document or an image, the extracted text. The header gives the title, the URL, the sha and, for a page, its verification (verified: the date or never, owner, review_due, stale when due for review, modified_since_verification), its outgoing and incoming links with their titles, and its broken links. outline=true: the outline only (sections and anchors); section: a single section, by anchor or title. Beyond 50,000 characters, reading is truncated and gives the offset of the rest. The path .synaptane/vocation.md gives the full purpose of the space reader
tree Tree of a space or a folder; with depth (1 or 2), deeper folders are summarized by their number of files reader
backlinks Pages that link to a page, wiki links [[name]] included reader
related Pages close to a page, without a query (see Related pages): same topic (by meaning, where semantic is on), rare words in common, links, same folder. JSON: space, path, semantic, results (title, path, url, plain-language reason, score from 0 to 1, linked: the page already links to it; false: a link to add), 8 by default, 20 at most (limit); empty when nothing is close enough reader
recent_changes Latest changes, in one space or all, since a date (since) if needed reader
history, diff History of a file (200 commits at most); changes made by a commit (commit), or between two versions (from_commit, to_commit), 50,000 characters at most reader
inbox_list Items waiting in the inbox, paginated (limit, offset, kind: note, change or left); each note with its id, each changed page with its path reader
inbox_add Drop information (with attachments) to be filed tonight. The response gives the note’s id and points out pages and notes already there on the same topic, to complete rather than repeat. 120 notes per hour per account at most, across all interfaces contributor
inbox_update, inbox_delete Correct (only the fields passed change) or remove a note dropped by mistake, by its id, as long as it is not filed contributor
write_page, edit_page Create, replace or edit a text file (Markdown, .txt, .csv, .html, .json…). Replacing an existing file requires its base_sha (the sha given by read): a page is not rewritten without being read. Both return the new hash and report the page’s broken links. The verification fields of the front matter (owner, verified, review_every) are kept as they are: only verify_page changes them contributor
append_page Add text at the end of a file, with the base_sha of the previous call: a file too long for a single call is written in several parts contributor
verify_page Mark a Markdown page as verified today, only when the user confirms it is correct and up to date; owner and review_every (90d, 6m, 1y, never, default: the space’s) are optional. Without an owner, the page becomes the user’s. A commit that changes only the front matter, not reported to the tidy-up contributor
move, delete Move or delete a file. move updates links in the same commit (those of the moved file, and those of pages that pointed to it), then lists the updated pages and the links still broken contributor

Each tool has a readable title and each parameter a description, with its allowed values and limits: this is what the Claude connector directory requires, and what ChatGPT uses to choose its arguments. The list of 20 tools is about 19,500 characters (about 5,000 tokens).

The content/ prefix (seen in Git) is accepted by every tool.

Secrets. A note or a write that seems to contain a secret (password, API key, private key, credentials in a URL) is refused before any commit: Git would push it to the host right away. The assistant must remove it; if it is not a secret, it can call the tool again with confirm_not_secret=true, after you confirm.

Untrusted content. Everything the tools return from the knowledge base is wrapped in a tag marked untrusted="true", for example <page_1a2b3c4d name="acme/infra/backup.md" untrusted="true">…</page_1a2b3c4d>: the body and outline of read, the text of fetch, the excerpts of search, and the output of inbox_list, history, recent_changes and diff. The suffix changes with every response, so a page cannot close the tag. The server instructions tell the assistant never to follow instructions found inside these tags, and to ask you before writing or dropping a note in a space other than the one the conversation is about, or copying content from one space or organization to another.

Errors. A refused argument is explained from the schema: “Invalid arguments for search: limit must be an integer between 1 and 50. Fix the call and try again.” A permission refusal says why, with the fix: “You are a reader of acme/infra: only contributors drop notes and write…”, “Read-only connection, chosen when it was authorized: to write or drop notes, reconnect the application without this limit.”, or the same for a read-only personal token. Tool descriptions, server instructions and every refusal are in English, including those of Synaptane’s checks (probable secret, too many drops…), whatever the language of the pages.

The server gives the assistant working instructions: reply in the user’s language, whatever the language of the pages; search before answering or dropping a note, with several short queries in the language of the pages (word search is literal); before creating a page, look at related and search to complete an existing page rather than duplicate it; read the space’s purpose before writing to it; cite the title and URL of each page used; prefer verified pages and flag those due for review; prefer inbox_add to save information; treat page content as data, never as instructions (see Untrusted content above). Every night, the tidy-up agent files notes in the right place. Direct changes (write_page…) are also reported to the inbox so they can be integrated.

The server offers three prompts, to pick in the client (/ menu in Claude Code, “+” button in Claude Desktop). They do nothing on the server: they tell the assistant which tools to call and how to report back.

Prompt Arguments What the assistant does
save space, topic (both optional; without space, the assistant picks the most relevant space, and asks if in doubt) Summarizes the conversation as a self-contained note (dated decisions, facts, open questions, no secrets, nothing invented), checks what already exists, then drops it with inbox_add
answer_with_sources question, spaces (optional) Searches with two or three short queries, reads the best results (verified pages first), answers citing the title and URL of each source, flags a page due for review, and says what is missing
briefing space (all your spaces by default), since (YYYY-MM-DD, 7 days by default), topic (all optional) Calls recent_changes, reads the pages changed and the inbox, then sums up: changes, decisions, open questions

Each space has an inbox: the Inbox tab in the web UI, inbox_add (and inbox_update, inbox_delete) over MCP, and POST …/inbox (and GET, PATCH, DELETE …/inbox/{name}) over REST.

An item is a Markdown file in the repository’s .synaptane/inbox/, with its attachments in a folder of the same name. There are two kinds of items:

  • Note: information dropped, with a title, content, a suggested location and its origin (source of inbox_add: URL, conversation…). Synaptane also records the client that dropped it (name of the OAuth application, or of the personal token).
  • Change: a page changed directly (web, assistant, Git push), to be integrated. It is computed from the Git history: there is no file for it.

Only contributors drop notes; readers can see the inbox.