fix: read binary files via native FS instead of Obsidian CLI

The Obsidian CLI does not support binary file output, causing corrupted
or empty results for images, PDFs, ZIPs, etc.

New approach for binary files (known MIME type from extension):
- Run 'obsidian vault info=path' to get the vault root filesystem path
- If 'file' param: run 'obsidian file file=<name>' and parse the 'path'
  field from its output to get the vault-relative path
- If 'path' param: use it directly as the vault-relative path
- Read the file with Node fs.readFile() and return as MCP content

Images -> { type: 'image', data, mimeType }
Other binary -> { type: 'resource', resource: { uri, mimeType, blob } }

Unknown extensions fall through to the CLI with a runtime binary
detection fallback that also uses native FS if triggered.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-04-30 20:08:35 -05:00
parent 8b651d379a
commit 76b4aed508
5 changed files with 98 additions and 31 deletions

View File

@@ -9,6 +9,7 @@
"server": "node dist/http-server.js",
"validate-manifest": "mcpb validate manifest.json",
"pack": "npm run build && mcpb pack",
"inspect": "npx @modelcontextprotocol/inspector node dist/index.js",
"test": "jest",
"dev": "tsc --watch",
"validate-tools": "node scripts/validate-tools.js"