{"id":51541814,"url":"https://github.com/microlinkhq/mcp","last_synced_at":"2026-07-09T14:01:54.498Z","repository":{"id":368421863,"uuid":"1165017226","full_name":"microlinkhq/mcp","owner":"microlinkhq","description":"The web browser your AI agent never had","archived":false,"fork":false,"pushed_at":"2026-06-30T13:38:19.000Z","size":98,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-30T14:25:41.645Z","etag":null,"topics":["mcp-server"],"latest_commit_sha":null,"homepage":"https://microlink.io/integrations/mcp","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/microlinkhq.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-23T18:28:47.000Z","updated_at":"2026-06-30T13:38:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/microlinkhq/mcp","commit_stats":null,"previous_names":["microlinkhq/mcp"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/microlinkhq/mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microlinkhq%2Fmcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microlinkhq%2Fmcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microlinkhq%2Fmcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microlinkhq%2Fmcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/microlinkhq","download_url":"https://codeload.github.com/microlinkhq/mcp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microlinkhq%2Fmcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35301501,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-09T02:00:07.329Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mcp-server"],"created_at":"2026-07-09T14:01:54.326Z","updated_at":"2026-07-09T14:01:54.490Z","avatar_url":"https://github.com/microlinkhq.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Microlink MCP\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/microlinkhq/cdn/raw/master/dist/logo/banner.png#gh-light-mode-only\" alt=\"microlink logo\"\u003e\n  \u003cimg src=\"https://github.com/microlinkhq/cdn/raw/master/dist/logo/banner-dark.png#gh-dark-mode-only\" alt=\"microlink logo\"\u003e\n\u003c/div\u003e\n\nA [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server that exposes [Microlink API](https://microlink.io) capabilities to AI assistants. Runs over stdio transport, making it compatible with Claude Desktop, VS Code, Cursor, and any other MCP-capable client.\n\nIt turns natural-language requests into Microlink calls: take screenshots, generate PDFs, extract metadata or readable text, detect video/audio sources, run Lighthouse audits, and scrape custom fields with CSS selectors, all without leaving the assistant.\n\nSee the [MCP integration page](https://microlink.io/integration/mcp) for a guided walkthrough, or the [`@microlink/mcp`](https://www.npmjs.com/package/@microlink/mcp) npm package.\n\n## Table of contents\n\n- [Install](#install)\n- [MCP client configuration](#mcp-client-configuration)\n- [Usage](#usage)\n- [Tools](#tools)\n- [Authentication](#authentication)\n- [Development](#development)\n- [License](#license)\n\n## Install\n\n### Use the published package (recommended)\n\nNo local installation is required. Run directly with `npx`:\n\n```bash\nnpx -y @microlink/mcp\n```\n\n### Optional: install globally\n\n```bash\nnpm install -g @microlink/mcp\nmicrolink-mcp\n```\n\nDuring installation, the package prints a console reminder about the free Microlink plan (`50 requests/day`) and where to get an API key for higher/unlimited usage at [microlink.io/#pricing](https://microlink.io/#pricing).\n\n## MCP client configuration\n\n### Claude Desktop\n\nEdit `~/Library/Application\\ Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"microlink\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@microlink/mcp\"],\n      \"env\": {\n        \"MICROLINK_API_KEY\": \"YOUR_MICROLINK_API_KEY\"\n      }\n    }\n  }\n}\n```\n\n### VS Code / Codex\n\nPublished package:\n\n```json\n{\n  \"mcpServers\": {\n    \"microlink\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@microlink/mcp\"],\n      \"env\": {\n        \"MICROLINK_API_KEY\": \"YOUR_MICROLINK_API_KEY\"\n      }\n    }\n  }\n}\n```\n\nLocal repository:\n\n```json\n{\n  \"mcpServers\": {\n    \"microlink\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/mcp/src/index.js\"],\n      \"env\": {\n        \"MICROLINK_API_KEY\": \"YOUR_MICROLINK_API_KEY\"\n      }\n    }\n  }\n}\n```\n\n### Cursor\n\nAdd to your Cursor MCP settings (`.cursor/mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"microlink\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@microlink/mcp\"],\n      \"env\": {\n        \"MICROLINK_API_KEY\": \"YOUR_MICROLINK_API_KEY\"\n      }\n    }\n  }\n}\n```\n\n## Usage\n\nOnce the server is configured, talk to your assistant in plain language. It picks the right tool and parameters for you:\n\n- *\"Take a full-page screenshot of https://example.com in dark mode.\"* → `microlink_screenshot`\n- *\"Generate a Letter-size PDF of https://example.com.\"* → `microlink_pdf`\n- *\"Get the title, description, and image for https://example.com.\"* → `microlink_meta`\n- *\"Convert https://news.ycombinator.com to Markdown.\"* → `microlink_markdown`\n- *\"Find the playable video in this YouTube link.\"* → `microlink_video`\n- *\"Run a Lighthouse performance audit on https://example.com.\"* → `microlink_insights`\n- *\"Scrape every article title from this page using the `.title` selector.\"* → `microlink_extract` with `data`\n\nTools can also be invoked directly. Every tool takes a `url` and returns `structuredContent` (see [Response shape](#response-shape)):\n\n```json\n{\n  \"name\": \"microlink_screenshot\",\n  \"arguments\": {\n    \"url\": \"https://example.com\",\n    \"screenshot\": { \"fullPage\": true, \"type\": \"png\" },\n    \"colorScheme\": \"dark\"\n  }\n}\n```\n\n## Tools\n\n### Capabilities at a glance\n\n- `microlink_extract`: metadata extraction + custom scraping rules (`data`) + multi-capability composition in one call.\n- `microlink_screenshot`: screenshot generation with element/full-page modes and browser controls.\n- `microlink_pdf`: PDF generation with page/layout controls.\n- `microlink_video`: playable video source extraction.\n- `microlink_audio`: playable audio source extraction.\n- `microlink_insights`: Lighthouse + technology detection.\n- `microlink_meta`: normalized metadata extraction with include/exclude config.\n- `microlink_palette`: image palette and contrast color extraction.\n- `microlink_markdown`: URL to Markdown conversion.\n- `microlink_text`: URL to plain text conversion.\n- Cross-cutting request capabilities: device/viewport emulation, click/scroll actions, JS/CSS injection, modules, wait conditions, cache controls (`ttl`, `staleTtl`, `force`), retries/timeouts, media mode, headers/proxy, and endpoint/auth routing.\n\n### Response shape\n\n- All tools (`microlink_extract`, `microlink_screenshot`, `microlink_pdf`, `microlink_video`, `microlink_audio`, `microlink_insights`, `microlink_meta`, `microlink_palette`, `microlink_markdown`, `microlink_text`) return `structuredContent` with:\n  - `endpoint`, `requestUrl`, `finalUrl`, `statusCode`, `responseHeaders`, `microlink`\n  - `microlink` preserves Microlink API JSend payload (`status`, `data`, and error fields like `code`, `id`, `message`, `more`, `report`).\n  - `responseHeaders` includes key cache/rate headers (such as `x-cache-status`, `cf-cache-status`, `cache-control`, `x-rate-limit-*`) when present.\n  - MCP `isError` is set when transport fails or when `microlink.status !== \"success\"`.\n\nParameters labeled `PRO` in the official Microlink docs require a paid plan.\nFor compatibility with some MCP clients:\n- boolean parameters also accept the strings `\"true\"` and `\"false\"` and are normalized before validation.\n- parameters that accept objects also accept JSON stringified objects (for example, `screenshot: \"{\\\"overlay\\\":{\\\"browser\\\":\\\"dark\\\"}}\"`).\n\n### `microlink_extract`\n\nExtract structured metadata from any public URL. Returns normalized fields (`title`, `description`, `author`, `publisher`, `date`, `image`, `logo`, `lang`, `url`) plus any custom fields defined via CSS selectors.\n\nSupports combining multiple features in a single request: screenshot, PDF, video, audio, insights, and palette.\nFor `screenshot`, `pdf`, and `insights`, use `true` for defaults or an object for options. Empty objects (`{}`) are treated as `true`.\n\n**Key parameters:**\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `url` | `string` | The URL to extract data from *(required)* |\n| `apiKey` | `string` | Microlink API key *(optional; see [Authentication](#authentication))* |\n| `data` | `object` | Custom CSS-selector extraction rules |\n| `meta` | `boolean \\| object` | Include/exclude normalized metadata fields |\n| `embed` | `string` | Microlink embed mode |\n| `iframe` | `boolean \\| object` | Include iframe payload options |\n| `function` | `string` | Custom Microlink function hook |\n| `ping` | `boolean \\| object` | Enable ping checks |\n| `screenshot` | `boolean \\| object` | Capture a screenshot |\n| `pdf` | `boolean \\| object` | Generate a PDF |\n| `video` | `boolean` | Extract video source |\n| `audio` | `boolean` | Extract audio source |\n| `insights` | `boolean \\| object` | Run Lighthouse / tech detection |\n| `palette` | `boolean` | Extract color palette |\n| `adblock` | `boolean` | Enable ad blocking |\n| `animations` | `boolean` | Enable/disable animations |\n| `device` | `string` | Emulate a device (e.g. `\"iPhone 12\"`) |\n| `colorScheme` | `\"light\" \\| \"dark\" \\| \"no-preference\"` | Preferred color scheme |\n| `viewport` | `object` | Custom viewport dimensions |\n| `click` | `string \\| string[]` | CSS selector(s) to click before capture |\n| `scroll` | `string` | CSS selector to scroll to |\n| `javascript` | `boolean` | Toggle JavaScript execution |\n| `modules` | `string \\| string[]` | Browser module(s) to inject |\n| `scripts` | `string \\| string[]` | JavaScript to inject |\n| `styles` | `string \\| string[]` | CSS to inject |\n| `mediaType` | `\"screen\" \\| \"print\"` | CSS media mode |\n| `prerender` | `\"auto\" \\| boolean` | Prerender strategy |\n| `proxy` | `string \\| object` | Proxy configuration *(PRO)* |\n| `retry` | `number` | Retry count |\n| `ttl` | `string \\| number` | Cache TTL |\n| `staleTtl` | `string \\| number \\| boolean` | Stale cache TTL policy *(PRO)* |\n| `force` | `boolean` | Bypass cache |\n| `timeout` | `string \\| number` | Request timeout |\n| `headers` | `object` | Custom HTTP headers *(PRO)* |\n| `filename` | `string` | Preferred output filename *(PRO)* |\n| `filter` | `string` | Response filter |\n| `waitForSelector` | `string` | Wait for element before capture |\n| `waitForTimeout` | `string \\| number` | Wait an additional timeout before capture |\n| `waitUntil` | `string \\| string[]` | Navigation event(s): `auto`, `load`, `domcontentloaded`, `networkidle0`, `networkidle2` |\n\n---\n\n### `microlink_screenshot`\n\nCapture a screenshot of any public URL and receive a permanent CDN asset URL (`data.screenshot.url`).\nSet `screenshot` to `true` for defaults, or pass `screenshot: { ... }` for options. `screenshot: {}` is treated as `true`.\n\n**Key parameters:**\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `url` | `string` | The URL to screenshot *(required)* |\n| `screenshot` | `boolean \\| object` | Enable screenshot with defaults (`true`) or provide screenshot options (`{...}`); `{}` behaves as `true` |\n| `screenshot.fullPage` | `boolean` | Capture the full scrollable page |\n| `screenshot.element` | `string` | CSS selector to capture a specific element |\n| `screenshot.type` | `\"jpeg\" \\| \"png\"` | Output format (default: `\"png\"`) |\n| `screenshot.omitBackground` | `boolean` | Transparent background |\n| `screenshot.overlay` | `object` | Browser chrome overlay (`browser`: `\"light\"\\|\"dark\"`, `background`: CSS color) |\n| `screenshot.codeScheme` | `string` | Syntax-highlight theme for code pages (e.g. `\"dracula\"`) |\n| `colorScheme` | `\"light\" \\| \"dark\" \\| \"no-preference\"` | Preferred color scheme |\n| `device` | `string` | Device emulation |\n| `viewport` | `object` | Custom viewport |\n| `click` | `string \\| string[]` | Click before capture |\n| `scroll` | `string` | Scroll to element |\n| `scripts` | `string \\| string[]` | JavaScript to inject before capture |\n| `styles` | `string \\| string[]` | CSS to inject before capture |\n| `modules` | `string \\| string[]` | Browser module(s) to inject |\n| `proxy` | `string \\| object` | Proxy configuration *(PRO)* |\n| `headers` | `object` | Custom HTTP headers *(PRO)* |\n| `force` | `boolean` | Bypass cache |\n| `ttl` | `string \\| number` | Cache TTL |\n| `staleTtl` | `string \\| number \\| boolean` | Stale cache TTL policy *(PRO)* |\n| `retry` | `number` | Retry count |\n| `timeout` | `string \\| number` | Request timeout |\n| `prerender` | `\"auto\" \\| boolean` | Prerender strategy |\n| `adblock` | `boolean` | Enable ad blocking |\n| `animations` | `boolean` | Enable/disable animations |\n| `javascript` | `boolean` | Toggle JavaScript execution |\n| `mediaType` | `\"screen\" \\| \"print\"` | CSS media mode |\n| `filename` | `string` | Preferred output filename *(PRO)* |\n| `filter` | `string` | Response filter |\n| `waitForSelector` | `string` | Wait for element |\n| `waitForTimeout` | `string \\| number` | Wait an additional timeout before capture |\n| `waitUntil` | `string \\| string[]` | Navigation event(s): `auto`, `load`, `domcontentloaded`, `networkidle0`, `networkidle2` |\n\n---\n\n### `microlink_pdf`\n\nGenerate a PDF of any public URL and receive a permanent CDN asset URL (`data.pdf.url`).\nSet `pdf` to `true` for defaults, or pass `pdf: { ... }` for options. `pdf: {}` is treated as `true`.\n\n**Key parameters:**\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `url` | `string` | The URL to convert *(required)* |\n| `pdf` | `boolean \\| object` | Enable PDF with defaults (`true`) or provide PDF options (`{...}`); `{}` behaves as `true` |\n| `pdf.format` | `string` | Paper size: `\"A4\"` (default), `\"Letter\"`, `\"Legal\"`, `\"Tabloid\"`, `\"Ledger\"`, `\"A0\"`–`\"A6\"` |\n| `pdf.landscape` | `boolean` | Landscape orientation |\n| `pdf.margin` | `string \\| object` | Page margins (e.g. `\"0.35cm\"` or `{top, bottom, left, right}`) |\n| `pdf.scale` | `number` | Page scale factor (0.1–2.0) |\n| `pdf.pageRanges` | `string` | Page range (e.g. `\"1-5\"`) |\n| `pdf.width` / `pdf.height` | `string` | Custom dimensions (overrides `format`) |\n| `scripts` | `string \\| string[]` | JavaScript to inject before rendering |\n| `styles` | `string \\| string[]` | CSS to inject before rendering |\n| `modules` | `string \\| string[]` | Browser module(s) to inject |\n| `proxy` | `string \\| object` | Proxy configuration *(PRO)* |\n| `headers` | `object` | Custom HTTP headers *(PRO)* |\n| `force` | `boolean` | Bypass cache |\n| `ttl` | `string \\| number` | Cache TTL |\n| `staleTtl` | `string \\| number \\| boolean` | Stale cache TTL policy *(PRO)* |\n| `retry` | `number` | Retry count |\n| `timeout` | `string \\| number` | Request timeout |\n| `prerender` | `\"auto\" \\| boolean` | Prerender strategy |\n| `adblock` | `boolean` | Enable ad blocking |\n| `animations` | `boolean` | Enable/disable animations |\n| `javascript` | `boolean` | Toggle JavaScript execution |\n| `device` | `string` | Device emulation |\n| `viewport` | `object` | Custom viewport |\n| `filename` | `string` | Preferred output filename *(PRO)* |\n| `filter` | `string` | Response filter |\n| `mediaType` | `\"screen\" \\| \"print\"` | CSS media type |\n| `waitForSelector` | `string` | Wait for element |\n| `waitForTimeout` | `string \\| number` | Wait an additional timeout before rendering |\n| `waitUntil` | `string \\| string[]` | Navigation event(s): `auto`, `load`, `domcontentloaded`, `networkidle0`, `networkidle2` |\n\n---\n\n### `microlink_video`\n\nDetect and extract a playable video source from any URL. Returns the video URL in `data.video.url` along with `type`, `duration`, `size`, `width`, `height`, `duration_pretty`, and `size_pretty`.\n\nSupports YouTube, Vimeo, Twitter/X, TikTok, Instagram, Dailymotion, and hundreds of other platforms.\n\n**Key parameters:**\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `url` | `string` | The URL containing a video *(required)* |\n| `proxy` | `string \\| object` | Proxy for restricted platforms *(PRO)* |\n| `meta` | `boolean \\| object` | Include/suppress page metadata |\n\n---\n\n### `microlink_audio`\n\nDetect and extract a playable audio source from any URL. Returns the audio URL in `data.audio.url` along with `type`, `duration`, `size`, `duration_pretty`, and `size_pretty`.\n\nSupports SoundCloud, Spotify, Mixcloud, and other audio platforms.\n\n**Key parameters:**\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `url` | `string` | The URL containing audio *(required)* |\n| `proxy` | `string \\| object` | Proxy for restricted platforms *(PRO)* |\n| `meta` | `boolean \\| object` | Include/suppress page metadata |\n\n---\n\n### `microlink_insights`\n\nGet web performance and technology-stack insights for any URL.\nSet `insights` to `true` for defaults, or pass `insights: { ... }` for options. `insights: {}` is treated as `true`.\n\n**Key parameters:**\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `url` | `string` | The URL to analyze *(required)* |\n| `insights` | `boolean \\| object` | Enable default insights (`true`) or provide insights options (`{...}`); `{}` behaves as `true` |\n| `insights.lighthouse` | `boolean \\| object` | Run a Lighthouse audit |\n| `insights.lighthouse.output` | `\"json\" \\| \"html\" \\| \"csv\"` | Report format (default: `\"json\"`) |\n| `insights.lighthouse.preset` | `string` | Audit preset: `\"default\"`, `\"desktop\"`, `\"perf\"`, `\"experimental\"`, `\"full\"`, `\"lr-desktop\"`, `\"lr-mobile\"` |\n| `insights.lighthouse.onlyCategories` | `string \\| string[]` | Lighthouse category IDs (e.g. `[\"performance\", \"accessibility\"]`) |\n| `insights.technologies` | `boolean` | Detect tech stack via Wappalyzer |\n\n---\n\n### `microlink_meta`\n\nExtract normalized metadata from any public URL. Returns: `title`, `description`, `lang`, `author`, `publisher`, `date`, `url`, `image` (with dimensions and file info), and `logo` (publisher favicon).\n\n**Key parameters:**\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `url` | `string` | The URL to inspect *(required)* |\n| `meta` | `boolean \\| object` | `false` to skip all metadata; object to include/exclude specific fields (e.g. `{ logo: true, title: true }`) |\n\n---\n\n### `microlink_palette`\n\nExtract a color palette from images detected on any public URL. For each image returns: `palette` (hex colors from most to least dominant), `background_color` (optimal WCAG-contrast background), `color` (best overlay color), and `alternative_color`.\n\nColor data is nested under each image field (e.g. `data.image.palette`). Useful for generating design tokens, theming, or accessibility checks.\n\n**Key parameters:**\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `url` | `string` | The URL to analyze *(required)* |\n| `meta` | `boolean \\| object` | Control metadata fields returned |\n| `palette` | `boolean` | Enable palette extraction (default: `true`) |\n\n---\n\n### `microlink_markdown`\n\nConvert any public URL to Markdown. Returns JSON output with Markdown content in `microlink.data.markdown`, useful for extracting readable content from web pages, articles, and documentation.\n\n**Key parameters:**\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `url` | `string` | The URL to convert *(required)* |\n| `apiKey` | `string` | Microlink API key *(optional)* |\n\n---\n\n### `microlink_text`\n\nExtract plain text from any public URL. Returns JSON output with plain text content in `microlink.data.text`.\n\n**Key parameters:**\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `url` | `string` | The URL to extract text from *(required)* |\n| `apiKey` | `string` | Microlink API key *(optional)* |\n\n---\n\n## Skills\n\nThis package bundles [Agent Skills](https://agentskills.io) in the [`skills/`](./skills)\ndirectory. Each skill is a self-contained `SKILL.md` that teaches an AI agent how to\naccomplish a task with the Microlink MCP tools above. They follow the open Agent Skills\nstandard, so they work with any agent that supports it (Claude Code, Claude Desktop,\nCursor, VS Code agents, and others).\n\n| Skill | What it does | Tools used |\n|-------|--------------|------------|\n| [`capture-web-screenshot`](./skills/capture-web-screenshot/SKILL.md) | Screenshots \u0026 PDFs (full-page, element, device, dark mode, OG images) | `microlink_screenshot`, `microlink_pdf` |\n| [`extract-web-content`](./skills/extract-web-content/SKILL.md) | URL → clean Markdown, plain text, metadata, or custom CSS-scraped fields | `microlink_markdown`, `microlink_text`, `microlink_meta`, `microlink_extract` |\n| [`build-link-preview`](./skills/build-link-preview/SKILL.md) | Rich link-unfurl / social cards from metadata, palette, and thumbnail | `microlink_meta`, `microlink_palette`, `microlink_screenshot` |\n| [`audit-website-insights`](./skills/audit-website-insights/SKILL.md) | Lighthouse performance / SEO / a11y audits and tech-stack detection | `microlink_insights` |\n| [`extract-media-source`](./skills/extract-media-source/SKILL.md) | Resolve a page to a direct, playable video or audio source URL | `microlink_video`, `microlink_audio` |\n\nTo use a skill in Claude Code, copy its directory into `.claude/skills/`. For other\nagents, see your tool's skills or extensions catalog. More detail in\n[`skills/README.md`](./skills/README.md).\n\n---\n\n## Authentication\n\nEvery tool accepts an optional `apiKey` parameter. The key is resolved from these sources in order of priority:\n\n1. `apiKey` field in the tool input parameters\n2. `Authorization: Bearer \u003ckey\u003e` header from the MCP request\n3. `x-api-key` header from the MCP request\n4. `MICROLINK_API_KEY` environment variable\n\nThe `MICROLINK_API_KEY` environment variable is the recommended approach for most integrations. Get your key at [microlink.io](https://microlink.io).\n\nIf an API key is present, requests are sent to `https://pro.microlink.io`; otherwise they go to `https://api.microlink.io` (free endpoint).\n\nWhen the free endpoint returns `429`, this MCP adds a clear hint in the tool error message: free daily quota reached (`50 requests/day`) and upgrade/API key guidance at [microlink.io/#pricing](https://microlink.io/#pricing).\n\n## License\n\n**microlink** © [Microlink](https://microlink.io), released under the [MIT](https://github.com/microlinkhq/mcp/blob/master/LICENSE.md) License.\u003cbr\u003e\nAuthored and maintained by [Kiko Beats](https://kikobeats.com) with help from [contributors](https://github.com/microlinkhq/mcp/contributors).\n\n\u003e [microlink.io](https://microlink.io) · GitHub [microlinkhq](https://github.com/microlinkhq) · X [@microlinkhq](https://x.com/microlinkhq)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrolinkhq%2Fmcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmicrolinkhq%2Fmcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrolinkhq%2Fmcp/lists"}