Summary
When Transcripted is configured to save meetings to a custom directory (via the native folder picker in settings), the MCP tools list_meetings and search return no results. The tool read_meeting works correctly when given a filename.
Environment
- Transcripted 1.1.31
- macOS (Apple Silicon)
- Custom meetings directory:
~/Library/CloudStorage/Dropbox/Obsidian/[VaultName]/Transcripted/meetings/
- The custom directory is configured via Transcripted's native settings, which writes meeting
.md files there correctly
- A symlink exists at
~/Library/Application Support/Transcripted/captures/meetings pointing to the custom directory (created manually as a workaround attempt)
Expected behavior
list_meetings and search should find and index meetings regardless of whether they are stored in the default Application Support path or a custom user-configured directory.
Actual behavior
list_meetings returns No meetings found. search returns no results. The MCP SQLite index (mcp_index.sqlite) contains 0 meeting entries even after restarting Transcripted and deleting the index to force a rebuild.
read_meeting works correctly when given the exact filename — it reads the file directly from the filesystem and does not depend on the index.
Root cause hypothesis
The MCP indexer likely uses Node.js fs.readdir() with withFileTypes: true and checks entry.isDirectory() to traverse subdirectories. On macOS, isDirectory() returns false for symlinks to directories (it returns the type of the symlink itself, not the target). This causes the indexer to skip the meetings symlink and produce an empty index.
The fix would be to also check entry.isSymbolicLink() and resolve the target, or use fs.stat() instead of dirent.isDirectory() when traversing the folder tree.
Workaround
None fully working. read_meeting by filename is the only functional MCP tool. Obsidian Copilot (with OpenRouter) serves as an alternative for search/history queries.
Summary
When Transcripted is configured to save meetings to a custom directory (via the native folder picker in settings), the MCP tools
list_meetingsandsearchreturn no results. The toolread_meetingworks correctly when given a filename.Environment
~/Library/CloudStorage/Dropbox/Obsidian/[VaultName]/Transcripted/meetings/.mdfiles there correctly~/Library/Application Support/Transcripted/captures/meetingspointing to the custom directory (created manually as a workaround attempt)Expected behavior
list_meetingsandsearchshould find and index meetings regardless of whether they are stored in the defaultApplication Supportpath or a custom user-configured directory.Actual behavior
list_meetingsreturnsNo meetings found.searchreturns no results. The MCP SQLite index (mcp_index.sqlite) contains 0 meeting entries even after restarting Transcripted and deleting the index to force a rebuild.read_meetingworks correctly when given the exact filename — it reads the file directly from the filesystem and does not depend on the index.Root cause hypothesis
The MCP indexer likely uses Node.js
fs.readdir()withwithFileTypes: trueand checksentry.isDirectory()to traverse subdirectories. On macOS,isDirectory()returnsfalsefor symlinks to directories (it returns the type of the symlink itself, not the target). This causes the indexer to skip themeetingssymlink and produce an empty index.The fix would be to also check
entry.isSymbolicLink()and resolve the target, or usefs.stat()instead ofdirent.isDirectory()when traversing the folder tree.Workaround
None fully working.
read_meetingby filename is the only functional MCP tool. Obsidian Copilot (with OpenRouter) serves as an alternative for search/history queries.