JsonLink MCP Server
OfficialJsonLink MCP Server gives AI agents web-reading superpowers: read pages as Markdown, pull link metadata, take screenshots, and list links and images on any URL (JavaScript-heavy pages supported, blocked sites retried via proxy, failed requests free).
Read a web page as Markdown (
url_to_markdown, 1 credit) — main content only (no nav/ads/footers), with optionalmax_charstruncation (default 50,000); ideal for articles, docs, blog posts.Get link metadata (
extract_metadata, 1 credit) — title, description, preview images, favicon and site name from Open Graph, Twitter Card and HTML meta tags; good for link previews, summaries and SEO checks.Take screenshots (
screenshot, 2 credits) — desktop (1280×800) or mobile (390×844 @2×), optional full-page capture, load delay up to 10s, cookie banners hidden.List links on a page (
extract_links, 1 credit) — every link with anchor text, follow/nofollow and internal/external type; filter by type, limit up to 1000 (default 200); useful for crawling and link audits.List images on a page (
extract_images, 1 credit) — image URL, format, dimensions and file size, including lazy-loaded images; filter bymin_width, limit up to 500 (default 100); useful for finding photos, logos and product images.Handles tough pages — JavaScript-rendered pages load in a real browser, and blocked requests are retried through a proxy; timeouts and unloadable pages cost no credits.
Flexible deployment — stdio via
npx -y jsonlink-mcp(Claude Code, Claude Desktop, Cursor, VS Code, Windsurf) or remote Streamable HTTP with--http --port, authenticating withJSONLINK_API_KEYor a Bearer token.
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., "@JsonLink MCP ServerRead https://example.com/blog/post and summarize it in five bullet points."
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.
JsonLink MCP Server
Give your AI agent the web. The JsonLink MCP server lets Claude, Cursor, VS Code and any MCP client read web pages as Markdown, get link metadata, take screenshots and list the links and images on any URL.
Reads JavaScript-heavy pages — pages are loaded in a real browser when needed.
Gets past blocks — requests are retried through a proxy when a site blocks them.
Failed requests are free — timeouts and pages that can't load cost no credits.
Tools
Tool | What it does | Credits |
| Main content of a page as clean Markdown, for reading articles, docs and blog posts | 1 |
| Title, description, preview images, favicon and site name of a URL | 1 |
| Screenshot of a page (desktop, mobile, tablet, full page or one element), returned as an image. Ads, trackers, chat widgets and cookie banners hidden; optional dark mode | 2 |
| Every link on a page with anchor text, follow/nofollow and internal/external | 1 |
| Every image on a page with format, dimensions and file size | 1 |
Related MCP server: Crawlberg MCP Server
Get an API key
Create a free account — the free plan includes 100 credits every month, no credit card. Copy your key from the dashboard.
Setup
Replace YOUR_API_KEY with your JsonLink key.
Claude Code
claude mcp add jsonlink -e JSONLINK_API_KEY=YOUR_API_KEY -- npx -y jsonlink-mcpClaude Desktop
Add this to claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"jsonlink": {
"command": "npx",
"args": ["-y", "jsonlink-mcp"],
"env": { "JSONLINK_API_KEY": "YOUR_API_KEY" }
}
}
}Cursor
Add this to ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"jsonlink": {
"command": "npx",
"args": ["-y", "jsonlink-mcp"],
"env": { "JSONLINK_API_KEY": "YOUR_API_KEY" }
}
}
}VS Code
Add this to .vscode/mcp.json:
{
"servers": {
"jsonlink": {
"command": "npx",
"args": ["-y", "jsonlink-mcp"],
"env": { "JSONLINK_API_KEY": "YOUR_API_KEY" }
}
}
}Windsurf and other clients
Any client that runs stdio MCP servers works the same way: command npx, arguments -y jsonlink-mcp, environment variable JSONLINK_API_KEY.
Example prompts
"Read https://example.com/blog/post and summarize it in five bullet points."
"Take a mobile screenshot of my landing page and tell me what looks broken."
"Screenshot just the pricing section of stripe.com in dark mode."
"Get the title and description of these 10 links and make a table."
"List the external links on this page that are nofollow."
Configuration
Variable | Description |
| Your JsonLink API key (required). |
| API base URL. Defaults to |
Pricing
Every tool call uses credits from your JsonLink plan: 1 credit per page, 2 per screenshot. Plans start at $15/month for 50,000 credits — see pricing. Credits and rate limits are the same as the REST API.
Development
npm install
npm run build
JSONLINK_API_KEY=YOUR_API_KEY node dist/index.jsRun it as a remote (Streamable HTTP) server with node dist/index.js --http --port 3100; clients send their key as Authorization: Bearer YOUR_API_KEY.
License
MIT
Available Tools
5 toolsextract_imagesList the images on a pageARead-onlyIdempotent
List the images on a web page (including lazy-loaded ones) with URL, format, dimensions and file size. Use it to find photos, logos or product images on a page. 1 credit.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full URL of the web page, including https:// | |
| limit | No | Maximum images to return. Default 100. | |
| min_width | No | Skip images narrower than this, in pixels (e.g. 200 to drop icons). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new context: lazy-loaded images are included, and the call costs '1 credit', which is a cost disclosure annotations cannot express.
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 compact sentences front-load what is returned and follow with the use case, plus a terse cost note. Every element carries information, though the trailing '1 credit.' fragment is abrupt.
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?
With no output schema, the description carries the return-value burden and does so by naming the fields returned (URL, format, dimensions, file size). Combined with complete parameter docs and existing annotations, an agent has enough to call it correctly; pagination/ordering behavior is the only notable omission.
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 all three parameters (url, limit, min_width) are already documented with meaning and defaults. The description adds no syntax or constraint detail beyond the schema; 'including lazy-loaded ones' is behavioral, not parameter-level. Baseline 3 applies.
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?
States a specific verb+resource ('List the images on a web page') and enumerates the returned fields (URL, format, dimensions, file size), which lets an agent distinguish it from extract_links, extract_metadata and screenshot by resource type. It never names a sibling explicitly, so it stops short of a 5.
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?
'Use it to find photos, logos or product images on a page' gives a concrete use context. There is no when-not guidance and no routing to alternatives such as extract_links when the agent actually wants hrefs rather than image assets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_linksList the links on a pageARead-onlyIdempotent
List every link on a web page with its anchor text, follow/nofollow and internal/external type. Use it to crawl a site, find pages to read next, or audit links. 1 credit.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full URL of the web page, including https:// | |
| type | No | Only internal or external links. Default all. | |
| limit | No | Maximum links to return. Default 200. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the safety profile is covered. The description still adds real value beyond them by disclosing the cost ("1 credit") and the shape of the returned link records. It omits failure behavior for unreachable pages or JavaScript-rendered content.
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?
Three short sentences: capability plus returned fields first, usage second, cost last. Zero filler, and the most important information is front-loaded.
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?
There is no output schema, and the description compensates by naming the returned fields. Combined with the annotations covering safety and the description covering cost and intent, an agent has everything needed to call this correctly.
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%, with url, the type enum, and the limit default/max all documented in the schema itself. The description adds no parameter-level detail, so the baseline 3 applies.
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?
States a specific verb and resource ("List every link on a web page") and enumerates the returned fields (anchor text, follow/nofollow, internal/external), which is enough for an agent to tell it apart from extract_images or extract_metadata. It never explicitly contrasts itself with those siblings, so it falls short of a 5.
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?
Gives three concrete use contexts: crawling a site, finding pages to read next, and auditing links. That is clear positive guidance, but it names no alternatives and gives no when-not-to-use conditions (e.g., use url_to_markdown when you want the page text).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_metadataGet link metadataARead-onlyIdempotent
Get a URL's title, description, preview images, favicon and site name (Open Graph, Twitter Card and HTML meta tags). Use it to summarize what a link is, build link previews or check SEO tags. Faster and cheaper than reading the whole page. 1 credit.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full URL of the web page, including https:// |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds value beyond that with cost ('1 credit') and a performance characterization ('faster and cheaper'), though it says nothing about failure behavior for unreachable URLs or missing meta tags.
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?
Three sentences, front-loaded with what is returned, then purpose, then the cost/performance trade-off. Every sentence carries distinct information.
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?
No output schema exists, but the description enumerates the returned fields and their source (Open Graph, Twitter Card, HTML meta), effectively substituting for it. For a single-parameter read tool with rich annotations, nothing an agent needs is missing.
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% and the single 'url' parameter is fully documented with format and https:// guidance in the schema. The description adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
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?
States a specific verb (extract/get) and resource (link metadata) and enumerates exactly what is returned: title, description, preview images, favicon, site name, plus the source formats. It also implicitly distinguishes itself from siblings like url_to_markdown by being 'faster and cheaper than reading the whole page.'
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?
Gives concrete use cases (summarize a link, build previews, check SEO tags) and a comparative heuristic against the heavier alternative of reading the full page. It stops short of naming the sibling tool (url_to_markdown) or stating when-not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotTake a screenshotARead-onlyIdempotent
Capture a screenshot of a web page and return the image, so you can see how the page looks. Supports desktop, mobile and full-page captures. Cookie banners are hidden. 2 credits.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full URL of the web page, including https:// | |
| delay | No | Seconds to wait after loading, for animations or late content. | |
| device | No | desktop (1280×800, default) or mobile (390×844 at 2×). | |
| full_page | No | Capture the whole scrollable page instead of the first screen. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds genuinely non-derivable context: cookie banners are auto-hidden, the cost is '2 credits', and desktop/mobile/full-page modes are supported. That is real value beyond the structured fields.
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?
Three tight sentences, front-loaded with the core action and result, followed by capability and cost details. Every sentence earns its place with no redundancy or filler.
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?
With no output schema, the description usefully clarifies that the tool returns an image, and it discloses cost and cookie handling. For a simple read tool, an agent has enough to invoke it correctly, though it could state whether large full-page captures have size limits.
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 schema already documents all four parameters with dimensions and defaults. The description's mention of 'desktop, mobile and full-page captures' maps to device/full_page but adds no syntax or meaning beyond the schema, so the baseline of 3 applies.
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?
States a specific verb and resource ('Capture a screenshot of a web page and return the image') and makes the output type explicit ('so you can see how the page looks'). This cleanly distinguishes it from siblings like url_to_markdown, extract_metadata, and extract_images, which return text or asset URLs rather than a rendered image.
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 phrase 'so you can see how the page looks' implies the use case (visual inspection), but there is no explicit guidance on when to choose this over the sibling extraction tools, nor any when-not conditions. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
url_to_markdownRead a web page as MarkdownARead-onlyIdempotent
Fetch a web page and return its main content as clean Markdown (no navigation, ads or footers). Use this to read articles, docs, blog posts or any page the user mentions. Handles JavaScript-rendered pages. 1 credit.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full URL of the web page, including https:// | |
| max_chars | No | Truncate the Markdown to this many characters. Default 50,000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, open-world, non-destructive), so the bar is lower. The description adds real value beyond them: it discloses content extraction behavior (stripping nav/ads/footers), JavaScript rendering support, and a cost of 1 credit – all useful for invocation decisions.
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?
Four short sentences, all front-loaded with the fetch/return behavior first, then usage, then capabilities, then cost. Every sentence earns its place with no redundancy.
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 simple one-shot read tool with no output schema, the description covers what it returns (clean Markdown main content), when to use it, and its behavioral traits. The only minor gap is it never mentions the max_chars truncation behavior, but the schema handles that parameter adequately.
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 both url and max_chars are fully documented in the schema, establishing the baseline of 3. The description adds nothing about max_chars truncation or URL formatting, so it does not exceed what the structured fields already provide.
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?
States a specific verb and resource ('Fetch a web page and return its main content as clean Markdown') with the cleaned scope spelled out (no navigation, ads or footers). The output format implicitly distinguishes it from the extract_* siblings, which return metadata, links, or images rather than readable content.
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?
'Use this to read articles, docs, blog posts or any page the user mentions' gives clear context for when to reach for it. It does not, however, name the siblings (extract_metadata, screenshot, extract_links) or state when those are preferred, so routing is left partly to inference.
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.
5 tool updates
v0.1.0- First observed
extract_images - First observed
extract_links - First observed
extract_metadata - First observed
screenshot - First observed
url_to_markdown
TDQS
Scored across 5 tools
Each tool returns a clearly distinct output from a URL (Markdown content, metadata, screenshot, links, images), so an agent can easily select the right one. There is minimal overlap; even metadata vs. markdown is explicitly differentiated by cost/purpose.
Four tools follow a clean verb_noun or verb pattern (url_to_markdown, extract_metadata, extract_links, extract_images), but 'screenshot' is a bare noun, a minor deviation. The set is still highly predictable overall.
Five tools is well-scoped for a URL extraction server, with each tool covering a distinct extraction need. No redundant or trivial tools are present.
The surface covers the main web-page extraction tasks: readable content, metadata, visual capture, links, and images. It lacks raw HTML or text extraction, but those are minor gaps agents can often work around via url_to_markdown.
Related MCP Connectors
Read a URL as clean markdown, screenshot a website, url to PDF. Web access for agents, no signup.
Hosted browser for agents: open pages, search the web, extract data, read PDFs and take screenshots.
1Web scraping for agents. Point it at a URL and it returns the page as clean markdown, JavaScript-rendered pages included. Point it at a site and it maps the URLs or crawls the section you need in the background, a few pages at a time so results fit in the conversation. Search the web and read full pages, extract fields with a JSON schema you define (validated, never invented), read a store's catalogue or a blog's posts from the platform's own feed, and check whether a page has changed. Failed requests cost nothing. The free plan includes 1,500 credits a month.
URL to screenshot, PDF, or extract for AI agents. Free 150 renders/mo, then $17/mo.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to fetch any web page as clean markdown or screenshot it, turning URLs into LLM-ready context.26 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to crawl and scrape websites, converting HTML to clean Markdown and structured metadata with support for JavaScript rendering, bot evasion, and SSRF protection.185MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to read, screenshot, or convert web pages to PDF using a real headless browser, turning any URL into clean Markdown, a visual image, or a print-ready document.82 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to search the web, read and extract content from webpages, fetch JSON from REST APIs, and collect links while bypassing anti-bot protections.23 npmISC