@typeroll/mcp-server 0.38.1 → 0.41.0

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
@@ -105,6 +105,15 @@ maps to one HTTP endpoint; the actual logic runs in the customer's portal
105
105
  reads and encrypted at rest; omitted fields preserve their current values.
106
106
  When `affects_build` is true, deploy after the update.
107
107
 
108
+ - **Extension installations.** `list_extension_installations`,
109
+ `read_extension_installation`, and `update_extension_installation_config`
110
+ expose each installed Extension's manifest-defined config through the admin
111
+ API key. Read the installation before writing so you use the exact keys from
112
+ `manifest.config_schema`. This is the supported automation path for public
113
+ content such as consent copy, link text, and policy URLs; masked secrets are
114
+ preserved when omitted. A successful update returns
115
+ `redeploy_required: true`; review the result, then deploy explicitly.
116
+
108
117
  - **Page templates.** A `PageTemplate` is a Block[] tree that wraps a
109
118
  page's body. The template contains exactly one block of type
110
119
  `template_content_slot` — at render time that block gets replaced by
@@ -371,6 +380,17 @@ maps to one HTTP endpoint; the actual logic runs in the customer's portal
371
380
  Don't hardcode assumptions about what's here. Every fact about the site
372
381
  goes through the MCP:
373
382
 
383
+ **Capability discovery is a required gate for every build, migration and
384
+ redesign.** Before choosing HTML mode, hand-writing a component, or reporting
385
+ that Typeroll lacks a feature, call `get_site_capabilities` and
386
+ `list_block_types` (`full:true` only when you need every template). If a likely
387
+ type appears, call `read_block_type` and inspect its schema. A capability gap is
388
+ valid only after those reads show that neither a core/site block nor a
389
+ composition of `core/section`, layout blocks, `core/repeater`, template blocks,
390
+ or a custom block type can express the requirement. Record the calls and the
391
+ closest available primitive in any gap report. This is a completion criterion,
392
+ not optional discovery.
393
+
374
394
  1. `get_site` — confirm the key works; learn the site name + URLs.
375
395
  2. `read_site_settings` — colors, fonts, contact info, SEO suffix,
376
396
  content language (used by `suggest_alt_text_context`).
@@ -380,14 +400,17 @@ goes through the MCP:
380
400
  `include_content: true` if you actually need the bodies inline.
381
401
  5. `list_collections` — what content types exist + their schemas +
382
402
  `route_template` (so you know if items have URLs).
383
- 6. `list_block_types` — every block type usable on this site: core
403
+ 6. `get_site_capabilities` — renderer version and feature flags. Never infer
404
+ support from remembered release notes.
405
+ 7. `list_block_types` — every block type usable on this site: core
384
406
  (always available, ids like `core/section`), custom (origin: 'user'),
385
407
  and third-party (origin: 'third_party'). Each entry includes the
386
408
  full schema so you know what `data.X` fields each block accepts.
387
- 7. `list_page_templates` — PageTemplate docs that wrap pages.
409
+ 8. `list_page_templates` — PageTemplate docs that wrap pages.
388
410
 
389
- You usually want at least #1 + #2 + a sampling from #3 before
390
- proposing any design change, so you mirror the conventions in use.
411
+ For a build, migration, redesign, or capability report, #1–#8 are the
412
+ preflight. For a small content-only edit, #1 + #2 + a sampling from #3 is
413
+ usually sufficient.
391
414
 
392
415
  **Source of truth = the live site (the API), by default.** The content and
393
416
  structure you read back through the MCP (`read_page`, `read_partial`,
@@ -967,12 +990,13 @@ preview.
967
990
  | **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` |
968
991
  | **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` |
969
992
  | **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. |
970
- | **Migration inventory** | `get_migration_readiness` (preflight — CALL FIRST on any import), `list_migration_urls`, `add_migration_urls`, `update_migration_url`, `delete_migration_url`, `verify_migration_urls`. The legacy site's URL list with LIVE coverage status (`migrated` / `redirected` / `excluded` / `unhandled`, recomputed on every read from current pages + redirects). `verify_migration_urls` is the pre-cutover check that REQUESTS every URL against the deployed site see "Don't lose URLs in a migration" below. |
993
+ | **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`, `verify_migration_urls`. Sitemap indexes are recursive. GSC supports direct Search Console access or CSV and aggregates fragment variants. Verification is compact by default. |
971
994
  | **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. |
972
995
  | **Settings** | `update_site_settings` (whitelist) |
973
996
  | **Core modules** | `list_apps`, `read_app`, `update_app` (legacy API name; admin; schema-driven config, masked secrets, redeploy when `affects_build` is true) |
997
+ | **Extension installations** | `list_extension_installations`, `read_extension_installation`, `update_extension_installation_config` (admin; schema-driven config, masked secrets preserved, redeploy after frontend-facing changes) |
974
998
  | **Analytics attribution** | `read_funnel_attribution`, `update_funnel_attribution` (specialized Analytics module tools; admin; redeploy after changes) |
975
- | **Search + bulk** | `search_pages`, `bulk_replace_text` |
999
+ | **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, collection items or all resources, always dry-run first. |
976
1000
  | **Branches** | `create_branch`, `read_version`, `delete_branch`, `merge_branch` |
977
1001
  | **Deploy** | `trigger_deploy`, `list_deploys`, `get_deploy_status` |
978
1002
  | **Preview** | `get_preview_link`, `get_page_preview` |
package/README.md CHANGED
@@ -75,8 +75,10 @@ client using it stops working immediately.
75
75
  > number of pages, what global blocks exist, what collections are
76
76
  > defined. Then I'll give you a task."
77
77
 
78
- Claude will call `get_site`, `list_pages`, `list_partials`,
79
- `list_collections` in sequence and report back.
78
+ Claude will call `get_site`, `get_site_capabilities`, `list_pages`,
79
+ `list_partials`, `list_collections`, and `list_block_types` in sequence and
80
+ report back. The capabilities + block palette are mandatory before it
81
+ chooses HTML mode or reports a missing site-building feature.
80
82
 
81
83
  ## Environment variables (stdio)
82
84
 
@@ -113,7 +115,7 @@ which tool.
113
115
 
114
116
  ## Tool surface
115
117
 
116
- Around 50 tools across these families. See [AGENTS.md](./AGENTS.md) for
118
+ More than 100 tools across these families. See [AGENTS.md](./AGENTS.md) for
117
119
  the full reference + concrete operation recipes.
118
120
 
119
121
  - **Skills + guide (self-describing playbook)** — `read_guide`,
@@ -146,9 +148,14 @@ the full reference + concrete operation recipes.
146
148
  otherwise it's stripped with a warning.
147
149
  - **Collections + items** — create/update/delete the collection schema
148
150
  itself (incl. `route_template` for per-item URLs); list/read/batch-
149
- read/create/update/delete items.
151
+ read/create/update/delete items. Existing-collection tools consistently
152
+ use `collection` (the old `name` argument remains accepted as an alias).
153
+ Collection repeaters support `group_by`, and item templates can place
154
+ `template/item_navigation` for deterministic previous/next links.
150
155
  - **Media** — list, read, signed upload URLs, `upload_media_from_url`,
151
- `upload_media_inline` (both auto-finalize after PUT see below),
156
+ `upload_media_batch_from_urls` (1–50 sources, max 25 MiB each, with
157
+ partial-success results),
158
+ `upload_media_inline` (all URL uploads auto-finalize after PUT — see below),
152
159
  patch metadata, delete, `finalize_media` (per-item: applies immutable
153
160
  Cache-Control + generates AVIF/WebP srcset variants — call after
154
161
  `create_upload_url`'s raw PUT path), `finalize_all_media` (bulk
@@ -156,12 +163,21 @@ the full reference + concrete operation recipes.
156
163
  variant half of finalize, kept for surgical reruns),
157
164
  `suggest_alt_text_context` (returns a tuned prompt for your own
158
165
  vision model).
166
+ - **Rendering controls** — `core/table_of_contents`, per-site
167
+ `trailing_slash`, exact `iframe_allowed_hosts`, `icon_192`, and per-page
168
+ `append_seo_suffix=false`. The block editor supports labelled enums,
169
+ line-based lists, nested repeating arrays and an internal-page URL picker.
159
170
  - **Redirects** — list, create, delete. Plus automatic 301 on slug change.
160
171
  - **Forms** — list, read, create, update, delete, list submissions.
161
172
  Place forms with `core/form` blocks or an HTML-mode `<x-form id="…" />`
162
173
  reference; preview/build expands both server-side to the same complete,
163
174
  signed form shell. Admins configure email and allowlisted, signed webhooks
164
175
  in the portal; action configuration stays off agent surfaces.
176
+ - **Extension installations** — list/read installed Extensions and update
177
+ manifest-defined installation config through the API key with
178
+ `update_extension_installation_config`; omitted and masked secrets are
179
+ preserved. Use this for frontend config such as consent copy and policy
180
+ links, then redeploy.
165
181
  - **Settings** — read + patch, including `scripts_head` /
166
182
  `scripts_body_end` / `custom_css` (trusted because the caller holds an
167
183
  API key; the in-portal chat AI does NOT get these).
@@ -170,8 +186,14 @@ the full reference + concrete operation recipes.
170
186
  and deploys. Secret fields are encrypted server-side and never returned;
171
187
  Analytics provisioning runs on the platform. Deploy after updates whose
172
188
  response has `affects_build: true`.
173
- - **Search** — `search_pages` with substring or regex.
174
- - **Bulk** `bulk_replace_text` with dry-run.
189
+ - **Search + link integrity** — `search_pages` plus `check_internal_links`,
190
+ which resolves saved database content against pages, collection/facet routes,
191
+ media and redirect chains without crawling the public site.
192
+ - **Bulk** — `bulk_replace_text` with dry-run across pages, partials,
193
+ block data and schema-defined collection-item fields.
194
+ - **Migration inventory** — bulk add/update decisions, recursive
195
+ `import_sitemap`, direct or CSV-fallback `import_gsc_performance`, and compact
196
+ `verify_migration_urls` (successful rows omitted unless requested).
175
197
  - **Branches** — create, read, delete, merge. Branch deploys get their
176
198
  own URL at `{branch}.{project}.pages.dev`.
177
199
  - **Deploy** — trigger (with `dry_run` to build without publishing), list, get
@@ -197,7 +219,9 @@ curl -H "Authorization: Bearer typeroll_live_..." \
197
219
  https://app.typeroll.com/api/v1/sites/<siteId>/pages
198
220
  ```
199
221
 
200
- The MCP server is purely an ergonomics layer on top of that.
222
+ The MCP server is purely an ergonomics layer on top of that. The complete v1
223
+ contract, including payload envelopes and collection-item slug addressing, is
224
+ documented in [`docs/v1-api.md`](../../docs/v1-api.md).
201
225
 
202
226
  ## Security model
203
227