Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,545Letters: 14Defects: 1,324counted 3 min ago
teppi

Server definition

Hash
sha256:ecbcb1418691a38f79649219505183a3a8ca5c2dfa6bbd373e811d535f2b6e1e
What it is
What a remote MCP server returned when asked what it offers: 3 tools

The blob, as servednamed by its sha256

{ "instructions": "chorus.host is web hosting for agents. Use publish_site to put a website or any files online at https://<slug>.chorus.host in one call, with no account. Anonymous sites stay up for 24 hours: always give the user the claim_url so they can keep the site, and save the claim_token so you can update the site later (publish_site with the same slug and claim_token). For backends (APIs and webhooks) chorus.host runs Workers at <slug>.worker.chorus.host; call get_docs for how to deploy them.", "tools": [ { "description": "Return the full chorus.host documentation as Markdown (the same text as https://chorus.host/skill.md): the REST API, the beacon CLI, accounts and API keys, claiming sites, password protection, and Workers, which run server-side JavaScript at <slug>.worker.chorus.host for APIs and webhook receivers (GitHub, Stripe), including Hono apps, with no Cloudflare account needed. Read it before building a backend, when the user asks about accounts or limits, or when a task needs something publish_site can't do. Setup for every MCP client: https://chorus.host/mcp", "inputSchema": { "type": "object" }, "name": "get_docs", "outputSchema": null }, { "description": "Check a chorus.host site: whether it is live, its URL, whether it has a password, and when it expires. With the site's claim_token (or an API key that owns the site) it also returns the file list, total size, live version and claim link. Use it to confirm a publish worked, to see when an anonymous site expires, or to see what is published at a slug.", "inputSchema": { "additionalProperties": false, "properties": { "claim_token": { "description": "Optional claim_token (ctk_...) of the site. Unlocks the file list and other details.", "type": "string" }, "slug": { "description": "The site's slug, i.e. the subdomain in <slug>.chorus.host. A full URL also works.", "minLength": 1, "type": "string" } }, "required": [ "slug" ], "type": "object" }, "name": "get_site", "outputSchema": { "additionalProperties": false, "properties": { "can_manage": { "description": "True when the claim_token or API key you sent lets you update this site.", "type": "boolean" }, "claim_url": { "type": "string" }, "claimed": { "description": "Whether an account owns the site. Only returned when can_manage is true.", "type": "boolean" }, "created_at": { "type": "string" }, "current_version_id": { "type": "string" }, "expires_at": { "description": "When the site will be deleted (RFC 3339). Empty for sites that never expire.", "type": "string" }, "file_count": { "type": "integer" }, "files": { "description": "File paths of the live version (first 200).", "items": { "type": "string" }, "type": "array" }, "files_truncated": { "type": "boolean" }, "password_protected": { "type": "boolean" }, "slug": { "type": "string" }, "status": { "description": "live, not_live (created but nothing published yet) or not_found (never published, expired or deleted).", "type": "string" }, "summary": { "type": "string" }, "title": { "type": "string" }, "total_bytes": { "type": "integer" }, "updated_at": { "type": "string" }, "url": { "type": "string" } }, "required": [ "slug", "status", "password_protected", "can_manage", "summary" ], "type": "object" } }, { "description": "Publish a website or any file (PDF, image, HTML, CSS/JS) to a live public HTTPS URL at <slug>.chorus.host in one call. Files keep their content type, so PDFs and images open in the browser. No account or API key needed. Use it when the user asks to publish, host, deploy or share a page, website, landing page, report, dashboard, mini app, portfolio, game or demo, wants to share an HTML file or report as a link, wants a temporary preview link that expires on its own, or wants a link to something you made. Send every file with its path (index.html is served at the root) and its content: plain text for HTML, CSS, JS, SVG, JSON and Markdown, or base64 with encoding='base64' for images, PDFs, fonts and other binary files. For a single file, the direct link is https://<slug>.chorus.host/<path>. Each call makes a new version live containing exactly the files you send; the previous version is kept and can be rolled back, so nothing is lost. Pass password to put the site behind a username/password prompt (works on anonymous sites too), and expires_at to make the link expire on schedule. Limits: 4 MB of file content per call without an API key, 10 MB with one, and 1,000 files. Anonymous sites stay live for 24 hours. Returns url, page_url, file_url, claim_url, claim_token and expires_at: give the user the claim_url so they can keep the site for free, and save the claim_token. To update a site, call again with the same slug and its claim_token.", "inputSchema": { "additionalProperties": false, "properties": { "claim_token": { "description": "The claim_token (ctk_...) returned when the site was first published. Required to update an anonymous site.", "type": "string" }, "expires_at": { "description": "Optional. When the site should be deleted: RFC 3339 (2026-10-08T00:00:00Z) or a duration from now (90m, 2h, 7d). Without an API key it can only be earlier than the default 24 hours; with one, any future time.", "type": "string" }, "files": { "description": "Every file of the site. Each call makes a new version with exactly these files; earlier versions are kept.", "items": { "additionalProperties": false, "properties": { "content": { "description": "File content: plain text, or base64 when encoding is base64.", "type": "string" }, "encoding": { "default": "utf8", "description": "utf8 (default) for text files; base64 for images, fonts and other binary files.", "enum": [ "utf8", "base64" ], "type": "string" }, "path": { "description": "Path of the file inside the site, e.g. index.html, about/index.html or assets/logo.png. index.html is the home page. Percent-encoding is decoded as in the REST API, so write a literal % as %25.", "minLength": 1, "type": "string" } }, "required": [ "path", "content" ], "type": "object" }, "maxItems": 1000, "minItems": 1, "type": "array" }, "password": { "additionalProperties": false, "description": "Optional. Put the site behind a browser login prompt (HTTP Basic Auth). Works without an account. Give the user the URL, username and password; send the password separately from the link.", "properties": { "password": { "description": "Password visitors type, 1-72 characters.", "type": "string" }, "username": { "description": "Username visitors type, 1-128 characters, e.g. client.", "type": "string" } }, "required": [ "username", "password" ], "type": "object" }, "slug": { "description": "Optional. Subdomain to publish to (3-63 lowercase letters, digits and hyphens). Leave empty for a random one. To update an existing site, pass its slug together with its claim_token.", "type": "string" }, "title": { "description": "Optional human-readable title saved with the site.", "maxLength": 200, "type": "string" } }, "required": [ "files" ], "type": "object" }, "name": "publish_site", "outputSchema": { "additionalProperties": false, "properties": { "anonymous": { "description": "True when the site is not owned by an account and will expire unless claimed.", "type": "boolean" }, "claim_token": { "description": "Secret needed to update this anonymous site later. Save it; never put it on the page.", "type": "string" }, "claim_url": { "description": "Link for the user to keep the site: they open it and sign in with their email.", "type": "string" }, "expires_at": { "description": "When the site will be deleted (RFC 3339), unless claimed.", "type": "string" }, "file_count": { "type": "integer" }, "file_url": { "description": "Direct link to the file when exactly one file was published, e.g. https://<slug>.chorus.host/report.pdf. Paste this one into chat apps so images and PDFs preview.", "type": "string" }, "next_steps": { "description": "Notes for you, the agent.", "type": "string" }, "page_url": { "description": "URL to open: the site root, or the only HTML page when there is no index.html.", "type": "string" }, "password_protected": { "description": "True when visitors must enter the username and password you set.", "type": "boolean" }, "slug": { "type": "string" }, "tell_the_user": { "description": "Plain-English message to relay to the user.", "type": "string" }, "total_bytes": { "type": "integer" }, "updated": { "description": "True when an existing site got a new version.", "type": "boolean" }, "url": { "description": "Live URL of the site root.", "type": "string" }, "version_id": { "type": "string" }, "warnings": { "items": { "type": "string" }, "type": "array" } }, "required": [ "url", "page_url", "slug", "updated", "anonymous", "version_id", "file_count", "total_bytes", "tell_the_user", "next_steps" ], "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:ecbcb1418691a38f79649219505183a3a8ca5c2dfa6bbd373e811d535f2b6e1e | sha256sum