shiply — Static Site Hosting & Deployment
by stevejford
README.md
# shiply — MCP server
[shiply](https://shiply.now) is the production backend for anything an agent
builds — not just static hosting. An agent can publish any app in a single call —
no account, no config — and then give it a real backend over the same MCP server:
a SQL database, server functions, SSR, email (send and receive), custom domains,
SSL, environment variables, site data, lead capture, and a marketplace to sell the
site it built. Flat price, no usage meter.
The recommended way to use shiply is the **hosted, remote** MCP endpoint — connect
to the live URL, nothing to run. This repo also ships a small **local stdio MCP
server** (`npx shiply-mcp` / `node index.mjs`) that wraps shiply's public REST API
directly (it is a real local server, not a proxy), for clients or hosts that prefer
a local process. Listed on the Official MCP Registry as **`now.shiply/shiply`**.
## Connect
**Remote MCP endpoint (Streamable HTTP):**
```
https://shiply.now/mcp
```
Add it to an MCP client (Claude Desktop, Cursor, Claude Code, etc.):
```json
{
"mcpServers": {
"shiply": {
"url": "https://shiply.now/mcp"
}
}
}
```
### Local (stdio)
Prefer a local process? Run the bundled server — it calls shiply's public REST API
directly (no proxy to the hosted endpoint):
```json
{
"mcpServers": {
"shiply": {
"command": "npx",
"args": ["-y", "shiply-mcp"]
}
}
}
```
Or clone this repo and run `npm install && node index.mjs`. Set `SHIPLY_API_KEY`
(`shp_…`) for owned-site operations; `publish_site` works without it. Local tools:
`publish_site`, `site_status`, `rollback_site`, `add_custom_domain`,
`check_custom_domain`.
## Auth
Auth is **optional**. `publish_site` works anonymously — anonymous sites go live
instantly and can be claimed into an account later. Pass a Bearer API key
(`Authorization: Bearer shp_…`) to manage owned sites and unlock variables,
custom domains, databases, and analytics. Mint a key from the email-code flow in
[llms.txt](https://shiply.now/llms.txt).
## Tools
The live, authoritative tool list + JSON schemas are always at
[`/.well-known/mcp.json`](https://shiply.now/.well-known/mcp.json). By area:
- **Publish & versions** — `publish_site` (files → live `*.shiply.now` URL),
update an existing site, `rollback`, `delete_site`
- **Status & verify** — `site_status`, `list_sites`, `verify_site` (status + SSL +
thumbnail in one call)
- **Domains & SSL** — `add_domain`, `check_domain`, `set_handle` (vanity subdomain)
- **Config** — `set_variable` (encrypted per-user env), site access (password /
invite-only)
- **Site Data** — read/write/export visitor records and collections
- **Databases** — per-site SQL: Cloudflare D1 and Neon Postgres (provision, query,
branch)
- **Edge functions** — deploy serverless functions alongside the static site
- **Email & inbox** — `send_email`, `list_site_inbox`, `set_mailbox`, forward
- **Contracts** — create, send, and track e-sign contracts
- **Analytics** — `get_analytics` (views, referrers)
## Examples
Publish a folder, get a live URL (anonymous, no account):
```jsonc
// tool: publish_site
{ "files": [ { "path": "index.html", "content": "<h1>Hi</h1>" } ] }
// → { "url": "https://merry-maple-3kf2.shiply.now", "claimUrl": "..." }
```
Confirm it's live (status + SSL + screenshot) before reporting done:
```jsonc
// tool: verify_site
{ "slug": "merry-maple-3kf2" }
// → { "status": "LIVE", "ssl": { "valid": true }, "thumbnailUrl": "..." }
```
## Pricing
Flat **$0 / $8 / $24** — no usage meter, no surprise overage bill.
See https://shiply.now/pricing.
## Links
- Site: https://shiply.now
- Docs: https://shiply.now/docs
- Machine guide: https://shiply.now/llms.txt
- OpenAPI: https://shiply.now/openapi.json
- MCP metadata: https://shiply.now/.well-known/mcp.json
- Skill: [`shiply/SKILL.md`](shiply/SKILL.md) · install with `npx shiply-cli skill`
- Official MCP Registry: `now.shiply/shiply`
## License
MIT — see [LICENSE](LICENSE). (This repo is a metadata-only descriptor; the shiply
product source is not included.)
TDQS
A4.4/5.0
Scored across 5 tools
Disambiguation5/5
Each tool serves a unique function: adding/checking custom domains, publishing, rolling back, and checking site status. No two tools have overlapping purposes.
Naming Consistency4/5
Most tools follow a verb_noun pattern (e.g., publish_site, rollback_site), but 'site_status' is noun_noun, which is a minor inconsistency.
Tool Count5/5
Five tools cover the core deployment and domain management workflow without being excessive or insufficient.
Completeness4/5
The tools cover essential operations (publish, rollback, custom domain, status), but missing delete or list functionalities, which are minor gaps.
Maintenance
ActivityInactive
ResponsivenessNo issues