backlog-mcp
backlog-mcp is an MCP server that gives AI agents structured read/write access to a story-based project backlog backed by plain markdown files in a requirements/ directory, with Git for versioning and collaboration.
Read operations:
list_stories— List stories with optional filtering by epic ID or status (draft,in-progress,done,blocked)get_story— Fetch full markdown content and metadata for a specific storyget_index_summary— High-level overview of all epics and story counts by status
Write operations:
set_story_status— Update a story's status in the index and backlog filesadd_story_note— Append a timestamped note to a story (for decisions, progress, or blockers)complete_story— Mark a story as done with a mandatory completion summarycreate_epic— Create a new epic with an auto-assignedEPIC-NNNID and optional descriptioncreate_story— Add a new story under an existing epic with an auto-assignedSTORY-NNNIDset_acceptance_criteria— Replace a story's acceptance criteria with a checklist (idempotent)
Deployment & collaboration:
Installable via Go or as a binary; configurable via
BACKLOG_ROOTandBACKLOG_TRANSPORT(stdioorhttp) environment variablesAll data lives in plain markdown files committable to Git, enabling multi-agent collaboration through standard Git workflows
Provides structured read/write access to story-based project backlogs stored as markdown files in git repositories, enabling AI agents to manage stories, update statuses, append notes, and handle collaboration through git's version control and merge capabilities.
backlog-mcp
An MCP server that gives AI agents structured read/write access to a story-based project backlog. Agents can list stories, read content, update status, and append notes — all backed by plain markdown files that live inside your project repository.
How collaboration works
There is no shared server. The backlog files live in your repo under requirements/, committed and versioned alongside your code. Collaboration between agents, or between an agent and a human, works exactly the way the rest of your codebase does: through git. If two agents update different stories concurrently, git merges them. If they touch the same line, you resolve it like any other merge conflict.
The MCP server is a local process each agent runs for itself. It reads and writes files; git handles the rest.
Install
Download the latest binary for your platform from the Releases page and put it somewhere on your $PATH.
Or, if you have Go installed:
go install github.com/corbym/backlog-mcp@latestBuild from source
go mod tidy
go build -o backlog-mcp .Setup
Initialise a requirements/ folder in your project root:
./backlog-mcp init /path/to/your/project/requirementsThis creates:
requirements/
requirements-index.md # master index — source of truth for epics and story status
backlog.md # priority-ordered list of not-done stories
epic-001-example/
story-001.md # example story fileCommit the requirements/ folder to your repo. Edit the files to add your own epics and stories.
Running
./backlog-mcpThe server looks for a requirements/ directory relative to the working directory it is launched from. Claude Code sets the working directory to the project root, so no configuration is needed.
Claude Code config (.claude/settings.json in your project, or ~/.claude/settings.json globally):
{
"mcpServers": {
"backlog-mcp": {
"command": "/path/to/backlog-mcp"
}
}
}Tools
Tool | Description |
| List stories, optionally filtered by |
| Get full markdown content and metadata for a story |
| Update story status in index and backlog |
| Append a timestamped note to a story file |
| Mark a story done and append a mandatory completion summary in one call |
| Create a new epic — assigns next EPIC-NNN ID, writes epic file, registers in index |
| Create a new story under an epic — assigns next STORY-NNN ID, registers in index and backlog |
| Replace the acceptance criteria section of a story (idempotent) |
| High-level epic/story counts by status |
Environment variables
Variable | Required | Default | Description |
| no |
| Override the path to the requirements directory |
| no |
| Set to |
| no |
| Listen address for HTTP mode |
File format
requirements-index.md — one epic section per heading, one story per table row:
## EPIC-001: Combat System — `draft`
| Story | Title | Status |
|-------|-------|--------|
| [STORY-001](./epic-001-combat-system/story-001.md) | Basic combat | draft |backlog.md — priority-ordered numbered list:
1. **STORY-001** — Basic combat
2. **STORY-002** — Enemy AI *(in-progress)*Story files live at epic-NNN-slug/story-NNN.md under BACKLOG_ROOT.
Status values: draft, in-progress, done, blocked
Notes
File writes are atomic (temp file + rename) — a crash mid-write cannot corrupt your files.
The filesystem is the source of truth. The MCP server never owns the data.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/corbym/backlog-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server