YST KPI Daily Report Collector
Automatically collects daily report data from KPI systems using browser automation and Google OAuth login. Generates structured Markdown reports for specified date ranges with persistent session management.
README
YST KPI 日报采集 MCP 服务
基于 FastMCP 开发的日报数据自动采集工具,支持从 KPI 系统批量采集指定月份范围的日报数据,并自动生成 Markdown 格式报告。
功能特性
- ✅ 自动登录:使用 Playwright 自动打开浏览器,完成 Google OAuth 登录
- ✅ 持久化会话:登录一次长期有效,会话数据自动保存
- ✅ 批量采集:支持一次性采集多个月份的日报数据
- ✅ 智能检测:自动识别登录状态,7秒检测间隔,不卡顿
- ✅ 格式化输出:自动生成结构化 Markdown 报告
- ✅ 灵活配置:支持自定义输出路径和采集范围
环境要求
- Python: >= 3.10
- 包管理器: uv
- 浏览器: Chromium(Playwright 自动安装)
- 网络: 能访问
https://kpi.drojian.dev
安装配置
1. 安装依赖
cd /Users/admin/go/empty/python/yst_mcp
# 使用 uv 同步依赖
uv sync
# 激活虚拟环境
source .venv/bin/activate
# 安装 Playwright 浏览器
playwright install chromium
2. 配置到 Claude Desktop(MCP 使用)
编辑 Claude Desktop 的 MCP 配置文件:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
添加以下配置:
{
"mcpServers": {
"yst-mcp": {
"command": "uv",
"args": [
"--directory",
"/Users/admin/go/empty/python/yst_mcp",
"run",
"fastmcp",
"run",
"server.py"
]
}
}
}
注意:请将路径 /Users/admin/go/empty/python/yst_mcp 修改为你的实际项目路径。
保存后,重启 Claude Desktop 即可生效。
MCP 使用方法
快速开始
在 Claude Desktop 中直接对话:
使用 yst_mcp 采集 2025-07 到 2025-09 的日报
首次使用会自动打开浏览器,完成 Google 登录后,系统会自动:
- 提取并保存 Cookie
- 保存浏览器会话
- 采集指定月份的日报
- 生成 Markdown 文件
MCP 工具列表
| 工具名称 | 功能说明 | 是否必需 |
|---|---|---|
collect_reports |
采集日报(自动登录) | 核心工具 |
browser_login |
手动打开浏览器登录 | 可选 |
check_login_status |
检查登录状态 | 辅助工具 |
clear_saved_cookies |
清除登录信息 | 辅助工具 |
save_cookies_from_browser |
手动保存 Cookie(已弃用) | 已弃用 |
使用示例
示例 1:基本采集(推荐)
使用 yst_mcp 采集 2025-04 到 2025-06 的日报
示例 2:自定义输出路径
用 yst_mcp 采集 2025-07 月的日报,保存到 /Users/admin/Downloads/july.md
示例 3:检查登录状态
使用 yst_mcp 检查登录状态
示例 4:清除登录信息
使用 yst_mcp 清除 Cookie
本地调试方法
方法 1:测试脚本(推荐)
项目提供了 test_login.py 测试脚本,用于调试登录功能:
# 激活虚拟环境
source .venv/bin/activate
# 运行测试脚本
python test_login.py
测试脚本会:
- 启动浏览器
- 打开登录页面
- 等待你完成登录
- 检测登录状态
- 保存 Cookie 和会话
方法 2:开发模式运行
# 使用 FastMCP 开发模式(带热重载)
uv run fastmcp dev server.py
# 或者生产模式
uv run fastmcp run server.py
方法 3:直接调用函数
# 创建测试文件 test_collect.py
import asyncio
from report_collector import ReportCollector
async def test():
collector = ReportCollector()
result = await collector.collect("2025-07", "2025-09", "output.md")
print(result)
asyncio.run(test())
工具详细说明
1. collect_reports(核心工具)
采集指定月份范围的日报数据。
参数:
start_month(必需): 起始月份,格式YYYY-MM,如2025-07end_month(必需): 结束月份,格式YYYY-MM,如2025-09output_file(可选): 输出文件路径,默认data/new.mdauto_login(可选): 是否自动登录,默认true
返回:采集结果描述(成功/失败信息)
示例:
采集 2025-07 到 2025-09 的日报,保存到 /Users/admin/Downloads/reports.md
2. browser_login
手动打开浏览器进行登录(一般不需要,collect_reports 会自动调用)。
参数:
use_persistent(可选): 是否使用持久化浏览器,默认truetimeout(可选): 登录超时时间(秒),默认300
返回:登录结果
3. check_login_status
检查当前登录状态,确认 Cookie 是否有效。
参数:无
返回:
✓ 已登录,Cookie 有效- 可以正常采集❌ Cookie 已过期- 需要重新登录❌ 未找到保存的 Cookie- 首次使用,需要登录
4. clear_saved_cookies
清除保存的登录信息(Cookie 和浏览器会话)。
参数:无
返回:清除结果
注意:清除后需要重新登录!同时会删除:
data/cookies.jsondata/browser_profile/目录(19MB 浏览器会话数据)
5. save_cookies_from_browser(已弃用)
手动保存浏览器 Cookie 字符串。
推荐:直接使用 collect_reports 或 browser_login,无需手动保存 Cookie。
目录结构
python/yst_mcp/
├── server.py # MCP 服务主入口(5 个工具)
├── browser_login.py # 浏览器自动登录模块
├── cookie_manager.py # Cookie 持久化管理
├── report_collector.py # 日报采集核心逻辑
├── test_login.py # 登录测试脚本
├── pyproject.toml # uv 项目配置
├── README.md # 使用说明(本文件)
├── .venv/ # 虚拟环境
└── data/
├── cookies.json # Cookie 存储文件(8KB)
├── browser_profile/ # 浏览器持久化会话(19MB)
└── new.md # 默认输出文件
工作原理
1. 登录流程
graph LR
A[检查登录状态] --> B{Cookie有效?}
B -->|是| F[采集数据]
B -->|否| C[启动浏览器]
C --> D[Google OAuth 登录]
D --> E[保存Cookie和会话]
E --> F
详细步骤:
- 检查
data/cookies.json和data/browser_profile/是否存在 - 如果不存在,启动 Playwright 浏览器
- 打开
https://kpi.drojian.dev/report/report-daily/my-list - 等待用户完成 Google OAuth 登录
- 每 7 秒检测一次登录状态:
- URL 包含
kpi.drojian.dev→ 已登录 - URL 包含
my-list→ 登录成功
- URL 包含
- 提取 Cookie 并保存到
data/cookies.json - 浏览器会话保存到
data/browser_profile/
2. 数据采集流程
遍历月份 → 访问页面 → 解析HTML → 提取数据 → 生成Markdown
详细步骤:
- 遍历起始月份到结束月份(如 2025-07 到 2025-09)
- 对每个月份,访问:
https://kpi.drojian.dev/report/report-daily/my-list?month=YYYY-MM - 使用 requests + Cookie 获取页面内容
- 使用 BeautifulSoup 解析 HTML,提取
#report_list li元素 - 提取日报信息:
- 标题(包含日期、时间、早/晚报标记)
- 内容(今日计划、今日完成等)
- 按月份组织数据,生成 Markdown 文件
3. 输出格式
# YST 日报整理
生成时间:2025-10-05 10:43:48
## 2025-07 月份日报 (22 条)
### 1. 2025-07-30早报:09:41weather(#郑潇)
当前任务:线上服务开发和测试
今日计划:
1. weather配合继续测试
2. 冷备份数据继续处理
...
---
### 2. 2025-07-29早报:09:12weather(#郑潇)
...
注意事项
安全性
- ⚠️ Cookie 安全:
data/cookies.json包含登录凭证,请勿分享或提交到 Git - ⚠️ 会话数据:
data/browser_profile/包含完整浏览器会话,请勿分享 - ✅ 建议:在
.gitignore中添加:data/cookies.json data/browser_profile/
性能优化
- 检测间隔:登录检测间隔为 7 秒,避免频繁检查
- 超时时间:登录超时时间为 5 分钟(300 秒)
- 持久化会话:首次登录后,浏览器会话自动保存,下次无需重复登录
已知限制
- 网络依赖:需要稳定的网络连接访问
kpi.drojian.dev - 页面结构:依赖页面 HTML 结构(
#report_list),如有变化需调整解析逻辑 - 浏览器依赖:需要 Chromium 浏览器(Playwright 自动管理)
常见问题
Q1: 登录一直卡住不动?
现象:已经登录了,但检测还在等待
原因:登录后停留在其他页面(如 /work/app/index),未跳转到日报页面
解决:最新版本已修复,会自动检测登录状态并跳转到日报页面
Q2: 提示 Cookie 无效?
解决方法:
# 方法 1:使用 MCP 工具
使用 yst_mcp 清除 Cookie
使用 yst_mcp 采集 2025-07 到 2025-09 的日报 # 会自动重新登录
# 方法 2:手动清理
rm -rf data/cookies.json data/browser_profile/
Q3: 浏览器启动失败?
错误信息:Executable doesn't exist at .../chromium-1187/...
解决方法:
# 安装 Playwright 浏览器
source .venv/bin/activate
playwright install chromium
Q4: 网络连接错误?
错误信息:net::ERR_CONNECTION_RESET
解决方法:
- 检查网络连接
- 确认能访问
https://kpi.drojian.dev - 最新版本已添加错误处理,会自动重试
Q5: 如何完全清除登录信息?
# 清除所有登录数据(Cookie + 浏览器会话)
rm -rf data/cookies.json
rm -rf data/browser_profile/
注意:
clear_saved_cookies只清除cookies.json- 浏览器会话保存在
browser_profile/(19MB) - 完全清除需要删除两者
Q6: 可以同时采集多个不同的月份范围吗?
可以,但需要分多次调用。例如:
采集 2025-01 到 2025-03 的日报,保存到 q1.md
采集 2025-04 到 2025-06 的日报,保存到 q2.md
Q7: 输出文件可以放在任意位置吗?
可以!支持绝对路径和相对路径:
# 绝对路径
保存到 /Users/admin/Downloads/report.md
# 相对路径(相对于项目目录)
保存到 reports/2025-07.md
开发者信息
- 项目类型: MCP 服务
- 开发框架: FastMCP
- Python 版本: >= 3.10
- 包管理: uv
- 浏览器自动化: Playwright (async API)
- HTTP 请求: requests + BeautifulSoup4
- 数据格式: Markdown
更新日志
v2.0 (2025-10-05)
- ✅ 使用 Playwright 实现自动登录
- ✅ 持久化浏览器会话
- ✅ 优化登录检测逻辑(7秒间隔)
- ✅ 自动识别已登录状态并跳转
- ✅ 添加错误处理和重试机制
v1.0 (2025-10-02)
- ✅ 基础日报采集功能
- ✅ Cookie 持久化存储
- ✅ Markdown 格式输出
技术支持
如遇问题,请检查:
- ✅ Python 版本 >= 3.10
- ✅ 已执行
uv sync安装依赖 - ✅ 已执行
playwright install chromium - ✅ 网络能访问
https://kpi.drojian.dev - ✅ MCP 配置路径正确
更多问题请查看常见问题部分。
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Neon Database
MCP server for interacting with Neon Management API and databases