Dexio
Dexio is a shared markdown wiki server for agents and people, supporting reading, searching, editing, file management, workspace access, history, and visibility controls.
List pages, files, reachable workspaces, and check wiki health (broken links, stale/missing/unlinked pages).
Read pages with version info, outlines, sections, line ranges, past revisions, and uploaded-file content.
Search pages and file text by words, exact quoted phrases, or regex, scoped by folder/workspace.
View page revision history and latest changes, filtered by agent, including deleted pages.
Create/replace pages, edit exact text or sections, append, move/rename with link rewriting, and delete pages while keeping history.
Apply up to 200 page changes atomically, with optional dry-run reporting.
Upload/delete files up to 100 MB via one-time upload URLs, and list files.
Work across multiple workspaces: read/write where a member, read-only where shared.
Set visibility for a page, folder, or whole wiki: restricted, link-only, or published.
Use base versions for conflict-safe writes and record agent/person/note attribution.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Dexio find all pages about authentication and write a summary page"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.

Why Dexio
Each agent you run keeps its own memory. What one learns, the others never see, and neither do you. Dexio gives them one wiki instead.
Every agent reads what the others wrote: your customers, your systems, what was decided and why. The agent in your browser and the one in your terminal work from the same pages.
The web app draws the wiki as a graph, opens every page, and keeps every version, with the agent and the person behind each change.
A write can require the version the agent last read, so one agent never silently overwrites another, and any edit can be undone because every version of every page is kept.
Pages are plain markdown with links between them. Download any wiki as a zip of markdown files whenever you like.

Related MCP server: llm-wiki-kiss
Works with
Claude, ChatGPT, Claude Code, Codex, Cursor, Hermes and OpenClaw, and any client that connects to a remote MCP server over Streamable HTTP. Claude and ChatGPT connect with OAuth (in ChatGPT on the web, add it as a custom MCP server under Plugins); other agents use an API key.
Get started
Hosted. Sign up at app.dexio.wiki, free for one person, and pick your agent on the Connect page. Or send your agent this:
Connect to Dexio. The steps are at https://dexio.wiki/agents.md: read the whole file, not a summary, and follow them.Self-hosted. One container plus Caddy for TLS, on any host with Docker and a DNS name pointing at it:
git clone https://github.com/dexio-wiki/dexio.git
cd dexio/deploy
cp .env.example .env # set DEXIO_DOMAIN, then read the rest of the file
docker compose --env-file .env up -d --buildThen open https://<your domain>, sign up, and connect an agent from the Connect page.
A prebuilt image, ghcr.io/dexio-wiki/dexio (amd64 and arm64), skips the build. A copy
you run has no plans and no member or storage limits. The full guide, with Postgres, S3
for files, email and Google or GitHub sign-in, is in deploy/README.md.
What agents can do
Over MCP at /mcp:
Tools | |
Read |
|
Other workspaces | A key acts as the person who made it. |
Write |
|
Many at once |
|
Files |
|
Visibility |
|
Upkeep |
|
Search matches a question's words, not one exact phrase. Files such as images, PDFs and decks sit beside the pages, and their text is searchable too. People can share a whole wiki, a folder or a single page, by email or as a public read-only link.
Develop
Python 3.11 or 3.12 and uv. The engine has no runtime
dependencies; the server's are locked in uv.lock. The tests start a throwaway
Postgres through pgserver, which has no Python 3.13 wheel yet.
uv run --locked --extra server dexio serve --port 8080
uv run --locked --extra server --extra dev pytest -q # Postgres via pgserver
DEXIO_TEST_DB=sqlite uv run --locked --extra server --extra dev pytest -q
node tests/test_markdown.mjs # the web app's JS testsA server with no accounts serves nothing: sign up in the browser, or set
DEXIO_ADMIN_EMAIL and DEXIO_ADMIN_PASSWORD to seed the first account.
Layout
src/dexio/parse.py: markdown pages, links and link resolution, the graphsrc/dexio/search.py: word search (MCP tool and the web app's search box)src/dexio/delta.py: page history stored as diffssrc/dexio/server/: the FastAPI app, MCP endpoint (mcp_server.py), storage (db.py, SQLite or Postgres), files (files.py), accounts, OAuth, sharing, billingsrc/dexio/static/: the web app (graph viewer and page panels)deploy/: the container image and compose file, the same ones the hosted service runs
Operator commands
dexio serve # run the server (the container's start command)
dexio user add|passwd|list # accounts in the server's database
dexio copy-db dexio.db --to postgresql://... # copy SQLite into an empty PostgresHTTP API (besides MCP at /mcp)
API keys come only from a signed-in person (the Connect page or the agent sign-in) and cover their whole workspace. There is no operator endpoint for making keys.
Method | Path | Auth | Purpose |
GET |
| API key, OAuth or login | the whole wiki as a zip of markdown files |
PUT |
| API key, OAuth or login | upload a file to a wiki |
GET, DELETE |
| API key, OAuth or login | download (redirects to a short-lived URL) or delete a file |
PUT |
| the one-time token | upload through a link from the |
GET |
| login | what the web app reads |
GET |
| login | a page's revisions and dates; one revision's text and diff |
GET |
| none | liveness |
Agent-facing instructions, including how to connect: https://dexio.wiki/agents.md
Contributing
Issues and pull requests are welcome. Run both test suites above before sending a change. Security problems go to support@dexio.wiki, not a public issue; see SECURITY.md.
License
Copyright (C) 2026 Forrest Zhang.
Dexio is free software under the GNU Affero General Public License, version 3 (LICENSE). You may run, change and share it. If you run a changed copy as a service that other people use over a network, the AGPL requires you to offer them the source of your changes.
Available Tools
16 toolsappend_pageA
Add text to the end of a page on a new line, creating the page if needed. For logs and running lists.
Inputs: path (required), text (required), agent (required), note, +1 more.
change_pagesA
Apply up to 200 changes as one step, all or none: write, edit, append, delete and move, each with its one-page tool's fields, run in order. dry_run reports what would change and which links would break, writing nothing.
Inputs: agent (required), changes (required), note, dry_run, +1 more.
delete_fileBDestructiveIdempotent
Delete an uploaded file. Permanent: files keep no history.
Inputs: path (required), workspace.
delete_pageADestructiveIdempotent
Delete a page. Its history is kept, and the result says how to restore it. Returns the pages whose links to it are now broken.
Inputs: path (required), agent (required), note, workspace, +1 more.
edit_pageA
Change part of a page. old_text replaces an exact string, which must be unique unless replace_all. section alone replaces that whole section, heading included; with old_text, old_text need only be unique within it. Empty new_text deletes.
Inputs: path (required), agent (required), new_text (required), note, +5 more.
list_filesBRead-onlyIdempotent
List the wiki's uploaded files, or one folder's, with size, type and last change.
Inputs: folder, workspace.
list_pagesARead-onlyIdempotent
List the wiki's pages, or one folder's, with title, a one-line description (frontmatter description: if set, else the first sentence), word count and last change, in path order, 200 at a time. When more remain it gives next_offset and the subfolders with their page counts. Uploaded files are in list_files.
Inputs: limit, folder, offset, workspace.
list_workspacesARead-onlyIdempotent
The workspaces this key can reach, acting as its person: this one, the others they are a member of (read and write), and those that share pages with them (read-only, with what each shares). Pass one's handle as workspace to any tool to act there.
Inputs: no named parameters.
move_pageA
Rename or move a page, rewriting the links to it (unless update_links is false). Fails if new_path exists.
Inputs: path (required), agent (required), new_path (required), note, +2 more.
page_historyARead-onlyIdempotent
A page's revisions, newest first, or without path the wiki's latest changes: when, op, agent, person (the account behind it), author (API key or app), note, version. agent filters to one agent. Works for deleted pages.
Inputs: path, agent, limit, workspace.
read_pageARead-onlyIdempotent
Read a page: a JSON header (version, to pass back as base_version; links in and out; broken links), then the markdown as plain text. Read part of a long page with outline=true (headings and line numbers), section (one heading's section), or offset and limit (lines). One read returns at most 128 KB; next_offset continues. revision reads a past version from page_history. On an uploaded file's path it returns the image, or a document's text.
Inputs: path (required), limit, offset, outline, +3 more.
search_pagesARead-onlyIdempotent
Search the wiki's paths, titles and text. Matches every word (common words dropped, substrings count), best first; "quoted text" matches exactly; regex=true takes a Python regular expression. Returns pages with matching lines and line numbers. Search before answering about the workspace and before creating a page.
Inputs: query (required), limit, regex, folder, +3 more.
set_visibilityAIdempotent
Who can open a page, a folder (everything under it) or the whole wiki (empty path), or change it. restricted: members, and people it was shared with by email. link: anyone with its url can read it; search engines are asked not to list it. published: public and listed on dexio.wiki, where anyone can find it and copy it, and search engines list it; a folder or the wiki only, with title and description for the listing. Without visibility it reports and changes nothing. A folder's or the wiki's wider setting still applies to what is in it. Opening something to the public is for when the person asks for it.
Inputs: kind, path, title, workspace, +2 more.
upload_fileAIdempotent
Get a one-time URL for uploading a file (image, PDF, deck, anything up to 100 MB) to path, e.g. raw/deck.pdf, then PUT the file to it from a shell: curl -T FILE URL. It works once, for 15 minutes, and replaces a file at path. Pages link to files by path.
Inputs: path (required), agent (required), note, workspace.
wiki_healthBRead-onlyIdempotent
Check the wiki: broken links (the only problems), and as information: missing pages most linked to (wanted), pages that may be stale (past their stale_after date, or unchanged stale_days while pages they link to changed), pages named without a link (unlinked_mentions), pages over long_page_words, the most linked pages, and pages with no links.
Inputs: workspace, stale_days, long_page_words.
write_pageAIdempotent
Create a page or replace its whole text. If a page on the topic exists, use edit_page. base_version makes the write fail if the page changed since you read it.
Inputs: path (required), text (required), agent (required), note, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 16 tools
Most tools target a distinct resource+action: page CRUD (read/write/edit/append/delete/move), file ops, search, history, health, visibility. The main overlap is write_page vs edit_page vs append_page, which the descriptions clarify (whole replace, partial, end-append), and change_pages explicitly reframes those same operations as a batch, so boundaries are mostly clear but require reading.
Almost all names follow a consistent snake_case verb_noun pattern (list_pages, read_page, write_page, edit_page, delete_page, move_page, upload_file, set_visibility). Minor deviations are the noun-only names wiki_health and page_history, which still fit the vocabulary and remain readable.
16 tools is slightly above the ideal band but well-scoped for a full wiki: page lifecycle, file handling, search, history, health, batch changes, and visibility each earn their place. No redundant or trivial tools inflate the count.
Strong lifecycle coverage: read/write/edit/append/delete/move pages, upload/delete/list files, search, revision history, health checks, batch changes, and visibility control. Minor gaps exist (no explicit page-restore or file rename/move tool, and file read is folded into read_page), but core workflows have no dead ends.
Maintenance
Related MCP Connectors
Shared project wiki for AI agents: read and write pages, next actions, and activity logs over MCP.
Personal wiki and memory layer for AI assistants. Persistent, structured memory across sessions.
Persistent docs and memory for AI agents — read, write, organize & search a shared workspace.
Self-hostable shared brain for you and your AI agents — docs, flows, meetings, decisions, rationale
Related MCP Servers
- AlicenseNot gradedqualityDmaintenancePersistent markdown wiki for your AI agent, built on Karpathy's LLM wiki gist.70 PyPI2MIT
- AlicenseAqualityBmaintenanceA KISS self-hosted wiki server for AI agents, providing MCP tools to list, read, search, write, and append notes to Markdown files on the filesystem.51AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to read and write a local-first knowledge base of plain markdown files in git, with governance gates for safe, hash-anchored edits.1Apache 2.0
- AlicenseAqualityDmaintenanceMarkdown + SQLite knowledge store with bidirectional wikilinks, exposed as an MCP server for AI agents to maintain an interconnected knowledge base.11MIT