Self-hosted Obsidian-compatible markdown vault with a web UI and a 61-tool MCP server for AI agents
Markdown notes your AI agents can read, write, and reason over — via MCP.
A self-contained markdown vault with a built-in MCP server. Humans
edit through a web UI, agents talk to it over MCP, everything lives
in plain .md files that Obsidian (and every other markdown tool)
reads natively.

Launch a free, throwaway gosidian in
GitHub Codespaces — no install,
running on your own Codespaces quota. It builds from source, seeds a small
demo vault, and opens the web UI. Log in with demo /
gosidian-demo.
docker run -d --name gosidian \
-p 8080:8080 \
-v "$(pwd)/vault:/vault" \
ghcr.io/daniele-chiappa/gosidian:latest
# open http://localhost:8080, create admin, copy the MCP token from /admin/tokens
claude mcp add gosidian http://localhost:8080/mcp \
--transport http --header "Authorization: Bearer $TOKEN"
Three commands: Docker up → token created from the web UI → agent
wired. Your .md vault is persisted under ./vault/; stop the
container and the files are still there.
Other installation paths (source, custom compose, bare-metal): docs/getting-started.md.
.md files on disk. Open the same
folder in Obsidian, VS Code, vim, or any editor you already use.
Zero lock-in: delete .gosidian/ and you have a pure Obsidian
vault.go:embed). Notes, graph, search and
config forms open as windows in a tiling "plancia" workspace —
full-text search, backlinks, graph view, editor with live preview,
audit trail, admin pages for tokens and users.All three views hit the same files on disk. The SQLite FTS5 index is a cache — drop it and it rebuilds.
.md files you can take
anywhere.FAQ covers the long form.
read / write) and per-project
restriction — including multi-project tokens for orchestrators;
cascade-revoke on user disablememory_wait_changes long-poll change feed — a minimal multi-agent
task queue where everything stays plain markdown.html notes, rendered in a sandboxed iframe (off by
default, opt-in per project)memory_hubs (most-linked
notes) and memory_path (shortest path between two notes)| Area | Start here |
|---|---|
| Install + configure | Getting started, Configuration, Deployment |
| MCP integration | Overview, Tool catalogue, Authentication, Client setup, Agent patterns |
| Web UI | Overview, Editor, Authentication & roles, Settings |
| Vault | Format, Conventions, Multi-project, Global projects, Obsidian compatibility |
| Internals | Architecture, Development |
| Common questions | FAQ |
Full index: docs/README.md.
Contributions welcome. See CONTRIBUTING.md for the workflow, test expectations, and translation guidelines.
Security issues are reported privately. See SECURITY.md for the disclosure process.
Released under the MIT License.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
docker run -i --rm ghcr.io/daniele-chiappa/gosidian:v2.71.0Merge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-daniele-chiappa-gosidian": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/daniele-chiappa/gosidian:v2.71.0"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceghcr.io/daniele-chiappa/gosidian:v2.71.0dockergosidian works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.