Skip to main content
Glama
bakhtiyork

Digest MCP Server

by bakhtiyork

Digest MCP Server

MCP server for web content digestion using browserless.io via puppeteer-core. Extracts fully rendered DOM content from dynamic web pages including SPAs and infinite scroll sites.

Features

  • Connect to browserless.io cloud browsers

  • Load web pages with configurable wait times

  • Scroll down pages multiple times with delays

  • Extract complete page content (HTML)

Related MCP server: MCP Fetch Page

Installation

npm install
npm run build

Configuration

Set your browserless.io API key using one of these methods:

Create a .env file in the project root:

cp .env.example .env

Then edit .env and add your API key:

BROWSERLESS_API_KEY=your_api_key_here

Option 2: Using environment variable

export BROWSERLESS_API_KEY=your_api_key_here

Usage

Running the Server

The server uses stdio transport for MCP communication:

node build/index.js

Tool: web_content

Fetches web page content with optional scrolling and HTML cleanup.

Parameters:

  • url (string, required): The URL to fetch

  • initialWaitTime (number, optional): Time to wait in milliseconds after loading the page. Default: 3000

  • scrolls (number, optional): Number of times to scroll down the page. Default: 5

  • scrollWaitTime (number, optional): Time to wait in milliseconds between each scroll. Default: 1000

  • cleanup (boolean, optional): Whether to clean up HTML (remove scripts, styles, SVG, forms, etc.) and keep only meaningful text content. Default: false

Returns:

  • size (number): Size of the content in bytes

  • content (string): The fetched HTML content

Example:

{
  "url": "https://example.com",
  "initialWaitTime": 2000,
  "scrolls": 3,
  "scrollWaitTime": 1000,
  "cleanup": true
}

How It Works

  1. Connects to browserless.io using your API key via WebSocket

  2. Creates a new page in the remote browser

  3. Navigates to the specified URL (waits for DOM content loaded)

  4. Waits 1 second for page stabilization

  5. Waits for the initial wait time (default: 3 seconds)

  6. Scrolls to the bottom of the page the specified number of times

  7. After each scroll, intelligently waits for new content to load by:

    • Monitoring page height changes

    • Detecting dynamically loaded content

    • Waiting up to scrollWaitTime for new content (default: 3 seconds)

  8. Waits for network to idle (AJAX requests complete)

  9. Waits 1 additional second for JavaScript rendering

  10. Returns the fully RENDERED DOM (not raw HTML source)

    • Includes all JavaScript-generated content

    • Includes all AJAX-loaded content

    • Includes all dynamically inserted elements

    • Uses document.documentElement.outerHTML for complete rendered state

Dynamic Content & Infinite Scroll

The tool is specifically designed for modern web applications with dynamic content:

AJAX/JavaScript Handling:

  • Waits for network idle: Ensures all AJAX requests complete

  • Returns rendered DOM: Gets actual content after JavaScript execution

  • Not raw HTML source: Uses browser's rendered output

  • Includes dynamic elements: Captures content inserted by React, Vue, Angular, etc.

Infinite Scroll Support:

  • Scrolls to bottom: Triggers lazy-loading mechanisms

  • Detects new content: Monitors page height changes

  • Smart waiting: Exits early when content loads

  • Multiple fallbacks: Keyboard scroll if JavaScript fails

Perfect for:

  • Single Page Applications (React, Vue, Angular)

  • Infinite scroll feeds (Twitter, Facebook, LinkedIn)

  • Lazy-loaded images and content

  • AJAX-powered content (search results, filters)

  • Dynamic dashboards and admin panels

Tips for best results:

  • Default scrolls: 5 works well for most pages with lazy-loaded content

  • Increase scrolls to 10-15 for very long infinite scroll pages

  • Set scrolls: 0 to disable scrolling for static pages

  • Use scrollWaitTime of 1000-3000ms for slow-loading content (default: 1000ms)

  • Increase initialWaitTime to 5000+ if page has heavy initialization

  • For SPAs, allow time for initial JavaScript bootstrap

  • Use cleanup: true to extract only meaningful text content without scripts, styles, and visual elements

  • Use cleanup: false (default) to get the full rendered HTML

MCP Client Configuration

Add to your MCP client configuration (e.g., Claude Desktop):

{
  "mcpServers": {
    "digest": {
      "command": "node",
      "args": ["/path/to/digest-mcp/build/index.js"],
      "env": {
        "BROWSERLESS_API_KEY": "your_api_key_here"
      }
    }
  }
}

License

ISC

Available Tools

1 tool
web_contentFetch Web ContentA

Fetch fully rendered DOM content using browserless.io. Handles AJAX/JavaScript dynamic loading. Optimized for SPAs and infinite scroll pages. Returns the complete rendered HTML after all JavaScript execution, including dynamically loaded content. Each scroll waits for page height changes and network activity to settle.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL to fetch
initialWaitTimeNoTime to wait (in milliseconds) after loading the page before scrolling
scrollsNoNumber of times to scroll down the page
scrollWaitTimeNoTime to wait (in milliseconds) between each scroll action
cleanupNoWhether to clean up HTML (remove scripts, styles, SVG, forms, etc.) and keep only meaningful text content

Output Schema

ParametersJSON Schema
NameRequiredDescription
sizeYesSize of the content in bytes
contentYesThe fetched HTML content

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: it handles dynamic loading, waits for JavaScript execution, includes scrolling behavior with wait times, and mentions cleanup options. However, it lacks details on error handling, rate limits, or authentication needs, which would be beneficial for a tool with external dependencies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, starting with the core purpose and progressively detailing capabilities and behavior. Each sentence adds value without redundancy, making it efficient and easy to understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (external service integration, dynamic content handling) and rich schema (100% coverage, output schema exists), the description is mostly complete. It covers the tool's purpose, key behaviors, and context, but could improve by addressing potential limitations or error scenarios. The existence of an output schema means return values need not be explained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds some context by mentioning scrolling and cleanup in general terms, but it does not provide additional semantic meaning beyond what the schema specifies (e.g., explaining why certain defaults are chosen or how parameters interact).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('Fetch fully rendered DOM content') and resource ('using browserless.io'), and distinguishes its capabilities from basic web scraping by mentioning AJAX/JavaScript handling, SPAs, infinite scroll pages, and complete rendered HTML after JavaScript execution. It provides a comprehensive overview of what the tool does beyond just fetching content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage scenarios (e.g., for SPAs, infinite scroll pages, dynamic content) but does not explicitly state when to use this tool versus alternatives or provide any exclusions. With no sibling tools mentioned, the lack of explicit guidance is less critical, but it still relies on implication rather than clear directives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool updatev1.0.0
    • Changedweb_content9 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / cleanup
        Added value: +{
        +  "default": false,
        +  "description": "Whether to clean up HTML (remove scripts, styles, SVG, forms, etc.) and keep only meaningful text content",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / scrollCount
        Removed value: -{
        -  "default": 0,
        -  "description": "Number of times to scroll down the page",
        -  "type": "number"
        -}
      • changedInput schema / properties / scrollWaitTime / default
        Previous value: -3000New value: +1000
      • addedInput schema / properties / scrolls
        Added value: +{
        +  "default": 5,
        +  "description": "Number of times to scroll down the page",
        +  "type": "number"
        +}
      • changedOutput schema / properties / content / description
        Previous value: -"The fully rendered DOM HTML content including all dynamically loaded elements"New value: +"The fetched HTML content"
      • addedOutput schema / properties / size
        Added value: +{
        +  "description": "Size of the content in bytes",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "content"
        -]New value: +[
        +  "size",
        +  "content"
        +]
  2. 1 tool update
    • First observedweb_content

TDQS

A3.9/5.0
Disambiguation5/5

With only one tool, there is no possibility of confusion or overlap between tools. The single tool 'web_content' has a clearly defined and distinct purpose of fetching fully rendered DOM content from web pages.

Naming Consistency5/5

Since there is only one tool, naming consistency is inherently perfect. The tool name 'web_content' follows a clear and descriptive pattern, though no pattern can be established across multiple tools.

Tool Count2/5

A single tool is too few for a server named 'Digest MCP Server', which suggests a broader scope of digesting or processing content. While the tool is well-described, the server's purpose likely requires more operations (e.g., parsing, summarizing, or managing multiple sources) to be effectively useful.

Completeness2/5

The tool surface is severely incomplete for a digest server. It only provides fetching of web content, with no tools for processing, analyzing, summarizing, or managing the fetched data. This creates significant gaps that will hinder agents from performing comprehensive digest-related tasks.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables web scraping and document processing with JavaScript execution, anti-detection measures, batch processing, and structured data extraction. Supports multiple formats including markdown, HTML, screenshots, and handles PDFs with OCR capabilities.
    4
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables browser-based web page fetching with automatic cookie management and CSS selector extraction, supporting JavaScript rendering and authenticated sessions through a Chrome extension.
    1
    7
    2
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables web scraping, structured data extraction, and screenshot capture with automatic anti-bot bypass, supporting JavaScript rendering, proxy rotation, and tiered pricing.
    25
    218
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Fetches web pages with JavaScript rendering, pierces Shadow DOM, and enables interactive actions like clicking and form filling using a real Chrome browser.
    2
    MIT

Latest Blog Posts

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/bakhtiyork/digest-mcp'

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