
Research
2025 Report: Destructive Malware in Open Source Packages
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.
@lmcc-dev/mult-fetch-mcp-server
Advanced tools
An MCP protocol-based web content fetching tool that supports multiple modes and formats, can be integrated with AI assistants like Claude
This project implements an MCP-compliant client and server for communication between AI assistants and external tools.
fetch-mcp/
├── src/ # Source code directory
│ ├── lib/ # Library files
│ │ ├── BrowserFetcher.ts # Browser mode fetcher
│ │ ├── NodeFetcher.ts # Node.js mode fetcher
│ │ ├── server/ # Server-related modules
│ │ │ ├── index.ts # Server entry point
│ │ │ ├── browser.ts # Browser management
│ │ │ ├── fetcher.ts # Web fetching logic
│ │ │ ├── logger.ts # Logging utilities
│ │ │ ├── tools.ts # Tool registration and handling
│ │ │ └── types.ts # Server type definitions
│ │ ├── i18n/ # Internationalization support
│ │ │ ├── index.ts # i18n configuration
│ │ │ └── logger.ts # i18n logger utilities
│ │ └── types.ts # Common type definitions
│ ├── client.ts # MCP client implementation
│ └── mcp-server.ts # MCP server main entry
├── index.ts # Server entry point
├── tests/ # Test files
│ ├── test-mcp.ts # MCP functionality tests
│ ├── test-mini4k.ts # Specific website tests
│ └── test-direct-client.ts # Direct client call tests
└── dist/ # Compiled files
├── index.js # Compiled entry point
├── src/ # Compiled source code
└── tests/ # Compiled test files
The Model Context Protocol (MCP) defines two main transport methods:
This project implements the Standard Input/Output (Stdio) transport method.
npm install
npm install -g @lmcc-dev/mult-fetch-mcp-server
Or use npx to run directly (no installation required):
npx @lmcc-dev/mult-fetch-mcp-server
To integrate this tool with Claude desktop, you need to add server configuration:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%/Claude/claude_desktop_config.jsonThis method is the simplest, doesn't require specifying the full path, and is suitable for global installation or direct use with npx:
{
"mcpServers": {
"mult-fetch-mcp-server": {
"command": "npx",
"args": ["@lmcc-dev/mult-fetch-mcp-server"],
"env": {
"MCP_LANG": "en" // Set language to English, options: "zh" or "en"
}
}
}
}
If you need to use a specific installation location, you can specify the full path:
{
"mcpServers": {
"mult-fetch-mcp-server": {
"command": "path-to/bin/node",
"args": ["path-to/@lmcc-dev/mult-fetch-mcp-server/dist/index.js"],
"env": {
"MCP_LANG": "en" // Set language to English, options: "zh" or "en"
}
}
}
}
Please replace path-to/bin/node with the path to the Node.js executable on your system, and replace path-to/@lmcc-dev/mult-fetch-mcp-server with the actual path to this project.
Below is an example of using this tool in Claude desktop client:

The image shows how Claude can use the fetch tools to retrieve web content and process it according to your instructions.
After configuration, restart Claude desktop, and you can use the following tools in your conversation:
fetch_html: Get HTML content of a webpagefetch_json: Get JSON datafetch_txt: Get plain text contentfetch_markdown: Get Markdown formatted contentnpm run build
npm run server
# or
node dist/index.js
# if globally installed, you can run directly
@lmcc-dev/mult-fetch-mcp-server
# or use npx
npx @lmcc-dev/mult-fetch-mcp-server
npm run client <method> <params_json>
# example
npm run client fetch_html '{"url": "https://example.com", "debug": true}'
# Run MCP functionality tests
npm run test:mcp
# Run mini4k.com website tests
npm run test:mini4k
# Run direct client call tests
npm run test:direct
This project supports Chinese and English bilingual internationalization. You can set the language using environment variables:
Set the MCP_LANG environment variable to control the language:
# Set to English
export MCP_LANG=en
npm run server
# Set to Chinese
export MCP_LANG=zh
npm run server
# Windows system
set MCP_LANG=zh
npm run server
Using environment variables ensures that all related processes (including the MCP server) use the same language settings.
By default, the system will choose a language according to the following priority:
MCP_LANG environment variableThis project follows the MCP protocol specification and does not output any logs by default to avoid interfering with JSON-RPC communication. Debug information is controlled through call parameters:
Set the debug: true parameter when calling a tool:
{
"url": "https://example.com",
"debug": true
}
Debug messages are sent to the standard error stream (stderr) using the following format:
[MCP-SERVER] MCP server starting...
[CLIENT] Fetching URL: https://example.com
When debug mode is enabled, all debug messages are also written to a log file located at:
~/.mult-fetch-mcp-server/debug.log
This log file can be accessed through the MCP resources API:
// Access the debug log file
const result = await client.readResource({ uri: "file:///logs/debug" });
console.log(result.contents[0].text);
// Clear the debug log file
const clearResult = await client.readResource({ uri: "file:///logs/clear" });
console.log(clearResult.contents[0].text);
This tool supports various methods to configure proxy settings:
proxy ParameterThe most direct way is to specify the proxy in the request parameters:
{
"url": "https://example.com",
"proxy": "http://your-proxy-server:port",
"debug": true
}
The tool will automatically detect and use proxy settings from standard environment variables:
# Set proxy environment variables
export HTTP_PROXY=http://your-proxy-server:port
export HTTPS_PROXY=http://your-proxy-server:port
# Run the server
npm run server
The tool attempts to detect system proxy settings based on your operating system:
set commandenv commandIf you're having issues with proxy detection:
debug: true parameter to see detailed logs about proxy detectionproxy parameterhttp://host:port or https://host:portuseBrowser: true to use browser modeWhen using browser mode (useBrowser: true), the tool will:
Browser mode is particularly useful for websites that implement anti-scraping measures or require JavaScript execution.
This project handles parameters in the following ways:
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
import path from 'path';
import { fileURLToPath } from 'url';
// Get the directory path of the current file
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// Create client transport layer
const transport = new StdioClientTransport({
command: 'node',
args: [path.resolve(__dirname, 'dist/index.js')],
stderr: 'inherit',
env: {
...process.env // Pass all environment variables, including MCP_LANG
}
});
// Create client
const client = new Client({
name: "example-client",
version: "1.0.0"
});
// Connect to transport layer
await client.connect(transport);
// Use client
const result = await client.callTool({
name: 'fetch_html',
arguments: {
url: 'https://example.com',
debug: true // Control debug output through parameters
}
});
if (result.isError) {
console.error('Fetch failed:', result.content[0].text);
} else {
console.log('Fetch successful!');
console.log('Content preview:', result.content[0].text.substring(0, 500));
}
fetch_html: Get HTML content of a webpagefetch_json: Get JSON datafetch_txt: Get plain text contentfetch_markdown: Get Markdown formatted contentThe server includes support for the resources/list and resources/read methods, but currently no resources are defined in the implementation. The resource system is designed to provide access to project files and documentation, but this feature is not fully implemented yet.
// Example: List available resources
const resourcesResult = await client.listResources({});
console.log('Available resources:', resourcesResult);
// Note: Currently this will return empty lists for resources and resourceTemplates
The server provides the following prompt templates:
fetch-website: Get website content, supporting different formats and browser modeextract-content: Extract specific content from a website, supporting CSS selectors and data type specificationdebug-fetch: Debug website fetching issues, analyze possible causes and provide solutionsprompts/list to get a list of available prompt templatesprompts/get to get specific prompt template content// Example: List available prompt templates
const promptsResult = await client.listPrompts({});
console.log('Available prompts:', promptsResult);
// Example: Get website content prompt
const fetchPrompt = await client.getPrompt({
name: "fetch-website",
arguments: {
url: "https://example.com",
format: "html",
useBrowser: "false"
}
});
console.log('Fetch website prompt:', fetchPrompt);
// Example: Debug website fetching issues
const debugPrompt = await client.getPrompt({
name: "debug-fetch",
arguments: {
url: "https://example.com",
error: "Connection timeout"
}
});
console.log('Debug fetch prompt:', debugPrompt);
Each tool supports the following parameters:
url: URL to fetch (required)headers: Custom request headers (optional, default is {})proxy: Proxy server URL in format http://host:port or https://host:port (optional)timeout: Timeout in milliseconds (optional, default is 30000)maxRedirects: Maximum number of redirects to follow (optional, default is 10)noDelay: Whether to disable random delay between requests (optional, default is false)useSystemProxy: Whether to use system proxy (optional, default is true)useBrowser: Whether to use browser mode (optional, default is false)useNodeFetch: Whether to force using Node.js mode (optional, default is false, mutually exclusive with useBrowser)autoDetectMode: Whether to automatically detect and switch to browser mode (optional, default is true)waitForSelector: Selector to wait for in browser mode (optional, default is 'body')waitForTimeout: Timeout to wait in browser mode in milliseconds (optional, default is 5000)scrollToBottom: Whether to scroll to the bottom of the page in browser mode (optional, default is false)saveCookies: Whether to save cookies in browser mode (optional, default is true)closeBrowser: Whether to close the browser instance (optional, default is false)debug: Whether to enable debug output (optional, default is false)To close the browser instance without performing any fetch operation:
{
"url": "about:blank",
"closeBrowser": true
}
The proxy is determined in the following order:
proxy parameter in the requestuseSystemProxy is true)useSystemProxy is true)If proxy is set, useSystemProxy will be automatically set to false.
When debug: true is set, the logs will be output to stderr with the following prefixes:
[MCP-SERVER]: Logs from the MCP server[NODE-FETCH]: Logs from the Node.js fetcher[BROWSER-FETCH]: Logs from the browser fetcher[CLIENT]: Logs from the clientMIT
Updated by lmcc-dev
FAQs
An MCP protocol-based web content fetching tool that supports multiple modes and formats, can be integrated with AI assistants like Claude
The npm package @lmcc-dev/mult-fetch-mcp-server receives a total of 57 weekly downloads. As such, @lmcc-dev/mult-fetch-mcp-server popularity was classified as not popular.
We found that @lmcc-dev/mult-fetch-mcp-server demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

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.

Research
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.

Security News
Socket CTO Ahmad Nassri shares practical AI coding techniques, tools, and team workflows, plus what still feels noisy and why shipping remains human-led.

Research
/Security News
A five-month operation turned 27 npm packages into durable hosting for browser-run lures that mimic document-sharing portals and Microsoft sign-in, targeting 25 organizations across manufacturing, industrial automation, plastics, and healthcare for credential theft.