Skip to main content
Glama

MCP Fetch

by matiasngf

MCP Fetch

A Model Context Protocol server providing tools for HTTP requests, GraphQL queries, WebSocket connections, and browser automation using Puppeteer.

Configuration

Add this to your MCP settings configuration file:

{ "mcp-fetch": { "type": "stdio", "command": "npx", "args": [ "-y", "mcp-fetch" ] } }

Installation

If the puppeteer tool is not working, remember to install the chrome browser

npx puppeteer browsers install chrome

Features

  • HTTP Requests: Perform HTTP requests with full control over method, headers, and body
  • GraphQL Client: Execute queries/mutations and introspect GraphQL schemas
  • WebSocket Management: Connect, send, receive messages, and manage WebSocket connections
  • Browser Automation: Launch browsers, create pages, and execute JavaScript using Puppeteer
  • Comprehensive Docs: AI-ready documentation via get-rules tool

Available Tools

HTTP Requests

fetch

Perform HTTP requests with full control over method, headers, body, and other fetch options.

Parameters:

  • url (string, required): The URL to fetch from
  • method (string, optional): HTTP method (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS). Default: "GET"
  • headers (object, optional): HTTP headers as key-value pairs
  • body (string, optional): Request body for POST, PUT, PATCH, DELETE
  • mode (string, optional): Request mode (cors, no-cors, same-origin)
  • credentials (string, optional): Credentials mode (omit, same-origin, include)
  • cache (string, optional): Cache mode (default, no-store, reload, no-cache, force-cache, only-if-cached)
  • redirect (string, optional): Redirect handling (follow, error, manual). Default: "follow"
  • referrer (string, optional): Referrer URL
  • referrerPolicy (string, optional): Referrer policy
  • timeout (number, optional): Request timeout in milliseconds
  • followRedirects (boolean, optional): Whether to follow redirects. Default: true

Returns:

{ "status": 200, "statusText": "OK", "headers": { "content-type": "application/json" }, "body": "Response body as string", "redirected": false, "url": "https://api.example.com/data" }

Example Usage:

// Simple GET request fetch({ url: "https://api.example.com/users" }) // POST request with JSON body fetch({ url: "https://api.example.com/users", method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ name: "John Doe", email: "john@example.com" }) }) // Request with authentication and timeout fetch({ url: "https://api.example.com/protected", headers: { "Authorization": "Bearer token123" }, timeout: 5000 })

GraphQL

graphql

Execute GraphQL queries and mutations with support for variables and custom headers.

Parameters:

  • action (object, required): Action to perform with discriminated union:
    • For execution:
      • type: "execute"
      • endpoint (string): GraphQL endpoint URL
      • query (string): GraphQL query or mutation string
      • variables (object, optional): Variables for the query/mutation
      • headers (object, optional): HTTP headers (e.g., authorization)
      • operationName (string, optional): Operation name when query contains multiple operations
      • timeout (number, optional): Request timeout in milliseconds. Default: 30000
    • For introspection:
      • type: "introspect"
      • endpoint (string): GraphQL endpoint URL
      • headers (object, optional): HTTP headers
      • action (string): What to fetch: "full-schema", "list-operations", or "get-type"
      • typeName (string, optional): Type name (required when action is "get-type")
      • useCache (boolean, optional): Use cached schema if available. Default: true
      • cacheTTL (number, optional): Cache time-to-live in milliseconds. Default: 300000

Returns: For execution:

{ "data": { "user": { "id": "1", "name": "John Doe" } }, "errors": [], "extensions": {} }

For introspection:

{ "operations": { "queries": ["getUser", "listUsers"], "mutations": ["createUser", "updateUser"], "subscriptions": [] } }

Example Usage:

// Execute a query graphql({ action: { type: "execute", endpoint: "https://api.example.com/graphql", query: ` query GetUser($id: ID!) { user(id: $id) { id name email } } `, variables: { id: "123" }, headers: { "Authorization": "Bearer token123" } } }) // Introspect schema graphql({ action: { type: "introspect", endpoint: "https://api.example.com/graphql", action: "list-operations" } })

WebSocket

socket

Manage WebSocket connections - connect, send, receive messages, list connections, and close.

Parameters:

  • action (object, required): Action to perform with discriminated union:
    • For listing connections:
      • type: "list"
    • For connecting:
      • type: "connect"
      • url (string): WebSocket URL (ws:// or wss://)
      • protocols (array, optional): WebSocket subprotocols
      • headers (object, optional): HTTP headers for connection
      • autoReconnect (boolean, optional): Auto-reconnect on disconnection. Default: false
      • maxReconnectAttempts (number, optional): Max reconnection attempts. Default: 5
      • reconnectInterval (number, optional): Base reconnect interval in ms. Default: 1000
      • messageHistoryLimit (number, optional): Max messages to keep. Default: 100
    • For sending:
      • type: "send"
      • socketId (string): Socket connection ID
      • message (string or object): Message to send
      • binary (boolean, optional): Send as binary data. Default: false
    • For receiving:
      • type: "receive"
      • socketId (string): Socket connection ID
      • action (string): "get-latest", "get-all", or "get-since"
      • since (string, optional): ISO timestamp for get-since
      • clearAfterRead (boolean, optional): Clear queue after reading. Default: false
    • For closing:
      • type: "close"
      • socketId (string): Socket connection ID
      • code (number, optional): Close code. Default: 1000
      • reason (string, optional): Close reason. Default: "Normal closure"

Returns: For connect:

{ "socketId": "ws_1234567890_abc123", "url": "wss://example.com/socket", "readyState": "OPEN", "protocol": "", "messageCount": 0 }

Example Usage:

// Connect to WebSocket socket({ action: { type: "connect", url: "wss://example.com/socket", headers: { "Authorization": "Bearer token123" }, autoReconnect: true } }) // Send message socket({ action: { type: "send", socketId: "ws_1234567890_abc123", message: { type: "subscribe", channel: "updates" } } }) // Receive messages socket({ action: { type: "receive", socketId: "ws_1234567890_abc123", action: "get-latest" } })

Browser Automation

puppeteer

Control browsers and pages with Puppeteer - launch/close browsers, open/close pages, execute JavaScript, and more.

Parameters:

  • action (object, required): Action to perform with discriminated union:
    • For listing browsers:
      • type: "list-browsers"
    • For launching browser:
      • type: "launch-browser"
      • headless (boolean, optional): Run in headless mode. Default: false
      • width (number, optional): Window width. Default: 1280
      • height (number, optional): Window height. Default: 720
      • url (string, optional): URL to navigate to after launch
    • For closing browser:
      • type: "close-browser"
      • browserId (string): Browser instance ID
    • For listing pages:
      • type: "list-pages"
    • For opening page:
      • type: "open-page"
      • browserId (string): Browser instance ID
      • url (string, optional): URL to navigate to
    • For closing page:
      • type: "close-page"
      • pageId (string): Page ID
    • For executing code:
      • type: "exec-page"
      • pageId (string): Page ID
      • source (string): JavaScript code to execute (has access to page object)

Returns: For launch-browser:

{ "success": true, "browserId": "browser_1234567890_abc123", "message": "Browser launched successfully", "config": { "headless": false, "width": 1280, "height": 720 } }

Example Usage:

// Launch browser and navigate puppeteer({ action: { type: "launch-browser", headless: false, url: "https://example.com" } }) // Execute page automation puppeteer({ action: { type: "exec-page", pageId: "page_id", source: ` await page.goto('https://example.com'); await page.type('#search', 'hello world'); await page.click('#submit'); const title = await page.title(); return title; ` } })

Documentation

get-rules

Get comprehensive documentation about this MCP server.

Parameters:

  • random_string (string): Dummy parameter for no-parameter tools

Returns: Complete documentation including schemas, use cases, and best practices.

Use Cases

API Integration

Use the fetch tool to integrate with REST APIs, webhooks, and external services.

// Fetch data from REST API fetch({ url: "https://api.github.com/users/octocat", headers: { "Accept": "application/vnd.github.v3+json" } }) // Submit form data fetch({ url: "https://api.example.com/submit", method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: "name=John&email=john@example.com" })

GraphQL Operations

Use the graphql tool for type-safe API queries and schema exploration.

// Query user data graphql({ action: { type: "execute", endpoint: "https://api.example.com/graphql", query: `query { users { id name email } }` } }) // Explore available operations graphql({ action: { type: "introspect", endpoint: "https://api.example.com/graphql", action: "list-operations" } })

Real-time Communication

Use the socket tool for WebSocket connections, chat applications, and live data feeds.

// Connect to chat server socket({ action: { type: "connect", url: "wss://chat.example.com", autoReconnect: true } }) // Subscribe to live updates socket({ action: { type: "send", socketId: "socket_id", message: { action: "subscribe", topics: ["news", "alerts"] } } })

Web Automation

Use the puppeteer tool for web scraping, automated testing, and browser interactions.

// Automated form submission puppeteer({ action: { type: "exec-page", pageId: "page_id", source: ` await page.goto('https://forms.example.com'); await page.type('#name', 'John Doe'); await page.type('#email', 'john@example.com'); await page.click('#submit'); await page.waitForNavigation(); return page.url(); ` } }) // Screenshot generation puppeteer({ action: { type: "exec-page", pageId: "page_id", source: ` await page.goto('https://example.com'); const screenshot = await page.screenshot({ encoding: 'base64' }); return screenshot; ` } })

Best Practices

General

  1. Always handle errors - Wrap operations in try-catch blocks
  2. Use appropriate timeouts - Set reasonable timeouts for network operations
  3. Clean up resources - Close connections when done (browsers, websockets)
  4. Follow rate limits - Respect API rate limits and add delays if needed

HTTP & GraphQL

  1. Use proper headers - Set Content-Type, Accept, and Authorization headers
  2. Handle redirects appropriately - Consider security implications
  3. Validate responses - Check status codes and response formats
  4. Use HTTPS - Always prefer secure connections

WebSockets

  1. Implement reconnection logic - Use autoReconnect for critical connections
  2. Handle connection states - Check readyState before sending
  3. Process messages efficiently - Clear message queues regularly
  4. Use appropriate close codes - Follow WebSocket close code standards

Browser Automation

  1. Use headless mode for automation - Better performance and resource usage
  2. Wait for elements - Use waitForSelector before interacting
  3. Handle navigation - Use waitForNavigation after clicks
  4. Limit concurrent browsers - Avoid resource exhaustion
  5. Clean up pages and browsers - Prevent memory leaks

Installation

Dependencies are automatically installed when running the server. If you encounter issues:

# For browser automation (Puppeteer) npx puppeteer browsers install chrome # For all dependencies npm install mcp-fetch

Limitations

  • Browser instances and WebSocket connections are stored in memory and lost on restart
  • Each browser instance consumes significant system resources
  • WebSocket message history is limited by messageHistoryLimit
  • GraphQL introspection cache is temporary and cleared on restart
  • File uploads are not directly supported (use base64 encoding in body)

License

MIT

Deploy Server
A
security – no known vulnerabilities
F
license - not found
A
quality - confirmed to work

local-only server

The server can only run on the client's local machine because it depends on local resources.

Enables browser automation using Puppeteer through the MCP interface. Allows launching browsers, creating pages, and executing arbitrary JavaScript for web scraping, testing, and debugging tasks.

  1. Configuration
    1. Installation
      1. Features
        1. Available Tools
          1. HTTP Requests
          2. GraphQL
          3. WebSocket
          4. Browser Automation
          5. Documentation
        2. Use Cases
          1. API Integration
          2. GraphQL Operations
          3. Real-time Communication
          4. Web Automation
        3. Best Practices
          1. General
          2. HTTP & GraphQL
          3. WebSockets
          4. Browser Automation
        4. Installation
          1. Limitations
            1. License

              Related MCP Servers

              • A
                security
                A
                license
                A
                quality
                Enables browser automation with Puppeteer, supporting navigation, form interactions, and connection to active Chrome instances for comprehensive web page interaction.
                Last updated -
                8
                2,118
                219
                MIT License
                • Apple
                • Linux
              • -
                security
                A
                license
                -
                quality
                Enables browser automation using the Selenium WebDriver through MCP, supporting browser management, element location, and both basic and advanced user interactions.
                Last updated -
                734
                242
                MIT License
              • -
                security
                A
                license
                -
                quality
                A Model Context Protocol server that enables LLMs to automate web browsers using Puppeteer, allowing navigation, screenshots, form filling, and JavaScript execution in a real browser environment.
                Last updated -
                2
                MIT License
              • A
                security
                F
                license
                A
                quality
                A Model Context Protocol server that provides browser automation capabilities using Puppeteer with configurable options through environment variables, enabling LLMs to interact with web pages, take screenshots, and execute JavaScript in a browser environment.
                Last updated -
                7
                3

              View all related MCP servers

              MCP directory API

              We provide all the information about MCP servers via our MCP API.

              curl -X GET 'https://glama.ai/api/mcp/v1/servers/matiasngf/mcp-fetch'

              If you have feedback or need assistance with the MCP directory API, please join our Discord server