Skip to main content
Glama

ottersnap-mcp

MCP (Model Context Protocol) server for the OtterSnap rendering API — give Claude, Cursor, Codex and other AI agents eyes on any web page: pixel-perfect screenshots, print-ready PDFs and branded OG images from natural language.

Quick start

Get a free API key at ottersnap.com/#getkey (100 renders/month, no credit card), then add to your MCP client config:

{
  "mcpServers": {
    "ottersnap": {
      "command": "npx",
      "args": ["-y", "ottersnap-mcp"],
      "env": {
        "OTTERSNAP_API_KEY": "otter_live_your_key_here"
      }
    }
  }
}

Or install globally:

npm install -g ottersnap-mcp
export OTTERSNAP_API_KEY=otter_live_your_key_here
ottersnap-mcp

Related MCP server: Renderly MCP

Tools

Tool

What it does

render_screenshot

Renders any URL and returns the image visually — the agent can actually read the page. Supports full-page, retina 2×, dark mode, element hiding, cookie-banner blocking, iPhone/iPad/Android presets.

render_pdf

URL or raw HTML → print-ready PDF (A4/Letter/Legal, landscape, margins, header/footer with page numbers).

create_og_image

Branded 1200×630 social card, returned visually. Seven themes.

extract_page

URL → structured JSON (title, description, headings, links, images, word count) or clean Markdown — built for RAG and agent pipelines.

ai_extract

URL + natural-language prompt → structured JSON extracted by LLM.

code_image

Code snippet → macOS-window syntax-highlighted PNG.

check_usage

Remaining renders for the configured key.

Example prompts

  • "Screenshot github.com/trending and tell me which repos mention Rust"

  • "Take a dark-mode full-page capture of my landing page and check the footer renders"

  • "Extract every heading and link from https://example.com/docs as markdown"

  • "Scrape the product name, price and rating from this URL into JSON"

  • "Make an OG image for my blog post titled 'Shipping fast with Redis'"

  • "Show this Python function as a pretty code card"

  • "How many OtterSnap renders do I have left?"

Environment

Var

Required

Description

OTTERSNAP_API_KEY

yes

Your API key (get one free)

OTTERSNAP_API_URL

no

Override for self-hosting / testing

License

MIT

Available Tools

7 tools
ai_extractA

Extract structured data from a web page using natural language. Give a URL, describe what you want (e.g. 'all product names and prices'), receive JSON. Powered by an LLM reading the rendered page.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoThe page to read
htmlNoRaw HTML to read instead of a URL
promptYesNatural language describing what to extract and the JSON shape you want

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the behavioral disclosure burden. It usefully reveals that an LLM reads the rendered page and returns JSON, but it does not mention failure modes, latency, cost, nondeterminism, or how the html parameter interacts with url.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences with no filler: it states the purpose, gives a usage pattern with an example, and explains the mechanism. Key information is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter tool with fully described schema, the description adequately covers the main inputs, the output format, and the general behavior. It does not address edge cases like supplying both url and html, but those are minor given the schema already clarifies html is an alternative.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter already documented clearly. The description adds an example of a prompt and confirms JSON output, but it does not significantly extend beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource ('Extract structured data from a web page') and explains the natural-language interface with a concrete example. It doesn't explicitly distinguish itself from sibling extract_page, but the LLM-powered, natural-language mechanism implies a distinct behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by showing the workflow: provide a URL, describe the desired data, receive JSON. However, it gives no explicit when-to-use vs. when-not-to-use guidance and makes no comparison to alternatives like extract_page or render_screenshot.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_usageA

Check remaining renders and quota for the configured OtterSnap key.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden. 'Check' strongly implies a read-only, non-destructive operation, and 'configured OtterSnap key' clarifies that the tool relies on pre-existing configuration rather than per-call credentials. It stops short of explicitly stating that it consumes no quota, but the wording makes that unlikely.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence that fronts the action ('Check remaining renders and quota') and includes only the essential scope information. There is no filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, parameterless usage-check tool, the description covers the core purpose and scope. It does not detail the return shape or format of the quota information, and since no output schema exists, a bit more return-value context would have made it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero parameters, and the description helps explain why: the key is 'configured' rather than passed in. This adds useful meaning beyond the empty schema and matches the baseline for a no-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the verb ('Check'), the resource ('remaining renders and quota'), and the scope ('configured OtterSnap key'). This distinguishes it from the sibling rendering/extraction tools, which produce outputs rather than report usage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It conveys a clear context for use: the agent should call this when it needs to know remaining render capacity for the configured key. It does not explicitly state when not to use it or name alternatives, but as a zero-parameter status/usage tool the context is largely self-evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

code_imageA

Turn a code snippet into a beautiful syntax-highlighted PNG (macOS-style window card). Great for sharing code on social media or docs.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe code snippet to render
themeNoCard theme, default dark
titleNoFilename shown in the window title bar
languageNoLanguage for highlighting, e.g. javascript, python, go

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It discloses the output format (PNG) and visual style ('macOS-style window card') but does not mention behaviors like language auto-detection, default theme, or how the image is delivered. For a simple rendering tool this is acceptable but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the core function front-loaded in the first sentence and the use case in the second. There is no filler, redundancy, or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter tool with no output schema and no annotations, the description covers purpose, output format, and use context. It omits minor details such as language auto-detection or exact return packaging, but the tool's simplicity and fully described schema make the definition sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 no parameter-level detail beyond what the schema already states; 'beautiful' and 'macOS-style window card' are stylistic framing rather than semantic clarification.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Turn a code snippet into a beautiful syntax-highlighted PNG.' It clearly distinguishes code_image from siblings like render_screenshot or render_pdf, which address different rendering targets, and the 'macOS-style window card' detail further pins down the output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a concrete usage context: 'Great for sharing code on social media or docs.' It does not explicitly name alternatives or exclusion conditions, but the intended use case is clear enough to guide an agent when selecting this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_og_imageA

Generate a branded 1200x630 Open Graph social card and return it visually.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNoCard theme, default emerald
titleYesMain headline
siteNameNoFooter label, default ottersnap.com
subtitleNoSupporting line under the headline

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does add genuine behavioral facts: fixed 1200x630 dimensions and that the result is returned visually rather than, say, written to disk. But it is silent on how the image is delivered (URL vs. attachment), whether an external rendering service or cost is involved, and any failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single 14-word sentence with no filler. The verb, artifact, dimensions, and output modality are all front-loaded and every element earns its place. This is genuine conciseness, not under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should clarify return semantics; 'return it visually' is vague about how the agent or user actually receives the image. For a simple, fully schema-documented 4-parameter tool the core invocation is understandable, but the return contract and any prerequisites/limitations remain under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each property already has a meaningful description (theme enum with default, title, siteName default, subtitle). The tool description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Generate'), a concrete artifact ('branded 1200x630 Open Graph social card'), and an output modality ('return it visually'). This is clear and more informative than the tool name alone, and the artifact type implicitly separates it from image siblings like render_screenshot and code_image, though it never explicitly contrasts them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance and no mention of alternatives. The only usage signal is implied: the term 'Open Graph social card' suggests a social-sharing meta-tag scenario. That is enough to count as implied usage, but the agent gets no help choosing between this and the sibling rendering tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_pageA

Extract structured content from a web page: title, description, headings, links, images and the page body as clean Markdown — ready to feed to an LLM. This READS the page (use render_screenshot to SEE it).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoThe page to read, e.g. https://example.com/blog/post
htmlNoRaw HTML to extract from instead of a URL
formatNojson (default): full structured data; markdown: just the page body as Markdown

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It discloses the core behavioral trait that this is a read operation ('This READS the page') and not a visual render, which is meaningful in the absence of annotations. However, it does not reveal limitations such as JavaScript rendering, network/auth behavior, rate limits, or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with high signal density; the action and output are front-loaded, and the sibling contrast is delivered as a short parenthetical-style remark. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description does a good job listing what will be returned and the two output formats, and the optional-input semantics are covered by the schema. It doesn't mention failure behaviors or JS rendering, but for a straightforward extraction tool it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 mostly echoes what the schema already says (html instead of URL, json vs markdown) and adds no extra semantic detail beyond the overall output list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the verb 'Extract', the resource 'web page', and enumerates the exact content fields (title, description, headings, links, images, body as Markdown). The closing contrast with render_screenshot ('READS' vs 'SEE') clearly differentiates it from a key sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it: when you need textual or structured content 'ready to feed to an LLM'. It explicitly routes visual needs to render_screenshot, but it does not mention alternatives like ai_extract or the exact conditions for choosing html vs url beyond what the schema already says.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_pdfB

Render a web page (or raw HTML) to a print-ready PDF file. Returns size info; PDF bytes are not inlined.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoThe page to convert
htmlNoRaw HTML to convert instead of a URL — ideal for invoices and reports
paperNoPaper size, default A4
marginNo
landscapeNo
footerTextNoText in the footer; page numbers are added automatically
headerTextNoText centered in the header of every page

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It usefully mentions that 'PDF bytes are not inlined' and that only size info is returned, which is a non-obvious output trait. However, it does not explain how the PDF is delivered (e.g., file reference, URL), whether rendering is synchronous, or any resource limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences with no filler. The primary purpose is front-loaded, and the important output behavior ('bytes are not inlined') is stated efficiently in the second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description should explain return values clearly. It mentions size info and non-inlined PDF bytes, but omits how to access the actual PDF file, which is critical for an agent to use the result. It also lacks any guidance on file size limits, timeout behavior, or whether the rendered PDF is persisted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 71%, so the schema already documents most parameters. The description adds little parameter-level meaning beyond the schema; for example, 'or raw HTML' mirrors the html parameter description. Margin and landscape remain undocumented in both schema and description, leaving minor gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Render a web page (or raw HTML) to a print-ready PDF file.' It clearly distinguishes the tool from siblings like render_screenshot by specifying PDF output, and clarifies the two valid input modes (URL or raw HTML).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given about when to use this tool versus alternatives such as render_screenshot, extract_page, or ai_extract. The description implies PDF-related use cases but does not state exclusions or name sibling tools for comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_screenshotA

Render a web page to an image and return it visually — gives the calling agent eyes on any URL. Supports full-page captures, retina scale, dark mode, element selection and cookie-banner blocking.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to capture, e.g. https://github.com
hideNoCSS selectors to hide before capture
widthNoViewport width, default 1280
formatNoOutput format, default png
heightNoViewport height, default 800
retinaNo2x device scale for crisp captures
darkModeNoEmulate prefers-color-scheme: dark
fullPageNoCapture the entire scroll height (default viewport only in this tool)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It does add useful traits: full-page captures, retina scale, dark mode, and cookie-banner blocking. However, it doesn't explain how the image is returned (binary, URL, base64), whether JavaScript executes, or any limitations/quirks. The phrase 'element selection' is also not directly backed by a schema parameter, creating mild ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence delivers the core purpose, and the second succinctly lists notable capabilities. The structure is front-loaded and every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich input schema (8 well-documented parameters) and the clear statement that the result is visual, the description is nearly complete. The main gaps are lack of explicit sibling routing and the slightly misleading 'element selection' phrase, since no parameter lets the agent choose a specific element to capture. An agent can still invoke the tool correctly using just the schema and the core description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema thoroughly documents every parameter. The description mostly restates capabilities already present in the schema (fullPage, retina, darkMode, hide) and adds 'cookie-banner blocking' which has no parameter, so it arouses some confusion. It doesn't supply meaningful new parameter-level detail beyond the schema, hence the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Render a web page to an image and return it visually — gives the calling agent eyes on any URL.' This unambiguously states the tool's core function and makes it easy to distinguish from siblings like render_pdf or extract_page. The term 'element selection' is slightly vague, but the main purpose is crystal clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by saying it gives the agent 'eyes on any URL,' so an agent can infer this is the go-to tool for visual inspection of a page. However, it never explicitly contrasts with alternatives like render_pdf, extract_page, or create_og_image, and it provides no 'when-not-to-use' guidance. The intended use case is clear but not differentiated from siblings.

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. Dates show when Glama detected each change.

  1. 7 tool updatesv0.1.0
    • First observedai_extract
    • First observedcheck_usage
    • First observedcode_image
    • First observedcreate_og_image
    • First observedextract_page
    • First observedrender_pdf
    • First observedrender_screenshot

TDQS

A3.8/5.0

Scored across 7 tools

Disambiguation4/5

Most tools are clearly distinct by output type and purpose, such as PDF vs screenshot vs code image. The only possible confusion is between extract_page and ai_extract, but their descriptions do enough to separate generic structured extraction from natural-language JSON extraction.

Naming Consistency4/5

Tool names mostly follow a clear verb_noun pattern in snake_case, e.g. render_pdf, render_screenshot, check_usage, extract_page. Minor deviations like ai_extract and code_image are still readable but slightly less uniform.

Tool Count5/5

Seven tools is a well-scoped set for a web rendering and extraction service. Each tool covers a distinct capability without unnecessary redundancy or bloat.

Completeness4/5

The domain of web page rendering, screenshotting, image generation, and content extraction is well covered, including usage checking. A minor gap is that render_pdf does not return the PDF bytes directly, which could be a slight workflow dead end for agents needing the actual file.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Hosted, SSRF-safe, cached screenshots and Open Graph images for AI agents - no headless Chrome to run.
    38
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Screenshot, visual-diff, and AI page-analysis API for AI agents. Capture any URL as PNG, JPEG, WebP, PDF, or HTML, diff two versions of a page to catch visual regressions, and get an AI summary of what a page contains.
    3
    43
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zzzjy765/ottersnap-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server