🚀 SQLite MCP追踪器服务器
SQLite MCP追踪器服务器是一个基于Model Context Protocol (MCP) 的服务器,它通过标准化的工具和资源,提供了基于SQLite的任务和项目跟踪功能,能够有效助力软件开发全生命周期的管理与跟踪。
🚀 快速开始
要使用此服务器,首先需要进行安装和数据库初始化:
npm install
运行服务器:
npm start
或者在开发模式下运行(支持自动重启):
npm run dev
在使用其他工具之前,你必须先初始化数据库,有两种方式可供选择:
选项1:MCP工具(推荐给AI代理使用)
- 调用
initialize 工具,并提供当前工作目录的路径(例如:"/Users/username/project")
- 该工具将在指定目录下创建
.project_tracker.db 文件,并设置好所有必要的表
选项2:HTTP API(适用于Web应用程序)
- 启动服务器:
npm start
- 调用
POST /api/initialize 接口,并提供如下请求数据:{"currentProjectLocation": "/path/to/project"}
- API将创建
.project_tracker.db 文件并建立数据库连接
✨ 主要特性
- SDLC实体管理:实现完整的软件开发生命周期跟踪
- 全流程支持:支持Epics、用户故事、任务、缺陷、测试用例等,覆盖完整的SDLC工作流程
- 集成Wiki系统:集成了用于项目文档的Wiki系统,支持实体链接,标题限制为256个字符
- 评论系统:利益相关者可对所有实体进行反馈和协作,同时显示评论数量
- Epic依赖关系:Epics可以依赖其他Epics(类似于用户故事的依赖关系)
- 工作流强制约束:确保利益相关者的正确所有权和状态转换
- 自动状态变更:已关闭故事中的缺陷会重新打开该故事,进入QA阶段的故事将重新打开其父Epics
- 审计跟踪:跟踪所有权和状态转换
- 数据验证:全面的输入验证和外键约束检查
- 布尔字段处理:对存档字段进行正确的布尔转换(使用true/false而非0/1)
- HTTP API:提供REST端点,用于数据库初始化、SDLC实体和Wiki页面的操作
- Web UI:具有标签式的仪表板界面,包含SDLC跟踪器和Wiki部分,并显示实体数量
- 错误处理:为无效操作和约束违规提供清晰的错误消息
- SQLite后端:使用SQLite和better-sqlite3进行高效操作
📦 安装指南
npm install
💻 使用示例
运行服务器
npm start
或者在开发模式下运行:
npm run dev
初始化数据库
选项1:MCP工具
initialize /Users/username/project
选项2:HTTP API
npm start
curl -X POST -H "Content-Type: application/json" -d '{"currentProjectLocation": "/path/to/project"}' http://localhost:3000/api/initialize
连接到MCP客户端
Claude Code
claude mcp add --transport stdio my-tracker "npm start"
OpenCode
在OpenCode的MCP配置文件中添加以下内容:
{
"mcpServers": {
"sdlc-tracker": {
"command": "npm",
"args": ["start"],
"cwd": "/path/to/your/project"
}
}
}
OpenAI Codex
在 ~/.codex/config.toml 文件中添加以下内容:
[[mcp]]
name = "sdlc-tracker"
command = "npm"
args = ["start"]
cwd = "/path/to/your/project"
Windsurf
在Windsurf的MCP设置中使用stdio传输协议,并设置命令为 npm start。
Cursor
- 打开Cursor设置
- 导航到MCP部分
- 添加新服务器,配置如下:
- 传输协议:stdio
- 命令:
npm start
- 工作目录:
/path/to/your/project
VS Code
- 安装一个MCP扩展(如 "MCP" 或 "Claude Code")
- 配置为stdio传输协议
- 将命令设置为
npm start
访问Web UI
npm start
示例响应
任务依赖智能提示
{
"success": true,
"entity_type": "task",
"entity_id": 5,
"old_status": "Review",
"new_status": "Closed",
"workflow_suggestions": [
{
"entity_type": "task",
"entity_id": 7,
"suggested_action": "start_task",
"reason": "All dependencies for task \"Implement API\" are now completed",
"suggested_status": "In Progress"
}
]
}
缺陷状态智能提示
{
"success": true,
"entity_type": "bug",
"entity_id": 3,
"old_status": "In Progress",
"new_status": "Fixed",
"workflow_suggestions": [
{
"entity_type": "bug",
"entity_id": 3,
"suggested_action": "qa_verification",
"reason": "Bug has been marked as fixed and should be verified by QA",
"suggested_status": "In Progress"
}
]
}
用户故事验证
{
"content": ["Please ask product manager to add acceptance criteria"],
"structuredContent": {
"success": false,
"entity_type": "user_story",
"entity_id": 1,
"error": "Please ask product manager to add acceptance criteria"
},
"isError": true
}
📚 详细文档
可用工具
数据库管理
initialize:在指定的项目目录中初始化SDLC跟踪器数据库。你必须提供当前工作目录的路径(例如:"/Users/username/project")。
Epic管理
create_epics:创建多个Epics,需提供标题、描述和产品经理分配信息
list_epics:列出Epics,可选择按状态过滤(默认排除已存档的Epics)
dependencies_resolved:按依赖关系解决状态过滤Epics(true/false)
update_epic:更新Epic的标题、描述、状态、分配和阶段信息
archive_epic:存档Epics(仅限产品经理操作)
用户故事管理
create_user_stories:创建多个用户故事,需提供Epic关联、验收标准和故事点信息
list_user_stories:列出用户故事,可按Epic、状态或分配人过滤(默认排除已存档的用户故事)
dependencies_resolved:按依赖关系解决状态过滤用户故事(true/false)
update_user_story_content:更新用户故事的标题、描述和故事点信息(所有利益相关者均可操作)
update_user_story_acceptance_criteria:更新用户故事的验收标准(仅限产品经理操作)
archive_user_story:存档用户故事(仅限产品经理操作)
任务管理
create_tasks:创建多个任务,需提供用户故事关联、时间估计和架构师/开发人员分配信息
list_tasks:列出任务,可选择按用户故事、状态、分配人以及依赖关系过滤
depends_on:过滤依赖于特定任务ID的任务
depended_by:过滤被特定任务ID依赖的任务
has_dependencies:过滤有(true)或没有(false)任何依赖关系的任务
dependencies_resolved:按依赖关系解决状态过滤任务(true/false)
缺陷跟踪
create_bugs:创建多个缺陷报告,需提供严重级别、报告人和分配人信息
list_bugs:列出缺陷,可选择按状态、严重级别、报告人、分配人过滤
测试用例管理
create_test_cases:创建多个测试用例,需提供前置条件、步骤、预期结果和测试人员/产品经理分配信息
list_test_cases:列出测试用例,可选择按状态、分配人过滤
工作流管理
update_entity_status:更新任何SDLC实体的状态和/或分配信息,同时记录审计跟踪并提供智能工作流建议
manage_story_dependencies:批量添加或删除多个用户故事的依赖关系
manage_epic_dependencies:批量添加或删除多个Epics的依赖关系
manage_task_dependencies:批量添加或删除多个任务的依赖关系(任务必须属于同一个用户故事)
- 自动状态变更:在已关闭的故事中创建的缺陷会自动将故事重新打开到QA阶段,进入QA阶段的故事将自动重新打开其父Epics
智能工作流建议
系统在整个SDLC过程中提供智能工作流指导:
- 任务关闭智能:当任务状态变为“已关闭”时,系统会自动检查用户故事中的所有任务是否都已关闭
- 用户故事推进:如果所有任务都已关闭,且用户故事尚未处于QA/UAT/已关闭状态,系统会建议将用户故事状态改为“QA”
- 任务依赖智能:当任务关闭时,系统会检查依赖任务,并在所有依赖关系都满足的情况下建议将其状态改为“进行中”
- 缺陷状态智能:当缺陷状态发生变化时,系统会提供针对性的建议:
- “已修复”的缺陷:建议进行QA验证
- “已关闭”的缺陷:检查是否存在回归测试,若缺失则建议创建
- “未解决”的缺陷:若分配给测试人员,建议重新分配给开发人员
- 自动状态变更:除了建议之外,系统还会自动处理工作流转换:
- 在已关闭的故事中创建的缺陷会自动将故事重新打开到“QA”状态
- 进入“QA”阶段的故事将自动将其父Epics从“已关闭”状态重新打开到“打开”状态
- 用户故事验证:防止在没有验收标准和测试用例的情况下将用户故事状态改为“进行中”
- 主动指导:帮助团队维持正确的SDLC工作流,无需手动跟踪
评论支持
create_comments:在任何SDLC实体上创建评论,用于利益相关者反馈
get_comments:检索特定SDLC实体的评论
Wiki管理
create_wiki_page:创建Wiki页面,需提供Markdown内容、标签和类别分类信息(标题限制为256个字符)
update_wiki_page:更新Wiki页面的内容、元数据和标签(标题限制为256个字符)
list_wiki_pages:列出Wiki页面,可按类别、状态、标签或搜索词过滤
get_wiki_page:获取详细的Wiki页面内容,包含链接的实体信息
manage_wiki_links:添加或删除Wiki页面与SDLC实体之间的链接
archive_wiki_page:存档Wiki页面(将其状态改为已存档)
知识图谱生成
get_knowledge_graph:为已初始化的项目生成并返回知识图谱,分析Python、JavaScript/TypeScript和Java文件,提取导入、类、函数和依赖关系信息
HTTP API
端点
GET /api/status:获取数据库初始化状态和服务器信息
POST /api/initialize:使用项目位置初始化数据库
- 请求:
{"currentProjectLocation": "/path/to/project"}
- 响应:数据库连接状态
GET /api/epics:列出所有Epics,包含评论数量和依赖关系信息
GET /api/epic/:id:获取特定Epic的详细信息
GET /api/story/:id:获取特定用户故事的详细信息
GET /api/task/:id:获取特定任务的详细信息
GET /api/bug/:id:获取特定缺陷的详细信息
GET /api/test-case/:id:获取特定测试用例的详细信息
GET /api/comments/:entityType/:entityId:获取任何实体的评论信息
GET /api/wiki:列出所有Wiki页面,包含元数据和标签信息
GET /api/wiki/:id:获取特定Wiki页面的完整内容和链接的实体信息
GET /api/wiki/search?q=term:按标题或内容搜索Wiki页面
GET /api/get-knowledge-graph:为已初始化的项目生成并检索知识图谱数据
特性
- 评论计数:所有实体都包含
comment_count 字段
- 依赖信息:Epics和用户故事包含依赖关系数组
- 布尔字段:存档字段使用正确的布尔值(true/false)
- JSON响应:所有端点都返回结构化的JSON数据
可用资源
database_schema:提供数据库架构和表结构信息
知识图谱
知识图谱工具会分析项目代码库,创建代码库的结构化表示:
支持的语言
- Python (.py):提取导入、类、函数和函数调用信息
- JavaScript/TypeScript (.js, .ts, .jsx, .tsx):提取ES6/CommonJS导入、类、函数和调用信息
- Java (.java):提取导入、类、方法和方法调用信息
输出格式
知识图谱以 .kg.json 文件的形式保存在项目根目录下,包含以下内容:
{
"t": "Project tree structure as text",
"f": [
{
"f": "relative/file/path",
"i": ["import1", "import2"],
"c": ["Class1", "Class2"],
"fn": ["function1", "function2"],
"ca": ["call1", "call2"]
}
]
}
使用方法
- 自动排除构建目录、node_modules和生成的文件
- 需要先初始化项目(与其他工具相同)
- 在运行时生成知识图谱,不存储文件
- 可用于代码分析、依赖关系可视化和项目理解
数据库架构
initialize 工具会在指定目录下创建一个SQLite数据库文件 .project_tracker.db,并包含完整的SDLC架构:
核心SDLC实体
| 表名 |
字段 |
详情 |
| Epics Table |
id |
主键(自增) |
|
title |
Epic标题(必填) |
|
description |
Epic描述(可选) |
|
status |
Epic状态('New', 'Open', 'Closed') |
|
created_by |
创建者利益相关者(枚举类型) |
|
owner |
当前所有者('product') |
|
assigned_to |
分配对象(仅限 'product') |
|
created_at/updated_at |
时间戳 |
|
closed_at |
关闭时间戳 |
|
archived |
布尔标志,用于软删除 |
|
dependencies |
此Epic依赖的Epic ID数组 |
|
dependent_epics |
依赖此Epic的Epic ID数组 |
|
dependencies_resolved |
布尔值,指示所有依赖关系是否都为 'Closed' 状态 |
|
comment_count |
此Epic的评论数量 |
| User Stories Table |
id |
主键(自增) |
|
epic_id |
外键,关联Epics(可选) |
|
title |
用户故事标题(必填) |
|
description |
用户故事描述(可选) |
|
acceptance_criteria |
验收标准(可选) |
|
status |
状态('New', 'In Progress', 'QA', 'UAT', 'Closed') |
|
created_by/current_owner/assigned_to |
利益相关者分配(枚举类型) |
|
story_points |
故事点估计(可选) |
|
phase |
阶段名称(可选,可为空) |
|
phase_status |
阶段完成状态(可选,默认为 'New') |
|
created_at/updated_at/qa_at/closed_at |
时间戳 |
|
archived |
布尔标志,用于软删除 |
|
dependencies |
此用户故事依赖的用户故事ID数组 |
|
dependent_stories |
依赖此用户故事的用户故事ID数组 |
|
dependencies_resolved |
布尔值,指示所有依赖关系是否都为 'Closed' 状态 |
|
comment_count |
此用户故事的评论数量 |
| Tasks Table |
id |
主键(自增) |
|
user_story_id |
外键,关联用户故事(可选) |
|
title |
任务标题(必填) |
|
description |
任务描述(可选) |
|
status |
状态('New', 'In Progress', 'Review', 'Closed') |
|
created_by/current_owner/assigned_to |
利益相关者分配('architect', 'developer') |
|
estimated_hours/actual_hours |
时间跟踪(可选) |
|
phase |
阶段名称(可选,可为空) |
|
phase_status |
阶段完成状态(可选,默认为 'New') |
|
created_at/updated_at/closed_at |
时间戳 |
|
dependencies_resolved |
布尔值,指示所有依赖关系是否都为 'Closed' 状态 |
|
comment_count |
此任务的评论数量 |
| Bugs Table |
id |
主键(自增) |
|
user_story_id/task_id |
外键(可选) |
|
title |
缺陷标题(必填) |
|
description |
缺陷描述(可选) |
|
severity |
严重级别('Critical', 'High', 'Medium', 'Low') |
|
status |
状态('Open', 'In Progress', 'Review', 'Fixed', 'Closed') |
|
reported_by/assigned_to/created_by/current_owner |
利益相关者分配(枚举类型) |
|
phase |
阶段名称(可选,可为空) |
|
phase_status |
阶段完成状态(可选,默认为 'Open') |
|
created_at/updated_at/fixed_at/closed_at |
时间戳 |
|
comment_count |
此缺陷的评论数量 |
| Test Cases Table |
id |
主键(自增) |
|
user_story_id |
外键,关联用户故事(可选) |
|
title |
测试用例标题(必填) |
|
description/preconditions/steps/expected_result |
测试详情 |
|
status |
状态('New', 'Passed', 'Failed') |
|
created_by/current_owner/assigned_to |
利益相关者分配('tester', 'productmanager') |
|
phase |
阶段名称(可选,可为空) |
|
phase_status |
阶段完成状态(可选,默认为 'New') |
|
created_at/updated_at/last_run_at/last_run_by |
时间戳 |
|
comment_count |
此测试用例的评论数量 |
| Story Dependencies Table |
id |
主键(自增) |
|
dependent_story_id |
外键,关联用户故事(依赖其他故事的故事) |
|
dependency_story_id |
外键,关联用户故事(被依赖的故事) |
|
created_at |
依赖关系创建时间戳 |
|
created_by |
创建依赖关系的利益相关者 |
|
Constraints |
无自依赖关系,无重复依赖关系,级联删除 |
| Epic Dependencies Table |
id |
主键(自增) |
|
dependent_epic_id |
外键,关联Epics(依赖其他Epic的Epic) |
|
dependency_epic_id |
外键,关联Epics(被依赖的Epic) |
|
created_at |
依赖关系创建时间戳 |
|
created_by |
创建依赖关系的利益相关者 |
|
Constraints |
无自依赖关系,无重复依赖关系,级联删除 |
| Task Dependencies Table |
id |
主键(自增) |
|
dependent_task_id |
外键,关联任务(依赖其他任务的任务) |
|
dependency_task_id |
外键,关联任务(被依赖的任务) |
|
created_at |
依赖关系创建时间戳 |
|
created_by |
创建依赖关系的利益相关者 |
|
Constraints |
无自依赖关系,无重复依赖关系,级联删除,同一用户故事验证 |
| Comments Table |
id |
主键(自增) |
|
entity_type |
实体类型('epic', 'user_story', 'task', 'bug', 'test_case') |
|
entity_id |
外键,关联实体 |
|
comment_text |
评论内容(必填) |
|
author |
评论作者利益相关者(枚举类型) |
|
created_at/updated_at |
时间戳 |
| Wiki Pages Table |
id |
主键(自增) |
|
title |
Wiki页面标题(必填,唯一) |
|
content |
Markdown内容(必填) |
|
category |
类别分类('technical', 'process', 'requirements', 'architecture', 'other') |
|
tags |
用于组织的标签字符串数组 |
|
created_by/updated_by |
创建/更新页面的利益相关者 |
|
created_at/updated_at |
时间戳 |
| Wiki Links Table |
id |
主键(自增) |
|
wiki_page_id |
外键,关联Wiki页面 |
|
entity_type |
链接的实体类型('epic', 'user_story', 'task', 'bug', 'test_case') |
|
entity_id |
外键,关联链接的实体 |
|
created_at |
链接创建时间戳 |
|
created_by |
创建链接的利益相关者 |
审计跟踪表
- 所有权转换:跟踪所有利益相关者之间的所有权变更
- 状态转换:跟踪所有状态变更,并记录时间戳和执行者
索引
- 所有外键和常用过滤列上的性能索引
- 用于高效实体类型查询的复合索引
- 用于快速基于实体过滤的评论实体索引
SDLC工作流
服务器实现了完整的软件开发生命周期,并确保利益相关者的正确所有权:
实体状态与转换
- Epics:New → Open → Closed(由产品经理负责)
- 用户故事:New → In Progress → QA → UAT → Closed(产品经理 → 架构师 → 开发人员 → 测试人员 → 产品经理)
- 验证:在没有验收标准和测试用例的情况下,不能将状态改为 '进行中'
- 任务:New → In Progress → Review → Closed(架构师 → 开发人员 → 架构师)
- 缺陷:Open → In Progress → Review → Fixed → Closed(任何利益相关者都可能参与)
- 验证:只能从 '进行中' 状态设置为 '审核中',不能直接跳转到 '已修复' 状态
- 测试用例:New, Passed, Failed(测试人员 → 产品经理 → 测试人员)
利益相关者
- productmanager:产品管理
- programmanager:项目管理
- architect:解决方案架构
- developer:开发团队
- tester:质量保证
故事依赖关系
故事可以依赖其他故事,以模拟复杂的项目关系:
- 多对多关系:一个故事可以依赖多个故事,多个故事也可以依赖一个故事
- 依赖验证:防止循环依赖和自依赖
- 智能排序:
list_user_stories 接口会首先返回依赖关系最少的故事
- 批量管理:可以在单个操作中添加/删除多个故事的依赖关系
- 可视化指示:UI中显示依赖计数,并提供可点击的链接
Epic依赖关系
Epics可以依赖其他Epics,以模拟复杂的项目关系:
- 多对多关系:一个Epic可以依赖多个Epics,多个Epics也可以依赖一个Epic
- 依赖验证:防止循环依赖和自依赖
- 批量管理:可以在单个操作中添加/删除多个Epics的依赖关系
- 可视化指示:UI中显示依赖计数,并提供可点击的链接
- API支持:提供完整的REST API支持Epic依赖关系管理
任务依赖关系
任务可以依赖同一用户故事中的其他任务,以模拟任务执行顺序:
- 同一用户故事约束:任务只能依赖同一用户故事中的其他任务
- 依赖验证:防止循环依赖、自依赖和跨故事依赖
- 批量管理:可以在单个操作中添加/删除多个任务的依赖关系
- 可视化指示:UI中显示依赖计数,并提供可点击的链接
- API支持:提供完整的MCP API支持任务依赖关系管理
依赖关系解决状态
所有列表操作(list_epics, list_user_stories, list_tasks)都包含一个 dependencies_resolved 布尔字段,用于指示实体的所有依赖关系是否都处于 'Closed' 状态:
- 动态计算:在列出实体时实时计算
- 过滤支持:所有列表操作都支持
dependencies_resolved 过滤参数
- 工作流可见性:帮助团队识别可开始工作的实体
- API集成:在MCP工具和REST API端点中均可使用
阶段管理
实体可以分配到自定义阶段,用于项目组织:
- 阶段:自定义阶段名称(例如:"Planning", "Development", "Testing", "Deployment")
- 阶段状态:阶段内的当前状态(例如:"Not Started", "In Progress", "Completed", "Blocked")
- 可选:阶段是完全可选的,不影响核心工作流转换
- 灵活:阶段名称为自由文本,允许自定义特定于项目的阶段
- 过滤:所有列表操作都支持按
phase 和 phase_status 参数过滤
- 设置:阶段可以在实体创建时设置,也可以通过
update_entity_status 接口更新
用户故事权限与存档
用户故事具有受限的更新权限和存档功能:
- 内容更新:所有利益相关者都可以更新标题、描述和故事点信息
- 验收标准:只有产品经理可以更新验收标准
- 存档:只有产品经理可以存档用户故事,并记录存档原因
- 已存档的故事:默认视图中隐藏,可通过
include_archived: true 参数访问
- 审计跟踪:所有内容和验收标准的更改都会被完整审计
评论系统
- 任何利益相关者都可以在任何SDLC实体上添加评论
- 支持线程讨论和对需求、实现和问题的反馈
- 维护完整的审计跟踪,记录作者和时间戳
审计跟踪
所有所有权和状态转换都会记录在审计表中,以实现完整的可追溯性。
项目文件夹访问
出于安全原因,MCP服务器需要使用项目目录路径进行显式初始化。在使用其他工具之前,必须首先调用 initialize 工具,并提供当前工作目录的路径。
示例用法
连接到MCP客户端后,你可以执行以下操作:
数据库初始化
- "使用路径 '/Users/username/my-project' 初始化数据库"
Epic管理
- "创建Epics:'用户认证系统' 和 '支付处理'"
- "列出所有打开的Epics"
用户故事创建
- "为Epic 1创建用户故事:'作为用户,我希望使用电子邮件/密码登录'(5个故事点)和 '作为用户,我希望重置我的密码'(3个故事点)"(注意:Epic ID会进行验证 - 无效引用会返回清晰的错误消息)
- "为Epic 1创建带有阶段的用户故事:'实现用户仪表盘'(8个故事点),阶段为 'Development',阶段状态为 'Planning'"
- "列出分配给开发人员且正在进行中的用户故事"
- "列出处于 'Development' 阶段的用户故事"
任务分解
- "为用户故事1创建任务:'实现密码哈希'(4小时)和 '创建登录界面'(6小时),并分配给开发人员"(注意:用户故事引用会进行验证)
- "为用户故事1创建带有阶段的任务:'编写单元测试'(3小时),阶段为 'Testing',阶段状态为 'Not Started'"
- "列出正在进行中的任务"
- "列出处于 'Testing' 阶段且状态为 'Not Started' 的任务"
- "将任务1的状态更新为 '已关闭'"
- "将任务2的阶段更新为 'Testing',阶段状态更新为 '进行中'"
故事依赖关系
- "添加依赖关系:故事2依赖于故事1,故事3依赖于故事2"
- "移除依赖关系:故事3不再依赖于故事