shotkit

Screenshot any URL, HTML or Markdown in a real browser, and read web pages as Markdown.

사용해야 할까요

품질 및 안전성

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

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

컨텍스트 비용

~3,199토큰 (도구 정의)
~19.9 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.50%)

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

설치

원클릭 설치

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

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

원격 엔드포인트

https://shotkit.net/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (2)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢screenshot(url, html, markdown, format, selector, ...)

Render a URL, raw HTML or Markdown in a real Chrome and capture it as an image (returned inline), PDF, GIF or video (returned as a link). Set block_cookie_banners and block_ads for a clean capture. For a full_page capture to read, keep it small with image_width (e.g. 1024) and format jpg.

입력 스키마

{
  "type": "object",
  "properties": {
    "url": {
      "description": "URL of the site to screenshot.",
      "type": "string"
    },
    "html": {
      "description": "HTML to render instead of a URL.",
      "type": "string"
    },
    "markdown": {
      "description": "Markdown to render instead of a URL.",
      "type": "string"
    },
    "format": {
      "description": "Output format. jpg, png and webp come back as an image; other formats as a link. Default: jpg.",
      "type": "string",
      "enum": [
        "jpg",
        "png",
        "webp",
        "avif",
        "gif",
        "tiff",
        "pdf",
        "mp4",
        "webm"
      ]
    },
    "selector": {
      "description": "CSS selector of the element to capture.",
      "type": "string"
    },
    "selector_scroll_into_view": {
      "description": "Scroll to the element to trigger lazy content. Default: true.",
      "type": "boolean"
    },
    "capture_beyond_viewport": {
      "description": "Capture parts outside the viewport (full page / selector).",
      "type": "boolean"
    },
    "scroll_into_view": {
      "description": "Scroll this selector to the top before capture.",
      "type": "string"
    },
    "scroll_into_view_adjust_top": {
      "description": "Pixel offset after scroll_into_view. Default: 0.",
      "type": "number"
    },
    "include_shadow_dom": {
      "description": "Include shadow roots in html/markdown output. Default: false.",
      "type": "boolean"
    },
    "viewport_device": {
      "description": "Emulate a device preset (sets size, DPR, UA, touch). E.g. ipad_pro, iphone_15_pro. All ids: https://shotkit.net/docs/options/viewport#viewport_device.",
      "type": "string"
    },
    "viewport_width": {
      "description": "Viewport width in px. Default: 1280.",
      "type": "number",
      "minimum": 1,
      "maximum": 7680
    },
    "viewport_height": {
      "description": "Viewport height in px. Default: 1024.",
      "type": "number",
      "minimum": 1,
      "maximum": 7680
    },
    "device_scale_factor": {
      "description": "Device pixel ratio (1–5). Animated formats record at 1×. Default: 1.",
      "type": "number",
      "minimum": 1,
      "maximum": 5
    },
    "viewport_mobile": {
      "description": "Respect the meta viewport tag. Default: false.",
      "type": "boolean"
    },
    "viewport_has_touch": {
      "description": "Enable touch events. Default: false.",
      "type": "boolean"
    },
    "viewport_landscape": {
      "description": "Landscape orientation. Default: false.",
      "type": "boolean"
    },
    "image_quality": {
      "description": "Quality for lossy formats and video (0–100). Default: 80.",
      "type": "number",
      "minimum": 0,
      "maximum": 100
    },
    "image_width": {
      "description": "Resize output to fit this width (keeps ratio).",
      "type": "number",
      "minimum": 1,
      "maximum": 16000
    },
    "image_height": {
      "description": "Resize output to fit this height (keeps ratio).",
      "type": "number",
      "minimum": 1,
      "maximum": 16000
    },
    "omit_background": {
      "description": "Transparent background (PNG only). Default: false.",
      "type": "boolean"
    },
    "full_page": {
      "description": "Capture the full scrollable page. Default: false.",
      "type": "boolean"
    },
    "full_page_scroll": {
      "description": "Scroll to bottom first to load lazy images (auto with full_page).",
      "type": "boolean"
    },
    "full_page_scroll_delay": {
      "description": "Delay between scroll steps (ms). Default: 400.",
      "type": "number",
      "minimum": 0,
      "maximum": 5000
    },
    "full_page_scroll_by": {
      "description": "Pixels per scroll step (default: viewport height).",
      "type": "number",
      "minimum": 50
    },
    "full_page_max_height": {
      "description": "Cap the full-page height (px).",
      "type": "number",
      "minimum": 1
    },
    "clip_x": {
      "description": "Clip area X.",
      "type": "number",
      "minimum": 0
    },
    "clip_y": {
      "description": "Clip area Y.",
      "type": "number",
      "minimum": 0
    },
    "clip_width": {
      "description": "Clip area width.",
      "type": "number",
      "minimum": 1
    },
    "clip_height": {
      "description": "Clip area height.",
      "type": "number",
      "minimum": 1
    },
    "pdf_print_background": {
      "description": "Print background graphics. Default: false.",
      "type": "boolean"
    },
    "pdf_fit_one_page": {
      "description": "Fit the whole page on one PDF page. Default: false.",
      "type": "boolean"
    },
    "pdf_landscape": {
      "description": "Landscape orientation. Default: false.",
      "type": "boolean"
    },
    "pdf_paper_format": {
      "description": "Paper size. Default: letter.",
      "type": "string",
      "enum": [
        "a0",
        "a1",
        "a2",
        "a3",
        "a4",
        "a5",
        "a6",
        "legal",
        "letter",
        "tabloid"
      ]
    },
    "pdf_margin": {
      "description": "Margin for all sides (e.g. 20px, 1cm).",
      "type": "string"
    },
    "pdf_margin_top": {
      "description": "Top margin override.",
      "type": "string"
    },
    "pdf_margin_right": {
      "description": "Right margin override.",
      "type": "string"
    },
    "pdf_margin_bottom": {
      "description": "Bottom margin override.",
      "type": "string"
    },
    "pdf_margin_left": {
      "description": "Left margin override.",
      "type": "string"
    },
    "animation_duration": {
      "description": "Seconds to record. With format=webp, records an animated WebP. Default: 3.",
      "type": "number",
      "minimum": 0.5,
      "maximum": 20
    },
    "animation_fps": {
      "description": "Frames per second (default: 10 for gif/webp, 30 for video).",
      "type": "number",
      "minimum": 1,
      "maximum": 30
    },
    "animation_scroll": {
      "description": "Scroll smoothly from the current position to the bottom while recording. Default: false.",
      "type": "boolean"
    },
    "dark_mode": {
      "description": "Emulate prefers-color-scheme: dark. Otherwise pages render in light mode.",
      "type": "boolean"
    },
    "reduce_motion": {
      "description": "Actively finish/pause animations and videos. Default: false.",
      "type": "boolean"
    },
    "reduced_motion": {
      "description": "Emulate prefers-reduced-motion: reduce.",
      "type": "boolean"
    },
    "media_type": {
      "description": "CSS media type.",
      "type": "string",
      "enum": [
        "screen",
        "print"
      ]
    },
    "hide_selectors": {
      "description": "Hide every element matching each selector.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "styles": {
      "description": "CSS injected before capture.",
      "type": "string"
    },
    "scripts": {
      "description": "JavaScript executed before capture.",
      "type": "string"
    },
    "scripts_wait_until": {
      "description": "Wait for these events after scripts run.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "load",
          "domcontentloaded",
          "networkidle0",
          "networkidle2"
        ]
      }
    },
    "click": {
      "description": "Click this selector before capture.",
      "type": "string"
    },
    "hover": {
      "description": "Hover this selector before capture.",
      "type": "string"
    },
    "error_on_click_selector_not_found": {
      "description": "Fail if the click target is missing. Default: true.",
      "type": "boolean"
    },
    "error_on_hover_selector_not_found": {
      "description": "Fail if the hover target is missing. Default: true.",
      "type": "boolean"
    },
    "block_cookie_banners": {
      "description": "Hide cookie / GDPR banners. Default: false.",
      "type": "boolean"
    },
    "block_banners_by_heuristics": {
      "description": "Aggressive heuristic banner removal. Default: false.",
      "type": "boolean"
    },
    "block_chats": {
      "description": "Hide chat widgets (Intercom, Crisp, Drift…). Default: false.",
      "type": "boolean"
    },
    "block_ads": {
      "description": "Block ad networks. Default: false.",
      "type": "boolean"
    },
    "block_trackers": {
      "description": "Block analytics / trackers. Default: false.",
      "type": "boolean"
    },
    "block_requests": {
      "description": "Block requests matching wildcard patterns.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "block_resources": {
      "description": "Block resource types.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "document",
          "stylesheet",
          "image",
          "media",
          "font",
          "script",
          "texttrack",
          "xhr",
          "fetch",
          "eventsource",
          "websocket",
          "manifest",
          "other"
        ]
      }
    },
    "wait_until": {
      "description": "Navigation events to wait for. Default: load.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "load",
          "domcontentloaded",
          "networkidle0",
          "networkidle2"
        ]
      }
    },
    "delay": {
      "description": "Extra seconds to wait before capture. Default: 0.",
      "type": "number",
      "minimum": 0,
      "maximum": 30
    },
    "timeout": {
      "description": "Total request timeout (s). Up to 90, or 600 with async (render time only). Default: 60.",
      "type": "number",
      "minimum": 5,
      "maximum": 600
    },
    "navigation_timeout": {
      "description": "Navigation timeout (s). Default: 30.",
      "type": "number",
      "minimum": 1,
      "maximum": 30
    },
    "wait_for_selector": {
      "description": "Wait for this selector to appear.",
      "type": "string"
    },
    "wait_for_selector_algorithm": {
      "description": "How comma-separated selectors are matched. Default: at_least_one.",
      "type": "string",
      "enum": [
        "at_least_one",
        "at_least_by_count"
      ]
    },
    "user_agent": {
      "description": "Custom User-Agent.",
      "type": "string"
    },
    "authorization": {
      "description": "Authorization header for the target.",
      "type": "string"
    },
    "headers": {
      "description": "Extra headers, one per line.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "cookies": {
      "description": "Cookies, one per line.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "time_zone": {
      "description": "Browser time zone.",
      "type": "string",
      "enum": [
        "America/Chicago",
        "America/Denver",
        "America/Los_Angeles",
        "America/Mexico_City",
        "America/New_York",
        "America/Santiago",
        "America/Toronto",
        "America/Vancouver",
        "Asia/Kuala_Lumpur",
        "Asia/Shanghai",
        "Asia/Tashkent",
        "Asia/Tokyo",
        "Europe/Berlin",
        "Europe/Bucharest",
        "Europe/Kyiv",
        "Europe/Lisbon",
        "Europe/London",
        "Europe/Madrid",
        "Europe/Paris",
        "Pacific/Auckland",
        "UTC"
      ]
    },
    "proxy": {
      "description": "Your HTTP proxy (http://user:pass@host:port).",
      "type": "string"
    },
    "bypass_csp": {
      "description": "Bypass Content-Security-Policy. Default: false.",
      "type": "boolean"
    },
    "geolocation_latitude": {
      "description": "Latitude.",
      "type": "number",
      "minimum": -90,
      "maximum": 90
    },
    "geolocation_longitude": {
      "description": "Longitude.",
      "type": "number",
      "minimum": -180,
      "maximum": 180
    },
    "geolocation_accuracy": {
      "description": "Accuracy in meters.",
      "type": "number",
      "minimum": 0
    },
    "cache": {
      "description": "Cache the result and return a CDN URL. Default: false.",
      "type": "boolean"
    },
    "cache_ttl": {
      "description": "Cache lifetime in seconds. Default: 14400.",
      "type": "number",
      "minimum": 14400,
      "maximum": 2592000
    },
    "cache_key": {
      "description": "Distinguish otherwise identical cached renders.",
      "type": "string"
    },
    "metadata_image_size": {
      "description": "Return image width/height. Default: false.",
      "type": "boolean"
    },
    "metadata_page_title": {
      "description": "Return the page title. Default: false.",
      "type": "boolean"
    },
    "metadata_icon": {
      "description": "Return the favicon URL. Default: false.",
      "type": "boolean"
    },
    "metadata_open_graph": {
      "description": "Return Open Graph tags. Default: false.",
      "type": "boolean"
    },
    "metadata_fonts": {
      "description": "Return fonts used by the page. Default: false.",
      "type": "boolean"
    },
    "metadata_content": {
      "description": "Also store page content and return its URL. Default: false.",
      "type": "boolean"
    },
    "metadata_content_format": {
      "description": "Content format. Default: html.",
      "type": "string",
      "enum": [
        "html",
        "markdown"
      ]
    },
    "metadata_http_response_status_code": {
      "description": "Return the target's HTTP status. Default: false.",
      "type": "boolean"
    },
    "metadata_http_response_headers": {
      "description": "Return the target's HTTP headers. Default: false.",
      "type": "boolean"
    },
    "ignore_host_errors": {
      "description": "Capture even if the site returns 4xx/5xx. Default: false.",
      "type": "boolean"
    },
    "error_on_selector_not_found": {
      "description": "Fail if selector / scroll_into_view is missing. Default: false.",
      "type": "boolean"
    },
    "fail_if_request_failed": {
      "description": "Fail if a matching sub-request fails.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "fail_if_content_missing": {
      "description": "Fail if this text is missing (case-insensitive).",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "fail_if_content_contains": {
      "description": "Fail if this text is present (case-insensitive).",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢page_to_markdown(url, html, selector, include_shadow_dom, block_cookie_banners, ...)

Load a URL in a real browser (JavaScript runs) and return its content as Markdown, without scripts and styles. Use selector (e.g. main, article) to keep only the part that matters and save tokens.

입력 스키마

{
  "type": "object",
  "properties": {
    "url": {
      "description": "URL of the site to screenshot.",
      "type": "string"
    },
    "html": {
      "description": "HTML to render instead of a URL.",
      "type": "string"
    },
    "selector": {
      "description": "CSS selector of the element to capture.",
      "type": "string"
    },
    "include_shadow_dom": {
      "description": "Include shadow roots in html/markdown output. Default: false.",
      "type": "boolean"
    },
    "block_cookie_banners": {
      "description": "Hide cookie / GDPR banners. Default: false.",
      "type": "boolean"
    },
    "block_banners_by_heuristics": {
      "description": "Aggressive heuristic banner removal. Default: false.",
      "type": "boolean"
    },
    "block_chats": {
      "description": "Hide chat widgets (Intercom, Crisp, Drift…). Default: false.",
      "type": "boolean"
    },
    "click": {
      "description": "Click this selector before capture.",
      "type": "string"
    },
    "scripts": {
      "description": "JavaScript executed before capture.",
      "type": "string"
    },
    "wait_until": {
      "description": "Navigation events to wait for. Default: load.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "load",
          "domcontentloaded",
          "networkidle0",
          "networkidle2"
        ]
      }
    },
    "wait_for_selector": {
      "description": "Wait for this selector to appear.",
      "type": "string"
    },
    "delay": {
      "description": "Extra seconds to wait before capture. Default: 0.",
      "type": "number",
      "minimum": 0,
      "maximum": 30
    },
    "timeout": {
      "description": "Total request timeout (s). Up to 90, or 600 with async (render time only). Default: 60.",
      "type": "number",
      "minimum": 5,
      "maximum": 600
    },
    "navigation_timeout": {
      "description": "Navigation timeout (s). Default: 30.",
      "type": "number",
      "minimum": 1,
      "maximum": 30
    },
    "user_agent": {
      "description": "Custom User-Agent.",
      "type": "string"
    },
    "authorization": {
      "description": "Authorization header for the target.",
      "type": "string"
    },
    "headers": {
      "description": "Extra headers, one per line.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "cookies": {
      "description": "Cookies, one per line.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "time_zone": {
      "description": "Browser time zone.",
      "type": "string",
      "enum": [
        "America/Chicago",
        "America/Denver",
        "America/Los_Angeles",
        "America/Mexico_City",
        "America/New_York",
        "America/Santiago",
        "America/Toronto",
        "America/Vancouver",
        "Asia/Kuala_Lumpur",
        "Asia/Shanghai",
        "Asia/Tashkent",
        "Asia/Tokyo",
        "Europe/Berlin",
        "Europe/Bucharest",
        "Europe/Kyiv",
        "Europe/Lisbon",
        "Europe/London",
        "Europe/Madrid",
        "Europe/Paris",
        "Pacific/Auckland",
        "UTC"
      ]
    },
    "proxy": {
      "description": "Your HTTP proxy (http://user:pass@host:port).",
      "type": "string"
    },
    "ignore_host_errors": {
      "description": "Capture even if the site returns 4xx/5xx. Default: false.",
      "type": "boolean"
    },
    "cache": {
      "description": "Cache the result and return a CDN URL. Default: false.",
      "type": "boolean"
    },
    "cache_ttl": {
      "description": "Cache lifetime in seconds. Default: 14400.",
      "type": "number",
      "minimum": 14400,
      "maximum": 2592000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

커뮤니티

이 서버 평가하기

증거

최근 관측

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