{"openapi":"3.1.0","info":{"title":"page-extract","version":"0.1.0","description":"Fetches a URL and returns clean article text/markdown plus metadata. Deterministic, static HTML only, no JS rendering.","x-guidance":"Call `page_extract` with a `url` to fetch it and return clean article text/markdown plus metadata: title, byline, language, an excerpt, word count, OpenGraph/canonical meta, and a link census (internal/external counts and up to 10 absolute top links). `format` controls whether the result carries `markdown`, `text`, or both (default `markdown`). Deterministic, no LLM calls — static HTML only, no JS rendering. Only http/https URLs are fetched; private/reserved network targets are refused with a `blocked_target` error. Non-HTML responses (`not_html`), responses over 2MB (`too_large`), and fetch failures/timeouts (`fetch_failed`/`timeout`) return a structured error instead of partial data.","contact":{"email":"jeff@fosterinstruments.com"}},"servers":[{"url":"https://page-extract.x402supply.com"}],"paths":{"/mcp":{"post":{"operationId":"page-extract_call","summary":"Call page-extract via MCP tools/call","tags":["page-extract"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method","params"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number"]},"method":{"const":"tools/call"},"params":{"type":"object","required":["name","arguments"],"properties":{"name":{"const":"page_extract"},"arguments":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"format":{"type":"string","enum":["markdown","text","both"]}},"required":["url"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object","description":"JSON-RPC 2.0 response envelope. `result.content[0].text` is a JSON-encoded string matching the schema in `x-mcp-result-schema`.","properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number"]},"result":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"const":"text"},"text":{"type":"string"}}}}}}},"x-mcp-result-schema":{"type":"object","required":["url","finalUrl","status","title","byline","lang","excerpt","wordCount","meta","links","fetchedAt"],"properties":{"url":{"type":"string"},"finalUrl":{"type":"string"},"status":{"type":"integer"},"title":{"type":["string","null"]},"byline":{"type":["string","null"]},"lang":{"type":["string","null"]},"excerpt":{"type":"string"},"markdown":{"type":"string"},"text":{"type":"string"},"wordCount":{"type":"integer"},"meta":{"type":"object","properties":{"ogTitle":{"type":["string","null"]},"ogDescription":{"type":["string","null"]},"ogImage":{"type":["string","null"]},"canonical":{"type":["string","null"]}}},"links":{"type":"object","properties":{"internal":{"type":"integer"},"external":{"type":"integer"},"top":{"type":"array","items":{"type":"string"}}}},"fetchedAt":{"type":"string"}}}}}}},"402":{"description":"Payment Required","content":{"application/json":{"schema":{"type":"object","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"accepts":{"type":"array"}}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]}}},"/tools/page_extract":{"post":{"operationId":"page-extract_page_extract_http","summary":"Fetches a URL and returns clean article text/markdown plus metadata. Deterministic, static HTML only, no JS rendering.","tags":["page-extract"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"format":{"type":"string","enum":["markdown","text","both"]}},"required":["url"],"additionalProperties":false},"example":{"url":"https://example.com","format":"markdown"}}}},"responses":{"200":{"description":"Tool result (plain JSON, not MCP-wrapped)","content":{"application/json":{"schema":{"type":"object","required":["url","finalUrl","status","title","byline","lang","excerpt","wordCount","meta","links","fetchedAt"],"properties":{"url":{"type":"string"},"finalUrl":{"type":"string"},"status":{"type":"integer"},"title":{"type":["string","null"]},"byline":{"type":["string","null"]},"lang":{"type":["string","null"]},"excerpt":{"type":"string"},"markdown":{"type":"string"},"text":{"type":"string"},"wordCount":{"type":"integer"},"meta":{"type":"object","properties":{"ogTitle":{"type":["string","null"]},"ogDescription":{"type":["string","null"]},"ogImage":{"type":["string","null"]},"canonical":{"type":["string","null"]}}},"links":{"type":"object","properties":{"internal":{"type":"integer"},"external":{"type":"integer"},"top":{"type":"array","items":{"type":"string"}}}},"fetchedAt":{"type":"string"}}},"example":{"url":"https://example.com","finalUrl":"https://example.com/","status":200,"fetchedAt":"2026-10-09T15:27:16.193Z","title":"Example Domain","byline":null,"lang":"en","excerpt":"This domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for testing and monitoring purposes.","wordCount":25,"meta":{"ogTitle":null,"ogDescription":null,"ogImage":null,"canonical":null},"links":{"internal":0,"external":0,"top":[]},"markdown":"This domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for testing and monitoring purposes."}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}},"402":{"description":"Payment Required","content":{"application/json":{"schema":{"type":"object","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"accepts":{"type":"array"}}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]}}}}}