New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

@voiys/fetcher-mcp

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@voiys/fetcher-mcp

MCP server for fetching web content using Playwright browser

latest
npmnpm
Version
0.2.0
Version published
Weekly downloads
2
-71.43%
Maintainers
1
Weekly downloads
 
Created
Source

@voiys/fetcher-mcp

MCP server for fetching web content via Playwright. Connects to an existing Chrome/Chromium instance via CDP.

Installation

npx @voiys/fetcher-mcp --cdp-url=ws://localhost:9222

MCP Client Configuration

{
  "mcpServers": {
    "fetcher": {
      "command": "npx",
      "args": [
        "@voiys/fetcher-mcp",
        "--cdp-url=ws://localhost:9222"
      ]
    }
  }
}

With Steel:

{
  "mcpServers": {
    "fetcher": {
      "command": "npx",
      "args": [
        "@voiys/fetcher-mcp",
        "--cdp-url=wss://connect.steel.dev?apiKey=XXX&sessionId=YYY"
      ]
    }
  }
}

Tools

fetch_url

Fetch a single URL:

await mcpClient.callTool("fetch_url", {
  url: "https://company.com/careers"
});

fetch_urls

Fetch multiple URLs in parallel:

await mcpClient.callTool("fetch_urls", {
  urls: ["https://a.com", "https://b.com"]
});

evaluate

Execute JavaScript on an existing session (requires keepSession: true on fetch_url):

// First fetch with keepSession
const result = await mcpClient.callTool("fetch_url", {
  url: "https://example.com",
  keepSession: true
});
// Extract sessionId from response

// Then interact with the page
await mcpClient.callTool("evaluate", {
  sessionId: "...",
  script: "document.querySelector('.load-more').click()"
});

// Get updated content
await mcpClient.callTool("evaluate", {
  sessionId: "...",
  script: "null",
  returnContent: true
});

close_session

Close a persistent session (or let it auto-close after 5 min):

await mcpClient.callTool("close_session", { sessionId: "..." });
// Or close all: 
await mcpClient.callTool("close_session", {});

Options

OptionTypeDefaultDescription
url / urlsstring / string[]requiredURL(s) to fetch
stripTagsstring[]['script','style','svg','noscript','iframe','link[rel="stylesheet"]','meta']CSS selectors to remove before processing
returnHtmlbooleanfalseReturn HTML instead of Markdown
structuredbooleanfalseReturn JSON {title, url, content, metadata} instead of plain text
timeoutnumber30000Page load timeout in ms
waitUntilstring'load'Navigation wait condition: 'load', 'domcontentloaded', 'networkidle'
maxLengthnumber0Max content length (0 = unlimited)
disableMediabooleantrueBlock images, fonts, stylesheets
evaluatestringundefinedJavaScript to execute on page before extracting content
keepSessionbooleanfalseKeep session alive, returns sessionId for use with evaluate tool

Examples

Custom tag stripping:

await mcpClient.callTool("fetch_url", {
  url: "https://company.com/jobs/123",
  stripTags: ["nav", "footer", "[class*='sidebar']", "script", "style"]
});

Execute JavaScript (click button, scroll, wait for content):

await mcpClient.callTool("fetch_url", {
  url: "https://example.com/infinite-scroll",
  evaluate: `
    // Click "Load More" button
    document.querySelector('.load-more-btn')?.click();
    // Wait for content to load
    await new Promise(r => setTimeout(r, 2000));
    // Scroll to bottom
    window.scrollTo(0, document.body.scrollHeight);
  `
});

Starting Chrome with CDP

chrome --remote-debugging-port=9222
chrome --remote-debugging-port=9222 \
  --disable-blink-features=AutomationControlled \
  --disable-features=IsolateOrigins,site-per-process \
  --no-sandbox \
  --disable-setuid-sandbox \
  --disable-dev-shm-usage \
  --disable-webgl \
  --disable-infobars \
  --disable-extensions
FlagPurpose
--disable-blink-features=AutomationControlledHide automation detection
--disable-features=IsolateOrigins,site-per-processDisable site isolation
--no-sandboxDisable sandboxing (needed in containers)
--disable-setuid-sandboxDisable setuid sandbox
--disable-dev-shm-usageAvoid /dev/shm issues in Docker
--disable-webglReduce fingerprinting surface
--disable-infobarsHide "Chrome is being controlled" bar
--disable-extensionsNo extensions

License

Licensed under the MIT License

Originally forked from jae-jae/fetcher-mcp

FAQs

Package last updated on 02 Dec 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts