Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
제작자가 쓴 설명(영어 원문)
Publish HTML from Claude, ChatGPT, Gemini or any MCP client and get a shareable link. No account.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
웹, 데스크톱, 모바일의 Claude에서 쓸 수 있어요:
https://swolvy.com/api/mcp터미널에서 이 명령어를 실행하세요
claude mcp add --transport http swolvy https://swolvy.com/api/mcp프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"swolvy": {
"url": "https://swolvy.com/api/mcp"
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"swolvy": {
"type": "http",
"url": "https://swolvy.com/api/mcp"
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요:
https://swolvy.com/api/mcp메뉴 이름은 요금제나 시기에 따라 조금 다를 수 있어요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
아직 이 서버의 도구 목록을 읽지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 7일 점검
레지스트리 이름이 도메인 swolvy.com 기준으로 확인되었어요(레지스트리가 도메인 소유를 확인해요)
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 점검하지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요
아직 점검하지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요
아직 점검하지 않았어요. 엔드포인트를 점검할 때 도구 목록을 읽어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
제작자의 클라우드에서 실행돼요. 설치 없이 인터넷으로 연결하지만, 보내는 내용은 제작자의 서버를 거쳐요.
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(1.0.0)은 15일 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되기 때문에, 원격 MCP 서버를 지원하는 앱(예: 개발자 모드의 ChatGPT)에서도 쓸 수 있어요.
같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, TF Rooms
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ 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.
Live room availability, rates and stay quotes for 12 New Leaf motels in Twin Falls, Idaho.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
Swolvy turns an HTML file into a shareable link. Drop a file on swolvy.com, or let your AI assistant (Claude, ChatGPT, Gemini) or coding agent publish it for you, and get a short link with optional password protection. No signup is needed. A page can be replaced later without changing its link, and Swolvy Pro adds pages that never expire, files up to 100 MB and your own domain.
This repository is the public home for the two ways AI assistants publish through Swolvy:
https://swolvy.com/api/mcp, for Claude, ChatGPT, Gemini, Claude Code, Cursor and any other MCP clientskills/swolvy, built on the HTTP APISwolvy itself is not in this repository. server.json describes the server in the MCP Registry format.
One address, OAuth sign-in, no API key. The server works without a Swolvy account: anonymous uploads return a link and an edit token. During sign-in you can also link the connector to a Swolvy account, so pages land in your dashboard and the account tools below are added.
https://swolvy.com/api/mcp
The transport is Streamable HTTP with OAuth 2.1 (dynamic client registration and PKCE).
https://swolvy.com/api/mcp and confirm.claude mcp add --transport http swolvy https://swolvy.com/api/mcp
Run /mcp inside Claude Code to complete the OAuth sign-in. Add --scope user to make the server available in every project.
On chatgpt.com: Plugins, then +, then Add custom MCP server. Paste the address, choose OAuth as the authentication, then install the plugin. The desktop app's Add MCP server form (Streamable HTTP) works too, but without account linking.
Add the server to .cursor/mcp.json in your project, or to ~/.cursor/mcp.json for every project:
{
"mcpServers": { "swolvy": { "url": "https://swolvy.com/api/mcp" } } }
In the Gemini app: Settings & help, then Connected Apps, then Add a custom app, and paste the address.
For Gemini CLI, add the server to ~/.gemini/settings.json:
{
"mcpServers": { "swolvy": { "httpUrl": "https://swolvy.com/api/mcp" } } }
Add a remote server (Streamable HTTP) with the same address. Clients that support OAuth sign in through the browser; the server advertises its metadata at https://swolvy.com/.well-known/oauth-protected-resource/api/mcp.
Every connector gets the four publishing tools. A connector linked to a Swolvy account also gets the account tools. The team tools and the workspace parameter appear when the account belongs to a Swolvy Team.
| Tool | Purpose | Key parameters |
|---|---|---|
upload_to_swolvy | Publish a small HTML page (under about 80 KB) in one call and get the link | html_content (required), filename (required, 1-100 chars), password (4-100 chars), generate_password, replace_id + replace_edit_token, remove_password, path, title, description, workspace |
start_swolvy_upload | Start an upload session for a large page; returns upload_id, upload_url and max_bytes | filename (required), plus the same optional fields as upload_to_swolvy |
append_swolvy_chunk | Fallback for clients that cannot make HTTP requests: send the page as base64 chunks | upload_id (required), chunk_base64 (required, about 50 KB of raw bytes per chunk), is_final |
finish_swolvy_upload | Finish a session after the content was sent; returns the link, expires_at and edit_token | upload_id (required) |
The preferred large-file flow is: start_swolvy_upload, then one PUT of the whole file to upload_url (for example curl -X PUT -H 'Content-Type: text/html' --data-binary @page.html ), then finish_swolvy_upload.
Password handling: pass password when the user named one, or generate_password: true when they only asked for protection. Swolvy then picks a memorable password (like amber-river-42) and returns it as password; the assistant tells the user. Pages can be replaced up to 10 times with replace_id and replace_edit_token; the new version keeps the current password unless a new password or remove_password: true is given.
| Tool | Purpose | Key parameters |
|---|---|---|
list_my_files | List the account's pages with id, link, path, name, views, size, password state and expiry | none |
update_my_file | Replace a page's HTML; the link stays the same, no edit token needed | id, html_content (required), filename |
rename_my_file | Change a page's display name | id, filename (required) |
set_my_file_path | Change the page's path on the account's custom domain | id, path (required) |
set_my_file_metadata | Pro: title, description and image for link previews | id (required), title, description, preview_image_base64, remove_preview_image |
set_my_file_password | Set, change or remove a page's password | id (required), password (string or null), generate_password |
delete_my_file | Permanently delete a page | id (required) |
get_my_plan | Show the plan (Free or Pro), storage used, renewal and the upgrade link; checks a coupon | coupon_code |
get_my_domain | Pro: show the custom domain, whether it is live, and DNS records still to add | none |
connect_my_domain | Pro: connect a domain you own; returns the CNAME and TXT records to add | hostname (required) |
set_my_branding | Pro: default link-preview image, and with a custom domain the site name and favicon | site_name, favicon_base64, remove_favicon, preview_image_base64, remove_preview_image |
set_my_name | Set the name shown in the dashboard | name (required) |
| Tool | Purpose | Key parameters |
|---|---|---|
list_my_teams | List the teams the account belongs to, with role, plan, domain and dashboard link | none |
get_my_workspace | Show the active workspace: personal or a team | none |
set_my_workspace | Switch the active workspace for the website and every connected AI | workspace (required): "personal", a team id such as org_abc123, or a team slug |
For scripts, CI jobs and coding agents that would rather make one HTTP request than add an MCP server.
POST https://swolvy.com/api/v1/upload with a JSON body, or a multipart/form-data body with the same field names (plus file for the HTML file itself).
| Field | Required | Meaning |
|---|---|---|
html | yes (or file in a form) | The complete HTML document, up to 2 MB |
filename | yes | The page's name, up to 100 characters |
password | no | 4-100 characters; viewers must enter it |
generate_password | no | true: Swolvy picks the password and returns it |
replace_id, replace_edit_token | no | Replace an existing page and keep its link |
remove_password | no | With a replace: drop the page's password |
path | no | With an API key: the page's path in the account |
title, description | no | Pro accounts: link-preview text |
workspace | no | With an API key in a team: "personal", "team", or a team id or slug (also the X-Swolvy-Workspace header) |
Authentication is optional. Without it the upload is anonymous. With Authorization: Bearer swk_... (an API key from the dashboard, under AI & API) the page is saved to your account.
curl -X POST https://swolvy.com/api/v1/upload \
-H "Content-Type: application/json" \ -d '{"html":"<!DOCTYPE html> Hello ","filename":"Hello.html"}'
Or send a file from disk:
curl -X POST https://swolvy.com/api/v1/upload \
-F "file=@index.html" -F "filename=index.html"
{
"url": "https://swolvy.com/abc123", "id": "abc123", "expires_at": "2026-11-21T10:00:00.000Z", "edit_token": "...", "password_protected": false }
Other fields appear when they apply: password (when generate_password was used), never_expires: true (Pro), replaced: true, path, title, description, custom_url (the page's link on a custom domain), workspace, and viewer_warning (visitors see a short notice before a page that looks like a sign-in form). Errors are JSON with one field: {"error": "..."}.
Keep the edit_token: it is the only way to replace an anonymous page later.
import requests
r = requests.post( "https://swolvy.com/api/v1/upload", json={"html": open("index.html").read(), "filename": "index.html"}, ) r.raise_for_status() page = r.json() print(page["url"], page["edit_token"])
import { readFile } from "node:fs/promises";
const res = await fetch("https://swolvy.com/api/v1/upload", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ html: await readFile("index.html", "utf8"), filename: "index.html" }), }); const page = await res.json(); if (!res.ok) throw new Error(page.error); console.log(page.url, page.edit_token);
Send the new HTML with the id and edit token from the first response. The link does not change and the 30-day clock restarts.
curl -X POST https://swolvy.com/api/v1/upload \
-H "Content-Type: application/json" \ -d '{"html":"<!DOCTYPE html> Hello again ","filename":"Hello.html","replace_id":"abc123","replace_edit_token":"..."}'
One request carries up to 2 MB. Pro accounts can send pages up to 100 MB through a session; the response's max_bytes says what the current plan allows.
POST https://swolvy.com/api/v1/upload/session with {"filename": "report.html"} and the same optional fields as above (password, generate_password, replace_id, replace_edit_token, remove_password, path, title, description, workspace). Send Authorization: Bearer swk_... for a Pro account. Response: {"upload_id", "upload_url", "finish_url", "max_bytes"}.PUT the raw HTML to upload_url: curl -X PUT -H "Content-Type: text/html" --data-binary @report.html .POST to finish_url (/api/v1/upload/session/{id}/finish). The response has the same fields as /api/v1/upload.Uploads are limited to 10 per hour per IP address (HTTP 429), with a global cap across all callers. Bodies over the size limit return 413.
The swolvy skill teaches Claude Code the API call above so that "publish this page" or "give me a link to this HTML" works in one step.
Install it by copying the skill folder into your Claude Code skills directory:
git clone https://github.com/enahmedsamy/swolvy-mcp.git
mkdir -p ~/.claude/skills cp -r swolvy-mcp/skills/swolvy ~/.claude/skills/swolvy
Or add it to one project only, under .claude/skills/swolvy/. Then ask Claude Code to publish an HTML file, or run /swolvy. The skill file is skills/swolvy/SKILL.md.
If you would rather use tool calls than curl, add the MCP server to Claude Code instead (see above). Both give the same link.
| Free | Swolvy Pro | |
|---|---|---|
| Price | $0, no signup | $3 a month or $18 a year |
| File size | up to 2 MB | up to 100 MB (2 GB of storage in total) |
| Expiry | 30 days after the last upload; a new version restarts the 30 days | never |
| Password protection | yes | yes |
| Replace on
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요