MCP Hub
Back to servers

project-mcp

Requires Setup

A specialized MCP server for project management and documentation that uses intent mapping to automatically search relevant sources like roadmaps, backlogs, and task files without manual configuration.

Stars
4
Forks
2
Tools
37
Updated
Jan 2, 2026
Validated
Jan 9, 2026

Quick Install

npx -y project-mcp

project-mcp

Intent-based MCP server for project documentation — Maps natural language to the right sources automatically

npm version Node.js License: MIT MCP

When users say "project", "docs", or "todos", project-mcp automatically searches the right directories—no configuration needed. It understands intent, not just directory names.


⚡ Quick Start

Install

npm install project-mcp

Configure

Add to .mcp.json:

{
	"mcpServers": {
		"project": {
			"command": "npx",
			"args": ["-y", "project-mcp"]
		}
	}
}

That's it. The server automatically finds and indexes:

  • .project/ — Operational truth (plans, todos, status)
  • Root markdown files — README.md, DEVELOPMENT.md, etc.
  • docs/ — Reference documentation

Table of Contents


🎯 Why project-mcp?

The Problem: AI agents need to search project documentation, but:

  • Users say "project" not ".project/"
  • Different queries need different sources
  • Manual source mapping is error-prone
  • No standard way to organize project knowledge

The Solution: Intent-based search that maps language to sources automatically:

User SaysSearches
"project" / "the project".project/ + root files + docs/
"docs" / "documentation"Only docs/
"plan" / "todos" / "roadmap" / "status"Only .project/

🛠️ Available Tools (37)

Search Tools

ToolDescriptionUse When
search_projectIntent-based search across all sourcesUser says "project" or asks about status/plans
search_docsSearch reference documentation onlyUser specifically asks for "docs"
get_docGet full file contentYou know the exact file path
list_docsList all documentation filesBrowsing available docs
get_doc_structureGet directory structureUnderstanding organization

Project Management Tools

ToolDescriptionUse When
init_projectInitialize .project/ with all standard filesStarting a new project
manage_project_fileSmart create/update based on content analysisAuto-detect which file to update
create_or_update_roadmapCreate or update ROADMAP.mdPlanning milestones and phases
create_or_update_todoCreate or update TODO.mdManaging project-wide todos
create_or_update_statusCreate or update STATUS.mdTracking project health
create_or_update_indexCreate or update index.md (contract file)Defining source mappings
create_or_update_decisionsCreate or update DECISIONS.mdRecording architecture decisions
check_project_stateCheck which project files existBefore making changes

Backlog Tools

ToolDescriptionUse When
add_to_backlogAdd single item to BACKLOG.mdQuick task creation
get_backlogRead backlog with filtering/sortingViewing queued work
update_backlog_itemUpdate priority, title, tags, phaseAdjusting backlog items
remove_from_backlogDelete item without promotingRemoving cancelled work
import_tasksParse plan/roadmap and bulk add to BACKLOG.mdPopulating from roadmap
promote_taskMove task from BACKLOG to active work (creates YAML)Starting work on a backlog item

Task Management Tools

ToolDescriptionUse When
create_taskCreate active task directly (bypass backlog)Urgent/immediate work
get_taskRead specific task by ID with full detailsViewing task details
update_taskUpdate any task field, transition statusModifying existing tasks
delete_taskPermanently remove a task (with confirmation)Removing cancelled tasks
search_tasksSearch tasks by keyword in title/contentFinding specific tasks
get_next_taskGet dependency-aware next task(s) to work onDetermining what to do
list_tasksList/filter tasks with summary dashboardReviewing all tasks
sync_todo_indexGenerate TODO.md dashboard from active tasksUpdating the overview

Archive Tools

ToolDescriptionUse When
archive_taskMove completed task to archive/Cleaning up done work
list_archived_tasksList tasks in archive with filteringReviewing completed history
unarchive_taskRestore task from archive to activeReopening completed work

Decision & Status Tools

ToolDescriptionUse When
add_decisionRecord ADR with structured formatDocumenting architecture choices
get_decisionRead specific decision by ADR IDViewing decision details
list_decisionsList/filter architecture ADRsReviewing past decisions
update_project_statusQuick timestamped status updateReporting progress
add_roadmap_milestoneAdd milestone with deliverablesPlanning future work
get_roadmapRead roadmap contentViewing planned work

Quality Tools

ToolDescriptionUse When
lint_project_docsValidate documentation against standardsBefore commits, ensuring quality

📋 Task Management System

Tasks flow from planning → backlog → active → archive. Only active tasks (10-30 items) are YAML files.

Workflow

ROADMAP.md ──→ import_tasks ──→ BACKLOG.md ──→ promote_task ──→ todos/*.md ──→ archive_task ──→ archive/
  (plan)        (extract)         (queue)        (activate)      (work)        (complete)       (history)
               hundreds ok      hundreds ok     10-30 files     YAML files
StageFilesPurpose
PlanningROADMAP.mdPhases, milestones, high-level
BacklogBACKLOG.mdPrioritized queue, hundreds of items OK
Activetodos/*.mdYAML files with full metadata, 10-30 items
Archivearchive/*.mdCompleted work history

Task File Format (Active Tasks)

---
id: AUTH-001
title: Implement OAuth authentication
project: AUTH
priority: P0
status: todo
owner: cursor
depends_on:
  - AUTH-002
blocked_by: []
tags:
  - security
  - feature
estimate: 2d
due: 2025-01-15
created: 2025-12-29
updated: 2025-12-29
---

# AUTH-001: Implement OAuth authentication

## Description

Implement OAuth 2.0 authentication flow...

## Subtasks

- [ ] Set up OAuth provider
- [ ] Implement callback handler
- [x] Configure environment variables

## Notes

Agent Execution Loop

┌─────────────────────────────────────────────────────────────┐
│  1. promote_task(task_id: "AUTH-001")                       │
│     → Creates todos/AUTH-001.md from BACKLOG.md             │
└─────────────────────┬───────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────────┐
│  2. get_next_task()                                         │
│     → Returns AUTH-001 (dependencies met, highest priority) │
└─────────────────────┬───────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────────┐
│  3. update_task(id: "AUTH-001", status: "in_progress")      │
│     → Agent works on the task                               │
└─────────────────────┬───────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────────┐
│  4. update_task(id: "AUTH-001", status: "done")             │
└─────────────────────┬───────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────────┐
│  5. archive_task(task_id: "AUTH-001")                       │
│     → Moves to archive/, keeps todos/ small                 │
└─────────────────────────────────────────────────────────────┘

Key Features

  • Backlog-first: Plan hundreds of items in BACKLOG.md, promote to active as needed
  • Small active queue: Only 10-30 YAML task files at a time, not hundreds
  • Stable IDs: {PROJECT}-{NNN} format (e.g., AUTH-001, API-042)
  • Dependencies: depends_on array - task won't appear in get_next_task until deps are done
  • Priority Sorting: P0 (critical) → P3 (low) in all views
  • Status Workflow: todoin_progressblocked | reviewdone
  • Archive history: Completed work preserved in archive/ for reference

🏗️ Project Structure Guide

Recommended Directory Structure

my-project/
├── .project/                    # Operational truth (current state)
│   ├── index.md                 # Contract file (defines source mappings)
│   ├── BACKLOG.md               # Prioritized work queue (hundreds of items OK)
│   ├── TODO.md                  # Task dashboard (auto-generated)
│   ├── ROADMAP.md               # Project roadmap and milestones
│   ├── STATUS.md                # Current project status
│   ├── DECISIONS.md             # Architecture and design decisions
│   ├── todos/                   # Active tasks (10-30 YAML files)
│   │   ├── AUTH-001.md
│   │   └── AUTH-002.md
│   └── archive/                 # Completed tasks (history)
│       └── AUTH-000.md
│
├── docs/                        # Reference truth (long-form docs)
│   ├── README.md
│   ├── architecture/
│   └── guides/
│
├── README.md                    # Project overview
└── CONTRIBUTING.md              # Contribution guidelines

What Goes Where?

.project/ — Operational Truth

Purpose: Current state, plans, decisions, and active work.

FilePurpose
index.mdContract file (defines how agents interpret sources)
BACKLOG.mdPrioritized work queue (future tasks, hundreds OK)
TODO.mdTask dashboard (auto-generated by sync_todo_index)
ROADMAP.mdFuture plans, milestones, upcoming features
STATUS.mdCurrent project status, recent changes, health
DECISIONS.mdArchitecture decisions, trade-offs, rationale
todos/Active task files (10-30 items, YAML frontmatter)
archive/Completed tasks (history, reference)

docs/ — Reference Truth

Purpose: Long-form documentation, guides, and reference materials.

  • Architecture documentation
  • API references
  • How-to guides
  • Technical specifications

🎨 Intent Mapping

The server uses intent detection to route queries to the right sources:

User Query
    │
    ├─ "project" / "the project"
    │  └─→ Searches: .project/ + root files + docs/
    │
    ├─ "docs" / "documentation"
    │  └─→ Searches: docs/ only
    │
    ├─ "plan" / "todos" / "roadmap" / "status"
    │  └─→ Searches: .project/ only
    │
    └─ Default
       └─→ Searches: All sources

How It Works

  1. User query: "What's the project status?"
  2. Intent detection: Keywords "status" → intent plan
  3. Source mapping: plan → searches only .project/
  4. Results: Returns .project/STATUS.md, .project/TODO.md, etc.

📝 Documentation Examples

Example: .project/index.md (Contract File)

# Project Knowledge Index

## Contract for AI Agents

When a user says **"project"**, the canonical sources of truth are:

1. **`.project/`** — Current state, plans, todos, decisions
2. **Root markdown files** — README.md, DEVELOPMENT.md, etc.
3. **`docs/`** — Long-form reference documentation

## Principles

- **Natural language stays natural** - Users say "project" not ".project/"
- **Agents don't guess** - Explicit mappings defined here
- **Intent over structure** - Language maps to intent, not directory names

Example: Task Creation

{
	"tool": "create_task",
	"arguments": {
		"title": "Implement OAuth authentication",
		"project": "AUTH",
		"priority": "P0",
		"owner": "cursor",
		"description": "Add OAuth 2.0 support for Google and GitHub",
		"depends_on": ["AUTH-002"],
		"estimate": "2d",
		"tags": ["security", "feature"]
	}
}

Example: Getting Next Task

{
	"tool": "get_next_task",
	"arguments": {
		"owner": "cursor",
		"limit": 3
	}
}

Returns tasks sorted by priority where all dependencies are complete.

Example: Initialize Project

{
	"tool": "init_project",
	"arguments": {
		"project_name": "My App",
		"project_description": "A web application for task management"
	}
}

Creates .project/ with all standard files: index.md, TODO.md, ROADMAP.md, STATUS.md, DECISIONS.md, and todos/ directory.

Example: Import Tasks to Backlog

{
	"tool": "import_tasks",
	"arguments": {
		"source": ".project/ROADMAP.md",
		"project": "APP",
		"dry_run": true
	}
}

Parses the roadmap and adds tasks to BACKLOG.md. Use dry_run: true to preview first.

Example: Promote Task to Active Work

{
	"tool": "promote_task",
	"arguments": {
		"task_id": "APP-001",
		"owner": "cursor",
		"estimate": "2h"
	}
}

Moves task from BACKLOG.md to todos/APP-001.md with full YAML frontmatter.

Example: Archive Completed Task

{
	"tool": "archive_task",
	"arguments": {
		"task_id": "APP-001"
	}
}

Moves completed task from todos/ to archive/ to keep active queue small.


⚙️ Configuration

Custom Documentation Directory

{
	"mcpServers": {
		"project": {
			"command": "npx",
			"args": ["-y", "project-mcp"],
			"env": {
				"DOCS_DIR": "/path/to/documentation"
			}
		}
	}
}

Custom Working Directory

{
	"mcpServers": {
		"project": {
			"command": "npx",
			"args": ["-y", "project-mcp"],
			"cwd": "/path/to/project/root"
		}
	}
}

🧪 Development

# Clone repository
git clone https://github.com/pouyanafisi/project-mcp.git
cd project-mcp

# Install dependencies
npm install

# Run tests
npm test

# Test the server
node src/index.js

📚 Documentation


🤝 Contributing

Contributions welcome! See CONTRIBUTING.md for guidelines.


📄 License

MIT License - see LICENSE for details.


Get StartedDocumentationExamplesReport Issue

Reviews

No reviews yet

Sign in to write a review