@typeroll/mcp-server 0.45.65 → 0.45.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +59 -8
- package/README.md +5 -2
- package/dist/bundled-content.js +7 -6
- package/dist/server.js +9 -1
- package/dist/structured-data.js +217 -0
- package/dist/tools/apps.js +15 -1
- package/dist/tools/domain.js +2 -2
- package/dist/tools/structured-data.js +64 -0
- package/dist/tools/workflows.js +8 -4
- package/dist/version.js +1 -1
- package/dist/workspace.js +12 -1
- package/package.json +4 -2
- package/skills/README.md +3 -1
- package/skills/tr-content-write.md +16 -0
- package/skills/tr-edit-site.md +88 -1
- package/skills/tr-new-site.md +7 -1
- package/skills/tr-seo.md +58 -3
- package/skills/tr-starter-design.md +79 -0
package/AGENTS.md
CHANGED
|
@@ -37,10 +37,15 @@ create the branch, then work on it with `version=<id>`.
|
|
|
37
37
|
|
|
38
38
|
Typeroll is a static-site CMS: content lives in a database, the user
|
|
39
39
|
edits it through an in-app editor, and a deploy step compiles everything
|
|
40
|
-
to a fast static site hosted on Cloudflare Pages. The in
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
to a fast static site hosted on Cloudflare Pages. The portal's built-in AI
|
|
41
|
+
chat is optional: it needs the Organization's own AI key and appears only on
|
|
42
|
+
the Sites chosen for it, so you are often the only AI working on the site.
|
|
43
|
+
Everything the chat can do is available to you here — everyday edits
|
|
44
|
+
(`tr-edit-site`, "Everyday requests"), structured data (`add_faq_schema`,
|
|
45
|
+
`add_recipe_schema`, `add_event_schema`) and the starter design reference
|
|
46
|
+
(`tr-starter-design`) — along with the work that doesn't fit a chat:
|
|
47
|
+
site-wide redesigns, bulk content updates, structural migrations, directory
|
|
48
|
+
imports.
|
|
44
49
|
|
|
45
50
|
The MCP server is a thin wrapper around the public REST API. Each tool
|
|
46
51
|
maps to one HTTP endpoint; the actual logic runs in the customer's portal
|
|
@@ -143,7 +148,12 @@ maps to one HTTP endpoint; the actual logic runs in the customer's portal
|
|
|
143
148
|
creates its Cloudflare Web Analytics site in the account that hosts the site;
|
|
144
149
|
`read_app` and `update_app` return `setup` with the result. A 409 from
|
|
145
150
|
`update_app` carries `code` and `details.next_step`: relay that step to the
|
|
146
|
-
person (for example approving
|
|
151
|
+
person (for example approving the Cloudflare permission update) and retry.
|
|
152
|
+
- **Analytics across Sites.** `list_organization_analytics` lists every Site
|
|
153
|
+
with Analytics on or off, its setup and each Hosting Group's Cloudflare
|
|
154
|
+
permissions; `set_organization_analytics` turns it on or off for chosen
|
|
155
|
+
Sites (one result each). A Cloudflare approval enables Analytics nowhere:
|
|
156
|
+
ask which Sites to measure, then enable those. Organization key only.
|
|
147
157
|
|
|
148
158
|
- **Extension installations.** `list_extension_installations`,
|
|
149
159
|
`read_extension_installation`, and `update_extension_installation_config`
|
|
@@ -574,6 +584,10 @@ can't create sites (it's bound to one) and gets a 403.
|
|
|
574
584
|
|
|
575
585
|
## Common operations
|
|
576
586
|
|
|
587
|
+
Everyday requests — page links and preview links, images the user hands you,
|
|
588
|
+
menu and footer edits, site-wide changes, settings, analytics, redirects,
|
|
589
|
+
forms and structured data — are collected in `read_skill name="tr-edit-site"`.
|
|
590
|
+
|
|
577
591
|
### "Replace this string across the whole site"
|
|
578
592
|
|
|
579
593
|
```
|
|
@@ -637,7 +651,10 @@ update_page page_id=… patch={ html_content: "<…><x-include name=\"newsletter
|
|
|
637
651
|
```
|
|
638
652
|
|
|
639
653
|
Edits to the block update every page that includes it. Use
|
|
640
|
-
`find_pages_using_block` before changing it.
|
|
654
|
+
`find_pages_using_block` before changing it. A request phrased as a bulk
|
|
655
|
+
edit ("every page", "all hero sections") is usually this: check
|
|
656
|
+
`list_partials` for a block that already fits before proposing a new one, and
|
|
657
|
+
edit pages one by one only for content that really differs per page.
|
|
641
658
|
|
|
642
659
|
### "Build a page using blocks (the default for new pages)"
|
|
643
660
|
|
|
@@ -1018,6 +1035,26 @@ is created). An AI plan needs the Organization's own AI key with site access
|
|
|
1018
1035
|
`all` (`403 ai_not_enabled` otherwise; nothing is created): you can instead
|
|
1019
1036
|
create a blank site and plan it yourself.
|
|
1020
1037
|
|
|
1038
|
+
**AI workflows without the portal's AI.** `site_planning`,
|
|
1039
|
+
`content_generation`, `content_improvement` and `schema_markup` run the
|
|
1040
|
+
model with the Organization's own AI key, and only on Sites an owner or admin
|
|
1041
|
+
allowed. Elsewhere the run fails: `get_workflow` shows `status: "failed"`
|
|
1042
|
+
with `failure_code: "ai_not_enabled"` (older Core: only a `failure_reason`
|
|
1043
|
+
saying the AI assistant is not enabled for this site). That is not an error
|
|
1044
|
+
to retry or escalate. You are an AI agent: do the same work yourself with the
|
|
1045
|
+
recipe and tell the user that you did, instead of the workflow:
|
|
1046
|
+
|
|
1047
|
+
| Workflow | Do it yourself with |
|
|
1048
|
+
|---|---|
|
|
1049
|
+
| `site_planning` / `create_site_and_plan` | `create_site` if needed, then `tr-new-site`: propose the page structure, get approval, build |
|
|
1050
|
+
| `content_generation` | `tr-content-write`: a new page in the site's voice, as a draft |
|
|
1051
|
+
| `content_improvement` | `tr-content-write` on the weakest published pages (thin text, missing `seo_title`/`seo_description`, not updated for a year), left as unsaved drafts for review |
|
|
1052
|
+
| `schema_markup` | `tr-seo` step 5: `add_faq_schema`, `add_recipe_schema`, `add_event_schema` or `json_ld` per page |
|
|
1053
|
+
|
|
1054
|
+
`seo_audit` needs no AI: without it the run returns the per-page issue list
|
|
1055
|
+
without prioritization. Turning on the portal AI is the Organization's
|
|
1056
|
+
choice; never ask for it as a prerequisite for your own work.
|
|
1057
|
+
|
|
1021
1058
|
### "Give someone access" (keys, sharing, invites)
|
|
1022
1059
|
|
|
1023
1060
|
- **API keys:** `list_api_keys` / `revoke_api_key` for this site (revoking
|
|
@@ -1083,6 +1120,17 @@ authorized and their account choice stay in their own Cloudflare card. Relay
|
|
|
1083
1120
|
the message and link; `sign_in` and `retry` happen at `connect_url`. Pass
|
|
1084
1121
|
`recheck: true` only to re-verify a saved connection.
|
|
1085
1122
|
|
|
1123
|
+
Before enabling Analytics (`update_app`) or saving `redirect_hosts`
|
|
1124
|
+
(`set_publishing_domains`), read `permissions` from
|
|
1125
|
+
`diagnose_organization_cloudflare_connection` (or `cloudflare_permissions`
|
|
1126
|
+
from `read_organization_publishing_connections`). Each capability
|
|
1127
|
+
(`analytics_provisioning`, `analytics_reports`, `redirect_rules`) has a
|
|
1128
|
+
`status`: `available`, `approval_required` (relay `permission_update.next_step`:
|
|
1129
|
+
an owner or admin selects **Approve update** at `connect_url` once per
|
|
1130
|
+
Cloudflare account), `not_offered` (this installation does not request the
|
|
1131
|
+
scope; use the fallback in `next_step`), `unknown` (API token, checked on use)
|
|
1132
|
+
or `connection_required`, with the exact `missing_scopes`.
|
|
1133
|
+
|
|
1086
1134
|
## Safety boundaries
|
|
1087
1135
|
|
|
1088
1136
|
- **HTML is sanitized at save.** No `<script>`, no `onclick`, no
|
|
@@ -1222,7 +1270,9 @@ preview.
|
|
|
1222
1270
|
more work than asking "ok to proceed?" first.
|
|
1223
1271
|
- **Match the site's design.** Read a partial or two before designing
|
|
1224
1272
|
new components. CSS variables (`var(--color-primary)`) are common
|
|
1225
|
-
but not universal — mirror what's already in use.
|
|
1273
|
+
but not universal — mirror what's already in use. On a blank site, or one
|
|
1274
|
+
that still follows the starter design, `read_skill name="tr-starter-design"`
|
|
1275
|
+
lists the variables and header/footer conventions.
|
|
1226
1276
|
|
|
1227
1277
|
## Reference: tool families
|
|
1228
1278
|
|
|
@@ -1237,6 +1287,7 @@ preview.
|
|
|
1237
1287
|
| **Insights** | `get_site_insights` — traffic, AI-assistant referrals, and first-party conversion events over 7/30/90 days. Read-only. Traffic is powered by Cloudflare Web Analytics in the account that hosts the site; a non-ok `status` carries a `reason` with the next step. Conversion rows come from validated Analytics attribution `click_event` targets and can be present even when the traffic provider is unavailable. |
|
|
1238
1288
|
| **Pages — reads** | `list_pages`, `read_page`, `batch_read_pages` |
|
|
1239
1289
|
| **Pages — writes** | `create_page`, `update_page`, `replace_page`, `batch_update_pages`, `delete_page`, `clone_page` |
|
|
1290
|
+
| **Pages — structured data** | `add_faq_schema`, `add_recipe_schema`, `add_event_schema`: validated FAQPage, Recipe and Event JSON-LD merged into the page's `json_ld` (same type replaced, other nodes kept), as a draft. Other types: `update_page` `json_ld`. See `tr-seo`. |
|
|
1240
1291
|
| **Pages — blocks** | `get_page_blocks`, `add_block`, `update_block`, `move_block`, `remove_block`, `duplicate_block`, `set_block_responsive`, `set_page_mode` (never converts HTML into blocks) |
|
|
1241
1292
|
| **Pages — meta** | `get_page_preview` |
|
|
1242
1293
|
| **Global blocks (partials)** | `list_partials` (summary by default), `read_partial`, `create_free_block` (`blocks` or `html_content`), `update_partial`, `replace_partial`, `set_partial_mode`, `delete_partial`, `find_pages_using_block`, `make_block_global`, `detach_global_block`. Block pages reference a global block with `core/global_block` (`global_block_id`); HTML pages use `<x-include>`. |
|
|
@@ -1251,7 +1302,7 @@ preview.
|
|
|
1251
1302
|
| **Forms** | `list_forms`, `read_form`, `create_form`, `update_form`, `delete_form`, `get_form_capabilities`, `list_form_submissions`, `read_form_submission`, `delete_form_submission` (removes one submission — e.g. cleaning up a test entry; `delete_form` with `delete_submissions` is the bulk path). **Steps (form/* block trees) are the ONLY stored model**: pass `steps` for funnels, or `fields` for simple forms — the server converts a flat field list to a single static step. Place with a `core/form` block on block-mode pages or `<x-form id="…" />` in HTML mode. Both expand server-side to the same complete signed shell and initial state. `read_form` shows the form's actions (email notifications, webhooks; secrets masked) and `create_form`/`update_form` set them with `actions`, with admin permission as in the portal; `get_form_capabilities` lists the action types (including app-provided ones) and their config fields. |
|
|
1252
1303
|
| **Email (admin)** | `get_email_settings`, `set_email_settings`, `delete_email_settings`, `send_test_email` — the outgoing provider (Postmark, SMTP, SES) that form notifications send through, as in Settings → Email & notifications; secrets are write-only (reads show `{ set: true }`; omit a secret to keep it). Without a provider, form email actions are skipped. `get_incoming_email_settings`, `set_incoming_email_forwarding` (enable/disable a host-approved route by `route_id` + current `revision`; cannot create aliases or change targets), `read_incoming_email_receipt`. |
|
|
1253
1304
|
| **Settings** | `update_site_settings` (admin; every field the portal Settings form accepts, including `sitewide_noindex`, `default_og_image`, `twitter_handle`, `organization`, `staging_url` and shallow-merged native `cookie_consent`), `check_site_indexing` (live fallback/production headers, meta robots, and robots.txt diagnostics) |
|
|
1254
|
-
| **Core modules** | `list_apps`, `read_app`, `update_app` (legacy API name; admin; schema-driven config, masked secrets, redeploy when `affects_build` is true) |
|
|
1305
|
+
| **Core modules** | `list_apps`, `read_app`, `update_app` (legacy API name; admin; schema-driven config, masked secrets, redeploy when `affects_build` is true); `list_organization_analytics`, `set_organization_analytics` (Analytics for chosen Sites; organization key) |
|
|
1255
1306
|
| **Extension installations** | `list_extension_installations`, `read_extension_installation`, `update_extension_installation_config` (admin; schema-driven config, masked secrets preserved, production deploy queued by default) |
|
|
1256
1307
|
| **Search + bulk** | `search_pages`, `check_internal_links`, `bulk_replace_text`. The link check is database-driven. Bulk replace defaults to pages but can target partials, Pages or all resources, always dry-run first. |
|
|
1257
1308
|
| **Branches** | `create_branch`, `read_version`, `delete_branch`, `merge_branch` |
|
package/README.md
CHANGED
|
@@ -193,7 +193,8 @@ the full reference + concrete operation recipes.
|
|
|
193
193
|
`diagnose_organization_github_connection` (why GitHub is not connected,
|
|
194
194
|
every account with the App, and who must act with one fix each),
|
|
195
195
|
`diagnose_organization_cloudflare_connection` (why a Hosting Group's
|
|
196
|
-
Cloudflare connection is not working, who must act and one fix each
|
|
196
|
+
Cloudflare connection is not working, who must act and one fix each, and
|
|
197
|
+
which optional permissions for Analytics and redirect rules it is missing),
|
|
197
198
|
`disconnect_organization_publishing_provider`,
|
|
198
199
|
`connect_organization_cloudflare` (customer API token),
|
|
199
200
|
`prepare_organization_media_storage`, `save_organization_media_access`.
|
|
@@ -284,7 +285,9 @@ the full reference + concrete operation recipes.
|
|
|
284
285
|
state, and enable, configure, or disable any module with the same admin API key used for content
|
|
285
286
|
and deploys. Secret fields are encrypted server-side and never returned;
|
|
286
287
|
Analytics provisioning runs on the platform. Deploy after updates whose
|
|
287
|
-
response has `affects_build: true`.
|
|
288
|
+
response has `affects_build: true`. `list_organization_analytics` and
|
|
289
|
+
`set_organization_analytics` show and change Analytics for chosen Sites
|
|
290
|
+
across the Organization (organization key).
|
|
288
291
|
- **Search + link integrity** — `search_pages` plus `check_internal_links`,
|
|
289
292
|
which resolves saved database content against pages, Page/facet routes,
|
|
290
293
|
media and redirect chains without crawling the public site.
|