工作记忆与时间跟踪服务器

Mosaic是一个基于Model Context Protocol (MCP)的服务器,帮助用户通过自然语言跟踪工作、会议、项目和任务,适用于个人工作管理和团队协作。

  • by jarosser06
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 jarosser06/mosaic

使用说明

马赛克

个人工作记忆和时间跟踪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

跑步前,确保您拥有:

  1. PostgreSQL 16正在运行且可访问
  2. 创建了一个 .env 与数据库连接的文件(请参阅下面的配置)
  3. 运行数据库迁移: 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需要 两者:

  1. A. 已签名的Python可执行文件 (Homebrew Python默认不签名)
  2. 通知权限 在系统设置中授予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:授予通知权限

签名后,授予通知权限:

  1. 运行测试脚本: uv run python scripts/test_notifications.py
  2. 如果您看到权限提示,请单击“允许”
  3. 如果出现“否”提示:
    • 打开 系统设置 → 通知
    • 找到 马赛克 在列表中
    • 启用 “允许通知”
    • 将样式设置为 “警报” (不仅仅是“横幅”)

备注:签名并授予权限后,您可能需要重新启动终端。

替代方案:使用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.

要使用其他端口,请执行以下操作:

  1. 编辑 docker/docker-compose.yml 和改变 "5433:5432" 到您想要的港口
  2. 更新 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风格)

许可证

麻省理工学院