@typeroll/mcp-server 0.16.0 → 0.16.2

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
@@ -435,6 +435,16 @@ update_page page_id=about patch={ slug: "om-oss" }
435
435
 
436
436
  The 301 fires automatically — you don't have to remember.
437
437
 
438
+ Redirect hygiene is automatic in both directions (since 0.16.1):
439
+
440
+ - When a **live** (published/unlisted) page takes over a URL — via slug/path
441
+ change, publish, or create — any redirect FROM that URL is retired; the
442
+ response lists them under `retired_redirects`. A real page always beats a
443
+ redirect (on Cloudflare Pages a redirect would otherwise shadow the page).
444
+ - When a page is **deleted**, auto-generated redirects pointing TO its URL
445
+ are removed (reported as `removed_redirects`). Manually created redirects
446
+ are kept — delete them yourself via `delete_redirect` if they're obsolete.
447
+
438
448
  ### "Change the site's fallback URL (slug)"
439
449
 
440
450
  ```
@@ -543,7 +553,7 @@ stakeholder review.
543
553
  | **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` |
544
554
  | **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` |
545
555
  | **Redirects** | `list_redirects`, `create_redirect`, `delete_redirect` |
546
- | **Forms** | `list_forms`, `read_form`, `create_form`, `update_form`, `delete_form`, `list_form_submissions`. read/create return `submit_token` + `submit_url` — embed as a plain `<form method="POST">` with a hidden `_token` input + empty honeypot `_hp`; no client JS (the sanitizer strips inline `<script>`; the endpoint answers form posts with an HTML confirmation page) |
556
+ | **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). read/create return `submit_token` + `submit_url` — embed as a plain `<form method="POST">` with a hidden `_token` input + empty honeypot `_hp`; no client JS (the sanitizer strips inline `<script>`; the endpoint answers form posts with an HTML confirmation page) |
547
557
  | **Settings** | `update_site_settings` (whitelist) |
548
558
  | **Search + bulk** | `search_pages`, `bulk_replace_text` |
549
559
  | **Branches** | `create_branch`, `read_version`, `delete_branch`, `merge_branch` |
@@ -97,4 +97,16 @@ export const formTools = [
97
97
  return ok(res);
98
98
  }),
99
99
  },
100
+ {
101
+ name: 'delete_form_submission',
102
+ description: 'Delete a single submission from a form\'s inbox. Use this to remove individual entries (test submissions, spam) without touching the rest — delete_form with delete_submissions is the only way to bulk-delete. Get submission ids from list_form_submissions.',
103
+ inputSchema: {
104
+ form_id: z.string(),
105
+ submission_id: z.string(),
106
+ },
107
+ handler: withErrorBoundary(async (args, { client, siteId }) => {
108
+ const res = await client.del(siteId, `forms/${encodeURIComponent(args.form_id)}/submissions/${encodeURIComponent(args.submission_id)}`);
109
+ return ok(res);
110
+ }),
111
+ },
100
112
  ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeroll/mcp-server",
3
- "version": "0.16.0",
3
+ "version": "0.16.2",
4
4
  "description": "Model Context Protocol server for the Typeroll public API. Use with Claude Code or any MCP-compatible client to manage a Typeroll site.",
5
5
  "license": "MIT",
6
6
  "repository": {