{"anonymous":{"docs":"https://tuqo.ru/drop/","draft_deploy":"https://api.tuqo.ru/instant/deploy","ttl_hours":24},"auth":{"api_key":{"format":"Bearer tqk_<prefix>_<secret>","header":"Authorization","obtain":"https://app.tuqo.ru → project → API keys","scopes":["readonly","editor","full"]},"oauth":{"authorization_server":"https://api.tuqo.ru","dynamic_client_registration":true,"protected_resource_metadata":"https://mcp.tuqo.ru/.well-known/oauth-protected-resource","type":"oauth2.1"}},"description":"Static site hosting in Russia: sites, deploys, custom domains with SSL, forms, gated access, analytics — from any AI agent.","description_ru":"Российский хостинг статических сайтов: сайты, деплой, домены с SSL, формы, закрытый доступ, аналитика — из нейросети.","docs":{"agent_instructions":"https://mcp.tuqo.ru/","ai_md":"https://tuqo.ru/ai.md","changelog":"https://tuqo.ru/changelog.md","connect":"https://tuqo.ru/connect/","for_ai":"https://tuqo.ru/ai/","llms_full":"https://tuqo.ru/llms-full.txt","llms_txt":"https://tuqo.ru/llms.txt","openapi":"https://tuqo.ru/openapi.json","pricing":"https://tuqo.ru/pricing.md","prompt":"https://tuqo.ru/prompt.md","skill":"https://tuqo.ru/SKILL.md"},"endpoint":"https://mcp.tuqo.ru/mcp","name":"Tuqo","protocol_version":"2025-06-18","registry_name":"ru.tuqo/mcp","tools":[{"description":"Return the API key context: project_id, project name and available scopes (readonly, editor, full). Call it first in a session to learn what you can manage.","name":"whoami"},{"description":"List the project's sites. Each site includes url (live URL) and form_endpoint (where a form posts submissions; works on every plan). Sites in the trash carry deletion_scheduled_at; see list_trashed.","name":"list_sites"},{"description":"Create a site in the project. Subdomain: 5–40 chars, lowercase letters, digits, hyphens; 5–8 chars only on the Pro plan or higher. Returns the site with url (live URL) and form_endpoint (form submissions, every plan). Next, publish content with deploy_files (static files) or deploy_site (archive).","name":"create_site"},{"description":"Return a site by id with url (live URL) and form_endpoint, plus recommendations (site checks for the active deploy: advice on the site's files, not errors) when available.","name":"get_site"},{"description":"Rename a site and optionally change its description.","name":"update_site"},{"description":"Move a site and all its deploys to the trash. Serving stops immediately (visitors see a 'temporarily unavailable' page); the site is purged after 24 hours and can be restored with restore_site until then (see list_trashed). Requires confirm:true.","name":"delete_site"},{"description":"List the project's sites in the trash (scheduled for deletion, not yet purged). Restore one with restore_site.","name":"list_trashed"},{"description":"Restore a site from the trash within 24 hours of deletion. The restored site counts toward the plan's site limit.","name":"restore_site"},{"description":"Enable or disable serving of a site. enabled:false serves a 'temporarily unavailable' page while deploys and domains are kept; enabled:true resumes serving. A site cannot be enabled while the plan is suspended.","name":"set_site_enabled"},{"description":"Return the site's gated-access state: open or gated, active method (password, email_list, subscribers, members, paywall), access expiry, opens limit, login screen branding and 30-day login stats; for paywall also a read-only storefront status. Password: see reveal_site_password; members and buyers: get_site_members.","name":"get_site_access"},{"description":"Gate the site with a password or replace the current one. Visitors see a login screen; every file is protected, including images and PDFs. Changing the password signs out everyone who has entered. Returns the password in plain text: hand it to the user right away (reveal_site_password shows it later). Requires the Start plan or higher, or the password option.","name":"set_site_password"},{"description":"Return the current password of a gated site. It is not a secret from the owner, who set it and sends it to clients; showing it avoids forcing a new password on everyone. Returns null when the site is not gated by password or the password predates this feature: then use set_site_password.","name":"reveal_site_password"},{"description":"Set the login screen of a gated site: title, text, logo and tab icon so visitors know where they are. Plain text only, no markup or links; null clears a field, an omitted field stays unchanged. Requires the Start plan or higher and an already gated site: gate it first with set_site_password.","name":"set_site_access_brand"},{"description":"Set when access to a gated site expires: the gate closes on its own, files stay, and the login screen shows a countdown. Extending with days counts from the current expiry, not from today, so it never shortens active access. Not for paywall: buyers keep their paid period and the sales deadline is set in the panel.","name":"set_site_access_expiry"},{"description":"Limit how many times a gated site can be opened: after N logins the link stops working. Counts devices, not page views (one person on phone and laptop is two opens), so the minimum is 3; visitors already in keep access. Only for password, email_list and subscribers; members and paywall limit people via max_seats in set_site_members_access.","name":"set_site_access_opens"},{"description":"Gate the site with an email code: the visitor enters an address, receives a six-digit code and signs in. Only allowlisted addresses can enter, so add them with add_site_access_email or add_site_access_emails, otherwise nobody gets in. Unlike a password, the owner sees who opened the site by name. Requires the Pro plan or higher.","name":"set_site_email_access"},{"description":"Gate the site for channel subscribers: only subscribers of the owner's Telegram or MAX channels get in, confirming the subscription in the bot on the login screen. Pass 1–3 active channels of one platform from list_messenger_channels. Requires the Pro plan or higher, or the paid subscribers option.","name":"set_site_subscribers_access"},{"description":"List the project owner's Telegram and MAX channels and groups: candidates for set_site_subscribers_access. Read-only; channels are added and verified in the panel profile.","name":"list_messenger_channels"},{"description":"Add one address to the email allowlist of a gated site (email code mode). Up to 1000 addresses per site; for many addresses at once use add_site_access_emails.","name":"add_site_access_email"},{"description":"Add many addresses to the email allowlist in one call, separated by newlines, commas or semicolons. Duplicates and existing entries are skipped, invalid ones are returned separately: partial success is normal. Labels are not set here (a comma would split them): use set_site_access_email_label afterwards.","name":"add_site_access_emails"},{"description":"Set or change the owner-only label of an allowlisted address, e.g. a client name. Visitors never see it. An empty string clears the label; the address keeps its access.","name":"set_site_access_email_label"},{"description":"List addresses on the email allowlist of a gated site, with devices and last login per address.","name":"list_site_access_emails"},{"description":"Remove one address from the email allowlist. Takes effect immediately: passes issued to that address are revoked and the visitor is signed out.","name":"remove_site_access_email"},{"description":"Remove several addresses from the email allowlist, or clear it with all:true. Access ends immediately for everyone listed, including visitors currently viewing, and cannot be undone except by re-adding. Requires confirm:true: show the user who will be removed first.","name":"remove_site_access_emails"},{"description":"Remove the gate: the site becomes public again and pages may get indexed. Issued passes are revoked, the password is deleted for good, expiry and opens counter reset; the email allowlist and login screen branding are kept, so the site can be gated again in one call. Visible to the owner's clients: confirm with the user first.","name":"open_site_access"},{"description":"Gate the site with member registration: visitors sign up themselves by email code, give a name on first login (if ask_name) and accept the owner's documents; no allowlist. Settings are optional in the same call, omitted ones stay. Replaces any other access mode (existing passes stop working). Requires the Pro plan or higher, or the Members option.","name":"set_site_members_access"},{"description":"List members of a site in member registration or paid access mode: search with q, counts by status (pending, active, rejected, blocked), seats taken, mode settings and owner documents. In paid access members carry paid_at, paid_until (null for a one-time purchase) and last_paid_kop; without paid_at a member has no paid access.","name":"get_site_members"},{"description":"Moderate a member: approve (accept a pending or rejected request, emails 'access opened', fails over max_seats), reject (silent), block (revoke access now, emails 'access closed'), unblock, delete (erase the member's data irreversibly, needs confirm:true and the person's explicit request; paid access is lost without refund). Paid access has no moderation.","name":"moderate_site_member"},{"description":"Replace the owner's documents (0–3: offer, policy, rules) on the login screen in member registration and paid access; pass the full list, empty to remove all. Title up to 60 chars, https:// URLs only. Optional in member registration, paid access needs at least one. Set request_reconsent:true when terms change materially so members re-accept on next login.","name":"set_site_documents"},{"description":"List the site's deploys, newest first — the version history for rollback. Only deploys with artifacts_purged:false can be activated; purged ones (beyond the keep_deploys retention limit or removed with delete_deploy) cannot.","name":"list_deploys"},{"description":"Read-only. Return the status of one deploy: queued, building, ready, active, failed or superseded, plus the site url, build_mode (static or build) and, when available, recommendations (site checks: advice, not errors). Poll it after deploy_files or deploy_site until the status is active or failed; for the version history of a site use list_deploys, for build errors get_logs.","name":"get_deploy_status"},{"description":"Publish a static site from files sent directly, no archive — the recommended path for generated sites. Send the full file set with index.html at the root: text as-is, binaries with encoding base64, unchanged files as {path, sha256} from get_manifest instead of content. package.json is rejected: use deploy_site for build projects.","name":"deploy_files"},{"description":"Publish a site from a base64-encoded tar.gz or zip archive up to 50 MB. Use it for build projects (package.json present — built on Node 20) or when an archive already exists; for generated static files prefer deploy_files. A ready dist with index.html at the root publishes instantly. Track progress with get_deploy_status.","name":"deploy_site"},{"description":"Return the manifest of the site's active deploy — an array of {path, sha256} for its current files. To edit a live site without re-sending media, reference unchanged files in deploy_files as {path, sha256} instead of content. Empty when there is no active deploy or no manifest (e.g. a build project).","name":"get_manifest"},{"description":"Return the build outcome of a deploy: status, error text (trailing lines only, when failed), timings and size.","name":"get_logs"},{"description":"Publish the given ready deploy, making it live. Use it to publish a preview built with activate:false or to roll back to an earlier version. Returns the updated site (new active_deploy_id) and deploy. Fails for purged deploys (artifacts_purged:true) — deploy again instead; see list_deploys.","name":"activate_deploy"},{"description":"Return a secret preview link for a build; the live URL is unchanged. Use it for a build made with activate:false, or to inspect an older version before rolling back. Not issued for the active deploy — its content is at the live URL. The link bypasses the site's password and gated access; warn the user. Requires the Start plan or higher.","name":"get_preview_url"},{"description":"Delete the files of a specific build to free quota and a retention slot. The active deploy and builds in queue or in progress cannot be deleted. The deploy record stays in history, but rollback to this version becomes impossible. Irreversible — confirm with the user first.","name":"delete_deploy"},{"description":"List the site's custom domains with diagnostics: a_record_ok (whether the A record points to Tuqo; false means the site will not open on this domain) and ssl_status (active = HTTPS certificate confirmed, pending = being issued or not checked yet, failed = not issued). Recheck both with verify_domain.","name":"list_domains"},{"description":"Attach a custom domain to the site. Returns the TXT record (_tuqo-verify) that proves ownership; then call verify_domain.","name":"set_custom_domain"},{"description":"Check the TXT record and verify domain ownership. Also returns A record diagnostics (a_record: ok, found, expected, message — whether the domain points to Tuqo) and an HTTPS probe (https: status active, pending or failed, reason, message). For an already verified domain this rechecks the A record and HTTPS.","name":"verify_domain"},{"description":"Detach a custom domain from the site. Deleted immediately and permanently, no trash. Requires confirm:true.","name":"delete_domain"},{"description":"Return the project's forms overview: monthly submission quota and usage, purchased balance, counts by status and a per-site form schema (form_endpoint, content_type, honeypot field, minimum fill time, ready HTML snippet to paste as is). Call it before building a form; form_schema explains accepted Content-Types and service fields.","name":"get_forms_overview"},{"description":"List form submissions (leads) of the project. Optional filters: site_id and status (verified by default); paginate with limit (1–200) and offset.","name":"get_form_submissions"},{"description":"Return the site's auto-reply settings: the email sent to the submitter after a form submission (subject, body, email field, lead magnet files, delivery page options, counters). allowed=false means the plan lacks the feature; requires the Start plan or higher.","name":"get_autoreply"},{"description":"Enable or configure the auto-reply email sent from no-reply to the submitter after a form submission; requires the Start plan or higher. The address comes from the submission's email field (or email_field). subject, body and email_field are a patch: an omitted key keeps the value, null clears it. Files: add_autoreply_file.","name":"set_autoreply"},{"description":"Add a lead magnet file to the site's auto-reply (up to 3 files; PDF, images, zip, txt; up to 50 MB each). The submitter downloads it via a link in the email on a brandable delivery page. Requires the Start plan or higher and free storage quota. Current files: get_autoreply.","name":"add_autoreply_file"},{"description":"Remove a lead magnet file from the site's auto-reply delivery. Existing delivery links keep opening the page with the remaining files. Take file_id from get_autoreply (files).","name":"remove_autoreply_file"},{"description":"Configure the lead magnet delivery page and link lifetime. Patch semantics: an omitted field keeps the value, null clears it. page_title and upsell_text are enabled only together (both or neither); the logo requires both texts. logo_base64: a string sets the logo (PNG, JPG or WebP up to 1 MB, prepared server-side), null removes it.","name":"set_autoreply_delivery"},{"description":"Return server-side analytics for a site by day (no cookies or scripts on the page): views, visitors, bytes, form submissions and tops (pages, referrers, downloads, 404s, devices). human_* metrics exclude bot-like traffic; unprefixed totals count every request and drive plan traffic. Visitors are summed per day.","name":"get_site_stats"}],"tools_count":50,"transport":"streamable-http","version":"0.1.0","website":"https://tuqo.ru"}