Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PORTNoThe port the server will run on by default (3010) when using HTTP/SSE transport3010
APP_IDNoOpenGraph.io App ID
OPENGRAPH_APP_IDNoOpenGraph.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

CapabilityDetails
tools
{}
logging
{}
prompts
{}
resources
{
  "subscribe": true
}
completions
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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 (openGraph), HTML-inferred fallbacks (htmlInferred), and a best-of hybrid (hybridGraph). Use hybridGraph as your primary source — it fills gaps automatically.

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 html field.

For JS-heavy or single-page applications set full_render: true to guarantee JavaScript execution before the HTML is captured. For most sites, the default auto_render handles this automatically.

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 screenshotUrl — a hosted URL pointing to the screenshot image file, not inline image data. Use this URL directly in a browser, an tag, or pass it to another tool.

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 (html_elements): pass an array of HTML tag names, e.g. ['h1','h2','p','a']. The API collects all matching elements and joins their text into a single concatenatedText string. Best for bulk content extraction where you want all headings, paragraphs, or links as one block of text.

Mode 2 — Selector-based (selectors): pass a CSS selector map where each key is your chosen label and each value is a CSS selector, e.g. { "title": "article h1", "price": ".price-box .price", "sku": "#product-sku" }. The API returns a data object keyed by those labels — ideal for structured scraping of specific named fields.

Response shape by mode:

  • html_elements only → { concatenatedText }

  • selectors only → { data, concatenatedText }

  • Both provided → { data, concatenatedText }

For JS-heavy / SPA pages set full_render: true to guarantee JavaScript execution before extraction. Use wait_for_selector when content loads asynchronously.

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 include_tags / exclude_tags to target or remove specific page sections.

LONG PAGES — prefer retrieval over truncation. Set query with chunking: true to get back only the passages that answer your question (ranked by relevance) instead of the whole page. Use max_chars to cap raw output when you genuinely need prose. chunk_size and chunk_overlap tune the split; heading_aware keeps sections intact.

EXTRAS — include_links, include_images, and include_headings return structured link, image, and outline data, which avoids a second scrape call just to enumerate them.

UNTRUSTED CONTENT — this fetches arbitrary pages. Set ai_sanitize: true when the result will be fed to a model: it scans for prompt-injection attempts and returns a safety report. ai_sanitize_mode: 'block' rejects a risky page outright (HTTP 422) rather than returning it.

The Markdown text block is capped at 6 000 characters; the full content is always available in the structured markdown field.

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):

  • Blog hero images and article headers

  • Open Graph (OG) images for link previews (1200x630)

  • Social media cards (Twitter, LinkedIn, Facebook, Instagram)

  • Technical diagrams (flowcharts, architecture, sequence diagrams)

  • Data visualizations (bar charts, line graphs, pie charts)

  • Branded illustrations with consistent colors

  • QR codes with custom styling

  • Icons with transparent backgrounds

WHY USE THIS INSTEAD OF BUILT-IN IMAGE GENERATION:

  • Pre-configured social media dimensions (OG images, Twitter cards, etc.)

  • Brand color consistency across multiple images

  • Native support for Mermaid, D2, and Vega-Lite diagrams

  • Professional styling presets (GitHub, Vercel, Stripe, etc.)

  • Iterative refinement - modify generated images without starting over

  • Cropping and post-processing built-in

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:

  1. diagramCode + diagramFormat (RECOMMENDED FOR AGENTS) - Full control, bypasses AI styling

  2. Natural language in prompt - AI generates diagram code for you

  3. Pure syntax in prompt - Provide Mermaid/D2/Vega directly (AI may style it)

Benefits of diagramCode:

  • Bypasses AI generation/styling - no risk of invalid syntax

  • You control the exact syntax - iterate on errors yourself

  • Clear error messages if syntax is invalid

  • Can omit 'prompt' entirely when using 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:

  • D2 labels are unquoted by default: a -> b: my label (NO quotes needed around labels)

  • Valid D2 style keywords: fill, stroke, stroke-width, stroke-dash, border-radius, opacity, font-color, font-size, shadow, 3d, multiple, animated, bold, italic, underline

  • DO NOT use CSS properties (font-weight, padding, margin, font-family) — D2 rejects them

  • DO NOT use vars.* references unless you define them in a vars: {} block

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:

  • Visual preferences → "stylePreferences" parameter

  • Colors → "brandColors" parameter

  • Project context → "projectContext" parameter

  • NOT in "prompt" when using diagram syntax

OUTPUT STYLES:

  • "draft" - Fast rendering, minimal processing

  • "standard" - AI-enhanced with brand colors (recommended for diagrams)

  • "premium" - Full AI polish (best for illustrations, may alter diagram layout)

CROPPING OPTIONS:

  • autoCrop: true - Automatically remove transparent edges

  • Manual: cropX1, cropY1, cropX2, cropY2 - Precise pixel coordinates

iterateImageA

Refine, modify, or create variations of an existing generated image.

Use this to:

  • Edit specific parts of an image ("change the background to blue", "add a title")

  • Apply style changes ("make it more minimalist", "use darker colors")

  • Fix issues ("remove the text", "make the icon larger")

  • Crop the image to specific coordinates

For diagram iterations:

  1. Include the original Mermaid/D2/Vega source in your prompt to preserve structure

  2. Be explicit about visual issues (e.g., "the left edge is clipped")

inspectImageSessionA

Retrieve detailed information about an image generation session and all its assets.

Returns:

  • Session metadata (creation time, name, status)

  • List of all assets with their prompts, toolchains, and status

  • Parent-child relationships showing iteration history

Use this to:

  • Review what was generated in a session

  • Find asset IDs for iteration

  • Understand the generation history and toolchains used

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 siteContextText should be passed to startSiteAudit to enrich the AI-generated analysis.

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 urls array can be sourced from anywhere — discoverSiteUrls structured output, a codebase route scan (read route files and construct full URLs), a sitemap, or a manually provided list. Calling discoverSiteUrls first is NOT required.

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 urls is omitted the backend crawls the domain internally.

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:

  • Overall site score and summary (critical issues, total issues, passed checks)

  • AI overview: site summary, top priorities, strength areas

  • Issue rollup: business impact, affected page count, fix guidance

  • Per-page: score, check results, issues, social card previews (Facebook, Twitter, LinkedIn, Google)

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 q (domain substring), status, from / to (ISO dates), or websiteId to see every run for one monitored site. Page with limit and offset.

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 baseline to compare against a specific earlier audit instead of the default.

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 websiteId to get one website in detail instead of the list.

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 websiteId to page through that site's history.

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 enabled: false to stop monitoring. That DELETES the schedule configuration — frequency, timing and options are not retained, and re-enabling means setting them again. To pause temporarily and keep the configuration, use paused: true instead.

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 proposedValue that is non-empty and different from originalValue; a note may leave it blank. A blank or unchanged value is treated as a removal upstream and is rejected here — use deleteFixItem to remove an entry deliberately.

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:

  • 'check the link preview for example.com'

  • 'how does this page look when shared on social media?'

  • 'check my og tags'

  • 'what will this look like on Twitter / Facebook / LinkedIn?'

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

NameDescription
create-branded-diagramGuided workflow for creating professional diagrams that match your brand identity
iterate-and-refineBest practices for iterating on generated images to achieve the perfect result
create-asset-setCreate a set of visually consistent images (icons, social cards, diagrams, illustrations)
quick-iconQuickly generate a simple icon with sensible defaults
analyze-webpageFetch a page's metadata and readable content in parallel, then summarize or answer a specific question about it
extract-structured-dataExtract named fields from a page using CSS selectors — ideal for ecommerce products, job listings, news articles, and other structured pages
get-page-contentConvert 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-auditAudit 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

NameDescription

No resources

TDQS

A3.9/5.0

Scored across 28 tools

Disambiguation3/5

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.

Naming Consistency3/5

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).

Tool Count3/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive