TaskPilot was inspired by a simple frustration: productivity assistants often produce a convincing plan, but stop before doing any real work. I wanted to build an assistant that could understand a natural-language request, inspect existing tasks, propose a realistic plan, ask for approval, and then execute approved changes transparently. For example, a user can ask TaskPilot to manage a sports and culture event or plan two hours of focused work. The assistant reviews persistent SQLite task data, prioritizes urgent work, creates a schedule or task proposal, and shows the tool activity before saving anything. Approved task creation happens through real MCP tools/call requests, not simulated tool names. I built TaskPilot as a self-hosted MCP application using the official Python MCP SDK, Streamable HTTP transport, FastAPI, SQLite, Pydantic, and a lightweight browser simulator. The frontend performs MCP initialization, tool discovery, and approved tool calls. The backend exposes task-management tools including listing, creating, updating, completing, deleting, daily planning, and productivity summaries. The most important design decision was separating proposing from executing. Daily plans are temporary and do not mutate data. Task creation requires approval, and deletion requires explicit confirmation. This makes the assistant easier to trust and gives users a clear explanation of what will happen before state changes. I learned how MCP sessions, protocol negotiation, tool schemas, and Streamable HTTP transport fit together in a real application. I also learned that the latest Python SDK uses MCPServer rather than older FastMCP examples, and that the session manager must be started through the application lifespan. The biggest challenges were maintaining MCP session lifecycle correctly, handling browser-to-server protocol calls, making SQLite state survive restarts, and keeping the fallback experience deterministic without pretending it was powered by an LLM. The current version intentionally uses transparent deterministic planning so judges can run it locally without credentials or paid infrastructure. The architecture leaves room for an optional Bedrock or other LLM provider later, while keeping validation, consent, and database writes deterministic. TaskPilot is a web simulation of an Alexa+-style experience backed by a real self-hosted MCP server. It does not claim access to Amazon’s private Alexa+ runtime.

Share this project:

Updates

Submission history