Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
제작자가 쓴 설명(영어 원문)
Publish permanent static sites via MCP/REST. 28 tools. No account or claim link.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
Authorization비밀로 표시된 값은 내 계정의 열쇠예요. 절대 다른 사람과 공유하거나 채팅에 붙여 넣지 마세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
이 주소는 요청 header에 키가 필요한데, 커넥터 추가 메뉴에서는 넣을 수 없어요. 대신 Claude Code, Cursor, VS Code를 쓰세요.
터미널에서 이 명령어를 실행하세요
claude mcp add --transport http deed-page https://deed.page/mcp --header 'Authorization: your-value'실행하기 전에 빈 값을 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"deed-page": {
"url": "https://deed.page/mcp",
"headers": {
"Authorization": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"deed-page": {
"type": "http",
"url": "https://deed.page/mcp",
"headers": {
"Authorization": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 주소는 요청 header에 키가 필요한데, 커넥터 추가 메뉴에서는 넣을 수 없어요. 대신 Claude Code, Cursor, VS Code를 쓰세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
Authorization 비밀 HTTP header이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
도구 이름과 설명은 서버가 2026년 11월 6일에 알려 준 그대로예요. 우리가 아니라 제작자가 쓴 글이고, 일반 텍스트로만 보여 드려요.
publish_sitePublishes websites, HTML games, interactive demos, reports, and other AI-created content to a public HTTPS URL at a slug. Inputs: files (required), and optional slug, spa, ttl_seconds, merge, expected_version, via, heard_from, token, listed, category, tags, title, and description
update_siteReplaces the files of a slug owned by the token, or, when merge is true, adds and overwrites only the paths sent. Inputs: slug, files, and optional spa, merge, expected_version, via, token, listed, category, tags, title, and description. Returns url, path_url, slug, listing, and
get_siteReturns whether a slug is live, plus its URL, version, size, and timestamps. Input: slug. No token is required.
list_sitesReturns every live site owned by the token, with URLs and versions. Input: token, or an Authorization bearer header.
delete_sitePermanently removes a slug owned by the token and detaches its custom hostnames. The slug becomes available again. Inputs: slug and token.
rotate_tokenIssues a new token for the same principal. Every site carries over. Inputs: token, and optional overlap_seconds from 0 to 300. The previous token stops working immediately when overlap_seconds is omitted or 0. During a non-zero overlap window both tokens work. After that window t
revoke_tokenRevokes owner tokens. Inputs: token, and optional scope. Scope "current" (the default) revokes the token that was sent. Scope "all" revokes every token for that principal, including any overlap window. A later request with a revoked token returns 401 token_revoked, which is disti
agent_seatsPro only: named tokens for more agents on one account, up to 5. Each seat has a label and its own token, shares the owner's sites, and can be revoked without touching the others. action "list" shows seats (any token). action "create" needs the owner token and a label; the new sea
whoamiReturns the plan (plan.id is free, hobby, or pro), limits, the number of sites the token owns, and the number of custom hostnames attached. Use it to confirm a plan change after payment. Input: token.
get_upgrade_linkCreates a Stripe Checkout URL that upgrades this token's owner to Hobby ($3/mo) or Pro ($15/mo). Call it when the user asks to upgrade, or right after a tool error that has upgrade_url / user_message (a plan limit). Show the returned upgrade_url (a 30-day link that opens Stripe C
claim_share_creditFree plan only. Pass the URL of the user's public post about deed.page on X or Reddit. Grants, each one-time: (1) the share credit: the post is public, mentions deed.page or links to a deed.page site, is from the last 30 days, and was not claimed before; Free limits rise by 25 si
list_versionsReturns every retained version of a slug owned by the token, newest first. Inputs: slug and token. Each entry includes version, created_at, file_count, bytes, kind (publish, merge, or restore), restored_from, and a public permalink. Free keeps 10 versions, Hobby 50, Pro unlimited
restore_versionCreates a new version whose files equal a retained version, without uploading those files again. Inputs: slug, version, optional expected_version, and token. When expected_version does not match the live version, the result is version_conflict and nothing is written. The previous
add_domainAttaches a hostname to a slug owned by the token and returns the DNS records to create: a CNAME for a subdomain, an A record or an ALIAS record for an apex (one of those, not both), and every TXT record. Inputs: slug, domain, and token. Status starts at pending_dns until DNS and
list_domainsReturns custom hostnames on one slug, or on every site the token owns when slug is omitted. Inputs: token, and optional slug. Status is the last checked value.
remove_domainRemoves a hostname so requests to that host no longer serve the site. Inputs: domain, optional slug, and token. When slug is set, the hostname must already be attached to that slug.
domain_statusRefreshes verification, DNS, and certificate state for a custom domain, stores that status, and returns it. Inputs: slug, domain, and token. status is pending_dns, verifying, issuing_cert, active, or error. dns_records are the records to create. An error includes the reason. A tr
plan_uploadAccepts a file manifest and returns which hashes are already stored, a direct upload URL for each missing hash, a session id, and commands: one curl PUT per missing blob plus a finalize line that uses $DEEDPAGE_TOKEN. Inputs: files as {path, sha256, size, content_type?}, and opti
finalize_uploadChecks uploaded hashes, screens the new bytes, and commits one version under the slug lock. Inputs: session (upl_...), optional expected_version, via, heard_from, and token. A stale expected_version returns version_conflict and writes nothing. A bad hash returns hash_mismatch. An
get_manifestReturns the canonical manifest for a site version: paths, sha256, sizes, version, slug, and created_at, plus an Ed25519 signature. signature is null when the server has no signing key. Inputs: slug, and optional version. When version is omitted, the result is the live site. Publi
site_analyticsReturns owner-only cookieless counts for a slug: views per UTC day, top paths, top referrer hosts, and AI crawler counts by user-agent family. Inputs: slug, optional from and to as YYYY-MM-DD (default the last 7 days; up to 90 days per request on Free and Hobby, 365 on Pro), opti
site_visitsReturns owner-only human HTML page views and daily unique visitors for a slug. Inputs: slug, optional from and to as YYYY-MM-DD (default the plan window: 7 days on Free, 30 on Hobby, 90 on Pro), and token. Bots, empty or script user agents, headless browsers, and assets are not p
set_site_accessChanges the access setting stored for a slug on deed.page. Inputs: slug, password, and token. password is 8 to 200 characters, or an empty string (or null) to clear the password. The call writes a scrypt hash into the site record on deed.page, or removes that hash, and contacts n
set_listingSets or clears the public gallery listing for a slug. Inputs: slug, listed, and when listed is true a category, title, description, and optional tags (at most 5), plus token. Returns listed, status, category, tags, title, and description. listed false removes the slug from the ga
set_badgeFree-plan sites show a small 'Published with deed.page' link in the bottom-right corner; Hobby and Pro never show it. Inputs: show (boolean), optional slug, and token. With slug, the setting applies to that site; without slug, it applies to every site of the token. Only a paid pl
create_webhookRegisters an http or https URL for the events site.published, site.version_restored, site.deleted, site.taken_down, domain.active, and report.received. Inputs: url, optional events, and token. Returns the webhook id and an HMAC secret once. Free allows 1 webhook, Hobby 5, Pro 20.
list_webhooksReturns the webhook URLs registered for the token. Secrets are not included. Input: token.
delete_webhookDeletes one webhook. Inputs: id (whk_...) and token.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 7일 점검
레지스트리 이름이 도메인 deed.page 기준으로 확인되었어요(레지스트리가 도메인 소유를 확인해요)
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
95ms 만에 응답(HTTP 200)
로그인 필요 없음
도구 설명 28개를 읽었고, AI에게 보내는 숨겨진 지시는 없었어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 3개 중 3개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
입력해야 할 값: Authorization
제작자의 클라우드에서 실행돼요. 설치 없이 인터넷으로 연결하지만, 보내는 내용은 제작자의 서버를 거쳐요.
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(1.19.0)은 오늘 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되기 때문에, 원격 MCP 서버를 지원하는 앱(예: 개발자 모드의 ChatGPT)에서도 쓸 수 있어요.
같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, Draugr
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Security scanning for AI agents: SAST, SCA, secrets, IaC, DAST, ranked by real risk.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
deed.page publishes a file or folder to a permanent https:// .deed.page/ URL in one call. No account, API key, email code, or claim link. This repo documents the hosted remote MCP server (https://deed.page/mcp, see MCP server) and contains the deed.page agent skill, which does the same with one curl request.
It works with Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, Grok Bot, Hermes Agent, and any agent that reads SKILL.md files (agentskills.io format).
deed.page runs a hosted remote MCP server. Agents use it to publish a file or folder to a permanent https:// .deed.page/ URL and then update, version, password-protect, or delete it. The source code is not in this repo; the server is hosted at the URL below.
| URL | https://deed.page/mcp |
| Transport | Streamable HTTP |
| MCP Registry name | page.deed/deed-page |
| Auth | None to start. See Authentication. |
VS Code / GitHub Copilot (.vscode/mcp.json):
{
"servers": { "deed-page": { "type": "http", "url": "https://deed.page/mcp" } } }
Claude Code:
claude mcp add --transport http deed-page https://deed.page/mcp
Any other MCP client: add a remote (Streamable HTTP) server with the URL https://deed.page/mcp.
No account, API key, or OAuth is needed. The first publish_site call returns an owner token (deed_tok_...) once. That token is the key to update or delete the sites it owns. Send it back in one of two ways:
Authorization: Bearer deed_tok_... header, ortoken argument of a tool.Keep the token secret. rotate_token replaces it and revoke_token revokes it.
27 tools:
| Tool | What it does |
|---|---|
publish_site | Publish files to a live permanent URL at a slug. The first call returns the owner token. |
update_site | Replace a site's files, or merge in only the paths sent. |
get_site | Check whether a slug is live, with its URL, version, size, and timestamps (no token needed). |
list_sites | List every live site the token owns. |
delete_site | Permanently remove a site. |
list_versions | List a site's retained versions. |
restore_version | Make a retained version live again. |
get_manifest | Get the signed (Ed25519) manifest of a site version. |
plan_upload | Plan a large upload: returns which files are already stored and an upload URL for each missing one. |
finalize_upload | Commit a large upload as a new version. |
set_site_access | Set or clear a site password. |
set_listing | List a site in the public gallery, or remove it. |
site_analytics | Cookieless view counts, top paths, referrers, and AI crawler counts for a site. 90 days per request on Free and Hobby; 365 days and CSV on Pro. |
add_domain | Attach a custom domain and get the DNS records to create. |
list_domains | List custom domains. |
domain_status | Check and refresh a custom domain's verification and certificate status. |
remove_domain | Remove a custom domain. |
whoami | Show the plan, limits, and usage for the token. |
get_upgrade_link | Get a checkout link for a paid plan. |
set_badge | Set the "Published with deed.page" badge. Only a paid plan (Hobby $3/mo or Pro) removes it. |
claim_share_credit | Free only, once per token: send the URL of the user's public X or Reddit post about deed.page for +25 sites and 50 MB per site. An X post that links to deed.page (at most 7 days old) also turns the badge off for 30 days, once per account. |
rotate_token | Issue a new owner token; every site carries over. |
revoke_token | Revoke the current token or all tokens. |
agent_seats | Pro: list, create, or revoke up to 5 named agent seats (separate tokens on one owner). |
create_webhook | Register a webhook for site and domain events. |
list_webhooks | List registered webhooks. |
delete_webhook | Delete a webhook. |
Ask your agent to "publish this folder to deed.page" or "host this report and give me a link". The agent calls publish_site with the files and answers with the live URL. A request that only says "make a website" or "build a page" stays a local draft until you ask to publish or confirm the public URL and the exact file list. An unattended run publishes only when its instructions explicitly say to. To change the site later, it calls update_site with the same slug and token.
Free plan: 25 sites, 25 MB per site, 60 publishes per hour. Free sites are public, so do not publish secrets. Static files only. Free sites show a small "Published with deed.page" badge; Hobby ($3/mo) and Pro never do.
The skill is skills/deed-page/SKILL.md. Since 1.7.0 it also ships two optional scripts in skills/deed-page/scripts/: publish.sh publishes a file or a clean output folder and, above 4 MB, hands off to publish-large.mjs (Node 18+), which uploads through the manifest flow (/v1/uploads). Both skip sensitive and repo-metadata paths and refuse a project root that has no dist, build, out, public, or _site directory unless --allow-root is set. They are the same files served at https://deed.page/cli/. The repo is also a plugin that bundles the skill with the hosted deed.page MCP server, with manifests for each agent:
| File | Format |
|---|---|
plugin.json, mcp.json | Agent Plugins 1.0 (Codex, Cursor, Copilot CLI, Kiro) |
.grok-plugin/plugin.json | Grok Bot |
.cursor-plugin/plugin.json | Cursor |
.codex-plugin/plugin.json, .agents/plugins/marketplace.json | Codex |
.claude-plugin/plugin.json, .claude-plugin/marketplace.json, .mcp.json | Claude Code |
gemini-extension.json | Gemini CLI |
Quick install for any agent:
npx skills add f-o-x11/deed-page-skill
npx skills add f-o-x11/deed-page-skill
Add -g to install for all projects, or -a claude-code, -a codex, -a cursor, or -a hermes-agent to pick the agent.
As a plugin:
claude plugin marketplace add f-o-x11/deed-page-skill
claude plugin install deed-page@deed-page
Or inside Claude Code:
/plugin marketplace add f-o-x11/deed-page-skill
/plugin install deed-page@deed-page
Or as a plain skill:
git clone --depth 1 https://github.com/f-o-x11/deed-page-skill /tmp/deed-page-skill
mkdir -p ~/.claude/skills && cp -r /tmp/deed-page-skill/skills/deed-page ~/.claude/skills/
As a plugin (skill + MCP server):
codex plugin marketplace add f-o-x11/deed-page-skill
Then install deed-page from the plugin directory. As a plain skill:
npx skills add f-o-x11/deed-page-skill -a codex -g
Or inside Codex: $skill-installer install https://github.com/f-o-x11/deed-page-skill/tree/main/skills/deed-page
As a plain skill:
npx skills add f-o-x11/deed-page-skill -a cursor
copilot plugin marketplace add f-o-x11/deed-page-skill
copilot plugin install deed-page@deed-page
The repo includes a Grok Bot plugin manifest in .grok-plugin/plugin.json. Until it is in the Grok Bot plugin catalog, add the remote MCP server https://deed.page/mcp, or install the skill with npx skills add f-o-x11/deed-page-skill.
Add the remote MCP server https://deed.page/mcp (Streamable HTTP, no auth needed to start; see MCP server). It is listed in the official MCP Registry as page.deed/deed-page.
gemini extensions install https://github.com/f-o-x11/deed-page-skill
This installs the skill and the deed.page MCP server (https://deed.page/mcp, no auth) from gemini-extension.json.
hermes skills install f-o-x11/deed-page-skill/skills/deed-page
Or from the deed.page well-known endpoint: hermes skills install well-known:https://deed.page/.well-known/skills/deed-page.
Or npx skills add f-o-x11/deed-page-skill -a hermes-agent -g.
Ask your agent to "publish this", "host this report", or "give me a link". The default path is the bundled publish script:
sh skills/deed-page/scripts/publish.sh ./dist --client "<agent name>"
It publishes a single file or a clean output folder (dist, build, out, public, _site), skips secrets and repo-metadata paths, refuses a project root unless --allow-root is set, and switches to the large-upload flow above 4 MB. Add --dry-run to see the exact file list first. The script prints the live URL on its last line, and the agent answers with it. The first publish returns a token once. It is the key to update or delete that site, so keep it safe.
A request that only says "make a website" or "build a page" produces a local draft. The agent shows a preview, offers to publish, and uploads only after you ask to publish or confirm the public URL and the exact file list. An unattended run publishes only when its instructions explicitly say to.
If the script can't run (no shell, or a single small file), the same publish is one curl request:
curl -sS -T index.html "https://deed.page/v1/sites?slug=my-report-7f3a2c&ref=skill-gh" -H "X-Client: <agent name>"
publish.sh sends ?ref=skill-script and the curl fallback sends ?ref=skill-gh; both tell deed.page that a publish came from this skill. It does not change what is published. Pass --ref to the script, or set DEED_REF for the skill's curl command, to override it. You can also say where you found deed.page with the optional X-Deed-Heard-From header on the first publish (at most 200 characters).
https://deed.page/v1/sites with curl. The MCP server is https://deed.page/mcp. Published sites live at https:// .deed.page/.~/.config/deed-page/token (mode 600), loads it into DEEDPAGE_TOKEN before later publishes so every site stays under one owner, and sends it only to https://deed.page.skills/deed-page/scripts/, which run only when the agent publishes. Above 4 MB, publish-large.mjs PUTs file bytes to the Vercel Blob upload URLs that deed.page returns. See SECURITY.md.MIT. Copyright (c) 2026 Avatar 8 LLC.
deed.page is
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요