f-work-mcp


Namef-work-mcp JSON
Version 1.0.0 PyPI version JSON
download
home_pageNone
SummaryA MCP server for tracking work progress and generating daily reports with Python file diff analysis
upload_time2025-07-30 01:45:41
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT
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"
}
        
Elapsed time: 0.83498s