Doco

by songofhawk

Not rated
GitHub

About

Give AI agents a shared document workspace with stable block IDs, conflict-safe writes, search, Markdown, and real-time collaboration.

Details

Author
songofhawk
Categories
Developer Tools, Other, Communication, Knowledge Base, Search

Setup

Install Doco in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/songofhawk/doco

Follow the installation instructions in the repository README, then restart your MCP client.

**The document space where humans and AI agents write together.**An open-source rich-text collaborative editor that puts your data back in your hands — and treats your AI agents with the same care: block-level stable addressing, optimistic concurrency control, and a 29-tool MCP server, so agents read and write your knowledge base as safely as a careful human editor. - **Hosted:**[doco.page— free during beta - **Connect your agent:**`claude mcp add doco -- npx -y --package doco-agent-cli doco mcp` - **CLI:**`npm i -g doco-agent-cli && doco login` - **npm:**](https://doco.page/)[doco-agent-cli·**API docs:**](https://www.npmjs.com/package/doco-agent-cli)[doco.page/api-docs ``` `/plugin marketplace add songofhawk/doco /plugin install doco@doco` ``` The marketplace bundles the Doco MCP server and the safe read → version → protected-write operating protocol. Tokens remain in Claude Code's local configuration and are never included in the plugin repository. - **Rich text editing**: headings, lists, blockquotes, task lists, code blocks (syntax highlighting), tables, images, links, text styling, and more - **`/`slash command**: type`/`to open the command palette with fuzzy search — supports pinyin abbreviations for Chinese users - **Floating toolbar**: auto-appears on text selection, all formatting actions within two centimeters of your cursor - **Block drag-and-drop**: hover the left edge of any paragraph to reveal a drag handle — reorder content like building blocks - **Collapsible sections**: fold away sections you're not working on; collapse state persists across sessions - **Auto heading numbering**: one-click toggle — H1–H4 headings automatically maintain hierarchical numbering (`1.``1.1``1.1.1`) - **Keyboard shortcuts**:`⌥↑/↓`move blocks,`⌘D`duplicate blocks,`⌘⌥1/2/3/0`switch heading levels Write Mermaid or PlantUML source code directly in your document. Diagrams render in place. Double-click to edit, fullscreen view, pinch-to-zoom — no more export-import-replace cycles with draw.io. - **Mermaid**: flowcharts, sequence diagrams, class diagrams, Gantt charts, state diagrams, and more - **PlantUML**: sequence diagrams, class diagrams, use case diagrams, component diagrams, and more A full spreadsheet engine embedded in your documents: - Formula evaluation, cell formatting - Freeze panes, sort & filter - Cell merge / split - CSV import / export Use it inline as a content block, or pop it out as a standalone full-screen spreadsheet. - Knowledge Base → Folders (nestable) → Documents — a three-level structure - Drag-and-drop reordering, renaming, and moving in the sidebar - Whole-KB ZIP export preserving folder hierarchy, with bundled images - Lossless native`.doco.zip`transfer for a document, folder, or whole knowledge base - No save button — changes sync automatically - Offline-first: browser IndexedDB is the primary store; the server holds a snapshot. Edit without a network, merge automatically when reconnected - Seamless device switching: close your laptop, pick up your phone, keep writing - **REST API**: OpenAPI 3.1 spec, Bearer Token auth, ETag versioning, cursor pagination, idempotency keys - **MCP server**:`doco mcp`(ships inside`doco-agent-cli`) — 29 tools plus`doco://`resources - **doco CLI**:`login / whoami / docs / blocks / edit / mcp`, global`--json`, writes internalize ETag/If-Match Turn your docs into programmable assets — script your own backups, let an agent organize your knowledge base, pipe docs from your publishing workflow to your blog. Built-in API documentation page, ready to use out of the box. ``` `# Install frontend dependencies pnpm install # Install backend dependencies cd backend && npm install && cd .. # Start the frontend dev server (Vite, default :5173) pnpm run dev # In another terminal, start the backend (Express + WebSocket, default :8000) cd backend npm run dev` ``` Open`http://localhost:5173`— it will auto-connect to the backend WebSocket service. The complete self-hosted package includes a Caddy frontend, Node.js collaboration backend, persistent SQLite storage, health checks, and a same-origin WebSocket proxy. The public images support both`linux/amd64`and`linux/arm64`. ``` `git clone https://github.com/songofhawk/doco.git cd doco cp .env.docker.example .env.docker # Review .env.docker first, then start with prebuilt Docker Hub images docker compose --env-file .env.docker up -d # Verify the deployment docker compose --env-file .env.docker ps curl --fail http://localhost:8080/healthz` ``` Docker Hub:](https://doco.page/api-docs/)[`songofhawkg/doco-frontend`·](https://hub.docker.com/r/songofhawkg/doco-frontend)[`songofhawkg/doco-backend` To build the same images from source instead: ``` `docker compose --env-file .env.docker up -d --build` ``` See the](https://hub.docker.com/r/songofhawkg/doco-backend)[Docker deployment guidefor all configuration options, HTTPS, logs, backup, restore, and upgrades. Do not run`docker compose down -v`unless you intend to delete the database and attachments. ``` `# Frontend build pnpm run build # output → dist/ pnpm run deploy # deploy to Cloudflare Pages # Backend (production) cd backend npm start` ``` ``` `doco/ ├── src/ │ ├── main.tsx # App entry point │ ├── App.tsx # Root component, routing, import/export │ ├── components/ │ │ └── Sidebar.tsx # KB sidebar (document tree) │ └── editor/ # Editor module │ ├── index.ts # Entry, exports DocoEditor component │ ├── DocoEditor.tsx # Editor core (Yjs/Hocuspocus init, extension registration) │ ├── types.ts # DocoEditor Props/Ref type definitions │ └── components/ │ ├── BubbleMenu.tsx # Selection floating toolbar │ ├── BlockHandle.tsx # Block drag handle │ ├── SlashCommand.ts # / command palette │ ├── CommandList.tsx # Command palette UI │ ├── suggestions.ts # Command menu data │ ├── CollapseExtension.ts # Block collapse extension │ ├── DocSettings.tsx # Document settings (heading numbering, background) │ ├── MermaidBlock.ts # Mermaid node definition │ ├── MermaidComponent.tsx # Mermaid renderer │ ├── PlantUMLBlock.ts # PlantUML node definition │ ├── PlantUMLComponent.tsx # PlantUML renderer │ ├── CalloutBlock.ts # Callout block definition │ ├── CalloutComponent.tsx # Callout renderer │ ├── SpreadsheetBlock.ts # Spreadsheet node definition │ ├── SpreadsheetComponent.tsx # Spreadsheet renderer │ ├── spreadsheetEngine.ts # Spreadsheet calculation engine │ ├── WeChatExportDialog.tsx # WeChat Official Account export │ ├── KeyboardShortcuts.ts # Keyboard shortcuts │ ├── TableOfContents.tsx # Table of contents │ ├── CodeBlockComponent.tsx # Code block (highlight + copy) │ └── ImageComponent.tsx # Image renderer ├── backend/ │ ├── server.js # Entry: Express + Hocuspocus + export routes │ ├── database.js # better-sqlite3 init & schema │ ├── api.js # KB / folder / document REST API │ ├── auth.js # Auth (OAuth + Email + API Token) │ ├── markdown.js # YDoc → Markdown server-side export │ ├── permissions.js # Permission management │ ├── quota.js # Quota management │ ├── openapi.js # OpenAPI spec definition │ └── tests/ # Backend tests └── docs/ # Design docs & proposals` ``` The editor core is also published as](https://github.com/songofhawk/doco/blob/HEAD/docs/Docker%E9%83%A8%E7%BD%B2.md)[`doco-text-editor`. It contains the full Doco editing experience and built-in styles, but has no dependency on Doco authentication, REST APIs, collaboration services, or IndexedDB. The host application decides whether content lives in memory, browser storage, its own backend, or an external system such as ClickUp. ``` `import { useRef } from 'react' import { DocoTextEditor, type DocoTextEditorRef, } from 'doco-text-editor' import 'doco-text-editor/style.css' const editorRef = useRef<DocoTextEditorRef>(null) <DocoTextEditor ref={editorRef} defaultValue="# Browser-only draft" format="markdown" onChange={({ steps }) => { // Only the ProseMirror steps changed by this transaction. queueIncrementalChanges(steps) }} /> // Read the complete document only when needed. const json = editorRef.current?.getContent('tiptap-json') const markdown = editorRef.current?.getContent('markdown') const html = editorRef.current?.getContent('html') const text = editorRef.current?.getContent('text')` ``` The package includes headings, inline formatting, blockquotes, ordered/unordered/task lists, code blocks, images, tables, callouts, Mermaid, optional PlantUML rendering, and embedded spreadsheets. See](https://www.npmjs.com/package/doco-text-editor)[`src/editor/README.md`for the complete API and integration notes. ``` `import { DocoEditor } from './editor' import type { DocoEditorRef } from './editor/types' const editorRef = useRef<DocoEditorRef>(null) <DocoEditor ref={editorRef} docId="doc-001" userId="user-001" collaboration={{ websocketUrl: 'ws://localhost:8000', }} onTitleChange={(docId, title) => console.log('Title changed:', title)} placeholder="Start writing…" /> {/* Call export methods via ref */} <button onClick={() => editorRef.current?.exportMarkdown()}>Export MD</button>` ``` ``` `Browser IndexedDB (y-indexeddb) ← local primary store ↕ Browser Y.Doc ← @hocuspocus/provider (WebSocket) ↕ Yjs binary delta messages Server @hocuspocus/server → SQLite ydoc_state (one merged snapshot per doc)` ``` - The browser IndexedDB is the primary store; the server snapshot is auxiliary. If the server snapshot is lost, simply open the document in the browser to repopulate it. - Offline editing works seamlessly; changes sync automatically when the network returns. - Collaborative cursors: supported by the framework, not enabled by default. Both single documents and KB bundles support Markdown export, generated on-the-fly from YDoc on the server: ``` `# Single document export curl http://localhost:8000/api/docs/{id}/export.md # KB ZIP bundle curl http://localhost:8000/api/kb/{id}/export.zip` ``` Custom nodes (Mermaid, PlantUML, Callout, etc.) have corresponding serialization rules in`backend/markdown.js`. When adding new custom nodes, update the server-side serializer accordingly. Use**Export Doco File**in a document, folder, or knowledge-base menu. The resulting`.doco.zip`contains the original Yjs state, hierarchy, document settings, standalone spreadsheets, and attachments. Importing always creates a copy with fresh resource and attachment IDs, so it can safely move between independent Doco deployments without colliding with existing data. Use the upload button beside the knowledge-base heading to import a whole knowledge base. To import a document or folder package, choose**Import Doco File**from the destination knowledge base or folder menu. This is a web browser that enables your coding agent, such as Claude Code, to visit websites on your behalf and assist you in identifying bugs or creating UI test cases. - ](https://github.com/songofhawk/doco/blob/HEAD/src/editor/README.md)[ ### Rememberizer MCP Server for Common Knowledge Access personal and team knowledge repositories, including documents and Slack discussions. Create and read feature flags, review experiments, generate flag types, search docs, and interact with GrowthBook's feature flagging and experimentation platform. Search Apple's Developer Documentation with smart search and wildcard support. Search, compare, and get docs for 210+ APIs ranked by CLI and agent relevance Query Rust crates from crates.io and docs.rs. Search for crates, get info, versions, dependencies, and documentation. Apple Documentation MCP Server - Search Apple docs, Swift Evolution, and sample code Optimize any site for AI search: get DeepRank methodology, optimization steps, and suggestions (llms.txt, JSON-LD, audit checklist) so your AI assistant can implement AI visibility in the repo. Search the Modellix knowledge base to quickly find relevant technical information, code examples, and API references. Retrieve implementation details and official guides to solve development queries efficiently. Access direct links to documentation for deeper context on specific features and tools. Team knowledge base for code snippets, API calls and docs. Agents search and file items over MCP; humans review what becomes canon. This MCP (Model Context Protocol) server provides integration with Wiki.JS for searching and listing pages from Agent Voice Response Wiki.JS instance.](/servers/skydeckai/rememberizer-mcp-test-ck)
No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.