
Ossian Mcp
io.github.dockndevaiPublished by GitHub account dockndevaiv0.2.2Updated Oct 24, 2026
Ask your own documents with citations, plus durable memory for agents. Safe by default.
Overview
Lets an assistant answer questions from an organisation's own documents with citations, and keep durable agent memory across conversations.
- What you can do
- This stdio adapter connects an agent to an Ossian installation. Read tools include ask_documents, which answers from the corpus with citations and refuses when nothing supports an answer, list_namespaces, list_documents and recall for ranked memory retrieval. Write tools add_document_from_url and remember are gated behind read-write mode, and forget_session erases a session's memory under admin mode. Tools are registered only if the configured access mode allows their capability.
- When to use it
- Use it when an assistant should answer from a private document corpus and cite the passages it used, rather than relying on general knowledge. It also suits agents that need memory persisting beyond a single conversation, kept separate from the document corpus. It is not useful without a running Ossian instance to point at.
- Requirements
- A local Node.js runtime with the npm package ossian-mcp, plus a running Ossian instance reachable at OSSIAN_URL. A required Ossian API key (OSSIAN_API_KEY, osk_...) issued from the console. Optional variables: OSSIAN_AGENT_ID (defaults to 'mcp'), OSSIAN_MODE (read-only by default), and policy variables such as OSSIAN_ALLOW_FORGET, OSSIAN_NAMESPACE_ALLOWLIST, OSSIAN_PROTECTED_NAMESPACES, OSSIAN_DRY_RUN and OSSIAN_AUDIT_LOG.
Installation
In SourceWeft
- Open Ossian Mcp in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
ossian-mcp
MCP server for Ossian — ask your organisation's own documents and get the passages the answer came from, plus a memory for your agent that outlives the conversation.
Ossian is the server; this is the adapter that puts it in front of an agent. You need a running
Ossian to point it at — see its README for a
docker compose up.
What it gives an agent
Tools are gated by access mode (see Safe by default) — the server starts read-only, exposing only the four read tools until you raise the mode.
Install
You need a running Ossian and an API key. Issue one from the console (Console → API keys) or:
Give the key the narrowest scope that works. namespace confines it to one slice, so a key that
leaks reads only what that agent was for.
Configure
OSSIAN_AGENT_ID separates one agent's memories from another's; two agents sharing an id share
their recollections, which is occasionally what you want and usually not.
See docs/CLIENTS.md for Claude Code / Cursor / Codex / VS Code / Windsurf snippets, and .env.example for every supported variable.
Safe by default
The server enforces an access model on top of the Ossian API key — defence in depth over the
key's own roles and namespace confinement. It reads its policy from the environment
(.env.example) and enforces it in src/security.ts:
OSSIAN_MODE—read-only(default) →read-write→admin. A tool is registered only if the mode allows its capability. Read-only exposes four tools; ingest and remember needread-write; forget needsadmin.OSSIAN_ALLOW_FORGET—forget_sessionerases memory irreversibly, so on top ofadminmode it also requires this flag.OSSIAN_NAMESPACE_ALLOWLIST/OSSIAN_PROTECTED_NAMESPACES— confine which slices can be touched, and mark slices that may be read but never ingested into.OSSIAN_DRY_RUN— validate and log writes (ingest / remember / forget) without executing.OSSIAN_AUDIT_LOG— a JSON audit line per guarded operation, on stderr (default on).- Interactive confirmation — when the client supports MCP elicitation,
forget_sessionprompts the human to approve before erasing a session's memory; clients that can't elicit fall back to theOSSIAN_ALLOW_FORGETgate.
The primary control remains the API key: issue the narrowest one that works. See SECURITY.md.
Two things worth knowing
A "not found" is an answer. ask_documents returns a refusal when nothing in the corpus
supports a response, and the tool description tells the model to report that rather than falling
back on general knowledge. An invented answer presented as company policy is the failure this
whole system exists to prevent — do not paper over it in your own prompt.
Memory is not the corpus. recall searches what the agent was told; ask_documents searches
what the organisation wrote down. They are separate stores on purpose: memories surfacing as
citations in a policy answer would be indistinguishable from the policy itself.
Developing
It speaks JSON-RPC over stdio, so it will sit there waiting for a frame. To drive it by hand:
Diagnostics go to stderr on purpose — anything written to stdout that is not a protocol frame corrupts the stream, and the failure looks like a client that cannot parse rather than a server that printed a log line.
Licence
Apache-2.0
Source: README.md at commit d08810f
Tools
0Version history
1- v0.2.2LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts