freelancer-focus-calendar
An MCP server for freelancers to manage events and tasks with CRUD, calendar views, webhook reminders, and Google Calendar sync.
README
Freelancer's Focus Calendar (MCP 服务) — 自由职业者日程管理
一个面向自由职业者的轻量级日程/待办管理服务:事件 CRUD、Webhook 提醒、日/周/月视图、Google Calendar 双向同步(逐步实现)。提供清晰的 API 以及 MCP 集成(以工具形式暴露)。
功能概览
- 事件管理(CRUD):标题、开始/结束时间、描述、客户名称、标签
- 提醒(Webhook 回调):签名、重试、幂等等(逐步实现)
- 日历视图:日/周/月查询与过滤
- Google Calendar 双向同步(OAuth2,增量同步,逐步实现)
- OpenAPI 文档(随 FastAPI 自动提供)
快速开始
先决条件
- Python 3.11+(建议 3.11 或 3.12)
- Windows/WSL/macOS/Linux 均可
- 推荐使用 uv(https://github.com/astral-sh/uv)进行依赖管理
安装依赖
优先使用 uv:
uv sync
若本机没有 uv,可用 pip 直接安装关键依赖:
python -m pip install -U pip
pip install fastapi "uvicorn[standard]" sqlmodel apscheduler httpx python-dotenv \
google-api-python-client google-auth-httplib2 google-auth-oauthlib "mcp[cli]"
MCP配置
{ "mcpServers":{ "mcp-calendar-focus": { "disabled": false, "timeout": 60, "type": "sse", "url": "http://127.0.0.1:8000/sse" } } }
运行开发服务器
uv run uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
# 或(未安装 uv)
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
启动后:
- 健康检查: http://127.0.0.1:8000/healthz
- OpenAPI 文档: http://127.0.0.1:8000/docs
环境变量与配置
在项目根目录创建 .env(开发示例):
API_KEY=DEV-KEY-CHANGE-ME
TZ=Asia/Shanghai
DATABASE_URL=sqlite:///./data.db
# Google OAuth(待接入阶段使用)
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret
GOOGLE_REDIRECT_URI=http://127.0.0.1:8000/auth/google/callback
# Webhook 签名密钥(可注册多个 webhook 时每条记录自带 secret)
WEBHOOK_DEFAULT_SECRET=change-me
说明:
- API_KEY:比赛阶段可采用简单的 Header 认证(X-API-Key),后续可扩展为多租户/用户体系。
- TZ:服务内部的用户默认时区(可后续按用户维度存储)。
- DATABASE_URL:MVP 使用 SQLite,后续可切换 Postgres。
简单示例
当前已实现接口:
- 健康检查(healthz)
示例 1:健康检查
curl -s http://127.0.0.1:8000/healthz
# {"status":"ok"}
示例 2: “创建一个8月16日10点到11点,标题为 Design Review,客户 ACME,标签 design/review 的事件,并返回事件ID” “列出8月16日当天 ACME 的事件” “给我 2025-08-16 的日视图,时区 Asia/Shanghai”
即将提供(实现中,参考 PRD 的字段约定):
- 创建事件:POST /events
- 查询事件:GET /events?start=&end=&tags=&client_name=&q=
- 更新事件:PATCH /events/:id
- 删除事件:DELETE /events/:id
- 日历视图:GET /calendar?date=&view=day|week|month
- Webhook 注册/管理:POST /webhooks, DELETE /webhooks/:id
- Google OAuth:GET /auth/google/start, GET /auth/google/callback
- 同步:POST /sync/google/pull, POST /sync/google/push
待事件接口完成后,你可以这样创建一个事件(示例请求体,非最终,以实现为准):
curl -X POST http://127.0.0.1:8000/events \
-H "Content-Type: application/json" \
-H "X-API-Key: DEV-KEY-CHANGE-ME" \
-d '{
"title": "Design Review",
"start_time": "2025-08-16T10:00:00+08:00",
"end_time": "2025-08-16T11:00:00+08:00",
"description": "Review with client",
"client_name": "ACME",
"tags": ["design","review"]
}'
Webhook 调试建议
- 开发期可使用 https://webhook.site 或 ngrok/cloudflared 将本地端口暴露到公网。
- 回调请求将包含签名头 X-Signature(HMAC-SHA256(body, secret));接收端需校验后返回 2xx。
- 失败会按指数退避重试(如 1m / 5m / 15m / 1h,达到上限停止)。
Google OAuth 配置要点(后续阶段)
- 前往 Google Cloud Console 创建 OAuth 同意屏幕与 OAuth Client(Web)。
- 回调 URI 设为:
http://127.0.0.1:8000/auth/google/callback(或你的部署域名)。 - 将生成的 CLIENT_ID、CLIENT_SECRET 填入 .env。
- 首版采用轮询增量同步(syncToken),后续可支持 Push Notifications(watch channels)。
MCP 集成配置(示例)
当前项目将提供一个 MCP Server(stdio)用于把日程能力暴露为「工具」,便于在 AI 客户端中直接调用。MCP 入口将在后续文件(例如 servers/calendar_mcp.py)中实现,以下为未来可用的客户端配置示例。
以 Claude Desktop(settings.json)为例:
{
"mcpServers": {
"freelancer-calendar": {
"command": "uv",
"args": [
"run",
"python",
"servers/calendar_mcp.py"
],
"env": {
"CALENDAR_API_BASE": "http://127.0.0.1:8000",
"API_KEY": "DEV-KEY-CHANGE-ME"
}
}
}
}
MCP 侧将暴露的典型工具(规划中):
- create_event(title, start_time, end_time?, description?, client_name?, tags?)
- list_events(start, end, filters?)
- get_calendar(date, view, filters?)
- register_webhook(url, secret?, filters?)
- sync_google(direction?) // pull, push
说明:
- 以上为“配置示例”,帮助你在完成 MCP 入口后快速集成到 Claude Desktop 或其他支持 MCP 的客户端。
- 你也可以使用
mcp[cli]自带的客户端进行本地调试。
路线图(与 docs/tasks.md 同步)
- 阶段一:项目初始化(进行中)
- 阶段二:事件管理(CRUD)
- 阶段三:日/周/月视图
- 阶段四:Webhook 提醒
- 阶段五:Google Calendar 双向同步
- 阶段六:安全与文档
- 阶段七:演示与样例
许可
本仓库用于比赛演示,若用于生产请补充 License 与合规说明。
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。