Skip to content

Releases: freema/vellum

v1.11.0

Choose a tag to compare

@github-actions github-actions released this 11 Jul 15:33

Added

  • Resource reads carry the content hash, modtime and size. Reading a
    note through its resource URI (vellum://note/{path}) now returns
    hash, modTime and size in ResourceContents._meta, mirroring what
    the read_note tool already reports. A note attached as context —
    through a resource picker or an @-mention — can therefore seed the
    expected_hash on a later write, so the resource path gets the same
    conflict-safe footing as the tool path instead of being a snapshot with
    weaker freshness semantics. Since 1.9.0 resource reads returned only the
    markdown text, with no way to tie an attached note back to a safe write.

v1.10.0

Choose a tag to compare

@github-actions github-actions released this 08 Jul 12:43

The web vault stays signed in.

Added

  • The web UI now keeps you signed in for up to 30 days. It renews its
    1-hour access token silently in the background from the rotating refresh
    token and stores the session in localStorage, so a page reload, a closed
    tab or a browser restart no longer drops you back at the connect screen.
    Previously the web vault held only the 1-hour access token in
    sessionStorage and logged you out on the hour or when the tab closed —
    the 30-day refresh token shipped in 1.9.1 was never used by the web client.

Changed

  • The web client refreshes without re-sending the client secret. A valid,
    rotating refresh token is now sufficient for the refresh_token grant, so
    the embedded SPA — which keeps no secret after the initial login — renews on
    the refresh token alone, exactly as the public MCP clients already did.
    Minting the first token pair still requires the client secret. Existing web
    sessions re-authenticate once after upgrading, since the session moved from
    sessionStorage to localStorage.

v1.9.1

Choose a tag to compare

@github-actions github-actions released this 07 Jul 12:22

Changed

  • Refresh tokens now last 30 days (was 24 hours). A connected client
    re-authorizes far less often — only after 30 days of inactivity, since
    every refresh rotates the token and resets the clock. Access tokens stay
    short-lived at 1 hour.

v1.9.0

Choose a tag to compare

@freema freema released this 06 Jul 18:54

MCP resources & subscriptions, tool annotations, and a workspace that
remembers its view.

Added

  • Notes are MCP resources. Every note is listed as a resource
    (vellum://note/{path}, text/markdown) with a URI template for
    arbitrary paths, so MCP clients can attach notes as context without a
    tool call. Clients can subscribe to a note and receive
    notifications/resources/updated whenever it changes — through any door
    (MCP tools or the web editor). The resource list re-announces only on
    create/delete/title change, not on every keystroke autosave.
  • Tool annotations and titles. All 21 tools now carry
    readOnlyHint / destructiveHint / idempotentHint /
    openWorldHint: false plus a human-readable title, so clients can
    auto-allow reads and warn only on genuinely destructive calls
    (delete_note, write_note overwrite, patch_note).
  • Server instructions. The MCP handshake now includes a short guide to
    the vault conventions (inbox flow, expected_hash concurrency,
    wikilinks, task statuses, resource URIs) — agents no longer have to
    discover them by trial and error.
  • Filters live in the URL. The selected folder, active tags and the
    type/status filters persist as query parameters
    (?dir=…&tags=a,b&type=task&status=done): a refresh keeps the view and
    a filtered view can be bookmarked or shared. Opening notes keeps the
    filters; Back still steps between notes, not filter clicks.
  • UI preferences survive a refresh. Theme (initialised from the OS
    prefers-color-scheme, applied before first paint — no white flash),
    the editor view mode (edit/split/preview, now also stable across note
    switches), the Projects group expansion and the tag-list "Show all"
    state are stored in localStorage.

Fixed

  • The last second of typing no longer dies with the tab. Autosave is
    debounced at 1 s; a refresh or tab close inside that window used to drop
    the keystrokes. The dirty draft is now flushed with a keepalive
    request when the page hides.
  • The MCP server no longer advertises the logging capability it never
    used.

Docs

  • New docs/mcp.md — the full MCP reference (transports,
    handshake, every tool with annotations, resources, subscriptions,
    client setup) — and docs/workspace.md — the web
    UI reference (URL scheme, storage keys, autosave/conflict/flush,
    self-sync). The e2e checklist gained persistence & resources
    scenarios.

v1.0.1

Choose a tag to compare

@freema freema released this 04 Jul 01:02

Fix: the key icon on the connect screen rendered as a missing-glyph box on macOS — replaced with an inline SVG. README: badges, author, discovery improvements.

v1.0.0 — a calm window into a folder of markdown

Choose a tag to compare

@freema freema released this 03 Jul 22:56

First stable release.

vellum is a lightweight, self-hosted MCP server over a folder of markdown files. One static Go binary with an embedded web UI, one ~24 MB Docker image, ~5 MB idle RAM.

Highlights

  • Vault layer: CRUD over .md files with path-traversal/symlink protection, atomic writes, sha256 optimistic concurrency (ETag/If-Match → 409 on the REST side)
  • Structure: inbox/projects/archive conventions, inbox fallback for unfiled notes
  • Metadata index: tags + backlinks in RAM (1200 notes ≈ 50 ms), instant task filters
  • Search: zero-dependency parallel scan with tag/dir narrowing (1200 notes ≈ 13 ms)
  • MCP: Streamable HTTP at /mcp (official Go SDK), 15 tools + 6 optional curator tools, stdio mode
  • OAuth 2.1: single client secret, PKCE, consent screen — vellum is its own issuer, no external identity provider
  • Web UI: three-panel workspace (paper/midnight ink design), ⌘K palette, conflict dialog, self-hosted fonts
  • Ops: distroless read-only container, GHCR multi-arch (amd64+arm64), security docs

Quick start

curl -fsSLO https://raw.githubusercontent.com/freema/vellum/main/docker-compose.yml
echo "AUTH_ENABLED=true
VELLUM_CLIENT_SECRET=$(openssl rand -hex 32)" > .env
docker compose up -d

Connect Claude: claude mcp add --transport http vellum https://your-host/mcp

Image: ghcr.io/freema/vellum:1.0.0