Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
Local-first control plane for coding agents: routing, reservations, and guardrails.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"polis-protocol": {
"command": "uvx",
"args": [
"polis-protocol",
"mcp"
]
}
}
}Run this in your terminal
claude mcp add polis-protocol -- uvx polis-protocol mcpPaste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"polis-protocol": {
"command": "uvx",
"args": [
"polis-protocol",
"mcp"
]
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"polis-protocol": {
"type": "stdio",
"command": "uvx",
"args": [
"polis-protocol",
"mcp"
]
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account yehudalevy-collab, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (2.0.1) reached the registry 5 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Python (uv) on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, OpenTakeoff
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Construction takeoff for AI agents: load plans, set scale, measure, count, export with provenance.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
The local-first control plane for coding agents. Run Claude, Codex, Gemini, and Cursor against one repo — each claimed contract records an owner, agents can record evidence, and shared lessons help reduce repeated failures. Plain markdown, in git, across every vendor.
🌐 Website → [polis-protocol.ymlsora.chatgpt.site](https://polis-protocol.ymlsora.chatgpt.site) · Install · Proof · Plug into your agent (MCP)
Synthetic simulation: repeat errors 65% → 7% · Advisory overlap conflicts detected · reproduce in 5s: polis bench --mode learning
Modeled run with synthetic tasks and seed 0 — assumptions and limitations are published below.
uvx polis-protocol init # one command · no server · no database · just markdown in your repo
Shared by Claude · Codex · Gemini · Cursor , all reading one _polis/ folder. MIT.
⭐ If the loop below clicks, a star helps other multi-agent builders find this.
Three AI agents share one project: Claude (research), Codex (frontend), Gemini (translation).
A Spanish-translation task comes in. Who gets it?
Early on, Claude did — it rated itself highly. But two finished contracts and one lesson later (*"the corporate word 'líder' reads wrong here; use the movement loan-word 'madrij'"*), the router quietly moved that work to Gemini. Nobody reassigned it. The team learned, and the routing followed.
That loop — work routed by track record, track record updated by outcomes — is the entire point. See it yourself in one command, no install, no API keys:
git clone https://github.com/ymxlx/polis-protocol.git
cd polis-protocol && bash scripts/demo.sh
Score breakdown (sorted by total): gemini-translator-pesaj total=0.688 hist=0.25 self=1.00 cost=1.00 avail=1.00 lessons=+0.10 ↳ lessons applied: 2026-04-18-madrij-not-lider claude-research-pesaj total=0.453 hist=0.15 self=0.60 cost=1.00 avail=1.00 lessons=+0.00 codex-frontend-pesaj total=0.290 hist=0.00 self=0.20 cost=1.00 avail=1.00 lessons=+0.00
Recommendation: gemini-translator-pesaj ← won on history + an applied lesson, not self-rating
If that loop is interesting to you, a ⭐ genuinely helps other multi-agent builders find this.
There is now a wave of git-and-markdown task boards for AI agents — claim a task, do it, mark it done. They're good, and Polis can write to them. But a board is passive: it records what happened and never gets smarter. The protocol is frozen the day it ships.
Polis adds an active coordination layer to the shared record:
chronicle.md. *(Every board does this.)*A board is something you fill in. Polis is a team that develops. It learns who's best, and it can rewrite its own rules.
The whole thing lives in a folder. There is no central server, no required runtime, no proprietary format. If a tool can read and write markdown, it can participate.
If you are wondering how Polis compares with AGENTS.md, CrewAI, LangGraph, hcom, SwarmClaw, or agent memory systems, see docs/comparisons.md.
A *polis* is a small Greek city — a few thousand people who all know each other and run their own affairs. The metaphor maps cleanly:
| Polis | Polis Protocol |
|---|---|
| Citizen | An AI agent from any vendor |
| Capability card | A content-hashed YAML manifest of what an agent can do |
| Contract | A structured task with intent, assignment, and settlement |
| Chronicle | An append-only event log every citizen reads on session start |
| Lesson | A retrospective filed by capability tag |
| Chavruta | A paired critique by a citizen from a different vendor before a high-stakes action |
| Amendment | A vote-ratified change to the constitution |
It is opinionated on purpose. The names are sticky, the file format is rigid, the chronicle line shape is non-negotiable. Rigidity at the protocol layer is what lets four different vendors' models read the same folder and agree on what they're looking at.
From the root of any project:
# zero-install, one command
uvx polis-protocol init
pipx install polis-protocol # isolated pip install polis-protocol # into the current env
init scaffolds _polis/, writes bridge files for Claude/Codex/Gemini, and registers you as a citizen. Pass an identity when you want one:
uvx polis-protocol init \
--agent-id claude-research-yourproject \ --vendor anthropic --model claude-opus-4-7 --tool "claude code"
Preview the scaffold without writing files using --dry-run. Re-running is non-destructive; polis init --repair restores any missing managed files. (Hacking on the protocol itself? git clone + python scripts/init_polis.py still works.)
You now have:
your-project/
├── CLAUDE.md / AGENTS.md / GEMINI.md / AIDER.md ← cross-tool entry pointers ├── .agents/skills/polis-protocol/SKILL.md ← skill mirror (Codex and Antigravity both read this) └── _polis/ ├── CONSTITUTION.md ← canonical protocol ├── README.md ├── index.md ← "where things stand" ├── chronicle.md ← append-only event log ├── citizens/ / ← capability_card, status, inbox, journal └── contracts/ ├── open/ ← active tasks ├── settled/ ← closed tasks with lessons └── routing_stats.yml ← learned routing policy
polis contract open --title "Literature review" \
--tags long-context-reading,source-checking --by claude-research-yourproject
Or drop a file in _polis/contracts/open/ by hand — it's just markdown:
---
contract_id: literature-review opened_by: claude-research-yourproject status: proposed stakes: medium required_tags: [long-context-reading, source-checking] cost_ceiling: medium
...
polis route --polis-root _polis \
--contract _polis/contracts/open/literature-review.md --explain
Output:
Score breakdown:
claude-research-yourproject total=0.430 hist=0.00 self=0.90 cost=1.00 avail=1.00 lessons=+0.00 codex-frontend-yourproject total=0.350 hist=0.00 self=0.50 cost=1.00 avail=1.00 lessons=+0.00
Recommendation: claude-research-yourproject
polis contract settle literature-review --quality 5 --minutes 90
polis reconcile --polis-root _polis
The bandit's routing_stats.yml updates, and any lesson the owner files under _polis/lessons/ / can carry a bounded routing_effect that the router reads — and names in --explain — on the next similar contract. Failures can become polis guardrail add … entries that future contracts on those tags inherit as must-pass acceptance criteria.
polis reserve src/auth --as claude-research-yourproject --note "refactoring login"
polis release src/auth --as claude-research-yourproject
Reservations are advisory coordination recorded in shared state. They are not filesystem locks, a security boundary, or a guarantee against races from tools that do not participate in Polis.
Every polis is also an MCP server — polis mcp speaks MCP over stdio with zero extra dependencies. It exposes the whole lifecycle as tools (status, open / route / claim / settle / abandon, context packets, reserve / release, guardrails) plus read-only resources (polis://state, polis://replay, polis://replay/redacted, polis://constitution):
# Claude Code
claude mcp add polis -- uvx --from polis-protocol polis mcp
uvx, args --from polis-protocol polis mcp--polis-root /path/to/_polis)
Agents that can't shell out to a CLI can now open contracts, get an explainable routing recommendation, reserve files, and settle with evidence — through the same shared application layer the CLI and dashboard use. Nothing ever hand-edits _polis/ files.
polis bench ships in the box — we benchmarked our own claims instead of asserting them:
polis bench --mode learning.polis reserve rejects overlapping claims and names the holder when every participant uses the same shared state. Reservations are not filesystem locks or race prevention.polis bench). Polis's edge is learning *without having to trust the cards*, a transparent reason for every pick, and the coordination layer the baselines lack.Every citizen publishes one file: _polis/citizens/ /capability_card.yml. Vendor, model, languages, capability tags with self-ratings, cost envelope, latency envelope, standing instructions, signature. The card is the polis's answer to "who can do
Only the beginning is shown; read the rest in the repo