@phenomenalorg/mcp 0.5.1 → 0.5.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phenomenalorg/mcp",
3
- "version": "0.5.1",
3
+ "version": "0.5.3",
4
4
  "type": "module",
5
5
  "description": "Phenomenal MCP bridge — connects a stdio-only MCP client to the Phenomenal MCP server over Streamable HTTP, with browser sign-in.",
6
6
  "license": "MIT",
package/skill/SKILL.md CHANGED
@@ -8,7 +8,7 @@ description: Use when the user wants to manage a PTO, school or club in Phenomen
8
8
  <!-- Generated from the Phenomenal tool registry. Do not edit by hand: a drift
9
9
  gate fails when these files are not what the registry currently says. -->
10
10
 
11
- _Tool surface: 42 tools · 165 actions · 5 prompts · fingerprint `a8796891`._
11
+ _Tool surface: 47 tools · 170 actions · 5 prompts · fingerprint `d1014c5e`._
12
12
 
13
13
  You are connected to Phenomenal, the platform for this PTO's site, members, events, tickets, email, forms, store and money.
14
14
 
@@ -3,7 +3,7 @@
3
3
  <!-- Generated from the Phenomenal tool registry. Do not edit by hand: a drift
4
4
  gate fails when these files are not what the registry currently says. -->
5
5
 
6
- _Tool surface: 42 tools · 165 actions · 5 prompts · fingerprint `a8796891`._
6
+ _Tool surface: 47 tools · 170 actions · 5 prompts · fingerprint `d1014c5e`._
7
7
 
8
8
  The curated tools in `references/tools.md` cover the work an officer does most days. Everything else Phenomenal can do is reachable by name:
9
9
 
@@ -15,7 +15,7 @@ Prefer a curated tool when one covers what you need: it is one call instead of t
15
15
 
16
16
  **(confirm)** marks an action that sends mail, moves money, publishes something publicly, deletes something, changes who can do what, or changes the organization's web address. Those change nothing until a person has said yes in words. Every action is subject to your role in the organization regardless; the confirm gate is about being asked, not about being allowed.
17
17
 
18
- Areas: account, brand, broadcasts, connections, domains, drive, email-preferences, events, forms, groups, knowledge, looks, media, meetings, members, money, orders, organization, pages, store, tasks, tickets.
18
+ Areas: account, brand, broadcasts, connections, domains, drive, email-preferences, events, forms, groups, knowledge, looks, media, meetings, members, money, orders, organization, pages, reusable-content, store, tasks, tickets.
19
19
 
20
20
  ## account
21
21
 
@@ -227,6 +227,14 @@ Areas: account, brand, broadcasts, connections, domains, drive, email-preference
227
227
  - `unpublishPage` **(confirm)** — Prefer the `unpublish_page` tool. Take a page off the live site.
228
228
  - `updatePageDraft` — Prefer the `update_page_draft` tool. Replace a page draft with new blocks.
229
229
 
230
+ ## reusable-content
231
+
232
+ - `deleteReusableContent` **(confirm)** — Remove reusable content at an exact expected policy version.
233
+ - `prepareReusableContentCopy` — Prepare an idempotent, 30-minute copy of an authorized reusable revision into complete candidate blocks for one page, event or broadcast at its exact destination token and insertion index.
234
+ - `saveReusableContentNew` — Save a new reusable composition and its first immutable revision from complete blocks, an initial-use audience and a per-operation idempotency key.
235
+ - `saveReusableContentRevision` — Append an immutable complete-block revision using the exact current revision id and policy version plus a per-operation idempotency key.
236
+ - `updateReusableContentPolicy` **(confirm)** — Change reusable-content ownership, metadata, initial-use audience and the complete grant set at an exact expected policy version.
237
+
230
238
  ## store
231
239
 
232
240
  - `createOrgProduct` — Add a product to the store from a catalog blank at a retail price.
@@ -3,7 +3,7 @@
3
3
  <!-- Generated from the Phenomenal tool registry. Do not edit by hand: a drift
4
4
  gate fails when these files are not what the registry currently says. -->
5
5
 
6
- _Tool surface: 42 tools · 165 actions · 5 prompts · fingerprint `a8796891`._
6
+ _Tool surface: 47 tools · 170 actions · 5 prompts · fingerprint `d1014c5e`._
7
7
 
8
8
  Two tools answer questions no curated tool anticipated.
9
9
 
@@ -3,7 +3,7 @@
3
3
  <!-- Generated from the Phenomenal tool registry. Do not edit by hand: a drift
4
4
  gate fails when these files are not what the registry currently says. -->
5
5
 
6
- _Tool surface: 42 tools · 165 actions · 5 prompts · fingerprint `a8796891`._
6
+ _Tool surface: 47 tools · 170 actions · 5 prompts · fingerprint `d1014c5e`._
7
7
 
8
8
  Phenomenal runs a school's PTO: its public website, its member roster, its events and tickets, its email to families, its forms, its store and its money. It exposes all of that over the Model Context Protocol, so an assistant an officer already uses can do the work with them.
9
9
 
@@ -3,7 +3,7 @@
3
3
  <!-- Generated from the Phenomenal tool registry. Do not edit by hand: a drift
4
4
  gate fails when these files are not what the registry currently says. -->
5
5
 
6
- _Tool surface: 42 tools · 165 actions · 5 prompts · fingerprint `a8796891`._
6
+ _Tool surface: 47 tools · 170 actions · 5 prompts · fingerprint `d1014c5e`._
7
7
 
8
8
  Every tool the Phenomenal MCP server offers, in the order a client lists them. `list_my_orgs` is first because every other tool needs an organization id from it.
9
9
 
@@ -116,7 +116,7 @@ Read the complete authorized page content, Looks appearance, revisions, actions
116
116
 
117
117
  ### `preview_page_changes`
118
118
 
119
- Validate complete page content and a Look together without writing. DRAFT previews edits; PUBLISH previews the exact stored draft.
119
+ Validate complete page content, pending reusable-copy receipts and a Look together without writing. DRAFT previews edits; PUBLISH accepts no edits or pending copies and previews the exact stored draft.
120
120
 
121
121
  **Hints:** read-only, idempotent. **Confirm:** not required.
122
122
 
@@ -128,11 +128,12 @@ Validate complete page content and a Look together without writing. DRAFT previe
128
128
  - `expectedThemeRevision` (string, required) — Copy exactly from get_page_authoring_state; never infer or synthesize it.
129
129
  - `content` (object)
130
130
  - `lookChange` (any)
131
+ - `pendingCopies` (array) — Exact pendingCopy receipt(s) from prepare_reusable_content_copy. cancelledRootIds may contain only deliberately removed inserted roots.
131
132
  - `effect` (string (DRAFT | PUBLISH)) — DRAFT by default. PUBLISH accepts no edits and previews stored state.
132
133
 
133
134
  ### `save_page_changes`
134
135
 
135
- Save one previously previewed complete page-and-Look DRAFT atomically. It remains private and never publishes or retries.
136
+ Save one previously previewed complete page-and-Look DRAFT with the identical pending reusable-copy receipts atomically. It remains private and never publishes or retries.
136
137
 
137
138
  **Hints:** writes. **Confirm:** not required.
138
139
 
@@ -144,8 +145,82 @@ Save one previously previewed complete page-and-Look DRAFT atomically. It remain
144
145
  - `expectedThemeRevision` (string, required) — Copy exactly from get_page_authoring_state; never infer or synthesize it.
145
146
  - `content` (object)
146
147
  - `lookChange` (any)
148
+ - `pendingCopies` (array) — Exact pendingCopy receipt(s) from prepare_reusable_content_copy. cancelledRootIds may contain only deliberately removed inserted roots.
147
149
  - `previewDigest` (string, required) — Copy exactly from the matching VALID DRAFT preview.
148
150
 
151
+ ### `list_reusable_content`
152
+
153
+ List compact reusable-content summaries this actor may read, including exact revision, policy and distinct read/use/revise/administer facts. Use get_reusable_content for blocks and grants.
154
+
155
+ **Hints:** read-only, idempotent. **Confirm:** not required.
156
+
157
+ **Arguments**
158
+
159
+ - `orgId` (string) — The organization to act for — an id from list_my_orgs. Never invent one; if you are unsure which, ask the person.
160
+ - `limit` (integer)
161
+ - `cursor` (string) — The prior page’s last returned content id.
162
+
163
+ ### `get_reusable_content`
164
+
165
+ Read one authorized reusable composition and exact revision with complete blocks, grants and permission facts. An unavailable id reveals no metadata.
166
+
167
+ **Hints:** read-only, idempotent. **Confirm:** not required.
168
+
169
+ **Arguments**
170
+
171
+ - `orgId` (string) — The organization to act for — an id from list_my_orgs. Never invent one; if you are unsure which, ask the person.
172
+ - `contentId` (string, required)
173
+ - `revisionId` (string) — Optional exact immutable revision id.
174
+
175
+ ### `save_reusable_content_new`
176
+
177
+ Save a new private reusable-content identity from complete canonical blocks. It does not publish or insert content anywhere.
178
+
179
+ **Hints:** writes, idempotent. **Confirm:** not required.
180
+
181
+ **Arguments**
182
+
183
+ - `orgId` (string) — The organization to act for — an id from list_my_orgs. Never invent one; if you are unsure which, ask the person.
184
+ - `ownerGroupId` (any)
185
+ - `name` (string, required)
186
+ - `description` (string)
187
+ - `blocks` (array, required) — The complete canonical Phenomenal block array, including every locale and child.
188
+ - `initialUseAudience` (string, required) — public, members, or group:<uuid>.
189
+ - `idempotencyKey` (string, required) — A caller-stable key for this exact input.
190
+
191
+ ### `save_reusable_content_revision`
192
+
193
+ Append one immutable complete-block revision under exact revision and policy compare-and-swap values. Existing revisions remain unchanged.
194
+
195
+ **Hints:** writes, idempotent. **Confirm:** not required.
196
+
197
+ **Arguments**
198
+
199
+ - `orgId` (string) — The organization to act for — an id from list_my_orgs. Never invent one; if you are unsure which, ask the person.
200
+ - `contentId` (string, required)
201
+ - `expectedRevisionId` (string, required)
202
+ - `expectedPolicyVersion` (integer, required)
203
+ - `blocks` (array, required) — The complete canonical Phenomenal block array, including every locale and child.
204
+ - `idempotencyKey` (string, required) — A caller-stable key for this exact input.
205
+
206
+ ### `prepare_reusable_content_copy`
207
+
208
+ Read source and destination state first, then create actor-bound 30-minute staging against the complete unsaved candidate and exact destination token. Inspect the returned complete blocks, source snapshot, fresh IDs and expiresAt. For a page, DRAFT preview and explicitly save with the identical pendingCopy, then read back canonical state; event and broadcast saves are also explicit and never publish or send. Copies are independent: source edits or revocation do not rewrite committed destinations, and restricted media keeps its policy. If latest was omitted, retry with the returned explicit source revision.
209
+
210
+ **Hints:** writes, idempotent. **Confirm:** not required.
211
+
212
+ **Arguments**
213
+
214
+ - `orgId` (string) — The organization to act for — an id from list_my_orgs. Never invent one; if you are unsure which, ask the person.
215
+ - `contentId` (string, required)
216
+ - `revisionId` (string) — Optional exact source revision. Reuse the returned source.revisionId on retry.
217
+ - `destination` (object, required)
218
+ - `expectedDestinationToken` (string, required)
219
+ - `destinationAudience` (string, required) — public, members, or group:<uuid>.
220
+ - `candidateBlocks` (array, required) — The complete canonical Phenomenal block array, including every locale and child.
221
+ - `insertionIndex` (integer, required)
222
+ - `idempotencyKey` (string, required) — A caller-stable key for this exact prepare.
223
+
149
224
  ### `draft_page`
150
225
 
151
226
  Draft content for a Phenomenal page from a plain-language instruction and return the blocks. It SAVES NOTHING — show the result to the person, then save it with update_page_draft. This counts against the organization's AI budget, exactly as drafting from the admin app does.
@@ -194,13 +269,14 @@ Take a page off the live Phenomenal site. The draft is kept, but every link anyo
194
269
 
195
270
  ### `list_events`
196
271
 
197
- The events on a Phenomenal organization's calendar, soonest first, with whether each one is published.
272
+ List compact event summaries on a Phenomenal organization's calendar, soonest first. Pass eventId alone to read one complete authorized event including pageBlocks.
198
273
 
199
274
  **Hints:** read-only, idempotent. **Confirm:** not required.
200
275
 
201
276
  **Arguments**
202
277
 
203
278
  - `orgId` (string) — The organization to act for — an id from list_my_orgs. Never invent one; if you are unsure which, ask the person.
279
+ - `eventId` (string) — Read one complete authorized event. Cannot be combined with from or to.
204
280
  - `from` (string) — Only events starting on or after this date (YYYY-MM-DD).
205
281
  - `to` (string) — Only events starting on or before this date (YYYY-MM-DD).
206
282
 
@@ -222,7 +298,7 @@ Create an event in Phenomenal. It starts UNPUBLISHED — nobody outside the orga
222
298
 
223
299
  ### `update_event`
224
300
 
225
- Change an event in Phenomenal — its title, time, place or description. Only the fields you pass are changed. If the event is already published, the site changes at once.
301
+ Change an event in Phenomenal — its title, time, place or description. Only the fields you pass are changed. A prepared copy requires complete pageBlocks, the exact revision and pendingCopies together. If the event is already published, the site changes at once.
226
302
 
227
303
  **Hints:** writes, idempotent. **Confirm:** not required.
228
304
 
@@ -235,6 +311,9 @@ Change an event in Phenomenal — its title, time, place or description. Only th
235
311
  - `endsAt` (string) — A new end, ISO 8601.
236
312
  - `location` (string) — A new location.
237
313
  - `description` (string) — A new description.
314
+ - `pageBlocks` (array) — The complete prepared event-page candidate. Live data bindings are not supported here.
315
+ - `expectedRevision` (string) — Exact revision read from list_events and used for preparation.
316
+ - `pendingCopies` (array) — Exact pendingCopy receipt(s) from prepare_reusable_content_copy. cancelledRootIds may contain only deliberately removed inserted roots.
238
317
 
239
318
  ### `set_event_published`
240
319
 
@@ -273,28 +352,33 @@ Who is in one Phenomenal group, with each person's relation to it (member, stewa
273
352
 
274
353
  ### `list_broadcasts`
275
354
 
276
- The email broadcasts of a Phenomenal organization drafts and sent ones with how many people each reached.
355
+ List compact broadcast summaries for a Phenomenal organization. Pass broadcastId to read one complete authorized draft including localized subject and body.
277
356
 
278
357
  **Hints:** read-only, idempotent. **Confirm:** not required.
279
358
 
280
359
  **Arguments**
281
360
 
282
361
  - `orgId` (string) — The organization to act for — an id from list_my_orgs. Never invent one; if you are unsure which, ask the person.
362
+ - `broadcastId` (string) — Read one complete authorized broadcast by id.
283
363
  - `status` (string) — Only broadcasts in this state, e.g. "draft" or "sent".
284
364
 
285
365
  ### `draft_broadcast`
286
366
 
287
- Write an email broadcast draft for a Phenomenal organization and choose who it would go to. SENDS NOTHING it creates a draft and tells you how many people it would reach.
367
+ Create an email broadcast draft, or explicitly save complete prepared bodyBlocks into an existing draft with its exact revision and pendingCopies. SENDS NOTHING in either mode.
288
368
 
289
369
  **Hints:** writes. **Confirm:** not required.
290
370
 
291
371
  **Arguments**
292
372
 
293
373
  - `orgId` (string) — The organization to act for — an id from list_my_orgs. Never invent one; if you are unsure which, ask the person.
294
- - `subject` (string, required) — The subject line families will see.
295
- - `body` (string, required) — The message, in Markdown. Write it the way a parent would want to read it — short, warm, and clear about dates and what to do.
296
- - `audience` (object) — Who it goes to. Leave it out entirely to address every member of the organization.
374
+ - `broadcastId` (string) — Existing draft id. Omit to create a new markdown draft.
375
+ - `subject` (string) — The subject line families will see.
376
+ - `body` (string) — The message, in Markdown. Write it the way a parent would want to read it short, warm, and clear about dates and what to do.
377
+ - `audience` (object) — Who it goes to. Omission selects every member for a new draft, but preserves the stored audience when saving an existing draft.
297
378
  - `replyTo` (string) — Where replies go. Optional — the organization's contact address is used otherwise.
379
+ - `bodyBlocks` (array) — Complete prepared block-body candidate for existing-draft mode only.
380
+ - `expectedRevision` (string) — Exact revision used to prepare this existing broadcast draft.
381
+ - `pendingCopies` (array) — Exact pendingCopy receipt(s) from prepare_reusable_content_copy. cancelledRootIds may contain only deliberately removed inserted roots.
298
382
 
299
383
  ### `send_broadcast_test`
300
384
 
@@ -473,7 +557,7 @@ Every action Phenomenal can take that the curated tools do not already cover, as
473
557
 
474
558
  **Arguments**
475
559
 
476
- - `area` (string (account | brand | broadcasts | connections | domains | drive | email-preferences | events | forms | groups | knowledge | looks | media | meetings | members | money | orders | organization | pages | store | tasks | tickets)) — Only actions in this part of Phenomenal.
560
+ - `area` (string (account | brand | broadcasts | connections | domains | drive | email-preferences | events | forms | groups | knowledge | looks | media | meetings | members | money | orders | organization | pages | reusable-content | store | tasks | tickets)) — Only actions in this part of Phenomenal.
477
561
  - `search` (string) — Only actions whose name or summary contains this word.
478
562
 
479
563
  ### `describe_mutation`