standup-journal-mcp
MCP server for logging daily tasks, retrieving tasks by date, and generating standup reports.
README
Following Along (YouTube Tutorial)
This project follows MCP Tutorial: Build Your First MCP Server — steps below mirror that walkthrough, adapted for uv and the current v2 SDK.
Step 1: Initialize the project and install the MCP SDK
From an empty repo, in your terminal:
uv init
uv add "mcp[cli]"
This creates pyproject.toml, uv.lock, and a .venv, with mcp[cli]
installed as a dependency.
Step 2: Write the server
Create main.py in the project root:
(paste the code above)
This mirrors the PyPI quickstart skeleton (from mcp.server import MCPServer, @mcp.tool() decorators), swapped in with the standup journal's own tools:
log_task(task_description, status="done")— log what you did.get_tasks_by_date(log_date)— see everything logged on a given day.generate_standup_report()— pull yesterday's done items and current blockers into a Slack-ready bulleted message.
Note on the video: the tutorial uses FastMCP from mcp.server.fastmcp(the v1.x SDK API from April 2025). uv add "mcp[cli]" today installs the v2 SDK, where FastMCP was renamed MCPServer and moved to mcp.server. The concepts and decorators (@mcp.tool(), @mcp.resource()) are unchanged; only the import path and class name differ.
Data lives in a local SQLite file at ~/.standup-journal/standups.db
(override with STANDUP_DB_PATH), created automatically on first run.
Step 3: Install the server into Claude Desktop
From the project root:
uv run mcp install main.py
This imports main.py, reads the server's name ("standup-journal", set
via MCPServer("standup-journal")), and writes the launch command directly
into Claude Desktop's config file for you — no manual JSON editing needed.
Example output:
INFO Added server 'standup-journal' to Claude config
INFO Successfully installed standup-journal in Claude app
Fully quit Claude Desktop (not just the window) and reopen it for the new server to show up. Your tools — log_task, update_task_status, get_tasks_by_date, get_tasks_between, search_tasks, list_tags, generate_standup_report, generate_exec_summary, generate_weekly_summary — should then be available in chat.
Under the hood, mcp install writes an entry that launches your server via uv run, pinned to the exact mcp version installed in your project, so Claude Desktop always runs it in the right environment, without you needing standup-journal on your system PATH.
Step 4: Verify the tools are visible in Claude Desktop
mcp install edits the config file automatically, but if you ever need to check or edit it by hand (or just confirm the entry is there), the config lives under Claude Desktop's Developer settings.
- Open Claude Desktop.
- Open the app menu (Windows/Linux: hamburger menu; macOS: the app name in the system menu bar) and select Settings.
- Go to the Developer tab.
- Click Edit Config — this opens
claude_desktop_config.jsonin your default text editor. You should see astandup-journalentry undermcpServers, written there bymcp installin Step 3. - Save the file (even with no changes) and fully quit and reopen Claude Desktop to load the tools.
Once it restarts, click the + (or paperclip) icon in the chat box and select Connectors — standup-journal should be listed there, with your tools available.
Testing in Claude Desktop
Once standup-journal shows as connected under Connectors (Step 4), test it with natural chat requests. Claude decides which tool to call based on what you ask and each tool's docstring.
Try this sequence
- Log a completed task:
"Log that I finished the login screen styling."
Claude should call log_task. The first time, you'll get a permission prompt, approve it. Look for an expandable tool-call block in the chat showing the tool name and arguments used.

-
Log a blocker:
"Log that I'm blocked on the AWS deployment because permissions are broken."
-
Check what's logged today:
"What have I logged for today?"

Should trigger get_tasks_by_date with today's date.
-
Generate the standup report:
"Generate my standup report."
Should call
generate_standup_reportand return a bulleted, Slack-ready summary of yesterday's done items, today's in-progress items, and open blockers.
If a tool doesn't get called
Claude decides whether to call a tool based on phrasing. Try being more explicit ("use the standup journal to log...") if it's not picking it up.
Verify the data actually landed by checking the SQLite file directly:
sqlite3 ~/.standup-journal/standups.db "SELECT * FROM tasks;"
(adjust the path if you set STANDUP_DB_PATH)
If the connector won't connect or shows an error
Claude Desktop keeps a log per server:
- macOS:
~/Library/Logs/Claude/mcp-server-standup-journal.log - Windows:
%APPDATA%\Claude\logs\
Check there for a Python traceback if main.py failed to start.
Usually the issue is anything printed to stdout before the server starts. Stdio is the protocol channel for this transport, so a stray print() statement corrupts the connection. Use logging (which writes to stderr) instead of print() if you need to debug inside the server.
Sources: MCP docs — Connect local servers, Claude docs — MCP Apps troubleshooting, PyPi MCP Docs
Additional tools (added after Step 2)
update_task_status(task_id, status)— resolve a blocker or change any logged task's status.log_task(..., tag?)— optional free-text category, inferred from phrasing like "tag this as X" / "log under X", or set explicitly. No predefined list — invent tags as you go. Each tag gets a consistent royal-themed emoji (👑💎🦋🕯️ etc.), assigned automatically per tag name.get_tasks_by_date/get_tasks_between(start_date, end_date)— both accept an optionaltagfilter.search_tasks(keyword)— find past entries by keyword, any date/status.list_tags()— all tags currently in use, with open task counts.generate_exec_summary(days=7)— quick counts (done/in progress/blocked) plus open blockers.generate_weekly_summary(week_start?)— 7-day rollup for retros or 1:1s.
Talking naturally works across all of these — e.g. "Finished the login screen, still working on the API integration, tag it acme-client, and I'm blocked on AWS permissions" gets split into separate logged entries automatically.
推荐服务器
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 模型以安全和受控的方式获取实时的网络信息。