create_issueLABSCO SUMMARY
A backlog the agent can build, in a file you can read.
The intended move is not manual task entry — it is handing an assistant a specification and letting it decompose the work into issues and tasks itself, which is where the two-level structure earns its keep. Because the store is one JSON file, the result is reviewable and version-controllable rather than locked in a service. The active-issue model is the thing to remember: task calls land on whichever issue is currently selected, so selecting is a real step, not a convenience.
What it is
A file-based issue and task tracker exposed over MCP. Issues stand for features or bugs; tasks are the specific work items under one issue. One issue is active at a time, and task operations apply to it. Everything persists to a JSON file, so the backlog can be backed up, diffed or committed like any other file in the repository.
What you get
- Issues created with a name, an optional description and an optional status —
create_issue - Every issue listed —
list_issues - One issue made the active one, which is what later task calls apply to —
select_issue - An issue created or reset to a known state —
initialize_issue - An issue's status changed —
update_issue_status - A task added to the active issue with a title and optional description —
add_task - The active issue's tasks listed, optionally filtered by status —
list_tasks - A task moved between
New,InWorkandDoneby task id —update_task_status
Requirements
No account and no key — storage is a local file. Python 3.12 or higher with uv or pip; uv pip install -e . then uv run backlog-manager starts it. Configuration is environment variables: TRANSPORT picks sse or stdio (default sse), HOST defaults to 0.0.0.0, PORT to 8050, and TASKS_FILE to tasks.json. Over SSE the client connects to http://localhost:8050/sse; over stdio the client starts the process itself. A Docker image builds with --build-arg PORT=8050. The pyproject name is backlog-manager (0.1.0).
Setup effort
Build from source — git clone https://github.com/danielscholl/backlog-manager-mcp.git
USE CASES
Turning a specification into a plan of work
Have the assistant read the spec, create issues for the functional areas and break each into tasks, all in one pass.
Tracking progress across a session
Move tasks from New to InWork to Done as work lands, and list what remains on the active issue.
Switching between two threads of work
Select a different issue and have subsequent task calls apply there, without the two backlogs mixing.
Keeping the backlog in version control
Point TASKS_FILE at a path inside the repository so the plan is diffed and reviewed like the code it describes.
8 tools
Listed in project docs. Your client may show a different list.
list_issuesselect_issueinitialize_issueupdate_issue_statusadd_tasklist_tasksupdate_task_statusBEFORE YOU INSTALL
What to know first
Tools you get
8 tools named in the project's documentation.
Requires
- uv on PATH
- Python 3.12 or later
INSTALLATION
Connect your client
Server setup
git clone https://github.com/danielscholl/backlog-manager-mcp.git
cd backlog-manager-mcp
uv run backlog-managerMCP Clients
Any MCP client — SSE
{
"mcpServers": {
"backlog-manager": {
"type": "sse",
"url": "http://localhost:8050/sse"
}
}
}Start the server first: uv run backlog-manager in your clone serves SSE at http://localhost:8050/sse (on its first run uv creates the project's .venv and installs it there).
Windsurf
{
"mcpServers": {
"backlog-manager": {
"serverUrl": "http://localhost:8050/sse"
}
}
}Start the server first: uv run backlog-manager in your clone serves SSE at http://localhost:8050/sse (on its first run uv creates the project's .venv and installs it there).
n8n
http://host.docker.internal:8050/sseStart the server first with uv run backlog-manager in your clone. This address is for n8n running in a Docker container, where host.docker.internal reaches your machine; if n8n runs directly on your machine, use http://localhost:8050/sse instead.
Any MCP client — Python
{
"mcpServers": {
"backlog-manager": {
"command": "python",
"args": [
"<YOUR_PATH_TO_BACKLOG_MANAGER>/src/backlog_manager/main.py"
],
"env": {
"TRANSPORT": "stdio",
"TASKS_FILE": "tasks.json"
}
}
}
}<YOUR_PATH_TO_BACKLOG_MANAGER> is the full path of your clone (the backlog-manager-mcp folder), and the command has to be that clone's .venv/bin/python, not python, so the server's dependencies are found.
Any MCP client — Docker
git clone https://github.com/danielscholl/backlog-manager-mcp.git
cd backlog-manager-mcp
docker build -t backlog/manager --build-arg PORT=8050 .{
"mcpServers": {
"backlog-manager": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"TRANSPORT=stdio",
"backlog/manager"
],
"env": {
"TRANSPORT": "stdio"
}
}
}
}