# Change log

Changes a developer would notice in the [AI connector](/developers#connecting), [OAuth](/developers#authentication), [webhooks](/developers#events), the [add-website link](/developers#add-a-website-by-link) and [reply by email](/developers#reply-by-email), newest first. Each date is the day the change was made ready for release.

## 7 November 2026

- `get_upload_link` with a `title` (uploads, available on request) now makes the preview at once, for an assistant that cannot send the files itself. The preview is password-protected (SiteViewer makes the password; it is never in the reply) and has no version yet: it is on the person's dashboard straight away, marked as waiting for its files, and the reply's `url` is its address, so you can tell the person where it will be. The reply also carries `madeNow: true`, `waiting: true` and the preview's id and slug in `for`. The link now lands on that preview's own upload. Until the files arrive, the address asks for the password and then says the preview isn't ready yet. After the link's 24 hours the preview stays as a draft; nothing removes it. Asked again with the same title while that preview is still waiting, you get the same preview with a fresh link (`reused: true`), not a second one; for a new link later, pass `preview` with its id. It counts toward the plan's preview limit (only Free has one). With `preview`, nothing changes.
- `list_previews` and `get_preview` add `waiting: true` and a `waiting_note` for a preview still waiting for its files. The fields are absent for every other preview.

## 5 November 2026

- `get_upload_link` (uploads, available on request) now gives a short link, `https://siteviewer.app/u/` and an 11-character code, instead of a link of about 300 characters. It opens the same upload, for the same 24 hours, and is checked the same way. A link given out before this keeps working. Show the person the link as it comes back.

## 2 November 2026

- The [next version of the connector](/developers#next-version-available-on-request-labs) (Labs): every comment it returns now carries `pinUrl`, a link that opens the review room on that comment's version with its pin open (the link the dashboard's Inbox copies; no password or pass in it). A comment whose room can't open has none. A new read tool, `get_pin_map` (on request), returns one picture of a page with each open comment's pin drawn as its number where the client placed it, and each pin's number, status and link. On the page as it is now, a pin is found by its element first, as in the review room; each pin's `by` says whether it was placed by its element or by where it was made. A picture counts toward the 60 pages an hour only when it is drawn.
- `get_page`, `check_thread`, `review_feedback` and `get_preview_screenshot` (with a `page`) in the next version open a password-protected page as its owner again. Since 28 October they could be shown the password page instead.
- The [next version of the connector](/developers#next-version-available-on-request-labs) (Labs) gains four writes only the team sees: `create_task` (a task as you, for you or a teammate by email; it also goes on the assignee's Google Calendar where they have connected it), `complete_task`, `add_project_note` (adds to the end of a preview's Notes, signed with your name and "(via AI)", never changing what is there) and `run_health_checks` (the quick checks unless you name others; page-load and AI checks only when named and switched on). Each needs write access, is listed only where its feature is on, and counts toward the 60 writes an hour. A teammate's private task is answered as not found.
- A note from `add_project_note` is no longer lost when a teammate who had the preview's Notes tab open before it arrived saves their notes: their save now keeps the note (it is added to the end of what they wrote), and if they changed the notes in a way that cannot be combined, they choose what to keep. A dashboard page opened before this release saves as before until it is reloaded. Nothing changes in the tool or its reply.
- Also in the next version: client comments straight into the chat. A new prompt, `new_feedback`, brings a preview's new client comments (open, waiting on the team) into the conversation with their pages and snapshots, and `initialize` now advertises `resources`: each preview's open comments are `feedback://<slug>`, listed by `resources/list` and read by `resources/read`. Both need read access and count toward the tool-call limit.
- Smaller replies and tool list, for every connector. The JSON in a reply is now compact (one line), and a field with no value is left out instead of being sent as `null`, so read a missing field as empty (except `next`, which is still `null` on the last page); no field was renamed. `previewTitle` is left out when it is the same as `preview`, and `firstAt` when it is the same as `at`. Tool descriptions are shorter (the tool list with every tool on is about 37% smaller); the how-to they carried, such as what `start_upload`'s commands do on a second run, is now in the reply. The `get_change_brief` JSON brief comes back compact too.
- `get_project_notes` (Labs) returns 20,000 characters a call. When there is more, the reply's `next` is the `offset` to pass for the rest. `maxChars` asks for more in one call, up to 100,000 (the most one call ever returned).
- More is left out of a push or an upload: credential and key files by name whatever their type (such as `serviceAccountKey.json`, `token.json`, `env.json`, Terraform state), a type hidden inside a name (such as `wp-config.php.txt`), and a small .json or .txt that holds a private key or a service account's credentials. A folder with `package.json`, a lock file or a build tool's settings at its top is refused whole, even with a page beside it.
- Now published: `.wasm` (served as `application/wasm`), `.glb` and `.gltf` models, a `.bin` that a `.gltf` in the same build names, and `_redirects` and `_headers` at the top of the site.
- Styles and scripts named for tokens, keys or env (such as a design system's `tokens.css`, or an app's runtime env script) are published again: names about tokens, keys or env are left out only as a .json or .txt. A `package.json` or a build tool's settings at the top of a site is now left out on its own and the rest of the site published; the whole push or upload is refused only for a project's source (a lock file, `node_modules` or `.env` at its top, a `src` folder beside its project files, a build tool's settings beside its output folder, or a server's root: a `package.json` that runs or depends on a server or database, or server scripts beside it).
- A push or upload with a server's shape is refused whole even without a `package.json`: a server or database script at the top of the site, or a routes, models, controllers, middleware or handlers folder of scripts, at the top or in a workspace folder (`apps`, `packages`, `services`). A `package.json` whose `dev` script runs a server, or that depends on a server framework such as Hono or Elysia, counts too.
- Uploads, available on request: an upload belongs to the connection that started it (signing in to the same app again keeps it), and stops when that access token is revoked or that app is disconnected. `upload_status` with no `uploadId` lists open uploads (an owner or admin sees all of them, and can cancel any). The upload's own address has a request limit.
- When a workspace's paid plan ends (not when it is cancelled for the period end), every preview link in it answers 404 page not found, its short and tracked links included, and no client emails are sent, until a plan is chosen again. A comment's screenshot and attachment addresses follow their preview's link: they answer 404 while it is archived, deleted or its workspace's plan has ended.
- An archived preview's link is off: every address it has, its short and tracked links included, answers 404 page not found until it is unarchived. A link the connector hands back for an archived preview, or a reply by email to one of its threads, behaves the same way. Unarchiving brings the same link back.

## 1 November 2026

- The [next version of the connector](/developers#next-version-available-on-request-labs) (Labs) gains six read tools: `get_inbox`, `get_link_activity`, `get_project_notes`, `list_tasks`, `get_health` and `compare_versions`. The last four are listed only where their feature is switched on for the workspace; `get_inbox` and `get_link_activity` are always there. Anything a client or a page wrote comes back fenced, and the email addresses of the people who open a link or write a comment are shortened.
- `list_versions` there covers live-website previews; an uploaded site's answer is unchanged. `get_feedback` and `review_feedback` take an `author` filter.
- `get_page` answers again from a page it read in the last 10 minutes (2 minutes for a live website), without opening a browser or counting toward the hourly page limit. Pass `fresh: true` to read the page now.
- There, `initialize` now advertises `prompts`, and `prompts/list` and `prompts/get` offer one prompt, `check_feedback_addressed`. Without the next version, nothing changes.
- `publish_preview` always creates the new preview password-protected. Leave `password` out and SiteViewer makes one; it is never in the reply, which says where the person finds it, changes it or makes the preview public (the preview's Settings tab in the dashboard). Before, a preview with no password was public.
- `push_files` publishes only web file types (the list is under [How the tools behave](/developers#how-the-tools-behave)). Any other file is left out of the version and listed in a new `skipped` field and in the reply, with the reason. Before, every file was published.
- Five tools for sending a whole site straight to storage, available on request: `start_upload`, `upload_status`, `finish_upload`, `cancel_upload` and `get_upload_link`. They follow the same two rules, and need write access.

## 31 October 2026

- Scopes are enforced. A connection approved with `mcp:read` only sees and can only call the read tools, and `tools/list` lists only what a connection may call. Access tokens keep full access.
- New overall limits in each clock hour: 600 tool calls per workspace, and 400 for each person connected by OAuth or each access token.
- The limit of 60 publishing and transfer writes per workspace now counts in a fixed clock hour. Before, the hour started again with every write.
- A refusal that is not about the token (a closed or held workspace, AI tools switched off, the Free plan) now returns HTTP `403` with code `-32003` and a sentence saying why, instead of a `401` that sent clients back to sign in.
- `resolve_feedback` leaves a comment on a custom status alone unless you pass `replaceStatus: true`.
- `reply_to_feedback` no longer takes a thread away from the teammate it is assigned to.
- Webhook retries not yet sent are cancelled when the workspace's AI tools or the webhooks feature are switched off.
- Anything a client wrote, and the names and addresses they gave, now comes back between fence lines in every tool. In `get_feedback` the client's words moved from the JSON into the fenced block; the field names are unchanged, so read the last JSON block.
- `push_version` on a preview made of many files now keeps every other file and replaces only the entry page. It refuses image, PDF and live-website previews, and replies list any broken file or page links.
- `get_approval_status` no longer says a version is cleared to deploy. It reports that the version is approved and the address the approval came with.
- People can disconnect an app they connected by consent, on the Connectors page. The consent screen shows the app's name and the address it will send them back to.
- Reply by email: a thread takes up to 20 replies in an hour that starts at the first reply. Before, every reply started the hour again. Emails about a note only the team can see no longer carry a reply address.
- A [next version of the connector](/developers#next-version-available-on-request-labs) is available on request (Labs): live-website previews, page reading, checking comments against the current page, batched decisions, and actions a client sees behind the workspace's permission and a confirm step.

## 27 October 2026

- Each workspace has a switch for its AI tools. Off, every connection and access token is refused; on again, they all work as before. Nothing is deleted.

## 24 October 2026

- The connector is served only at `https://siteviewer.app/mcp`. The old `mcp.siteviewer.app` address is retired, and tokens issued for it still work at the new one.

## 17 October 2026

- People invited to individual projects only can no longer connect AI tools, by OAuth or by token.
- An access token acts as the person who made it, and works only while they are on the team with an open account.
- When an account is closed, its OAuth connections stop working and their refresh tokens are revoked.

## 13 October 2026

- Four file transfer tools: `list_transfers`, `request_files`, `send_files` and `get_received_file`.
- Text from a file a client sent comes back fenced as data, never as instructions. Markup and code files come back as a download link only.

## 5 October 2026

- The [add-website link](/developers#add-a-website-by-link): `/app?add=website&url=` opens the dashboard's New project box with the address filled in.

## 3 October 2026

- `get_preview_screenshot` returns the rendered page as an image, in parts up to 2000 pixels tall, and waits for a render already in progress instead of starting another.

## 1 October 2026

- A workspace in the trash is closed to the connector: its tokens are refused until it is restored.

## 28 September 2026

- OAuth client registration is limited to 20 per IP address per hour (`429` beyond that), and a registration that never completes a connection is removed after 30 days.

## 30 August 2026

- The AI connector (on Pro and Studio) and reply by email are on for every workspace. Before, both were in Labs.

## 7 July 2026

- Reply by email (Labs): replying to a comment's notification email posts the reply into the thread.

## 1 July 2026

- Webhooks (Labs): `deploy.approved` and `deploy.unapproved`, signed with HMAC-SHA256 and retried when delivery fails.
- New tools: `list_open_feedback`, `get_preview_screenshot`, `get_approval_status`, `list_versions`, `activate_version`, `push_files` and `reply_to_feedback`.
- `reply_to_feedback` writes a private note that only the team sees.
- Every tool that takes a `preview` accepts its id, which never changes, as well as its slug.

## 12 June 2026

- Write tools: `push_version` and `publish_preview`, with a quality check on the HTML before it goes live.
- `get_version_html` and `get_preview`. Every tool is annotated as read-only or as a write.
- The connector is for Pro and Studio workspaces.

## 11 June 2026

- First release of the AI connector (Labs) at `/mcp`, with access tokens and three tools: `list_previews`, `get_feedback` and `resolve_feedback`.
- OAuth 2.1, so Claude can connect by consent: discovery, dynamic client registration and PKCE.
- The connector works on previews hosted as files; live-website previews are left out.
