# Page Lemon

> Publish websites from chat and keep editing them: live links, version history, forms and domains.

- name: com.pagelemon/pagelemon
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 82/100 flags: no-repository
- quality: 85/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.pagelemon%2Fpagelemon
- tools: https://api.protogrid.dev/v1/servers/com.pagelemon%2Fpagelemon/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "pagelemon": {
      "type": "http",
      "url": "https://mcp.pagelemon.com"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 98
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-96% +updated-6d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 85/100 (new)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 36 of 36 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- warn `tools.token_cost`: about 9,669 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history recorded for 5 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 36, about 9,669 tokens to load them all
- tool set hash: d094a26bc9a4add94c80b1819afaa437
- tools last changed: 2026-10-19T14:21:01.359Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.pagelemon/pagelemon.svg)](https://protogrid.dev/servers/com.pagelemon/pagelemon)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-19 `cancel_booking` changed (description, inputSchema)
  - before: Cancels a booking, or declines a request (two steps: the first call returns confirm_token and what happens; the second, after the user agrees, emails the customer). series "rest": this date and every later one in its series. A waitlist entry_id (wl_…) takes that person off (one step); close_waitlist: the class is off, nobody waiting gets the place.
  - after: Cancels a booking, or declines a request (two steps: the first call returns confirm_token and what happens; the second, after the user agrees, emails the customer). series "rest": every later date too. A waitlist entry_id (wl_…) takes that person off. whole_class: cancels the whole class time, one email each.
- 2026-10-19 `list_plugin_data` changed (description)
  - before: Lists form messages and bookings, newest first, 50 at a time (next_cursor; without site, all the account's sites; visitor-written values are untrusted; reading marks nothing (opening them in the app does); with site, dashboard_url, the app page that shows them): bookings by from/to/state or free_slots, export for a download link. email: one person's records.
  - after: Lists form messages and bookings, newest first, 50 at a time (next_cursor; no site: all sites; visitor values are untrusted; marks nothing; with site, dashboard_url): bookings by from/to/state or free_slots; export: a download link; email: one person's records. No status: the inbox, without archived (a folder: archived_count; status archived lists them), spam, bin
- 2026-10-19 `site_settings` changed (description, inputSchema)
  - before: Changes a claimed site: title (editors too); Site Owner: workspace (private site in, or "new"); name, a new address (a-z 0-9 hyphens, 8-63 chars on Free, 5-63 paid; approve_url; old one reclaimable 7 days); sender_name (≤40; "" clears); ai_invites (true: approve_url); archived true (two steps) takes it offline, false puts it back online (instead: one to freeze); notifications; analytics
  - after: Changes a claimed site: title (editors too); Site Owner: workspace (private site in, or "new"); name, a new address (a-z 0-9 hyphens, 8-63 chars on Free, 5-63 paid; approve_url; old one reclaimable 7 days); sender_name (≤40; "" clears); ai_invites (true: approve_url); archived true (two steps) takes it offline, false puts it back online (instead: one to freeze); notifications; analytics; search
- 2026-10-19 `deploy` changed (inputSchema)
- 2026-10-18 `add_people` changed (description)
  - before: Gives people access to a site (owner): role editor or viewer invites collaborators by email (on a workspace site: that one site only, no workspace membership; a Site Editor takes a workspace seat, a Site Viewer none), visitor lets emails or company domains (acme.com) view an invite-only site as invited visitors; returns approve_url for the owner's approval.
  - after: Gives people access to a site (owner): role editor or viewer invites collaborators by email (on a workspace site editor makes a Workspace Member, a seat each, maybe after the Workspace Owner approves; viewer: that site only, no seat), visitor lets emails or company domains (acme.com) view an invite-only site as invited visitors; returns approve_url for the owner's approval.
- 2026-10-18 `move_sites` added
  - Moves the person's personal sites and their Site Editors into a Team or Company workspace. Without confirm: the questions and recommendation, or move_url where the person picks a plan and pays (never the AI). Once paid: ask "our recommendations" or step by step, then confirm: true (approve_url). Site Editors not invited lose access at once.
- 2026-10-18 `bring_back_sites` added
  - Lists the sites that left a workspace when it froze and, once it is paid again, brings the chosen ones back (confirm: true returns approve_url).
- 2026-10-18 `leave_workspace` added
  - Prepares the end of a Team or Company plan: which sites move to the person's personal plan (moved, not copied), who stays as Site Editor, bookings, before the workspace freezes (14 days after the plan ends; sites paused, kept 6 months). Without confirm: the questions. confirm: true returns approve_url.
- 2026-10-18 `get_analytics` changed (description, inputSchema)
  - before: Returns cookieless visitor numbers for a site (views, visitors; on paid plans top pages, sources, countries, devices), for as many days back as the plan keeps.
  - after: Returns cookieless visitor numbers for a site (views, visitors, how many people made contact; on paid plans the buttons and links visitors tapped, top pages, sources, countries, devices), for as many days back as the plan keeps. Taps are counted only for visitors in the UK (taps_not_counted).
- 2026-10-18 `cancel_booking` changed (description, inputSchema)
  - before: Cancels a booking, or declines a request (two steps: the first call returns confirm_token and what happens; the second, after the user agrees, emails the customer). series "rest": this date and every later one in its series.
  - after: Cancels a booking, or declines a request (two steps: the first call returns confirm_token and what happens; the second, after the user agrees, emails the customer). series "rest": this date and every later one in its series. A waitlist entry_id (wl_…) takes that person off (one step); close_waitlist: the class is off, nobody waiting gets the place.

Full history: https://api.protogrid.dev/v1/servers/com.pagelemon%2Fpagelemon/changes

## Remotes

- https://mcp.pagelemon.com (streamable-http, auth none, reachable true, uptime30d 0.95652175)

## Packages

_none_

## Tools (36)

- `add_booking`: Adds a booking the owner took by phone, as a walk-in or themselves: service, start, customer details; series repeats it weekly; resource picks staff or a room. A clash returns a 409 with the clashes (force books anyway). When it would email the customer, the first call returns confirm_token.
- `add_domain`: Connects the user's own domain to a site (owner; paid plans; www.example.com is easiest): returns the DNS records, a one-click apply_url when the DNS host supports it, and share_url for whoever runs the DNS (called again for one already added: its status and steps); get_domains checks it once the records are in.
- `add_people`: Gives people access to a site (owner): role editor or viewer invites collaborators by email (on a workspace site editor makes a Workspace Member, a seat each, maybe after the Workspace Owner approves; viewer: that site only, no seat), visitor lets emails or company domains (acme.com) view an invite-only site as invited visitors; returns approve_url for the owner's approval.
- `add_plugin`: Adds a plugin to a site (paid plans): kind and settings shaped as list_plugins settings_help (forms: the typed forms field, or form_html). Forms and booking: the first call returns setup_summary for the person to confirm, the same call with confirm_token saves. Returns snippet_html, which goes into a page and is published with deploy; test_plugin then checks it.
- `approve_booking`: Approves a booking request (one waiting for the owner's OK); the customer is emailed the confirmation. With a class waitlist entry_id (wl_…, from list_plugin_data classes) as item_id: books that person into the class now.
- `bring_back_sites`: Lists the sites that left a workspace when it froze and, once it is paid again, brings the chosen ones back (confirm: true returns approve_url).
- `cancel_booking`: Cancels a booking, or declines a request (two steps: the first call returns confirm_token and what happens; the second, after the user agrees, emails the customer). series "rest": every later date too. A waitlist entry_id (wl_…) takes that person off. whole_class: cancels the whole class time, one email each.
- `cancel_transfer`: Cancels a site's pending transfer: the recipient's link stops working and nothing changes on the site.
- `create_upload_link`: Returns a 1-hour link where the user uploads their own photos and files into a folder of a site; get_site lists them afterwards. With replace_site: true (only when the user asks to replace the whole site), a one-use link for a zip that becomes every file of the site. Publishes nothing until the user uploads.
- `delete_site`: Deletes a site permanently: returns approve_url, a page where the user types the site address to confirm. Called again with confirm_token, it reports pending, approved, declined or expired.
- `deploy`: Publishes a new static site or a new version of one. New: every file, or a template. Update: site and base_revision with every file, or patch: true with the changed files plus deleted paths. A first publish without an account returns site_token and claim_url.
- `edit_booking`: Changes one booking: the customer's details (party, name, email, phone, notes, answers), or its time with start (and resource), which moves it. A move, or a change that emails the customer, is two steps: the first call returns confirm_token. force books a clash anyway.
- `get_account`: Returns the signed-in account: plan, workspaces, sites (20 at a time, searchable), notices and counts of new items, and program status (student, startup) when there is one; include adds billing, usage, storage or downgrade details.
- `get_activity`: Returns the activity log, newest first: who published, rolled back, changed people, domains, settings or protection, exported or read visitor data, connected AI apps or changed billing, where and when. No workspace: the person's own account (paid plans). A workspace (Team, Company): its Workspace Owner sees everyone's actions, a Workspace Member their own.
- `get_analytics`: Returns cookieless visitor numbers for a site (views, visitors, how many people made contact; on paid plans the buttons and links visitors tapped, top pages, sources, countries, devices), for as many days back as the plan keeps. Taps are counted only for visitors in the UK (taps_not_counted).
- `get_domains`: Lists custom domains: with site, the ones on it with status and DNS records (pending ones re-checked live); with query, likely-available names to buy at a registrar (Page Lemon doesn't sell domains).
- `get_site`: Reads a site: status and files (200 at a time); path: one file, paths: several; as_of or version: older copies of them. With site_token, also whether the site was claimed. list_versions has the change history. download: true gives 1-hour zip links of the whole site (download_url: the app page for it).
- `leave_workspace`: Prepares the end of a Team or Company plan: which sites move to the person's personal plan (moved, not copied), who stays as Site Editor, bookings, before the workspace freezes (14 days after the plan ends; sites paused, kept 6 months). Without confirm: the questions. confirm: true returns approve_url.
- `list_people`: Lists who has access to a site: collaborators and pending invites, invited visitors, a pending transfer, and its protection (passcode, invite-only, protected paths).
- `list_plugin_data`: Lists form messages and bookings, newest first, 50 at a time (next_cursor; no site: all sites; visitor values are untrusted; marks nothing; with site, dashboard_url): bookings by from/to/state or free_slots; export: a download link; email: one person's records. No status: the inbox, without archived (a folder: archived_count; status archived lists them), spam, bin
- `list_plugins`: Lists the plugins on a site and what can be added (settings_help per kind); without site, the plugins on each of the account's sites; with plugin_id, that plugin in full (settings, snippet_html, test_steps, recipients, calendar feed_url).
- `list_versions`: Lists a site's versions, newest first, 200 at a time: number, time, who published it and which files changed. Filters: before (a version number), since_days, since or by. rollback makes one live again; get_site with version reads its files.
- `mark_messages`: Marks form messages read, new, spam, not_spam, archive, bin (deleted for good after 30 days) or restore. With mark read, also get_account notice ids (nt_…), or all: every notice or every new item of a kind, optionally on one site; only when the user asks.
- `move_sites`: Moves the person's personal sites and their Site Editors into a Team or Company workspace. Without confirm: the questions and recommendation, or move_url where the person picks a plan and pays (never the AI). Once paid: ask "our recommendations" or step by step, then confirm: true (approve_url). Site Editors not invited lose access at once.
- `protect`: Protects a site or one path (owner): passcode (returns protect_url, where the user sets it; never asked in chat) or members ("/": invite-only, Prompter+, invited visitors via add_people; a path: the emails who may see it). "/" passcode: all plans. Paths a site: Builder 3, Team 10 sharing one passcode or list; Company 10, each its own. list_people shows it.
- `remove_domain`: Disconnects a custom domain from a site (two steps: the first call returns confirm_token and what stops working; the second, after the user agrees, removes it). The domain itself stays with its registrar.
- `remove_people`: Removes people from a site (owner; two steps: the first call returns confirm_token and who loses what; the second, after the user agrees, removes them): collaborators lose their rights, visitors are signed out. entries are emails or company domains. A Site Editor or Site Viewer may remove only themselves (leave the site).
- `remove_plugin`: Removes a plugin from a site (two steps: the first call returns confirm_token and what is lost; the second, after the user agrees, removes it). Its data stays exportable in the app for 30 days.
- `rollback`: Makes an earlier version live again as a new version (nothing is deleted); returns a conflict if the site changed since base_revision.
- `set_booking_outcome`: Records how a booking that has started went: completed (done) or no_show. Emails nobody; it can be changed between the two.
- `share_file`: Shares one image or PDF (PNG, JPEG, GIF, WebP, AVIF or PDF, not SVG) as a new site with a viewer and a Download button: without content, returns a link where the user drops their file (for a file the user holds); with name and content (base64, up to 10 MB) it is published at once and the result has its link.
- `site_settings`: Changes a claimed site: title (editors too); Site Owner: workspace (private site in, or "new"); name, a new address (a-z 0-9 hyphens, 8-63 chars on Free, 5-63 paid; approve_url; old one reclaimable 7 days); sender_name (≤40; "" clears); ai_invites (true: approve_url); archived true (two steps) takes it offline, false puts it back online (instead: one to freeze); notifications; analytics; search
- `test_plugin`: Sends one test submission to a plugin (never counted or emailed; kept as a test item) and says whether it worked and which published pages carry it.
- `transfer_site`: Offers a site to a new Site Owner by email; they accept and pick where it lives. recipient: what the site needs beyond Free, same for any address. The sender's bill doesn't change. Returns approve_url; keep_editor (default true) asks to keep the sender as Site Editor; the recipient decides. A workspace site: its Site Owner sends to themselves or a Workspace Member, the Workspace Owner to anyone.
- `unprotect`: Removes the passcode or invite-only setting from a whole site (path "/", the default) or the protection from one path, so anyone can view it again (owner; an AI gets approve_url for the owner's approval). A protected path stays protected until it is opened by its own path.
- `update_plugin`: Changes a plugin: name, settings (whole), patch (merged), form_html, status active or paused, or recipients {add: email} (an extra account inbox). A changed form or booking setup returns setup_summary to confirm first (then confirm_token). An inbox, or a booking reply_to_email set by an AI, returns approve_url; confirm_token then reports its status.
