{
  "checker": {
    "claims": [
      {
        "claim": "The MCP server accepts a vault configuration and exposes vault inventory through its typed tools.",
        "command": "node dist/index.js tools/call {\"tool\": \"obsidian_list_vaults\", \"arguments\": {}}",
        "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}\"}]}",
        "expected": "obsidian_list_vaults reports one default vault with totalFiles 0.",
        "input": "{\"tool\": \"obsidian_list_vaults\", \"arguments\": {}}",
        "kind": "claim",
        "outcome": "Real input produced the expected result: vault",
        "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:",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Inspected README and entry points: server exposes request/response MCP tools; no product scheduler or recurring cycle was documented.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Inspected README and entry points: server exposes request/response MCP tools; no product scheduler or recurring cycle was documented.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "node",
        "dist/index.js"
      ],
      "kind": "mcp",
      "scope": "product operation",
      "serverInfo": {
        "name": "obsidian-mcp",
        "version": "1.0.0"
      },
      "tool_result": {
        "content": [
          {
            "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}",
            "type": "text"
          }
        ]
      },
      "tool_result_checked": true,
      "tool_schema_bytes": 31079,
      "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"
      ],
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "README build and test commands",
        "command": "npm run build",
        "deferred": false,
        "evidence": "> obsidian-remote-mcp@0.1.0 build\n> tsc && chmod +x dist/index.js",
        "expected": "Build succeeds; all 88 tests pass.",
        "input": "npm run build and npm test",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md / Local Development Setup / Installation & Build",
        "verdict": "yes"
      },
      {
        "claim": "README test suite",
        "command": "npm test",
        "deferred": false,
        "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",
        "expected": "all 88 tests pass",
        "input": "npm test",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md / Local Development Setup / Installation & Build",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "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."
  ],
  "fault_owner": null,
  "main_blocker": null,
  "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.",
  "outcome": "working",
  "plain_failure": null,
  "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."
  ],
  "stuck_step": null,
  "suggested_fix": null
}
