{"mcpVersion":"2025-06-18","name":"hubvibe-site-audit","description":"Rule-based, verifiable site compliance audits -- accessibility (axe-core), SEO, security headers, and performance. Every result is a deterministic check against the actual page, never an LLM guess, and a check that couldn't run is never reported as a false pass.","version":"1.2.0","websiteUrl":"https://hubvibe-io.com/","documentationUrl":"https://hubvibe-io.com/.well-known/agent.json","repository":{"url":"https://github.com/Its-fortunatefolly/HubVibe","source":"github"},"icons":[{"src":"https://hubvibe-io.com/favicon.svg","mimeType":"image/svg+xml","sizes":["any"]}],"remotes":[{"type":"streamable-http","url":"https://hubvibe-io.com/mcp"}],"note":"There IS a live MCP server here: POST to the `remotes[0].url` above (Streamable HTTP, JSON-RPC 2.0; initialize / ping / tools/list / tools/call). `initialize` and `tools/list` are free and unauthenticated, so a client can read this whole catalog and its prices before deciding to spend anything; `tools/call` is billed per call and answers an unpaid call with the payment challenge rather than an error. Each tool's `httpEndpoint` (a non-standard extension field) additionally maps that same tool onto a plain REST route, for callers that would rather POST JSON than speak MCP -- it is an alternative transport to the same audit, not a sign that MCP is unavailable. Both transports are served by one process against one catalog, so their prices and schemas cannot disagree.","auth":{"note":"Populated at serve time from this deployment's live configuration. GET /mcp.json for the authoritative list -- it contains only rails that can genuinely settle here. This file cannot know that, so it does not guess. See also /.well-known/agent.json.","methods":["x402"],"description":"Every tool below requires one of the methods in `methods`, which lists only the rails this deployment can actually settle. An unauthenticated call returns HTTP 402 with the price and payment challenge, not an error."},"tools":[{"name":"audit_wcag","title":"Accessibility audit (WCAG 2.1 A/AA)","description":"WCAG 2.1 A/AA accessibility audit via axe-core against raw HTML or a live URL.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","title":"Live URL or raw HTML to audit","properties":{"url":{"type":"string","format":"uri","description":"Live, fetchable http(s) URL to audit.","examples":["https://example.com"]},"html":{"type":"string","description":"Raw HTML source to audit instead of fetching a URL."}},"anyOf":[{"required":["url"]},{"required":["html"]}]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","const":"ok","description":"Present only on a completed audit."},"pass":{"type":"boolean","description":"Whether every rule in this dimension passed."},"engine":{"type":"string","const":"axe-core"},"violations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"axe-core rule id."},"impact":{"type":["string","null"],"description":"axe-core impact level."},"help":{"type":["string","null"]},"help_url":{"type":"string","format":"uri"},"nodes_affected":{"type":"integer","minimum":0}},"required":["id"]}}},"required":["pass"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"title":"Accessibility audit (WCAG 2.1 A/AA)"},"httpEndpoint":{"method":"POST","path":"/audit/wcag","price_usd":0.03}},{"name":"audit_seo","title":"SEO and metadata audit","description":"Title, meta description, H1 structure, canonical link, OpenGraph tags, structured data, and lang attribute.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","title":"Live URL or raw HTML to audit","properties":{"url":{"type":"string","format":"uri","description":"Live, fetchable http(s) URL to audit.","examples":["https://example.com"]},"html":{"type":"string","description":"Raw HTML source to audit instead of fetching a URL."}},"anyOf":[{"required":["url"]},{"required":["html"]}]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","const":"ok","description":"Present only on a completed audit."},"pass":{"type":"boolean","description":"Whether every rule in this dimension passed."},"findings":{"type":"array","description":"One entry per rule that did not pass. Empty when the check is clean.","items":{"type":"object","properties":{"id":{"type":"string","description":"Stable rule identifier."},"severity":{"type":"string","description":"Rule severity."},"detail":{"type":"string","description":"What failed and where."}},"required":["id"]}}},"required":["pass"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"title":"SEO and metadata audit"},"httpEndpoint":{"method":"POST","path":"/audit/seo","price_usd":0.03}},{"name":"audit_security","title":"Security header audit","description":"HTTPS, HSTS, CSP, X-Content-Type-Options, clickjacking protection, Referrer-Policy, and CORS from a live HTTP response. Not a TLS/cipher-suite scan or a penetration test.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","title":"Live URL to audit","properties":{"url":{"type":"string","format":"uri","description":"Live, fetchable http(s) URL to audit.","examples":["https://example.com"]}},"required":["url"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","const":"ok","description":"Present only on a completed audit."},"pass":{"type":"boolean","description":"Whether every rule in this dimension passed."},"findings":{"type":"array","description":"One entry per rule that did not pass. Empty when the check is clean.","items":{"type":"object","properties":{"id":{"type":"string","description":"Stable rule identifier."},"severity":{"type":"string","description":"Rule severity."},"detail":{"type":"string","description":"What failed and where."}},"required":["id"]}}},"required":["pass"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"title":"Security header audit"},"httpEndpoint":{"method":"POST","path":"/audit/security","price_usd":0.03}},{"name":"audit_performance","title":"Page performance audit","description":"DOM node count, transferred bytes, and request count from one real page load. Not a full Lighthouse-style audit.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","title":"Live URL to audit","properties":{"url":{"type":"string","format":"uri","description":"Live, fetchable http(s) URL to audit.","examples":["https://example.com"]}},"required":["url"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","const":"ok","description":"Present only on a completed audit."},"pass":{"type":"boolean","description":"Whether every rule in this dimension passed."},"metrics":{"type":"object","properties":{"dom_node_count":{"type":"integer","minimum":0},"total_bytes_transferred":{"type":"integer","minimum":0},"request_count":{"type":"integer","minimum":0}}},"findings":{"type":"array","description":"One entry per rule that did not pass. Empty when the check is clean.","items":{"type":"object","properties":{"id":{"type":"string","description":"Stable rule identifier."},"severity":{"type":"string","description":"Rule severity."},"detail":{"type":"string","description":"What failed and where."}},"required":["id"]}}},"required":["pass"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"title":"Page performance audit"},"httpEndpoint":{"method":"POST","path":"/audit/performance","price_usd":0.03}},{"name":"audit_bundle","title":"Full site compliance bundle (all four audits)","description":"Runs audit_wcag + audit_seo + audit_security + audit_performance against one URL in a single call, billed once. If any dimension fails to run, the whole call fails and nothing is billed.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","title":"Live URL to audit","properties":{"url":{"type":"string","format":"uri","description":"Live, fetchable http(s) URL to audit.","examples":["https://example.com"]}},"required":["url"]},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","const":"ok","description":"Present only on a completed audit."},"pass":{"type":"boolean","description":"Whether every rule in this dimension passed."},"wcag":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","const":"ok","description":"Present only on a completed audit."},"pass":{"type":"boolean","description":"Whether every rule in this dimension passed."},"engine":{"type":"string","const":"axe-core"},"violations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"axe-core rule id."},"impact":{"type":["string","null"],"description":"axe-core impact level."},"help":{"type":["string","null"]},"help_url":{"type":"string","format":"uri"},"nodes_affected":{"type":"integer","minimum":0}},"required":["id"]}}},"required":["pass"]},"seo":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","const":"ok","description":"Present only on a completed audit."},"pass":{"type":"boolean","description":"Whether every rule in this dimension passed."},"findings":{"type":"array","description":"One entry per rule that did not pass. Empty when the check is clean.","items":{"type":"object","properties":{"id":{"type":"string","description":"Stable rule identifier."},"severity":{"type":"string","description":"Rule severity."},"detail":{"type":"string","description":"What failed and where."}},"required":["id"]}}},"required":["pass"]},"security":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","const":"ok","description":"Present only on a completed audit."},"pass":{"type":"boolean","description":"Whether every rule in this dimension passed."},"findings":{"type":"array","description":"One entry per rule that did not pass. Empty when the check is clean.","items":{"type":"object","properties":{"id":{"type":"string","description":"Stable rule identifier."},"severity":{"type":"string","description":"Rule severity."},"detail":{"type":"string","description":"What failed and where."}},"required":["id"]}}},"required":["pass"]},"performance":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","const":"ok","description":"Present only on a completed audit."},"pass":{"type":"boolean","description":"Whether every rule in this dimension passed."},"metrics":{"type":"object","properties":{"dom_node_count":{"type":"integer","minimum":0},"total_bytes_transferred":{"type":"integer","minimum":0},"request_count":{"type":"integer","minimum":0}}},"findings":{"type":"array","description":"One entry per rule that did not pass. Empty when the check is clean.","items":{"type":"object","properties":{"id":{"type":"string","description":"Stable rule identifier."},"severity":{"type":"string","description":"Rule severity."},"detail":{"type":"string","description":"What failed and where."}},"required":["id"]}}},"required":["pass"]}},"required":["pass"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"title":"Full site compliance bundle (all four audits)"},"httpEndpoint":{"method":"POST","path":"/audit/bundle","price_usd":0.1}}]}