Troubleshooting
Obsidian MCP shows ✓ Connected but tools return 40101
Section titled “Obsidian MCP shows ✓ Connected but tools return 40101”Cause: The MCP server process started before the OBSIDIAN_API_KEY was updated in ~/.claude.json. It’s running with the old (or placeholder) key.
Fix: Restart Claude Code. The MCP re-reads its env vars on launch.
Syncthing-Fork on Galaxy S26+ shows yellow circle, never green
Section titled “Syncthing-Fork on Galaxy S26+ shows yellow circle, never green”Cause: Samsung One UI’s battery optimization is suspending the Syncthing background service.
Fix (do all three):
- Settings → Apps → Syncthing-Fork → Battery → Unrestricted
- Settings → Battery → Background usage limits → Never sleeping apps → add Syncthing-Fork
- In the Syncthing-Fork app: tap the status indicator → “Force start, ignore run conditions”
After all three, status goes green within seconds.
gemini extensions list returns empty (Windows)
Section titled “gemini extensions list returns empty (Windows)”Cause: Two possibilities.
- Extension is installed but disabled by an override in
~/.gemini/extensions/extension-enablement.json. Thenanobananainstall script sometimes adds a disabling override for the install path. - Non-tty output mode renders the list as empty.
Fix: Check directly:
type C:\Users\justi\.gemini\extensions\extension-enablement.jsonIf you see:
{ "nanobanana": { "overrides": ["/C:/Users/justi/*"] } }Edit it to:
{ "nanobanana": { "overrides": [] } }Or just delete the file entirely (default state is “enabled everywhere”).
obsidian_get_recent_changes errors “Cannot read properties of undefined (reading ‘tryQuery’)”
Section titled “obsidian_get_recent_changes errors “Cannot read properties of undefined (reading ‘tryQuery’)””Cause: The Obsidian Local REST API plugin uses Dataview’s API for “recent changes”. Dataview isn’t installed.
Fix: Install Dataview from Community Plugins. The tool starts working immediately. (Daily Driver uses this — also fixes that.)
Syncthing folder offer notification doesn’t appear on phone
Section titled “Syncthing folder offer notification doesn’t appear on phone”Cause: The phone didn’t yet receive the folder share from the PC (race condition or daemon was paused).
Fix: On the PC, open the Syncthing web UI → Folders → click your folder → check “Sharing” tab → confirm phone is listed. If listed but no notification on phone:
- On phone, open Syncthing-Fork → Folders tab → scroll for pending entries
- Force-refresh in the Syncthing-Fork app (pull down on the folders list)
Astro Starlight build fails with “Node 18 deprecated”
Section titled “Astro Starlight build fails with “Node 18 deprecated””Cause: Cloudflare Pages defaults to Node 18; Astro 4+ requires Node 20+.
Fix: In Cloudflare Pages project settings → Environment variables → add NODE_VERSION = 20 to both Production and Preview environments.
Obsidian mobile app says “permission denied” when opening the synced vault
Section titled “Obsidian mobile app says “permission denied” when opening the synced vault”Cause: Android storage permissions for Obsidian aren’t set.
Fix: Settings → Apps → Obsidian → Permissions → Files and media → Allow all the time.
Claude Code “MCP server failed to connect” for mcp-obsidian
Section titled “Claude Code “MCP server failed to connect” for mcp-obsidian”Cause: Common reasons:
- Obsidian app isn’t running (the Local REST API plugin only exposes when Obsidian is open)
- API key in
~/.claude.jsondoesn’t match the Local REST API plugin’s key - Port mismatch (default is 27124 HTTPS, 27123 HTTP — both need to be enabled)
Fix: Open Obsidian → Settings → Community plugins → Local REST API → confirm the plugin is enabled. Copy the API key. Open ~/.claude.json, find the mcp-obsidian entry, confirm OBSIDIAN_API_KEY matches. Save and restart Claude Code.
Generated image filename has .png extension but file says JPEG
Section titled “Generated image filename has .png extension but file says JPEG”Cause: A nanobanana extension quirk — saves JPEGs with .png extension.
Fix: Functionally harmless (Obsidian and browsers render based on content, not extension). If it bothers you, rename:
Get-ChildItem *.png | ForEach-Object { Rename-Item $_ ($_.BaseName + ".jpg") }