FlowState MCP server
Commit Nov 11, 2026Gives AI apps a shared, local project memory of todos, changes, decisions and lessons that syncs across chats and clients.
Also known as dialectforge/FlowState, flowstate
- Stars
- 22
- Tools
- 16
- Downloads, 30 days
- —
- Latest version
- 1.0.1
- Last commit
- Nov 11, 2026
- License
- MIT
What is FlowState MCP?
FlowState gives AI apps a shared, local project memory of todos, changes, decisions and lessons that syncs across chats and clients. It exposes 16 tools, such as start_here, log_work, search.
Summary generated from the project's README
About FlowState MCP server
Providing a shared project memory for AI applications is what FlowState Hosted does for developers working across multiple platforms. It allows tools like Claude, ChatGPT, Cursor, and VS Code to access a synchronized record of todos, decisions, changes, and lessons learned. This ensures that when you switch from a desktop editor to a mobile interface, the AI understands exactly where the previous session ended.
Users can connect by adding a single URL to their preferred client and signing in, avoiding the need for local Python installations or complex tunneling. The hosted version provides encrypted storage and backups, with a subscription model following a free beta period. It is designed to prevent context loss by allowing different agents to see the same project brief, claim specific tasks using manage_todos, and flag conflicting decisions for human review.
What you can do with it
- 1Synchronize context across different AI clientsA developer can switch from Cursor on a desktop to Claude on a phone while maintaining the same project history.
- 2Prevent duplicate work between agentsYou can instruct an AI to claim a specific task so other agents know it is currently being handled.
- 3Resolve conflicting AI decisionsWhen two different AI models suggest contradictory paths, the system flags the disagreement for you to settle manually.
Written from the project's README. Every use case is checked against a quote from it.
How to install FlowState MCP
Formats verified 10 Nov 2026Install FlowState MCP in Claude Code
$ claude mcp add --transport http flowstate https://hosted.flowstatemcp.com/mcpInstall FlowState MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"flowstate": {
"url": "https://hosted.flowstatemcp.com/mcp"
}
}
}Install FlowState MCP in VS Code
.vscode/mcp.json
{
"servers": {
"flowstate": {
"type": "http",
"url": "https://hosted.flowstatemcp.com/mcp"
}
}
}Install FlowState MCP in Codex
~/.codex/config.toml
[mcp_servers.flowstate] url = "https://hosted.flowstatemcp.com/mcp"
Install FlowState MCP in Gemini CLI
~/.gemini/settings.json
{
"mcpServers": {
"flowstate": {
"httpUrl": "https://hosted.flowstatemcp.com/mcp"
}
}
}FlowState MCP tools 16
Detected from the READMEstart_herelog_worksearchmanage_todosmanage_problemsmanage_reviewmanage_handoffsmanage_rulesmanage_linksmanage_historymanage_projectsmanage_memory
| start_here | — | |
| log_work | — | |
| search | — | |
| manage_todos | — | |
| manage_problems | — | |
| manage_review | — | |
| manage_handoffs | — | |
| manage_rules | — | |
| manage_links | — | |
| manage_history | — | |
| manage_projects | — | |
| manage_memory | — |
Show all 16 toolsShow fewer tools
show_review_cardshow_conflict_cardresolve_review_cardresolve_conflict_card
| show_review_card | — | |
| show_conflict_card | — | |
| resolve_review_card | — | |
| resolve_conflict_card | — |
Automated checks
Ran Nov 14, 2026Full report →Not verified yet. A server needs a score of 80, no serious finding, and enough data for us to check. How checks work
- Source repository linked and reachabledialectforge/flowstate is public and reachablegithub.com/dialectforge/flowstate ↗Pass
- Package names this repository as its sourceNot checked
- Build provenance (Sigstore attestation)Not checked
- Open source license (OSI)MITspdx.org/licenses/MIT.html ↗Pass
- Commit or release in the last yearLast commit or release 2026-11-11github.com/dialectforge/flowstate ↗Pass
- OpenSSF ScorecardNot checked
- Package name not close to a popular packageNot checked
- No critical advisory in the package or its dependenciesNot checked
- No hidden instructions to the model16 tool descriptions and the README read; no override phrases, credential paths or hidden charactersPass
- Destructive tools are labelledNo tool named like delete, drop or execPass
- Remote endpoint answers the MCP handshakeinitialize answered with protocol 2025-06-18 in 1000 msPass
README
View on GitHubFlowState
A shared project memory for your AI apps. Free, open source, and stored on your own machine.
Don't want to run a server? Try FlowState Hosted. The same shared memory, hosted for you at flowstatemcp.com/hosted. Add one URL (
https://hosted.flowstatemcp.com/mcp) to Claude, ChatGPT, Cursor or VS Code and sign in. No install, no Python, no tunnel. Your data is encrypted at rest and backed up, and you can export or erase it any time. Beta: 6 months free, then $6/mo for beta members ($12/mo regular). No card needed to start. 10 beta spots.Prefer to keep everything on your own machine? Keep reading: local FlowState is free and MIT forever.
FlowState is a local MCP server. It gives every AI app you use the same memory of your projects: todos, changes, decisions, problems and lessons learned. Your AI reads a short brief when it starts work on a project and writes down what happens as it goes. The next chat (or the next app) picks up where the last one stopped.
Everything lives in one SQLite file on your computer. Your memory is not sent anywhere unless you
turn on an optional feature that does so (an off-site backup to your own private GitHub repo,
remote access through your own Cloudflare Tunnel, or the optional relay). FlowState itself makes
one network call: once a day it asks GitHub whether a newer release is out. It sends nothing
about you or your projects, and flowstate update check off turns it off (see "Upgrading").
If FlowState saves you some re-explaining, a star on GitHub helps others find it.
Many AIs, one memory, at the same time
Claude, ChatGPT, Cursor and Grok can all use FlowState at once, on your computer, across your network, or from your phone (through the optional relay or your own tunnel). When one AI logs a decision or a change, the others see it the next time they check. Hard rules and handoff notes reach every AI, and every change records which AI made it, so you always know who did what. Work across projects is linked too, so a change to something shared shows up in every project that uses it.
Several agents at once
When two agents start on the same project at the same time, both can see the same "next" todo
and quietly do the same work. So an agent claims a todo before it starts
(manage_todos(action="claim", todo_id=4), 15 minutes by default, up to 120) and releases it, or
hands it off with a note, when it stops. Other agents see the claim in their brief
(#4 Fix login (claimed by cursor on mac-mini, expires in 9m)), next skips it and lists it
at the end, and a second claim is refused with the holder's name. Nothing is hidden or locked:
a claim simply runs out if the agent goes away, and it is released when that app's session
ends (quit, ended or idle; the same app reconnecting may take its claim back). Anyone (you included) can still update or
finish a claimed todo; they just get a warning, and manage_history(action="who") shows it.
A decision that reads like a current one (and doesn't say it replaces it) is still saved, but
flagged as a possible conflict (D31 vs D12 in the brief) for the agent and then you to settle
in the review queue; FlowState matches words (and meaning, if the local model is installed), it doesn't judge.
While such a pair is open, the brief's "Recent decisions" keeps the newer one, tagged
(unsettled: may conflict with #12), and leaves the older one's text out, so an AI skimming
the list doesn't follow it as settled. In its place (or on the newer line, if the older one is
too old for the list) is a short pointer, #12 in dispute with #31, text left out: search(query="D12"), which shows the full text in one step. Once you keep both, dismiss it, or
one replaces the other, the brief looks as before.
When two entries clearly disagree, FlowState also queues a disagreement card: claim A and claim B,
who wrote each, and up to two short evidence snippets. You keep the older, the newer, or both, or
dismiss the card. The one you don't keep is marked superseded, not deleted. An agent flags a pair
with log_work (conflicts_with, topic, evidence) or manage_links(action="flag_conflict").
The review page shows the card (side by side on a wide screen), and the tool reply includes the
same card as plain text plus the review link. Chat apps that support MCP Apps can show the card
in the chat (apps on your card list: Claude Desktop to start with; claude.ai or another app that signs in through your tunnel or the relay once you add its sign-in's name with flowstate approvals cards add --sign-in); each button
press carries a one-use code only the card gets, so the AI can't press them itself. Everything else
that waits for your OK (session summaries, suggestions, imports, clean-up ideas) gets its own
in-chat review card in those apps too (see "Where to see what's waiting for you").
Each window of an app gets its own session, and the brief opens with one line about what the
others did meanwhile (Since your last visit (Oct 19): Claude Desktop and Grok saved 3 decisions, 5 changes, 2 todos.), and nothing when nothing changed.
When two decisions clash
FlowState doesn't decide which of two decisions is right. It notices when they might clash, shows it to every AI, and leaves the choice to you.
How a clash gets flagged:
- On its own. When an AI logs a decision that reads like a current one (similar words, or
similar meaning if the optional local model is installed) and doesn't say it replaces it, the
decision is still saved and the pair is flagged as a possible conflict, for example
D31 vs D12. This is matching, not judgement, so some flags turn out to be harmless. - By an AI on purpose. An AI that sees two entries disagree can flag them with a short
topic and up to two evidence snippets (
log_workwithconflicts_with, ormanage_links(action="flag_conflict")). That makes a disagreement card: claim A and claim B side by side, who wrote each, and the evidence.
Where it shows:
- The AI's reply. The
log_workanswer says "Possible conflict with D12 ...", so the AI you are working with can mention it right away. A flagged disagreement comes back with the card as plain text and the review link. - The brief. Every AI that opens the project sees
Possible conflicts: D31 vs D12. While a pair is open, the newer decision is tagged as unsettled and the older one's text is left out of "Recent decisions", so no AI follows either one as settled. - The review queue. Each flag waits for you there: on the review page on your computer, in
flowstate reviewin your terminal, and in an AI'smanage_reviewlist. - Your phone. With the relay set up and phone links on, your phone review list shows it too.
- In-chat tap cards. In apps on your card list that draw MCP Apps cards (Claude Desktop to start with), the AI can show the card in the chat and you tap your choice.
Who settles it:
- You pick the winner. For a possible conflict you say whether the two really clash or fit together. For a disagreement card you keep the older one, the newer one, or both, or dismiss the card. The one you don't keep is marked superseded, not deleted.
- An AI can't pick it for you. The buttons on an in-chat card carry a one-use code that
only the card gets, so the AI can't press them. An AI may pass your choice on only when you
said it in that chat, quoting your words, and the app that made a card can't settle it by
quoting the card's own text. Through the relay an AI can't settle anything in the chat
unless you turn that on (
flowstate relay chat-approvals on). The quoting rule is checked by wording, not by cryptography (see "Honest limits"). - What an AI can do: say that its own new decision replaces an older one
(
log_work(..., replaces=12)or a "supersedes" link). That closes the flag, and the brief and the edit history show it. If that is later undone or the link is removed, FlowState asks you whether to reopen the conflicts it had closed.
Who, which model, which machine
Every change FlowState saves (records, edits, review decisions, links, handoffs, hard rules,
todo claims) keeps who made it. You see it in "Who did what" on the review page, on the
disagreement card, and through manage_history(action="who").
- App: the name the app reports about itself, for example "Cursor". When the app signed
in with a per-app key, a remote token or an approved sign-in through your tunnel or the
relay, the sign-in's name is shown beside it if it differs:
Grok Bot (via work-key). The app chooses the first name; it can't choose the second. A desktop app that starts FlowState itself, or one on the shared LAN token, has no sign-in of its own, so its name is only what it says. - Model: the AI model, only when the app reports it (the
modelargument, theX-FlowState-Modelheader, orFLOWSTATE_MODELfor a desktop app). FlowState never guesses, so this is often blank. - Machine: where the change came from. On your own computer that is
FLOWSTATE_WORKSPACEor the computer's name (or what the app sends); a per-app key can carry its own workspace; over the network it reads likelan (signed in as ...),relay (signed in as ...)ortunnel (signed in as ...). - How it was identified: per-app key, remote token, OAuth sign-in, shared token or self-reported, so you can tell which names the app chose itself.
This is there so you can find a change and undo it. Most of it is what the app says about itself; only the sign-in's name is something the app can't pick.
Why I built it
I built FlowState v1 in January 2026 as a gift to the vibe coder community, back when context was a serious bottleneck and every new AI chat started from scratch. This week I updated it, because the bottleneck moved. Now most of us work across several AI platforms at once, and keeping context between them is the new problem. FlowState stays free and local.
John Martin, DialectForge
FlowState MCP is not related to other products that share the FlowState name, such as a Markdown prompt framework, an academic research paper, or an image tool.
Quick start
Add the local server
The PyPI package is flowstatemcp. pip install flowstate is a different project, so don't
use that name. You need uv.
Cursor. Cursor asks before it saves the server (install links).
If this page will not open a cursor:// link, use the same install on the web:
cursor.com/link/mcp/install.
VS Code. VS Code opens the server so you can review it before you install (install URL).
Claude Code (MCP):
claude mcp add --scope user --transport stdio flowstate -- uvx flowstatemcp
Or start the server yourself with uvx flowstatemcp. pipx run flowstatemcp does the same.
After pip install flowstatemcp, both flowstatemcp and flowstate start it.
Want it on all your devices without running anything? Try FlowState Hosted.
Git clone (backups, the skill, and written app configs)
The clone is the fallback. Use it when you want setup_flowstate.py to create the venv, write
each app's config, schedule backups, and install the skill. Paste this into an AI app that can
run commands on your computer (Claude Code, Cursor, Windsurf, Codex CLI, Grok Build, ...):
Set up FlowState for me from https://github.com/dialectforge/FlowState by following its AGENTS.md.
The AI reads AGENTS.md, asks you which apps to connect and whether you want
nightly backups and the FlowState skill, shows you a dry run, then runs setup_flowstate.py.
When it's done, fully quit and reopen the apps it connected.
Claude Desktop's chat can't run commands by itself. Set it up from one of the apps above ("...and connect it to Claude Desktop"), or run the script yourself (below).
What setup_flowstate.py does
It uses the Python standard library only, and it's safe to run again (it reports unchanged
for anything already set up). In order, it:
- checks for Python 3.11 or newer;
- creates
.venvin the repo folder and runspip install -e mcp-serverinto it (skip with--skip-install); - creates the database if there isn't one, or keeps your existing one and adds only the new FlowState tables and columns (numbered migrations, with an integrity-checked backup first when the database already has data);
- adds a
flowstateentry to each chosen app's MCP config, after saving a copy of that file as<file>.flowstate-backup-<time>. Other servers and settings are left alone; a file it can't parse is refused and left untouched; - with
--offsite-github OWNER/NAME, checks that the GitHub repo is private and saves it for nightly off-site backups (--no-offsiteskips the question); - with
--schedule-backups, adds a nightly local backup to your OS scheduler (Windows Task Scheduler, macOS launchd, Linux systemd user timer or cron), at 02:30 unless you pass--backup-time HH:MM; - with
--install-skill, installs the FlowState skill (see below;--no-skillskips the question); - puts a "FlowState review" shortcut on your desktop that opens the review page
(
flowstate review-page, this computer only). It never replaces a file of that name it didn't make; - with
--verify, starts the server the way your app will and callsstart_hereto check it answers.
At the end it tells you about the daily update check and how to turn it off.
Useful flags: --dry-run (show what would change, change nothing), --help,
--clients auto|all|none|<list> (claude-desktop, cursor, windsurf, claude-code,
codex, grok; auto = every app whose config folder exists), --config <file> (any other
JSON config with an mcpServers object), --db <file>, --python <path>.
Manual install
Needs Python 3.11+. The usual install is uvx flowstatemcp (above). pip install flowstate
does not install this project.
The rest of this section is the git clone, for setup_flowstate.py, backups, and the skill.
git clone https://github.com/dialectforge/FlowState.git FlowState
cd FlowState
python -m venv .venv
# Windows: .venv\Scripts\python macOS/Linux: .venv/bin/python
.venv/bin/python -m pip install -e mcp-server # just the server
.venv/bin/python -m pip install -e "mcp-server[dev]" # plus test tools (pytest)
python setup_flowstate.py --clients claude-desktop --schedule-backups --no-offsite --install-skill --dry-run
python setup_flowstate.py --clients claude-desktop --schedule-backups --no-offsite --install-skill --verify
.venv/bin/python -m pytest tests -q # run the tests
setup_flowstate.py installs into .venv itself, so the pip install lines are only needed
if you want the test tools or manage the venv yourself (then add --skip-install). For the exact,
hash-checked test set CI uses: pip install --require-hashes -r requirements-dev.lock, then
pip install --no-deps -e mcp-server. A plain,
non-editable pip install ./mcp-server (or of a built wheel; on PyPI the name is
flowstatemcp) works too from 2.4.1 on; in 2.4.0 it
left out the database schema, so every FlowState call failed, and the failed start left an empty
database file behind. 2.4.1 sets up such an empty file as a new database, so reinstalling is
enough. flowstate update needs the git clone set up by setup_flowstate.py. Config
snippets for every app, if you'd rather edit configs by hand, are in AGENTS.md.
Guides and tools
Short public pages on flowstatemcp.com. The tools are free, need no sign-up, and run in the browser. Nothing you type there is sent to a server.
Tools
Guides
- How to give Claude Code memory between sessions
- One memory for Claude, ChatGPT, Cursor and Grok
- What is an MCP server?
Comparisons
- FlowState compared: Mem0, the official MCP memory server, and Basic Memory. Each page uses what that project publishes about itself.
What you can ask FlowState
You don't need commands. Talk to your AI app in plain words, and it uses FlowState for you:
- "What was I working on in Atlas?"
- "Save a decision: we're using Postgres, not SQLite, because of multiple users."
- "What should I do next in Atlas?"
- "What did we decide about the database?"
- "What's waiting for me in FlowState?"
The full list, with what each request does, is in docs/WHAT-TO-ASK.md.
The FlowState skill
skills/flowstate is an Agent Skill: a short set of habits (read
the brief first, log to the right project, link shared components, never approve your own review
items, leave a handoff if you stop mid-task). Apps that load skills follow it without being told.
- With setup:
python setup_flowstate.py --install-skill(or answer "yes" when it asks) copies the folder to~/.agents/skills/flowstateand~/.claude/skills/flowstate. An older, different copy is moved to~/.agents/flowstate-skill-backups/or~/.claude/flowstate-skill-backups/first. - By hand: copy the
skills/flowstatefolder into~/.agents/skills/or~/.claude/skills/. - Claude apps and ChatGPT: zip the
skills/flowstatefolder yourself and upload the ZIP in the app's Skills settings. (FlowState doesn't build the ZIP for you.)
No skill support in your app? Paste the three lines in Make your AI use FlowState.
The server also sends these rules to every app when it connects, and offers them as the MCP
prompt flowstate-start.
Make your AI use FlowState
FlowState only helps if the AI reads it at the start and writes as it goes. The server already says so when an app connects. Paste the same three lines into the app's own rules so it keeps doing it:
Call start_here at the start of a conversation about a project.
Call log_work right after each decision, change, fix or lesson.
Call log_work again before you end the session or hand back.
CLAUDE.md and Claude Code. Plain markdown, no front matter. Put it in CLAUDE.md or
.claude/CLAUDE.md in the project, or in ~/.claude/CLAUDE.md for every project.
How Claude remembers your project.
AGENTS.md and Codex. Plain markdown. Put it in AGENTS.md in the project, or in
~/.codex/AGENTS.md for every repository.
Custom instructions with AGENTS.md.
Cursor. Save this as .cursor/rules/flowstate.mdc. alwaysApply: true puts it in every
chat. A plain .md file in that folder is ignored.
Rules.
---
description: Keep FlowState project memory up to date
alwaysApply: true
---
Call start_here at the start of a conversation about a project.
Call log_work right after each decision, change, fix or lesson.
Call log_work again before you end the session or hand back.
Windsurf. Save this as .windsurf/rules/flowstate.md. trigger: always_on includes the
whole file in every message. The same front matter works in .devin/rules/ if that is the
folder your build uses. Current docs still import .windsurf/rules.
Memories and rules.
---
trigger: always_on
---
Call start_here at the start of a conversation about a project.
Call log_work right after each decision, change, fix or lesson.
Call log_work again before you end the session or hand back.
VS Code Copilot. Plain markdown in .github/copilot-instructions.md. Copilot adds that
file to chat requests in the repository.
Custom instructions in VS Code
and GitHub Copilot custom instructions.
Claude Projects and claude.ai. Open the project, choose Set project instructions, and paste the three lines. They apply to every chat in that project. How to create and manage projects.
ChatGPT. Settings, Personalization, Custom instructions (on a phone: Settings, Customize ChatGPT). Turn customization on and paste the three lines. They apply to your chats. ChatGPT custom instructions.
FlowState MCP questions
How do I add FlowState MCP to Claude Code?
Run claude mcp add --transport http flowstate https://hosted.flowstatemcp.com/mcp in your terminal. Add --scope user to make it available in every project.
How do I add FlowState MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What tools does FlowState MCP provide?
It exposes 16 tools, including start_here, log_work, search, manage_todos, manage_problems.
Where does FlowState store my data?
Everything is stored in a single SQLite file on your own computer, so memory stays local unless you enable an optional off-site feature.
Which AI apps can use FlowState?
Any MCP client works, including Claude, ChatGPT, Cursor and Grok, and several can use the same memory at once.
Does FlowState make network calls?
It makes one call a day to GitHub to check for newer releases, which sends nothing about you or your projects and can be turned off.
Is FlowState free?
Yes, the local version is free and open source under the MIT license, with an optional paid hosted version.
Can two AI agents work on the same project without duplicating work?
An agent claims a todo before starting it, and other agents see the claim and skip that item until the claim expires or is released.

