open source · Go + TypeScript · MCP-native

A Markdown workspace for people and agents.

Duffel stores your notes as ordinary Markdown files, serves them through a small web UI, indexes them for fast search, and exposes an MCP server — so LLM agents can search, read, write, and journal against the same notes you do.

localhost:4386
Duffel note view showing a Markdown note alongside related recommended content

// what it does

Plain files. Real search. Shared with your agents.

Files are the source of truth

Notes are ordinary Markdown on disk. Inspect them, grep them, version them with git — no database lock-in, no proprietary format.

A browser UI for your notes

Read, edit, archive, and search Markdown from a fast, minimal web interface. URL paths map directly to files and folders under the data root.

An MCP endpoint for agents

Expose the same notes to LLM tools over streamable HTTP. Agents search, read, write, and append journal entries — durable project memory, no glue scripts.

Search-first by design

qmd-backed indexing powers fast workspace search and related-content recommendations, so the right note surfaces before you read a whole folder.

Journals that record the work

Append-only worklogs capture concise change history. Agents add one entry per logical change so the project remembers what happened and why.

Runs anywhere, secure by default

A small Go + TypeScript app that runs on a laptop, home server, or private network. Auth is on by default with canonicalized paths and same-origin protections.

// for agents

Durable memory over MCP

Duffel exposes a streamable HTTP MCP endpoint at /mcp. Point a coding agent at it and the same notes you browse become project memory it can retrieve, extend, and journal against — search-first, with small result limits and targeted reads.

duffel_search find notes across the workspace
duffel_read read a single file
duffel_write create or update Markdown
duffel_journal_append add a worklog entry
mcp client config streamable-http
{
  "mcpServers": {
    "duffel": {
      "type": "streamable-http",
      "url": "http://localhost:4386/mcp",
      "headers": {
        "Authorization": "Bearer ${DUFFEL_MCP_TOKEN}"
      }
    }
  }
}

Started with DUFFEL_AUTH_ENABLED=false? Omit the headers block.

// a look inside

A calm UI, built around your files

01

Notes with related content

Every note surfaces the most relevant neighbours, ranked by qmd relevance score.

localhost:4386 / projects/agent-memory.md
Duffel note view showing a Markdown note with related recommended content scored by relevance
02

MCP connector

Mint bearer tokens and copy ready-made client config for Claude Code and other agents.

localhost:4386 / MCP Connector
Duffel MCP connector page with bearer token management and client configuration snippets
03

Journal history

Timestamped, append-only worklog — durable history of every meaningful change.

localhost:4386 / journal/worklog.md
Duffel journal view with timestamped worklog entries and an append box

// get running

Up in a couple of minutes

Needs Go 1.26+, Node.js with pnpm, make, and curl. The command below runs a local demo with auth disabled.

terminal
# clone and install
git clone https://github.com/jibs/duffel.git
cd duffel
make setup

# run a local demo (no auth)
DUFFEL_AUTH_ENABLED=false make dev

# open http://localhost:4386

Private-network deploy

Keep auth enabled, set DUFFEL_SETUP_TOKEN before first owner setup, then follow the systemd deploy guide in the repo.

Wire up an agent

Open #/_mcp in the UI, mint a bearer token, and copy the generated client config for your tool.

Notes you own. Memory your agents share.

Duffel is open source and built to run on hardware you control — a laptop, a home server, or a private network.