Obsidian Tasks MCP Server
by dss99911
README.md
# Obsidian Tasks MCP Server
An Obsidian plugin that exposes task management functionality via MCP (Model Context Protocol), enabling AI assistants like Claude to interact with your tasks directly.
## Features
- **Full CRUD operations**: Add, update, remove, and toggle tasks programmatically
- **Query tasks** using Obsidian Tasks syntax with powerful filtering
- **Smart defaults**: Tasks are added to today's Daily Note by default
- **Tasks plugin integration**: When available, leverages Tasks plugin API for proper recurrence handling
- **Real-time vault sync**: Uses Obsidian's Vault API for reliable file operations
- **Rich metadata support**: Dates, priority, tags, recurrence rules
## Installation
### From GitHub Release
1. Go to [Releases](https://github.com/dss99911/obsidian-tasks-mcp/releases)
2. Download `main.js` and `manifest.json` from the latest release
3. In your vault, create folder: `.obsidian/plugins/tasks-mcp/`
4. Copy the downloaded files into this folder
5. Open Obsidian Settings > Community plugins
6. Turn off "Restricted mode" if enabled
7. Find "Tasks MCP Server" and enable it
### Build from Source
```bash
git clone https://github.com/dss99911/obsidian-tasks-mcp.git
cd obsidian-tasks-mcp
npm install
npm run build
```
Copy `main.js` and `manifest.json` to your vault's `.obsidian/plugins/obsidian-tasks-mcp/` folder.
## Local Development
### Setup
1. Clone the repository:
```bash
git clone https://github.com/dss99911/obsidian-tasks-mcp.git
```
2. Install dependencies:
```bash
cd obsidian-tasks-mcp
npm install
```
3. Identify your Obsidian vault's plugin folder:
```bash
# Example: <YOUR_VAULT>/.obsidian/plugins/obsidian-tasks-mcp/
```
### Development Workflow
**Option 1: Symlink (Recommended)**
Create a symlink from your vault's plugin folder to the source:
```bash
# Remove existing plugin folder if exists
rm -rf <YOUR_VAULT>/.obsidian/plugins/obsidian-tasks-mcp
# Create symlink
ln -s /path/to/obsidian-tasks-mcp <YOUR_VAULT>/.obsidian/plugins/obsidian-tasks-mcp
```
Now builds will automatically be available to Obsidian.
**Option 2: Manual Copy**
After each build, copy files to the plugin folder:
```bash
npm run build
cp main.js manifest.json <YOUR_VAULT>/.obsidian/plugins/obsidian-tasks-mcp/
```
### Build Commands
```bash
# Production build
npm run build
# Development build with watch mode
npm run dev
```
### Reload Plugin
After building, reload the plugin in Obsidian:
1. Settings → Community plugins
2. Toggle off "Tasks MCP Server"
3. Toggle on "Tasks MCP Server"
Or restart Obsidian.
## Configuration
### MCP Client Setup
Add to your Claude Code MCP configuration (`~/.claude/mcp.json` or project `.mcp.json`):
```json
{
"mcpServers": {
"obsidian-tasks": {
"type": "http",
"url": "http://localhost:3789/mcp"
}
}
}
```
### Plugin Settings
In Obsidian Settings > Tasks MCP Server:
- **Server Port**: Default 3789, configurable
- **Auto-start**: Server starts automatically when Obsidian launches (default: on)
## Tools
### `add_task`
Add a new task to a file. If no `filePath` is provided, adds to today's Daily Note.
**Parameters:**
- `description` (required): Task description
- `filePath`: Target file path (defaults to Daily Note)
- `dueDate`: Due date in YYYY-MM-DD format
- `scheduledDate`: Scheduled date in YYYY-MM-DD format
- `startDate`: Start date in YYYY-MM-DD format
- `priority`: One of `highest`, `high`, `medium`, `low`, `lowest`
- `tags`: Array of tags (with or without # prefix)
- `recurrence`: Recurrence rule (e.g., "every day", "every week")
### `update_task`
Update an existing task. Provide either `taskId` (from query results) or both `filePath` and `lineNumber`.
**Parameters:**
- `taskId`: Task ID in format "filePath:lineNumber"
- `filePath` + `lineNumber`: Alternative to taskId
- `description`: New task description
- `status`: One of `incomplete`, `complete`, `cancelled`, `in_progress`
- `dueDate`: Due date (empty string to remove)
- `scheduledDate`: Scheduled date (empty string to remove)
- `startDate`: Start date (empty string to remove)
- `priority`: Priority level or `none` to remove
- `tags`: Array of tags (replaces existing)
- `recurrence`: Recurrence rule (empty string to remove)
### `remove_task`
Remove a task from a file.
**Parameters:**
- `taskId`: Task ID in format "filePath:lineNumber"
- `filePath` + `lineNumber`: Alternative to taskId
### `toggle_task`
Toggle a task's completion status. When Tasks plugin is available, properly handles:
- Completion dates
- Recurring tasks (creates next occurrence)
- Custom status symbols
**Parameters:**
- `taskId`: Task ID in format "filePath:lineNumber"
- `filePath` + `lineNumber`: Alternative to taskId
### `query_tasks`
Search tasks using Obsidian Tasks query syntax. Each line is a filter with AND logic.
**Supported filters:**
| Category | Filters |
|----------|---------|
| Status | `done`, `not done`, `cancelled`, `in progress` |
| Due date | `due today`, `due before today`, `due after today`, `overdue`, `due YYYY-MM-DD`, `due before YYYY-MM-DD`, `due after YYYY-MM-DD`, `has due date`, `no due date` |
| Scheduled | `scheduled today`, `scheduled before today`, `has scheduled date`, `no scheduled date` |
| Start date | `starts today`, `starts before today`, `has start date`, `no start date` |
| Tags | `has tags`, `no tags`, `tag includes #tag`, `tag does not include #tag` |
| Path | `path includes <string>`, `path does not include <string>` |
| Description | `description includes <string>`, `description does not include <string>` |
| Priority | `priority is highest/high/medium/low/lowest/none` |
| Recurrence | `is recurring`, `is not recurring` |
| Boolean | `<filter1> AND <filter2>`, `<filter1> OR <filter2>`, `NOT <filter>` |
**Example:**
```
not done
due before 2025-05-01
tag includes #work
priority is high
```
### `list_tasks`
Lists all tasks from a specific file or all markdown files with metadata including:
- Status, description, file path, line number
- Due date, scheduled date, start date, created date
- Tags, priority, recurrence rules
### `get_tasks_by_date`
Gets tasks for a specific due date with optional overdue task inclusion.
**Parameters:**
- `date` (required): Due date in YYYY-MM-DD format
- `includeOverdue`: Include overdue tasks (default: false)
## API Endpoints
- `POST /mcp` - MCP JSON-RPC endpoint
- `GET /sse` - Server-Sent Events connection
- `GET /health` - Health check (returns Tasks plugin availability)
## Requirements
- Obsidian v1.0.0+
- [Tasks plugin](https://github.com/obsidian-tasks-group/obsidian-tasks) (optional, recommended for recurrence handling)
> The plugin works without Tasks plugin installed. When Tasks plugin is available, `toggle_task` uses its API for proper recurrence handling.
## Commands
- **Toggle MCP Server**: Start/stop the server manually
- **Show MCP Server Status**: Display current server status
## Task Format
Recognizes standard Obsidian Tasks format:
- Checkbox: `- [ ]` (incomplete), `- [x]` (complete), `- [-]` (cancelled), `- [/]` (in progress)
- Due date: `📅 YYYY-MM-DD` or `🗓️ YYYY-MM-DD`
- Scheduled date: `⏳ YYYY-MM-DD`
- Start date: `🛫 YYYY-MM-DD`
- Created date: `➕ YYYY-MM-DD`
- Priority: `⏫⏫` (highest), `⏫` (high), `🔼` (medium), `🔽` (low), `⏬` (lowest)
- Recurrence: `🔁 every day/week/month`
- Tags: `#tag1 #tag2`
**Example:**
```
- [ ] Complete project report 📅 2025-05-01 ⏳ 2025-04-25 #work ⏫
```
## Security Note
This plugin runs an HTTP server on localhost. Only local applications can connect to it. If you need remote access, consider using a secure tunnel.
## Documentation
- [Blog: Manage Obsidian Tasks with AI - Tasks MCP Plugin Guide](https://dss99911.github.io/tools/obsidian/2026/01/06/Obsidian-Tasks-MCP-Plugin.html) - Detailed guide with use cases and examples
## License
MIT License
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessUnresponsive