Featured

Deploy OpenClaw in 60 seconds β€” 20% off logoDeploy OpenClaw in 60 seconds β€” 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger β†’
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger β†’
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free β†’
Your own AI agent, running 24/7 with QwikClaw logoYour own AI agent, running 24/7 with QwikClaw

QwikClaw sets up and runs an always-on OpenClaw agent for you. One click, no config files, no server setup.

Deploy now β†’
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data β€” no proxies, no parsers, no maintenance.

Start building free β†’
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it β€” secured from day one.

Get it set up for you β†’
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free β†’
Reach 47,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here β†’

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

corbym/backlog-mcp MCP server](https://glama.ai/mcp/servers/corbym/backlog-mcp/badges/score.svg)](https://glama.ai/mcp/servers/corbym/backlog-mcp) 🏎️ 🏠 🍎 πŸͺŸ 🐧 - MCP server that gives AI agents structured read/write access to a story-based project backlog.

README.md

![backlog-mcp MCP server](https://glama.ai/mcp/servers/corbym/backlog-mcp)

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

Homebrew (tap)

brew tap corbym/backlog-mcp
brew install backlog-mcp

You can also install directly without an explicit tap step:

brew install corbym/backlog-mcp/backlog-mcp

Binary release

Download the latest binary for your platform from the Releases page and put it somewhere on your $PATH.

Go install

If you have Go installed:

go install github.com/corbym/backlog-mcp@latest

---

Build 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/requirements

This 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 file

Commit the requirements/ folder to your repo. Edit the files to add your own epics and stories.

---

Running

./backlog-mcp

The 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.

Create a plan file

./backlog-mcp plan [name]

Creates a new plan scaffold in the requirements/ directory. Without a name the file is plan.md; with a name it is plan-<name>.md. If the file already exists a numeric suffix is added (plan-002.md, etc.). Open the file and work with your agent to fill it in before creating stories.

Configuring your MCP client

Prefer a local config file committed to your project root. This scopes the server to the project and means any agent cloning the repo gets the right setup automatically. Only use a global config if you want backlog-mcp available in every project without per-project configuration.

VS Code / GitHub Copilot β€” add .vscode/mcp.json to your project root: ``json { "servers": { "backlog-mcp": { "command": "/path/to/backlog-mcp", "type": "stdio" } } } ``

Claude Code β€” add .claude/settings.json to your project root: ``json { "mcpServers": { "backlog-mcp": { "command": "/path/to/backlog-mcp" } } } ``

For a global fallback (applies to every project), place the same config in ~/.claude/settings.json (Claude Code) or add it to VS Code's user settings.json under the mcp.servers key (GitHub Copilot). Always prefer the local per-project file.

---

Tools

| Tool | Description | |------|-------------| | list_stories | List stories, optionally filtered by epic_id, status, or story_type | | get_story | Get full markdown content and metadata for a story, including story_type | | get_index_summary | High-level epic/story counts by status | | create_epic | Create a new epic β€” assigns next EPIC-NNN ID, writes epic file, registers in index | | create_story | Create a new story under an epic β€” assigns next STORY-NNN ID, registers in index and backlog | | set_epic_status | Update epic lifecycle status with completion and regression guards (see below) | | set_story_status | Update story status (draft, in-progress, blocked, deferred) in index and backlog | | set_acceptance_criteria | Replace the acceptance criteria section of a story (idempotent) | | check_acceptance_criterion | Tick a single acceptance criterion [x] by index or text | | add_story_note | Append a timestamped note to a story file | | complete_story | Mark a story done with a mandatory completion summary and acceptance criteria validation | | groom_epic | Reconcile an epic's ## Stories section against story files and index data | | bulk_update_acceptance_criteria | Update multiple acceptance-criteria checkbox states for one story in one call | | bulk_update_stories | Update multiple stories in one call (status, note, and/or acceptance criteria patches) | | bulk_update_epics | Update multiple epics in one call (status and/or note) |

set_epic_status guards

Setting status to done requires:

  1. summary β€” a completion note, appended as a timestamped entry to the epic file.
  2. All stories done β€” if any stories are still open the call fails and lists them. Pass override_incomplete=true only after the user explicitly confirms the incomplete stories are intentionally omitted.

Moving backwards (e.g. done β†’ in-progress, in-progress β†’ draft) triggers a regression prompt: the agent should offer to create new stories before proceeding. Pass confirm_regression=true only if the user explicitly insists on skipping that step. blocked and deferred are lateral states and can be set freely.

complete_story guards

Acceptance criteria must be set (not the default placeholder) before a story can be completed. Unchecked criteria block completion unless incomplete_items is provided with one explanation per unchecked item. Tick done criteria [x] via set_acceptance_criteria first β€” do not use incomplete_items to confirm work that is actually finished.

---

Environment variables

| Variable | Required | Default | Description | |----------|----------|---------|-------------| | BACKLOG_ROOT | no | requirements | Override the path to the requirements directory |

---

File format

requirements-index.md β€” one epic section per heading, one story per table row:

## EPIC-001: Combat System β€” `draft`

| Story | Title | Status | Type |
|-------|-------|--------|------|
| [STORY-001](./epic-001-combat-system/story-001.md) | Basic combat | draft | feature |

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.

Story types: feature, bug, chore, spike

Status values: draft, in-progress, done, blocked, deferred

---

Automated PR backlog agent

A GitHub Actions workflow is included that automatically updates story statuses and appends notes when pull requests are opened or updated. It requires no API keys β€” only the standard GITHUB_TOKEN.

How it works

On every pull_request event (opened, synchronize) the workflow:

  1. Installs the backlog-mcp binary via go install github.com/corbym/backlog-mcp@latest.
  2. Scans the PR title and branch name for STORY-NNN IDs.
  3. For each matched story, sets status to in-progress (if it was draft and the PR was just opened) and appends a timestamped note with the PR number and title.
  4. Commits any changed files under requirements/ back to the PR branch.

Setting it up in your repository

Copy these three files into your repo:

.github/
  actions/
    install/
      action.yml          # composite action β€” installs the binary via go install
  scripts/
    backlog_agent.py      # deterministic MCP client (Python 3, stdlib only)
  workflows/
    backlog-agent.yml     # the workflow

The files are in the corbym/backlog-mcp repository. No secrets or additional configuration are required beyond a requirements/ folder already being present.

Branch and PR naming

The agent matches stories by STORY-NNN ID. Include the ID in your branch name or PR title:

story-042-short-description          # branch
STORY-042: Short description         # PR title
STORY-042 STORY-043: Short desc      # multiple stories
chore: bump goreleaser to v2         # no story β€” agent skips cleanly

See CONTRIBUTING.md for the full convention.

Using backlog-mcp with GitHub Copilot agent mode

GitHub Copilot's agent mode in VS Code reads MCP servers from .vscode/mcp.json in your project root. Note the key is "servers", not "mcpServers" (which is the Claude Code convention):

{
  "servers": {
    "backlog-mcp": {
      "command": "/path/to/backlog-mcp",
      "type": "stdio"
    }
  }
}

MCP tools are only available in Agent mode β€” switch to it via the mode dropdown in Copilot Chat. Once configured, Copilot agent can call list_stories, get_story, add_story_note, and all other backlog tools during a chat session β€” the same tools the GitHub Actions workflow uses.

---

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.

See related servers & alternatives β†’

Related MCP servers

Browse all β†’

Related guides

Hand-picked reading to help you choose and use Files & Docs servers.