Skip to main content
The Writer server (https://clickbase.so/mcp/writer) exposes mutating tools. Every tool writes data and acts only within your current team; a site parameter accepts the site’s domain or id. Deletes cannot be undone. Some tools additionally enforce a role or ownership check on top of team tenancy (deleting a site, editing another author’s annotation, and so on). Those checks are noted on the tool.

Sites

create-site-tool

Writes.
Create a new site (property) in the current team for the given domain. Returns the created site.
Respects the team’s plan quota: if the team cannot create another site (quota reached or a lapsed subscription), the call is rejected with a validation error. Parameters Returns — a site object: id, domain, timezone, currency, tracking_mode, is_public, has_data, created_at.

update-site-domain-tool

Writes.
Change a site’s domain. Returns the updated site.
Parameters Returns — the updated site object.

update-site-timezone-tool

Writes.
Change a site’s reporting timezone. Returns the updated site.
Parameters Returns — the updated site object.

update-site-currency-tool

Writes.
Change a site’s reporting currency. Rejected while the site has a revenue goal. Returns the updated site.
Parameters Returns — the updated site object.

update-site-tracking-mode-tool

Writes.
Set a site’s tracking mode to “cookieless” or “cookie”. Returns the updated site.
Parameters Returns — the updated site object.

update-site-sharing-tool

Writes.
Toggle whether a site’s dashboard is publicly shared. Returns the updated site.
Parameters Returns — the updated site object.

toggle-site-pin-tool

Writes.
Toggle whether a site is pinned to the top of the team’s site list. Returns the updated site.
Parameters Returns — the updated site object.

record-payment-tool

Writes.
Record a verified payment for a site. Same Action as POST /api/sites/{site}/payments. Idempotent on transaction_id — a replay returns the existing payment. Amount is integer minor units (cents). Currency must match the site currency.
Requires workspace Admin or Owner (SitePolicy::manage). Parameters Returnsmessage, transaction_id, and created (whether a new row was written).

delete-payment-tool

Writes.
Delete an API-recorded payment (and its ClickHouse revenue row) by transaction_id. Same Action as DELETE /api/sites/{site}/payments. Only deletes payments with provider=api — never Stripe-ingested rows.
Requires workspace Admin or Owner (SitePolicy::manage). Parameters Returnsmessage and deleted (whether a row was removed).

delete-site-tool

Writes.
Permanently delete one of the current team’s sites and queue removal of its analytics events. This cannot be undone.
Requires the Owner or Admin role. A regular team Member is tenancy-valid but is rejected with a permission error. Parameters Returnsdeleted: true and the deleted site’s domain.

Tracking features

enable-error-tracking-tool

Writes.
Turn on JavaScript error tracking for one of the current team’s sites. Returns the updated site.
Parameters Returns — the updated site object.

enable-web-vitals-tracking-tool

Writes.
Turn on Core Web Vitals performance tracking for one of the current team’s sites. Returns the updated site.
Parameters Returns — the updated site object.

enable-session-replay-tracking-tool

Writes.
Turn on session replay recording for one of the current team’s sites. Returns the updated site.
Parameters Returns — the updated site object.

delete-session-replay-tool

Writes.
Permanently delete one session replay (its blobs and every ClickHouse row) from one of the current team’s sites. This cannot be undone.
Parameters Returnsdeleted: true and the session_id.

Goals

create-goal-tool

Writes.
Create a goal on one of the current team’s sites. Choose a match_type (page, event, scroll, outbound, download, button, form, or copy) and an optional match_value to scope it — e.g. a page path for a page/scroll goal, a custom event name for an event goal, or a link/file/label selector for an autocapture goal. A scroll goal also requires scroll_threshold. Returns the created goal.
Parameters Returns — a goal object: id, display_name, type, match_value, match_operator, scroll_threshold, currency, custom_props, created_at.

update-goal-tool

Writes.
Update a goal’s full definition on one of the current team’s sites — its match type, match value, match operator, scroll threshold, display name, currency and custom property filters. Metrics recompute live from the new definition. Returns the updated goal.
Parameters Returns — the updated goal object (same fields as create-goal-tool).

batch-create-event-goals-tool

Writes.
Create one event goal per given name on one of the current team’s sites in a single call, skipping any name that already exists as a goal or otherwise fails validation. Returns the number created and the site’s full goal list.
Parameters Returnscreated (the number of goals created) and a goals array of the site’s full goal list.

delete-goal-tool

Writes.
Delete a goal from one of the current team’s sites. Funnels are unaffected — their steps carry their own inline match definitions. This cannot be undone.
Parameters Returnsdeleted: true and the goal_id.

Funnels

create-funnel-tool

Writes.
Create a funnel on one of the current team’s sites from an ordered list of 2-8 inline steps. Each step is a type + optional value; array position is the step order. Returns the created funnel.
Parameters Returns — a funnel object: id, name, strict_order, steps, created_at.

update-funnel-tool

Writes.
Update a funnel on one of the current team’s sites. Steps are replaced wholesale from an ordered list of inline step definitions (array position is the step order). Returns the updated funnel.
Parameters Returns — the updated funnel object.

delete-funnel-tool

Writes.
Delete a funnel from one of the current team’s sites. Its steps are removed with it. This cannot be undone.
Parameters Returnsdeleted: true and the funnel_id.

Annotations

create-annotation-tool

Writes.
Pin a new annotation to one of the current team’s site charts. An annotation marks a date on the charts with a note (e.g. “launched pricing change”, “ran a promo”). Provide the instant to anchor it to (annotated_at) and the note text (body). Returns the created annotation.
The token must be associated with a user (the annotation’s author); a user-less token is rejected. Parameters Returns — the created annotation object.

update-annotation-tool

Writes.
Edit the note text of an annotation on one of the current team’s site charts. An annotation marks a date on the charts with a note; only the body can change — its anchor date is fixed. Returns the updated annotation.
Requires you be the annotation’s author, or a team Admin/Owner; anyone else is rejected with a permission error. Parameters Returns — the updated annotation object.

delete-annotation-tool

Writes.
Delete an annotation from one of the current team’s site charts. An annotation marks a date on the charts with a note; removing it clears that chart marker. This cannot be undone.
Requires you be the annotation’s author, or a team Admin/Owner; anyone else is rejected with a permission error. Parameters Returnsdeleted: true and the annotation_id.

Stripe

connect-stripe-integration-tool

Writes.
Connect (or reconnect) one of the current team’s sites to Stripe. The “key” argument must be a Stripe RESTRICTED SECRET KEY (starts with rk_live_, or rk_test_ outside production) — it is stored ENCRYPTED and is never returned by any tool. An invalid key, a wrong prefix (sk_/pk_), or a test key used in production is REJECTED with a validation error. On success this also starts importing the account’s product list. Returns the connection status (never the key).
The key is a Stripe restricted secret key (rk_live_…, or rk_test_… outside production). It is stored encrypted and never returned by any tool. A wrong prefix (sk_/pk_), an invalid key, or a test key in production is rejected. On success the account’s product list starts importing. Parameters Returns — an integration connection-status object. The key is never included.

disconnect-stripe-integration-tool

Writes.
Disconnect one of the current team’s sites’ Stripe integration: wipes Stripe-derived payments, subscriptions, and MRR movements, best-effort deletes the remote webhook, then deletes the local integration row. API/manual payments are kept. This cannot be undone.
Parameters Returns — an integration object with connected: false.

update-stripe-product-selection-tool

Writes.
Set which Stripe products count as revenue for a site (the ingestion allowlist), then start importing the account’s Stripe history. Pass the full list of product external ids to keep; an empty list is valid and simply stops future ingestion. The allowlist filters ingestion only — it never removes already-imported history. Returns the Stripe connection status including live backfill progress.
Parameters Returns — an integration object including live backfill progress.

align-site-currency-tool

Writes.
Set a site’s reporting currency to its connected Stripe account’s settlement currency, so the site’s revenue always reconciles with the merchant’s Stripe statement. Pass the three-letter ISO 4217 code (e.g. “EUR”). Returns the Stripe connection status.
Parameters Returns — an integration connection-status object.

retry-stripe-resource-sync-tool

Writes.
Retry a failed or stranded Stripe backfill resource for a site. This RESUMES the import from where it stopped (its persisted cursor) — it never restarts from the beginning, so it will not re-import everything. Valid resources: products, charges, refunds, disputes, invoices, subscriptions, customers. The resource must already have a sync row. Returns the Stripe connection status including live progress.
This resumes the import from its persisted cursor — it never restarts from page zero, so nothing is re-imported. The site must have a Stripe integration connected, and the resource must already have a sync row (otherwise the call is rejected). Parameters Returns — an integration object including live sync progress.