MCP本地任务
本地第一台MCP服务器,用于管理Slack和Microsoft 365的开发任务
一个快速、私有、令牌精简的任务管理系统,在本地运行,并通过模型上下文协议(MCP)与现有工具集成。
✨ 特性
- 🔒 本地优先和私人 -所有数据都存储在SQLite本地
- 🚀 快速 -带FTS5全文搜索的Sub-100ms缓存列表
- 🔌 可扩展 -适用于Slack、Microsoft 365等的可插拔连接助手
- 💡 代币精益 -返回紧凑型手柄;按需扩展
- 🛠️ MCP协议 -AI助手的标准stdio传输
🚀 快速开始
# Install dependencies
bun install
# Copy sample environment file and configure
cp sample.env .env
# Edit .env with your settings (Slack tokens, channels, etc.)
# Build all packages
bun run build
# Run tests
bun test
# Start MCP server
bun run dev混合搜索设置
# 1. Seed test data with invoice mismatch scenarios
cd packages/server
bun run seed:hybrid
# 2. Run benchmark (should complete in <120ms)
bun run test:hybrid
# 3. (Optional) Start Qdrant for semantic search
docker run -d \
-p 6333:6333 \
-v $(pwd)/data/qdrant_storage:/qdrant/storage \
--name qdrant \
qdrant/qdrant
# 4. (Optional) Initialize Qdrant collection
cd packages/data
bun run init-qdrant🔧 MCP工具
服务器通过MCP协议公开这些工具:
任务管理
task.create-创建一个包含标题、正文、优先级和截止日期的新任务task.list-将任务列为具有过滤和搜索功能的紧凑句柄task.expand-按ID获取完整的任务详细信息task.update-更新任务字段(状态、优先级等)task.queryHybrid-结合关键字(FTS5)+语义(Qdrant)搜索和加权排名的混合搜索
Slack集成(通过连接器)
slack.list_channels-列出可用的Slack频道slack.get_history-从频道获取消息历史记录slack.post_message-将消息发布到频道slack.summarize_messages-使用日期/频道过滤器获取格式化为AI摘要的消息
📦 项目结构
packages/
server/ # Main MCP server with SQLite storage
data/ # Analytics & vector search layer
src/
snapshot.ts # SQLite → Parquet export
duckdb-views.ts # Analytical views (today, week, overdue)
qdrant-init.ts # Vector collection setup
embedder.ts # Batch embedding (stub + OpenAI)
hybrid-search.ts # Weighted ranking merge
connectors/
slack/ # Slack integration
ms/ # Microsoft 365 integration
template/ # Echo helper example
docs/
PROJECT_PLAN.md # Full project specification
helpers.md # Guide for writing connection helpers
HYBRID_SEARCH_GUIDE.md # Hybrid search setup and usage
config.json # Helper configuration🧩 可扩展性
配置系统
MAGI Core使用双文件配置系统:
config.json-定义要加载的助手及其模块路径.env-包含所有配置值(机密、通道、设置)
环境变量 始终覆盖 值在 config.json,使其易于:
- 将秘密置于版本控制之外
- 根据环境使用不同的设置
- 共享基础配置,同时根据部署进行自定义
添加连接器
编辑 config.json 定义要加载哪些助手:
{
"helpers": [
{
"name": "slack",
"module": "./packages/connectors/slack/dist/index.js",
"config": {}
}
]
}然后在中配置助手 .env:
# Slack Configuration
SLACK_APP_TOKEN=xapp-...
SLACK_BOT_TOKEN=xoxb-...
SLACK_ALLOWED_CHANNELS=#dev,#ai,#support
SLACK_USER_ID=U123456789
SLACK_SWEEPER_MINUTES=10
SLACK_ENABLE_TODO_DETECTION=true
SLACK_ENABLE_BACKGROUND_SERVICES=true两种模式:
- MCP模式 (
SLACK_ENABLE_BACKGROUND_SERVICES=false):仅限工具,无后台服务 - 守护程序模式 (
SLACK_ENABLE_BACKGROUND_SERVICES=true):全插座模式、清扫器等。
看 docs/helpers.md 获取助手编写指南和 docs/config.md 以获取完整的配置参考。
🧪 测试
# Run all tests
bun test
# Run server tests only
cd packages/server
bun test
# Run hybrid search benchmark
bun run test:hybrid当前测试覆盖率:
- ✅ 任务创建和列表
- ✅ 任务扩展
- ✅ 任务更新
- ✅ FTS关键字搜索
- ✅ 混合搜索(平均0.73ms,比120ms目标快164倍)
📚 文档
🎯 路线图
- \[x\] 混合搜索 -FTS5+Qdrant加权排名(平均0.73ms)
- \[x\] DuckDB分析 -拼花地板快照和分析视图
- \[x\] Qdrant矢量搜索 -基础设施就绪,存根嵌入器已实现
- \[x\] Markdown导出 -导出任务并提供及时建议
- \[x\] 松弛连接器 -Socket模式集成
- \[x\] Microsoft 365连接器 -Outlook+日历集成
- \[\]真正的OpenAI嵌入(目前使用存根)
- \[\]CLI/TUI用于本地使用
- \[\]高级过滤和日期范围
- \[\]查询缓存和优化
🛠️ 发展
内置:
- TypeScript -类型安全开发
- 包子 -快速JavaScript运行时和包管理器
- SQLite -配备FTS5的高性能本地数据库
- DuckDB -分析和拼花地板出口
- Qdrant -语义相似度的向量搜索
- MCP-SDK -模型上下文协议
- Vitest -快速单元测试
⚡ 演出
- 混合搜索:平均0.73ms(比120ms目标快164倍)
- 任务列表:带FTS5索引的Sub-100ms
- 关键字搜索:15个任务约0.2毫秒
- 已准备好扩大规模:通过发票不匹配场景进行了测试
📄 许可证
麻省理工学院
