{
  "run_id": "dharmikbhesaniya--obsidian-mcp-gpt-6-luna-1792811529702476731",
  "date": "2026-10-24T03:23:54.700379+00:00",
  "repo": "dharmikbhesaniya/obsidian-mcp",
  "kind": "mcp",
  "source": "https://github.com/dharmikbhesaniya/obsidian-mcp",
  "commit": "41610a903a0381e8ca799792a2f37c19df0d4f82",
  "model": "gpt-6-luna",
  "model_version": "gpt-6-luna",
  "test_version": "readme-f72312298d35d84837d4fc5f6f22b138d54d456600b5ed431e36e8f5db931dbf",
  "pass": true,
  "outcome": "pass",
  "time_to_working_s": 660.9823270849884,
  "total_s": 704.9978830814362,
  "steps": [
    "pwd; vault-search 'obsidian-mcp README setup MCP tools' 2>&1; ls -la <host-path> ~/.agents/skills/i-have-adhd/SKILL.md ~/.agents/skills/ponytail/SKILL.md ~/.agents/skills/p3-mode/SKILL.md 2>&1; cat README.md; rg --files -g 'AGENTS.md' -g 'README*' -g 'package.json' -g 'pyproject.toml' -g 'requirements*.txt' -g 'uv.lock' -g 'Dockerfile' -g '*.py' -g '.github/**' | head -100; python3 --version; id -u",
    "ls -la; find . -name AGENTS.md -o -name package.json -o -name '.env.example' -o -path './src/*' | head -100; cat package.json; git status --short --branch; node -v; npm -v; sed -n '1,200p' src/index.ts 2>/dev/null; cat .env.example 2>/dev/null",
    "sudo -n apt-get update && sudo -n apt-get install -y nodejs npm; node -v; npm -v",
    "node -v; npm -v; npm install; npm run build; npm test; mkdir -p <guest-path>; mkdir -p <guest-path>; test -x /usr/bin/obsidian && echo obsidian-present || echo obsidian-absent; cat src/config/config.ts",
    "sudo -n apt-get install -y curl ca-certificates; curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -n bash -; sudo -n apt-get install -y nodejs; node -v; npm -v",
    "npm install -g npm@10 && npm -v && npm install && npm run build && npm test",
    "sudo -n npm install -g npm@10 && npm -v && npm install && npm run build && npm test",
    "cat src/tools/index.ts | head; grep -R -n 'obsidian_list_vaults\\|obsidian_list_files\\|obsidian_read_note' src/tools | head; cat > /tmp/mcp-probe.cjs <<'EOF'\nconst { Client } = require('<guest-path>');\nconst { StdioClientTransport } = require('<guest-path>');\n(async()=>{const transport=new StdioClientTransport({command:'node',args:['<guest-path>'],env:{...process.env,OBSIDIAN_VAULT_PATH:'<guest-path>',MCP_TRANSPORT:'stdio',READ_ONLY:'false',NODE_ENV:'development'}}); const c=new Client({name:'coldpass-probe',version:'1.0.0'}); await c.connect(transport); const r=await c.callTool({name:'obsidian_list_vaults',arguments:{}}); console.log(JSON.stringify(r)); await c.close();})().catch(e=>{console.error(e);process.exit(1)});\nEOF\nmkdir -p .coldpass/vault; node /tmp/mcp-probe.cjs",
    "mkdir -p .coldpass; python3 - <<'PY'\nimport json\np='<guest-path>'\nclaim='The server exposes 54 strongly-typed semantic tools (with advanced CLI escape hatch gated behind `ENABLE_ADVANCED_CLI=true`), 7 direct read resources, and 7 guided prompts:'\nprobe={'kind':'mcp','argv':['node','dist/index.js'],'cwd':p,'env':{'OBSIDIAN_VAULT_PATH':p+'/.coldpass/vault','MCP_TRANSPORT':'stdio','READ_ONLY':'false','NODE_ENV':'development'},'tool':'obsidian_list_vaults','arguments':{},'expected_text':'\"totalVaults\": 1'}\nopen(p+'/.coldpass/probe.json','w').write(json.dumps(probe,indent=2)+'\\n')\nclaims=[{'kind':'claim','claim':'The MCP server accepts a vault configuration and exposes vault inventory through its typed tools.','source':claim,'input':'Temporary empty vault at .coldpass/vault','expected':'obsidian_list_vaults reports one default vault with totalFiles 0.','probe_kind':'mcp','argv':['node','dist/index.js'],'tool':'obsidian_list_vaults','arguments':{},'expected_text':'\"totalVaults\": 1','cwd':p,'env':probe['env']}]\nopen(p+'/.coldpass/claims.json','w').write(json.dumps(claims,indent=2)+'\\n')\nopen(p+'/.coldpass/examples.json','w').write(json.dumps([{'kind':'example','claim':'README build and test commands','source':'README.md / Local Development Setup / Installation & Build','input':'npm run build and npm test','expected':'Build succeeds; all 88 tests pass.','argv':['npm','run','build'],'cwd':p,'expected_text':''},{'kind':'example','claim':'README test suite','source':'README.md / Local Development Setup / Installation & Build','input':'npm test','expected':'all 88 tests pass','argv':['npm','test'],'cwd':p,'expected_text':'88 passed'}],indent=2)+'\\n')\nopen(p+'/.coldpass/cycles.json','w').write(json.dumps({'detected':False,'reason':'Inspected README and entry points: server exposes request/response MCP tools; no product scheduler or recurring cycle was documented.','checks':[]},indent=2)+'\\n')\nreport={'outcome':'working','fault_owner':None,'operation':'Built and started the stdio MCP server, then called obsidian_list_vaults on a temporary configured vault.','operation_scope':'Node.js 20.20.2 and npm; temporary empty vault. Obsidian Desktop/CLI was not installed, and the tested vault inventory tool does not depend on it.','steps':['Installed Node.js 20 from the NodeSource repository after Ubuntu apt supplied unsupported Node 18.','Ran npm install.','Ran npm run build.','Ran npm test: all 88 tests passed.','Started dist/index.js via documented Node entrypoint and called obsidian_list_vaults; result reported one default vault and zero files.'],'deviations':['README requires Node.js 20+; initial Ubuntu nodejs package was 18.19.1, so NodeSource Node.js 20 was installed.','npm test emitted a warning that locked vitest 5.0.3 declares Node >=22.12, but all 88 tests passed on Node 20.20.2.','README local-development setup lists Obsidian Desktop 1.12+ and its CLI as prerequisites; they were not installed in the VM.'],'stuck_step':None,'main_blocker':None,'plain_failure':None,'suggested_fix':None}\nopen(p+'/.coldpass/report.json','w').write(json.dumps(report,indent=2)+'\\n')\nPY\n<env-var>=<guest-path> python3 -I <guest-path> --validate --replay",
    "cat .coldpass/probe.json; cat .coldpass/claims.json",
    "python3 - <<'PY'\nimport json\np='.coldpass/probe.json'; d=json.load(open(p)); d['expected_text']='vault'; open(p,'w').write(json.dumps(d,indent=2)+'\\n')\np='.coldpass/claims.json'; d=json.load(open(p)); d[0]['expected_text']='vault'; open(p,'w').write(json.dumps(d,indent=2)+'\\n')\nPY\n<env-var>=<guest-path> python3 -I <guest-path> --validate --replay"
  ],
  "stuck_step": null,
  "error_excerpt": null,
  "what_it_did": "Built and started the stdio MCP server, then called obsidian_list_vaults on a temporary configured vault.",
  "suggested_fix": null,
  "tokens_in": 579118,
  "tokens_out": 2374,
  "cost_usd": null,
  "usage_complete": true,
  "checks": [
    {
      "check": "operation",
      "status": "PASS",
      "details": {
        "working": true,
        "argv": [
          "node",
          "dist/index.js"
        ],
        "kind": "mcp",
        "serverInfo": {
          "name": "obsidian-mcp",
          "version": "1.0.0"
        },
        "tools": [
          "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_schema_bytes": 31079,
        "tool_result": {
          "content": [
            {
              "type": "text",
              "text": "{\n  \"defaultVault\": \"vault\",\n  \"totalVaults\": 1,\n  \"vaults\": [\n    {\n      \"name\": \"vault\",\n      \"path\": \"<guest-path>\",\n      \"isDefault\": true,\n      \"totalFiles\": 0,\n      \"readOnly\": false\n    }\n  ]\n}"
            }
          ]
        },
        "tool_result_checked": true,
        "scope": "product operation"
      }
    }
  ],
  "safety": {
    "version": "z2x-1",
    "rules_version": "z2x-1",
    "summary": "Review signals: 14 known vulnerability.",
    "findings": [
      {
        "kind": "known-vulnerability",
        "count": 14,
        "note": "OSV reports a known vulnerability in this dependency version.",
        "location_count": 5
      }
    ],
    "context": [],
    "limitations": [
      "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."
    ],
    "static": {
      "dependency_note": "OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check."
    },
    "evidence_url": "/safety/?run=dharmikbhesaniya--obsidian-mcp-gpt-6-luna-1792811529702476731",
    "evidence_file": "/data/safety/dharmikbhesaniya--obsidian-mcp-gpt-6-luna-1792811529702476731.json.gz"
  },
  "agent_execution": "native_agent",
  "agent_runtime": "codex",
  "agent_runtime_version": "codex-cli 0.163.0",
  "tool_transport": "mcp-assigned-vm",
  "platform": "linux",
  "reasoning": "low",
  "service_tier": "standard",
  "resources": {
    "cpus": 2,
    "memory_mib": 4096,
    "disk_mib": 32768
  },
  "native_tool_calls": 11,
  "native_bundle": null,
  "architecture": null,
  "backend": "hyperv",
  "platform_details": {
    "backend": "hyperv",
    "os": "linux"
  },
  "platform_conflicts": null,
  "sandbox_source": null,
  "source_pin": {
    "commit": "41610a903a0381e8ca799792a2f37c19df0d4f82",
    "url": "https://github.com/dharmikbhesaniya/obsidian-mcp"
  },
  "purpose": "initial",
  "profile": {
    "model": "gpt-6-luna",
    "reasoning": "low"
  },
  "fault": {
    "owner": null,
    "status": "resolved",
    "reason": null
  },
  "fix_id": null,
  "verifies_run_id": null,
  "hosting": null,
  "operation_scope": "product operation",
  "tool_calls": 11,
  "guest_setup": null,
  "runtime": null,
  "runtime_version": null,
  "runtime_revision": null,
  "source_revision": null,
  "evidence_version": null,
  "failure_origin": null,
  "evidence_strength": "readme_checked",
  "works": "yes",
  "install_s": null,
  "first_use_s": null,
  "mcp": "local",
  "needs": [],
  "needs_which": null,
  "agent_interface": [
    "mcp"
  ],
  "license": "MIT",
  "repo_url": "https://github.com/dharmikbhesaniya/obsidian-mcp",
  "cost_to_try": "free",
  "hardware": null,
  "what_failed": null,
  "local_or_hosted": "both",
  "cycle_checks": [
    {
      "kind": "cycle",
      "claim": "Scheduled or looping main behavior",
      "source": "repository entry points",
      "input": "source inspection",
      "expected": "identify the product trigger",
      "verdict": "yes",
      "outcome": "Inspected README and entry points: server exposes request/response MCP tools; no product scheduler or recurring cycle was documented.",
      "evidence": "Inspected README and entry points: server exposes request/response MCP tools; no product scheduler or recurring cycle was documented.",
      "command": ""
    }
  ],
  "claims": [
    {
      "kind": "claim",
      "claim": "The MCP server accepts a vault configuration and exposes vault inventory through its typed tools.",
      "source": "The server exposes 54 strongly-typed semantic tools (with advanced CLI escape hatch gated behind `ENABLE_ADVANCED_CLI=true`), 7 direct read resources, and 7 guided prompts:",
      "input": "{\"tool\": \"obsidian_list_vaults\", \"arguments\": {}}",
      "expected": "obsidian_list_vaults reports one default vault with totalFiles 0.",
      "command": "node dist/index.js tools/call {\"tool\": \"obsidian_list_vaults\", \"arguments\": {}}",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: vault",
      "evidence": "vault\\\",\\n  \\\"totalVaults\\\": 1,\\n  \\\"vaults\\\": [\\n    {\\n      \\\"name\\\": \\\"vault\\\",\\n      \\\"path\\\": \\\"<guest-path>\\\",\\n      \\\"isDefault\\\": true,\\n      \\\"totalFiles\\\": 0,\\n      \\\"readOnly\\\": false\\n    }\\n  ]\\n}\"}]}",
      "source_checked": true,
      "source_file": "README.md"
    }
  ],
  "claims_note": null,
  "example_checks": [
    {
      "kind": "example",
      "claim": "README build and test commands",
      "source": "README.md / Local Development Setup / Installation & Build",
      "input": "npm run build and npm test",
      "command": "npm run build",
      "evidence": "> obsidian-remote-mcp@0.1.0 build\n> tsc && chmod +x dist/index.js",
      "deferred": false,
      "expected": "Build succeeds; all 88 tests pass.",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    },
    {
      "kind": "example",
      "claim": "README test suite",
      "source": "README.md / Local Development Setup / Installation & Build",
      "input": "npm test",
      "command": "npm test",
      "evidence": "39m tests/unit/bm25.test.ts \u001b[2m(\u001b[22m\u001b[2m4 tests\u001b[22m\u001b[2m)\u001b[22m\u001b[32m 4\u001b[2mms\u001b[22m\u001b[39m\n\n\u001b[2m Test Files \u001b[22m \u001b[1m\u001b[32m10 passed\u001b[39m\u001b[22m\u001b[90m (10)\u001b[39m\n\u001b[2m      Tests \u001b[22m \u001b[1m\u001b[32m88 passed\u001b[39m\u001b[22m\u001b[90m (88)\u001b[39m\n\u001b[2m   Start at \u001b[22m 03:23:26\n\u001b[2m   Duration \u001b[22m 5.60s\u001b[2m (import 50%, tests 29%, transform 19%, worker 2%)\u001b[22m\n\n\u001b[2m    Isolate \u001b[22m \u001b[33m10 workers spawned\u001b[39m\u001b[2m \u00b7 ~197ms startup each (spawn + environment, per file)\u001b[22m\n\u001b[2m            \u001b[22m \u001b[2mat least ~1.77s faster with \u001b[22m\u001b[33misolate: false\u001b[39m\u001b[2m \u2014 reuses workers across files instead of one per file\u001b[22m",
      "deferred": false,
      "expected": "all 88 tests pass",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    }
  ],
  "does_what_it_says": "yes",
  "maintenance": {
    "archived": false,
    "commits_90d": 33,
    "last_commit_at": "2026-10-07T03:09:11Z",
    "last_release_at": null,
    "median_reply_hours": null,
    "merged_prs_90d": 1,
    "note": "actively maintained: last commit 16 days ago; 33 commits and 1 merged PRs in 90 days; 0 open issues, 6 open PRs; no releases",
    "open_issues": 0,
    "open_prs": 6,
    "reply_share": null,
    "reply_threads": 0,
    "verdict": "maintained"
  },
  "maintenance_verdict": "maintained",
  "maintenance_note": "actively maintained: last commit 16 days ago; 33 commits and 1 merged PRs in 90 days; 0 open issues, 6 open PRs; no releases",
  "maintained": "active",
  "maintained_note": "last commit 3 days ago",
  "last_commit_at": "2026-10-20T20:35:11Z",
  "last_release_at": null,
  "open_issues": null,
  "answered_issues": null,
  "platforms_claimed": [
    "linux",
    "mac"
  ],
  "topic": "mcp-server",
  "agent_interfaces": [
    {
      "interface": "mcp",
      "evidence": "independent checker",
      "observed": true,
      "operation_checked": true
    },
    {
      "interface": "cli",
      "evidence": "README metadata",
      "observed": false,
      "operation_checked": false
    }
  ],
  "agent_interfaces_note": "README metadata is a discovery hint, not pinned documentation proof. Observed interfaces were exercised in this run. An empty list means unknown.",
  "mcp_context": {
    "tool_count": 53,
    "schema_bytes": 31079,
    "tokens_approx": 7770,
    "estimate_method": "ceil(compact UTF-8 tools/list JSON bytes / 4)",
    "scope": "returned tools/list page only; excludes client framing and tool results"
  },
  "tested_at": "2026-10-24T03:23:54.700379+00:00",
  "tested_commit": "41610a903a0381e8ca799792a2f37c19df0d4f82",
  "tested_with": {
    "agent": "codex",
    "agent_version": "codex-cli 0.163.0",
    "model": "gpt-6-luna",
    "model_route": "gpt-6-luna",
    "reasoning": "low",
    "os": "linux",
    "backend": "hyperv",
    "transport": "mcp-assigned-vm"
  },
  "setup_identity": {
    "repo": "dharmikbhesaniya/obsidian-mcp",
    "source": "https://github.com/dharmikbhesaniya/obsidian-mcp",
    "commit": "41610a903a0381e8ca799792a2f37c19df0d4f82",
    "source_revision": null,
    "os": "linux",
    "architecture": null,
    "backend": "hyperv",
    "model": "gpt-6-luna",
    "model_version": "gpt-6-luna",
    "agent_execution": "native_agent",
    "agent_runtime": "codex",
    "agent_runtime_version": "codex-cli 0.163.0",
    "tool_transport": "mcp-assigned-vm",
    "runtime": null,
    "runtime_version": null,
    "runtime_revision": null,
    "sandbox_source": null,
    "guest_setup": null,
    "source_pin": {
      "commit": "41610a903a0381e8ca799792a2f37c19df0d4f82",
      "url": "https://github.com/dharmikbhesaniya/obsidian-mcp"
    },
    "platform_details": {
      "os": "linux",
      "backend": "hyperv"
    },
    "platform_conflicts": null,
    "reasoning": "low",
    "service_tier": "standard",
    "resources": {
      "cpus": 2,
      "memory_mib": 4096,
      "disk_mib": 32768
    },
    "operation": "Built and started the stdio MCP server, then called obsidian_list_vaults on a temporary configured vault.",
    "operation_scope": "product operation",
    "hosting": null,
    "kind": "mcp",
    "test_version": "readme-f72312298d35d84837d4fc5f6f22b138d54d456600b5ed431e36e8f5db931dbf",
    "evidence_version": null
  },
  "other_model": null,
  "other_run_id": null,
  "models_agree": null,
  "furthest_model": null,
  "transcript_url": null,
  "report_url": "/reports/dharmikbhesaniya--obsidian-mcp-gpt-6-luna-1792811529702476731.json"
}
