MCP server for tdo note taking tool
Project description
mcp-tdo is a Model Context Protocol (MCP) server that allows AI models to access and manage your todo notes and tasks through the tdo CLI tool.
✨ Features
- Retrieve todo note contents for today, tomorrow, or any date offset
- Search across all notes for specific content
- List all pending todos across all your notes
- Get count of pending todos across all your notes
- Create new todo notes
- Mark specific todos as complete
- Add new todo items to existing note files
- Fully compatible with the MCP specification
⚡ Setup
⚙️ Requirements
- Python 3.10+
- tdo CLI tool installed and accessible in your PATH
- uv for local development
💻 Installation
From PyPI (Recommended)
Install mcp-tdo from PyPI using pip or uv:
# Using pip
pip install mcp-tdo
# Using uv (recommended)
uv add mcp-tdo
# Using pipx (for CLI tools)
pipx install mcp-tdo
From Source
For development or to get the latest changes:
git clone https://github.com/2kabhishek/mcp-tdo
cd mcp-tdo
uv sync --dev
🚀 Usage
Running the Server
If installed from PyPI:
mcp-tdo
Or specify a custom path to the tdo executable:
mcp-tdo --tdo-path /path/to/tdo.sh
If running from source:
uv run mcp-tdo
MCP Server Configuration
To use this MCP server, add it to your MCP client configuration:
Option 1: Using direct command (PyPI install)
{
"mcpServers": {
"mcp-tdo": {
"command": "mcp-tdo"
}
}
}
If your tdo executable is not in PATH:
{
"mcpServers": {
"mcp-tdo": {
"command": "mcp-tdo",
"args": ["--tdo-path", "/path/to/your/tdo"]
}
}
}
Option 2: Using uv for development
{
"mcpServers": {
"mcp-tdo": {
"command": "uv",
"args": ["run", "--directory", "/path/to/mcp-tdo", "mcp-tdo"]
}
}
}
Option 3: Using python directly
{
"mcpServers": {
"mcp-tdo": {
"command": "python",
"args": ["-m", "mcp_tdo"]
}
}
}
🧩 Available Tools
get_todo_contents
Shows contents of todo notes for today or a specific date offset.
Parameters:
offset: (optional) Offset like "1" for tomorrow, "-1" for yesterday, etc.
search_notes
Searches for notes matching a query term.
Parameters:
query: Search query term
get_pending_todos
Shows all pending todos (unchecked checkboxes) from all your notes.
No parameters required.
get_todo_count
Shows the count of pending todos across all your notes.
No parameters required.
create_note
Creates a new todo note at the specified path.
Parameters:
note_path: Path/name for the new note (e.g., 'tech/vim' or 'ideas')
mark_todo_done
Marks a specific todo item as done.
Parameters:
file_path: Path to the file containing the todotodo_text: Text of the todo item to mark as done
add_todo
Adds a new todo item to a specified file.
Parameters:
file_path: Path to the file to add the todo totodo_text: Text of the todo item to add
🔧 Development
This project uses uv for dependency management and Ruff for linting and formatting.
Setup
# Clone the repository
git clone https://github.com/2kabhishek/mcp-tdo
cd mcp-tdo
# Install dependencies (including dev dependencies)
uv sync --dev
Common Development Commands
# Run tests
uv run pytest tests/ -v
# Run linter
uv run ruff check src/ tests/
# Format code
uv run ruff format src/ tests/
# Fix linting issues automatically
uv run ruff check --fix src/ tests/
# Run the MCP server locally
uv run mcp-tdo
# Install the package in development mode
uv sync
Project Structure
├── src/mcp_tdo/ # Main package
│ ├── models.py # Data models
│ ├── tdo_client.py # TDO CLI integration
│ └── server.py # MCP server implementation
├── tests/ # Test suite
├── pyproject.toml # Project configuration
└── uv.lock # Dependency lockfile
🏗️ What's Next
✅ To-Do
You tell me!
🧑💻 Behind The Code
🌈 Inspiration
mcp-tdo was inspired by the need to give AI assistants access to personal task management tools, allowing for more productive interactions with AI models.
💡 Challenges/Learnings
- Implementing proper error handling and command execution
- Working with the MCP protocol specification
- Managing file path and content operations safely
🧰 Tooling
- dots2k — Dev Environment
- nvim2k — Personalized Editor
- sway2k — Desktop Environment
- qute2k — Personalized Browser
🔍 More Info
⭐ hit the star button if you found this useful ⭐
Source | Blog | Twitter | LinkedIn | More Links | Other Projects
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_tdo-0.1.2.tar.gz.
File metadata
- Download URL: mcp_tdo-0.1.2.tar.gz
- Upload date:
- Size: 24.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0b87fc11997144db1f7f9b9f67fe84218a24c912c7d7780261938d67b4aafe1
|
|
| MD5 |
b802844c5da063f002026ff6c70b79e6
|
|
| BLAKE2b-256 |
bfe776b6b6c3a9dd33f852cadcc897b7ad2871c023fe476f564873d34f1a1e77
|
Provenance
The following attestation bundles were made for mcp_tdo-0.1.2.tar.gz:
Publisher:
pypi-release.yml on 2KAbhishek/mcp-tdo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_tdo-0.1.2.tar.gz -
Subject digest:
a0b87fc11997144db1f7f9b9f67fe84218a24c912c7d7780261938d67b4aafe1 - Sigstore transparency entry: 249168200
- Sigstore integration time:
-
Permalink:
2KAbhishek/mcp-tdo@86409f5dcc53cd51503fa568a87b1ce56aa53723 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/2KAbhishek
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-release.yml@86409f5dcc53cd51503fa568a87b1ce56aa53723 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mcp_tdo-0.1.2-py3-none-any.whl.
File metadata
- Download URL: mcp_tdo-0.1.2-py3-none-any.whl
- Upload date:
- Size: 21.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
46ced4e680bebc96a4d67afe3a534ee1b1c3503037b2201a0dbd1d4c00036869
|
|
| MD5 |
60f5efe21ffec89aa7b30b1ab8fb5225
|
|
| BLAKE2b-256 |
0a09e270f311138843102f16cca66b1da21b0c19bce60eb29d9004dc949d39d0
|
Provenance
The following attestation bundles were made for mcp_tdo-0.1.2-py3-none-any.whl:
Publisher:
pypi-release.yml on 2KAbhishek/mcp-tdo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_tdo-0.1.2-py3-none-any.whl -
Subject digest:
46ced4e680bebc96a4d67afe3a534ee1b1c3503037b2201a0dbd1d4c00036869 - Sigstore transparency entry: 249168204
- Sigstore integration time:
-
Permalink:
2KAbhishek/mcp-tdo@86409f5dcc53cd51503fa568a87b1ce56aa53723 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/2KAbhishek
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-release.yml@86409f5dcc53cd51503fa568a87b1ce56aa53723 -
Trigger Event:
release
-
Statement type: