tedorigawa001/PersonalDeviceScanner-MCP

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Works

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/tedorigawa001--PersonalDeviceScanner-MCP.svg).

mcp-server

Works on Linux with Haiku

README claims checked out on 1 recorded setup. Other recorded outcomes appear below.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
Linuxyes

Linux / Haiku 5.5: yes · Oct 25, 2026 · fe9d02a07d6a · claude-code / 2.1.310 (Claude Code)
Recorded operation: <guest-path> -m pc_scanner.cli --config <guest-path> serve · local stdio MCP start + initialize + tools/list

Does what it says
3 of 3 claims checked out
  • The MCP server scans an authorized folder with ClamAV and reports the EICAR test file: Real input produced the expected result: Eicar-Signature

    Source: Scans only the folders the owner has authorized for malware (ClamAV)

    Input: {"tool": "scan_malware", "arguments": {"root_alias": "scanroot"}}

    Expected: Eicar-Signature finding for eicar.txt

    Command: <guest-path> -m pc_scanner.cli --config <guest-path> serve tools/call {"tool": "scan_malware", "arguments": {"root_alias": "scanroot"}}

    Observed: Eicar-Signature\"\n }\n ],\n \"warnings\": [\n \"Signature-based detection only; no detection does not prove safety\",\n \"Symlinks excluded; file/archive limits apply\"\n ],\n \"data\": {\n \"root_alias\": \"scanroot\",\n \"relative_path\": \".\",\n \"exit_code\": 1,\n \"findings_total\": 1,\n \"engine_counts\": {\n \"scanned\": 2,\n \"infected\": 1,\n \"errors\": 0\n },\n \"unreadable_directories\": [],\n \"cloud_excluded_count\": 0,\n \"cloud_excluded_paths\": [],\n \"line_break_names\": [],\n \"engine_report\": \"\\n----------- S

  • The MCP server lists the OS version through osquery: Real input produced the expected result: 24.04.5 LTS (Noble Numbat)

    Source: Lists the OS version, installed applications, and listening ports (osquery)

    Input: {"tool": "collect_inventory", "arguments": {"query_id": "os_version"}}

    Expected: Ubuntu OS version row

    Command: <guest-path> -m pc_scanner.cli --config <guest-path> serve tools/call {"tool": "collect_inventory", "arguments": {"query_id": "os_version"}}

    Observed: 24.04.5 LTS (Noble Numbat)\",\n \"major\": \"24\",\n \"minor\": \"4\",\n \"patch\": \"0\",\n \"platform\": \"ubuntu\"\n }\n ]\n }\n}"}], "isError": false}

  • The CLI scans an authorized folder and exits 1 when findings exist: Real input produced the expected result: Eicar-Signature

    Source: Scans only the folders the owner has authorized for malware (ClamAV)

    Input: malware scanroot

    Expected: exit code 1 with Eicar-Signature finding

    Command: <guest-path> -m pc_scanner.cli --config <guest-path> malware scanroot

    Observed: Eicar-Signature" } ], "warnings": [ "Signature-based detection only; no detection does not prove safety", "Symlinks excluded; file/archive limits apply" ], "data": { "root_alias": "scanroot", "relative_path": ".", "exit_code": 1, "findings_total": 1, "engine_counts": { "scanned": 2, "infected": 1, "errors": 0 }, "unreadable_directories": [], "cloud_excluded_count": 0, "cloud_excluded_paths": [], "line_break_names": [], "engine_report": "\n----------- SCAN SUMMARY -----------\nKnown viruses: 3628192\nEngine versio

MCP
Yes, observed
Local or hosted
local
Local: runs on your machine
Needs keys or browser
None seen
Maintained
Maintained
actively maintained: last commit 1 days ago; 107 commits and 0 merged PRs in 90 days; 0 open issues, 0 open PRs; latest release 2026-10-23

Last commit Oct 23, 2026

Setup time
6 min 57 s
6 min 57 s to a working result
Issue
none found in confirmed setups
Examples
1 of 1 ran as expected
  • The documented offline test suite passes for this project: command completed successfully

    Source: README.md Testing section

    Input: discover -s tests -v

    Expected: all tests pass (329 run, 6 skipped Windows-only)

    Command: <guest-path> -m unittest discover -s tests -v

    Observed: name) ... ok test_real_foreign_owner_is_refused (test_windows_owner.WindowsOwnershipTests.test_real_foreign_owner_is_refused) ... skipped 'Windows security APIs' test_real_hard_link_is_refused (test_windows_owner.WindowsOwnershipTests.test_real_hard_link_is_refused) ... skipped 'Windows security APIs' test_real_user_or_elevated_default_owner_is_accepted (test_windows_owner.WindowsOwnershipTests.test_real_user_or_elevated_default_owner_is_accepted) ... skipped 'Windows security APIs' ---------------------------------------------------------------------- Ran 329 tests in 31.206s OK (skipped=6)

Evidence
README behavior checked
Agent interfaces
MCP, CLI (documented only)
MCP, CLI (documented only)

Observed interfaces were exercised by the checker. Documentation alone does not confirm compatibility.

MCP context
7 tools · about 939 tokens
7 tools · about 939 tokens

Largest returned tools/list page in these observations. Compact UTF-8 definition bytes ÷ 4, rounded up; approximate, excluding client framing and tool results. This is context size, not proof that every tool works.

Measured on linux with Haiku 5.5 · Oct 25, 2026 on fe9d02a07d6a

Tested with
Claude Code / Haiku 5.5
  • Linux: Claude Code / Haiku 5.5 · agent 2.1.310 (Claude Code) · Checked operation passed · Oct 25, 2026 on fe9d02a07d6a

Each entry describes its recorded operation and source revision.

Safety
No unexpected network or file activity found in these checks

No problems traced to this repository code in these checks; a short run cannot prove safety. 12 listed items (named-host connections, static matches, dependency advisories) are below and do not change this verdict. 8 static matches retained as context.

OSV reports a known vulnerability in this dependency version. cryptography 6 findings.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

Full event, path and process lists for each observed setup:

Repair history and test corrections
Current diagnosis: unknown · pending

empty or stopped inventory is partial setup evidence: {"argv": [".venv/bin/python", "-m", "pc_scanner.cli", "--config", "scanner.toml", "status"], "returncode": 0, "stdout": "{\n \"schema_version\": 1,\n \"source\": \"bridge\",\n \"status\": \"completed\",\n \"observed_at\": \"2026-10-25T23:19:59.755892+00:00\",\n \"findings\": [],\n \"warnings\": [],\n \"data\": {\n \"platform\": \"Linux\",\n \"osquery_configured\": false,\n \"clamav_configured\": false,\n \"wazuh_configured\": false,\n \"android_configured\": false,\n \"scan_root_aliases\": [],\n \"android_device_aliases\": [],\n \"router_aliases\": [],\n \"router_jvn_lookup\": true,\n \"router_kev_configured\": false,\n \"update_lookup\": false,\n \"note\": \"Configuration status only; engines, signatures, connectivity and PC safety are unverified\"\n }\n}\n", "stderr": "", "needs_credentials": false, "needs_browser": false}

Repair record fix-3162f6248e2b700b66ab · current status JSON. Original run outcomes remain unchanged.

Failed run: tedorigawa001/PersonalDeviceScanner-MCP · Oct 25, 2026 · Held back.

Run details

Haiku 5.5

Native agent · Checked operation passed

Checked operation <guest-path> -m pc_scanner.cli --config <guest-path> serve · local stdio MCP start + initialize + tools/list

Agent-reported scope: Run the Personal Device Scanner MCP server over stdio and call its scan_malware tool on an authorized folder; also run the README's status, inventory, and malware CLI commands

MCP server returned: Personal Device Scanner · version 1.30.0.

MCP tools returned: scanner_status, collect_inventory, scan_malware, collect_android, check_android_monitoring_apps, check_router, get_vulnerabilities. Tool listing does not establish authenticated tool-call success.

Run details
run
tedorigawa001--PersonalDeviceScanner-MCP-claude-haiku-5-5-1792970269487360701
date
Oct 25, 2026
time to working
416.7s
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.310 (Claude Code)
platform
linux
reported cost
$0.020791
Recorded source
https://github.com/tedorigawa001/PersonalDeviceScanner-MCP
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "fe9d02a07d6a18023a6737f8e6a6fa872a805888", "url": "https://github.com/tedorigawa001/PersonalDeviceScanner-MCP"}
Test version
readme-ca496ea10bb07418d1d8f1c256c2433a55547acc0fb62d8b6d86ae33c976fbfa
revision
fe9d02a07d6a18023a6737f8e6a6fa872a805888
Whose fault: not assigned · resolved

Safety: Review signals: 6 known vulnerability. 4 static matches retained as context.

Review signals: 6 known vulnerability. 4 static matches retained as context.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

OSV reports a known vulnerability in this dependency version. cryptography 6 findings.

4 hardcoded secret matches retained as context; full list in the evidence.

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.

Full safety evidence →

Answers recorded for this run
  • The MCP server scans an authorized folder with ClamAV and reports the EICAR test file: Real input produced the expected result: Eicar-Signature

    Source: Scans only the folders the owner has authorized for malware (ClamAV)

    Input: {"tool": "scan_malware", "arguments": {"root_alias": "scanroot"}}

    Expected: Eicar-Signature finding for eicar.txt

    Command: <guest-path> -m pc_scanner.cli --config <guest-path> serve tools/call {"tool": "scan_malware", "arguments": {"root_alias": "scanroot"}}

    Observed: Eicar-Signature\"\n }\n ],\n \"warnings\": [\n \"Signature-based detection only; no detection does not prove safety\",\n \"Symlinks excluded; file/archive limits apply\"\n ],\n \"data\": {\n \"root_alias\": \"scanroot\",\n \"relative_path\": \".\",\n \"exit_code\": 1,\n \"findings_total\": 1,\n \"engine_counts\": {\n \"scanned\": 2,\n \"infected\": 1,\n \"errors\": 0\n },\n \"unreadable_directories\": [],\n \"cloud_excluded_count\": 0,\n \"cloud_excluded_paths\": [],\n \"line_break_names\": [],\n \"engine_report\": \"\\n----------- S

  • The MCP server lists the OS version through osquery: Real input produced the expected result: 24.04.5 LTS (Noble Numbat)

    Source: Lists the OS version, installed applications, and listening ports (osquery)

    Input: {"tool": "collect_inventory", "arguments": {"query_id": "os_version"}}

    Expected: Ubuntu OS version row

    Command: <guest-path> -m pc_scanner.cli --config <guest-path> serve tools/call {"tool": "collect_inventory", "arguments": {"query_id": "os_version"}}

    Observed: 24.04.5 LTS (Noble Numbat)\",\n \"major\": \"24\",\n \"minor\": \"4\",\n \"patch\": \"0\",\n \"platform\": \"ubuntu\"\n }\n ]\n }\n}"}], "isError": false}

  • The CLI scans an authorized folder and exits 1 when findings exist: Real input produced the expected result: Eicar-Signature

    Source: Scans only the folders the owner has authorized for malware (ClamAV)

    Input: malware scanroot

    Expected: exit code 1 with Eicar-Signature finding

    Command: <guest-path> -m pc_scanner.cli --config <guest-path> malware scanroot

    Observed: Eicar-Signature" } ], "warnings": [ "Signature-based detection only; no detection does not prove safety", "Symlinks excluded; file/archive limits apply" ], "data": { "root_alias": "scanroot", "relative_path": ".", "exit_code": 1, "findings_total": 1, "engine_counts": { "scanned": 2, "infected": 1, "errors": 0 }, "unreadable_directories": [], "cloud_excluded_count": 0, "cloud_excluded_paths": [], "line_break_names": [], "engine_report": "\n----------- SCAN SUMMARY -----------\nKnown viruses: 3628192\nEngine versio

Examples

  • The documented offline test suite passes for this project: command completed successfully

    Source: README.md Testing section

    Input: discover -s tests -v

    Expected: all tests pass (329 run, 6 skipped Windows-only)

    Command: <guest-path> -m unittest discover -s tests -v

    Observed: name) ... ok test_real_foreign_owner_is_refused (test_windows_owner.WindowsOwnershipTests.test_real_foreign_owner_is_refused) ... skipped 'Windows security APIs' test_real_hard_link_is_refused (test_windows_owner.WindowsOwnershipTests.test_real_hard_link_is_refused) ... skipped 'Windows security APIs' test_real_user_or_elevated_default_owner_is_accepted (test_windows_owner.WindowsOwnershipTests.test_real_user_or_elevated_default_owner_is_accepted) ... skipped 'Windows security APIs' ---------------------------------------------------------------------- Ran 329 tests in 31.206s OK (skipped=6)

Local or hosted: local

What the agent did

Run the Personal Device Scanner MCP server over stdio and call its scan_malware tool on an authorized folder; also run the README's status, inventory, and malware CLI commands

cd <guest-path> && pwd && ls -la && id -u && python3 --version && cat README.md 2>/dev/null | head -c 6000
ls <guest-path> ; ls /inputs 2>/dev/null; ls <guest-path> 2>/dev/null; echo "CDP=$CDP_URL"
cd <guest-path> && sed -n '/## Setup/,/## Configuration reference/p' README.md | head -c 7500
cd <guest-path> && python3 -m venv --help >/dev/null 2>&1 && echo venv_ok || echo venv_missing; which osqueryi clamscan adb; sed -n '/## Configuration reference/,/## Reading the results/p' README.md | head -c 3000; grep -n -i "^## \|^### " README.md | head -80
cd <guest-path> && python3 -m venv .venv && .venv/bin/python -m pip install --upgrade pip -q && .venv/bin/python -m pip install '.[agent]' 2>&1 | tail -5; echo rc=$?
cd <guest-path> && sed -n '/^## Testing/,/^## Related/p' README.md | head -c 3000; echo ----; sed -n '/^### status/,/^### Large/p' README.md | head -c 1500; echo ----; apt-cache policy clamav osquery 2>/dev/null | head -12
sudo -n apt-get -o DPkg::Lock::Timeout=300 update -qq 2>&1 | tail -3; sudo -n apt-get -o DPkg::Lock::Timeout=300 install -y -qq clamav clamav-freshclam 2>&1 | tail -4; echo rc=$?; which clamscan freshclam; apt-cache policy osquery | head -3
clamscan --version; (sudo -n systemctl stop clamav-freshclam 2>/dev/null; sudo -n freshclam 2>&1 | tail -5); echo rc=$?; curl -sS -m 20 -o /dev/null -w '%{http_code}\n' https://pkg.osquery.io/deb/pubkey.gpg; echo rc=$?
uname -m; curl -fsSL -m 60 https://pkg.osquery.io/deb/pubkey.gpg | sudo -n gpg --dearmor -o /usr/share/keyrings/osquery.gpg && echo 'deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/osquery.gpg] https://pkg.osquery.io/deb deb main' | sudo -n tee /etc/apt/sources.list.d/osquery.list >/dev/null && sudo -n apt-get -o DPkg::Lock::Timeout=300 update -qq 2>&1 | tail -3; apt-cache policy osquery | head -3
sudo -n apt-get -o DPkg::Lock::Timeout=300 install -y -qq osquery 2>&1 | tail -3; which osqueryi clamscan; osqueryi --version
cd <guest-path> && grep -n "^\[" scanner.example.toml; sed -n '1,30p' scanner.example.toml
mkdir -p <guest-path> && printf 'hello notes\n' > <guest-path> && printf 'X5O!P%%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*\n' > <guest-path> && cd <guest-path> && cat > scanner.toml <<'EOF'
[local]
osquery_binary = '/usr/bin/osqueryi'
clamav_binary = '/usr/bin/clamscan'

[scan_roots]
scanroot = '<guest-path>'
EOF
cat scanner.toml; ls -la <guest-path>
cd <guest-path> && .venv/bin/python -m pc_scanner.cli --config scanner.toml status; echo rc=$?; .venv/bin/python -m pc_scanner.cli --config scanner.toml inventory os_version; echo rc=$?
cd <guest-path> && .venv/bin/python -m pc_scanner.cli --config scanner.toml malware scanroot; echo rc=$?
cd <guest-path> && grep -rn -i "cron\|schedul\|--once\|--now\|webhook\|while True\|loop" pc_scanner/*.py README.md | head -20; echo ---; grep -n "^- Lists the OS version\|^- Scans only the folders\|^The AI can only choose\|^| \`scanner_status\|Configure only the engines\|Checks your own Android" README.md
cd <guest-path> && sed -n 35,50p pc_scanner/server.py; ls tests | head -30; ls .coldpass
cd <guest-path> && timeout 900 .venv/bin/python -m unittest discover -s tests -v > <guest-path> 2>&1; echo rc=$?; tail -6 <guest-path>; grep -c "ok$" <guest-path>
cd <guest-path> && mkdir -p .coldpass && cat > .coldpass/probe.json <<'EOF'
{"kind":"mcp","argv":["<guest-path>","-m","pc_scanner.cli","--config","<guest-path>","serve"],"cwd":"<guest-path>","tool":"scan_malware","arguments":{"root_alias":"scanroot"},"expected_text":"Eicar-Signature"}
EOF
python3 -I -m json.tool .coldpass/probe.json >/dev/null && echo valid
cd <guest-path> && cat > .coldpass/claims.json <<'EOF'
[
{"kind":"claim","claim":"The MCP server scans an authorized folder with ClamAV and reports the EICAR test file","source":"Scans only the folders the owner has authorized for malware (ClamAV)","input":"root_alias=scanroot","expected":"Eicar-Signature finding for eicar.txt","probe_kind":"mcp","argv":["<guest-path>","-m","pc_scanner.cli","--config","<guest-path>","serve"],"tool":"scan_malware","arguments":{"root_alias":"scanroot"},"expected_text":"Eicar-Signature","cwd":"<guest-path>"},
{"kind":"claim","claim":"The MCP server lists the OS version through osquery","source":"Lists the OS version, installed applications, and listening ports (osquery)","input":"query_id=os_version","expected":"Ubuntu OS version row","probe_kind":"mcp","argv":["<guest-path>","-m","pc_scanner.cli","--config","<guest-path>","serve"],"tool":"collect_inventory","arguments":{"query_id":"os_version"},"expected_text":"24.04.5 LTS (Noble Numbat)","cwd":"<guest-path>"},
{"kind":"claim","claim":"The CLI scans an authorized folder and exits 1 when findings exist","source":"Scans only the folders the owner has authorized for malware (ClamAV)","input":"malware scanroot","expected":"exit code 1 with Eicar-Signature finding","probe_kind":"cli","argv":["<guest-path>","-m","pc_scanner.cli","--config","<guest-path>","malware","scanroot"],"expected_returncode":1,"expected_text":"Eicar-Signature","cwd":"<guest-path>"}
]
EOF
python3 -I -m json.tool .coldpass/claims.json >/dev/null && echo valid
cd <guest-path> && cat > .coldpass/examples.json <<'EOF'
[
{"kind":"example","claim":"The documented offline test suite passes for this project","source":"README.md Testing section","input":"discover -s tests -v","expected":"all tests pass (329 run, 6 skipped Windows-only)","argv":["<guest-path>","-m","unittest","discover","-s","tests","-v"],"cwd":"<guest-path>","env":{}}
]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"Inspected README.md and pc_scanner/*.py: no cron, scheduler, --once/--now, webhook, or loop trigger. The product runs on demand as a CLI command or as an MCP stdio server started by the client. The only while-loops are the MCP progress heartbeat (server.py) and the Android adb stream reader (android.py), which are not product cycles.","checks":[]}
EOF
for f in examples cycles; do python3 -I -m json.tool .coldpass/$f.json >/dev/null && echo "$f valid"; done
cd <guest-path> && <env-var>=<guest-path> timeout 1500 python3 -I <guest-path> --validate --replay 2>&1 | tail -c 6000; echo rc=${PIPESTATUS[0]}
cd <guest-path> && <env-var>=<guest-path> timeout 1500 python3 -I <guest-path> --validate --replay > <guest-path> 2><guest-path>; echo rc=$?; wc -c <guest-path>; head -c 600 <guest-path>; echo; echo ---ERR; head -c 1000 <guest-path>; echo ---; python3 -I -c "import json,sys;d=json.load(open('<guest-path>'));print(list(d.keys()) if isinstance(d,dict) else type(d))" 2>&1 | head -c 800
cd <guest-path> && pgrep -af "pc_scanner.cli" || echo "no leftover servers"; mkdir -p .coldpass && cat > .coldpass/report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Run the Personal Device Scanner MCP server over stdio and call its scan_malware tool on an authorized folder; also run the README's status, inventory, and malware CLI commands","operation_scope":"Linux x86_64 Ubuntu 24.04 guest, Python 3.12.3 (README requires 3.11+), osquery 5.24.0 and ClamAV 1.5.4 installed from apt, one allowed scan folder containing an EICAR test file. Windows/macOS, Wazuh, Android and router checks were not exercised (not configured).","steps":["python3 -m venv .venv","python3 -m pip install '.[agent]'  (README step 2, macOS/Linux)","sudo apt-get install clamav clamav-freshclam; sudo freshclam (README 'Install the scan engines')","Added official osquery apt repo (pkg.osquery.io) and sudo apt-get install osquery (README 'Install the scan engines' links osquery.io/downloads)","Created scanner.toml from the README config format with osquery_binary=/usr/bin/osqueryi, clamav_binary=/usr/bin/clamscan, scan_roots scanroot=<guest-path> (README step 3)","python -m pc_scanner.cli --config scanner.toml status (README step 4)","python -m pc_scanner.cli --config scanner.toml inventory os_version (README step 4)","python -m pc_scanner.cli --config scanner.toml malware scanroot (README step 4; returned exit 1 with Eicar-Signature finding, as the README exit-code table documents)","python -m pc_scanner.cli --config scanner.toml serve, MCP tools/call scan_malware and collect_inventory (README step 5 / Features table)","python -m unittest discover -s tests -v (README Testing: Ran 329 tests, OK, skipped=6)"],"deviations":["Installed osquery via its upstream apt repository because it is not in the Ubuntu archive; this is the osquery.io download route the README links.","Created scanner.toml in the workspace (README step 3 says to copy scanner.example.toml there); the sample folder and EICAR test file live at <guest-path> outside the checkout.","Task text named /inputs/coldpass-preflight.py, but /inputs contains no such file; ran the checker at <guest-path> as the task's primary command instead.","Did not use the npx launcher; used the documented pip install path."],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":null}
EOF
python3 -I -m json.tool .coldpass/report.json >/dev/null && echo report valid