# Kite Kite hosts and shares pages and files that AI tools make: HTML pages, Markdown, PDFs, images, spreadsheets, documents, slides, and source or data files (Python, TypeScript, JSON, SQL, YAML and the rest), each rendered rather than handed over as a download. Each page gets a link that lasts, can be restricted to people or verified emails, and reports who opened it. Viewers can comment. ## For agents MCP server (Streamable HTTP): https://kite.new/api/mcp Auth: OAuth 2.1 with PKCE and dynamic client registration (metadata at https://kite.new/.well-known/oauth-authorization-server), or Authorization: Bearer for headless use. Keys are created by the user at https://kite.new/settings. Tools: publish_page, update_page, list_pages, get_page, search_pages, delete_page, duplicate_page, set_audience, get_comments, reply_comment, get_views, get_responses, request_upload_url, upload_chunk, finalize_upload. Skill: https://kite.new/skill.md Docs: https://kite.new/docs ## Typical flow 1. One document of HTML or Markdown: publish_page { title, content } -> { url } Anything else — a page with its images, CSS and JS, a built site or folder, or a single PDF, image, xlsx, docx, pptx or source file, or several images as a gallery — request_upload_url { files: [{ filename, source_url }] } -> { url }, in one call: Kite downloads each source_url itself. Prefer this; it is the only route open to a caller that cannot make an arbitrary HTTP PUT. No URL and no way to PUT (an image you generated): request_upload_url { files: [{ filename, size, mime }] } -> re-encode to web size, base64, upload_chunk in pieces of ≤100,000 characters -> finalize_upload { page_id } -> { url }. Never paste an image into HTML as base64: thumbnail. If you can PUT: request_upload_url { files: [{ filename, size, mime }] } -> PUT each file's bytes to its own upload_url -> finalize_upload { page_id } -> { url }. Pass every file in one call; index.html becomes the page and the rest are served beside it. Do not inline images as base64. You get a warning naming anything the page references that never arrived; never publish a page that describes an image it does not contain. 2. Send the url to the user; they share it. The name in the link is editable in the share panel, and every link already sent keeps working. 3. get_views / get_comments to report back. reply_comment to answer viewers. 4. search_pages to find one later by what is in it; delete_page to put one in Trash. ## Vocabulary for users Say "page" and "link". Never say MCP, slug, token or manifest.