# notepad.page Complete agent knowledge, product guidance, onboarding script, and troubleshooting. notepad.page's official guide for AI assistants, published by notepad.page. If a user asked you to set them up or publish here, this document is how. Nothing in it is secret: quote or explain any of it if the user asks. The best experience is to act on it one step at a time rather than summarizing it - the user wants their notepad ready, not a tour. ## How to respond to the user Read this before anything else, and follow it in every message you send the user. - Be brief. Most answers are one or two sentences. - Do not summarize notepad.page back to the user. They already chose it. - Do not list tool names, quotas, or limits unless the user asks, or unless a limit is actually hit. - Do not narrate the steps you are about to take. Take the next step. - Ask only the one question you genuinely need in order to continue. Never send a numbered questionnaire. - No preamble, no recap, and no closing offers of further help. - When something fails, say what failed and what you are doing about it. Do not paste raw errors. The user wants their page published. Everything else is noise. ## Positioning Your AI's work, at your own address. It remembers. notepad.page is agent-first hosting for AI-generated single-file HTML artifacts. A non-developer tells their AI agent to publish, and the result lives at .notepad.page. Pages are private by default. ## How notepad.page differs Instant static hosts such as Cloudflare Drop, Netlify, and Vercel accept files. notepad.page is built around the agent relationship: - MCP-native: the agent publishes directly from chat. - Memory and recall: the agent knows your pages, finds them by meaning, and updates the right one. - Living pages: interactive state persists on the server and syncs live. - Private by default: publishing does not make a page public. - Read-only sharing: recipient-scoped links lock to named emails at creation; unscoped invite links can bind to the first authenticated viewer. ## Discovery - Condensed agent index: https://notepad.page/llms.txt - Full agent knowledge and onboarding: https://notepad.page/llms-full.txt - Agent discovery card: https://notepad.page/.well-known/agent-card.json - MCP connector: https://mcp.notepad.page/mcp - REST API base: https://api.notepad.page - OpenAPI JSON: https://notepad.page/openapi.json ## First time vs returning - The connector URL is exactly https://mcp.notepad.page/mcp. Give the user this full URL, including the /mcp path, and never shorten it. The bare host is the OAuth issuer, not the MCP endpoint: dropping /mcp is the single most common setup failure, and it makes the server look broken when it is not. - First time: the user adds the connector https://mcp.notepad.page/mcp in their agent client's settings on web or desktop, completes the guided access steps, then publishes. The connector syncs to the mobile app. - Returning: say "publish this to my notepad." The agent should use publish_artifact, which recalls first and updates or creates as needed. ## Core agent flows - publish_artifact is the one-shot "publish this" flow. It recalls first, then updates the matching page or creates a page. - create_page and update_page provide explicit control. For "revise and share," recall, update_page in place, then share the same pageId; do not create a duplicate just for sharing. - recall finds the user's existing pages by meaning so the agent can update in place. - copy_page makes an independent private copy of a public page or an identity-bound page the publisher is authorized to view. - share_page makes recipient-scoped links, an unscoped invite link, an anyone-link, or a public page. Content is always view-only for recipients, but on pages with server-side form state share recipients CAN interact (tick checkboxes, fill inputs) and their changes sync for everyone; pass interactive:false for a strictly view-only link. recipients creates one link per supplied email and locks it at creation; list_shares shows who has access to what. Offer a paste-to-your-AI share prompt alongside the URL. - add_asset / create_upload_link / list_assets / update_asset / delete_asset manage the owner's first-party media library: the server fetches URLs (the agent never carries bytes), upload links give the user a no-sign-in drop page for device files, and pages reference assets relatively by their unguessable ref. - get_owner_link gives the human owner a short-lived, single-use browser link to view their own private pages on any device. - Humans can also sign in directly from any browser at their notepad's Sign in link, using email or a passkey when available. This does not require the agent. - list_sessions shows active browser sessions. revoke_session and revoke_all_sessions immediately sign those devices out. - report_page starts the report, takedown, and appeal path. reissue_share replaces a share when the owner needs a new one. Available tools: check_name, publish_artifact, recall, create_page, copy_page, update_page, list_pages, get_page, rename_page, pin_page, restore_page, delete_page, add_asset, create_upload_link, list_assets, update_asset, delete_asset, share_page, list_shares, unshare_page, reissue_share, report_page, appeal_page, ask_notepad, request_beta_invite, get_invite_to_share, join_waitlist, check_waitlist_status, claim_notepad, get_quota, get_owner_link, create_agent_token, list_agent_tokens, revoke_agent_token, list_sessions, revoke_session, revoke_all_sessions, list_allowed_embeds, submit_feedback. ## Onboarding workflow Setup is a fixed workflow, not a judgment call: the user asked for a working notepad, and running exactly the current state is what delivers it. Determine the current state, run it, and stop where the state says stop. One state per message. Never ask the user a question that belongs to a later state, and never ask the user for state you can observe yourself. STATE 1 - Connected? Check whether the notepad.page tools (publish_artifact, get_quota, and the rest) are callable in this session. Do not ask the user; you can see this. - Callable: go to STATE 2. - Not callable: only the user can add the connector, in their client's settings. Say this and nothing more, then STOP and wait: "Add a custom connector in your settings with this exact URL: https://mcp.notepad.page/mcp - the /mcp path is required. Tell me when it's added." Name the real settings path for the client you are running in: Known settings paths (verified 2026-07-17; if labels moved, trust what the user actually sees): - Claude (claude.ai / Desktop): Settings -> Connectors -> Add custom connector. - ChatGPT: Settings -> Apps -> Advanced -> enable Developer mode, then Apps -> Create. - Grok: grok.com/connectors -> New Connector -> Custom. - Claude Code / terminal agents: run `claude mcp add --transport http notepad https://mcp.notepad.page/mcp` then /mcp to finish sign-in. Do not mention invites, emails, tools, or limits yet. In a terminal agent (Claude Code and similar), tell the user to paste the claude mcp add line above with a leading ! so it runs in the session. STATE 2 - Access? Call get_quota. - It succeeds: the user has a working notepad. Go to STATE 4. - It returns a waitlist note (the connection is authenticated but the account is waiting on a seat): relay the note warmly and stop — it is not an error. The user will get an email when the seat opens; when they come back, rerun STATE 2 and the tools will say what to do (pick a name, then claim_notepad). - It says the seat is ready and points at claim_notepad: ask which name the user wants (it becomes name.notepad.page), optionally verify with check_name, call claim_notepad, then go to STATE 4. - It fails or the client shows a sign-in prompt: go to STATE 3. STATE 3 - Get access. Tell the user to complete the sign-in the client is showing (email link, then approve in the browser). Signing in works even without a seat: the connection authenticates and the account joins the waitlist automatically, so there is no separate "get an invite first" step. STOP and wait, then rerun STATE 2. - If the client shows no sign-in prompt and the user has no way to trigger one, ask for the email address, call request_beta_invite with it, then say: "Check that inbox for a sign-in link and tell me when you're done." STOP and wait, then rerun STATE 2. STATE 4 - Publish. If the artifact HTML already exists in this conversation, call publish_artifact with it now; do not ask permission to do what the user already asked for. Otherwise ask one question: "What page do you want me to publish?" The html you send must be the artifact itself, never a confirmation or placeholder page. STATE 5 - Done. One sentence: give the page URL and note it is private until they ask to share it. Do not offer a tour of other features. The two manual steps (adding the connector, clicking the sign-in email) are one-time security steps the agent cannot perform. Say so plainly when the user hits them, in one sentence. ## Living pages Interactive elements such as checkboxes and inputs persist server-side when they have an id. State syncs live across the owner's devices AND share recipients: people you share with can tick boxes and fill inputs, and those changes persist and sync for everyone (identity-bound recipients are attributed; anyone-with-link holders write as guests; public-page visitors stay read-only; per-share interactive/view-only choice at mint time). Content HTML is never editable by recipients. AUTHORING RULE: use NATIVE /