Skip to main content
Glama

Doco

📖 中文版

人間とAIエージェントが一緒に書くドキュメントスペース。 オープンソースのリッチテキスト コラボレーションエディタで、あなたのデータを自分の手に取り戻します。そしてAIエージェントにも 同じ配慮をします。ブロックレベルの安定アドレッシング、楽観的同時実行制御、29ツールの MCPサーバーにより、エージェントは慎重な人間の編集者のように安全にナレッジベースを読み書きできます。

  • ホステッド版: doco.page — ベータ期間中は無料

  • エージェントを接続: claude mcp add doco -- npx -y --package doco-agent-cli doco mcp

  • CLI: npm i -g doco-agent-cli && doco login

  • npm: doco-agent-cli · APIドキュメント: doco.page/api-docs

なぜエージェントはここで安全か

機能

意味

ブロックレベルの安定アドレッシング

すべての段落はblock_<ULID> idを持ちます。位置に依存せず、ドラッグや折りたたみをしても維持されます

楽観的同時実行制御

読み取りはsha256バージョンを返します。書き込みはIf-Matchを要求し、409のときはエージェントが再読み込み、マージ、再試行します。盲目的な上書きは不可能です

Markdownラウンドトリップ

?annotate=anchorsでエクスポートし、ドキュメント全体を書き戻してもブロックidは保持されます

人間とエージェントの共同編集

エージェントの書き込みは同じYjsドキュメントを通過するため、変更はブラウザでライブに表示されます

トランザクションと冪等性

バッチ操作は原子的にコミットされます。Idempotency-Keyによりリトライが副作用なしになります

Related MCP server: session-coord-mcp

機能

編集体験

  • リッチテキスト編集: 見出し、リスト、引用、タスクリスト、コードブロック(構文ハイライト)、表、画像、リンク、テキストスタイルなど

  • /スラッシュコマンド: /を入力するとファジー検索のコマンドパレットが開きます — 中国語ユーザー向けに拼音の省略形に対応

  • フローティングツールバー: テキスト選択時に自動表示され、すべての書式操作がカーソルから2センチ以内で完結

  • ブロックのドラッグ&ドロップ: 任意の段落の左端にホバーするとドラッグハンドルが表示され、コンテンツをブロックのように並べ替えられます

  • 折りたたみセクション: 編集中でないセクションを折りたためます。折りたたみ状態はセッションをまたいで保持されます

  • 見出し自動番号: ワンタッチで切り替え — H1~H4見出しが階層番号(1. 1.1 1.1.1)の維持して表示されます

  • キーボードショートカット: ⌥↑/↓ でブロック移動、⌘D でブロック複製、⌘⌥1/2/3/0 で見出しレベル切り替え

Text-to-Diagram 図の自動生成

MermaidまたはPlantUMLのソースコードをドキュメントに直接記述します。図はその場でレンダリングされます。ダブルクリックで編集、全画面表示、ピンチズームにも対応します — draw.ioのようなエクスポート取り込み置換サイクルはもう不要です。

  • Mermaid: フローチャート、シーケンス図、クラス図、ガントチャート、状態図など

  • PlantUML: シーケンス図、クラス図、ユースケース図、コンポーネント図など

スプレッドシート

ドキュメントに組み込まれたフル機能のスプレットシートエンジン:

  • 数式計算、セル書式

  • ウィンドウ枠の固定、並べ替えとフィルタ

  • セル結合 / 分割

  • CSVのインポート / エクスポート

内容ブロックとしてインラインで使うことも、単体の全画面スプレッドシートとして取り出すこともできます。

ナレッジベース

  • ナレッジベース → フォルダ(入れ子可)→ ドキュメント — 3階層構造

  • サイドバーでのドラッグ&ドロップによる並べ替え、名前変更、移動

  • フォルダ階層を保持したKB全体のZIPエクスポート。画像も同梱

  • ドキュメント・フォルダ・ナレッジベース全体を無劣化で移行できる専用.doco.zip形式

リアルタイムコラボレーション

Yjs CRDTアルゴリズムに基づいています:

  • 保存ボタンは不要です。変更は自動的に同期されます

  • オフラインファースト: ブラウザのIndexedDBがプライマリストレージ。サーバーはスナップショットを保持します。ネットワークなしでも編集でき、再接続時に自動的に調整されます。

  • シームレスなデバイス切り替え: ノートPCを閉じて、スマホを手に取り、そのまま書き続けられます

インポート / エクスポート

形式

インポート

エクスポート

Docoネイティブパッケージ

✅ ドキュメント / フォルダ / KB

✅ ドキュメント / フォルダ / KBを無劣化で取り扱い

Markdown

✅ ペースト / ファイルアップロード

✅ 単一ドキュメントおよびKBバンドル

Word (DOCX)

PDF

HTML

微信公式アカウント(WeChat)

✅ (テーマのプレビュー付き)

ドキュメント内画像

✅ (ペースト/ドラッグ&ドロップ)

✅ (ZIPに同梱)

API · MCP · CLI

3つのチャネル、1つの取り決め:

  • REST API: OpenAPI 3.1仕様、Bearer Token認証、ETagバージョン管理、カーソルページネーション、冪等キーを適用

  • MCPサーバー: doco mcpdoco-agent-cliに同梱) — 29個のツールとdoco://リソースを提供

  • doco CLI: login / whoami / docs / blocks / edit / mcp、グローバルな--jsonオプション、書き込みによりETag/If-Matchを内面化

ドキュメントをプログラム可能なアセットに変身させましょう。自分だけのバックアップをスクリプト化し、エージェントにナレッジベースを整理させ、公開ワークフローのドキュメントをブログへ送り込むことも。組込みのAPIドキュメントページをすぐに利用できます。

技術スタック

技術

フロントエンドフレームワーク

React 18 + Vite + TypeScript

CSS

Tailwind CSS v4

エディタ

Tiptap v3 (ProseMirror)

コラボレーション

Yjs (CRDT) + Hocuspocus

図表

Mermaid + PlantUML

バックエンド

Node.js + Express + Hocuspocus Server

データベース

better-sqlite3 (SQLite, WALモード)

UIコンポーネント

Radix UI, Lucide React, Tippy.js

クイックスタート

前提条件

  • Node.js 16以上 18以上

  • pnpm

インストールと実行

# 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

http://localhost:5173 を開いてください。バックエンドのWebSocketサービスに自動接続します。

Docker本番 (推奨)

完全なセルフホストパッケージには、Caddyフロントエンド、Node.jsコラボレーションwバックエンド、永続的SQLiteストレージ、ヘルスチェック、同一オリジンWebSocketプロキシが含まれます。公開イメージはlinux/amd64linux/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

デフォルトでは http://localhost:8080 にブラウザでアクセスします。.env.dockerALLOWED_ORIGINSCOOKIE_SECURE、Google OAuth、SMTPの値を環境に合わせて設定します。これらの値はコンテナの起動時に注入され、イメージに焼き込まれることはありません。アプリケーションデータは doco-data 名前付きボリュームに保存されます。

Docker Hub: songofhawkg/doco-frontend · songofhawkg/doco-backend

同じイメージをソースからビルドするには:

docker compose --env-file .env.docker up -d --build

Dockerデプロイガイド で、すべての構成オプション、HTTPS、ログ、バックアップ、復元、アップグレードを確認できます。データベースと添付ファイルを削除する意図がない限り、docker compose down -v を実行しないでください。

手動ビルドとデプロイ

# 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

スタンドアロンのフロントエンドコンポーネント

エディタコアは doco-text-editor としても公開しています。これはDocoの完全な編集体験と組み込みスタイルを含みますが、Docoの認証・REST API・コラボレーションサービス・IndexedDBには一切依存しません。ホストアプリケーションが、コンテンツをメモリ、ブラウザストレージ、自分で管理するバックエンド、ClickUpなどの外部システムのどこに置くかを決定します。

npm install doco-text-editor
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')

このパッケージには、見出し、インライン書式、引用、番号リスト/番号なしリスト/タスクリスト、コードブロック、画像、テーブル、コールアウト、Mermaid、オプションのPlantUML描画、組み込みスプレッドシートが含まれます。完全なAPIと統合の注意点は src/editor/README.md を参照してください。

完全なDocoエディタコンポーネントの使用

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)
  • ブラウザのIndexedDBがプライマリストレージであり、サーバーのスナップショットは補助です。サーバーのスナップショットが失われた場合は、ブラウザでドキュメントを開くだけで再構築されます。

  • オフライン編集は問題なく機能します。ネットワークが戻ると変更が自動的に同期されます。

  • コラボレー ション用カーソル: フレームワークでサポートされていますが、デフォルトでは有効になっていません。

Markdownエクスポート

単一ドキュメントとKBバンドルの両方でMarkdownエクスポートをサポートしています。サーバー上でYDocからリアルタイムに生成されます:

# Single document export
curl http://localhost:8000/api/docs/{id}/export.md

# KB ZIP bundle
curl http://localhost:8000/api/kb/{id}/export.zip

カスタムノード(Mermaid、PlantUML、Calloutなど)は、backend/markdown.js にそれぞれシリアライズルールがあります。新しいカスタムノードを追加するときは、サーバー側のシリアライザも更新してください。

ロスのないDoco転送

ドキュメント、フォルダー、またはナレッジベースのメニューで「Docoファイルをエクスポート」を使います。生成される.doco.zipには、元のYjs状態、階層、ドキュメント設定、スタンドアロンスプレッドシート、添付ファイルが含まれます。インポートすると常に新しいリソースIDと添付IDでコピーが作成されるため、独立したDocoインストール間で安全に移動でき、既存データに衝突しません。

ナレッジベースド庁の見出しの横にあるアップロードボタンを使用して、ナレッジベース全体をインポートします。ドキュメントまたはフォルダのパッケージをインポートするには、転送先のナレッジベースまたはフォルダのメニューから「Docoファイルをインポート」を選択します。

ライセンス

MIT

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server that gives AI coding agents on-demand access to private project docs via BM25 ranked search. One setup for Claude Code, Cursor, Codex, Gemini CLI, and more. Docs stay private, never in public repos.
    15
    15
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Persistent docs and memory for AI agents. Writespace is a collaborative markdown editor with a built-in MCP server — your model reads, writes, organizes, and searches a shared workspace while humans edit the same docs live. Drop the ranked full-text search straight in as RAG retrieval.
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server for collaborative markdown editing, allowing agents to write documents and humans to comment, with comments fed back as agent input.
    300,650
    MIT

View all related MCP servers

Related MCP Connectors

  • MCP-native collaborative markdown editor with real-time AI document editing

  • Persistent docs and memory for AI agents — read, write, organize & search a shared workspace.

  • Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/songofhawk/doco'

If you have feedback or need assistance with the MCP directory API, please join our Discord server