# com.pulsemcp/pulse-fetch (npm · @pulsemcp/pulse-fetch)

MCP server for fetching web resources with content extraction and anti-bot bypass.

- Trust score: 66/100 (medium)
- Change this week: +25
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@pulsemcp/pulse-fetch`: 66/100 (this document), [markdown](https://verifymcp.io/servers/com-pulsemcp-pulse-fetch/pulsemcp-pulse-fetch.md), [page](https://verifymcp.io/servers/com-pulsemcp-pulse-fetch/pulsemcp-pulse-fetch)

## Channel facts

- Registry: `npm`
- Package: `@pulsemcp/pulse-fetch`
- Version: `0.3.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 90/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (161 of 163), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (161 of 163), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 49 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 56/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 750 tokens (~750/item across 1 items; 1 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add com-pulsemcp-pulse-fetch -- npx -y @pulsemcp/pulse-fetch
```

### Codex

```bash
codex mcp add com-pulsemcp-pulse-fetch -- npx -y @pulsemcp/pulse-fetch
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-pulsemcp-pulse-fetch": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@pulsemcp/pulse-fetch"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-pulsemcp-pulse-fetch --command npx --arg -y --arg @pulsemcp/pulse-fetch
```

### Hermes

```yaml
mcp_servers:
  com-pulsemcp-pulse-fetch:
    command: "npx"
    args: ["-y", "@pulsemcp/pulse-fetch"]
```

### Other

```json
{
  "mcpServers": {
    "com-pulsemcp-pulse-fetch": {
      "command": "npx",
      "args": [
        "-y",
        "@pulsemcp/pulse-fetch"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 66, +38)

- [security regression] Provenance: fail → unverified
- [security regression] Install scripts: pass → unverified
- [security improvement] Known CVEs: unverified → partial
- [functional regression] Maintenance: pass → unverified
- [functional regression] License: pass → unverified
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] Dependency health: unverified → partial
- [functional] Licence: MIT

### 2026-08-01 (score 28, −37)

- [security regression] Known CVEs: partial → unverified
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Dependency health: partial → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified

### 2026-07-31 (score 65, +59)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 6, −20)

- [security regression] Malware scan: pass → unverified
- [functional regression] Dependency health: partial → unverified

### 2026-07-29 (score 26, −15)

- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Dependency health: unverified → partial
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 41)

First indexed and scored.

## MCP tools (1)

### `scrape` (~750 tokens)

Scrape webpage content using intelligent automatic strategy selection with built-in caching. This tool fetches content from any URL with flexible result handling options.

Result handling modes:
\- returnOnly: Returns scraped content without saving (uses maxChars for size limits)
\- saveAndReturn: Saves content as MCP Resource AND returns it (default, best for reuse)
\- saveOnly: Saves content as MCP Resource, returns only resource link (no content)

Example responses by mode:

returnOnly:
{
  "content": [
    {
      "type": "text",
      "text": "Article content here...

\---
Scraped using: native"
    }
  ]
}

saveAndReturn (embedded resource):
{
  "content": [
    {
      "type": "resource",
      "resource": {
        "uri": "scraped://example.com/article_2024-01-15T10:30:00Z",
        "name": "https://example.com/article",
        "text": "Full article content..."
      }
    }
  ]
}

saveOnly (linked resource):
{
  "content": [
    {
      "type": "resource_link",
      "uri": "scraped://example.com/article_2024-01-15T10:30:00Z",
      "name": "https://example.com/article"
    }
  ]
}

Caching behavior:
\- Previously scraped URLs are automatically cached as MCP Resources
\- Subsequent requests return cached content (unless forceRescrape: true)
\- saveOnly mode bypasses cache lookup for efficiency

Scraping strategies:
\- native: Direct HTTP fetch (fastest, works for most public sites)
\- firecrawl: Advanced scraping with JavaScript rendering (requires FIRECRAWL_API_KEY)
\- brightdata: Premium scraping for heavily protected sites (requires BRIGHTDATA_API_KEY)

The tool automatically:
1\. Checks cache first (except in saveOnly mode)
2\. Tries the most appropriate scraping method based on domain patterns
3\. Falls back to alternative methods if needed
4\. Remembers successful strategies for future requests

Input parameters:

- `cleanScrape` (boolean): Whether to clean the scraped content by converting HTML to semantic Markdown of what's on the page, removing ads, navigation, and boilerplate. This typically reduces content size by 50-90% while pres…
- `forceRescrape` (boolean): Force a fresh scrape even if cached content exists for this URL. Useful when you know the content has changed. Default: false
- `maxChars` (number): Maximum number of characters to return from the scraped content. Useful for limiting response size. Default: 100000
- `resultHandling` (string): How to handle scraped content and MCP Resources. Options: "saveOnly" (saves as linked resource, no content returned), "saveAndReturn" (saves as embedded resource and returns content - default), "retu…
- `startIndex` (number): Character position to start reading from. Use with maxChars for pagination through large documents (e.g., startIndex: 100000 to skip first 100k chars). Default: 0
- `timeout` (number): Maximum time to wait for page load in milliseconds. Increase for slow-loading sites (e.g., 120000 for 2 minutes). Default: 60000 (1 minute)
- `url` (string, required): The webpage URL to scrape (e.g., "https://example.com/article", "https://api.example.com/docs")

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/com-pulsemcp-pulse-fetch/pulsemcp-pulse-fetch#diagnostics

## Score history

- 2026-08-03: 66
- 2026-08-02: 66
- 2026-08-01: 28
- 2026-07-31: 65
- 2026-07-30: 6
- 2026-07-29: 26
- 2026-07-28: 41
- 2026-07-27: 41

## Links

- npm package: https://www.npmjs.com/package/@pulsemcp/pulse-fetch
- Socket report: https://socket.dev/npm/package/@pulsemcp/pulse-fetch
- Repository: https://github.com/pulsemcp/mcp-servers
- Changelog RSS feed: https://verifymcp.io/servers/com-pulsemcp-pulse-fetch/pulsemcp-pulse-fetch/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-pulsemcp-pulse-fetch/pulsemcp-pulse-fetch/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-pulsemcp-pulse-fetch/pulsemcp-pulse-fetch
