@fnnm/fetch
v0.1.0
Published
A Model Context Protocol server providing tools to fetch and convert web content
Readme
Fetch MCP Server
A Model Context Protocol (MCP) server that fetches URLs and converts HTML/PDF to Markdown for LLMs. TypeScript/Node port of the original mcp-server-fetch2, communicating over stdio.
[!CAUTION] This server can access local/internal IP addresses and may represent a security risk. Exercise caution to ensure it does not expose sensitive data.
The fetch tool truncates the response; use the start_index argument to page through content in chunks until the model finds what it needs.
Available Tools
fetch— Fetches a URL and extracts its contents as markdown (HTML) or text (PDF).url(string, required): URL to fetchmax_length(integer, optional): Maximum characters to return (default: 5000)start_index(integer, optional): Start content from this character index (default: 0)raw(boolean, optional): Return raw content without markdown conversion (default: false)
Prompts
- fetch — Fetch a URL and extract its contents as markdown.
- Arguments:
url(string, required): URL to fetch
- Arguments:
Installation
Requires Node.js 18+.
git clone https://github.com/fxcl/fetch.git
cd fetch
npm install
npm run buildThe server runs as node dist/index.js. package.json declares a bin field, so once published npx @fnnm/fetch will also work.
Configuration
Configure for Claude.app / Claude Desktop
Add to your Claude settings:
{
"mcpServers": {
"fetch": {
"command": "node",
"args": ["/abs/path/to/fetch/dist/index.js"]
}
}
}{
"mcpServers": {
"fetch": {
"command": "docker",
"args": ["run", "-i", "--rm", "mcp/fetch"]
}
}
}Configure for VS Code
Add the following to .vscode/mcp.json in your workspace, or to your User Settings (JSON) via Ctrl+Shift+P → Preferences: Open User Settings (JSON). The mcp key is required when using mcp.json.
{
"mcp": {
"servers": {
"fetch": {
"command": "node",
"args": ["/abs/path/to/fetch/dist/index.js"]
}
}
}
}{
"mcp": {
"servers": {
"fetch": {
"command": "docker",
"args": ["run", "-i", "--rm", "mcp/fetch"]
}
}
}
}Behavior — robots.txt
The server obeys a site's robots.txt when the request comes from the model (via the fetch tool), but bypasses it when the request is user-initiated (via the fetch prompt). This behavior is fixed in the implementation; there is no CLI flag to toggle it.
Behavior — User-agent
The server sends one of two fixed user-agents depending on whether the request is model-initiated (tool) or user-initiated (prompt):
ModelContextProtocol/1.0 (Autonomous; +https://github.com/modelcontextprotocol/servers)ModelContextProtocol/1.0 (User-Specified; +https://github.com/modelcontextprotocol/servers)The user-agent is not configurable.
Behavior — Proxy
The server honors the HTTPS_PROXY / HTTP_PROXY environment variables (lowercase variants too), wired through an undici ProxyAgent. To set a proxy in mcpServers, add an env block:
{
"mcpServers": {
"fetch": {
"command": "node",
"args": ["/abs/path/to/fetch/dist/index.js"],
"env": {
"HTTPS_PROXY": "http://user:[email protected]:8080"
}
}
}
}Debugging
Use the MCP inspector:
npx @modelcontextprotocol/inspector node dist/index.jsContributing
Pull requests welcome. For examples of other MCP servers and implementation patterns, see https://github.com/modelcontextprotocol/servers.
License
MIT. See LICENSE.
