@typeroll/mcp-server 0.42.2 → 0.43.1

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 CHANGED
@@ -73,7 +73,9 @@ maps to one HTTP endpoint; the actual logic runs in the customer's portal
73
73
  products, restaurants for a directory site, etc.). Each has a schema
74
74
  (`fields[]`) and optional **per-item routing** via `route_template`
75
75
  (e.g. `/restaurants/{slug}`). When set, every published item gets its
76
- own static URL rendered through `item_template_html`. Set
76
+ own static URL rendered through `item_template_blocks` (preferred) or
77
+ `item_template_html`. Native `article` and `checklist` presets are available
78
+ through `template_kind`. Set
77
79
  `route_template=""` to opt out and keep the collection listing-only.
78
80
 
79
81
  - **Settings.** Site name, tagline, logo, favicon, colors, fonts,
@@ -367,6 +369,9 @@ maps to one HTTP endpoint; the actual logic runs in the customer's portal
367
369
  Discard; `read_working_copy` shows the raw unsaved diff when you need to
368
370
  know whose edits are in it. Working copies are per-doc scratch; for
369
371
  multi-page efforts branch instead (`create_branch`).
372
+ `content_mode` is not a writable `update_page` or batch patch field. Save
373
+ the target HTML/block tree first, then call `set_page_mode`; the API rejects
374
+ direct PATCH attempts and points at the mode endpoint.
370
375
  **Before `trigger_deploy`: commit.** Deploys build saved content only —
371
376
  an uncommitted draft silently stays behind.
372
377
  - **Deploys / `{branch}.{project}.pages.dev` are the STATIC BUILD**, refreshed
@@ -582,7 +587,7 @@ create_collection
582
587
  label_singular="Restaurant" label_plural="Restaurants"
583
588
  fields=[ ...title, slug, address, phone, cuisine, body... ]
584
589
  route_template="/restaurants/{slug}"
585
- item_template_html="<article><h1>{{title}}</h1>… {{{body}}}</article>"
590
+ template_kind="article"
586
591
 
587
592
  # For each row in your source data:
588
593
  create_collection_item collection="restaurants" fields={…} status="published"
@@ -596,6 +601,15 @@ list_collection_items collection="restaurants" limit=200
596
601
  update_page page_id=restaurants patch={ html_content: "<hand-written listing>" }
597
602
  ```
598
603
 
604
+ For articles and checklists, prefer the native `article` / `checklist`
605
+ `template_kind` presets or an explicit `item_template_blocks` tree. Exact
606
+ bindings such as `core/button.href = "{{item.pdf_url}}"` are supported on
607
+ typed text/URL/image fields. `template/item_body.field`,
608
+ `template/page_date.field`, and `core/table_of_contents.source_field` select
609
+ the named item field. Breadcrumbs and outlines exist in initial HTML. Use
610
+ explicit neighbor fields on `template/item_navigation` only when imported
611
+ navigation must differ from collection sort order.
612
+
599
613
  ### "Migrate a content type (e.g. WP custom post type)"
600
614
 
601
615
  ```
@@ -733,6 +747,13 @@ something is quietly wrong:
733
747
  redone. The in-portal migration workflow enforces the same gate as its first
734
748
  step (`skip_preflight: true` overrides it, and logs that it did).
735
749
 
750
+ Before converting a content family, pass its proposed `compositions` too.
751
+ The read-only review lists required fields/block types/capabilities and marks
752
+ generic custom blocks, raw HTML, or corrective instance CSS as
753
+ `waiting_for_native_support`. Do not build around that result. Continue
754
+ independent content/SEO work and wait for the required Core release, then
755
+ verify the fixture in both preview and a fresh hosted static build.
756
+
736
757
  ### "Don't lose URLs in a migration"
737
758
 
738
759
  Two different questions, and you need both answers:
@@ -1003,14 +1024,14 @@ preview.
1003
1024
  | **Pages — writes** | `create_page`, `update_page`, `replace_page`, `batch_update_pages`, `delete_page`, `clone_page` |
1004
1025
  | **Pages — blocks** | `get_page_blocks`, `add_block`, `update_block`, `move_block`, `remove_block`, `set_page_mode`, `convert_page_to_blocks` |
1005
1026
  | **Pages — meta** | `get_page_preview` |
1006
- | **Global blocks (partials)** | `list_partials` (summary by default), `read_partial`, `create_free_block`, `update_partial`, `replace_partial`, `delete_partial`, `find_pages_using_block`, `list_blocks_with_usage` |
1027
+ | **Global blocks (partials)** | `list_partials` (summary by default), `read_partial`, `create_free_block`, `update_partial`, `replace_partial`, `set_partial_mode`, `delete_partial`, `find_pages_using_block`, `list_blocks_with_usage` |
1007
1028
  | **Block types** | `list_block_types`, `read_block_type`, `find_pages_using_block_type`, `export_block_types`, `import_block_types` |
1008
1029
  | **Collections** | `create_collection`, `update_collection_schema`, `delete_collection`, `list_collections`, `read_collection`, `list_collection_items` (richtext hidden by default), `read_collection_item`, `batch_read_collection_items`, `create_collection_item`, `update_collection_item`, `delete_collection_item`, `regenerate_collection_listing` |
1009
1030
  | **Media** | `list_media`, `read_media`, `create_upload_url`, `upload_media_from_url`, `upload_media_inline`, `update_media`, `delete_media`, `finalize_media`, `finalize_all_media`, `generate_image_variants`, `suggest_alt_text_context` |
1010
1031
  | **Redirects** | `list_redirects`, `create_redirect`, `delete_redirect`. `from_path` may be a PATTERN: a trailing `*` (with `:splat` in the target) or `:name` for one segment — one rule retires a whole family of dead URLs (`/category/*` → `/blogg/:splat`). Mid-path splats and query strings are refused, as is any rule that would hide a live page. |
1011
- | **Migration inventory** | `get_migration_readiness` (preflight — CALL FIRST), `list_migration_urls`, `add_migration_urls`, `update_migration_url`, `update_migration_urls`, `delete_migration_url`, `import_sitemap`, `import_gsc_performance`, `repair_migration_plain_text`, `verify_migration_urls`. Sitemap indexes are recursive. GSC supports direct Search Console access or CSV and aggregates fragment variants. Plain-text repair is allowlisted and dry-run-first. Verification is compact by default. |
1032
+ | **Migration inventory + launch gate** | `get_migration_readiness` (preflight — CALL FIRST), `list_migration_urls`, `add_migration_urls`, `update_migration_url`, `update_migration_urls`, `delete_migration_url`, `import_sitemap`, `import_gsc_performance`, `repair_migration_plain_text`, `verify_migration_urls`, `record_migration_seo_acceptance`, `get_migration_launch_report`. Sitemap indexes are recursive. GSC supports direct Search Console access or CSV and aggregates fragment variants. Plain-text repair is allowlisted and dry-run-first. A complete unfiltered URL check and reviewed SEO evidence are bound to the latest hosted deploy; the launch report fails closed when either is stale or incomplete. |
1012
1033
  | **Forms** | `list_forms`, `read_form`, `create_form`, `update_form`, `delete_form`, `list_form_submissions`, `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. Email/webhook actions are admin-only in the portal and excluded from agent reads/writes. |
1013
- | **Settings** | `update_site_settings` (whitelist) |
1034
+ | **Settings** | `update_site_settings` (whitelist, including `sitewide_noindex` and shallow-merged native `cookie_consent`), `check_site_indexing` (live fallback/production headers, meta robots, and robots.txt diagnostics) |
1014
1035
  | **Core modules** | `list_apps`, `read_app`, `update_app` (legacy API name; admin; schema-driven config, masked secrets, redeploy when `affects_build` is true) |
1015
1036
  | **Extension installations** | `list_extension_installations`, `read_extension_installation`, `update_extension_installation_config` (admin; schema-driven config, masked secrets preserved, production deploy queued by default) |
1016
1037
  | **Analytics attribution** | `read_funnel_attribution`, `update_funnel_attribution` (specialized Analytics module tools; admin; redeploy after changes) |
package/README.md CHANGED
@@ -145,18 +145,23 @@ the full reference + concrete operation recipes.
145
145
  template, or collection item-template), so one tool family edits
146
146
  every block container.
147
147
  - **Global blocks (partials)** — list (summary mode by default), read,
148
- create free block, update, replace, delete, find-pages-using-block.
148
+ create free block, update, replace, delete, `set_partial_mode`,
149
+ find-pages-using-block. New header/footer work should use the native
150
+ `template/site_logo` + `core/navigation` recipe in `tr-header-footer`.
149
151
  - **Block types** — list, read, create, update, delete,
150
152
  find-pages-using-block-type, plus `.tcblocks` export/import. Custom
151
153
  client-side JS (`script`) is honoured only when the site has enabled
152
154
  "Allow AI to write block scripts" (a human-set portal setting) —
153
155
  otherwise it's stripped with a warning.
154
156
  - **Collections + items** — create/update/delete the collection schema
155
- itself (incl. `route_template` for per-item URLs); list/read/batch-
157
+ itself (incl. `route_template` for per-item URLs and native `article` /
158
+ `checklist` template presets); list/read/batch-
156
159
  read/create/update/delete items. Existing-collection tools consistently
157
160
  use `collection` (the old `name` argument remains accepted as an alias).
158
161
  Collection repeaters support `group_by`, and item templates can place
159
- `template/item_navigation` for deterministic previous/next links.
162
+ `template/item_navigation` for deterministic or explicitly field-bound
163
+ previous/next links. Typed context bindings, breadcrumbs, selected body
164
+ fields, and table-of-contents links render server-side.
160
165
  - **Media** — list, read, signed upload URLs, `upload_media_from_url`,
161
166
  `upload_media_batch_from_urls` (1–50 sources, max 25 MiB each, with
162
167
  partial-success results),
@@ -168,10 +173,12 @@ the full reference + concrete operation recipes.
168
173
  variant half of finalize, kept for surgical reruns),
169
174
  `suggest_alt_text_context` (returns a tuned prompt for your own
170
175
  vision model).
171
- - **Rendering controls** — `core/table_of_contents`, per-site
176
+ - **Rendering controls** — semantic `core/navigation`, mapped
177
+ `core/post_card`, `core/table_of_contents`, per-site
172
178
  `trailing_slash`, exact `iframe_allowed_hosts`, `icon_192`, and per-page
173
179
  `append_seo_suffix=false`. The block editor supports labelled enums,
174
- line-based lists, nested repeating arrays and an internal-page URL picker.
180
+ line-based lists, nested repeating arrays, responsive values in block
181
+ `data`, and an internal-page URL picker.
175
182
  - **Redirects** — list, create, delete. Plus automatic 301 on slug change.
176
183
  - **Forms** — list, read, create, update, delete, list submissions.
177
184
  Place forms with `core/form` blocks or an HTML-mode `<x-form id="…" />`
@@ -184,8 +191,8 @@ the full reference + concrete operation recipes.
184
191
  preserved. Use this for frontend config such as consent copy and policy
185
192
  links. It queues a production deploy by default; pass `deploy: false` only
186
193
  when batching changes and deploy once afterwards.
187
- - **Settings** — read + patch, including `scripts_head` /
188
- `scripts_body_end` / `custom_css` (trusted because the caller holds an
194
+ - **Settings** — read + patch, including shallow-merged `cookie_consent`,
195
+ `scripts_head` / `scripts_body_end` / `custom_css` (trusted because the caller holds an
189
196
  API key; the in-portal chat AI does NOT get these).
190
197
  - **Core modules** — list the legacy `apps` registry, read schema + masked
191
198
  state, and enable, configure, or disable any module with the same admin API key used for content