Servidor MCP

chorus.host

host.chorus/mcp

Qué hace este MCP

Publishes websites and files to live HTTPS URLs and provides site status, hosting documentation, and server-side worker capabilities.

get_docs
Read chorus.host docs
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
Solo lectura Idempotente
Esquema de entrada
{'type': 'object'}
get_site
Check site status
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.
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': "The site's slug, i.e. the subdomain in <slug>.chorus.host. A full URL also works."}, 'claim_token': {'type': 'string', 'description': 'Optional claim_token (ctk_...) of the site. Unlocks the file list and other details.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['slug', 'status', 'password_protected', 'can_manage', 'summary'], 'properties': {'url': {'type': 'string'}, 'slug': {'type': 'string'}, 'files': {'type': 'array', 'items': {'type': 'string'}, 'description': 'File paths of the live version (first 200).'}, 'title': {'type': 'string'}, 'status': {'type': 'string', 'description': 'live, not_live (created but nothing published yet) or not_found (never published, expired or deleted).'}, 'claimed': {'type': 'boolean', 'description': 'Whether an account owns the site. Only returned when can_manage is true.'}, 'summary': {'type': 'string'}, 'claim_url': {'type': 'string'}, 'can_manage': {'type': 'boolean', 'description': 'True when the claim_token or API key you sent lets you update this site.'}, 'created_at': {'type': 'string'}, 'expires_at': {'type': 'string', 'description': 'When the site will be deleted (RFC 3339). Empty for sites that never expire.'}, 'file_count': {'type': 'integer'}, 'updated_at': {'type': 'string'}, 'total_bytes': {'type': 'integer'}, 'files_truncated': {'type': 'boolean'}, 'current_version_id': {'type': 'string'}, 'password_protected': {'type': 'boolean'}}, 'additionalProperties': False}
publish_site
Publish website
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.
Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['files'], 'properties': {'slug': {'type': 'string', '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.'}, 'files': {'type': 'array', 'items': {'type': 'object', 'required': ['path', 'content'], 'properties': {'path': {'type': 'string', 'minLength': 1, '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.'}, 'content': {'type': 'string', 'description': 'File content: plain text, or base64 when encoding is base64.'}, 'encoding': {'enum': ['utf8', 'base64'], 'type': 'string', 'default': 'utf8', 'description': 'utf8 (default) for text files; base64 for images, fonts and other binary files.'}}, 'additionalProperties': False}, 'maxItems': 1000, 'minItems': 1, 'description': 'Every file of the site. Each call makes a new version with exactly these files; earlier versions are kept.'}, 'title': {'type': 'string', 'maxLength': 200, 'description': 'Optional human-readable title saved with the site.'}, 'password': {'type': 'object', 'required': ['username', 'password'], 'properties': {'password': {'type': 'string', 'description': 'Password visitors type, 1-72 characters.'}, 'username': {'type': 'string', 'description': 'Username visitors type, 1-128 characters, e.g. client.'}}, '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.', 'additionalProperties': False}, 'expires_at': {'type': 'string', '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.'}, 'claim_token': {'type': 'string', 'description': 'The claim_token (ctk_...) returned when the site was first published. Required to update an anonymous site.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['url', 'page_url', 'slug', 'updated', 'anonymous', 'version_id', 'file_count', 'total_bytes', 'tell_the_user', 'next_steps'], 'properties': {'url': {'type': 'string', 'description': 'Live URL of the site root.'}, 'slug': {'type': 'string'}, 'updated': {'type': 'boolean', 'description': 'True when an existing site got a new version.'}, 'file_url': {'type': 'string', '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.'}, 'page_url': {'type': 'string', 'description': 'URL to open: the site root, or the only HTML page when there is no index.html.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'anonymous': {'type': 'boolean', 'description': 'True when the site is not owned by an account and will expire unless claimed.'}, 'claim_url': {'type': 'string', 'description': 'Link for the user to keep the site: they open it and sign in with their email.'}, 'expires_at': {'type': 'string', 'description': 'When the site will be deleted (RFC 3339), unless claimed.'}, 'file_count': {'type': 'integer'}, 'next_steps': {'type': 'string', 'description': 'Notes for you, the agent.'}, 'version_id': {'type': 'string'}, 'claim_token': {'type': 'string', 'description': 'Secret needed to update this anonymous site later. Save it; never put it on the page.'}, 'total_bytes': {'type': 'integer'}, 'tell_the_user': {'type': 'string', 'description': 'Plain-English message to relay to the user.'}, 'password_protected': {'type': 'boolean', 'description': 'True when visitors must enter the username and password you set.'}}, 'additionalProperties': False}
Añadido
publish_site
2 de October de 2026 a las 02:40
Añadido
get_site
2 de October de 2026 a las 02:40
Añadido
get_docs
2 de October de 2026 a las 02:40