coldpass

aas-ee/open-websearch

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/aas-ee--open-websearch.svg).

mcp-server

Works

The recorded run passed on 1 setup.

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 28, 2026 · fb11fd94df73 · claude-code / 2.1.310 (Claude Code)
Recorded operation: node build/index.js · local stdio MCP start + initialize + tools/list

Does what it says
2 of 2 claims checked out
  • MCP search returns structured results with titles, URLs and descriptions: Real input produced the expected result: open-websearch

    Source: README.md

    Input: {"tool": "search", "arguments": {"query": "open web search", "limit": 3, "engines": ["duckduckgo"]}}

    Expected: result text containing a result

    Command: node build/index.js tools/call {"tool": "search", "arguments": {"query": "open web search", "limit": 3, "engines": ["duckduckgo"]}}

    Observed: …open-websearch</b> provides an MCP server, CLI, and local daemon, and can also be paired with skill-guided agent workflows for live <b>web</b> <b>search</b> and content retrieval without API keys. On first use, the skill typically follows this path: detect whether a usable <b>open-websearch</b> path already exists, guide ...\",\n \"source\": \"github.com\",\n \"engine\": \"duckduckgo\"\n },\n {\n \"title\": \"Google\",\n \"url\": \"https://www.google.com/xhtml/search\",\n \"description\": \"<b>Search</b> the world&#x27;s information, including webpages, images, v

  • No API keys required: Real input produced the expected result: "status": "ok"

    Source: README.md

    Input: CLI search with duckduckgo, no key

    Expected: ok status with results

    Command: node build/index.js search 'open web search' --engine duckduckgo --limit 3 --json

    Observed: …"status": "ok", "data": { "query": "open web search", "engines": [ "duckduckgo" ], "totalResults": 3, "results": [ { "title": "Open-WebSearch - GitHub", "url": "https://github.com/Aas-ee/open-webSearch", "description": "<b>open-websearch</b> provides an MCP server, CLI, and local daemon, and can also be paired with skill-guided agent workflows for live <b>web</b> <b>search</b> and content retrieval without API keys. On first use, the skill typically follows this path: detect whether a usable <b>open-websearch</b> path already exists, gu

MCP
Yes, observed
Local or hosted
local
Local: runs on your machine
Needs keys or browser
None seen
Maintained
Maintained
actively maintained: last commit 20 days ago; 28 commits and 15 merged PRs in 90 days; 11 open issues, 3 open PRs; 27 of 35 recent threads got a maintainer reply, median first reply 5.9h; latest release 2026-09-28

Last commit Oct 8, 2026

Setup time
4 min 2 s
4 min 2 s to a working result
Issue
none found in recorded check
Examples
1 of 1 ran as expected
  • Repository offline local daemon test suite runs (documented npm test script; not product behavior proof): command completed successfully

    Source: package.json scripts test:local-daemon

    Input: npm run test:local-daemon

    Expected: Local daemon tests passed.

    Command: npm run test:local-daemon

    Observed: daemon health and status routes ✅ local daemon operation routes ✅ CLI status json success ✅ CLI status unavailable path ✅ CLI status error envelope ✅ CLI serve waits for signal Local daemon tests passed. 🔍 Default search engine: duckduckgo 🔍 No search engine restrictions, all available engines can be used 🔍 Search mode: AUTO, effective: REQUEST (currently only affects Bing) 🌐 No proxy configured (set USE_PROXY=true to enable) 🔐 fetchWebContent TLS verification is enabled 🧭 Playwright client source: auto 🧭 Playwright headless: true 🧭 Playwright navigation timeout: 20000ms 🖥️ Server mode: STDIO

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
6 tools · about 652 tokens
6 tools · about 652 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 28, 2026 on fb11fd94df73

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

Each entry describes its recorded operation and source revision.

Safety
Made outbound HTTPS connections: yes (hosts not recorded) by <guest-path>

Review signals across current setups: connection review. 152 listed items (named-host connections, static matches, dependency advisories) are below and do not change this verdict.

Repository processes attempted these non-loopback connections; proxies can hide the final hostname. 7 distinct locations. 20 attributed processes.

OSV reports a known vulnerability in this dependency version. 13 distinct locations. 76 findings.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written; resolver address lookups that send no data.

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

Run details

Haiku 5.5

Native agent · Checked operation passed

Checked operation node build/index.js · local stdio MCP start + initialize + tools/list

Agent-reported scope: Run open-websearch MCP stdio server and call the search tool; one-shot CLI search; local daemon test suite

MCP server returned: web-search · version 1.2.0.

MCP tools returned: search, fetchLinuxDoArticle, fetchCsdnArticle, fetchGithubReadme, fetchWebContent, fetchJuejinArticle. Tool listing does not establish authenticated tool-call success.

Run details
run
aas-ee--open-websearch-claude-haiku-5-5-1793199152070992688
date
Oct 28, 2026
time to working
241.6s
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.012877
Recorded source
https://github.com/aas-ee/open-websearch
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "fb11fd94df736819a0d2765bf7645224f98b2c6b", "url": "https://github.com/aas-ee/open-websearch"}
Test version
readme-2d57868128a84902c09a58991c46c5fe288928e55b1de8282ab5003e13159c2f
revision
fb11fd94df736819a0d2765bf7645224f98b2c6b
Whose fault: not assigned · resolved

Safety: Review signals: 1 connection review, 76 known vulnerability.

Review signals: 1 connection review, 76 known vulnerability.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written; resolver address lookups that send no data.

Repository processes attempted these non-loopback connections; proxies can hide the final hostname. 7 distinct locations. 20 attributed processes.

OSV reports a known vulnerability in this dependency version. 13 distinct locations. 76 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.

Full safety evidence →

Answers recorded for this run
  • MCP search returns structured results with titles, URLs and descriptions: Real input produced the expected result: open-websearch

    Source: README.md

    Input: {"tool": "search", "arguments": {"query": "open web search", "limit": 3, "engines": ["duckduckgo"]}}

    Expected: result text containing a result

    Command: node build/index.js tools/call {"tool": "search", "arguments": {"query": "open web search", "limit": 3, "engines": ["duckduckgo"]}}

    Observed: …open-websearch</b> provides an MCP server, CLI, and local daemon, and can also be paired with skill-guided agent workflows for live <b>web</b> <b>search</b> and content retrieval without API keys. On first use, the skill typically follows this path: detect whether a usable <b>open-websearch</b> path already exists, guide ...\",\n \"source\": \"github.com\",\n \"engine\": \"duckduckgo\"\n },\n {\n \"title\": \"Google\",\n \"url\": \"https://www.google.com/xhtml/search\",\n \"description\": \"<b>Search</b> the world&#x27;s information, including webpages, images, v

  • No API keys required: Real input produced the expected result: "status": "ok"

    Source: README.md

    Input: CLI search with duckduckgo, no key

    Expected: ok status with results

    Command: node build/index.js search 'open web search' --engine duckduckgo --limit 3 --json

    Observed: …"status": "ok", "data": { "query": "open web search", "engines": [ "duckduckgo" ], "totalResults": 3, "results": [ { "title": "Open-WebSearch - GitHub", "url": "https://github.com/Aas-ee/open-webSearch", "description": "<b>open-websearch</b> provides an MCP server, CLI, and local daemon, and can also be paired with skill-guided agent workflows for live <b>web</b> <b>search</b> and content retrieval without API keys. On first use, the skill typically follows this path: detect whether a usable <b>open-websearch</b> path already exists, gu

Examples

  • Repository offline local daemon test suite runs (documented npm test script; not product behavior proof): command completed successfully

    Source: package.json scripts test:local-daemon

    Input: npm run test:local-daemon

    Expected: Local daemon tests passed.

    Command: npm run test:local-daemon

    Observed: daemon health and status routes ✅ local daemon operation routes ✅ CLI status json success ✅ CLI status unavailable path ✅ CLI status error envelope ✅ CLI serve waits for signal Local daemon tests passed. 🔍 Default search engine: duckduckgo 🔍 No search engine restrictions, all available engines can be used 🔍 Search mode: AUTO, effective: REQUEST (currently only affects Bing) 🌐 No proxy configured (set USE_PROXY=true to enable) 🔐 fetchWebContent TLS verification is enabled 🧭 Playwright client source: auto 🧭 Playwright headless: true 🧭 Playwright navigation timeout: 20000ms 🖥️ Server mode: STDIO

Local or hosted: local

What the agent did

Run open-websearch MCP stdio server and call the search tool; one-shot CLI search; local daemon test suite

cd <guest-path> && ls -la && git status 2>&1 | head -3; python3 --version; node --version 2>&1; npm --version 2>&1; cat README.md | head -c 6000
echo $CDP_URL $<env-var>; ls /inputs 2>&1; ls <guest-path> 2>&1
cd <guest-path> && grep -n '^#' README.md | head -80; grep -n -A4 '"engines"' package.json; grep -n '"scripts"' -A30 package.json | head -45
cd <guest-path> && sed -n 143,200p README.md; sed -n 294,330p README.md
cd <guest-path> && git init -q && git remote add origin https://github.com/aas-ee/open-websearch && git fetch --depth 1 origin fb11fd94df736819a0d2765bf7645224f98b2c6b 2>&1 | tail -3; git reset --mixed FETCH_HEAD 2>&1 | tail -2; git log --oneline -1 2>&1
cd <guest-path> && timeout 900 npm install 2>&1 | tail -15; echo EXIT=$?
cd <guest-path> && npm run build 2>&1 | tail -8; echo EXIT=$?; ls build/index.js && cat .coldpass/* 2>/dev/null | head -c 500; ls .coldpass
cd <guest-path> && timeout 120 npm run search:cli -- "open web search" --json 2>&1 | head -c 2500; echo; echo EXIT=${PIPESTATUS[0]}
cd <guest-path> && node build/index.js search --help 2>&1 | head -40
cd <guest-path> && for e in duckduckgo brave startpage hackernews; do echo "== $e"; timeout 120 node build/index.js search "open web search" --engine $e --limit 3 --json 2>/dev/null | tail -n +1 | head -c 900; echo; done
cd <guest-path> && grep -rn "query:\|limit:" src/tools/*.ts 2>/dev/null | head -10; ls src; grep -rln "MCP_TOOL_SEARCH_NAME" src | head
cd <guest-path> && sed -n 105,120p src/tools/setupTools.ts; grep -n "Returns structured results" README.md; grep -n "Configurable number of results" README.md
mkdir -p <guest-path> && cat > <guest-path> <<'EOF'
{"kind":"mcp","argv":["node","build/index.js"],"cwd":"<guest-path>","env":{"MODE":"stdio","DEFAULT_SEARCH_ENGINE":"duckduckgo"},"tool":"search","arguments":{"query":"open web search","limit":3,"engines":["duckduckgo"]},"expected_text":"open-websearch"}
EOF
cat > <guest-path> <<'EOF'
[{"kind":"claim","claim":"MCP search returns structured results with titles, URLs and descriptions","source":"README.md","quote":"Returns structured results with titles, URLs, and descriptions","input":"query open web search via MCP search tool","expected":"result text containing a result","probe_kind":"mcp","argv":["node","build/index.js"],"env":{"MODE":"stdio","DEFAULT_SEARCH_ENGINE":"duckduckgo"},"tool":"search","arguments":{"query":"open web search","limit":3,"engines":["duckduckgo"]},"expected_text":"open-websearch","cwd":"<guest-path>"},
{"kind":"claim","claim":"No API keys required","source":"README.md","quote":"No API keys or authentication required","input":"CLI search with duckduckgo, no key","expected":"ok status with results","probe_kind":"cli","argv":["node","build/index.js","search","open web search","--engine","duckduckgo","--limit","3","--json"],"expected_text":"\"status\": \"ok\"","cwd":"<guest-path>"}]
EOF
cd <guest-path> && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | tail -c 4000
cd <guest-path> && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo EXIT=$?; python3 -I -c "
import json,sys
t=open('<guest-path>').read()
i=t.find('{')
d=json.loads(t[i:])
print({k:(v if not isinstance(v,(dict,list)) else type(v).__name__) for k,v in d.items()})
" 2>&1 | head -c 1500
cd <guest-path> && grep -rniE "cron|setInterval|--once|--now|webhook" README.md src --include=*.ts | head -8; echo ---; grep -n "test" README.md | head -20; echo ---; timeout 300 npm run test:local-daemon 2>&1 | tail -6; echo EXIT=${PIPESTATUS[0]}
cd <guest-path> && cat > cycles.json <<'EOF'
{"detected":false,"checks":[],"reason":"Inspected README.md and src/*.ts for cron, setInterval, webhook, --once or --now scheduler triggers; none found. The only long-running entrypoint is the local daemon (open-websearch serve), which is request-driven, not a scheduled cycle."}
EOF
cat > examples.json <<'EOF'
[{"kind":"example","claim":"Repository offline local daemon test suite runs (documented npm test script; not product behavior proof)","source":"package.json scripts test:local-daemon","input":"npm run test:local-daemon","expected":"Local daemon tests passed.","argv":["npm","run","test:local-daemon"],"cwd":"<guest-path>","env":{},"expected_text":"Local daemon tests passed."}]
EOF
python3 -I -c "import json;json.load(open('cycles.json'));json.load(open('examples.json'));print('ok')"; cd <guest-path> && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo EXIT=$?; python3 -I -c "
import json
t=open('<guest-path>').read(); d=json.loads(t[t.find('{'):])
print(d['valid'], d['problems'])" 2>&1 | head -c 2000
cd <guest-path> && cat > report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Run open-websearch MCP stdio server and call the search tool; one-shot CLI search; local daemon test suite","operation_scope":"Node.js 22 (v22.23.4) and npm 10.9.9 on Linux; pinned commit fb11fd94df736819a0d2765bf7645224f98b2c6b; no API keys; DuckDuckGo engine used because Bing and Brave were not usable from this network","steps":["git init; git remote add origin https://github.com/aas-ee/open-websearch; git fetch --depth 1 origin fb11fd94df736819a0d2765bf7645224f98b2c6b; git reset --mixed FETCH_HEAD","npm install","npm run build","npm run search:cli -- \"open web search\" --json (README CLI section)","node build/index.js search \"open web search\" --engine duckduckgo --limit 3 --json","MODE=stdio DEFAULT_SEARCH_ENGINE=duckduckgo node build/index.js (MCP stdio), tool search","npm run test:local-daemon"],"deviations":["Default engine bing returned engine_error 'Bing exceeded the regional redirect limit (1)' from this network; switched to duckduckgo, which returned results","brave returned HTTP 429 rate limit; not used for evidence","npm install reported 14 vulnerabilities (4 moderate, 10 high); not remediated because the pinned lockfile was used as-is","Workspace had no .git; initialized git metadata at the pinned commit as the task instructed","Did not start Playwright or a browser; no CDP endpoint was needed for these operations"],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":"None required for the working path. For Bing in restricted networks, configure USE_PROXY/PROXY_URL per the README runtime-proxy section."}
EOF
python3 -I -c "import json;d=json.load(open('report.json'));print(d['outcome'])"; ls -la <guest-path> <guest-path> 2>&1
cd <guest-path> && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo EXIT=$?; python3 -I -c "
import json
t=open('<guest-path>').read(); d=json.loads(t[t.find('{'):])
print(d['valid'], d['problems'])"; git -C <guest-path> log --oneline -1

No product verdict. Run record.