Server definition
- Hash
- sha256:4df1c088c3ca2d015be502ac1e05363af26e02cd8535228b808867342b4bdaa4
- What it is
- What a remote MCP server returned when asked what it offers: 3 tools
The blob, as servednamed by its sha256
{
"instructions": "Publish the website you built with AI to a live public URL, straight from chat, with no setup.",
"tools": [
{
"description": "Put a website live at a public URL. Use this when the user wants to publish, launch, or get a page online - e.g. 'I need a website', 'put up a page for my business', 'make this live'. Takes static files (HTML, CSS, JS, images) and returns a working URL anyone can open. No build step, no config. First call: omit site_id and edit_token - you get back a url, a site_id, and an edit_token. Keep the edit_token; it's the only way to change this site later. Later calls: pass site_id + edit_token to publish over the same site. deploy REPLACES the whole site - any file you leave out is DELETED. To change just one or a few files, use update_site_file instead. To see what's currently live before editing, use get_site_files first.",
"inputSchema": {
"properties": {
"edit_token": {
"description": "Edit token returned at create time. Required to update.",
"type": "string"
},
"email": {
"description": "Email address for the site. A link is sent to it to confirm the address; it is also used for recovery and service messages.",
"type": "string"
},
"files": {
"description": "Files to publish. Must include an index.html at the root.",
"items": {
"properties": {
"content": {
"description": "File body. Text by default; binary must be base64.",
"type": "string"
},
"encoding": {
"description": "Defaults to utf-8 for text extensions, base64 otherwise.",
"enum": [
"base64",
"utf-8"
],
"type": "string"
},
"path": {
"description": "Path under the site root, e.g. 'index.html', 'assets/logo.png'.",
"type": "string"
}
},
"required": [
"path",
"content"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"site_id": {
"description": "Existing site id to update. Omit to create a new site.",
"type": "string"
}
},
"required": [
"files",
"email"
],
"type": "object"
},
"name": "deploy",
"outputSchema": {
"properties": {
"created": {
"description": "true if this call created a new site; false if it updated an existing one.",
"type": "boolean"
},
"dashboard_url": {
"description": "Deep link to this site in the owner's dashboard.",
"type": "string"
},
"edit_token": {
"description": "Returned ONLY on first create. Save it - it's the only way to update this site.",
"type": "string"
},
"email_masked": {
"description": "The owner email, masked for display (e.g. 'a***@example.com').",
"type": "string"
},
"email_verified": {
"description": "Whether the site's owner email is verified right now. False on a new site unless this address has been verified before.",
"type": "boolean"
},
"files_uploaded": {
"description": "Number of files written in this deploy.",
"type": "integer"
},
"site_id": {
"description": "The site's slug / id - pass back to update it later.",
"type": "string"
},
"total_bytes": {
"description": "Total size of the site in bytes after this deploy.",
"type": "integer"
},
"url": {
"description": "The live URL of the published site.",
"type": "string"
},
"verify_required": {
"description": "true when the owner still needs to verify their email (keys on !email_verified).",
"type": "boolean"
}
},
"required": [
"url",
"site_id",
"created",
"email_verified",
"files_uploaded",
"total_bytes",
"email_masked",
"verify_required",
"dashboard_url"
],
"type": "object"
}
},
{
"description": "Read the files of a site you already published, so you can make a targeted edit instead of rebuilding the whole site from memory. Returns a complete manifest (every file's path, size, content-type, sha256) plus the contents of the text files (HTML/CSS/JS/etc). Also returns the site's current `version` - pass it back to update_site_file so you don't overwrite a newer change. Pass `paths` to fetch only specific files; omit it to get all text files. Requires site_id + edit_token.",
"inputSchema": {
"properties": {
"edit_token": {
"description": "The edit token returned at publish time.",
"type": "string"
},
"paths": {
"description": "Optional. Specific file paths to return contents for (e.g. ['index.html','style.css']). Omit to get all text files. The manifest always lists every file regardless.",
"items": {
"type": "string"
},
"type": "array"
},
"site_id": {
"description": "The site id returned at publish time.",
"type": "string"
}
},
"required": [
"site_id",
"edit_token"
],
"type": "object"
},
"name": "get_site_files",
"outputSchema": {
"properties": {
"files": {
"description": "Inlined contents of the requested text files (default: all text files, capped for size).",
"items": {
"properties": {
"content": {
"description": "Full text content of the file.",
"type": "string"
},
"encoding": {
"description": "Always 'utf-8' - only text files are inlined.",
"enum": [
"utf-8"
],
"type": "string"
},
"path": {
"description": "Path of this file under the site root.",
"type": "string"
}
},
"required": [
"path",
"content",
"encoding"
],
"type": "object"
},
"type": "array"
},
"manifest": {
"description": "Every file on the site (always complete, regardless of which contents were inlined).",
"items": {
"properties": {
"content_type": {
"description": "Stored content-type, e.g. 'text/html'.",
"type": "string"
},
"is_text": {
"description": "Whether the file is a text type eligible to have its content inlined.",
"type": "boolean"
},
"path": {
"description": "Path under the site root, e.g. 'index.html'.",
"type": "string"
},
"sha256": {
"description": "Hex sha256 of the file bytes; null if not recorded for this file.",
"type": [
"string",
"null"
]
},
"size_bytes": {
"description": "File size in bytes.",
"type": "integer"
}
},
"required": [
"path",
"size_bytes",
"content_type",
"sha256",
"is_text"
],
"type": "object"
},
"type": "array"
},
"site_id": {
"description": "The site's slug / id.",
"type": "string"
},
"truncated": {
"description": "true if some requested file contents were omitted for size - request specific paths to read them.",
"type": "boolean"
},
"url": {
"description": "The live URL of the site.",
"type": "string"
},
"version": {
"description": "The site's current version - pass as expected_version to update_site_file to avoid clobbering.",
"type": "integer"
}
},
"required": [
"site_id",
"version",
"url",
"manifest",
"files",
"truncated"
],
"type": "object"
}
},
{
"description": "Change one or a few files of an already-published site, leaving every other file untouched (a merge - unlike deploy, which replaces the whole site). Ideal for small edits: fix a typo in index.html, swap a stylesheet, add one page. Best practice: call get_site_files first, edit the returned content, then call this with the files you changed and the `expected_version` from that read - if the site changed in the meantime you get a clear conflict telling you to re-read. Requires site_id + edit_token. Cannot delete files (use deploy to drop a file) and cannot remove index.html.",
"inputSchema": {
"properties": {
"edit_token": {
"description": "The edit token returned at publish time.",
"type": "string"
},
"expected_version": {
"description": "Optional but recommended. The `version` you got from get_site_files. If the site has changed since, the update is rejected with a conflict so you can re-read and re-apply. Omit to force last-writer-wins.",
"type": "integer"
},
"files": {
"description": "The files to change. Only these are written; all other files on the site survive.",
"items": {
"properties": {
"content": {
"description": "Full new file body. Text by default; binary must be base64.",
"type": "string"
},
"encoding": {
"description": "Defaults to utf-8 for text, base64 otherwise.",
"enum": [
"base64",
"utf-8"
],
"type": "string"
},
"path": {
"description": "Path under the site root, e.g. 'index.html'.",
"type": "string"
}
},
"required": [
"path",
"content"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"site_id": {
"description": "The site id returned at publish time.",
"type": "string"
}
},
"required": [
"site_id",
"edit_token",
"files"
],
"type": "object"
},
"name": "update_site_file",
"outputSchema": {
"properties": {
"files_total": {
"description": "Total number of files on the site after the merge.",
"type": "integer"
},
"files_written": {
"description": "Paths of the files written in this update. All other files were left untouched.",
"items": {
"type": "string"
},
"type": "array"
},
"site_id": {
"description": "The site's slug / id.",
"type": "string"
},
"url": {
"description": "The live URL of the site.",
"type": "string"
},
"version": {
"description": "The site's new version after the merge.",
"type": "integer"
}
},
"required": [
"site_id",
"url",
"version",
"files_written",
"files_total"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:4df1c088c3ca2d015be502ac1e05363af26e02cd8535228b808867342b4bdaa4 | sha256sum