mirror of
https://github.com/aaronsb/obsidian-mcp-plugin.git
synced 2026-07-22 06:45:14 +00:00
Default vault.read no longer fragments-and-flattens. New contract: - fits READ_PAGE_CHARS (50000) → whole file, byte-exact, one load (common case) - exceeds → verbatim page 1, single contiguous block, with line bookends (lineStart/lineEnd/totalLines + nextPage); page=N to continue. Absolute line numbers preserved so edit.at_line still works on large files. - returnFullFile:true → entire file verbatim (explicit large override; param retained & repurposed, not retired) - query/strategy/maxFragments → semantic fragments (unchanged) - structured envelope no longer double-encodes the body (metadata sans body) Budget is char-based on purpose: line count is an invalid proxy for context cost; only bookends are line-based (for at_line). Hard invariant: a default read must never hand the agent a context-breaking raw dump. Also fixes the latent formatFileRead crash (_Formatter error_) on full-file shapes; formatter now renders verbatim + a Pagination section. src/utils/file-reader.ts rewritten; vault.ts threads `page`; formatter hardened; tool description + CHANGELOG (breaking) updated. make check green (0 errors, baseline 5 warnings, 243/243 incl. 8 new ADR-203 round-trip/pagination/fidelity tests).
9.7 KiB
9.7 KiB
Changelog
All notable changes to the Obsidian MCP Plugin will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Changed
- ⚠️ BREAKING:
vault.readis now faithful by default (ADR-203, #133). It returns the complete, byte-exact file source (no more newline-flattened fragments) when the file fits a ~50k-char budget. Large files return a verbatim page 1 with absolute line bookends (page=Nto continue) instead of a context-breaking raw dump.returnFullFile: trueis the explicit whole-large-file override;query/strategy/maxFragmentsstill return semantic fragments. The structured envelope no longer double-encodes the body. Clients that relied on the old fragmented default should pass fragment params explicitly.
Security
- 🔴 CRITICAL: Identified authentication vulnerability - no API key validation (#9)
- 🔴 CRITICAL: Identified path traversal vulnerability in file operations (#10)
- 🟠 HIGH: Identified missing input validation across all operations (#11)
- 🟠 HIGH: Identified insecure session management implementation (#12)
[0.9.3] - 2025-01-19
Added
- Enhanced Tag Search: Search now includes frontmatter tags in addition to content tags (thanks @lukemt!) (#28)
- Dynamic HTTPS Configuration: Configuration examples automatically adapt based on certificate type
- NODE_TLS_REJECT_UNAUTHORIZED only shown when using self-signed certificates
- Informational notes guide users based on their certificate configuration
- Clearer Server Settings: Separate "Enable HTTP Server" and "Enable HTTPS Server" toggles
- At least one protocol must always be enabled
- Dynamic descriptions explain when each can be disabled
- Status bar shows active protocols (HTTP/HTTPS/both)
Fixed
- Windows Configuration: Added documentation for Windows-specific command line parsing issues (#30)
- Port Conflict Detection: Fixed false detection of own running server as a conflict
- Port availability only checked when changing ports or starting server
- No longer shows confusing "port in use" messages for running server
Changed
- Security policy (SECURITY.md) for vulnerability reporting
- Contributing guidelines (CONTRIBUTING.md)
- Issue templates for bug reports and feature requests
- GitHub labels for security, priority, and technical debt tracking
- Comprehensive security audit documentation
- Project structure improved with proper open-source documentation
[0.5.14] - 2025-01-11
Added
- Advanced File Operations: New vault actions for complex file manipulation
split- Split files into multiple parts with 4 strategies:heading- Split by markdown heading levelsdelimiter- Split by custom delimiter stringlines- Split by line count per filesize- Split by character count with smart word boundaries
combine- Merge multiple files into one with options:- Custom separators between files
- Optional filename headers
- Sort files before combining (by name/size/date)
concatenate- Simple two-file joining (append/prepend/new)- All operations include semantic workflow hints
- Smart content preservation in split operations
[0.5.13] - 2025-01-10
Added
- File Management Operations: New vault actions for organizing files
move- Move files to new locations with automatic link updatesrename- Rename files in place with automatic link updatescopy- Create copies of files with optional overwrite- All operations include semantic workflow hints for next actions
- Uses native Obsidian file manager when available for link preservation
- Fallback to copy/delete for environments without direct API access
[0.5.12] - 2025-01-07
Changed
- Enhanced Tool Descriptions: Improved clarity for AI agents
- Added single emoji per operation for visual categorization (📁✏️👁️💡ℹ️🕸️)
- Clarified action descriptions with specific use cases
- Refined parameter descriptions to avoid ambiguity
- Better disambiguation between similar actions (e.g., window vs file)
- Balanced approach: ~17% character increase for significant clarity gains
Design Philosophy
- Single emoji per operation category to aid visual scanning
- No emojis in parameters to avoid style contamination in user content
- Trust the semantic hinting layer for workflow guidance
- Focus on what makes each action unique
[0.5.11] - 2025-07-07
Added
- Structured Patch Targeting: Precise document modifications
- Target headings with
targetType: 'heading'and nested paths like "Section::Subsection" - Target blocks with
targetType: 'block'using block IDs (^blockId) - Target frontmatter with
targetType: 'frontmatter'for field updates - All modes support append, prepend, and replace operations
- Target headings with
Technical Implementation
- New helper methods:
patchHeading(),patchBlock(),patchFrontmatter() - Intelligent section boundary detection for heading operations
- Automatic frontmatter creation if none exists
- Maintains exact whitespace and formatting of untargeted content
- 7 comprehensive unit tests covering all patch modes
Fixed
- Patch operations now properly handle structured targeting as originally designed
- Resolved disconnect between semantic API design and implementation
[0.5.10] - 2025-07-07
Fixed
- Patch Operation Silent Failures: Resolved parameter mismatch issue
- Patch operations were returning success without modifying files
- Fixed parameter passing between semantic router and API layer
- The router now correctly maps
oldText/newTexttoold_text/new_text - Resolves issue #4 where patch operations failed silently
Changed
- Updated semantic router to properly pass patch parameters
- Maintained backward compatibility with existing patch operations
[0.5.9] - 2025-07-05
Added
- True Concurrent Sessions Support: Multiple AI agents can work simultaneously without blocking
- Session-isolated MCP server pool architecture
- Each session gets its own complete MCP server instance
- Automatic session management with 1-hour timeout
- Session reuse for reconnecting clients
- Session Monitoring: New
obsidian://session-inforesource shows active sessions - Enhanced Documentation:
- mcp-remote configuration for Claude Desktop
- Dynamic resource count in plugin settings
- Both direct HTTP and mcp-remote options documented
Fixed
- Concurrent sessions now truly run in parallel without interference
- Graph traversal operations no longer block other sessions
- Session context properly isolated between connections
- Plugin settings UI shows all available resources
Changed
- Moved concurrency isolation to a higher architectural level
- MCP SDK remains unaware of concurrency (simpler, cleaner design)
- Transparent request routing to session-specific servers
[0.5.8c] - 2025-07-05
Added
- Session-isolated MCP server pool architecture for true concurrent processing
- MCPServerPool class to manage multiple isolated server instances
- Server pool statistics in session-info resource
Fixed
- Concurrent sessions now truly run in parallel without interference
- Graph traversal operations no longer block other sessions
- Session context properly isolated between connections
Changed
- Moved concurrency isolation to a higher architectural level
- Each session gets its own complete MCP server instance
- MCP SDK remains unaware of concurrency (simpler, cleaner design)
- Transparent request routing to session-specific servers
[0.5.8b] - 2025-07-05
Added
- Worker thread infrastructure for CPU-intensive operations
- WorkerManager for session-based worker lifecycle
- Semantic worker for processing search and graph operations
Changed
- Updated build process to compile worker scripts
- Operations can be offloaded to worker threads
Fixed
- Attempted to resolve concurrent session blocking (partial fix)
[0.5.8a] - 2025-07-05
Added
-
Concurrent Sessions Support: Multiple AI agents can now work simultaneously
- Session-based connection pooling with up to 32 concurrent operations
- Each MCP client gets a unique session ID for isolation
- Session tracking and automatic cleanup after 1 hour of inactivity
- New
obsidian://session-inforesource for monitoring active sessions
-
Worker Thread Infrastructure: Foundation for parallel processing
- Worker manager for handling CPU-intensive operations
- Prepared infrastructure for offloading search and graph traversal
- Non-blocking architecture to keep Obsidian UI responsive
-
Enhanced Connection Pool: Improved request handling
- Queue-based processing with configurable limits
- Session-aware request routing
- Automatic resource cleanup and error recovery
Changed
- Updated MCP server to support session headers (
Mcp-Session-Id) - Enhanced debug logging to include session information
- Improved request processing pipeline for better concurrency
Technical Details
- Added
ConnectionPoolclass for managing concurrent requests - Added
SessionManagerfor tracking and expiring sessions - Added
WorkerManagerfor future worker thread operations - Prepared semantic worker script for parallel processing
Previous Versions
See git history for changes before v0.5.8a