Skip to content

v0.6: MCP foundation - agent-first docs, memory, and tasks#6

Merged
anbturki merged 10 commits into
mainfrom
feat/mcp-foundation
Jul 3, 2026
Merged

v0.6: MCP foundation - agent-first docs, memory, and tasks#6
anbturki merged 10 commits into
mainfrom
feat/mcp-foundation

Conversation

@anbturki

@anbturki anbturki commented Jul 3, 2026

Copy link
Copy Markdown
Owner

DocsReader becomes the human window into an agent-managed markdown corpus. A bundled stdio MCP server (docsreader-mcp) lets AI agents write docs, memory, and tasks as plain markdown; the app reads the same files live.

  • New docsreader-mcp binary (MCP spec 2025-11-25) in a tauri-free core split: doc/memory/task tools, every doc as a resource, self-describing onboarding resource, start-task / record-decision prompts, recovery-bearing tool errors
  • Workspace resolution: explicit slug, CLAUDE_PROJECT_DIR + walk-up auto-detect, default ~/notes; elicitation picker for unknown slugs on interactive clients
  • Settings -> AI agents: detects Claude Code, Cursor, Windsurf, VS Code, Codex and registers the server with non-destructive config merges
  • Managed workspaces (.docsreader.yaml) replace the .docs.yaml curated manifests, with auto-migration, convert prompt, homepage auto-open, and silent live reload while agents write
  • Quick edit (raw markdown) on the open doc; backlinks pane grouped by folder
  • Fix: mermaid/svgbob fences never rendered in production (sanitize/shiki stripped the flag); now regression-tested
  • Hardening: webview file writes scoped to markdown extensions per command; svgbob SVG sanitized with DOMPurify
  • Distribution: sidecar staged, signed, and verified on all three platforms; new PR CI workflow; denser sidebar; README/welcome tour reframed with per-client setup commands
  • Tests: 94 Rust (unit + MCP stdio integration) and 37 frontend (vitest, new harness)

anbturki added 10 commits July 3, 2026 12:49
Move the scanner, git layer, workspace resolution, write layer, and error
model into docsreader-core so the GUI and the MCP server share one
implementation without the MCP binary compiling tauri. Tauri commands live
in tauri_api; agents/ adds the MCP client registry (Claude Code, Cursor,
Windsurf, VS Code, Codex) with non-destructive JSON/TOML config merges.
MCP spec 2025-11-25 server over stdio: doc/memory/task tools with
recovery-bearing errors, every doc exposed as a resource, a self-describing
onboarding resource, start-task and record-decision prompts, workspace
auto-detection via CLAUDE_PROJECT_DIR with walk-up, and an elicitation
picker for unknown slugs. The sidecar overlay config stages the binary for
bundle.externalBin and owns createUpdaterArtifacts so plain local builds
never need the staged binary or the signing key.
Settings gains an AI agents section that detects installed MCP clients and
registers the bundled server per client. Long config paths truncate with
the full path on hover; the dialog panes carry min-w-0 so intrinsic-width
content cannot push past the dialog bounds.
…tour

Managed workspaces replace the .docs.yaml curated-manifest system: a
.docsreader.yaml marker carries slug/name/homepage, plain folders get a
convert prompt, agent writes reload open docs silently, and existing
manifests migrate on first scan. Adds quick raw-markdown editing on the
open doc, a backlinks pane fed by scan-time link extraction, and a
rewritten welcome tour with an agent setup page. The webview write
permission is scoped per command to markdown files only; reads keep their
previous scope (the fs plugin unions global and command scopes, so the
global scope block is replaced by per-command scopes).
Diagram fences never rendered: the sanitize allowlist matched camelCase
hast properties while the plugins set kebab-case, and the shiki rehype
handler replaces pre-code nodes wholesale, dropping the detection flag
either way. Diagram fences now emit pre-div carriers that shiki skips by
structure, with the flag names defined once in diagramFence.ts. Svgbob
output additionally runs through DOMPurify before injection, and empty
fences render nothing. Regression tests cover the production schema and
the react-markdown prop contract.
Sidebar rows drop to 13px type with tighter padding and indent. The row
class recipe, selection state, and the cmd-click/middle-click open
handlers move to sidebarRow.ts, deduplicating four copies across the
tree and lens lists; FileTree splits into FileEntry/DirEntry.
Vitest with testing-library and jsdom, wired through vite.config with a
setup file stubbing ResizeObserver and scrollIntoView. Also carries the
dompurify runtime dependency and the build:sidecar script hook.
New ci.yml runs typecheck, frontend tests, build, rustfmt, clippy, the
full cargo test suite, and a guard asserting the MCP binary stays free of
tauri in its dependency graph. The release pipeline stages and verifies
the docsreader-mcp sidecar on all three platforms; cut-release bumps the
mcp crate version alongside the app; the tap update gains the server
binary.
README leads with the MCP server: how the store works (status-as-folder
docs, memory, tasks), per-client registration commands validated against
each vendor's docs, and the AGENTS template for repos. Screenshots
recaptured against the new UI. Roadmap gains the v0.6 unreleased section
and records the curated-manifest removal; markdownlint config added.
CI runs a newer clippy that flags comparator-based sorts with a plain key
projection; sort_by_key is equivalent and simpler at both sites.
@anbturki anbturki merged commit 36821cb into main Jul 3, 2026
3 checks passed
@anbturki anbturki deleted the feat/mcp-foundation branch July 3, 2026 07:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant