使用说明
马赛克
个人工作记忆和时间跟踪MCP服务器
Mosaic是一个模型上下文协议(MCP)服务器,可帮助您使用自然语言跟踪您的工作、会议、项目和任务。使用PostgreSQL 16、SQLAlchemy 2.0异步和FastMCP构建。
特性
- ⏱️ 工作会话跟踪 具有半小时自动四舍五入功能
- 📅 会议管理 带有与会者跟踪功能
- 🏢 客户和项目组织 具有状态跟踪功能
- 📝 备注 附属于任何实体(项目、人员、会议等)
- ⏰ 提醒事项 复发和打盹
- 🔍 自然语言查询 具有日期范围、筛选器和隐私控制
- 🔐 隐私级别 敏感数据(公共、内部、私人)
- 📊 考勤卡生成 用于计费和报告
先决条件
- Python 3.14+ (或3.11+)
- PostgreSQL 16 (任何PostgreSQL实例-本地、Docker、云托管等)
- 紫外线 包管理器(用于本地开发)
快速开始使用uvx
从git仓库运行Mosaic的最快方法:
# Run directly with uvx (automatically installs and runs)
uvx --from git+https://github.com/jarosser06/mosaic mosaic
# Or from a local clone
git clone https://github.com/jarosser06/mosaic
cd mosaic
uvx --from . mosaic
跑步前,确保您拥有:
- PostgreSQL 16正在运行且可访问
- 创建了一个
.env与数据库连接的文件(请参阅下面的配置) - 运行数据库迁移:
uvx --from . alembic upgrade head
地方发展设置
1.克隆和安装
git clone https://github.com/jarosser06/mosaic
cd mosaic
uv sync
2.设置PostgreSQL
你需要一个PostgreSQL 16实例。选择以下选项之一:
选项A:使用Docker(推荐用于开发)
cd docker
docker-compose up -d postgres
cd ..
这将在端口上启动PostgreSQL 16 5433.
选项B:使用现有的PostgreSQL
连接到任何PostgreSQL 16+实例(本地、RDS、Cloud SQL等)。
3.配置环境
cp .env.example .env
编辑 .env 使用您的PostgreSQL连接详细信息:
# Database Configuration
DATABASE_URL=postgresql+asyncpg://username:password@host:port/database
# Example for Docker setup
DATABASE_URL=postgresql+asyncpg://mosaic:changeme_supersecret_password@localhost:5433/mosaic
# Example for local PostgreSQL
DATABASE_URL=postgresql+asyncpg://myuser:mypass@localhost:5432/mosaic
# Example for cloud PostgreSQL (AWS RDS, etc.)
DATABASE_URL=postgresql+asyncpg://admin:secret@mydb.region.rds.amazonaws.com:5432/mosaic
4.运行数据库迁移
uv run alembic upgrade head
5.运行服务器
# Using the installed script
uv run mosaic
# Or directly
uv run python -m mosaic.server
服务器将:
- 初始化数据库
- 启动提醒计划程序
- 注册18个MCP工具
- 等待通过stdin进行MCP协议通信
连接到克劳德代码
将Mosaic添加到您的Claude Code MCP配置中:
macOS/Linux: ~/.config/claude/claude_desktop_config.json
对于uvx(来自git):
{
"mcpServers": {
"mosaic": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/jarosser06/mosaic",
"mosaic"
],
"env": {
"DATABASE_URL": "postgresql+asyncpg://mosaic:changeme_supersecret_password@localhost:5433/mosaic"
}
}
}
}
对于当地发展:
{
"mcpServers": {
"mosaic": {
"command": "uv",
"args": ["run", "mosaic"],
"cwd": "/absolute/path/to/mosaic"
}
}
}
然后重新启动Claude Code。
桌面通知设置
Mosaic使用本地桌面通知进行提醒。安装要求因平台而异:
macOS 10.14+(关键-需要两个步骤)
macOS需要 两者:
- A. 已签名的Python可执行文件 (Homebrew Python默认不签名)
- 通知权限 在系统设置中授予Python
测试通知是否有效:
uv run python scripts/test_notifications.py
常见问题:
- ✅ 脚本显示“成功”,但未显示通知
- ✅ 错误:“此应用程序不允许通知”
这意味着需要授予通知权限!
第一步:签署Homebrew Python
# Ad-hoc signature (sufficient for local use)
codesign -s - $(which python3)
# Or sign with your Apple Developer certificate
codesign -s "Your Name" $(which python3)
步骤2:授予通知权限
签名后,授予通知权限:
- 运行测试脚本:
uv run python scripts/test_notifications.py - 如果您看到权限提示,请单击“允许”
- 如果出现“否”提示:
- 打开 系统设置 → 通知
- 找到 马赛克 在列表中
- 启用 “允许通知”
- 将样式设置为 “警报” (不仅仅是“横幅”)
备注:签名并授予权限后,您可能需要重新启动终端。
替代方案:使用python.org python
从以下位置安装Python python.org 而不是Homebrew。官方安装程序提供了一个签名正确的Python框架。
# After installing from python.org
which python3 # Should show /Library/Frameworks/Python.framework/...
仍需要授予通知权限 (见上述步骤2)。
选项3:与PyInstaller捆绑
如果您将Mosaic与PyInstaller冻结/捆绑在一起,请对生成的应用程序捆绑包进行签名:
codesign -s - path/to/mosaic.app
Linux
无需签名。通知使用D-Bus开箱即用。
视窗
无需签名。使用本机Windows Toast通知。
验证通知是否有效
设置后,测试通知:
# Test script checks signing and sends test notification
uv run python scripts/test_notifications.py
你应该看到一个通知,上面写着“如果你看到这个,通知正在工作!🎉"
可用的MCP工具(20)
测井工具(8)
| 工具 | 说明 |
|---|---|
log_work_session |
使用自动半小时四舍五入功能跟踪工作时间 |
log_meeting |
记录与与会者和可选项目协会的会议 |
add_person |
添加带有公司、职务、备注、标签的联系人 |
add_client |
添加具有状态跟踪功能的客户(公司或个人) |
add_project |
创建与客户和雇主链接的项目 |
add_employer |
追踪你的工作经历 |
add_note |
向任何实体添加注释或创建独立注释 |
add_reminder |
创建一次性或定期提醒 |
查询工具(1)
| 工具 | 说明 |
|---|---|
query |
支持日期范围、实体过滤器、隐私过滤、文本搜索、标签、状态和复杂组合的自然语言查询 |
更新工具(8)
| 工具 | 说明 |
|---|---|
update_work_session |
修改时间、描述、标签、隐私 |
update_meeting |
更新标题、描述、与会者、项目 |
update_person |
更新联系方式、公司、职位 |
update_client |
更改姓名、状态、联系人 |
update_project |
修改描述、状态、标签 |
update_note |
编辑内容、隐私、标签 |
complete_reminder |
标记提醒完成(如果重复,则创建下一次提醒) |
snooze_reminder |
将提醒推迟到以后 |
通知工具(1)
| 工具 | 说明 |
|---|---|
trigger_notification |
发送桌面通知(跨平台:macOS、Windows、Linux) |
使用示例
跟踪工作时间
"Log 2.5 hours of work on the API project"
"I worked on the frontend from 9am to 11:30am yesterday"
根据业务规则,工作会话会自动四舍五入为半小时增量。
记录会议
"Log a meeting with John Smith about the Q1 roadmap from 2pm to 3pm"
"Add a 30-minute standup meeting with the team"
查询您的工作
"Show me all work sessions from last week"
"What meetings did I have with Acme Corp this month?"
"Find all notes tagged 'urgent'"
"Show public work sessions for timecard generation"
管理项目
"Create a project called 'Website Redesign' for Acme Corp"
"Add a note to the API project: 'Need to implement rate limiting'"
"Set the website project status to active"
发展
项目结构
mosaic/
├── src/mosaic/
│ ├── server.py # MCP server entry point
│ ├── config.py # Pydantic settings
│ ├── models/ # SQLAlchemy models (11 entities)
│ ├── repositories/ # Data access layer
│ ├── services/ # Business logic
│ ├── tools/ # MCP tool implementations (18 tools)
│ └── schemas/ # Pydantic validation schemas
├── tests/
│ ├── unit/ # Model, service, repository tests
│ └── integration/ # End-to-end MCP tool tests
├── alembic/ # Database migrations
├── docker/ # Optional Docker setup
└── pyproject.toml # Dependencies and config
运行测试
# Run all tests with coverage (requires 90%+)
uv run pytest
# Run specific test file
uv run pytest tests/integration/test_query_tool.py
当前覆盖范围: 93.13%(超过90%要求)
代码质量
该项目执行严格的代码质量标准:
# Format code
uv run black src/ tests/
# Sort imports
uv run isort src/ tests/
# Linting
uv run flake8 src/ tests/
# Install pre-commit hooks (runs all checks on commit)
uv run pre-commit install
# Run all checks manually
uv run pre-commit run --all-files
所有四个过梁必须通过:
- ✅ 黑色 -代码格式
- ✅ 排序 -导入排序
- ✅ 薄片8 -Linting
- ✅⚠️米皮 -类型检查
数据库迁移
# Create a new migration after model changes
uv run alembic revision --autogenerate -m "Description of changes"
# Apply migrations
uv run alembic upgrade head
# Rollback one migration
uv run alembic downgrade -1
# View migration history
uv run alembic history
# Check current version
uv run alembic current
重要提示: 跑 black 关于生成的迁移:
uv run black alembic/versions/xxx_your_migration.py
关键业务规则
半小时时间四舍五入
工作会话会自动四舍五入为半小时增量:
| 实际持续时间 | 四舍五入持续时间 |
|---|---|
| 0:01-0:30 | 0.5小时 |
| 0:31-1:00 | 1.0小时 |
| 1:01-1:30 | 1.5小时 |
| 1:31-2:00 | 2.0小时 |
示例:
- 15分钟→ 0.5 hours
- 31分钟→ 1.0 hours
- 2:15 → 2.5 hours
- 2:40 → 3.0 hours
隐私级别
三个隐私级别控制数据可见性:
- 公共 -可在外部共享(例如,用于客户考勤卡)
- 内部 -仅供内部使用(例如,团队报告)
- 私有的 -敏感数据(从所有导出中过滤)
违约: 私人(出于安全考虑)
适用于:工作会议、会议、笔记
提醒重复
提醒支持每日、每周和每月重复:
- 每日 -每天同一时间
- 周刊 -每周同一天/同一时间
- 每月 -每月相同日期
完成后,定期提醒会自动创建下一个事件。
技术栈
- FastMCP -带stdio传输的MCP服务器框架
- SQLAlchemy 2.0 -使用asyncpg驱动程序异步ORM
- PostgreSQL 16 -主数据库
- Pydantic 2.x -架构验证和设置
- APScheduler 4.x -用于提醒的异步调度程序
- 蒸馏器 -数据库迁移
- 测试 -覆盖率超过93%的测试框架
架构模式
- 存储库模式 -干净的数据访问抽象
- 服务层 -业务逻辑分离
- 异步/等待 -SQLAlchemy 2.0的完整异步堆栈
- 可识别联合 -类型安全的多态查询结果
- 隐私过滤 -在所有查询中实施一致的隐私保护
故障排除
数据库连接错误
错误: DATABASE_URL environment variable is not set
解决方案: 确保你有一个 .env 文件 DATABASE_URL 配置或将其设置为环境变量。
端口已在使用中
提供的 docker-compose.yml 使用端口 5433 默认情况下,为了避免与端口上的本地PostgreSQL安装发生冲突 5432.
要使用其他端口,请执行以下操作:
- 编辑
docker/docker-compose.yml和改变"5433:5432"到您想要的港口 - 更新
DATABASE_URL在.env匹配
迁移错误
错误: Target database is not up to date
解决方案:
uv run alembic upgrade head
新数据库启动
要完全重置数据库,请执行以下操作:
如果使用Docker:
cd docker
docker-compose down -v # Removes volumes
docker-compose up -d postgres
cd ..
uv run alembic upgrade head
如果使用外部PostgreSQL:
# Drop and recreate your database using your PostgreSQL client
# Then run migrations
uv run alembic upgrade head
环境变量
中的必需变量 .env:
# Database connection (REQUIRED)
DATABASE_URL=postgresql+asyncpg://user:pass@host:port/db
# APScheduler job store (optional, defaults to same as DATABASE_URL)
APSCHEDULER_JOB_STORE_URL=postgresql+asyncpg://user:pass@host:port/db
# Application settings (optional)
LOG_LEVEL=INFO
ENVIRONMENT=development
# Notification settings (optional, requires notification bridge)
NOTIFICATION_ENABLED=true
NOTIFICATION_SOUND=default
NOTIFICATION_BRIDGE_URL=http://host.docker.internal:8765
Docker部署(可选)
开发(仅限PostgreSQL)
cd docker
docker-compose up -d postgres
生产(全栈)
# Build image
docker build -f docker/Dockerfile -t mosaic:latest .
# Run with docker-compose
cd docker
docker-compose up -d
PostgreSQL配置了健康检查以确保可用性。
贡献
有关详细的开发指南和多代理系统文档,请参阅 CLAUDE.md.
开发标准
- ✅ 90%+测试覆盖率 (由pytest强制执行)
- ✅ 所有过梁必须通过 (黑色、等色、片状8)
- ✅ 需要键入提示 (mypy严格模式)
- ✅ 异步/等待模式 (SQLAlchemy 2.0风格)
许可证
麻省理工学院
