FocusRoom MCP Server
Enables external clients to manage tasks, memories, daily plans, and productivity reports via HTTP tools, including a natural-language productivity assistant.
README
FocusRoom | Productivity Agent
A personal productivity workspace built with Python, Streamlit, Groq, SQLite, and MCP. It combines task management, daily planning, persistent memories, a multi-agent supervisor, and optional email reminders in one project.
Features
- Streamlit productivity dashboard
- Create, list, filter, and complete tasks
- Task priorities, due dates, projects, and statuses
- Persistent SQLite storage in
productivity.db - Daily plans and productivity reports
- Save and search personal memories
- Groq-powered productivity assistant
- Multi-agent supervisor for task, memory, and planning requests
- MCP server with HTTP tools for external clients
- Optional automatic email reminders
Requirements
- Python 3.10 or newer
- A Groq API key for the AI features
- Gmail SMTP credentials or another SMTP provider for email reminders
Setup
1. Create a virtual environment
PowerShell:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
If PowerShell blocks script execution for the current session:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
.\.venv\Scripts\Activate.ps1
2. Install dependencies
python -m pip install -r requirements.txt
3. Configure environment variables
Copy .env.example to .env and fill in the values:
Copy-Item .env.example .env
Required for the Groq-backed agent:
GROQ_API_KEY=your_groq_api_key
GROQ_MODEL=openai/gpt-oss-120b
Optional MCP configuration:
MCP_HOST=127.0.0.1
MCP_PORT=8000
MCP_API_KEY=local_or_remote_api_key
For email reminders:
EMAIL_SENDER=your_email@gmail.com
EMAIL_RECIPIENT=recipient@example.com
EMAIL_PASSWORD=your_smtp_or_app_password
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
Do not commit .env or API credentials. They are excluded by .gitignore.
Run the Streamlit app
streamlit run streamlit_app.py
The app provides these sections:
- Overview - task metrics, active work, daily snapshot, and completion progress
- Tasks - create and filter tasks, then mark tasks complete
- Plan - view the current daily plan and productivity report
- Memory - save and search persistent context
- Assistant - send natural-language requests to the productivity supervisor
Run the MCP server
Start the Streamable HTTP MCP server with:
python -m orchestrator.mcp_server
By default, it runs on http://127.0.0.1:8000/mcp.
The server exposes tools for:
productivity_assistantcreate_tasklist_tasksupdate_taskcomplete_taskdelete_tasksave_memorysearch_memorydaily_planproductivity_report
When binding the MCP server to a non-local host, set MCP_API_KEY. Remote requests must use a bearer token:
Authorization: Bearer <MCP_API_KEY>
Run reminders
The reminder worker checks upcoming tasks and sends configured email notifications:
python reminder_worker.py
The reminder schedule is configured in the worker and supports reminders at 24 hours, 1 hour, and 15 minutes before a task is due. Email reminders require valid SMTP settings in .env.
Run tests
Use the project virtual environment so pytest is available:
.\.venv\Scripts\python -m pytest -q
To run a specific test file:
.\.venv\Scripts\python -m pytest -q test_multi_agent.py
To check Python syntax without starting the app:
.\.venv\Scripts\python -m compileall streamlit_app.py orchestrator
Project structure
Productivity_Agent/
|-- streamlit_app.py # Streamlit user interface
|-- requirements.txt # Python dependencies
|-- .env.example # Environment variable template
|-- productivity.db # Local SQLite database, generated locally
|-- reminder_service.py # Reminder service implementation
|-- reminder_worker.py # Continuous reminder worker
|-- orchestrator/
| |-- agent.py # Core task, memory, plan, and report logic
| |-- database.py # SQLite persistence layer
| |-- orchestrator.py # Multi-agent supervisor
| |-- mcp_server.py # MCP HTTP server and tools
| |-- memory_agent.py # Memory agent adapter
| |-- planning_agent.py # Planning agent adapter
| |-- task_agent.py # Task agent adapter
|-- test_*.py # Project tests
Data and security notes
- Tasks and memories are stored locally in SQLite.
.envcontains secrets and must remain private.- For Gmail, use an app password where required instead of your primary account password.
- The MCP API key is required when the server is exposed beyond localhost.
- Back up
productivity.dbif the local task and memory history is important.
Troubleshooting
pytest is not recognized
Run pytest through the virtual environment:
.\.venv\Scripts\python -m pytest -q
The app starts but the assistant is unavailable
Check that .env exists and contains a valid GROQ_API_KEY, then restart Streamlit.
Streamlit reports missing ScriptRunContext
This warning appears when importing a Streamlit module directly with python -c. Start the application with streamlit run streamlit_app.py for normal operation.
Compilation works but tests fail during collection
A collection error means pytest could not finish importing the tests. Read the first reported exception and fix that dependency or constructor mismatch before evaluating the remaining tests.
推荐服务器
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 模型以安全和受控的方式获取实时的网络信息。