Name | f-work-mcp JSON |
Version |
1.0.0
JSON |
| download |
home_page | None |
Summary | A MCP server for tracking work progress and generating daily reports with Python file diff analysis |
upload_time | 2025-07-30 01:45:41 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.10 |
license | MIT |
keywords |
daily-report
git
mcp
productivity
python
work-tracking
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Work Daily Report MCP Server
一个基于 MCP (Model Context Protocol) 的工作日报生成服务器,能够自动跟踪代码变更并生成详细的工作日报。**特别增强了对Python文件的差异分析功能,为大语言模型提供详细的代码变更信息。**
## 功能特性
### 🚀 核心功能
- **上班工具** (`work_start`): 记录工作开始时的代码状态
- **下班工具** (`work_end`): 记录工作结束状态并生成日报
- **状态查询** (`get_work_status`): 获取当前工作状态
- **日报查询** (`get_daily_report`): 获取指定日期的日报
- **文件差异分析** (`get_python_file_diff`): 获取指定Python文件的详细差异
### 📊 跟踪内容
- Git 提交记录和状态
- 文件修改、新增、删除情况
- **Python文件内容差异分析** ⭐
- 工作时长统计
- 代码变更摘要
- 分支信息
### 🔧 扩展功能
- 自动补全支持
- 自定义 HTTP 路由
- 资源访问接口
- 提示词生成
### 🐍 Python文件差异功能 ⭐
- **完整内容跟踪**: 记录所有Python文件的完整内容
- **精确差异分析**: 使用difflib生成标准化的差异格式
- **行数统计**: 统计新增、删除、修改的代码行数
- **变更类型识别**: 区分新增、修改、删除的文件
- **LLM友好格式**: 提供结构化的差异数据,便于大语言模型分析
## 安装和运行
### 1. 安装依赖
```bash
uv sync
```
### 2. 运行服务器
```bash
uv run mcp dev main.py
```
### 3. 使用 MCP Inspector
服务器启动后,会打开浏览器访问 MCP Inspector 界面,你可以在那里测试所有功能。
## 使用方法
### 上班时
```python
# 记录工作开始状态(包含Python文件内容)
work_start(working_directory=".")
```
### 下班时
```python
# 记录工作结束状态并生成日报(包含代码差异)
work_end(working_directory=".")
```
### 查询状态
```python
# 获取当前工作状态
get_work_status(working_directory=".")
# 获取指定日期的日报
get_daily_report(date="2024-01-15")
# 获取指定Python文件的详细差异
get_python_file_diff(file_path="main.py")
```
## 工具详解
### 1. work_start
**功能**: 记录工作开始状态(包含Python文件内容)
**参数**:
- `working_directory` (str): 工作目录路径,默认为当前目录
**返回**:
```json
{
"success": true,
"message": "工作开始状态已记录",
"timestamp": "2024-01-15T09:00:00",
"working_directory": "/path/to/project",
"branch_name": "main",
"total_files": 150,
"modified_files_count": 5,
"git_commits_count": 25,
"python_files_count": 12
}
```
### 2. work_end
**功能**: 记录工作结束状态并生成日报(包含代码差异)
**参数**:
- `working_directory` (str): 工作目录路径,默认为当前目录
**返回**:
```json
{
"success": true,
"message": "工作结束状态已记录,日报已生成",
"report": {
"date": "2024-01-15",
"work_start_time": "09:00",
"work_end_time": "18:00",
"working_hours": 9.0,
"total_commits": 3,
"modified_files_count": 5,
"new_files_count": 2,
"deleted_files_count": 1,
"work_summary": "完成了 3 次代码提交,修改了 5 个文件,新增了 2 个文件,删除了 1 个文件。",
"code_changes_summary": "Python代码变更: 修改文件 main.py (+15 -3 行), 新增文件 utils.py (25 行)。 总计: +40 -3 行代码。",
"report_path": ".work_tracker/reports/daily_report_2024-01-15.json"
},
"details": {
"modified_files": ["main.py", "README.md"],
"new_files": ["utils.py", "config.py"],
"deleted_files": ["old_file.txt"],
"commits": [...],
"python_file_diffs": [
{
"file_path": "main.py",
"diff_type": "modified",
"added_lines": 15,
"deleted_lines": 3,
"changed_lines": 18,
"diff_preview": [
"@@ -10,6 +10,8 @@",
" from mcp.server.fastmcp import FastMCP",
"+from mcp.types import Completion, CompletionArgument",
"+from mcp.types import PromptReference, ResourceTemplateReference",
" ",
" # Create an MCP server",
" mcp = FastMCP(\"Demo\")",
"+",
"+# Add completion support",
"+@mcp.completion()",
"+async def handle_completion(ref, argument, context):",
"+ return Completion(values=[\"option1\", \"option2\"])"
]
}
]
}
}
```
### 3. get_work_status
**功能**: 获取当前工作状态
**参数**:
- `working_directory` (str): 工作目录路径,默认为当前目录
**返回**:
```json
{
"success": true,
"current_time": "2024-01-15T14:30:00",
"working_directory": "/path/to/project",
"branch_name": "main",
"total_files": 150,
"modified_files": ["main.py"],
"modified_files_count": 1,
"git_commits_count": 25,
"python_files_count": 12,
"today_work_sessions": 1,
"has_work_start": true
}
```
### 4. get_daily_report
**功能**: 获取指定日期的日报
**参数**:
- `date` (str): 日期格式 YYYY-MM-DD,默认为今天
**返回**:
```json
{
"success": true,
"date": "2024-01-15",
"report": {
"date": "2024-01-15",
"work_start_time": "09:00",
"work_end_time": "18:00",
"working_hours": 9.0,
"total_commits": 3,
"modified_files": ["main.py"],
"new_files": ["utils.py"],
"deleted_files": [],
"python_file_diffs": [...],
"commit_summary": [...],
"work_summary": "完成了 3 次代码提交,修改了 1 个文件,新增了 1 个文件。",
"code_changes_summary": "Python代码变更: 修改文件 main.py (+15 -3 行), 新增文件 utils.py (25 行)。 总计: +40 -3 行代码。"
}
}
```
### 5. get_python_file_diff ⭐
**功能**: 获取指定Python文件的详细差异信息
**参数**:
- `file_path` (str): Python文件路径
- `working_directory` (str): 工作目录路径,默认为当前目录
**返回**:
```json
{
"success": true,
"file_path": "main.py",
"diff_type": "modified",
"added_lines": 15,
"deleted_lines": 3,
"changed_lines": 18,
"diff_lines": [
"@@ -10,6 +10,8 @@",
" from mcp.server.fastmcp import FastMCP",
"+from mcp.types import Completion, CompletionArgument",
"+from mcp.types import PromptReference, ResourceTemplateReference",
" ",
" # Create an MCP server",
" mcp = FastMCP(\"Demo\")",
"+",
"+# Add completion support",
"+@mcp.completion()",
"+async def handle_completion(ref, argument, context):",
"+ return Completion(values=[\"option1\", \"option2\"])"
],
"old_content": "原始文件内容...",
"new_content": "新文件内容..."
}
```
## 资源访问
### 工作状态资源
```
work-status://{working_directory}
```
### 日报资源
```
daily-report://{date}
```
### Python文件差异资源 ⭐
```
python-diff://{file_path}
```
## 自定义路由
### 健康检查
```
GET /health
```
### 统计信息
```
GET /stats
```
## 数据存储
所有数据存储在 `.work_tracker` 目录下:
- `work_states.json`: 工作状态记录
- `reports/`: 日报文件目录
- `daily_report_YYYY-MM-DD.json`: 每日日报
## 技术实现
### 核心组件
1. **WorkTracker**: 工作跟踪器,负责状态管理和日报生成
2. **WorkState**: 工作状态数据结构
3. **DailyReport**: 日报数据结构
4. **PythonFileContent**: Python文件内容结构 ⭐
5. **FileDiff**: 文件差异结构 ⭐
### 跟踪机制
1. **文件哈希**: 使用 SHA256 计算文件哈希值,检测文件变更
2. **Git 状态**: 跟踪 Git 提交记录和状态变化
3. **时间统计**: 计算工作时长和效率指标
4. **Python文件内容跟踪**: 记录所有Python文件的完整内容 ⭐
5. **差异分析**: 使用difflib生成标准化的差异格式 ⭐
### 忽略规则
自动忽略以下文件和目录:
- `.git`, `__pycache__`, `.pytest_cache`
- `.venv`, `venv`, `node_modules`
- `.DS_Store`, `*.pyc`, `*.log`
- `.work_tracker` (数据目录)
## 扩展功能
### 自动补全
- 工作目录补全
- 日期补全
- Python文件路径补全 ⭐
### 提示词生成
- 工作摘要提示词
- 支持不同风格(专业、轻松、详细)
- 重点关注Python文件的修改内容 ⭐
## 使用场景
1. **个人工作跟踪**: 记录每日代码工作内容
2. **团队协作**: 了解团队成员的工作进展
3. **项目管理**: 跟踪项目开发进度
4. **绩效评估**: 基于代码变更的工作量统计
5. **代码审查**: 分析代码变更的详细内容 ⭐
6. **LLM分析**: 为大语言模型提供结构化的代码变更数据 ⭐
## 注意事项
1. 确保工作目录是 Git 仓库
2. 建议每天上班时运行 `work_start`
3. 建议每天下班时运行 `work_end`
4. 数据存储在本地,注意备份重要数据
5. Python文件内容可能较大,注意存储空间 ⭐
## 故障排除
### 常见问题
1. **Git 命令失败**: 确保工作目录是有效的 Git 仓库
2. **权限错误**: 确保有读写工作目录的权限
3. **文件访问错误**: 检查文件是否被其他程序占用
4. **内存不足**: Python文件内容较大时可能占用较多内存 ⭐
### 调试模式
可以通过查看 `.work_tracker` 目录下的日志文件来调试问题。
## 贡献
欢迎提交 Issue 和 Pull Request 来改进这个项目!
## 许可证
MIT License
Raw data
{
"_id": null,
"home_page": null,
"name": "f-work-mcp",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": "F-Work MCP Team <contact@f-work-mcp.com>",
"keywords": "daily-report, git, mcp, productivity, python, work-tracking",
"author": null,
"author_email": "F-Work MCP Team <contact@f-work-mcp.com>",
"download_url": "https://files.pythonhosted.org/packages/da/e7/d321682d4934fdfc93caf4cf24e0b59ebaf3bd07cebdeb8c728d1eda8837/f_work_mcp-1.0.0.tar.gz",
"platform": null,
"description": "# Work Daily Report MCP Server\n\n\u4e00\u4e2a\u57fa\u4e8e MCP (Model Context Protocol) \u7684\u5de5\u4f5c\u65e5\u62a5\u751f\u6210\u670d\u52a1\u5668\uff0c\u80fd\u591f\u81ea\u52a8\u8ddf\u8e2a\u4ee3\u7801\u53d8\u66f4\u5e76\u751f\u6210\u8be6\u7ec6\u7684\u5de5\u4f5c\u65e5\u62a5\u3002**\u7279\u522b\u589e\u5f3a\u4e86\u5bf9Python\u6587\u4ef6\u7684\u5dee\u5f02\u5206\u6790\u529f\u80fd\uff0c\u4e3a\u5927\u8bed\u8a00\u6a21\u578b\u63d0\u4f9b\u8be6\u7ec6\u7684\u4ee3\u7801\u53d8\u66f4\u4fe1\u606f\u3002**\n\n## \u529f\u80fd\u7279\u6027\n\n### \ud83d\ude80 \u6838\u5fc3\u529f\u80fd\n- **\u4e0a\u73ed\u5de5\u5177** (`work_start`): \u8bb0\u5f55\u5de5\u4f5c\u5f00\u59cb\u65f6\u7684\u4ee3\u7801\u72b6\u6001\n- **\u4e0b\u73ed\u5de5\u5177** (`work_end`): \u8bb0\u5f55\u5de5\u4f5c\u7ed3\u675f\u72b6\u6001\u5e76\u751f\u6210\u65e5\u62a5\n- **\u72b6\u6001\u67e5\u8be2** (`get_work_status`): \u83b7\u53d6\u5f53\u524d\u5de5\u4f5c\u72b6\u6001\n- **\u65e5\u62a5\u67e5\u8be2** (`get_daily_report`): \u83b7\u53d6\u6307\u5b9a\u65e5\u671f\u7684\u65e5\u62a5\n- **\u6587\u4ef6\u5dee\u5f02\u5206\u6790** (`get_python_file_diff`): \u83b7\u53d6\u6307\u5b9aPython\u6587\u4ef6\u7684\u8be6\u7ec6\u5dee\u5f02\n\n### \ud83d\udcca \u8ddf\u8e2a\u5185\u5bb9\n- Git \u63d0\u4ea4\u8bb0\u5f55\u548c\u72b6\u6001\n- \u6587\u4ef6\u4fee\u6539\u3001\u65b0\u589e\u3001\u5220\u9664\u60c5\u51b5\n- **Python\u6587\u4ef6\u5185\u5bb9\u5dee\u5f02\u5206\u6790** \u2b50\n- \u5de5\u4f5c\u65f6\u957f\u7edf\u8ba1\n- \u4ee3\u7801\u53d8\u66f4\u6458\u8981\n- \u5206\u652f\u4fe1\u606f\n\n### \ud83d\udd27 \u6269\u5c55\u529f\u80fd\n- \u81ea\u52a8\u8865\u5168\u652f\u6301\n- \u81ea\u5b9a\u4e49 HTTP \u8def\u7531\n- \u8d44\u6e90\u8bbf\u95ee\u63a5\u53e3\n- \u63d0\u793a\u8bcd\u751f\u6210\n\n### \ud83d\udc0d Python\u6587\u4ef6\u5dee\u5f02\u529f\u80fd \u2b50\n- **\u5b8c\u6574\u5185\u5bb9\u8ddf\u8e2a**: \u8bb0\u5f55\u6240\u6709Python\u6587\u4ef6\u7684\u5b8c\u6574\u5185\u5bb9\n- **\u7cbe\u786e\u5dee\u5f02\u5206\u6790**: \u4f7f\u7528difflib\u751f\u6210\u6807\u51c6\u5316\u7684\u5dee\u5f02\u683c\u5f0f\n- **\u884c\u6570\u7edf\u8ba1**: \u7edf\u8ba1\u65b0\u589e\u3001\u5220\u9664\u3001\u4fee\u6539\u7684\u4ee3\u7801\u884c\u6570\n- **\u53d8\u66f4\u7c7b\u578b\u8bc6\u522b**: \u533a\u5206\u65b0\u589e\u3001\u4fee\u6539\u3001\u5220\u9664\u7684\u6587\u4ef6\n- **LLM\u53cb\u597d\u683c\u5f0f**: \u63d0\u4f9b\u7ed3\u6784\u5316\u7684\u5dee\u5f02\u6570\u636e\uff0c\u4fbf\u4e8e\u5927\u8bed\u8a00\u6a21\u578b\u5206\u6790\n\n## \u5b89\u88c5\u548c\u8fd0\u884c\n\n### 1. \u5b89\u88c5\u4f9d\u8d56\n```bash\nuv sync\n```\n\n### 2. \u8fd0\u884c\u670d\u52a1\u5668\n```bash\nuv run mcp dev main.py\n```\n\n### 3. \u4f7f\u7528 MCP Inspector\n\u670d\u52a1\u5668\u542f\u52a8\u540e\uff0c\u4f1a\u6253\u5f00\u6d4f\u89c8\u5668\u8bbf\u95ee MCP Inspector \u754c\u9762\uff0c\u4f60\u53ef\u4ee5\u5728\u90a3\u91cc\u6d4b\u8bd5\u6240\u6709\u529f\u80fd\u3002\n\n## \u4f7f\u7528\u65b9\u6cd5\n\n### \u4e0a\u73ed\u65f6\n```python\n# \u8bb0\u5f55\u5de5\u4f5c\u5f00\u59cb\u72b6\u6001\uff08\u5305\u542bPython\u6587\u4ef6\u5185\u5bb9\uff09\nwork_start(working_directory=\".\")\n```\n\n### \u4e0b\u73ed\u65f6\n```python\n# \u8bb0\u5f55\u5de5\u4f5c\u7ed3\u675f\u72b6\u6001\u5e76\u751f\u6210\u65e5\u62a5\uff08\u5305\u542b\u4ee3\u7801\u5dee\u5f02\uff09\nwork_end(working_directory=\".\")\n```\n\n### \u67e5\u8be2\u72b6\u6001\n```python\n# \u83b7\u53d6\u5f53\u524d\u5de5\u4f5c\u72b6\u6001\nget_work_status(working_directory=\".\")\n\n# \u83b7\u53d6\u6307\u5b9a\u65e5\u671f\u7684\u65e5\u62a5\nget_daily_report(date=\"2024-01-15\")\n\n# \u83b7\u53d6\u6307\u5b9aPython\u6587\u4ef6\u7684\u8be6\u7ec6\u5dee\u5f02\nget_python_file_diff(file_path=\"main.py\")\n```\n\n## \u5de5\u5177\u8be6\u89e3\n\n### 1. work_start\n**\u529f\u80fd**: \u8bb0\u5f55\u5de5\u4f5c\u5f00\u59cb\u72b6\u6001\uff08\u5305\u542bPython\u6587\u4ef6\u5185\u5bb9\uff09\n\n**\u53c2\u6570**:\n- `working_directory` (str): \u5de5\u4f5c\u76ee\u5f55\u8def\u5f84\uff0c\u9ed8\u8ba4\u4e3a\u5f53\u524d\u76ee\u5f55\n\n**\u8fd4\u56de**:\n```json\n{\n \"success\": true,\n \"message\": \"\u5de5\u4f5c\u5f00\u59cb\u72b6\u6001\u5df2\u8bb0\u5f55\",\n \"timestamp\": \"2024-01-15T09:00:00\",\n \"working_directory\": \"/path/to/project\",\n \"branch_name\": \"main\",\n \"total_files\": 150,\n \"modified_files_count\": 5,\n \"git_commits_count\": 25,\n \"python_files_count\": 12\n}\n```\n\n### 2. work_end\n**\u529f\u80fd**: \u8bb0\u5f55\u5de5\u4f5c\u7ed3\u675f\u72b6\u6001\u5e76\u751f\u6210\u65e5\u62a5\uff08\u5305\u542b\u4ee3\u7801\u5dee\u5f02\uff09\n\n**\u53c2\u6570**:\n- `working_directory` (str): \u5de5\u4f5c\u76ee\u5f55\u8def\u5f84\uff0c\u9ed8\u8ba4\u4e3a\u5f53\u524d\u76ee\u5f55\n\n**\u8fd4\u56de**:\n```json\n{\n \"success\": true,\n \"message\": \"\u5de5\u4f5c\u7ed3\u675f\u72b6\u6001\u5df2\u8bb0\u5f55\uff0c\u65e5\u62a5\u5df2\u751f\u6210\",\n \"report\": {\n \"date\": \"2024-01-15\",\n \"work_start_time\": \"09:00\",\n \"work_end_time\": \"18:00\",\n \"working_hours\": 9.0,\n \"total_commits\": 3,\n \"modified_files_count\": 5,\n \"new_files_count\": 2,\n \"deleted_files_count\": 1,\n \"work_summary\": \"\u5b8c\u6210\u4e86 3 \u6b21\u4ee3\u7801\u63d0\u4ea4\uff0c\u4fee\u6539\u4e86 5 \u4e2a\u6587\u4ef6\uff0c\u65b0\u589e\u4e86 2 \u4e2a\u6587\u4ef6\uff0c\u5220\u9664\u4e86 1 \u4e2a\u6587\u4ef6\u3002\",\n \"code_changes_summary\": \"Python\u4ee3\u7801\u53d8\u66f4: \u4fee\u6539\u6587\u4ef6 main.py (+15 -3 \u884c), \u65b0\u589e\u6587\u4ef6 utils.py (25 \u884c)\u3002 \u603b\u8ba1: +40 -3 \u884c\u4ee3\u7801\u3002\",\n \"report_path\": \".work_tracker/reports/daily_report_2024-01-15.json\"\n },\n \"details\": {\n \"modified_files\": [\"main.py\", \"README.md\"],\n \"new_files\": [\"utils.py\", \"config.py\"],\n \"deleted_files\": [\"old_file.txt\"],\n \"commits\": [...],\n \"python_file_diffs\": [\n {\n \"file_path\": \"main.py\",\n \"diff_type\": \"modified\",\n \"added_lines\": 15,\n \"deleted_lines\": 3,\n \"changed_lines\": 18,\n \"diff_preview\": [\n \"@@ -10,6 +10,8 @@\",\n \" from mcp.server.fastmcp import FastMCP\",\n \"+from mcp.types import Completion, CompletionArgument\",\n \"+from mcp.types import PromptReference, ResourceTemplateReference\",\n \" \",\n \" # Create an MCP server\",\n \" mcp = FastMCP(\\\"Demo\\\")\",\n \"+\",\n \"+# Add completion support\",\n \"+@mcp.completion()\",\n \"+async def handle_completion(ref, argument, context):\",\n \"+ return Completion(values=[\\\"option1\\\", \\\"option2\\\"])\"\n ]\n }\n ]\n }\n}\n```\n\n### 3. get_work_status\n**\u529f\u80fd**: \u83b7\u53d6\u5f53\u524d\u5de5\u4f5c\u72b6\u6001\n\n**\u53c2\u6570**:\n- `working_directory` (str): \u5de5\u4f5c\u76ee\u5f55\u8def\u5f84\uff0c\u9ed8\u8ba4\u4e3a\u5f53\u524d\u76ee\u5f55\n\n**\u8fd4\u56de**:\n```json\n{\n \"success\": true,\n \"current_time\": \"2024-01-15T14:30:00\",\n \"working_directory\": \"/path/to/project\",\n \"branch_name\": \"main\",\n \"total_files\": 150,\n \"modified_files\": [\"main.py\"],\n \"modified_files_count\": 1,\n \"git_commits_count\": 25,\n \"python_files_count\": 12,\n \"today_work_sessions\": 1,\n \"has_work_start\": true\n}\n```\n\n### 4. get_daily_report\n**\u529f\u80fd**: \u83b7\u53d6\u6307\u5b9a\u65e5\u671f\u7684\u65e5\u62a5\n\n**\u53c2\u6570**:\n- `date` (str): \u65e5\u671f\u683c\u5f0f YYYY-MM-DD\uff0c\u9ed8\u8ba4\u4e3a\u4eca\u5929\n\n**\u8fd4\u56de**:\n```json\n{\n \"success\": true,\n \"date\": \"2024-01-15\",\n \"report\": {\n \"date\": \"2024-01-15\",\n \"work_start_time\": \"09:00\",\n \"work_end_time\": \"18:00\",\n \"working_hours\": 9.0,\n \"total_commits\": 3,\n \"modified_files\": [\"main.py\"],\n \"new_files\": [\"utils.py\"],\n \"deleted_files\": [],\n \"python_file_diffs\": [...],\n \"commit_summary\": [...],\n \"work_summary\": \"\u5b8c\u6210\u4e86 3 \u6b21\u4ee3\u7801\u63d0\u4ea4\uff0c\u4fee\u6539\u4e86 1 \u4e2a\u6587\u4ef6\uff0c\u65b0\u589e\u4e86 1 \u4e2a\u6587\u4ef6\u3002\",\n \"code_changes_summary\": \"Python\u4ee3\u7801\u53d8\u66f4: \u4fee\u6539\u6587\u4ef6 main.py (+15 -3 \u884c), \u65b0\u589e\u6587\u4ef6 utils.py (25 \u884c)\u3002 \u603b\u8ba1: +40 -3 \u884c\u4ee3\u7801\u3002\"\n }\n}\n```\n\n### 5. get_python_file_diff \u2b50\n**\u529f\u80fd**: \u83b7\u53d6\u6307\u5b9aPython\u6587\u4ef6\u7684\u8be6\u7ec6\u5dee\u5f02\u4fe1\u606f\n\n**\u53c2\u6570**:\n- `file_path` (str): Python\u6587\u4ef6\u8def\u5f84\n- `working_directory` (str): \u5de5\u4f5c\u76ee\u5f55\u8def\u5f84\uff0c\u9ed8\u8ba4\u4e3a\u5f53\u524d\u76ee\u5f55\n\n**\u8fd4\u56de**:\n```json\n{\n \"success\": true,\n \"file_path\": \"main.py\",\n \"diff_type\": \"modified\",\n \"added_lines\": 15,\n \"deleted_lines\": 3,\n \"changed_lines\": 18,\n \"diff_lines\": [\n \"@@ -10,6 +10,8 @@\",\n \" from mcp.server.fastmcp import FastMCP\",\n \"+from mcp.types import Completion, CompletionArgument\",\n \"+from mcp.types import PromptReference, ResourceTemplateReference\",\n \" \",\n \" # Create an MCP server\",\n \" mcp = FastMCP(\\\"Demo\\\")\",\n \"+\",\n \"+# Add completion support\",\n \"+@mcp.completion()\",\n \"+async def handle_completion(ref, argument, context):\",\n \"+ return Completion(values=[\\\"option1\\\", \\\"option2\\\"])\"\n ],\n \"old_content\": \"\u539f\u59cb\u6587\u4ef6\u5185\u5bb9...\",\n \"new_content\": \"\u65b0\u6587\u4ef6\u5185\u5bb9...\"\n}\n```\n\n## \u8d44\u6e90\u8bbf\u95ee\n\n### \u5de5\u4f5c\u72b6\u6001\u8d44\u6e90\n```\nwork-status://{working_directory}\n```\n\n### \u65e5\u62a5\u8d44\u6e90\n```\ndaily-report://{date}\n```\n\n### Python\u6587\u4ef6\u5dee\u5f02\u8d44\u6e90 \u2b50\n```\npython-diff://{file_path}\n```\n\n## \u81ea\u5b9a\u4e49\u8def\u7531\n\n### \u5065\u5eb7\u68c0\u67e5\n```\nGET /health\n```\n\n### \u7edf\u8ba1\u4fe1\u606f\n```\nGET /stats\n```\n\n## \u6570\u636e\u5b58\u50a8\n\n\u6240\u6709\u6570\u636e\u5b58\u50a8\u5728 `.work_tracker` \u76ee\u5f55\u4e0b\uff1a\n- `work_states.json`: \u5de5\u4f5c\u72b6\u6001\u8bb0\u5f55\n- `reports/`: \u65e5\u62a5\u6587\u4ef6\u76ee\u5f55\n - `daily_report_YYYY-MM-DD.json`: \u6bcf\u65e5\u65e5\u62a5\n\n## \u6280\u672f\u5b9e\u73b0\n\n### \u6838\u5fc3\u7ec4\u4ef6\n\n1. **WorkTracker**: \u5de5\u4f5c\u8ddf\u8e2a\u5668\uff0c\u8d1f\u8d23\u72b6\u6001\u7ba1\u7406\u548c\u65e5\u62a5\u751f\u6210\n2. **WorkState**: \u5de5\u4f5c\u72b6\u6001\u6570\u636e\u7ed3\u6784\n3. **DailyReport**: \u65e5\u62a5\u6570\u636e\u7ed3\u6784\n4. **PythonFileContent**: Python\u6587\u4ef6\u5185\u5bb9\u7ed3\u6784 \u2b50\n5. **FileDiff**: \u6587\u4ef6\u5dee\u5f02\u7ed3\u6784 \u2b50\n\n### \u8ddf\u8e2a\u673a\u5236\n\n1. **\u6587\u4ef6\u54c8\u5e0c**: \u4f7f\u7528 SHA256 \u8ba1\u7b97\u6587\u4ef6\u54c8\u5e0c\u503c\uff0c\u68c0\u6d4b\u6587\u4ef6\u53d8\u66f4\n2. **Git \u72b6\u6001**: \u8ddf\u8e2a Git \u63d0\u4ea4\u8bb0\u5f55\u548c\u72b6\u6001\u53d8\u5316\n3. **\u65f6\u95f4\u7edf\u8ba1**: \u8ba1\u7b97\u5de5\u4f5c\u65f6\u957f\u548c\u6548\u7387\u6307\u6807\n4. **Python\u6587\u4ef6\u5185\u5bb9\u8ddf\u8e2a**: \u8bb0\u5f55\u6240\u6709Python\u6587\u4ef6\u7684\u5b8c\u6574\u5185\u5bb9 \u2b50\n5. **\u5dee\u5f02\u5206\u6790**: \u4f7f\u7528difflib\u751f\u6210\u6807\u51c6\u5316\u7684\u5dee\u5f02\u683c\u5f0f \u2b50\n\n### \u5ffd\u7565\u89c4\u5219\n\n\u81ea\u52a8\u5ffd\u7565\u4ee5\u4e0b\u6587\u4ef6\u548c\u76ee\u5f55\uff1a\n- `.git`, `__pycache__`, `.pytest_cache`\n- `.venv`, `venv`, `node_modules`\n- `.DS_Store`, `*.pyc`, `*.log`\n- `.work_tracker` (\u6570\u636e\u76ee\u5f55)\n\n## \u6269\u5c55\u529f\u80fd\n\n### \u81ea\u52a8\u8865\u5168\n- \u5de5\u4f5c\u76ee\u5f55\u8865\u5168\n- \u65e5\u671f\u8865\u5168\n- Python\u6587\u4ef6\u8def\u5f84\u8865\u5168 \u2b50\n\n### \u63d0\u793a\u8bcd\u751f\u6210\n- \u5de5\u4f5c\u6458\u8981\u63d0\u793a\u8bcd\n- \u652f\u6301\u4e0d\u540c\u98ce\u683c\uff08\u4e13\u4e1a\u3001\u8f7b\u677e\u3001\u8be6\u7ec6\uff09\n- \u91cd\u70b9\u5173\u6ce8Python\u6587\u4ef6\u7684\u4fee\u6539\u5185\u5bb9 \u2b50\n\n## \u4f7f\u7528\u573a\u666f\n\n1. **\u4e2a\u4eba\u5de5\u4f5c\u8ddf\u8e2a**: \u8bb0\u5f55\u6bcf\u65e5\u4ee3\u7801\u5de5\u4f5c\u5185\u5bb9\n2. **\u56e2\u961f\u534f\u4f5c**: \u4e86\u89e3\u56e2\u961f\u6210\u5458\u7684\u5de5\u4f5c\u8fdb\u5c55\n3. **\u9879\u76ee\u7ba1\u7406**: \u8ddf\u8e2a\u9879\u76ee\u5f00\u53d1\u8fdb\u5ea6\n4. **\u7ee9\u6548\u8bc4\u4f30**: \u57fa\u4e8e\u4ee3\u7801\u53d8\u66f4\u7684\u5de5\u4f5c\u91cf\u7edf\u8ba1\n5. **\u4ee3\u7801\u5ba1\u67e5**: \u5206\u6790\u4ee3\u7801\u53d8\u66f4\u7684\u8be6\u7ec6\u5185\u5bb9 \u2b50\n6. **LLM\u5206\u6790**: \u4e3a\u5927\u8bed\u8a00\u6a21\u578b\u63d0\u4f9b\u7ed3\u6784\u5316\u7684\u4ee3\u7801\u53d8\u66f4\u6570\u636e \u2b50\n\n## \u6ce8\u610f\u4e8b\u9879\n\n1. \u786e\u4fdd\u5de5\u4f5c\u76ee\u5f55\u662f Git \u4ed3\u5e93\n2. \u5efa\u8bae\u6bcf\u5929\u4e0a\u73ed\u65f6\u8fd0\u884c `work_start`\n3. \u5efa\u8bae\u6bcf\u5929\u4e0b\u73ed\u65f6\u8fd0\u884c `work_end`\n4. \u6570\u636e\u5b58\u50a8\u5728\u672c\u5730\uff0c\u6ce8\u610f\u5907\u4efd\u91cd\u8981\u6570\u636e\n5. Python\u6587\u4ef6\u5185\u5bb9\u53ef\u80fd\u8f83\u5927\uff0c\u6ce8\u610f\u5b58\u50a8\u7a7a\u95f4 \u2b50\n\n## \u6545\u969c\u6392\u9664\n\n### \u5e38\u89c1\u95ee\u9898\n\n1. **Git \u547d\u4ee4\u5931\u8d25**: \u786e\u4fdd\u5de5\u4f5c\u76ee\u5f55\u662f\u6709\u6548\u7684 Git \u4ed3\u5e93\n2. **\u6743\u9650\u9519\u8bef**: \u786e\u4fdd\u6709\u8bfb\u5199\u5de5\u4f5c\u76ee\u5f55\u7684\u6743\u9650\n3. **\u6587\u4ef6\u8bbf\u95ee\u9519\u8bef**: \u68c0\u67e5\u6587\u4ef6\u662f\u5426\u88ab\u5176\u4ed6\u7a0b\u5e8f\u5360\u7528\n4. **\u5185\u5b58\u4e0d\u8db3**: Python\u6587\u4ef6\u5185\u5bb9\u8f83\u5927\u65f6\u53ef\u80fd\u5360\u7528\u8f83\u591a\u5185\u5b58 \u2b50\n\n### \u8c03\u8bd5\u6a21\u5f0f\n\n\u53ef\u4ee5\u901a\u8fc7\u67e5\u770b `.work_tracker` \u76ee\u5f55\u4e0b\u7684\u65e5\u5fd7\u6587\u4ef6\u6765\u8c03\u8bd5\u95ee\u9898\u3002\n\n## \u8d21\u732e\n\n\u6b22\u8fce\u63d0\u4ea4 Issue \u548c Pull Request \u6765\u6539\u8fdb\u8fd9\u4e2a\u9879\u76ee\uff01\n\n## \u8bb8\u53ef\u8bc1\n\nMIT License\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A MCP server for tracking work progress and generating daily reports with Python file diff analysis",
"version": "1.0.0",
"project_urls": {
"Changelog": "https://github.com/your-username/f-work-mcp/blob/main/CHANGELOG.md",
"Documentation": "https://github.com/your-username/f-work-mcp#readme",
"Homepage": "https://github.com/your-username/f-work-mcp",
"Issues": "https://github.com/your-username/f-work-mcp/issues",
"Repository": "https://github.com/your-username/f-work-mcp"
},
"split_keywords": [
"daily-report",
" git",
" mcp",
" productivity",
" python",
" work-tracking"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "f96667f4ee00aa4705973df05ef085537ca87560f02221d565e6c0bcc46330b2",
"md5": "853a913f881e4ba88e5bda7bcce3bc40",
"sha256": "4f73bfc27f69ce9d902314c6ff08f575cd55bc88d05dc887a4abd7f154c23016"
},
"downloads": -1,
"filename": "f_work_mcp-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "853a913f881e4ba88e5bda7bcce3bc40",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 17768,
"upload_time": "2025-07-30T01:45:40",
"upload_time_iso_8601": "2025-07-30T01:45:40.116720Z",
"url": "https://files.pythonhosted.org/packages/f9/66/67f4ee00aa4705973df05ef085537ca87560f02221d565e6c0bcc46330b2/f_work_mcp-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "dae7d321682d4934fdfc93caf4cf24e0b59ebaf3bd07cebdeb8c728d1eda8837",
"md5": "787c514b4080c89ad4111f84f73a75af",
"sha256": "b98cb62ea03f3e4860fd52aa9670b665d68d3476002b42f40e2e5c40b9f33d72"
},
"downloads": -1,
"filename": "f_work_mcp-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "787c514b4080c89ad4111f84f73a75af",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 16175,
"upload_time": "2025-07-30T01:45:41",
"upload_time_iso_8601": "2025-07-30T01:45:41.628852Z",
"url": "https://files.pythonhosted.org/packages/da/e7/d321682d4934fdfc93caf4cf24e0b59ebaf3bd07cebdeb8c728d1eda8837/f_work_mcp-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-30 01:45:41",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "your-username",
"github_project": "f-work-mcp",
"github_not_found": true,
"lcname": "f-work-mcp"
}