todo-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@todo-mcpAdd a high priority task: buy groceries"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
todo-mcp
The foro.sh example project: a small, stateful todo-list MCP server. Every new foro.sh workspace gets a deployed copy, so there is a live MCP endpoint to poke at before deploying anything of your own.
Tools
Tool | Description |
| Add a task ( |
| List tasks ( |
| Mark a task as done |
| Mark a task as not done |
| Delete a task |
It also exposes two resources: tasks://board, the current board rendered as
markdown, and ui://todo/list, the interactive view described below.
Related MCP server: Todo MCP Server
The interactive view
Every todo tool carries _meta.ui.resourceUri pointing at ui://todo/list,
per the MCP Apps extension. A host that supports the extension fetches
that resource — view.html, served as text/html;profile=mcp-app — and
renders it in a sandboxed iframe beside the tool result: a checkbox list you
can tick to complete and untick to reopen.
The view talks back over postMessage using
@modelcontextprotocol/ext-apps: callServerTool to mutate the list,
updateModelContext to tell the model what is on screen, and ontoolresult
to re-render when the model changes the list itself. Because that SDK loads
from a CDN, the resource declares unpkg.com under _meta.ui.csp — hosts
build the iframe's Content-Security-Policy from that, and an undeclared origin
means a blank view.
Hosts without the extension are unaffected: they ignore the metadata and show the plain tool results.
State
Tasks live in the server's memory. That is the point of the example: a tool call in one session mutates state the next call sees, because the container keeps running between calls. The ceiling is just as real: state resets whenever the server restarts or redeploys. For anything that must survive a restart, back your server with a database or external store.
Run it locally
uv run server.pyThe server speaks MCP over streamable HTTP at http://localhost:8000/mcp
(set PORT to change the port - the same name foro injects when it deploys
you).
Deploy it
Its pyproject.toml is all foro.sh needs, so this repo deploys as-is: sign
in, pick this repo, deploy.
This server cannot be deployed
Maintenance
Related MCP Connectors
Create, list, and complete todo items through MCP.
- mcpOAuthnet.todoist
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
Local-first task manager: create, edit, and complete tasks, projects, and checklists via MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that allows AI assistants to manage todo lists stored in a simple markdown file, supporting creation, reading, updating, and deletion of todo items with persistent IDs.56 npm6MIT
- FlicenseNot gradedqualityDmaintenanceThis MCP server provides tools to manage a todo list with CRUD operations, enabling listing, creating, updating, and deleting todos.-
- AlicenseNot gradedqualityCmaintenanceA CRUD todo list server that exposes tools to create, list, and conclude tasks, compatible with any MCP host.1 npmMIT
- AlicenseNot gradedqualityCmaintenanceA demo MCP server exposing an in-memory todo list via tools (add_task, list_tasks, complete_task), a resource, and a prompt, over both stdio and HTTP transports.0ISC