Haiku 5.5
Native agent · Checked operation passedChecked operation node dist/index.js · local stdio MCP start + initialize + tools/list
Agent-reported scope: Start the Obsidian MCP stdio server and read a note from a vault through obsidian_read_note
MCP server returned: obsidian-mcp · version 1.0.0.
MCP tools returned: obsidian_list_vaults, obsidian_get_vault, obsidian_list_files, obsidian_get_file_info, obsidian_read_note, obsidian_create_note, obsidian_append_note, obsidian_prepend_note, obsidian_update_note, obsidian_patch_note, obsidian_move_note, obsidian_delete_note, obsidian_search, obsidian_search_context, obsidian_read_daily_note, obsidian_append_daily_note, obsidian_prepend_daily_note, obsidian_get_properties, obsidian_get_property, obsidian_set_property, obsidian_remove_property, obsidian_list_tasks, obsidian_toggle_task, obsidian_get_backlinks, obsidian_get_links, obsidian_get_link_path, obsidian_get_orphans, obsidian_get_unresolved_links, obsidian_get_deadends, obsidian_get_tags, obsidian_get_tag_notes, obsidian_list_bases, obsidian_query_base, obsidian_get_note_context, obsidian_find_notes, obsidian_recent_changes, obsidian_list_bookmarks, obsidian_create_bookmark, obsidian_get_outline, obsidian_outline, obsidian_list_aliases, obsidian_get_aliases, obsidian_list_templates, obsidian_read_template, obsidian_word_count, obsidian_random_note, obsidian_create_unique_note, obsidian_open_note, obsidian_open_in_app, obsidian_list_plugins, obsidian_list_snippets, obsidian_list_commands, obsidian_execute_command. Tool listing does not establish authenticated tool-call success.
Run details
- run
- dharmikbhesaniya--obsidian-mcp-claude-haiku-5-5-1792804377406375167
- date
- Oct 23, 2026
- time to working
- 331.5s
- product hosting / execution
- Local stdio MCP server in the guest
- recorded operation scope
- product operation
- model
- claude-haiku-5-5
- agent / version
- claude-code / 2.1.300 (Claude Code)
- platform
- linux
- reported cost
- $0.017523
- Recorded source
- https://github.com/dharmikbhesaniya/obsidian-mcp
- Backend
- hyperv
- Tool transport
- mcp-assigned-vm
- Requested source pin (not an observed revision)
- {"commit": "41610a903a0381e8ca799792a2f37c19df0d4f82", "url": "https://github.com/dharmikbhesaniya/obsidian-mcp"}
- Test version
- readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9
- revision
- 41610a903a0381e8ca799792a2f37c19df0d4f82
Safety: Review signals: 14 known vulnerability.
Review signals: 14 known vulnerability.
OSV reports a known vulnerability in this dependency version. 5 distinct locations. 14 findings.
OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.
A short run cannot establish that code is safe.
Connections show IP addresses; proxies can hide the final hostname.
Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.
Answers recorded for this run
- The Notes domain exposes obsidian_read_note, which returns a note's content from the vault: Real input produced the expected result: vault-sentinel-7731
Source: - **Notes Domain (8 tools)**: `obsidian_read_note`, `obsidian_create_note`
Input: {"tool": "obsidian_read_note", "arguments": {"path": "hello.md"}}
Expected: the note body including the fixture sentinel
Command: node dist/index.js tools/call {"tool": "obsidian_read_note", "arguments": {"path": "hello.md"}}
Observed: vault-sentinel-7731.\\n\",\n \"revision\": \"09dc74de6897737348cfd0f13d39dc4a8fa59b98\",\n \"etag\": \"09dc74de6897737348cfd0f13d39dc4a8fa59b98\",\n \"frontmatter\": {},\n \"obsidianUri\": \"obsidian://open?vault=vault&file=hello.md\"\n}"}]}
Examples
- Run the documented test suite (unit, integration, security): command completed successfully
Source: README.md Local Development Setup / Installation & Build
Input: none
Expected: all 88 tests pass
Command: npm test
Observed: [1m[32m10 passed[39m[22m[90m (10)[39m [2m Tests [22m [1m[32m88 passed[39m[22m[90m (88)[39m [2m Start at [22m 01:19:02 [2m Duration [22m 7.84s[2m (import 54%, tests 27%, transform 17%, worker 2%)[22m [2m Import [22m [33m37 modules were evaluated 55 times[39m[2m · 2.67s total, 54% of tracked time[22m [2m [22m [2m~874ms faster with [22m[33misolate: false[39m[2m — shared modules are evaluated once per worker instead of once per file[22m [2m [22m [2mlearn more: https://vitest.dev/guide/improving-performance#test-isolation[22m
Local or hosted: both
What the agent did
Start the Obsidian MCP stdio server and read a note from a vault through obsidian_read_note
cd <guest-path> && pwd && ls -la && id -u && python3 --version && cat /etc/os-release | head -3 && (git -C . rev-parse HEAD 2>&1 | head -1)
cd <guest-path> && ls -la && cat README.md 2>/dev/null | head -300
cd <guest-path> && sed -n 300,700p README.md | grep -n -i -E "npm|node|test|cron|schedule|once|now|webhook|sync|loop|--|obsidian_cli" | head -80; echo ---; which node npm npx; node -v 2>&1; npm -v 2>&1; cat package.json
cd <guest-path> && git init -q && git remote add origin https://github.com/dharmikbhesaniya/obsidian-mcp && git fetch --depth 1 origin 41610a903a0381e8ca799792a2f37c19df0d4f82 2>&1 | tail -3; git reset --mixed FETCH_HEAD 2>&1 | tail -2; git rev-parse HEAD; git status --short | head
sudo -n true && echo SUDO_OK; apt-cache policy nodejs 2>/dev/null | head -3; cd <guest-path> && sed -n 100,125p README.md
sudo apt-get update -qq 2>&1 | tail -2; apt-cache policy nodejs | head -3
export NODE_USE_ENV_PROXY=1; curl -fsSL https://deb.nodesource.com/setup_22.x -o /tmp/ns_setup.sh && sudo -E bash /tmp/ns_setup.sh >/tmp/ns.log 2>&1; echo rc=$?; tail -3 /tmp/ns.log; sudo apt-get install -y -qq nodejs >/tmp/nodeinst.log 2>&1; echo rc=$?; tail -3 /tmp/nodeinst.log; node -v; npm -v
cd <guest-path> && npm ci > /tmp/npmci.log 2>&1; echo ci_rc=$?; tail -5 /tmp/npmci.log; npm run build > /tmp/build.log 2>&1; echo build_rc=$?; tail -5 /tmp/build.log; ls dist | head
cd <guest-path> && timeout 600 npm test > /tmp/test.log 2>&1; echo test_rc=$?; tail -25 /tmp/test.log
cd <guest-path> && which obsidian; echo "obsidian_rc=$?"; cat .env.example; echo ---; ls src src/adapters; grep -rn "OBSIDIAN_BIN_PATH\|spawn(\|execFile" src | head -20
cd <guest-path> && ls src/services src/tools src/adapters/obsidian; grep -rln "cliAdapter\|ObsidianCliAdapter\|\.run(" src | head; echo ---; grep -rn "name: \"obsidian_" src/tools | head -60 | awk -F'name: ' '{print $2}' | cut -c1-60 | tr '\n' ' '
cd <guest-path> && grep -n "async \w*(" src/services/vault.service.ts | head -60; echo ---; grep -n "cli\.\|this.cli" src/services/vault.service.ts | head -20; echo ---; grep -n "obsidian_list_vaults\|obsidian_create_note\|obsidian_read_note\|registerTool\|server.tool(" src/tools/index.ts | head -10
cd <guest-path> && sed -n 345,366p src/services/vault.service.ts; sed -n 192,200p src/services/vault.service.ts; ls <guest-path>; ls <guest-path> 2>/dev/null; ls /inputs 2>/dev/null; ls -la .coldpass
mkdir -p <guest-path> && printf '# Hello\n\nColdpass fixture note says: vault-sentinel-7731.\n' > <guest-path> && mkdir -p <guest-path> && cd <guest-path> && cat > client.mjs <<'EOF'
import { Client } from "<guest-path>";
import { StdioClientTransport } from "<guest-path>";
const [,, tool, argsJson] = process.argv;
const t = new StdioClientTransport({ command: "node", args: ["<guest-path>"], cwd: "<guest-path>", env: { ...process.env, OBSIDIAN_VAULT_PATH: "<guest-path>", MCP_TRANSPORT: "stdio", AUTH_ENABLED: "false" }, stderr: "ignore" });
const c = new Client({ name: "h", version: "1" });
await c.connect(t);
const r = await c.callTool({ name: tool, arguments: JSON.parse(argsJson || "{}") });
console.log(JSON.stringify(r).slice(0, 1500));
await c.close();
EOF
export NODE_PATH=<guest-path>; timeout 60 node client.mjs obsidian_read_note '{"path":"hello.md"}'; echo rc=$?
cd <guest-path> && grep -rn -i "setInterval\|cron\|schedul\|--once\|webhook\|setTimeout" src | head; echo ---; grep -n "Notes Domain (8 tools)" README.md | cut -c1-200; grep -n "The server exposes 54" README.md | cut -c1-120; grep -n "Run test suite" README.md; grep -n "Build TypeScript to dist" README.md
cd <guest-path> && python3 - <<'EOF'
import json
W="<guest-path>"
env={"OBSIDIAN_VAULT_PATH":"<guest-path>","MCP_TRANSPORT":"stdio","AUTH_ENABLED":"false"}
argv=["node","dist/index.js"]
probe={"kind":"mcp","argv":argv,"cwd":W,"env":env,"tool":"obsidian_read_note","arguments":{"path":"hello.md"},"expected_text":"vault-sentinel-7731"}
json.dump(probe,open("probe.json","w"),indent=2)
claims=[{"kind":"claim","claim":"The Notes domain exposes obsidian_read_note, which returns a note's content from the vault",
"source":"- **Notes Domain (8 tools)**: `obsidian_read_note`, `obsidian_create_note`",
"input":"hello.md","expected":"the note body including the fixture sentinel",
"probe_kind":"mcp","argv":argv,"env":env,"tool":"obsidian_read_note","arguments":{"path":"hello.md"},
"expected_text":"vault-sentinel-7731","cwd":W}]
json.dump(claims,open("claims.json","w"),indent=2)
examples=[{"kind":"example","claim":"Run the documented test suite (unit, integration, security)",
"source":"README.md Local Development Setup / Installation & Build",
"input":"none","expected":"all 88 tests pass","argv":["npm","test"],"cwd":W,"expected_text":"88 passed"}]
json.dump(examples,open("examples.json","w"),indent=2)
json.dump({"detected":False,"reason":"Inspected src/ for cron/schedule/--once/webhook/loop entry points: none found. The only timer is setInterval in src/transport/http.ts (session cleanup housekeeping, not a user-facing product cycle). README documents no scheduling.","checks":[]},open("cycles.json","w"),indent=2)
report={"outcome":"working","fault_owner":None,"operation":"Start the Obsidian MCP stdio server and read a note from a vault through obsidian_read_note",
"operation_scope":"Filesystem-backed vault tools only. Node 22 installed; fixture vault at <guest-path> The Obsidian desktop CLI (OBSIDIAN_BIN_PATH) is not installed, so the ~30 CLI-backed tools (e.g. search, backlinks, daily notes, tasks, commands) were not exercised.",
"steps":["git init; git remote add origin https://github.com/dharmikbhesaniya/obsidian-mcp; git fetch --depth 1 origin 41610a903a0381e8ca799792a2f37c19df0d4f82; git reset --mixed FETCH_HEAD",
"sudo apt-get update; NodeSource setup_22.x; sudo apt-get install -y nodejs (Node v22.23.4, npm 10.9.9)",
"npm ci","npm run build","npm test (88 passed)",
"node dist/index.js with OBSIDIAN_VAULT_PATH=<guest-path> via MCP client; tool obsidian_read_note path=hello.md returned sentinel vault-sentinel-7731"],
"deviations":["README says 'sudo apt install ... nodejs npm'; Ubuntu 24.04 apt offers only Node 18.19.1, below the required Node 20+. Installed Node 22 from NodeSource instead.",
"README requires Obsidian Desktop v1.12+ with CLI enabled; not installed in this guest (no obsidian binary). Used the filesystem-backed read tool instead; CLI-backed tools were not exercised.",
"No .env created; configuration passed via environment variables in probe/claims instead.",
"Created fixture vault <guest-path> outside the checkout."],
"stuck_step":None,"main_blocker":None,"plain_failure":None,"suggested_fix":"None for the tested path. To test the rest of the 54 tools, install Obsidian desktop with its CLI enabled and set OBSIDIAN_BIN_PATH."}
json.dump(report,open("report.json","w"),indent=2)
print("written")
EOF
ls -la; cd <guest-path> && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay; echo rc=$?
pgrep -af "obsidian|dist/index.js" || echo "no leftover server processes"run JSON · checker evidence · agent report + check · transcript excerpt unavailable · error excerpt unavailable