Tududi MCP Server
by jeanbispo
README.md
# Tududi MCP Server
A whitelabel [Model Context Protocol](https://modelcontextprotocol.io/) (MCP) server that connects LLM-powered clients to [Tududi](https://github.com/chrisvel/tududi) — an open-source productivity and GTD (Getting Things Done) application created by [Chris Vel](https://github.com/chrisvel).
Tududi helps users organise tasks, projects, notes, and areas following GTD methodology. This MCP server acts as a bridge, allowing AI assistants (Claude, Cursor, VS Code Copilot, etc.) to read and manipulate Tududi data through a standardised protocol.
> **Prerequisite:** You need a running Tududi instance (self-hosted) with API access enabled. The MCP server connects to Tududi's REST API and does not include the Tududi application itself.
## How it works
The server exposes a single MCP endpoint at [`app/mcp/route.ts`](app/mcp/route.ts) built on Next.js Route Handlers. On each request, it:
1. **Authenticates** — validates the bearer token against the Tududi instance's `/api/profile` endpoint.
2. **Registers modules** — lazily loads all 8 domain modules (tasks, projects, notes, areas, inbox, tags, profile, metrics) and registers their tools and resources with the MCP server.
3. **Serves tools & resources** — the connected MCP client discovers and invokes them as needed.
Authentication is handled via [`mcp-handler`](https://www.npmjs.com/package/mcp-handler)'s `withMcpAuth` wrapper with token verification against the Tududi API.
## Features
### Tasks
- **Tools (7):** `list_tasks`, `get_task`, `create_task`, `update_task`, `delete_task`, `toggle_task_completion`, `list_subtasks`
- **Resources (2):** `tududi://tasks`, `tududi://tasks/{uid}`
### Projects
- **Tools (4):** `list_projects`, `create_project`, `update_project`, `delete_project`
- **Resources (2):** `tududi://projects`, `tududi://projects/{uid}`
### Notes
- **Tools (4):** `list_notes`, `create_note`, `update_note`, `delete_note`
- **Resources (1):** `tududi://notes`
### Areas
- **Tools (4):** `list_areas`, `create_area`, `update_area`, `delete_area`
- **Resources (1):** `tududi://areas`
### Inbox
- **Tools (2):** `list_inbox`, `create_inbox_item`
- **Resources (1):** `tududi://inbox`
### Tags
- **Tools (2):** `list_tags`, `create_tag`
- **Resources (1):** `tududi://tags`
### Profile
- **Tools (2):** `get_profile`, `update_profile`
- **Resources (1):** `tududi://profile`
### Metrics
- **Tools (0)**
- **Resources (1):** `tududi://metrics`
**Total:** **25 tools** and **10 resources**
## Prerequisites
- **A running Tududi instance** — self-host the [original Tududi project](https://github.com/chrisvel/tududi) and obtain an API token.
- **Node.js 18+** or **Bun** runtime.
## Whitelabel configuration
The server authenticates per-request using HTTP headers sent by the MCP client. The `tududi-api-url` header identifies the Tududi instance and the `Authorization` header carries the bearer token.
### Client-side headers
| Header | Required | Description |
| --- | --- | --- |
| `tududi-api-url` | Yes | Base URL of the Tududi instance (e.g. `https://my-tududi.com`) |
| `Authorization` | Yes | Bearer token for the Tududi API (`Bearer <token>`) |
| `tududi-enabled-modules` | No | Comma-separated list of modules to enable; defaults to `all` |
### MCP client configuration example
```json
{
"mcp": {
"servers": {
"tududi": {
"type": "http",
"url": "https://my-tududi-mcp.vercel.app/mcp",
"headers": {
"tududi-api-url": "https://my-tududi.com",
"Authorization": "Bearer my-api-token",
"tududi-enabled-modules": "tasks,projects,notes"
}
}
}
}
}
```
### Available modules
`tasks` · `projects` · `notes` · `areas` · `inbox` · `tags` · `profile` · `metrics`
## Setup & running
```bash
# Install dependencies
bun install
# Development
bun dev
# Build
bun build
# Production
bun start
```
After starting the server, the MCP endpoint is available at `http://localhost:3000/mcp`.
## Tech stack
- **Next.js 16** (Route Handlers)
- **TypeScript** (strict mode)
- **MCP SDK** (`@modelcontextprotocol/sdk`)
- **mcp-handler** (Next.js MCP adapter with auth support)
- **Zod 4** (schema validation)
## Project structure
```text
├── app/mcp/route.ts # MCP endpoint — auth + handler setup
├── lib/tududi/
│ ├── client.ts # HTTP client for the Tududi REST API
│ ├── config.ts # Module names and config types
│ ├── types.ts # Shared TypeScript types
│ └── modules/
│ ├── index.ts # Module registry (lazy-loaded)
│ ├── tasks/ # 7 tools, 2 resources
│ ├── projects/ # 4 tools, 2 resources
│ ├── notes/ # 4 tools, 1 resource
│ ├── areas/ # 4 tools, 1 resource
│ ├── inbox/ # 2 tools, 1 resource
│ ├── tags/ # 2 tools, 1 resource
│ ├── profile/ # 2 tools, 1 resource
│ └── metrics/ # 1 resource
└── scripts/ # Test clients
```
## Using with MCP clients
1. Deploy this server (e.g. Vercel) or run it locally.
2. Point your MCP client to the endpoint `https://your-host/mcp`.
3. Set the `tududi-api-url` and `Authorization` headers as shown above.
4. The client will auto-discover all registered tools and resources.
## License
MIT
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessUnresponsive