# FetchFox

> YouTube transcripts, Instagram profiles and posts, and TikTok data as MCP tools.

- name: io.github.solo-novato/fetchfox
- version: 1.0.0
- connection class: R1 (autonomous)
- trust: 80/100 flags: no-repository
- quality: 91/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.solo-novato%2Ffetchfox
- tools: https://api.protogrid.dev/v1/servers/io.github.solo-novato%2Ffetchfox/tools

**An agent can connect on its own if it already holds `api_key`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "fetchfox": {
      "type": "http",
      "url": "https://mcp.fetchfox.net/mcp",
      "headers": {
        "Authorization": "Bearer ${api_key}"
      }
    }
  }
}
```

Placeholders to fill: `${api_key}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 45
- drivers: +website +reachable +uptime-100% +updated-9d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 91/100 (strong)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 10 of 10 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 1,580 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 4 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 10, about 1,580 tokens to load them all
- tool set hash: ca61122c1ac99d105001ec4b2a3898ee
- tools last changed: 2026-10-20T08:11:28.358Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.solo-novato/fetchfox.svg)](https://protogrid.dev/servers/io.github.solo-novato/fetchfox)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-20 `facebook_comments` added
  - List comments on a Facebook post or video.
- 2026-10-20 `instagram_channel_reels` changed (inputSchema)
- 2026-10-20 `instagram_channel_posts` changed (inputSchema)
- 2026-10-20 `instagram_comments` added
  - List comments on an Instagram post or reel. Check collectionStatus (partial, exhausted, unknown) and stopReason before analysis. hasMore only means a safe cursor is available; false does not prove completeness. Exhausted means available pagination ended, not that hidden comments or replies were collected. Scope conclusions to returned comments.

Full history: https://api.protogrid.dev/v1/servers/io.github.solo-novato%2Ffetchfox/changes

## Remotes

- https://mcp.fetchfox.net/mcp (streamable-http, auth api_key ${api_key}, reachable true, uptime30d 1)

## Packages

_none_

## Tools (10)

- `facebook_comments`: List comments on a Facebook post or video.
- `instagram_channel_posts`: List recent posts from an Instagram profile URL.
- `instagram_channel_reels`: List recent reels from an Instagram profile URL.
- `instagram_channel_stats`: Get channel-level stats for an Instagram profile (user ID, followers, following, post count, bio, verified).
- `instagram_comments`: List comments on an Instagram post or reel. Check collectionStatus (partial, exhausted, unknown) and stopReason before analysis. hasMore only means a safe cursor is available; false does not prove completeness. Exhausted means available pagination ended, not that hidden comments or replies were collected. Scope conclusions to returned comments.
- `instagram_stats`: Get metadata and a video CDN URL for an Instagram post or reel. Views are optional (null when unavailable); requireViews=true enables strict count recovery. Shares are null when not exposed; unavailable duration is null. Never treat null as zero.
- `tiktok_channel_videos`: Get a list of recent videos from a TikTok channel. Returns up to 100 videos with metadata (id, description, URL, thumbnail, duration, publish date, views, likes, comments, shares, saves). Supports pagination via the cursor field.
- `tiktok_search`: Search TikTok videos by query.
- `tiktok_stats`: Get engagement stats for a single TikTok video (views, likes, comments, shares, publish date, author).
- `youtube_transcript`: Get the transcript (captions) of a YouTube video. Returns the full text plus per-segment timings.
