quill-flowy
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., "@quill-flowy list pages in my main workspace"
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.
quill-flowy
A lean, MIT-licensed Model Context Protocol (MCP) server that lets an AI agent (Claude Code, Claude Desktop, …) read — and, in a separate module, write — a self-hosted AppFlowy instance.
AppFlowy stores a page's body as a Yjs CRDT, not plain text, so the pages are a silo
your agent can't see. quill-flowy authenticates to your instance, walks the workspace/page
tree, and decodes the CRDT document into Markdown — the same thing AppFlowy's own web
client does, using the same yjs library.
Companion to
anythingllm-mcp— same minimal Node +@modelcontextprotocol/sdkstack, same safety posture.
Tools
Read (Phase 1 — always on, strictly read-only):
Tool | What it does |
| Verify the account can log in and reach the instance |
| List workspaces (name, id, role, members) |
| The page/view tree of a workspace (titles, ids, document/grid/board type) |
| A document page's body as Markdown (the Yjs decoder — headings, lists, to-dos, code, links, page mentions) |
| Find pages by title, or by body text ( |
Write (Phase 2 — mutating, opt-in): create_page, append_to_page, rename_page,
move_page. These live in a separate module and are registered only when
QUILL_FLOWY_WRITE=1, so the default install exposes zero write surface to the agent.
All four are additive or reversible (none deletes content). append_to_page converts
Markdown to AppFlowy blocks (headings, lists, to-dos, code, quotes, formatting).
update_page(replace an existing body in place) is not supported: AppFlowy exposes no high-level endpoint for editing/deleting arbitrary existing blocks — it would require raw Yjs collab over the sync protocol. Useappend_to_pageto add content, or edit in the AppFlowy app.
Related MCP server: appflowy-mcp
Requirements
Node 18+ (developed on Node 24).
A self-hosted AppFlowy Cloud instance with a password-based account.
Install
git clone https://github.com/DezGDNY/quill-flowy
cd quill-flowy
npm installRegister it with your MCP client, passing config via an env block, e.g. Claude Code:
claude mcp add quill-flowy --scope user -- node /absolute/path/to/quill-flowy/index.jswith APPFLOWY_BASE_URL, APPFLOWY_EMAIL, and APPFLOWY_PASSWORD set in the environment
(see .env.example).
Configuration
Env var | Meaning |
| Your instance URL. Use your self-hosted domain, not |
| The account to log in as. |
| The account password (see secure handling below). |
|
|
Secure credential handling
Don't store a plaintext password in production. On Windows, keep it in a
DPAPI-encrypted file and use a small launcher that decrypts it into APPFLOWY_PASSWORD
in-process before exec'ing the server — the password never touches disk in plaintext,
your shell history, or your MCP config. (On macOS/Linux, use the OS keychain or a secret
manager the same way.) quill-flowy itself only ever reads APPFLOWY_PASSWORD from its
environment and uses it for a single login; it is never logged.
How it works
Auth:
POST /gotrue/token?grant_type=password→ JWT bearer (cached; re-login on expiry).Navigate:
GET /api/workspace…and…/folder?depth=Ngive the workspace and page tree directly — no decoding needed.Read a body:
GET /api/workspace/v1/{wid}/collab/{vid}?collab_type=0returns the Yjsdoc_state; quill-flowy loads it withyjsand walks the AppFlowy document schema (data → document → blocks / meta.children_map / meta.text_map) into Markdown, reading each text run's delta for inline formatting.
License
MIT © 2026 Dez
Available Tools
5 toolscheck_authCheck AppFlowy authA
Verify the configured account can log in to AppFlowy and reach it. Read-only.
Inputs: no named parameters.
get_pageGet a page body as MarkdownA
Return a document page's body rendered as Markdown. Accepts a page title or view id. Read-only.
Inputs: page (required), workspace (required).
list_pagesList pages in a workspaceA
Show the page/view tree of a workspace (titles, ids, and type: document/grid/board/…). Read-only.
Inputs: workspace (required).
list_workspacesList AppFlowy workspacesA
List all AppFlowy workspaces (name, id, role, member count). Read-only.
Inputs: no named parameters.
search_pagesSearch pages in a workspaceA
Find pages by title, or by body text when body=true (decodes each document). Returns matches with ids. Read-only.
Inputs: query (required), workspace (required), body.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: auth verification, workspace listing, page tree listing, page content retrieval, and page search. The only minor overlap is get_page and search_pages by title, but their outputs differ enough to avoid real confusion.
All tools follow the same snake_case verb_noun pattern: check_auth, list_workspaces, list_pages, get_page, search_pages. The naming is predictable and makes the toolset easy to navigate.
Five tools is a well-scoped size for a read-only AppFlowy exploration server. Each tool covers a distinct need without redundancy or unnecessary bulk.
The read-only workflow is well covered: authenticate, list workspaces, browse the page tree, retrieve page bodies, and search content. The main gap is that list_pages mentions grid/board view types, but get_page only handles document page bodies, leaving non-document views without a retrieval path.
Related MCP Connectors
Markdown workspace for AI agents: read, write, organize, and share markdown documents.
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
Pages, crawls and URL batches as clean Markdown and JSON for AI agents, with an Evidence Record.
Agent document workspace with wallet auth. Create, update and share markdown docs. By AutEng.ai
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables automatic upload of AI-generated rich text content to AppFlowy with Markdown syntax support, allowing seamless document creation and management through natural language instructions.13Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA self-hosted, token-scoped Model Context Protocol server for AppFlowy. It gives AI agents tools to read and edit your AppFlowy workspaces while bounding each client to exactly the pages you allow via per-token tree-shaped scopes.8MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to safely read, search, edit, and organize SiYuan notes, with git-like document timeline and notebook-level permissions.19 npm123MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI assistants with full read/write access to AppFlowy Cloud, enabling management of workspaces, pages, databases, trash, and favorites, plus conversion of Markdown into formatted AppFlowy document blocks.MIT