Webtool Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Webtool Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Browser & info access helper for local LLMs via the Model Context Protocol (MCP). Exposes a single HTTP JSON-RPC endpoint LM Studio (and other MCP clients) can call. Optimized for iterative, low‑token browsing: outline first → selective drill‑down → optional link follow.
Tools currently exposed:
| Tool | Purpose |
|---|---|
fetch_url | Fetch & parse a webpage. Outline-only mode, per‑section retrieval, single‑hop link follow (link_id), or focused chunk view. |
web_search | Multi-engine search (duckduckgo, bing, google_cse, multi aggregate). |
search_wikipedia | Concise summary of a topic from Wikipedia REST API. |
latvian_news | Latest Latvian headlines (Google News RSS) or topic search. |
search_duckduckgo | Legacy single DuckDuckGo lookup (prefer web_search). |
ai_company_news | Recent headlines per AI/tech company (OpenAI, Google, Anthropic, Microsoft, Nvidia). |
get_system_prompt | Returns the internal system prompt with usage guidance. |
All tools are discoverable through the MCP tools/list (or tools.list) JSON-RPC method.
GitHub: https://github.com/SashaYerashoff/webtool-mcp
sudo apt update && sudo apt install -y python3 python3-venv git
git clone https://github.com/SashaYerashoff/webtool-mcp.git
cd webtool-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
python app.py # serves on http://0.0.0.0:5000 (http://localhost:5000)Keep the process running (e.g. with tmux, screen, or a systemd service) if you want persistent availability.
# Ensure Python 3.11+ from Microsoft Store or python.org is installed
git clone https://github.com/SashaYerashoff/webtool-mcp.git
cd webtool-mcp
python -m venv .venv
. .venv/Scripts/Activate.ps1
pip install --upgrade pip
pip install -r requirements.txt
python app.py # http://localhost:5000If Windows Firewall prompts, allow local network access (loopback is enough for LM Studio).
You can also just install straight from Git:
pip install git+https://github.com/SashaYerashoff/webtool-mcp.gitThen run (clone not strictly required, but the above is simplest for development):
python -m webtool_mcp # (future packaging plan) – for now use app.py directlyChange the app.run(... port=5000) line or export PORT and modify code to read it (not yet implemented). If you change the port you must update LM Studio config accordingly.
python app.py → http://localhost:5000/mcpmcp.json).{
"mcpServers": {
"webtool-mcp": {
"url": "http://localhost:5000/mcp" // or your LAN IP
}
}
}Ask the model: "List the tools you have." It should respond (or you can request a tools/list internally) with the tools defined above.
See sysprompt.md for the fully maintained prompt (ranking heuristics, fallbacks, efficiency rules). Minimal inline guidance:
Broad topic →web_search(multi) → choose URL →fetch_url(mode='outline')→ pickchunk_idORlink_id→ summarize with cited sources before deeper retrieval.
Fetch outline only (cheap): Web search (multi-engine aggregate):
curl -s -X POST http://localhost:5000/mcp \
-H 'Content-Type: application/json' \
-d '{"name":"web_search","arguments":{"query":"open source vector databases","engine":"multi","engines":["duckduckgo","bing"],"max_results":5}}'curl -s -X POST http://localhost:5000/mcp \
-H 'Content-Type: application/json' \
-d '{"name":"fetch_url","arguments":{"url":"https://example.com","mode":"outline"}}' | jq -r '.result.content[0].text' | headFetch a specific section after outline (example sec-2):
curl -s -X POST http://localhost:5000/mcp \
-H 'Content-Type: application/json' \
-d '{"name":"fetch_url","arguments":{"url":"https://example.com","chunk_id":"sec-2"}}'Follow a link from outline (L5):
curl -s -X POST http://localhost:5000/mcp \
-H 'Content-Type: application/json' \
-d '{"name":"fetch_url","arguments":{"url":"https://example.com","link_id":"L5"}}'Wikipedia summary:
curl -s -X POST http://localhost:5000/mcp \
-H 'Content-Type: application/json' \
-d '{"name":"search_wikipedia","arguments":{"query":"Python (programming language)"}}'Latvian news:
To enable the google_cse engine inside web_search, export environment variables prior to launch:
export GOOGLE_API_KEY="your_api_key"
export GOOGLE_CSE_ID="your_cse_id" # Programmable Search Engine ID
python app.pyThen call (example):
{"name":"web_search","arguments":{"query":"vector db benchmarks","engine":"google_cse","max_results":5}}web_search with engine="multi" and engines=["duckduckgo","bing"].link_id per step.mode='outline' then choose alternate source.Payloads MCP client sends (wrapping examples):
{"jsonrpc":"2.0","id":1,"method":"tools/list"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"fetch_url","arguments":{"url":"https://example.com","mode":"outline"}}}
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"fetch_url","arguments":{"url":"https://example.com","chunk_id":"sec-2"}}}
{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"fetch_url","arguments":{"url":"https://example.com","link_id":"L5"}}}
{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"web_search","arguments":{"query":"open source vector database","engine":"multi","engines":["duckduckgo","bing"],"max_results":5}}}
{"jsonrpc":"2.0","id":6,"method":"tools/call","params":{"name":"web_search","arguments":{"query":"vector db benchmarks","engine":"google_cse","max_results":5}}}
{"jsonrpc":"2.0","id":7,"method":"tools/call","params":{"name":"latvian_news","arguments":{}}}
{"jsonrpc":"2.0","id":8,"method":"tools/call","params":{"name":"search_wikipedia","arguments":{"query":"Milvus"}}}
{"jsonrpc":"2.0","id":9,"method":"tools/call","params":{"name":"stock_quotes","arguments":{"symbols":"AAPL MSFT"}}}curl -s -X POST http://localhost:5000/mcp \
-H 'Content-Type: application/json' \
-d '{"name":"latvian_news"}'LM Studio now uses JSON-RPC 2.0 methods like initialize, tools/list, and tools/call. This server supports:
POST /mcp body: { "jsonrpc":"2.0","id":1,"method":"tools/list" }{ "jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"fetch_url","arguments":{"url":"https://example.com","mode":"outline"}} }Legacy (non JSON-RPC) payloads with {"name": "fetch_url", "arguments": {...}} are still handled for quick manual curl tests.
This is a demo / local helper:
Licensed under the MIT License – see LICENSE.
Dependency license compatibility (all permissive / MIT‑compatible):
No copyleft or restrictive GPL dependencies are included, so MIT distribution is appropriate.
Happy browsing with your local models! 🧭
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.