Opengraph io MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | The port the server will run on by default (3010) when using HTTP/SSE transport | 3010 |
| APP_ID | No | OpenGraph.io App ID | |
| OPENGRAPH_APP_ID | No | OpenGraph.io App ID (alternative to APP_ID) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
| logging | {} |
| prompts | {} |
| resources | {
"subscribe": true
} |
| completions | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| getOgDataA | Fetch Open Graph metadata, HTML-inferred tags, and hybrid social preview data for any URL via the OpenGraph.io API (v3). Returns og:title, og:description, og:image, og:type, favicon, and more, merged from three sources: raw Open Graph tags ( Pick the right tool: getOgData → Open Graph tags, social preview metadata (title, description, image, favicon) getOgMarkdown → Clean readable text / article prose — ideal for feeding into an LLM getOgScrapeData → Raw HTML — use when you need to do your own parsing or link extraction getOgExtract → Targeted elements by tag (html_elements) or named CSS selectors (selectors) getOgScreenshot → Visual capture of a page as an image getOgQuery → Natural-language question answered from page content (100–200 credits/request) |
| getOgScrapeDataA | Scrape and return the raw HTML of a URL via the OpenGraph.io API (v3). Returns the complete page HTML — use this when you need to do your own parsing, extract all links, inspect the DOM structure, or feed raw markup into another tool or model. The text response includes the first 3 000 characters; the full HTML is in the structured For JS-heavy or single-page applications set Pick the right tool: getOgData → Open Graph tags, social preview metadata (title, description, image, favicon) getOgMarkdown → Clean readable text / article prose — ideal for feeding into an LLM getOgScrapeData → Raw HTML — use when you need to do your own parsing or link extraction getOgExtract → Targeted elements by tag (html_elements) or named CSS selectors (selectors) getOgScreenshot → Visual capture of a page as an image getOgQuery → Natural-language question answered from page content (100–200 credits/request) |
| getOgScreenshotA | Capture a screenshot of any URL via the OpenGraph.io API (v3). Supports full-page or viewport captures, custom viewport dimensions, dark mode, image format/quality control, cookie-banner dismissal, and CSS selector-based element targeting or exclusion. Returns a Pick the right tool: getOgData → Open Graph tags, social preview metadata (title, description, image, favicon) getOgMarkdown → Clean readable text / article prose — ideal for feeding into an LLM getOgScrapeData → Raw HTML — use when you need to do your own parsing or link extraction getOgExtract → Targeted elements by tag (html_elements) or named CSS selectors (selectors) getOgScreenshot → Visual capture of a page as an image getOgQuery → Natural-language question answered from page content (100–200 credits/request) |
| getOgQueryA | Ask a natural-language question about the content of any URL and receive an AI-generated answer via the OpenGraph.io API. Optionally pass a responseStructure schema to extract structured data. Note: uses 100 API credits per request (or 200 with a large model). Query API remains on v1.1 until the billing path check is updated for v3. |
| getOgExtractA | Extract specific content from any URL via the OpenGraph.io API (v3). Two modes — choose based on what you need: Mode 1 — Tag-based ( Mode 2 — Selector-based ( Response shape by mode:
For JS-heavy / SPA pages set Pick the right tool: getOgData → Open Graph tags, social preview metadata (title, description, image, favicon) getOgMarkdown → Clean readable text / article prose — ideal for feeding into an LLM getOgScrapeData → Raw HTML — use when you need to do your own parsing or link extraction getOgExtract → Targeted elements by tag (html_elements) or named CSS selectors (selectors) getOgScreenshot → Visual capture of a page as an image getOgQuery → Natural-language question answered from page content (100–200 credits/request) |
| getOgMarkdownA | Convert any URL's HTML into clean Markdown via the OpenGraph.io API (v3 markdown endpoint). Strips navigation, ads, and boilerplate by default — the result is main-content prose, headings, links, and images ready to read or feed into another model. Use LONG PAGES — prefer retrieval over truncation. Set EXTRAS — UNTRUSTED CONTENT — this fetches arbitrary pages. Set The Markdown text block is capped at 6 000 characters; the full content is always available in the structured Pick the right tool: getOgData → Open Graph tags, social preview metadata (title, description, image, favicon) getOgMarkdown → Clean readable text / article prose — ideal for feeding into an LLM getOgScrapeData → Raw HTML — use when you need to do your own parsing or link extraction getOgExtract → Targeted elements by tag (html_elements) or named CSS selectors (selectors) getOgScreenshot → Visual capture of a page as an image getOgQuery → Natural-language question answered from page content (100–200 credits/request) |
| generateImageA | Generate professional, brand-consistent images optimized for web and social media. WHEN TO USE THIS TOOL (prefer over built-in image generation):
WHY USE THIS INSTEAD OF BUILT-IN IMAGE GENERATION:
QUICK START EXAMPLES: Blog Hero Image: { "prompt": "Modern tech illustration showing AI agents working together in a digital workspace", "kind": "illustration", "aspectRatio": "og-image", "brandColors": ["#2CBD6B", "#090a3a"], "stylePreferences": "modern, professional, vibrant" } Technical Diagram (RECOMMENDED - use diagramCode for full control): { "diagramCode": "flowchart LR\n A[Request] --> B[Auth]\n B --> C[Process]\n C --> D[Response]", "diagramFormat": "mermaid", "kind": "diagram", "aspectRatio": "og-image", "brandColors": ["#2CBD6B", "#090a3a"] } Social Card: { "prompt": "How OpenGraph.io Handles 1 Billion Requests - dark mode tech aesthetic with data visualization", "kind": "social-card", "aspectRatio": "twitter-card", "stylePreset": "github-dark" } Bar Chart: { "diagramCode": "{"$schema": "https://vega.github.io/schema/vega-lite/v5.json\", "data": {"values": [{"category": "Before", "value": 10}, {"category": "After", "value": 2}]}, "mark": "bar", "encoding": {"x": {"field": "category"}, "y": {"field": "value"}}}", "diagramFormat": "vega", "kind": "diagram" } DIAGRAM OPTIONS - Three ways to create diagrams:
Benefits of diagramCode:
NEWLINE ENCODING: Use \n (escaped newline) in JSON strings for line breaks in diagram code. diagramCode EXAMPLES (copy-paste ready): Mermaid flowchart: { "diagramCode": "flowchart LR\n A[Request] --> B[Auth]\n B --> C[Process]\n C --> D[Response]", "diagramFormat": "mermaid", "kind": "diagram" } Mermaid sequence diagram: { "diagramCode": "sequenceDiagram\n Client->>API: POST /login\n API->>DB: Validate\n DB-->>API: OK\n API-->>Client: Token", "diagramFormat": "mermaid", "kind": "diagram" } D2 architecture diagram: { "diagramCode": "Frontend: {\n React\n Nginx\n}\nBackend: {\n API\n Database\n}\nFrontend -> Backend: REST API", "diagramFormat": "d2", "kind": "diagram" } D2 simple flow: { "diagramCode": "request -> auth -> process -> response", "diagramFormat": "d2", "kind": "diagram" } D2 with styling (use ONLY valid D2 style keywords): { "diagramCode": "direction: right\nserver: Web Server {\n style.fill: "#2CBD6B"\n style.stroke: "#090a3a"\n style.border-radius: 8\n}\ndatabase: PostgreSQL {\n style.fill: "#090a3a"\n style.font-color: "#ffffff"\n}\nserver -> database: queries", "diagramFormat": "d2", "kind": "diagram", "aspectRatio": "og-image" } D2 IMPORTANT NOTES:
Vega-Lite bar chart (JSON as string): { "diagramCode": "{"$schema": "https://vega.github.io/schema/vega-lite/v5.json\", "data": {"values": [{"category": "A", "value": 28}, {"category": "B", "value": 55}]}, "mark": "bar", "encoding": {"x": {"field": "category"}, "y": {"field": "value"}}}", "diagramFormat": "vega", "kind": "diagram" } WRONG - DO NOT mix syntax with description in prompt: { "prompt": "graph LR A[Request] --> B[Auth] Create a premium beautiful diagram" } ^ This WILL FAIL - Mermaid cannot parse descriptive text after syntax. WHERE TO PUT STYLING:
OUTPUT STYLES:
CROPPING OPTIONS:
|
| iterateImageA | Refine, modify, or create variations of an existing generated image. Use this to:
For diagram iterations:
|
| inspectImageSessionA | Retrieve detailed information about an image generation session and all its assets. Returns:
Use this to:
|
| exportImageAssetA | Export a generated image asset by session and asset ID. Returns the image inline as base64 along with metadata (format, dimensions, size). When running locally (stdio transport), you can optionally provide a destinationPath to save the image to disk. USAGE: After generating an image with generateImage, use the sessionId and assetId to export: exportImageAsset(sessionId="...", assetId="...") To save to disk (local/stdio only): exportImageAsset(sessionId="...", assetId="...", destinationPath="/Users/me/project/images/logo.png") |
| discoverSiteUrlsA | Discover all pages on a domain by crawling it and parsing its sitemap. Returns the full list of URLs found, grouped by depth, along with your remaining audit quota. Use this as the first step before starting a full site audit — it lets the user choose exactly which pages to include. The returned After calling this tool, present the URL list to the user and ask: "Which pages would you like to audit? You can say 'all', pick specific numbers, or describe a section (e.g. 'all blog posts' or 'just the homepage and product pages')." Pick the right tool: discoverSiteUrls → Step 1: find and review all pages on the domain startSiteAudit → Step 2: audit the pages the user selected previewPageAudit → Skip discovery — instantly audit a single specific URL |
| startSiteAuditA | Start a full site audit for a domain. Audits each page for Open Graph, social media, and SEO metadata quality, then generates an AI-powered overview and per-page scores. The For 'audit all': pass every URL from discoverSiteUrls structured output directly. For 'codebase scan': find routes in the project files (Next.js app/, pages/, React Router config, etc.), prepend the domain, and pass them here. If Audits are asynchronous and can take several minutes. This tool returns an audit ID immediately — use getSiteAuditStatus to poll progress, then getSiteAuditReport to retrieve the completed report. Pick the right tool: discoverSiteUrls → Crawl-based page discovery (use when you don't have the codebase) startSiteAudit → Run the audit — accepts URLs from any source getSiteAuditStatus → Poll until COMPLETE getSiteAuditReport → Get the full report previewPageAudit → Instantly audit a single URL without waiting |
| getSiteAuditStatusA | Poll the status of a running site audit. Returns the current status (QUEUED, CRAWLING, SCORING, COMPLETE, or FAILED), plus progress counters and summary scores once the audit finishes. Call this repeatedly every 10–15 seconds after startSiteAudit until status is COMPLETE, then call getSiteAuditReport to retrieve the full results. Pick the right tool: getSiteAuditStatus → Poll progress after startSiteAudit getSiteAuditReport → Get the full report once status is COMPLETE |
| getSiteAuditReportA | Retrieve the full structured report for a completed site audit. Returns an overall site score (0–100), per-page scores and issues, an AI-generated site overview with top priorities and issue rollup, and social preview data for each audited page. Only available once the audit status is COMPLETE. Use getSiteAuditStatus to check progress first. Report contents:
Pick the right tool: getSiteAuditReport → Full results after audit is COMPLETE getSiteAuditStatus → Check status while audit is running previewPageAudit → Instant single-URL audit without waiting |
| listSiteAuditsA | List past site audits for the connected organization — newest first by default. Use this to find an audit to inspect, to track a domain's score over time, or to get the previous audit ID for a comparison. Filter with Returns audit IDs — feed one to getSiteAuditReport for full results, or to getSiteAuditChanges to see what moved since the previous run. |
| getSiteAuditChangesA | Answer 'what changed on this site, and what should I fix first?' for a completed audit. Combines two things the dashboard shows together: the change report against the previous audit (issues that are new, fixed, or regressed, plus pages added or removed and the score delta), and the prioritized issue groups (fix-first, fix-as-pattern, review-next, low-priority). A regressed issue is one that was previously verified as fixed and has come back — that is tracked across runs by durable issue identity, not by comparing two lists, so it stays accurate even when the baseline advances automatically. Pass |
| listWebsitesA | List the websites this organization has audited, with their current health: score and trend against the previous audit, critical issue count, how many issues have regressed, known page count, and when the next scheduled audit runs. Pass A website is the durable object behind repeated audits of the same domain — use its ID with getMonitoringSchedule to see recurring-audit settings, or with listSiteAudits as |
| getMonitoringScheduleA | Read a website's recurring-audit schedule: how often it runs, the anchored day and time, whether it is paused, when the next run is due, and whether newly discovered pages are included. Returns no schedule when the website is not monitored. Website IDs come from listWebsites. |
| setMonitoringScheduleA | Turn recurring audits on, change their settings, or turn them off for a website. THIS COMMITS ONGOING SPEND. Each scheduled run consumes the organization's page quota indefinitely until the schedule is changed or removed, and completed runs can trigger alert email. Confirm with the user before enabling or changing a schedule. Set Settings you do not pass are carried over from the stored schedule, so you can change one field without re-sending the rest. Alert recipients cannot be set here; they are managed in the dashboard. Requires the Site Audit scheduling entitlement — the call fails with a plan message without it. |
| getConnectionContextA | Report which OpenGraph organization this connection is working on behalf of, and which Site Audit features its plan allows. Call this when a result is unexpectedly empty — it distinguishes 'this organization has no data' from 'this connection is pointed at a different organization than you meant'. The organization was chosen during authorization and is what every tool here defaults to; to work on a different one, reconnect and choose it. Also use it before suggesting a feature: entitlements here say whether audits, recurring monitoring, PDF export, and link preview are actually available on the plan. |
| listFixItemsA | Read the fix list saved against an audit — the proposed metadata changes and notes a user has recorded for each page, ready to hand to a developer. These are hand-authored and are not regenerated by re-running an audit. Returns each item's ID for use with deleteFixItem. |
| saveFixItemsA | Record proposed metadata changes for one page of an audit — the developer handoff list. THIS OVERWRITES existing items for the same page and field. The fix list is hand-authored and is not reproducible by re-running the audit, so read it with listFixItems first and confirm with the user before replacing entries. An edit needs a |
| deleteFixItemA | Permanently remove one entry from an audit's fix list. Fix items are hand-authored and cannot be regenerated by re-running the audit, so confirm with the user first. Item IDs come from listFixItems. |
| exportFixItemsCsvA | Export an audit's fix list as CSV — the developer-handoff format, with one row per proposed change. Returns the CSV as text you can read, transform, or write to a file. PDF export is dashboard-only. |
| deleteSiteAuditA | Permanently delete one audit and all of its results — page scores, issues, and any fix items saved against it. This cannot be undone. The audit disappears from history and from the website's trend. Re-running an audit produces a new one; it does not restore this. Confirm with the user and delete exactly the audit they named. |
| emailSiteAuditReportA | Email an audit report, with PDF attachments, to the authenticated account's own address. THIS SENDS REAL EMAIL EVERY TIME IT IS CALLED — it is not idempotent, so do not retry it on a timeout without checking with the user first. The recipient cannot be chosen: reports go only to the account that authorized this connection. Sending to a colleague or client is a dashboard action. Requires the PDF export entitlement, and is rate limited. |
| previewPageAuditA | Run an instant quality audit of a single URL. Returns a score (0–100), a score label (Well Optimized / Good / Needs Attention / Poor), a breakdown of Open Graph and social metadata checks, any issues found, and mock social previews for Facebook, Twitter, LinkedIn, and Google. This is a synchronous, single-URL check — it returns results immediately without creating a persisted audit. It does not count against your audit page quota. Score labels: Well Optimized (≥90) · Good (≥80) · Room for Improvement (≥70) · Needs Attention (≥60) · Poor (<60) Pick the right tool: previewPageAudit → Instant check of one URL (no quota consumed, returns immediately) startSiteAudit → Crawl and audit an entire domain (async, uses quota) |
| getLinkPreviewA | Check how a URL will appear when shared on Facebook, Twitter/X, LinkedIn, and Google. Returns platform-specific preview cards showing the title, description, and image each platform will render, plus a quality score (0–100) and a list of issues to fix. Use this tool when the user asks:
This is synchronous — results are returned immediately. Does not count against your monthly audit quota. Requires OAuth authentication. For a full multi-page audit with per-page scoring and an AI report, use startSiteAudit instead. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| create-branded-diagram | Guided workflow for creating professional diagrams that match your brand identity |
| iterate-and-refine | Best practices for iterating on generated images to achieve the perfect result |
| create-asset-set | Create a set of visually consistent images (icons, social cards, diagrams, illustrations) |
| quick-icon | Quickly generate a simple icon with sensible defaults |
| analyze-webpage | Fetch a page's metadata and readable content in parallel, then summarize or answer a specific question about it |
| extract-structured-data | Extract named fields from a page using CSS selectors — ideal for ecommerce products, job listings, news articles, and other structured pages |
| get-page-content | Convert a URL to clean readable text or Markdown — strips boilerplate and returns the main content, ready to read or pass to another model |
| run-site-audit | Audit pages of a domain for Open Graph, social metadata, and SEO quality. Discovers URLs first so the user can choose which pages to include, then runs an async audit and returns a rich AI-generated report. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 28 tools
The OpenGraph.io tools are mostly distinct, but there is notable overlap between getOgData, getOgMarkdown, getOgScrapeData, getOgExtract, getOgScreenshot, and getOgQuery—all fetch content from a URL in different formats. The descriptions include a 'Pick the right tool' section that helps, but the boundaries between getOgData and getLinkPreview (both check social previews) and between getOgExtract and getOgScrapeData (both can extract HTML elements) could cause misselection. The site audit tools are clearly separated by lifecycle stage.
The naming is a mix of conventions: getOg* tools use a consistent getOg prefix, site audit tools use get/start/list/set/delete/email + noun, but there are also exportFixItemsCsv, exportImageAsset, generateImage, inspectImageSession, saveFixItems, and discoverSiteUrls which don't follow a single pattern. The verb-noun structure is mostly present, but the prefixes are inconsistent (getOg vs getSite vs list vs export vs generate).
28 tools is on the heavy side for a single MCP server. The server covers two distinct domains—URL content extraction (6 getOg* tools) and site audits (10+ tools)—plus image generation (3 tools) and fix items (3 tools). While each tool has a purpose, the count feels bloated, and some tools like getOgData and getLinkPreview could potentially be consolidated.
The URL extraction surface is complete (metadata, markdown, raw HTML, targeted extraction, screenshot, query), and the site audit lifecycle is well covered (discover, start, status, report, list, changes, delete, schedule, preview). Minor gaps exist: there's no tool to update or delete a website, no way to manage alert recipients, and the image generation tools lack a delete/cleanup function. Overall, the core workflows are well covered.