screenshotfreeapi
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@screenshotfreeapiTake a screenshot of https://example.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
screenshotfreeapi-mcp
MCP server for ScreenshotFreeAPI — capture websites, render HTML/PDF, and fetch app store listing screenshots from any MCP-compatible AI client (Claude Desktop, Cursor, VS Code Copilot, Cline, Windsurf, etc.).
Setup
Get an API key from your ScreenshotFreeAPI dashboard, then add this server to your MCP client's config.
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"screenshotfreeapi": {
"command": "npx",
"args": ["-y", "screenshotfreeapi-mcp"],
"env": {
"SCREENSHOTFREEAPI_KEY": "sfa_your_api_key_here"
}
}
}
}Other MCP clients (Cursor, Cline, Windsurf) use the same command/args/env shape in their own config file — consult your client's docs for the config file location.
Related MCP server: PuppeteerMCP Server
Environment variables
Variable | Required | Description |
| Yes | Your API key ( |
| No | Override the API base URL. Defaults to |
Tools
Tool | Description |
| Capture a website screenshot (PNG/JPEG/WebP/PDF), with AI element targeting, full-page, custom viewport, and ad-block options. |
| Capture app store listing screenshots (iOS/Android) by app name or bundle ID. |
| Render raw HTML/CSS to an image or PDF. |
| Poll the status of a screenshot job. |
| Fetch the result (URLs + metadata) of a completed job. |
| List recent jobs for the authenticated account. |
| Check remaining screenshot quota and current plan. |
All capture tools are asynchronous: they enqueue a job and return a jobId. Use get_job_status to poll, then get_job_result once status is completed.
Local development
npm install
npm run dev # run directly with tsx
npm run build # compile to dist/ for npx/publish
npm run typecheckLicense
MIT
Available Tools
7 toolscheck_quotaA
Check the remaining screenshot quota and current plan for the authenticated API key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, but description accurately describes a read-only operation. No hidden behaviors disclosed, but tool is simple enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, directly to the point, no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple with no output schema; description sufficiently communicates purpose. Could hint at return shape but not necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so description adds no param info. Baseline 4 for no params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it checks remaining screenshot quota and current plan, specific verb+resource. No sibling tool does the same, so differentiation is not needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage when needing to know quota/plan before taking screenshots. No explicit when-not or alternatives, but context with sibling tools makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_job_resultA
Retrieve the screenshot URLs and metadata for a completed job. Returns presigned URLs (15-minute TTL). Returns an error if the job is still in progress.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | The job ID of a completed screenshot job. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the presigned URLs and 15-minute TTL, and that it errors on in-progress jobs. It does not explicitly state read-only or idempotent, but the retrieval nature is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste. The first sentence states the main purpose, and the second adds two key behavioral constraints (TTL and error condition).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers return type (URLs and metadata), a critical constraint (TTL), and error behavior. Minor omission: could mention that the URLs are temporary and must be used promptly, but still solid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes jobId as 'completed screenshot job'. The tool description adds value by noting the output includes presigned URLs with a 15-minute TTL and an error condition, enhancing the parameter's practical context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'retrieve' and specific resource 'screenshot URLs and metadata for a completed job'. It distinguishes from sibling tools like get_job_status (which likely returns status only) and list_jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that the tool is for completed jobs and will error if the job is still in progress, implying when to use it. It does not explicitly name alternatives, but the sibling list provides context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_job_statusA
Poll the current status and progress of a screenshot job. Status values: queued → processing → completed | failed.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | The job ID returned when a screenshot was enqueued. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses polling behavior and status progression; no annotations so description handles transparency, but could mention polling frequency or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and status values, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple polling tool; missing return format but agent can infer status string.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; description adds no new meaning beyond the schema's definition of jobId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool polls status and progress of a screenshot job, distinguishing it from siblings like get_job_result and list_jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage after enqueuing a job, but lacks explicit when-to-use or when-not-to-use guidance and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_jobsA
List recent screenshot jobs for the authenticated API key. Filter by status or type.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by job status. | |
| type | No | Filter by job type. | |
| limit | No | Number of jobs to return (max 100). Defaults to 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It states 'list' (read operation) and 'for the authenticated API key' (auth implied). However, it does not explicitly state that the tool is read-only, mention rate limits, or describe side effects. For a listing tool, this is adequate but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences, 12 words—and front-loaded with the verb 'List'. Every word earns its place. No unnecessary information or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 optional parameters, no output schema, and no annotations, the description provides the basic purpose but lacks details about the return format, pagination behavior, or default ordering. It mentions filtering but not the limit defaults. Completeness is adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for all three parameters. The description mentions filtering by status or type, which corresponds to the status and type parameters, but adds no additional meaning or syntax details beyond what the schema provides. The limit parameter is not mentioned in the description. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists recent screenshot jobs for the authenticated API key, with filtering by status or type. The verb 'list' and resource 'screenshot jobs' are specific. However, it does not explicitly differentiate from siblings like get_job_result or get_job_status, though the intent is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (listing jobs with optional filters) but provides no explicit guidance on when not to use it or which sibling alternatives (e.g., get_job_result for a single job) are more appropriate. The usage context is clear but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_htmlA
Render a raw HTML string (email template, certificate, report card, etc.) to a screenshot image. Requires STARTER plan.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | Full HTML document or fragment to render. External resources (CDN fonts, images) will load normally. | |
| css | No | Additional CSS to inject into the page. | |
| format | No | Output format. | png |
| dimensions | No | Viewport dimensions. Defaults to 1280x720. | |
| waitForResult | No | If true (default), waits for completion and returns the screenshot URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It explains that external resources (CDN fonts, images) load normally, and mentions the waitForResult parameter's default behavior. It does not detail error handling or exact return format, but it adequately covers key aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences with no extraneous information. It is front-loaded with the core purpose and includes a critical prerequisite, making it efficient for an AI agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, nested object, enum, no output schema), the description covers the primary action, prerequisites, and a key behavior (external resource loading). It lacks explicit mention of return format (URL vs base64) but the schema's waitForResult description hints at it. Overall, it is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds minimal value beyond the schema definitions; it does not provide additional context or usage examples for parameters. The tool logic is clear from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Render a raw HTML string... to a screenshot image.' It specifies common use cases (email template, certificate, report card) and distinguishes itself from sibling tools like screenshot_web (URL-based) and screenshot_mobile (mobile emulation) by focusing on raw HTML input.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a prerequisite ('Requires STARTER plan') and implies when to use this tool over siblings (when you have raw HTML vs URL). However, it does not explicitly state when not to use it or provide direct comparisons to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshot_mobileA
Fetch app store listing screenshots for any iOS or Android app by name or bundle/package ID. Returns screenshots from Google Play and/or the Apple App Store along with rich metadata (version, rating, reviews, category).
| Name | Required | Description | Default |
|---|---|---|---|
| appName | No | App name to search for, e.g. "Instagram" or "Spotify". Either appName or bundleId is required. | |
| bundleId | No | Direct app identifier: Android package name (com.instagram.android) or iOS App Store ID (389801252). | |
| platform | No | Which store(s) to fetch from. Defaults to both. | both |
| waitForResult | No | If true (default), waits for the job to complete before returning. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It mentions return content (screenshots, metadata) but does not disclose behavioral traits such as rate limits, authentication requirements, or whether it is read-only. The description gives moderate insight but lacks full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences cover the action, parameters, and return information without any fluff. Every sentence serves a purpose, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains return values (screenshots and metadata) adequately for a tool with no output schema. Parameters are well-documented in the schema. It lacks some behavioral context (e.g., waiting behavior) but is otherwise complete for a fetching tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds little beyond the schema, only rephrasing that parameters allow search by name or bundle ID. No additional meaning or usage details are provided for individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches app store listing screenshots for iOS or Android apps by name or bundle/package ID. It distinguishes from sibling tools like screenshot_web (web screenshots) by specifying the resource as app store listings. The verb 'Fetch' and resource are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for mobile app screenshots but does not explicitly compare to alternatives like screenshot_web or state when not to use this tool. No exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshot_webA
Capture a screenshot of any public website URL. Supports AI-targeted sections, full-page capture, PDF export, and custom viewport dimensions. Returns a presigned URL to the screenshot image.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to screenshot. Must be http:// or https://. Private IPs are blocked. | |
| description | No | Describe the part of the page to capture in plain English, e.g. "the pricing table" or "the hero section". Triggers AI targeting. | |
| element | No | CSS selector for a specific element to screenshot, e.g. ".pricing-table" or "#hero". | |
| format | No | Output format. Use pdf for printable documents. | png |
| fullPage | No | Capture the full scrollable page height, not just the visible viewport. | |
| dimensions | No | Custom viewport dimensions. Defaults to 1280x720. | |
| blockAds | No | Block ad networks and trackers before rendering. Requires STARTER plan. | |
| waitForResult | No | If true (default), waits for the job to complete and returns the screenshot URL. If false, returns the jobId immediately. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the primary behavior (capturing screenshots, returning presigned URLs) and mentions features like AI targeting and PDF export. However, it does not mention constraints like private IP blocking (present in schema) or potential rate limits. With no annotations, the description provides moderate but incomplete transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: first states the main purpose, second lists key features. It is concise, front-loaded, and contains no extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, no output schema), the description covers the essential use cases and return type. It omits details like default viewport (in schema) and job retrieval (in schema), but overall provides enough context for an agent to understand the tool's capabilities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description reinforces parameter meanings (e.g., 'AI-targeted sections' for 'description', 'full-page' for 'fullPage') but adds little new semantic value beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Capture' and the resource 'screenshot of any public website URL', and lists distinct features (AI-targeted sections, full-page, PDF, custom viewport) that differentiate it from sibling tools like screenshot_mobile and render_html.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for public websites but does not explicitly state when to use this tool over alternatives or provide exclusions. It lacks guidance on when not to use it (e.g., for private/internal sites or when a mobile-specific viewport is needed).
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.
7 tool updates
v1.0.0- First observed
check_quota - First observed
get_job_result - First observed
get_job_status - First observed
list_jobs - First observed
render_html - First observed
screenshot_mobile - First observed
screenshot_web
TDQS
Scored across 7 tools
Each tool targets a distinct aspect of the screenshot service: quota checking, job management (listing, status, results), and three distinct screenshot sources (web, mobile, HTML). No two tools have overlapping functionality.
Tool names generally follow a verb_noun pattern (check_quota, get_job_result, get_job_status, list_jobs, render_html), but screenshot_mobile and screenshot_web use a noun-verb style. This minor inconsistency reduces the score slightly.
With 7 tools, the server is well-scoped for its purpose: it covers screenshot generation from multiple sources, job tracking, and quota checking without unnecessary clutter.
The tool surface covers the core screenshot workflow (create, track, retrieve) and multiple input types. Minor gaps include no way to cancel/delete jobs or manage API keys, but these are not critical for basic usage.
Maintenance
Related MCP Connectors
Screenshot and HTML render MCP server for AI agents
MCP server for Qwen Image 3 AI image generation
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
An MCP server that gives any LLM or agent clean YouTube transcripts on demand: a single video, a whole channel, or a playlist, plus AI cleanup of auto-generated captions. API-key auth, credit-based, same backend as the public v1 API. Get a free API key with 25 free credits at youtubetranscriptdownload.com/account.
Related MCP Servers
- AlicenseBqualityBmaintenanceAn official MCP server implementation that allows AI assistants to capture website screenshots through the ScreenshotOne API, enabling visual context from web pages during conversations.115 npm36MIT
- AlicenseBqualityDmaintenanceAn MCP server that enables AI assistants to capture and analyze web page screenshots using Puppeteer, supporting multi-breakpoint captures, error reporting, and page interactions.137 npm6MIT
- AlicenseBqualityBmaintenanceAn MCP server that enables capturing website screenshots with full-page, element-specific, and device-responsive capabilities through natural language commands.316 npm61MIT
- FlicenseNot gradedqualityDmaintenanceScreenshot & Render API for AI Agents. MCP Server lets Claude, Cursor capture webpages and render HTML. Direct access, no VPN needed.-