nudge
Integrates with Apple Reminders to read tasks from specified lists, enabling AI to check, search, and manage reminders on macOS.
Integrates with GitHub Issues to read and manage issues assigned to the user, providing tools for listing, creating, and updating tasks.
Integrates with Linear to read and manage issues assigned to the user, supporting full CRUD operations on tasks.
Integrates with Notion databases to manage tasks, including reading, creating, and updating items with properties like name, done, due, priority, and tags.
Integrates with Todoist using the REST API to read and write tasks, enabling full management of todos.
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., "@nudge what's due today?"
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.
nudge
Your AI assistant, acting like a friend who actually remembers what you said you'd do.
nudge is an open-source Model Context Protocol (MCP) server that connects Claude — or any MCP-compatible AI — to your todo app. Instead of a cold productivity dashboard, you get a friend checking in naturally.
"hey, you've had 'call the accountant' on your list for 4 days 👀"
"nothing due today, you're all clear"
"added 'dentist appointment' for Friday"No server to run. No first-person AI narration. Just a nudge.
Install
Quickest — setup wizard
npx nudge-mcp-initWalks you through picking your todo app, entering credentials, and wiring up Claude Desktop automatically. Done in under a minute.
Manual — Claude Desktop (no server needed)
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"nudge": {
"command": "npx",
"args": ["nudge-mcp"]
}
}
}Restart Claude Desktop. That's it — Claude now has access to your tasks and will bring them up naturally.
Claude Desktop launches nudge as a subprocess. Nothing runs in the background when you're not using Claude.
Global install
npm install -g nudge-mcp
nudge-mcpNo install (try it)
npx nudge-mcpRelated MCP server: Todoist MCP Server
Supported backends
App | Config type | Notes |
Local JSON file |
| Default — zero config needed |
Markdown checklist |
| Any |
Todoist |
| Full read + write via REST API |
Notion |
| Read + write via database |
Linear |
| Issues assigned to you, full read + write |
GitHub Issues |
| Issues assigned to you, full read + write |
Apple Reminders |
| macOS only — no API key, reads directly |
Anything else |
| Sync/export to a JSON or |
Want to add an adapter? See CONTRIBUTING.md.
Configuration
Create ~/.nudge/config.json — or skip it entirely to use the zero-config local default.
Local JSON (default — no config file needed)
Tasks live at ~/.nudge/todos.json:
[
{ "id": "1", "title": "Call the accountant", "done": false, "due": "2026-03-03", "priority": "high" },
{ "id": "2", "title": "Buy birthday gift", "done": true },
{ "id": "3", "title": "Dentist appointment", "done": false, "tags": ["health"] }
]Markdown checklist
{
"adapter": { "type": "local", "filePath": "~/Documents/tasks.md", "format": "markdown" }
}- [ ] Call the accountant
- [x] Buy birthday gift
- [ ] Dentist appointmentTodoist
{
"adapter": { "type": "todoist", "apiKey": "your_token_here" }
}Or set the env var: TODOIST_API_KEY=your_token npx nudge-mcp
Get your token: Todoist → Settings → Integrations → Developer
Notion
{
"adapter": {
"type": "notion",
"apiKey": "secret_xxx",
"databaseId": "your_database_id"
}
}Your database needs: Name (title), Done (checkbox), and optionally Due (date), Priority (select: Low / Medium / High), Tags (multi-select).
Setup: create an internal integration at notion.so/my-integrations, then share your database with it.
Apple Reminders
{
"adapter": {
"type": "reminders",
"list": "To Do"
}
}No API key needed — reads directly from the Reminders app via AppleScript. macOS only.
list is optional. If omitted, nudge reads all lists. If you have a lot of reminders or multiple iCloud accounts, specifying a list is faster and more reliable.
Troubleshooting:
First run — macOS will prompt for Automation permission. Click Allow when asked, or go to System Settings → Privacy & Security → Automation and enable Reminders for your terminal.
iCloud sync issues — if you get a "Can't get" error, open Reminders.app and wait for it to fully sync before trying again.
Timeouts with large lists — add
"list": "To Do"(or whichever list you use most) to your config to limit the scope.List name must match exactly — including capitalisation. Run
osascript -e 'tell application "Reminders" to get name of every list'in Terminal to see your exact list names.
Tools
nudge exposes these tools to any connected AI:
Tool | What it does |
| "Did I ever call the dentist?" — fuzzy matched |
| What's still open and due today |
| Full list, with filters (overdue, tag, priority, done) |
| Honest summary — done, pending, overdue |
| Find tasks by keyword |
| "Remind me to call Dave on Friday" → adds it |
| "Done with the report" → ticks it off |
| "Actually I didn't finish that" → reopens it |
nudge also ships a suggested system prompt (as an MCP prompt resource named nudge-persona) that gives the AI the right tone: warm, honest, not preachy. Claude Desktop can pick this up automatically.
Connecting apps without a native adapter
Apple Shortcuts — build a shortcut that exports tasks as JSON to ~/.nudge/todos.json on a schedule.
Zapier / Make — add a step that writes task updates to the file whenever something changes in your app.
Obsidian / Logseq — point filePath at your daily note and use format: "markdown".
Any CLI app — add a cron: 0 * * * * myapp export --format json > ~/.nudge/todos.json
Writing a new adapter
Each adapter is a single file in src/adapters/. Implement two required methods and you're done:
import { Todo, NewTodo, TodoAdapter } from "../types.js";
export class MyAppAdapter implements TodoAdapter {
name = "myapp";
async listTodos(): Promise<Todo[]> {
// fetch from your app's API
return [];
}
async getTodo(id: string): Promise<Todo | null> {
return null;
}
// Optional — enables create_todo tool
async createTodo(input: NewTodo): Promise<Todo> { ... }
// Optional — enables mark complete/incomplete
async markComplete(id: string): Promise<void> { ... }
async markIncomplete(id: string): Promise<void> { ... }
}Then register it in src/index.ts in buildAdapter(). See CONTRIBUTING.md for the full guide.
Roadmap
nudge init— interactive setup wizardApple Reminders adapter (macOS, via AppleScript)
Linear adapter
GitHub Issues adapter
mark_complete/mark_incompletetoolsAsana / Microsoft To Do adapter
Webhook listener for real-time push (tasks trigger the AI)
Scheduled nudge mode (daily check-in without opening Claude)
Contributing
PRs and issues are welcome — especially new adapters. See CONTRIBUTING.md.
License
MIT © Dave Leal
Available Tools
8 toolscheck_tasksA
Check whether specific things have been done. Fuzzy-matches task names so you don't need exact wording. Great for friendly check-ins: 'did you ever call the dentist?' Use this when the user mentions something they said they'd do and you want to see if it's on the list and whether it's ticked off.
Inputs: names (required).
create_todoA
Add a new task to the user's list. Use this when the user says something like 'remind me to...' or 'add X to my list' or 'I need to do Y by Friday'. Confirm what you added so they know it landed.
Inputs: title (required), due, tags, notes, +1 more.
get_pending_todayA
See what's still on the user's plate for today — useful for a natural mid-day or end-of-day check-in. If it's getting late and there are still open tasks, that's worth a gentle mention.
Inputs: no named parameters.
get_statsA
Get an honest summary of where things stand: total tasks, done today, pending, overdue. Use this for an end-of-day check-in or when the user wants the big picture.
Inputs: no named parameters.
list_todosB
List the user's tasks with optional filters. Use this when asked directly, or when you need context to give a useful, honest answer about where things stand.
Inputs: tag, done, overdue, priority, +1 more.
mark_completeA
Mark a task as done. Use this when the user says 'done', 'finished', 'crossed that off', or anything that means they completed something. Fuzzy-match the name first with check_tasks if you're not sure of the exact ID. Celebrate appropriately — one line is enough.
Inputs: id, name.
mark_incompleteA
Reopen a task that was marked done. Use when the user says something like 'actually I didn't finish that' or 'reopen X'.
Inputs: id, name.
search_todosB
Search across task titles and notes by keyword.
Inputs: query (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 8 tools
Tools are mostly distinct but check_tasks and search_todos overlap in searching, and list_todos with filters overlaps with get_pending_today and get_stats, causing mild ambiguity.
All tool names follow a consistent verb_noun snake_case pattern (e.g., create_todo, mark_complete), making them predictable and easy to distinguish.
With 8 tools, the set is well-scoped for a task management assistant, covering core operations without being overwhelming.
The set covers CRUD operations except for task deletion, and lacks editing capabilities, but the core lifecycle (create, read, update status) is present.
Related MCP Connectors
MCP server that lets your AI assistant build and deploy apps, hosting each one at a live URL.
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Official Todoist MCP server. Manage tasks and projects. Hosted, no API key needed.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that integrates Claude with Todoist, enabling natural language task management including creating, updating, completing, and deleting tasks.5235 npm392MIT
- AlicenseBqualityDmaintenanceAn MCP server that connects Claude with Todoist for complete task and project management through natural language.86248 npm246MIT
- AlicenseAqualityDmaintenanceAn MCP server that allows AI assistants like Claude Code, Claude Desktop, and Cursor to interact with Things.app on macOS, enabling task creation, updates, viewing, scheduling, and organization through natural language.646 npm3MIT
- FlicenseNot gradedqualityDmaintenanceA local MCP server providing text utilities, math functions, and a persistent todo list, enabling task automation via natural language in Claude Desktop.-