Files
obsidian-mcp/manifest.json
Peter.Morton b149820a2b feat: implement User Story 3 - Task & Property Management
Implemented task tracking and property management functionality,
completing User Story 3 with 8 new MCP tools.

Task Management Tools (5 tools):
1. obsidian_list_tasks
   - List all tasks in vault or specific file
   - Filter by status (done/todo/custom), file, path
   - Support verbose mode with line numbers
   - Output formats: json, tsv, csv, text
   - Flags: total, active, daily

2. obsidian_toggle_task
   - Toggle task between done/todo states
   - Specify by ref (path:line) or file/path + line
   - Support daily note flag

3. obsidian_mark_task_done
   - Mark task as completed
   - Same targeting options as toggle

4. obsidian_mark_task_todo
   - Mark task as incomplete
   - Same targeting options as toggle

5. obsidian_update_task_status
   - Set custom status character (-, >, !, ?, etc.)
   - Enables custom task workflows

Property Management Tools (3 tools):
6. obsidian_get_property
   - Read single property value from file
   - Required: property name
   - Target by file name or path

7. obsidian_set_property
   - Set or update property on file
   - Required: name, value
   - Optional: type (text, list, number, checkbox, date, datetime)
   - Auto-infers type if not specified

8. obsidian_remove_property
   - Delete property from file
   - Required: property name
   - Target by file name or path

Implementation Details:
- Created src/tools/tasks.ts with 5 task management tools
- Extended src/tools/properties.ts with 3 property tools
- Added Zod schemas for validation (listTasksSchema, taskReferenceSchema,
  propertyReadSchema, propertySetSchema, propertyRemoveSchema)
- All tools use formatParam() for proper parameter quoting
- Complete inputSchema definitions for tools/list exposure
- Command mapping verified via 'obsidian help' for each command

Commands Used:
- obsidian tasks (list)
- obsidian task (manipulate)
- obsidian property:read
- obsidian property:set
- obsidian property:remove

Files Changed:
- src/tools/tasks.ts (new): 5 task management tools
- src/tools/properties.ts: Added registerPropertyManagementTools()
- src/tools/index.ts: Register task and property management tools
- manifest.json: Added 8 new tool descriptions
- specs/001-obsidian-mcp-bundle/tasks.md: Marked T064-T075, T079 complete

Task Progress:
- Completed: 13 of 18 US3 tasks (72%)
- Remaining: T076-T078 (convenience wrappers), T080-T081 (helpers)
- Total project: 83/98 tasks (84.7%)

Build:  0 errors
Validation:  Manifest passes
Tool Count: 20 → 28 tools (+8)

User Story 3 Status: Core implementation complete 
Next: T076-T078 convenience wrappers (optional), Polish phase

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-22 13:57:31 -05:00

151 lines
6.2 KiB
JSON

{
"manifest_version": "0.3",
"name": "obsidian-mcp",
"version": "1.0.0",
"display_name": "Obsidian CLI Bundle",
"description": "MCP Bundle for Obsidian CLI - Enable AI assistants to manage Obsidian vaults through conversational interface",
"author": {
"name": "Obsidian MCP Contributors",
"url": "https://github.com/obsidian-mcp/obsidian-mcp-bundle"
},
"homepage": "https://github.com/obsidian-mcp/obsidian-mcp-bundle",
"license": "MIT",
"icon": "assets/icon.png",
"server": {
"type": "node",
"entry_point": "dist/index.js",
"mcp_config": {
"command": "node",
"args": [
"${__dirname}/dist/index.js"
],
"env": {
"OBSIDIAN_VAULT": "${user_config.vault_name}",
"MCP_LOG_LEVEL": "info"
}
}
},
"user_config": {
"vault_name": {
"type": "string",
"title": "Vault Name",
"description": "Name of the Obsidian vault to manage (case-sensitive)",
"required": true
}
},
"tools": [
{
"name": "obsidian_create_note",
"description": "Create a new note in the Obsidian vault. Optionally specify path, content, template, and whether to overwrite existing notes or open after creation."
},
{
"name": "obsidian_read_note",
"description": "Read the content of a note from the Obsidian vault. Specify either the note name (file) or full path (path)."
},
{
"name": "obsidian_append_to_note",
"description": "Append content to the end of an existing note. Specify either file name or path, and the content to append. Use inline flag to append without a new line."
},
{
"name": "obsidian_prepend_to_note",
"description": "Prepend content to the beginning of an existing note. Specify either file name or path, and the content to prepend."
},
{
"name": "obsidian_delete_note",
"description": "Delete a note from the Obsidian vault. By default moves to trash; use permanent flag for permanent deletion. Specify either file name or path."
},
{
"name": "obsidian_move_note",
"description": "Move a note to a different location in the vault. Specify the current note (file or path) and the new path (newPath)."
},
{
"name": "obsidian_rename_note",
"description": "Rename a note in the vault. Specify the current note (file or path) and the new name (newName)."
},
{
"name": "obsidian_open_note",
"description": "Open a note in the Obsidian application. Specify either file name or path. Use newtab flag to open in a new tab."
},
{
"name": "obsidian_get_file_info",
"description": "Get metadata and information about a note file. Specify either file name or path. Returns file size, dates, path, and other metadata."
},
{
"name": "obsidian_search",
"description": "Search vault for text. Returns matching files and optionally match counts. Supports path filtering, result limits, case sensitivity, and multiple output formats (text/json)."
},
{
"name": "obsidian_get_backlinks",
"description": "Get all backlinks (incoming links) to a note. Shows which notes reference this note. Optionally include link counts."
},
{
"name": "obsidian_get_outgoing_links",
"description": "Get all outgoing links from a note. Shows which notes this note references. Useful for understanding note connections."
},
{
"name": "obsidian_list_unresolved_links",
"description": "List all unresolved (broken) wikilinks in the vault. Shows links pointing to notes that don't exist. Useful for finding content gaps."
},
{
"name": "obsidian_list_deadends",
"description": "List all dead-end notes (notes with no outgoing links). These notes don't connect to anything else in the vault."
},
{
"name": "obsidian_list_orphans",
"description": "List all orphan notes (notes with no incoming links/backlinks). These notes aren't referenced by any other notes."
},
{
"name": "obsidian_list_tags",
"description": "List all tags in the vault or in a specific note. Optionally include usage counts and sort by frequency or name."
},
{
"name": "obsidian_get_tag_info",
"description": "Get detailed information about a specific tag, including which notes use it and how many times."
},
{
"name": "obsidian_list_aliases",
"description": "List all aliases in the vault or for a specific note. Aliases are alternative names for notes."
},
{
"name": "obsidian_list_properties",
"description": "List all properties used in the vault. Shows property keys and optionally their types and usage counts."
},
{
"name": "obsidian_get_property_count",
"description": "Get the usage count for a specific property across the vault. Shows how many notes use this property."
},
{
"name": "obsidian_list_tasks",
"description": "List all tasks in the vault or specific file. Filter by status (done/todo), show line numbers with verbose flag."
},
{
"name": "obsidian_toggle_task",
"description": "Toggle a task status between done and todo. Specify task by ref (path:line) or by file/path + line number."
},
{
"name": "obsidian_mark_task_done",
"description": "Mark a task as done (completed). Specify task by ref (path:line) or by file/path + line number."
},
{
"name": "obsidian_mark_task_todo",
"description": "Mark a task as todo (incomplete). Specify task by ref (path:line) or by file/path + line number."
},
{
"name": "obsidian_update_task_status",
"description": "Set a custom status character for a task (e.g., '-', '>', '!', '?'). Specify task by ref or file/path + line."
},
{
"name": "obsidian_get_property",
"description": "Read a single property value from a file. Specify property name and file (by name or path)."
},
{
"name": "obsidian_set_property",
"description": "Set or update a property on a file. Specify property name, value, optional type, and file."
},
{
"name": "obsidian_remove_property",
"description": "Remove a property from a file. Specify property name and file (by name or path)."
}
]
}