Why this verdict
- benign: 81 checks satisfied, nothing works against the installer of mcp-server:. (4 notes, 0 third-party flags)
Security findings 0
No security findings
Nothing found that works against the person who installs it.
Notes 4
Capabilities, vulnerabilities and disclosed behavior worth knowing. Nothing here works against the person who installs it, so notes never change the verdict.
Data exfiltration
mediumNoteConfirmed on reviewmedium confidenceThe search_web tool sends the user's query to the publisher's documented remote search host, which is the declared search feature.
resp = await client.get(f"{SEARCH_URL}/search", params=params)vector:code
Reviewer's reasoning
The search_web tool sends the user's query to the publisher's documented search host, which the docstring discloses as the server's backend. That is the declared search feature, not a redirection of where the user's tools get code.
Data exfiltration
mediumNoteConfirmed on reviewmedium confidenceDefault scraper and search endpoints are hardcoded to the publisher's Render-hosted domains and can be overridden by env vars, so user queries and URLs leave the host to a remote service the docs disclose.
SCRAPER_URL = os.getenv("SCRAPER_URL", "https://ai-first-scraper.onrender.com").rstrip("/")vector:code
Reviewer's reasoning
The default scraper and search hosts are the publisher's documented deployments, disclosed in the module docstring and server.json, and overridable by operator-controlled env vars. Sending queries and URLs there is the declared core function, so this is a note.
Data exfiltration
mediumNoteConfirmed on reviewmedium confidenceThe fetch_page tool sends the caller-supplied URL to the publisher's documented remote scraper host, which is the declared core function of the server and is disclosed in its docs.
resp = await client.get(f"{SCRAPER_URL}/raw", params=params)vector:code
Reviewer's reasoning
The fetch_page tool forwards the caller-supplied URL to the publisher's documented scraper host. This is the declared core capability of the server and is disclosed in the docstring.
Data exfiltration
mediumNoteConfirmed on reviewmedium confidenceThe fetch_pages_batch tool posts the caller-supplied URL list to the publisher's documented remote scraper host, which is the declared batch feature.
resp = await client.post(f"{SCRAPER_URL}/batch", json=body)vector:code
Reviewer's reasoning
The fetch_pages_batch tool posts the caller-supplied URL list to the publisher's documented scraper host. This is the declared batch feature, disclosed in the docstring and server.json.
Execution chain 25
What it calls, runs, installs, reads and writes, with the line that does it.
Environment variables 7
AI_FIRST_SCRAPER_MCP_NO_NOTICE
GitHub repositories 4
yubinkim444/ai-first-scraper
yubinkim444/ai-first-scraper-mcp
yubinkim444/ai-first-search
Network calls 3
ai-first-scraper.onrender.com
ai-first-search.onrender.com
Packages 1
pypi:ai-first-scraper-mcp@1.0.2
URLs 10
https://ai-first-scraper.onrender.com
https://ai-first-search.onrender.com
https://github.com/yubinkim444/ai-first-scraper
https://github.com/yubinkim444/ai-first-scraper-mcp
https://github.com/yubinkim444/ai-first-scraper-mcp/issues
https://github.com/yubinkim444/ai-first-search
https://github.com/yubinkim444/mcp-rec
https://kay-s-record.web.app/get.html
https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json
Linked repositories 3
GitHub repositories it links to or installs from, and whether their names can be taken over.