Persistent memory and context for your agent, on a board you can see. Capped, so it stays small.
STICKY MCP Server (io.github.1picassoai/sticky)
This MCP server provides persistent memory and context for an agent on a visible board. It keeps only a capped set of notes, so the stored context remains small. The board supports an agent writing to it, with an automatic archive when the active note limit is reached.
๐ ๏ธ Key Features
Persistent memory and context for an agent
Board that the agent can write to and that users can see
Capped storage to keep content small
Holds ten active notes; the oldest note is archived when a new one arrives
๐ Use Cases
Maintaining agent context across sessions
Avoiding growth of manual, stale context files (e.g., CLAUDE.md accumulating rules and costing tokens)
Keeping the active knowledge set limited to reduce request overhead
โก Developer Benefits
Automatic note archiving removes the need to prune or manage notes
Prevents unchecked expansion of stored guidance between sessions
โ ๏ธ Limitations
Only ten active notes are retained; additional notes are archived
A board your coding agent can write to โ and you can see.
Your agent forgets between sessions. The usual fix is a CLAUDE.md that grows until it's a
thousand lines of stale rules nobody deletes, quietly costing you tokens on every request.
STICKY holds ten active notes. When the eleventh arrives, the oldest one tumbles to the
archive on its own. Nothing to prune, nothing to garden.
bash
npx sticky-mcp
That's it. The board opens in your browser. No account, no cloud, no config.
Wire it to your agent
bash
claude mcp add sticky -- npx sticky-mcp-server
Cursor, Cline, Windsurf and anything else that speaks MCP work the same way โ point them at
npx sticky-mcp-server.
sticky-mcp-server takes no flags on purpose. Some CLIs โ Claude Code among them โ read
-y and --mcp as their own options and never pass them through, so a command with
nothing after it is the only one that works everywhere.
Your agent gets two tools:
post_sticky โ pin a decision, a constraint, or where the work paused
read_active_stickies โ read the board at the start of a session
Drag a note between columns. Drop it on Pinned and it becomes a permanent rule. Drop it on
Archive and it stops reaching the agent immediately. Double-click to edit, click the cross
to bin a bad assumption.
The board updates live as your agent posts โ you watch it think.
What's bounded, and what isn't
Being precise, because a promise that isn't quite true is worse than no promise:
Active is capped at 10 (configurable 5โ20). The oldest unpinned note tumbles out.
Pinned is capped at 15. Rules never tumble โ a rule vanishing silently would be worse
than the bloat โ so instead the board refuses the sixteenth and asks you to retire one.
Archive is unbounded and costs nothing, because it never reaches the model.
So the agent's context stays bounded at roughly 25 notes, permanently, no matter how long
you work.
Your data
The board is a SQLite file at ~/.sticky/store.db. The web server binds to 127.0.0.1 and
nothing else. There is no telemetry, no analytics, and no network code in this package beyond
the local server itself.
Options
code
npx sticky-mcp open the board
npx sticky-mcp --mcp run as an MCP server (agents launch this)
--cap <n> active notes before the oldest tumbles (default 10)
--port <n> board port (default 7317)
--db <path> where the board lives (default ~/.sticky/store.db)
--no-open start without opening a browser
Want it floating beside your editor? chrome --app=http://localhost:7317
Requires
Node 22.5 or newer โ STICKY uses Node's built-in SQLite, so there's nothing to compile and
no native modules to install.