Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
a5792ed
chore: mcp landing
Josebaseba Feb 25, 2026
ca432b9
chore: improve sections
Josebaseba Feb 25, 2026
d157ef1
chore: improve texts
Josebaseba Feb 25, 2026
105e981
chore: explain the optional instalation
Josebaseba Feb 25, 2026
0280008
fix: pricing url
Josebaseba Feb 25, 2026
9b09d74
chore: mcp docs added
Josebaseba Feb 25, 2026
e4e6178
chore: landing finished
Josebaseba Feb 25, 2026
e01c0a9
chore: update mcp docs
Josebaseba Feb 26, 2026
00d81e4
Merge branch 'master' into mcp
Josebaseba Feb 26, 2026
2b5f129
chore: rename integrations path
Josebaseba Feb 26, 2026
862978f
chore: definitive video added
Josebaseba Feb 26, 2026
bc476fd
chore: add examples
Josebaseba Feb 26, 2026
268defb
fix: js standard
Josebaseba Feb 26, 2026
33869c9
chore: add mcp to the toolbar
Josebaseba Feb 26, 2026
5b41eba
Merge branch 'master' into mcp
Josebaseba Feb 26, 2026
a9654a3
chore: seo improvements
Josebaseba Feb 26, 2026
707557a
fix: js standard
Josebaseba Feb 26, 2026
c904d42
fix: js standard
Josebaseba Feb 26, 2026
2eb0be3
fix: force js standard
Josebaseba Feb 26, 2026
1b111ac
chore: improve examples grid
Josebaseba Feb 27, 2026
8bc0f1d
chore: improve responsive grid
Josebaseba Feb 27, 2026
4135f46
chore: add filter to the grid
Josebaseba Feb 27, 2026
7e1b927
chore: improve grid
Josebaseba Feb 27, 2026
d05fcca
chore: animate filtering
Josebaseba Feb 27, 2026
bef8161
chore: refactor js
Josebaseba Feb 27, 2026
2563f58
chore: improve resposiveness
Josebaseba Feb 27, 2026
cca423b
chore: improve the video section
Josebaseba Feb 27, 2026
481a029
chore: improve h1
Josebaseba Feb 27, 2026
edb9a9d
chore: copy prompts in one click
Josebaseba Feb 27, 2026
02cd0c3
chore: improve landing
Josebaseba Feb 27, 2026
469e591
chore: fix standard
Josebaseba Feb 27, 2026
d4febe4
chore: add post draft
Josebaseba Feb 27, 2026
8c55dc9
chore: remove not loading icons from link
Josebaseba Feb 27, 2026
56d871c
chore: use the same copy paste as terminal
Josebaseba Feb 27, 2026
0863a03
chore: improve video layout
Josebaseba Feb 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions data/git-timestamps-created.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"src/content/blog/microlink-api-introducing-microlink-pdf.md": "2026-01-13T14:11:10.000Z",
"src/content/blog/microlink-cards.md": "2026-01-06T20:49:38.000Z",
"src/content/blog/microlink-for-pdf.md": "2026-01-06T20:49:38.000Z",
"src/content/blog/microlink-mcp-the-web-llm-ready.md": "2026-02-27T15:32:53.000Z",
"src/content/blog/microlink-proxy-how-it-works.md": "2026-01-13T14:11:10.000Z",
"src/content/blog/microlink-sdk-4-5.md": "2026-01-06T20:49:38.000Z",
"src/content/blog/microlink-sdk-v45-introducing-iframe-support.md": "2026-01-13T14:11:10.000Z",
Expand Down Expand Up @@ -43,6 +44,7 @@
"src/content/docs/api/basics/rate-limit.md": "2026-01-06T20:49:38.000Z",
"src/content/docs/api/getting-started/cli.md": "2026-01-06T20:49:38.000Z",
"src/content/docs/api/getting-started/data-fields.md": "2026-01-06T20:49:38.000Z",
"src/content/docs/api/getting-started/mcp.md": "2026-02-25T20:47:48.000Z",
"src/content/docs/api/getting-started/overview.md": "2026-01-06T20:49:38.000Z",
"src/content/docs/api/parameters/adblock.md": "2026-01-06T20:49:38.000Z",
"src/content/docs/api/parameters/animations.md": "2026-01-06T20:49:38.000Z",
Expand Down Expand Up @@ -411,7 +413,9 @@
"src/pages/iframe.js": "2019-11-11T22:57:18.000Z",
"src/pages/index.js": "2017-10-07T15:12:41.000Z",
"src/pages/insights.js": "2020-01-30T10:01:37.000Z",
"src/pages/integration/mcp.js": "2026-02-25T11:33:59.000Z",
"src/pages/integrations.js": "2020-02-07T09:02:30.000Z",
"src/pages/integrations/mcp.js": "2026-02-26T11:59:20.000Z",
"src/pages/logo.js": "2022-12-17T14:17:02.000Z",
"src/pages/markdown.js": "2026-02-19T21:02:29.000Z",
"src/pages/meta.js": "2019-12-27T17:46:49.000Z",
Expand Down
6 changes: 5 additions & 1 deletion data/git-timestamps-modified.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"src/content/blog/microlink-api-introducing-microlink-pdf.md": "2026-02-03T14:39:59.000Z",
"src/content/blog/microlink-cards.md": "2026-02-03T14:39:59.000Z",
"src/content/blog/microlink-for-pdf.md": "2026-01-10T15:22:34.000Z",
"src/content/blog/microlink-mcp-the-web-llm-ready.md": "2026-02-27T15:32:53.000Z",
"src/content/blog/microlink-proxy-how-it-works.md": "2026-02-03T14:39:59.000Z",
"src/content/blog/microlink-sdk-4-5.md": "2026-01-10T15:22:34.000Z",
"src/content/blog/microlink-sdk-v45-introducing-iframe-support.md": "2026-02-03T14:39:59.000Z",
Expand Down Expand Up @@ -43,6 +44,7 @@
"src/content/docs/api/basics/rate-limit.md": "2026-01-10T13:37:59.000Z",
"src/content/docs/api/getting-started/cli.md": "2026-01-10T13:37:59.000Z",
"src/content/docs/api/getting-started/data-fields.md": "2026-01-10T13:37:59.000Z",
"src/content/docs/api/getting-started/mcp.md": "2026-02-26T11:45:32.000Z",
"src/content/docs/api/getting-started/overview.md": "2026-02-04T20:02:09.000Z",
"src/content/docs/api/parameters/adblock.md": "2026-02-04T20:02:09.000Z",
"src/content/docs/api/parameters/animations.md": "2026-02-04T20:02:09.000Z",
Expand Down Expand Up @@ -411,8 +413,10 @@
"src/pages/iframe.js": "2023-03-19T22:23:34.000Z",
"src/pages/index.js": "2026-02-26T11:40:49.000Z",
"src/pages/insights.js": "2026-02-23T17:35:57.000Z",
"src/pages/integration/mcp.js": "2026-02-25T20:48:06.000Z",
"src/pages/integrations.js": "2020-07-29T16:14:34.000Z",
"src/pages/logo.js": "2026-02-26T11:40:49.000Z",
"src/pages/integrations/mcp.js": "2026-02-27T17:42:59.000Z",
"src/pages/logo.js": "2026-02-26T17:36:15.000Z",
"src/pages/markdown.js": "2026-02-24T15:39:02.000Z",
"src/pages/meta.js": "2026-01-24T13:05:07.000Z",
"src/pages/metadata.js": "2026-02-19T21:48:11.000Z",
Expand Down
4 changes: 3 additions & 1 deletion eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,9 @@ export default [
TextEncoder: 'readonly',
TextDecoder: 'readonly',
Blob: 'readonly',
CustomEvent: 'readonly'
CustomEvent: 'readonly',
requestAnimationFrame: 'readonly',
cancelAnimationFrame: 'readonly'
}
},
rules: {
Expand Down
28 changes: 28 additions & 0 deletions src/components/icons/Brain.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import React from 'react'
import Svg from 'components/elements/Svg'

export const Brain = props => (
<Svg
xmlns='http://www.w3.org/2000/svg'
viewBox='0 0 24 24'
width='24'
height='24'
fill='none'
stroke='currentColor'
strokeWidth='2'
strokeLinecap='round'
strokeLinejoin='round'
aria-label='Brain'
{...props}
>
<path d='M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z' />
<path d='M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z' />
<path d='M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4' />
<path d='M17.599 6.5a3 3 0 0 0 .399-1.375' />
<path d='M6.003 5.125A3 3 0 0 0 6.401 6.5' />
<path d='M3.477 10.896a4 4 0 0 1 .585-.396' />
<path d='M19.938 10.5a4 4 0 0 1 .585.396' />
<path d='M6 18a4 4 0 0 1-1.967-.516' />
<path d='M19.967 17.484A4 4 0 0 1 18 18' />
</Svg>
)
4 changes: 4 additions & 0 deletions src/components/patterns/Aside/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,10 @@ const ROUTES_API = [
{
name: 'CLI',
href: '/docs/api/getting-started/cli'
},
{
name: 'MCP',
href: '/docs/api/getting-started/mcp'
}
]
},
Expand Down
9 changes: 8 additions & 1 deletion src/components/patterns/Toolbar/ToolbarLinks.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { ShieldUser as ShieldUserIcon } from 'components/icons/ShieldUser'
import { Terminal as TerminalIcon } from 'components/icons/Terminal'
import { WandSparkles as WandSparklesIcon } from 'components/icons/WandSparkles'
import { GitHub as GitHubBrand } from 'components/icons/GitHub'
import { Brain as BrainIcon } from 'components/icons/Brain'
import { useOssTotalStars } from 'components/hook/use-oss-total-stars'
import { theme } from 'theme'
import styled from 'styled-components'
Expand Down Expand Up @@ -170,8 +171,14 @@ export const NAVIGATION_SECTIONS = [
{
label: 'Tools',
description: 'Utilities to test and validate your metadata integrations.',
columns: 2,
columns: 3,
items: [
createNavigationItem({
label: 'MCP',
href: '/integrations/mcp',
description: 'Give your AI access to the Microlink API',
icon: BrainIcon
}),
createNavigationItem({
label: 'Sharing Debugger',
href: '/tools/sharing-debugger',
Expand Down
83 changes: 83 additions & 0 deletions src/content/blog/microlink-mcp-the-web-llm-ready.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
---
title: 'Microlink MCP: The Web, LLM-Ready'
description: 'Microlink is now available as an MCP server. Screenshots, PDFs, markdown conversion, and web scraping through natural language. The web, LLM-ready.'
authors:
- joseba
date: '2026-03-02'
---

The web wasn't built for LLMs. Microlink bridges the gap. One config block gives [Claude Desktop](https://claude.ai/download), [Cursor](https://cursor.com), [Windsurf](https://windsurf.com), and any MCP-compatible client access to screenshots, PDFs, markdown conversion, metadata extraction, Lighthouse audits, and more. No boilerplate. No extra SDKs. Just ask.

[MCP — Model Context Protocol](https://modelcontextprotocol.io) is the open standard that lets AI agents use external tools through natural language. Instead of writing HTTP clients, handling auth, and parsing responses, you give your agent an MCP server and it handles the rest.

```json
{
"mcpServers": {
"microlink": {
"command": "npx",
"args": ["-y", "@microlink/mcp"],
"env": {
"MICROLINK_API_KEY": "your-api-key"
}
}
}
}
```

No global install. No signup to start.


## What makes it different

Most agents struggle with the real web: bot detection blocks requests, cookie banners halt execution, and raw HTML — when it does come through — is thousands of tokens of nav bars, footers, and ad noise that buries the actual content.

Every Microlink MCP request routes through its headless browser infrastructure. Anti-bot evasion, automatic cookie banner dismissal, proxy routing. The target site sees Microlink, not your agent, not your IP. Your agent gets structured, clean output. Not a raw dump.


## 80% fewer tokens. Cleaner content.

Ask your agent to fetch a page via [`microlink_markdown`](/markdown) and it gets clean Markdown — body content, structured headings, relevant links. Headers, footers, cookie banners, ads stripped out. 80% fewer tokens than raw HTML.

`microlink_text` goes further: plain text only. The lightest option when you just need the words.

Less noise. Faster responses. More accurate results.


## Pixel-perfect screenshots, on demand

[`microlink_screenshot`](/screenshot) captures any URL and returns a CDN-hosted image in seconds. Full-page, element-level crops via CSS selector, any viewport, any device. Dark mode, browser chrome overlays, custom CSS injection before capture.

Designers: ask your agent to screenshot any URL at mobile, tablet, and desktop in one go. No browser open. No manual resizing. Just ask.


## One config block. Ten tools.

- [`microlink_screenshot`](/screenshot) — Full-page, element crops, device emulation, overlays, custom CSS/JS injection.
- [`microlink_pdf`](/pdf) — Any URL as a PDF. Paper size, margins, orientation, page ranges.
- [`microlink_markdown`](/markdown) — Any webpage as clean Markdown. 80% fewer tokens. No noise.
- `microlink_text` — Plain text only. The lightest way to read a page.
- [`microlink_meta`](/metadata) — Normalized metadata: title, description, author, date, image, favicon.
- `microlink_extract` — Metadata, CSS selector scraping, screenshot, PDF, video, [Lighthouse](https://developer.chrome.com/docs/lighthouse/overview/) — one request.
- [`microlink_insights`](/insights) — [Lighthouse](https://developer.chrome.com/docs/lighthouse/overview/) audit plus [Wappalyzer](https://www.wappalyzer.com) tech-stack detection.
- `microlink_video` and `microlink_audio` — Direct playable sources from YouTube, Vimeo, TikTok, SoundCloud, Spotify, and hundreds more.
- `microlink_palette` — Dominant color palette from any page. Hex codes plus [WCAG](https://www.w3.org/WAI/standards-guidelines/wcag/)-safe colors.


## No code. Just ask.

*"What can you do with the Microlink tool?"* → The agent explains every capability in plain language. No docs needed.

*"Screenshot our landing page at mobile, tablet, and desktop — full page, JPEG"* → Three CDN URLs. Done.

*"Read this research paper and summarize the key findings"* → Clean Markdown, 80% fewer tokens, straight into context.

*"Audit this site's performance and tell me what stack they're running"* → Lighthouse scores plus tech-stack detection, in one response.

*"Convert this documentation page to an A4 PDF"* → Print-ready, CDN-hosted, immediately.


## Get started

- [Integration page](/integrations/mcp)
- [Documentation](/docs/api/getting-started/mcp)
- [GitHub](https://github.com/microlinkhq/mcp)
151 changes: 151 additions & 0 deletions src/content/docs/api/getting-started/mcp.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
---
title: 'MCP'
description: 'Connect Microlink MCP to your AI client to extract metadata, screenshots, PDFs, insights, media, markdown, and text from any URL.'
---

import { Terminal } from 'components/markdown/Terminal'

Microlink MCP exposes [Microlink API](/docs/api/getting-started/overview/) as MCP tools for assistants like Claude, Codex, Cursor, and VS Code.

## Install

No global install is required. Run with `npx` (or `pnpm dlx` if you use pnpm):

<Terminal>npx -y @microlink/mcp</Terminal>

<Terminal>pnpm dlx @microlink/mcp</Terminal>

## Add it to your MCP client

Use this `mcpServers` entry:

```json
{
"mcpServers": {
"microlink": {
"command": "npx",
"args": ["-y", "@microlink/mcp"],
"env": {
// Optional. Free 50 reqs/day rate limit.
"MICROLINK_API_KEY": "YOUR_MICROLINK_API_KEY"
}
}
}
}
```

For higher/unlimited usage, get an API key at [microlink.io/#pricing](https://microlink.io/#pricing).
If no API key is provided, requests go to the free endpoint with a 50 requests/day limit.

## Usage

Once you've added the MCP to your favorite LLM client, try asking it to take a screenshot of a specific webpage, generate a PDF, or fetch metadata. Just use plain language to describe what you want — the agent will know which **tool** to call and with what parameters.

## Tools

- **microlink_extract**: General extractor. Metadata + custom `data` scraping + optional screenshot/pdf/video/audio/insights/palette in one call.
- **microlink_screenshot**: Capture screenshots (`fullPage`, `element`, `overlay`, `type`, etc.).
- **microlink_pdf**: Generate PDFs (`format`, `margin`, `scale`, `pageRanges`, etc.).
- **microlink_video**: Extract playable video source (`data.video`).
- **microlink_audio**: Extract playable audio source (`data.audio`).
- **microlink_insights**: Lighthouse + technology detection.
- **microlink_meta**: Normalized metadata only (`title`, `description`, `image`, `logo`, etc.).
- **microlink_palette**: Extract color palette from detected images.
- **microlink_markdown**: Convert URL content to Markdown (`microlink.data.markdown`).
- **microlink_text**: Convert URL content to plain text (`microlink.data.text`).

Notes:
- **screenshot**, **pdf**, and **insights** accept `true` or `{ ...options }`.
- Empty objects like `{}` are treated as `true`.
- Boolean strings (`"true"`, `"false"`) and JSON-stringified objects are normalized for compatibility with some MCP clients.

## Response format

- All tools return `structuredContent` with:
- `endpoint`, `requestUrl`, `finalUrl`, `statusCode`, `responseHeaders`, `microlink`
- For markdown/text specifically:
- Markdown content is in `microlink.data.markdown`
- Plain text content is in `microlink.data.text`

## Prompt Examples

### Extract metadata + screenshot in one request

*"Get a full page screenshot of microlink.io and include the metadata"*

```json
{
"tool": "microlink_extract",
"arguments": {
"url": "https://microlink.io",
"screenshot": {
"fullPage": true
},
"meta": true
}
}
```

### Screenshot with overlay

*"Get a screenshot of microlink.io with a dark browser overlay"*

```json
{
"tool": "microlink_screenshot",
"arguments": {
"url": "https://microlink.io",
"screenshot": {
"overlay": { "browser": "dark" },
"type": "png"
}
}
}
```

### Generate a PDF

*"Download a pdf of example.com"*

```json
{
"tool": "microlink_pdf",
"arguments": {
"url": "https://example.com",
"pdf": {
"format": "A4",
"margin": "0.35cm"
}
}
}
```

### Get page insights

*"Check the performance of microlink.io"*

```json
{
"tool": "microlink_insights",
"arguments": {
"url": "https://microlink.io",
"insights": {
"lighthouse": { "preset": "perf" },
"technologies": true
}
}
}
```

### Convert a page to Markdown

*"Read https://microlink.io/blog/antibot-detection-at-scale as markdown and give the key points of the article"*

```json
{
"tool": "microlink_markdown",
"arguments": {
"url": "https://microlink.io/blog/antibot-detection-at-scale"
}
}
```
Loading