{
  "run_id": "doobidoo--mcp-memory-service-claude-haiku-5-5-1792806759878846194",
  "date": "2026-10-24T02:10:03.694825+00:00",
  "repo": "doobidoo/mcp-memory-service",
  "kind": "mcp",
  "source": "https://github.com/doobidoo/mcp-memory-service",
  "commit": "441e0ee1a17be3d51cf12a2d7d2a936cee69aded",
  "model": "claude-haiku-5-5",
  "model_version": "claude-haiku-5-5",
  "test_version": "readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9",
  "pass": true,
  "outcome": "pass",
  "time_to_working_s": 976.8187046430539,
  "total_s": 1043.8159482479095,
  "steps": [
    "cd <guest-path> && pwd && ls -la && id -u && python3 --version && cat README.md | head -200",
    "cd <guest-path> && git status 2>&1 | head -3; ls /inputs 2>&1; ls <guest-path> 2>&1",
    "cd <guest-path> && git init -q && git remote add origin https://github.com/doobidoo/mcp-memory-service && git fetch --depth 1 origin 441e0ee1a17be3d51cf12a2d7d2a936cee69aded 2>&1 | tail -3; git reset --mixed FETCH_HEAD 2>&1; git log --oneline -1; grep -n \"requires-python\\|^name\\|^version\" pyproject.toml | head; sed -n 200,400p README.md | grep -n \"memory \\|pip install\\|^#\" | head -80",
    "cd /tmp && (python3 -m venv <guest-path> 2>&1 || (sudo apt-get update -qq && sudo apt-get install -y -qq python3-venv >/dev/null && python3 -m venv <guest-path>)) && <guest-path> install -q --upgrade pip 2>&1 | tail -2; <guest-path> install mcp-memory-service 2>&1 | tail -5; ls <guest-path> | grep -i memory",
    "cd <guest-path> && sed -n 60,80p README.md; grep -n \"memory_store\\|retrieve_memory\\|memory server\\|memory store\\|memory retrieve\\|search_memory\" README.md | head -30; <guest-path> --help 2>&1 | head -40",
    "cd <guest-path> && grep -rn \"name=\\\"store_memory\\\"\\|\\\"store_memory\\\"\\|name=\\\"retrieve_memory\\\"\\|\\\"retrieve_memory\\\"\\|\\\"search_by_tag\\\"\" src | head; <guest-path> server --help 2>&1 | head -30; <guest-path> status 2>&1 | tail -15",
    "mkdir -p <guest-path> && cat > <guest-path> <<'EOF'\nimport asyncio, json\nfrom mcp import ClientSession, StdioServerParameters\nfrom mcp.client.stdio import stdio_client\nasync def main():\n    p = StdioServerParameters(command=\"<guest-path>\", args=[\"server\"], cwd=\"/tmp\")\n    async with stdio_client(p) as (r, w):\n        async with ClientSession(r, w) as s:\n            await s.initialize()\n            for t in (await s.list_tools()).tools:\n                if t.name in (\"store_memory\",\"retrieve_memory\",\"search_by_tag\"):\n                    print(t.name, json.dumps(t.inputSchema)[:400])\nasyncio.run(main())\nEOF\ncd /tmp && timeout 120 <guest-path> -I <guest-path> 2>&1 | tail -20",
    "cd /tmp && sed -i 's/if t.name in (\"store_memory\",\"retrieve_memory\",\"search_by_tag\"):/if True:/' <guest-path> && timeout 120 <guest-path> -I <guest-path> 2>/dev/null | cut -c1-300; echo rc=$?",
    "cat > <guest-path> <<'EOF'\nimport asyncio, json, sys\nfrom mcp import ClientSession, StdioServerParameters\nfrom mcp.client.stdio import stdio_client\nasync def main():\n    p = StdioServerParameters(command=\"<guest-path>\", args=[\"server\"], cwd=\"/tmp\")\n    async with stdio_client(p) as (r, w):\n        async with ClientSession(r, w) as s:\n            await s.initialize()\n            res = await s.call_tool(\"memory_store\", {\"content\": \"coldpass pin test: the blue heron guards the north gate\"})\n            print(\"STORE:\", res.content[0].text[:600])\n            res = await s.call_tool(\"memory_search\", {\"query\": \"blue heron north gate\", \"mode\": \"exact\"})\n            print(\"SEARCH:\", res.content[0].text[:800])\nasyncio.run(main())\nEOF\ncd /tmp && timeout 180 <guest-path> -I <guest-path> 2>/dev/null; echo rc=$?",
    "cat > <guest-path> <<'EOF'\nimport asyncio\nfrom mcp import ClientSession, StdioServerParameters\nfrom mcp.client.stdio import stdio_client\nasync def main():\n    p = StdioServerParameters(command=\"<guest-path>\", args=[\"server\"], cwd=\"/tmp\")\n    async with stdio_client(p) as (r, w):\n        async with ClientSession(r, w) as s:\n            await s.initialize()\n            print(\"STORE:\", (await s.call_tool(\"memory_store\", {\"content\": \"coldpass pin test: the blue heron guards the north gate\"})).content[0].text[:200])\n            print(\"SEARCH-default:\", (await s.call_tool(\"memory_search\", {\"query\": \"blue heron north gate\"})).content[0].text[:500])\n            print(\"LIST:\", (await s.call_tool(\"memory_list\", {})).content[0].text[:500])\nasyncio.run(main())\nEOF\ncd /tmp && timeout 180 <guest-path> -I <guest-path> 2>/dev/null; echo rc=$?; <guest-path> info 2>/dev/null | head -5",
    "cd /tmp && <guest-path> install -q 'mcp-memory-service[sqlite-ml]' 2>&1 | tail -5; echo rc=$?; <guest-path> info 2>/dev/null | grep -i \"path\\|database\\|model\\|Status\" | head; env | grep -i \"MCP_MEMORY\\|MCP_\" | head",
    "cd /tmp && <guest-path> show onnxruntime sentence-transformers 2>/dev/null | grep -E \"^(Name|Version)\"; <guest-path> status 2>&1 | tail -12; ls -la ~/.local/share/mcp-memory* 2>/dev/null",
    "rm -rf ~/.local/share/mcp-memory && cd /tmp && timeout 240 <guest-path> -I <guest-path> 2>/dev/null; echo rc=$?",
    "cd <guest-path> && grep -n \"Persistent memory\\|Semantic and keyword\\|ingest-document\\|consolidat\\|cron\\|schedul\\|--once\\|--now\" README.md | cut -c1-250; grep -rn \"def _run_scheduler\\|CronTrigger\\|IntervalTrigger\" src | head -5",
    "cat > <guest-path> <<'EOF'\nimport asyncio\nfrom mcp import ClientSession, StdioServerParameters\nfrom mcp.client.stdio import stdio_client\nasync def main():\n    p = StdioServerParameters(command=\"<guest-path>\", args=[\"server\"], cwd=\"/tmp\")\n    async with stdio_client(p) as (r, w):\n        async with ClientSession(r, w) as s:\n            await s.initialize()\n            print(\"RUN:\", (await s.call_tool(\"memory_consolidate\", {\"action\": \"run\", \"time_horizon\": \"daily\"})).content[0].text[:700])\n            print(\"SEARCH:\", (await s.call_tool(\"memory_search\", {\"query\": \"blue heron north gate\"})).content[0].text[:300])\nasyncio.run(main())\nEOF\ncd /tmp && timeout 240 <guest-path> -I <guest-path> 2>/dev/null; echo rc=$?",
    "cd <guest-path> && grep -rn \"Consolidation is disabled\" src | head -3; grep -rn \"CONSOLIDATION_ENABLED\\|consolidation.*enabled\" src/mcp_memory_service/config.py 2>/dev/null | head -5; grep -rln \"CONSOLIDATION_ENABLED\" src | head -3; grep -n \"CONSOLIDATION\" .env.example | head -10",
    "cd /tmp && MCP_CONSOLIDATION_ENABLED=true timeout 300 <guest-path> -I <guest-path> 2>/dev/null; echo rc=$?",
    "cd <guest-path> && sed -n 465,480p src/mcp_memory_service/server/handlers/consolidation.py; grep -rn \"CONSOLIDATION_ENABLED\" src | head -5",
    "cd <guest-path> && grep -rn \"^CONSOLIDATION_ENABLED\\|CONSOLIDATION_ENABLED =\" src | head; grep -rn \"MCP_CONSOLIDATION_ENABLED\" src/mcp_memory_service/config* 2>/dev/null | head -3; grep -rn \"def _env_bool\\|CONSOLIDATION_ENABLED\" src/mcp_memory_service/consolidation/*.py | head -5",
    "cd /tmp && sed -i 's/args=\\[\"server\"\\], cwd=\"\\/tmp\")/args=[\"server\"], cwd=\"\\/tmp\", env={\"HOME\": \"<host-path>\", \"PATH\": \"\\/usr\\/bin:\\/bin\", \"MCP_CONSOLIDATION_ENABLED\": \"true\"})/' <guest-path> && grep -n StdioServerParameters <guest-path> | tail -1 && timeout 300 <guest-path> -I <guest-path> 2>/dev/null; echo rc=$?",
    "echo HOME=$HOME; cd <guest-path> && grep -rn \"Consolidation system not available\" src | head -2; cd /tmp && <guest-path> -c \"\nimport mcp_memory_service.consolidation as c; print('ok', c.__file__)\" 2>&1 | tail -3; <guest-path> -c \"import sklearn\" 2>&1 | tail -1; ls -la ~/.local/share/mcp-memory 2>&1 | head -3",
    "cd <guest-path> && sed -n 25,50p src/mcp_memory_service/server/handlers/consolidation.py",
    "cd <guest-path> && sed -n '/optional-dependencies/,/^\\[tool/p' pyproject.toml | head -60; grep -rn \"consolidator = \\|self.consolidator =\" src | head -5",
    "cd <guest-path> && grep -n \"@router\\.\\(post\\|get\\)<email>(\\\"/api/memories\\\"\\<email>(\\\"/memories\\\"\\|router.post(\\\"/\\\"\" src/mcp_memory_service/web/api/memories.py | head -3",
    "cd <guest-path> && sed -n 70,122p src/mcp_memory_service/web/api/consolidation.py; grep -n \"consolidation\" src/mcp_memory_service/web/app.py | grep -i \"include_router\\|prefix\" | head",
    "cd /tmp && (HOME=<guest-path> MCP_ALLOW_ANONYMOUS_ACCESS=true MCP_CONSOLIDATION_ENABLED=true nohup <guest-path> server --http --http-port 8765 > <guest-path> 2>&1 &) ; sleep 25; curl -s -m 10 http://127.0.0.1:8765/api/health; echo; curl -s -m 10 http://127.0.0.1:8765/api/consolidation/status; echo; tail -3 <guest-path> | cut -c1-300",
    "sleep 30; curl -s -m 10 -i http://127.0.0.1:8765/api/health | head -12; echo; curl -s -m 10 http://127.0.0.1:8765/api/consolidation/status | head -c 400; echo; tail -5 <guest-path> | cut -c1-300; pgrep -af \"memory server\" | head",
    "curl -s -m 120 -X POST http://127.0.0.1:8765/api/consolidation/trigger -H 'Content-Type: application/json' -d '{\"time_horizon\":\"daily\"}'; echo; echo rc=$?; grep -i \"consolidat\\|scheduler\" <guest-path> | tail -5 | cut -c1-250",
    "pkill -f \"memory server --http --http-port 8765\"; sleep 3; (curl -s -m 5 http://127.0.0.1:8765/api/health || echo \"port 8765 closed\"); cd <guest-path> && mkdir -p .coldpass/.. && cat > .coldpass/probe.json <<'EOF'\n{\"kind\":\"mcp\",\"argv\":[\"<guest-path>\",\"server\"],\"cwd\":\"<guest-path>\",\"env\":{\"HOME\":\"<guest-path>\"},\"tool\":\"memory_search\",\"arguments\":{\"query\":\"blue heron north gate\"},\"expected_text\":\"the blue heron guards the north gate\"}\nEOF\ncat > .coldpass/claims.json <<'EOF'\n[{\"kind\":\"claim\",\"claim\":\"Persistent memory: memories stored in one session can be retrieved later through the MCP server\",\"source\":\"README.md\",\"quote_source\":\"Keep decisions, notes, and project context across sessions and agents.\",\"input\":\"blue heron north gate\",\"expected\":\"stored memory returned\",\"probe_kind\":\"mcp\",\"argv\":[\"<guest-path>\",\"server\"],\"env\":{\"HOME\":\"<guest-path>\"},\"tool\":\"memory_search\",\"arguments\":{\"query\":\"blue heron north gate\"},\"expected_text\":\"the blue heron guards the north gate\",\"cwd\":\"<guest-path>\"}]\nEOF\ncat > .coldpass/cycles.json <<'EOF'\n{\"detected\":false,\"reason\":\"Entry points inspected: src/mcp_memory_service/consolidation/scheduler.py uses APScheduler CronTrigger/IntervalTrigger, but in this guest the scheduler reported 'Scheduler not available' under `memory server --http` with MCP_CONSOLIDATION_ENABLED=true, and the stdio MCP server has no consolidator ('Consolidation system not available'). A manual cycle was triggered by hand via POST /api/consolidation/trigger ({\\\"time_horizon\\\":\\\"daily\\\"}) and returned status completed, processed 1. That manual HTTP trigger is not a product schedule and cannot be replayed as a cli check here.\",\"checks\":[]}\nEOF\ncat > .coldpass/examples.json <<'EOF'\n[{\"kind\":\"example\",\"claim\":\"Quickstart example: run the MCP server with the documented command and exercise a real tool\",\"source\":\"README.md\",\"reason\":\"Covered by the probe and claim above (memory server over stdio, memory_store then memory_search). The repository's pytest suite was not run within this task; no other runnable README example was executed.\"}]\nEOF\npython3 -I -c \"import json;[json.load(open('.coldpass/'+f)) for f in ['probe.json','claims.json','cycles.json','examples.json']];print('json ok')\"",
    "ps -eo pid,args | grep \"[m]emory server --http\" | grep -v \"bash -c\" | cut -c1-120; curl -s -m 5 http://127.0.0.1:8765/api/health || echo \"port 8765 closed\"",
    "cd <guest-path> && mkdir -p .coldpass && cat > .coldpass/probe.json <<'EOF'\n{\"kind\":\"mcp\",\"argv\":[\"<guest-path>\",\"server\"],\"cwd\":\"<guest-path>\",\"env\":{\"HOME\":\"<guest-path>\"},\"tool\":\"memory_search\",\"arguments\":{\"query\":\"blue heron north gate\"},\"expected_text\":\"the blue heron guards the north gate\"}\nEOF\ncat > .coldpass/claims.json <<'EOF'\n[{\"kind\":\"claim\",\"claim\":\"Persistent memory: memories stored in one session can be retrieved later through the MCP server\",\"source\":\"Keep decisions, notes, and project context across sessions and agents.\",\"input\":\"blue heron north gate\",\"expected\":\"stored memory returned\",\"probe_kind\":\"mcp\",\"argv\":[\"<guest-path>\",\"server\"],\"env\":{\"HOME\":\"<guest-path>\"},\"tool\":\"memory_search\",\"arguments\":{\"query\":\"blue heron north gate\"},\"expected_text\":\"the blue heron guards the north gate\",\"cwd\":\"<guest-path>\"}]\nEOF\ncat > .coldpass/cycles.json <<'EOF'\n{\"detected\":false,\"reason\":\"Entry points inspected: src/mcp_memory_service/consolidation/scheduler.py uses APScheduler CronTrigger/IntervalTrigger, but in this guest the scheduler reported 'Scheduler not available' under memory server --http with MCP_CONSOLIDATION_ENABLED=true, and the stdio MCP server has no consolidator ('Consolidation system not available'). A manual cycle was triggered by hand via POST /api/consolidation/trigger with time_horizon daily, which returned status completed, processed 1. That manual HTTP trigger is not a product schedule and cannot be replayed as a cli check here.\",\"checks\":[]}\nEOF\ncat > .coldpass/examples.json <<'EOF'\n[{\"kind\":\"example\",\"claim\":\"Quickstart: run the MCP server with the documented command and exercise a real tool\",\"source\":\"README.md\",\"reason\":\"Covered by the probe and claim (memory server over stdio, memory_store then memory_search). The repository pytest suite was not run; no other runnable README example was executed.\"}]\nEOF\npython3 -I -c \"import json;[json.load(open('.coldpass/'+f)) for f in ['probe.json','claims.json','cycles.json','examples.json']];print('json ok')\"; grep -c \"Keep decisions, notes, and project context across sessions and agents.\" README.md",
    "cd <guest-path> && cat > .coldpass/report.json <<'EOF'\n{\"outcome\":\"working\",\"fault_owner\":\"repo\",\"operation\":\"Store and retrieve a memory through the MCP stdio server (memory server) using memory_store and memory_search\",\"operation_scope\":\"Linux Ubuntu guest, Python 3.12.3, pinned commit 441e0ee, mcp-memory-service 12.3.1 in <guest-path>, SQLite-vec storage with ONNX all-MiniLM-L6-v2 embeddings, stdio transport, local only\",\"steps\":[\"git init; git remote add origin https://github.com/doobidoo/mcp-memory-service; git fetch --depth 1 origin 441e0ee1a17be3d51cf12a2d7d2a936cee69aded; git reset --mixed FETCH_HEAD\",\"python3 -m venv <guest-path> (failed: ensurepip missing; installed python3-venv via sudo apt-get, then recreated venv)\",\"<guest-path> install mcp-memory-service\",\"<guest-path> install 'mcp-memory-service[sqlite-ml]'\",\"<guest-path> server (MCP stdio) -> memory_store, memory_search\",\"<guest-path> server --http --http-port 8765 with MCP_ALLOW_ANONYMOUS_ACCESS=true MCP_CONSOLIDATION_ENABLED=true; GET /api/health; POST /api/consolidation/trigger\"],\"deviations\":[\"Base pip install mcp-memory-service alone stored a memory with hash pseudo-embeddings, then refused all later reads and writes with 'refusing to write hash pseudo-vectors'; fixed by installing the documented extra mcp-memory-service[sqlite-ml] (onnxruntime and tokenizers). I deleted the test database I had created (~/.local/share/mcp-memory under HOME=<guest-path>) to get a clean state.\",\"python3 -m venv failed on missing ensurepip; installed python3-venv with sudo apt-get and recreated the venv.\",\"Consolidation through the stdio MCP server returns 'Consolidation system not available' (no consolidator). The HTTP server's scheduler reported 'Scheduler not available', so the cycle was triggered manually via POST /api/consolidation/trigger rather than by a scheduler.\",\"Did not run the repository pytest suite or the interactive install.py; did not install the ML extra or torch.\"],\"stuck_step\":null,\"main_blocker\":null,\"plain_failure\":\"On a plain install from the README (pip install mcp-memory-service), the first save succeeds but the service then refuses every later read and write, because it has no real embedding model. Installing the documented sqlite-ml extra fixes it. Also, the background consolidation scheduler did not start in this guest, so the cycle was triggered by hand.\",\"suggested_fix\":\"Make the README quickstart install the sqlite-ml extra (pip install 'mcp-memory-service[sqlite-ml]'), or fail at install time instead of allowing a first write that poisons the database. Also check why the consolidation scheduler reports 'Scheduler not available' when MCP_CONSOLIDATION_ENABLED=true.\"}\nEOF\npython3 -I -c \"import json;json.load(open('.coldpass/report.json'));print('report ok')\"; <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | tail -40"
  ],
  "stuck_step": null,
  "error_excerpt": null,
  "what_it_did": "Store and retrieve a memory through the MCP stdio server (memory server) using memory_store and memory_search",
  "suggested_fix": null,
  "tokens_in": 1015962,
  "tokens_out": 20106,
  "cost_usd": 0.030383760000000003,
  "usage_complete": true,
  "checks": [
    {
      "check": "operation",
      "status": "PASS",
      "details": {
        "working": true,
        "argv": [
          "<guest-path>",
          "server"
        ],
        "kind": "mcp",
        "serverInfo": {
          "name": "memory",
          "version": "12.3.1"
        },
        "tools": [
          "memory_store",
          "memory_store_session",
          "memory_search",
          "memory_list",
          "memory_delete",
          "memory_cleanup",
          "memory_health",
          "memory_stats",
          "memory_update",
          "memory_consolidate",
          "memory_ingest",
          "memory_harvest",
          "memory_quality",
          "memory_graph",
          "memory_conflicts",
          "memory_resolve",
          "mistake_note_add",
          "mistake_note_search",
          "mistake_note_update",
          "mistake_note_delete",
          "get_quarantined_memories",
          "unquarantine_memory",
          "commit_session_legacy",
          "get_bootstrap_profile",
          "get_onboarding_guide",
          "memory_distill",
          "memory_explore",
          "memory_detail"
        ],
        "tool_schema_bytes": 42104,
        "tool_result": {
          "content": [
            {
              "type": "text",
              "text": "Found 1 memories (mode: semantic) for query: 'blue heron north gate'\n\n1. coldpass pin test: the blue heron guards the north gate\n   Hash: 68f94fe7bd77ff403d348a5f68be2b932516ea19a3788eec889889a38e4d8fe4\n   Created: 2026-10-24T02:01:32.081062Z [untagged]"
            }
          ],
          "isError": false
        },
        "tool_result_checked": true,
        "scope": "product operation"
      }
    }
  ],
  "safety": {
    "version": "z2x-1",
    "rules_version": "z2x-1",
    "summary": "Review signals: 1 connection review, 2 download and execute, 1 encoded blob, 29 hardcoded secret, 11 known vulnerability, 1 outside write. 3 static matches retained as context.",
    "findings": [
      {
        "kind": "connection-review",
        "count": 1,
        "note": "Repository processes attempted these non-loopback connections; proxies can hide the final hostname.",
        "location_count": 18,
        "process_count": 5
      },
      {
        "kind": "download-and-execute",
        "count": 2,
        "note": "Source contains download and execute; review its purpose.",
        "location_count": 2
      },
      {
        "kind": "encoded-blob",
        "count": 1,
        "note": "Source contains encoded blob; review its purpose.",
        "location_count": 1,
        "path": "site/demo/assets/sqlite3.wasm"
      },
      {
        "kind": "hardcoded-secret",
        "count": 29,
        "note": "Gitleaks found a possible hardcoded secret; value withheld.",
        "location_count": 15
      },
      {
        "kind": "known-vulnerability",
        "count": 10,
        "note": "OSV reports a known vulnerability in this dependency version.",
        "location_count": 4
      },
      {
        "kind": "outside-write",
        "count": 1,
        "note": "Repository processes attempted these writes outside documented output/cache paths.",
        "location_count": 2,
        "process_count": 1,
        "processes": [
          {
            "executable": "<guest-path>",
            "owner": "repo",
            "pid": "3776",
            "source": "memory"
          }
        ]
      }
    ],
    "context": [
      {
        "kind": "hardcoded-secret",
        "count": 3,
        "note": "Gitleaks found a possible hardcoded secret; value withheld.",
        "location_count": 2
      }
    ],
    "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=doobidoo--mcp-memory-service-claude-haiku-5-5-1792806759878846194",
    "evidence_file": "/data/safety/doobidoo--mcp-memory-service-claude-haiku-5-5-1792806759878846194.json.gz"
  },
  "agent_execution": "native_agent",
  "agent_runtime": "claude-code",
  "agent_runtime_version": "2.1.300 (Claude Code)",
  "tool_transport": "mcp-assigned-vm",
  "platform": "linux",
  "reasoning": "low",
  "service_tier": null,
  "resources": {
    "cpus": 2,
    "memory_mib": 4096,
    "disk_mib": 32768
  },
  "native_tool_calls": 32,
  "native_bundle": null,
  "architecture": null,
  "backend": "hyperv",
  "platform_details": {
    "backend": "hyperv",
    "os": "linux"
  },
  "platform_conflicts": null,
  "sandbox_source": null,
  "source_pin": {
    "commit": "441e0ee1a17be3d51cf12a2d7d2a936cee69aded",
    "url": "https://github.com/doobidoo/mcp-memory-service"
  },
  "purpose": "initial",
  "profile": {
    "model": "claude-haiku-5-5",
    "reasoning": "low"
  },
  "fault": {
    "owner": "repo",
    "status": "diagnosed",
    "reason": null
  },
  "fix_id": null,
  "verifies_run_id": null,
  "hosting": null,
  "operation_scope": "product operation",
  "tool_calls": 32,
  "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": "Apache-2.0",
  "repo_url": "https://github.com/doobidoo/mcp-memory-service",
  "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": "Entry points inspected: src/mcp_memory_service/consolidation/scheduler.py uses APScheduler CronTrigger/IntervalTrigger, but in this guest the scheduler reported 'Scheduler not available' under memory server --http with MCP_CONSOLIDATION_ENABLED=true, and the stdio MCP server has no consolidator ('Consolidation system not available'). A manual cycle was triggered by hand via POST /api/consolidation/trigger with time_horizon daily, which returned status completed, processed 1. That manual HTTP trigger is not a product schedule and cannot be replayed as a cli check here.",
      "evidence": "Entry points inspected: src/mcp_memory_service/consolidation/scheduler.py uses APScheduler CronTrigger/IntervalTrigger, but in this guest the scheduler reported 'Scheduler not available' under memory server --http with MCP_CONSOLIDATION_ENABLED=true, and the stdio MCP server has no consolidator ('Consolidation system not available'). A manual cycle was triggered by hand via POST /api/consolidation/trigger with time_horizon daily, which returned status completed, processed 1. That manual HTTP trigger is not a product schedule and cannot be replayed as a cli check here.",
      "command": ""
    }
  ],
  "claims": [
    {
      "kind": "claim",
      "claim": "Persistent memory: memories stored in one session can be retrieved later through the MCP server",
      "source": "Keep decisions, notes, and project context across sessions and agents.",
      "input": "{\"tool\": \"memory_search\", \"arguments\": {\"query\": \"blue heron north gate\"}}",
      "expected": "stored memory returned",
      "command": "<guest-path> server tools/call {\"tool\": \"memory_search\", \"arguments\": {\"query\": \"blue heron north gate\"}}",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: the blue heron guards the north gate",
      "evidence": "the blue heron guards the north gate\\n   Hash: 68f94fe7bd77ff403d348a5f68be2b932516ea19a3788eec889889a38e4d8fe4\\n   Created: 2026-10-24T02:01:32.081062Z [untagged]\"}], \"isError\": false}",
      "source_checked": true,
      "source_file": "README.md"
    }
  ],
  "claims_note": null,
  "example_checks": [
    {
      "kind": "example",
      "claim": "Quickstart: run the MCP server with the documented command and exercise a real tool",
      "source": "README.md",
      "input": "",
      "command": "",
      "evidence": "Covered by the probe and claim (memory server over stdio, memory_store then memory_search). The repository pytest suite was not run; no other runnable README example was executed.",
      "deferred": false,
      "expected": "documented command completes successfully",
      "verdict": "blocked",
      "outcome": "Covered by the probe and claim (memory server over stdio, memory_store then memory_search). The repository pytest suite was not run; no other runnable README example was executed."
    }
  ],
  "does_what_it_says": "yes",
  "maintenance": {
    "last_commit_at": "2026-10-23T23:15:59Z",
    "commits_90d": 677,
    "merged_prs_90d": 357,
    "open_issues": 25,
    "open_prs": 1,
    "reply_share": 1.0,
    "reply_threads": 1,
    "median_reply_hours": 4.6,
    "last_release_at": "2026-10-23T09:16:20Z",
    "archived": false,
    "verdict": "maintained",
    "note": "actively maintained: last commit 0 days ago; 677 commits and 357 merged PRs in 90 days; 25 open issues, 1 open PRs; 1 of 1 recent threads got a maintainer reply, median first reply 4.6h; latest release 2026-10-23"
  },
  "maintenance_verdict": "maintained",
  "maintenance_note": "actively maintained: last commit 0 days ago; 677 commits and 357 merged PRs in 90 days; 25 open issues, 1 open PRs; 1 of 1 recent threads got a maintainer reply, median first reply 4.6h; latest release 2026-10-23",
  "maintained": "active",
  "maintained_note": "last commit 0 days ago; 2 open issues, 4 answered or closed",
  "last_commit_at": "2026-10-23T23:16:01Z",
  "last_release_at": "2026-10-23T09:16:20Z",
  "open_issues": 2,
  "answered_issues": 4,
  "platforms_claimed": [
    "linux"
  ],
  "topic": "mcp-server",
  "agent_interfaces": [
    {
      "interface": "mcp",
      "evidence": "independent checker",
      "observed": true,
      "operation_checked": true
    },
    {
      "interface": "api",
      "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": 28,
    "schema_bytes": 42104,
    "tokens_approx": 10526,
    "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-24T02:10:03.694825+00:00",
  "tested_commit": "441e0ee1a17be3d51cf12a2d7d2a936cee69aded",
  "tested_with": {
    "agent": "claude-code",
    "agent_version": "2.1.300 (Claude Code)",
    "model": "claude-haiku-5-5",
    "model_route": "claude-haiku-5-5",
    "reasoning": "low",
    "os": "linux",
    "backend": "hyperv",
    "transport": "mcp-assigned-vm"
  },
  "setup_identity": {
    "repo": "doobidoo/mcp-memory-service",
    "source": "https://github.com/doobidoo/mcp-memory-service",
    "commit": "441e0ee1a17be3d51cf12a2d7d2a936cee69aded",
    "source_revision": null,
    "os": "linux",
    "architecture": null,
    "backend": "hyperv",
    "model": "claude-haiku-5-5",
    "model_version": "claude-haiku-5-5",
    "agent_execution": "native_agent",
    "agent_runtime": "claude-code",
    "agent_runtime_version": "2.1.300 (Claude Code)",
    "tool_transport": "mcp-assigned-vm",
    "runtime": null,
    "runtime_version": null,
    "runtime_revision": null,
    "sandbox_source": null,
    "guest_setup": null,
    "source_pin": {
      "commit": "441e0ee1a17be3d51cf12a2d7d2a936cee69aded",
      "url": "https://github.com/doobidoo/mcp-memory-service"
    },
    "platform_details": {
      "os": "linux",
      "backend": "hyperv"
    },
    "platform_conflicts": null,
    "reasoning": "low",
    "service_tier": null,
    "resources": {
      "cpus": 2,
      "memory_mib": 4096,
      "disk_mib": 32768
    },
    "operation": "Store and retrieve a memory through the MCP stdio server (memory server) using memory_store and memory_search",
    "operation_scope": "product operation",
    "hosting": null,
    "kind": "mcp",
    "test_version": "readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9",
    "evidence_version": null
  },
  "other_model": null,
  "other_run_id": null,
  "models_agree": null,
  "furthest_model": null,
  "transcript_url": null,
  "report_url": "/reports/doobidoo--mcp-memory-service-claude-haiku-5-5-1792806759878846194.json"
}
