aft.page
Deploy HTML or dist/ to a live HTTPS URL. No account. Drop, MCP, or CLI.
我该使用它吗
质量与安全性
发现(2)
- LOW在 aft_rollback 中
- LOW在 aft_health 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"mcp": {
"url": "https://mcp.aft.page/mcp"
}
}
}远程端点
https://mcp.aft.page/mcpstreamable-http它能做什么
工具清单
工具(5)
🟡deploy(html, files, preferred_slug, edit_token, expires)
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.
输入模式
{
"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"
}🟡deploy_repo(url)
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.
输入模式
{
"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"
}🟢aft_deploys(slug, edit_token)
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.
输入模式
{
"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"
}🔴aft_rollback(slug, edit_token, deploy_id)
Point the live slug at a prior deployId from aft_deploys. Same URL. Needs edit_token from .aft/state.json. Claim not required.
输入模式
{
"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"
}🟢aft_health
Ping the aft.page deploy API.
输入模式
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}社区
证据