{
  "name": "diogenes-web-scraping-engine-mcp",
  "package": "web-scraping-engine",
  "server_id": "io.github.stand-out-of-my-sun/diogenes-web-scraping-engine",
  "tensorblock_profile_id": "github-stand-out-of-my-sun-diogenes-web-scraping-engine-mcp-a10dba4d",
  "version": "2.5.0",
  "description": "12 high-performance web extraction, readability & markdown tools: clean LLM markdown compiler, readable article extractor, OpenGraph & JSON-LD metadata parser, HTML table to JSON/Markdown converter, CSS selector isolator, paywall & overlay bypass auditor, XML sitemap crawler, hyperlink extractor, HTML XSS sanitizer, contact & lead info parser, SEO heading diagnostics, and RSS/Atom feed compiler.",
  "protocol": "mcp-2024-11-05",
  "transport": "streamable-http",
  "category": "Security",
  "license": "MIT",
  "maintainer": "@stand-out-of-my-sun",
  "auth": {
    "type": "none",
    "accountless": true,
    "summary": "No auth required for free tier, MCP tool discovery, and ?demo=true previews (no account, no API key, no registration). Optional pay-per-request L402/x402/MPP headers for production execution.",
    "headers": {
      "L402": "Authorization: L402 <macaroon>:<preimage_hex>",
      "x402": "X-Payment-Signature: <solana_tx_signature>",
      "MPP": "X-Payment-TxHash: <base_evm_tx_hash>"
    }
  },
  "install_confidence": "high",
  "verification": {
    "status": "verified",
    "maintainer": "@stand-out-of-my-sun",
    "tensorblock_json": "https://diogenes-micro-gateway.corinth.workers.dev/.well-known/tensorblock.json",
    "glama_json": "https://diogenes-micro-gateway.corinth.workers.dev/.well-known/glama.json",
    "health_check": "https://diogenes-micro-gateway.corinth.workers.dev/api/v1/health"
  },
  "homepage": "https://diogenes-micro-gateway.corinth.workers.dev",
  "endpoints": {
    "mcp_streamable_http": "https://diogenes-micro-gateway.corinth.workers.dev/mcp",
    "health": "https://diogenes-micro-gateway.corinth.workers.dev/api/v1/health",
    "docs": "https://diogenes-micro-gateway.corinth.workers.dev/llms.txt",
    "support": "https://github.com/stand-out-of-my-sun/diogenes-micro-gateway/issues",
    "l402_lightning": "diogenesrecv0e236a@coinos.io",
    "x402_solana": "3vuU9jvaohMG6oPY7NVrUggcSJ4CuhcByxoQk68EC6hj",
    "mpp_base_evm": "0x0E97828055Ea1291e57dB32EBEfC6e7b3F7AcACb",
    "garlicoin_segwit": "grlc1qnd34hu5jrde5akkezy3c6y4vzw6xtntpxwdwxh",
    "garlicoin_classic": "GY1YBTTfgCEjMspTxJUed3FkvSasNgMQWu",
    "bsc_grlc": "0x7E720EE1675fd81aCfF14692E864eCFA17dc3e3e",
    "bsc_wgrlc_contract": "0x7283DfA2d8D7e277b148cc263B5d8Ae02f1076D3"
  },
  "tools": [
    {
      "name": "extract_clean_markdown",
      "title": "Web HTML to Clean LLM-Optimized Markdown Engine",
      "description": "Converts raw HTML pages into clean, boilerplate-free, LLM-optimized Markdown with preserved hyperlinks and headings. Use when ingesting raw web documents or blog posts into agent context windows; for isolating tabular data into structured datasets, use parse_html_tables instead. Stateless read-only edge call (max 32 KB, 60 RPM): accepts 'html_content' ('conversion_mode' defaults to 'clean_semantic_article'), supports '?demo=true' or L402 (10 sats), and returns HTTP 400 if invalid.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "html_content": {
            "type": "string",
            "description": "Raw HTML string of the web page or document to convert to clean Markdown."
          },
          "conversion_mode": {
            "type": "string",
            "description": "Markdown extraction strategy: clean semantic article, preserve tables/code, or minimal text.",
            "enum": [
              "clean_semantic_article",
              "preserve_tables_and_code",
              "minimal_text_only"
            ]
          },
          "preserve_links": {
            "type": "boolean",
            "description": "Whether to retain anchor hyperlinks and image markdown references in output."
          }
        },
        "required": [
          "html_content"
        ]
      },
      "outputSchema": {
        "type": "object",
        "description": "Deterministic execution response schema for extract_clean_markdown.",
        "properties": {
          "markdown": {
            "type": "string",
            "description": "Clean, sanitized LLM-ready markdown document."
          },
          "title": {
            "type": "string",
            "description": "Document title extracted from H1 or title tag."
          },
          "word_count": {
            "type": "integer",
            "description": "Net word count of extracted readable prose."
          },
          "links_extracted_count": {
            "type": "integer",
            "description": "Total hyperlinks preserved in document."
          }
        },
        "required": [
          "markdown",
          "title",
          "word_count",
          "links_extracted_count"
        ]
      },
      "annotations": {
        "title": "Web HTML to Clean LLM-Optimized Markdown Engine",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "scrape_readable_article",
      "title": "Readability Article Body & Byline Extractor",
      "description": "Extracts primary article body, author bylines, publication timestamps, and estimated reading duration from web pages. Use when stripping navigation bars, advertisement containers, and cookie banners to isolate core editorial content; for converting full HTML to markdown, use extract_clean_markdown instead. Stateless read-only edge call (max 32 KB, 60 RPM): accepts 'html_content' ('readability_profile' defaults to 'article_body_strict'), supports '?demo=true' or L402 (10 sats), and returns HTTP 400 if invalid.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "html_content": {
            "type": "string",
            "description": "Target web page HTML containing the article, editorial post, or blog content."
          },
          "readability_profile": {
            "type": "string",
            "description": "Content isolation heuristic: strict article body, technical documentation, or forum thread.",
            "enum": [
              "article_body_strict",
              "technical_docs",
              "forum_discussion"
            ]
          },
          "include_byline": {
            "type": "boolean",
            "description": "Whether to parse author names, affiliations, and editorial publication dates."
          }
        },
        "required": [
          "html_content"
        ]
      },
      "outputSchema": {
        "type": "object",
        "description": "Deterministic execution response schema for scrape_readable_article.",
        "properties": {
          "title": {
            "type": "string",
            "description": "Extracted main article headline."
          },
          "byline": {
            "type": "string",
            "description": "Author credit or publishing editorial team."
          },
          "content_text": {
            "type": "string",
            "description": "Sanitized primary article narrative text."
          },
          "reading_time_minutes": {
            "type": "number",
            "description": "Estimated reading duration in minutes based on 220 WPM."
          },
          "excerpt": {
            "type": "string",
            "description": "Short leading synopsis or meta description."
          }
        },
        "required": [
          "title",
          "byline",
          "content_text",
          "reading_time_minutes",
          "excerpt"
        ]
      },
      "annotations": {
        "title": "Readability Article Body & Byline Extractor",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "extract_structured_metadata",
      "title": "OpenGraph, Twitter Cards & JSON-LD Microdata Extractor",
      "description": "Extracts OpenGraph tags, Twitter Card metadata, canonical URLs, and Schema.org JSON-LD microdata scripts from HTML. Use when indexing social share cards, author identity, breadcrumbs, and rich snippet schemas for AI search agents; for scanning page hyperlinks and outbound references, use extract_page_hyperlinks instead. Stateless read-only edge call (max 32 KB, 60 RPM): accepts 'html_content' ('metadata_targets' defaults to 'all_protocols'), supports '?demo=true' or L402 (10 sats), and returns HTTP 400 if invalid.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "html_content": {
            "type": "string",
            "description": "Source HTML string containing head tags, OpenGraph meta properties, or JSON-LD scripts."
          },
          "metadata_targets": {
            "type": "string",
            "description": "Target metadata protocol filter: all protocols, OpenGraph and Twitter, or Schema.org JSON-LD.",
            "enum": [
              "all_protocols",
              "opengraph_and_twitter",
              "schema_org_json_ld"
            ]
          },
          "include_favicons": {
            "type": "boolean",
            "description": "Whether to extract favicon links and Apple Touch icon references."
          }
        },
        "required": [
          "html_content"
        ]
      },
      "outputSchema": {
        "type": "object",
        "description": "Deterministic execution response schema for extract_structured_metadata.",
        "properties": {
          "open_graph": {
            "type": "object",
            "description": "Structured OpenGraph properties including og:title, og:image, and og:description."
          },
          "twitter_card": {
            "type": "object",
            "description": "Twitter Card metadata including twitter:card, twitter:creator, and twitter:image."
          },
          "json_ld_schemas": {
            "type": "array",
            "description": "Parsed Schema.org JSON-LD structured data objects."
          },
          "canonical_url": {
            "type": "string",
            "description": "Canonical canonical link target or empty string if unspecified."
          }
        },
        "required": [
          "open_graph",
          "twitter_card",
          "json_ld_schemas",
          "canonical_url"
        ]
      },
      "annotations": {
        "title": "OpenGraph, Twitter Cards & JSON-LD Microdata Extractor",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "parse_html_tables",
      "title": "HTML Table to Structured JSON & Markdown Parser",
      "description": "Detects and parses HTML table elements into structured JSON record arrays and GitHub-Flavored Markdown tabular grids. Use when converting financial statements, product comparison grids, or sports statistics into structured data tables; for extracting raw clean markdown prose, use extract_clean_markdown instead. Stateless read-only edge call (max 32 KB, 60 RPM): accepts 'html_content' ('output_format' defaults to 'markdown_and_json'), supports '?demo=true' or L402 (10 sats), and returns HTTP 400 if invalid.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "html_content": {
            "type": "string",
            "description": "Raw HTML string containing one or more table, thead, tbody, or tr elements."
          },
          "output_format": {
            "type": "string",
            "description": "Tabular export formatting standard: markdown and JSON, JSON records only, or CSV string.",
            "enum": [
              "markdown_and_json",
              "json_records_only",
              "csv_string"
            ]
          },
          "min_rows": {
            "type": "integer",
            "description": "Minimum rows required for a table to be parsed and retained."
          }
        },
        "required": [
          "html_content"
        ]
      },
      "outputSchema": {
        "type": "object",
        "description": "Deterministic execution response schema for parse_html_tables.",
        "properties": {
          "tables_found": {
            "type": "integer",
            "description": "Count of valid HTML tables detected and transformed."
          },
          "markdown_tables": {
            "type": "array",
            "description": "List of GitHub-Flavored Markdown formatted table strings."
          },
          "structured_records": {
            "type": "array",
            "description": "Parsed array of row objects keyed by header column titles."
          }
        },
        "required": [
          "tables_found",
          "markdown_tables",
          "structured_records"
        ]
      },
      "annotations": {
        "title": "HTML Table to Structured JSON & Markdown Parser",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "isolate_css_selectors",
      "title": "Deterministic Edge DOM CSS Selector Scraper & Isolator",
      "description": "Evaluates CSS selector queries against HTML DOM trees to extract targeted inner text, outer HTML, or element attributes. Use when targeting specific elements like pricing badges, product titles, review cards, or navigation breadcrumbs; for parsing unstructured contact information, use extract_contact_info instead. Stateless read-only edge call (max 32 KB, 60 RPM): accepts 'html_content' and 'selector_query' ('extraction_mode' defaults to 'inner_text'), supports '?demo=true' or L402 (10 sats), and returns HTTP 400 if invalid.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "html_content": {
            "type": "string",
            "description": "HTML source markup to query against using CSS selector matching rules."
          },
          "selector_query": {
            "type": "string",
            "description": "CSS selector query expression (e.g., '.pricing-card', '#main h2', 'article p')."
          },
          "extraction_mode": {
            "type": "string",
            "description": "DOM extraction representation: text content, outer HTML snippet, or attribute key-value map.",
            "enum": [
              "inner_text",
              "outer_html",
              "attribute_map"
            ]
          }
        },
        "required": [
          "html_content",
          "selector_query"
        ]
      },
      "outputSchema": {
        "type": "object",
        "description": "Deterministic execution response schema for isolate_css_selectors.",
        "properties": {
          "matched_count": {
            "type": "integer",
            "description": "Number of DOM nodes matching the provided CSS selector query."
          },
          "elements": {
            "type": "array",
            "description": "Extracted textual or markup contents of matched DOM elements."
          },
          "selector_used": {
            "type": "string",
            "description": "Normalized CSS selector executed during edge DOM traversal."
          }
        },
        "required": [
          "matched_count",
          "elements",
          "selector_used"
        ]
      },
      "annotations": {
        "title": "Deterministic Edge DOM CSS Selector Scraper & Isolator",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "detect_paywall_and_bypass",
      "title": "DOM Paywall, Modal Gate & Blurred Content Recovery Auditor",
      "description": "Audits web page DOM hierarchies to detect soft paywalls, blur overlays, modal gates, and recovers concealed body text. Use when diagnosing paywall obstructions, diagnosing subscriber gating scripts, or auditing content access barriers; for assessing general SEO hygiene, use evaluate_seo_diagnostics instead. Stateless read-only edge call (max 32 KB, 60 RPM): accepts 'html_content' ('detection_profile' defaults to 'heuristic_dom_overlay'), supports '?demo=true' or L402 (15 sats), and returns HTTP 400 if invalid.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "html_content": {
            "type": "string",
            "description": "Target web page HTML markup suspected of containing soft paywalls or paywall modals."
          },
          "detection_profile": {
            "type": "string",
            "description": "Paywall detection heuristic: heuristic DOM overlay, hidden text recovery, or strict access barrier audit.",
            "enum": [
              "heuristic_dom_overlay",
              "hidden_text_recovery",
              "strict_audit"
            ]
          },
          "target_domain": {
            "type": "string",
            "description": "Optional publishing domain name to look up publisher gating patterns."
          }
        },
        "required": [
          "html_content"
        ]
      },
      "outputSchema": {
        "type": "object",
        "description": "Deterministic execution response schema for detect_paywall_and_bypass.",
        "properties": {
          "paywall_detected": {
            "type": "boolean",
            "description": "True if paywall scripts, blur filters, or gate overlays were identified."
          },
          "paywall_type": {
            "type": "string",
            "description": "Classification of paywall barrier (e.g., soft_modal_overlay, blurred_content, hard_truncation)."
          },
          "recovered_content": {
            "type": "string",
            "description": "Recovered readable prose extracted from under DOM overlay or script tags."
          },
          "confidence_score": {
            "type": "number",
            "description": "Confidence metric between 0.0 and 1.0 regarding paywall detection."
          }
        },
        "required": [
          "paywall_detected",
          "paywall_type",
          "recovered_content",
          "confidence_score"
        ]
      },
      "annotations": {
        "title": "DOM Paywall, Modal Gate & Blurred Content Recovery Auditor",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "crawl_sitemap_urls",
      "title": "XML Sitemap & Index Crawler Tree Decompiler",
      "description": "Parses XML sitemaps and sitemap index files into structured URL trees with change frequency and last-modified filters. Use when discovering domain architectures, mapping crawl frontiers, or indexing blog/product catalogues; for extracting on-page hyperlinks from raw HTML, use extract_page_hyperlinks instead. Stateless read-only edge call (max 32 KB, 60 RPM): accepts 'sitemap_xml' ('filter_criteria' defaults to 'all_entries'), supports '?demo=true' or L402 (15 sats), and returns HTTP 400 if invalid.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sitemap_xml": {
            "type": "string",
            "description": "XML string of the sitemap or sitemapindex file to inspect and parse."
          },
          "filter_criteria": {
            "type": "string",
            "description": "URL retention filter: all entries, recently modified lastmod only, or HTML pages only.",
            "enum": [
              "all_entries",
              "recent_lastmod_only",
              "html_pages_only"
            ]
          },
          "max_results": {
            "type": "integer",
            "description": "Maximum number of URLs to extract and return in the catalog."
          }
        },
        "required": [
          "sitemap_xml"
        ]
      },
      "outputSchema": {
        "type": "object",
        "description": "Deterministic execution response schema for crawl_sitemap_urls.",
        "properties": {
          "total_urls_found": {
            "type": "integer",
            "description": "Total valid loc URLs parsed from the XML sitemap document."
          },
          "sitemap_entries": {
            "type": "array",
            "description": "List of structured URL entries containing loc, lastmod, and priority."
          },
          "sub_sitemaps": {
            "type": "array",
            "description": "Nested child sitemap URLs detected if document is a sitemapindex file."
          }
        },
        "required": [
          "total_urls_found",
          "sitemap_entries",
          "sub_sitemaps"
        ]
      },
      "annotations": {
        "title": "XML Sitemap & Index Crawler Tree Decompiler",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "extract_page_hyperlinks",
      "title": "Web Hyperlink, Anchor & Asset Extraction Filter",
      "description": "Extracts, normalizes, and filters internal and external hyperlinks, anchor texts, and downloadable asset targets from HTML. Use when building site crawlers, auditing broken links, or extracting reference citations; for isolating primary readable article narrative text, use scrape_readable_article instead. Stateless read-only edge call (max 32 KB, 60 RPM): accepts 'html_content' ('link_scope' defaults to 'all_links'), supports '?demo=true' or L402 (10 sats), and returns HTTP 400 if invalid.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "html_content": {
            "type": "string",
            "description": "Source HTML string containing anchor tags, href attributes, and link targets."
          },
          "link_scope": {
            "type": "string",
            "description": "Link extraction scope: all links, internal domain only, external links only, or download assets.",
            "enum": [
              "all_links",
              "internal_only",
              "external_only",
              "download_assets_only"
            ]
          },
          "base_url": {
            "type": "string",
            "description": "Base URL of the target page for resolving relative link paths."
          }
        },
        "required": [
          "html_content"
        ]
      },
      "outputSchema": {
        "type": "object",
        "description": "Deterministic execution response schema for extract_page_hyperlinks.",
        "properties": {
          "total_links": {
            "type": "integer",
            "description": "Total hyperlinks discovered matching the specified link scope."
          },
          "links": {
            "type": "array",
            "description": "Array of link objects containing resolved url, anchor_text, and is_external."
          },
          "unique_domains": {
            "type": "array",
            "description": "List of distinct outbound domain hostnames linked in the document."
          }
        },
        "required": [
          "total_links",
          "links",
          "unique_domains"
        ]
      },
      "annotations": {
        "title": "Web Hyperlink, Anchor & Asset Extraction Filter",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "sanitize_html_content",
      "title": "Edge HTML Sanitizer, Script Stripper & XSS Neutralizer",
      "description": "Sanitizes raw HTML by removing malicious script tags, iframes, inline event handlers, and data URIs into safe markup. Use when preparing untrusted third-party web content for rendering in agent dashboards or email clients; for converting clean HTML into markdown, use extract_clean_markdown instead. Stateless read-only edge call (max 32 KB, 60 RPM): accepts 'html_content' ('sanitization_strictness' defaults to 'strip_scripts_and_iframes'), supports '?demo=true' or L402 (10 sats), and returns HTTP 400 if invalid.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "html_content": {
            "type": "string",
            "description": "Untrusted or potentially hazardous HTML string requiring sanitization."
          },
          "sanitization_strictness": {
            "type": "string",
            "description": "Sanitizer filter policy: strip scripts and iframes, allowlist safe formatting, or plaintext strip all.",
            "enum": [
              "strip_scripts_and_iframes",
              "allowlist_safe_formatting",
              "plaintext_strip_all"
            ]
          },
          "preserve_images": {
            "type": "boolean",
            "description": "Whether to retain safe img elements with http/https sources."
          }
        },
        "required": [
          "html_content"
        ]
      },
      "outputSchema": {
        "type": "object",
        "description": "Deterministic execution response schema for sanitize_html_content.",
        "properties": {
          "sanitized_html": {
            "type": "string",
            "description": "Safe, purified HTML output free of active scripting threats."
          },
          "elements_removed": {
            "type": "array",
            "description": "List of dangerous tags and attributes removed during processing."
          },
          "xss_vectors_neutralized": {
            "type": "integer",
            "description": "Count of potential script execution vectors disarmed."
          }
        },
        "required": [
          "sanitized_html",
          "elements_removed",
          "xss_vectors_neutralized"
        ]
      },
      "annotations": {
        "title": "Edge HTML Sanitizer, Script Stripper & XSS Neutralizer",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "extract_contact_info",
      "title": "Lead Contact, Email, Phone & Social Handle Extractor",
      "description": "Extracts email addresses, telephone numbers, physical addresses, and social network handles from web text and DOM footers. Use when researching sales leads, aggregating business contact directories, or extracting customer service info; for parsing structured tabular data, use parse_html_tables instead. Stateless read-only edge call (max 32 KB, 60 RPM): accepts 'content' ('extraction_focus' defaults to 'all_contacts'), supports '?demo=true' or L402 (10 sats), and returns HTTP 400 if invalid.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "content": {
            "type": "string",
            "description": "Raw text or HTML page content to scan for contact channels and lead info."
          },
          "extraction_focus": {
            "type": "string",
            "description": "Contact filter focus: all contact info, emails and phones only, or social handles only.",
            "enum": [
              "all_contacts",
              "emails_and_phones_only",
              "social_handles_only"
            ]
          },
          "country_hint": {
            "type": "string",
            "description": "Two-letter ISO country code for telephone numbering format hints."
          }
        },
        "required": [
          "content"
        ]
      },
      "outputSchema": {
        "type": "object",
        "description": "Deterministic execution response schema for extract_contact_info.",
        "properties": {
          "emails": {
            "type": "array",
            "description": "Deduplicated valid email addresses extracted from page content."
          },
          "phone_numbers": {
            "type": "array",
            "description": "Standardized telephone numbers discovered in international or national format."
          },
          "social_profiles": {
            "type": "array",
            "description": "Identified social profiles (Twitter/X, GitHub, LinkedIn, Discord, Telegram)."
          },
          "physical_addresses": {
            "type": "array",
            "description": "Postal addresses or physical headquarters locations identified."
          }
        },
        "required": [
          "emails",
          "phone_numbers",
          "social_profiles",
          "physical_addresses"
        ]
      },
      "annotations": {
        "title": "Lead Contact, Email, Phone & Social Handle Extractor",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "evaluate_seo_diagnostics",
      "title": "Web SEO Diagnostics & Heading Hierarchy Auditor",
      "description": "Audits HTML heading structures, title lengths, meta descriptions, image alt tags, and OpenGraph compliance into a health score. Use when auditing landing pages, verifying SEO compliance before publishing, or evaluating crawl friendliness; for extracting article bodies, use scrape_readable_article instead. Stateless read-only edge call (max 32 KB, 60 RPM): accepts 'html_content' ('audit_level' defaults to 'comprehensive_audit'), supports '?demo=true' or L402 (10 sats), and returns HTTP 400 if invalid.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "html_content": {
            "type": "string",
            "description": "Web page HTML string to evaluate against search engine optimization standards."
          },
          "audit_level": {
            "type": "string",
            "description": "Diagnostic audit scope: comprehensive audit, meta tags only, or heading hierarchy only.",
            "enum": [
              "comprehensive_audit",
              "meta_tags_only",
              "heading_hierarchy_only"
            ]
          },
          "target_keyword": {
            "type": "string",
            "description": "Primary search keyword to check for in titles, headings, and meta tags."
          }
        },
        "required": [
          "html_content"
        ]
      },
      "outputSchema": {
        "type": "object",
        "description": "Deterministic execution response schema for evaluate_seo_diagnostics.",
        "properties": {
          "seo_score": {
            "type": "integer",
            "description": "Aggregate SEO compliance score on a 0 to 100 benchmark scale."
          },
          "heading_structure": {
            "type": "object",
            "description": "Summary counts of H1 through H6 headings and hierarchy validity."
          },
          "missing_attributes": {
            "type": "array",
            "description": "List of missing SEO elements such as missing alt text or missing meta tags."
          },
          "recommendations": {
            "type": "array",
            "description": "Actionable recommendations for resolving detected search optimization issues."
          }
        },
        "required": [
          "seo_score",
          "heading_structure",
          "missing_attributes",
          "recommendations"
        ]
      },
      "annotations": {
        "title": "Web SEO Diagnostics & Heading Hierarchy Auditor",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "compile_rss_feed",
      "title": "Web Content to RSS 2.0 & Atom Feed Compiler",
      "description": "Transforms JSON item collections or article card arrays into standardized RSS 2.0, Atom 1.0, or JSON Feed 1.1 syndication feeds. Use when syndicating blog articles, product announcements, or changelog cards to RSS readers and AI agents; for compiling structured sitemap listings, use crawl_sitemap_urls instead. Stateless read-only edge call (max 32 KB, 60 RPM): accepts 'items_json' and 'channel_title' ('feed_standard' defaults to 'rss_2_0'), supports '?demo=true' or L402 (15 sats), and returns HTTP 400 if invalid.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "items_json": {
            "type": "string",
            "description": "JSON string representing an array of article or feed items with title, link, and pubDate."
          },
          "channel_title": {
            "type": "string",
            "description": "Headline title for the syndication feed channel."
          },
          "feed_standard": {
            "type": "string",
            "description": "Target syndication feed specification: RSS 2.0, Atom 1.0, or JSON Feed 1.1.",
            "enum": [
              "rss_2_0",
              "atom_1_0",
              "json_feed_1_1"
            ]
          }
        },
        "required": [
          "items_json",
          "channel_title"
        ]
      },
      "outputSchema": {
        "type": "object",
        "description": "Deterministic execution response schema for compile_rss_feed.",
        "properties": {
          "feed_xml": {
            "type": "string",
            "description": "Formatted XML or JSON string ready for publication to feed subscribers."
          },
          "item_count": {
            "type": "integer",
            "description": "Number of feed entries compiled into the syndicated document."
          },
          "content_type": {
            "type": "string",
            "description": "Standard MIME content type for the generated feed document."
          }
        },
        "required": [
          "feed_xml",
          "item_count",
          "content_type"
        ]
      },
      "annotations": {
        "title": "Web Content to RSS 2.0 & Atom Feed Compiler",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    }
  ]
}