{"name":"page.aft/mcp","slug":"aft-mcp","title":"aft.page","description":"Deploy HTML or dist/ to a live HTTPS URL. No account. Drop, MCP, or CLI.","url":"https://mcp.market/server/aft-mcp","rating":null,"grade":"C","score":60,"certified":false,"status":"active","category":"devtools","tags":["devtools"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":6,"ok":6,"last_checked_at":"2026-09-21T00:40:56.193Z","last_ok_at":"2026-09-21T00:40:56.193Z","latency_ms":301},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/vaibhavmule/aft.page","website":"https://aft.page/mcp","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://mcp.aft.page/mcp"}],"packages":[],"tools":[{"name":"aft_deploys","description":"List rollback-able deploys for a slug. Needs edit_token from .aft/state.json (or the first deploy). Same history the project UI shows after claim.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$","description":"Site slug from aft.json or .aft/state.json"},"edit_token":{"type":"string","minLength":1,"description":"From first deploy / .aft/state.json. Required to update or rollback the same URL."}},"required":["slug","edit_token"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"aft_health","description":"Ping the aft.page deploy API.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"aft_rollback","description":"Point the live slug at a prior deployId from aft_deploys. Same URL. Needs edit_token from .aft/state.json. Claim not required.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$","description":"Site slug from aft.json or .aft/state.json"},"edit_token":{"type":"string","minLength":1,"description":"From first deploy / .aft/state.json. Required to update or rollback the same URL."},"deploy_id":{"type":"string","minLength":1,"description":"Prior deployId from aft_deploys"}},"required":["slug","edit_token","deploy_id"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"deploy","description":"Publish to a live URL. Pass html (one page) OR files (built site). Plain HTML → html. Vite/React → npm run build, then files from dist/. Next static export → files from out/. Always include index.html. Never upload src/, node_modules, or .next/. First hit: preferred_slug from aft.json (include aft.json in files). Later: same slug + edit_token from .aft/state.json. Limits: 500 files, 25MB each, 100MB total.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"html":{"description":"One HTML document. Ignored if files is set.","type":"string","minLength":1},"files":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"object","properties":{"path":{"type":"string","minLength":1,"description":"Relative path, e.g. index.html"},"content":{"type":"string","description":"UTF-8 text (or base64 if encoding=base64)"},"encoding":{"type":"string","enum":["utf8","base64"]}},"required":["path","content"]}},"preferred_slug":{"description":"aft.json slug. Required with edit_token.","type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,46}[a-z0-9])?$"},"edit_token":{"type":"string","minLength":1,"description":"From first deploy / .aft/state.json. Required to update or rollback the same URL."},"expires":{"type":"string","pattern":"^\\d+(s|m|h|d)?$","description":"Optional quick-view expiry, e.g. \"1h\", \"24h\", \"90s\", \"7d\". Anonymous (unclaimed) deploys only — the link 404s after this."}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"deploy_repo","description":"Same engine as aft.page/run: public GitHub URL → detect → build → live URL. Static is instant; Vite and Next.js build in the background (polls until live or failed). Private repos are refused. For a local project dir, use hosted CLI aft deploy instead.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","minLength":3,"description":"GitHub URL or owner/repo, e.g. https://github.com/mdn/beginner-html-site"}},"required":["url"],"$schema":"https://json-schema.org/draft/2020-12/schema"}}],"scan":{"score":60,"grade":"C","scanned_at":"2026-09-20T20:57:23.971Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T20:57:23.948Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1052ms"]},"poisoning":{"score":15,"max":15,"notes":["5 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 2 write-action tools with no auth"]},"maintenance":{"score":3,"max":15,"notes":["repository not readable: repo not found"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://mcp.aft.page/mcp","reachable":true,"authRequired":false,"latencyMs":1052,"serverInfo":{"name":"aft-page","version":"0.6.0"}}],"packages":[],"repo":{"found":false,"owner":"vaibhavmule","repo":"aft.page","error":"repo not found"},"icon":{"url":"https://aft.page/favicon.svg","source":"site"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}