framefetch

Any social-video URL → transcript, metadata, frames, OCR, summary, search, Q&A. MCP server + x402.

사용해야 할까요

품질 및 안전성

B
설명 품질
100%
스키마 완전성
64%
이름 품질
75%
오염 위험
40%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (5)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains suspicious base64-like encoded stringframefetch_extract에서
  • MEDIUMTool description contains URL to non-standard domainframefetch_extract에서
  • MEDIUMTool description contains suspicious base64-like encoded stringframefetch_search에서
  • LOWTool 'framefetch_platform_capabilities' name length outside 3-30 rangeframefetch_platform_capabilities에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~1,396토큰 (도구 정의)
~2.6 KB일반적인 응답 크기
중간 정도의 주의 영향 (128k 컨텍스트의 1.09%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "framefetch": {
      "url": "https://framefetch.net/mcp"
    }
  }
}

원격 엔드포인트

https://framefetch.net/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (4)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢framefetch_extract(url, fields, frames, translate, subtitle_format, ...)

Extract data from ONE public social-video URL (YouTube incl. Shorts, TikTok, Instagram Reels, Pinterest, Reddit): metadata/insights/transcript/frames/digest/comments/etc — see `fields`. When NOT to use: non-video pages, private/login-walled content, or bulk crawling (one URL per call). Returns one JSON object with only the requested fields + a `cost` block (micro-USD); shapes: https://framefetch.net/docs. Cost scales with what you request (frames/transcript cost more than metadata). No key? POST /v1/keys {email} -> instant key (~100 free calls); or x402 (USDC), no account. Example: {"url":"https://www.youtube.com/watch?v=...","fields":["metadata","transcript"]}.

입력 스키마

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Public video URL from a supported platform."
    },
    "fields": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "metadata",
          "insights",
          "transcript",
          "frames",
          "text_overlay",
          "digest",
          "audio_digest",
          "structured",
          "comments",
          "comment_sentiment",
          "delta"
        ]
      },
      "description": "Which data to return; default [\"metadata\"]. Pulls: digest→transcript; audio_digest→digest→transcript; structured→transcript; comment_sentiment→comments. digest/audio_digest/structured/comment_sentiment: degrade to a warning, never charged, on failure. digest: gist+topics via LLM. audio_digest: mp3 of digest (signed URL, 24h); voice via `voice`; +`translate` for other-language audio. structured: chapters/entities/products_shown/claims/key_moments via vision LLM. comments: up to comments_cap; YouTube only (else warning; see GET /v1/platforms). comment_sentiment: aggregated audience sentiment (positive_pct/neutral_pct/negative_pct/summary/top_themes); needs >=5 comments; same YouTube-only limit. text_overlay: OCR per frame; requires \"frames\"; skipped above 200 frames. delta: velocity vs the previous fetch; first call seeds the baseline. Docs: https://framefetch.net/docs."
    },
    "frames": {
      "type": "object",
      "description": "Frame-sampling spec; required when \"frames\" or \"text_overlay\" is requested.",
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "all",
            "every_n",
            "fps",
            "range"
          ]
        },
        "n": {
          "type": "number",
          "description": "every_n: take every Nth source frame"
        },
        "fps": {
          "type": "number",
          "description": "fps/range: frames per second (max 60)"
        },
        "from": {
          "type": "number",
          "description": "range: start second"
        },
        "to": {
          "type": "number",
          "description": "range: end second"
        },
        "format": {
          "type": "string",
          "enum": [
            "jpg",
            "png",
            "webp"
          ]
        },
        "width": {
          "type": "number",
          "description": "downscale width in px (16–7680)"
        }
      },
      "required": [
        "mode"
      ]
    },
    "translate": {
      "type": "string",
      "description": "ISO-639-1 target language (e.g. \"es\"); adds `transcript_translated` (timings kept). Requires \"transcript\" (or \"digest\"). Billed per audio-minute."
    },
    "subtitle_format": {
      "type": "string",
      "enum": [
        "srt",
        "vtt"
      ],
      "description": "Renders transcript as subtitles in `subtitles` (srt/vtt). Requires \"transcript\" (or \"digest\"); uses translated cues if \"translate\" set."
    },
    "voice": {
      "type": "string",
      "enum": [
        "alloy",
        "echo",
        "fable",
        "onyx",
        "nova",
        "shimmer",
        "Fritz-PlayAI"
      ],
      "description": "Voice for \"audio_digest\": OpenAI voices (alloy/echo/fable/onyx/nova/shimmer) + Groq \"Fritz-PlayAI\"; default \"alloy\"."
    },
    "comments_cap": {
      "type": "integer",
      "minimum": 1,
      "maximum": 200,
      "description": "Max top-level comments (1-200, default 30); only used with \"comments\"."
    },
    "ask": {
      "type": "string",
      "minLength": 3,
      "maxLength": 500,
      "description": "Question about the video (3-500 chars); <=500-token answer w/ timestamped quotes, grounded in the transcript (auto-pulled). Never cached; degrades (never charged) if unavailable. Long videos: answer draws on a relevance-selected/sampled subset, not just the head — see response `ask.coverage`. No transcript (e.g. Pinterest): falls back to frames, `based_on`:[\"frames\"]."
    },
    "cache": {
      "type": "boolean",
      "description": "false forces a fresh, billed extract."
    }
  },
  "required": [
    "url"
  ]
}
🟢framefetch_platform_capabilities

JSON matrix of data types (metadata, insights, transcript, frames, comments) per platform — YouTube (+Shorts), TikTok, Instagram Reels, Pinterest, Reddit. Call before framefetch_extract to confirm support. No input.

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟢framefetch_search(query, limit, platform, cache)

Search YouTube by keyword (yt-dlp, no login). Returns up to `limit` hits: url/title/uploader/durationSec/uploadDate(often null)/thumbnail/views. YouTube only — use framefetch_extract on a hit's url for transcript/frames/etc. Billed ~$0.002/call (metadata-tier), regardless of `limit`.

입력 스키마

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "2-200 chars."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25,
      "description": "Default 10."
    },
    "platform": {
      "type": "string",
      "enum": [
        "youtube"
      ]
    },
    "cache": {
      "type": "boolean",
      "description": "false = fresh, billed search."
    }
  },
  "required": [
    "query"
  ]
}
🟢framefetch_account

Check this account's credit balance/usage. Read-only — never charges; works at zero balance (unlike framefetch_extract). Purpose: check balance before expensive framefetch_extract calls — at session start, periodically, or after a 402. When NOT to use: before every single framefetch_extract call in a tight loop. Returns: balance_micros, spend_7d_micros, calls_7d — micro-USD (1,000,000 = $1). Low balance: top up via x402 (USDC) at POST /v1/topup, or card at POST /v1/checkout.

입력 스키마

{
  "type": "object",
  "properties": {}
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 4개
검증됨버전이 기록되지 않음도구 4개
검증됨버전이 기록되지 않음도구 4개