Implement visual feedback for MCP tool calls with configurable notifications.
Features:
- Real-time notifications when tools are called (request only, no completion)
- Tool-specific emoji icons for visual clarity
- Rate limiting (max 10 notifications/second)
- Notification history tracking (last 100 entries)
- Configurable settings: enable/disable, show parameters, duration, console logging
- History modal with filtering and export to clipboard
Implementation:
- Created NotificationManager with queue-based rate limiting
- Created NotificationHistoryModal for viewing past tool calls
- Integrated into tool call interceptor in ToolRegistry
- Added notification settings UI section
- Added 'View MCP Notification History' command
Benefits:
- Visual feedback for debugging and monitoring
- Transparency into AI agent actions
- Simple on/off toggle, no complex verbosity settings
- Zero performance impact when disabled
- History tracks success/failure/duration for all calls
All 10 phases of the roadmap are now complete\!
Implement three new tools for wikilink validation, resolution, and backlink queries:
New Tools:
- validate_wikilinks: Validate all wikilinks in a note with suggestions for broken links
- resolve_wikilink: Resolve a single wikilink to its target path
- backlinks: Get all backlinks to a note with optional unlinked mentions
New Files:
- src/utils/link-utils.ts: Complete wikilink parsing, resolution, and backlink utilities
Modified Files:
- src/tools/vault-tools.ts: Added 3 new methods for link operations
- src/tools/index.ts: Added 3 tool definitions and handlers
- src/types/mcp-types.ts: Added Phase 9 type definitions
- ROADMAP.md: Marked Phase 9 as complete
- CHANGELOG.md: Added v8.0.0 release notes
Key Features:
- Regex-based wikilink parsing with position tracking
- Uses MetadataCache.getFirstLinkpathDest() for accurate resolution
- Fuzzy matching suggestion engine for broken links
- Efficient backlink detection using MetadataCache.resolvedLinks
- Optional unlinked mentions with word-boundary matching
- Context snippet extraction for each occurrence
- Add get_folder_waypoint tool to extract waypoint blocks from folder notes
- Add is_folder_note tool to detect folder notes by basename or waypoint markers
- Implement waypoint edit protection in update_note to prevent corruption
- Create waypoint-utils.ts with helper functions for waypoint operations
- Add FolderWaypointResult and FolderNoteResult types
- Update ROADMAP.md and CHANGELOG.md with Phase 7 completion
- All manual tests passing
- Add enhanced 'search' tool with regex support, case sensitivity control, and advanced filtering
- Add 'search_waypoints' tool for finding Waypoint plugin markers
- Implement SearchUtils with regex/literal search, snippet extraction, and match highlighting
- Add WaypointResult and WaypointSearchResult types
- Update SearchResult type to include isRegex field
- Remove deprecated search_notes tool (breaking change)
- Support glob filtering (includes/excludes) and folder scoping
- Configurable snippet length and result limiting
- Extract wikilinks from waypoint content
Breaking Changes:
- search_notes tool removed, use 'search' tool instead
- Enhanced read_note tool with frontmatter parsing options
- parseFrontmatter option to separate frontmatter from content
- withFrontmatter and withContent options for flexible responses
- Returns structured ParsedNote JSON when parsing enabled
- Backward compatible (default behavior unchanged)
- New read_excalidraw tool for Excalidraw file metadata
- Detects compressed-json format (Excalidraw's actual format)
- Returns elementCount, hasCompressedData, metadata fields
- Handles compressed (base64) and uncompressed formats
- Preview text extraction from Text Elements section
- Optional full compressed data inclusion
- New frontmatter-utils.ts for YAML parsing
- Uses Obsidian's built-in parseYaml
- Extracts and parses frontmatter
- Handles edge cases (no frontmatter, malformed YAML)
- Excalidraw metadata parsing with compression detection
- Enhanced type definitions with JSDoc comments
- ParsedNote interface for structured note data
- ExcalidrawMetadata interface with detailed field docs
- Clear documentation of all fields and their purposes
- Comprehensive documentation
- IMPLEMENTATION_NOTES_PHASE5.md - Implementation details
- EXCALIDRAW_FIX_SUMMARY.md - Bug fix documentation
- EXCALIDRAW_TESTING_GUIDE.md - Testing instructions
- Updated CHANGELOG.md with all changes
- Updated ROADMAP.md marking Phase 5 complete
- Known limitation documented
- elementCount returns 0 for compressed files (expected)
- Decompression would require pako library (not included)
- hasCompressedData correctly identifies compressed files
- Preview text still available without decompression
- Added to roadmap as future enhancement
All manual tests passed. Phase 5 complete and production-ready.
- Add stat tool for detailed file/folder metadata
- Add exists tool for fast path existence checking
- Add StatResult and ExistsResult type definitions
- Implement stat() and exists() methods in VaultTools
- Register both tools in ToolRegistry with complete schemas
- Update version to 2.1.0
- Update ROADMAP.md to mark Phase 3 complete
- Update CHANGELOG.md with Phase 3 release notes
- Add IMPLEMENTATION_NOTES_PHASE3.md documentation
- Clean up old phase documentation files
Phase 2 - Breaking Changes (v2.0.0):
- Added typed result interfaces (FileMetadata, DirectoryMetadata, VaultInfo, SearchResult, SearchMatch)
- Unified parameter naming: list_notes now uses 'path' parameter (removed 'folder')
- Enhanced tool responses with structured JSON for all tools
- list_notes: Returns array of FileMetadata/DirectoryMetadata with full metadata
- search_notes: Returns SearchResult with line numbers, snippets, and match ranges
- get_vault_info: Returns VaultInfo with comprehensive statistics
- Updated all tool descriptions to document structured responses
- Version bumped to 2.0.0 (breaking changes)
Phase 2.1 - Post-Testing Fixes:
- Fixed root listing to exclude vault root folder itself (handles path '', '/', and isRoot())
- Fixed alphabetical sorting to be case-insensitive for stable ordering
- Improved directory metadata with better timestamp detection and error handling
- Fixed parent folder validation order (check if file before checking existence)
- Updated documentation with root path examples and leading slash warnings
- Added comprehensive test suite for sorting and root listing behavior
- Fixed test mocks to use proper TFile/TFolder instances
Tests: All 64 tests passing
Build: Successful, no errors