@okostream/mcp 0.5.3 → 0.5.4
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/CHANGELOG.md +7 -0
- package/README.md +2 -0
- package/dist/guides.js +30 -15
- package/dist/server.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.4 - 2026-07-10
|
|
4
|
+
|
|
5
|
+
- Separated NMO from the standard webinar workflow throughout instructions, resources, prompts, README, and the companion skill.
|
|
6
|
+
- Marked NMO as an unfinished special MVP mode that must only be enabled after an explicit organizer request and limitation disclosure.
|
|
7
|
+
- Documented the current NMO gaps: hardened email-link/strict single-device, checkpoint auto-close, official portal integration, and remaining Sprint 2 UX/automation.
|
|
8
|
+
- Added protocol assertions preventing future onboarding from silently presenting NMO as a normal production-ready webinar option.
|
|
9
|
+
|
|
3
10
|
## 0.5.3 - 2026-07-10
|
|
4
11
|
|
|
5
12
|
- Added an explicit product model: OKO wraps an organizer-supplied video player and does not host or start the underlying stream.
|
package/README.md
CHANGED
|
@@ -56,6 +56,8 @@ Node.js 20.18.1 or newer is required.
|
|
|
56
56
|
|
|
57
57
|
OKO is a webinar experience and operations layer, not a video-streaming host. The organizer supplies a YouTube, iframe, or other player URL; OKO adds the event page, configurable audience blocks, chat, analytics, and NMO attendance controls around it. Start/End tools control analytics sessions only, never the underlying video stream.
|
|
58
58
|
|
|
59
|
+
Standard webinars are the default supported workflow. NMO is a separate unfinished MVP mode and must be enabled only on an explicit organizer request after reviewing `oko://guide/nmo`; it is not a normal option inferred from a medical topic or audience.
|
|
60
|
+
|
|
59
61
|
## Security Model
|
|
60
62
|
|
|
61
63
|
- Each API key exchanges into its own Firebase identity `mcp_<keyId>`; it never inherits platform-owner claims from the organizer account.
|
package/dist/guides.js
CHANGED
|
@@ -3,6 +3,7 @@ export const OKO_MCP_INSTRUCTIONS = [
|
|
|
3
3
|
"You are controlling OKO Stream as an organizer through MCP tools.",
|
|
4
4
|
"OKO is a webinar experience and operations layer, not a video-streaming host. The organizer supplies a YouTube, iframe, or other player URL; OKO adds the event page, audience blocks, chat, analytics, and NMO attendance controls around it.",
|
|
5
5
|
"Use the source player or encoder to start video. In OKO, Start and End manage analytics sessions only, while blocks and chat control the attendee experience around the supplied video.",
|
|
6
|
+
"Default to a standard webinar. NMO is a separate unfinished MVP mode, not a normal webinar option: never infer or enable it from the audience or topic. Use it only after the organizer explicitly requests NMO and accepts the current limitations in oko://guide/nmo.",
|
|
6
7
|
"Start every new workspace session with oko_whoami, then respect the returned scopes.",
|
|
7
8
|
"OKO events have no draft/live/ended status. Start/End controls manage analytics sessions only, never video streaming.",
|
|
8
9
|
"For webinar creation, prefer this flow: oko_create_webinar, oko_configure_blocks, oko_configure_cards, image uploads, oko_validate_event_setup, then return public/setup/analytics links.",
|
|
@@ -26,13 +27,14 @@ const GUIDE_RESOURCES = [
|
|
|
26
27
|
"1. Call `oko_whoami` and inspect scopes.",
|
|
27
28
|
"2. If the workspace is unclear, call `oko_list_workspaces`.",
|
|
28
29
|
"3. Call `oko_create_webinar` with title/date/workspace and video URL when known.",
|
|
29
|
-
"4. Call `oko_configure_blocks` for video, forms, CTA, banner,
|
|
30
|
+
"4. Call `oko_configure_blocks` for video, forms, CTA, banner, and Telegram settings.",
|
|
30
31
|
"5. Call `oko_configure_cards` with stable card ids before uploading card images.",
|
|
31
32
|
"6. Upload images with `oko_upload_card_images_batch` or `oko_upload_image`, then wait for variants.",
|
|
32
33
|
"7. Call `oko_validate_event_setup` and fix blocking findings.",
|
|
33
34
|
"8. Return public, setup, analytics, registration, and login links that apply to the event.",
|
|
34
35
|
"",
|
|
35
36
|
"Important: OKO has no event status. Do not invent draft/live/ended lifecycle states.",
|
|
37
|
+
"NMO is not part of this standard workflow. If the organizer explicitly requests the separate NMO MVP mode, read `oko://guide/nmo`, disclose its current limitations, and follow that workflow separately.",
|
|
36
38
|
].join("\n"),
|
|
37
39
|
},
|
|
38
40
|
{
|
|
@@ -58,14 +60,22 @@ const GUIDE_RESOURCES = [
|
|
|
58
60
|
{
|
|
59
61
|
name: "oko_mcp_nmo",
|
|
60
62
|
uri: "oko://guide/nmo",
|
|
61
|
-
title: "
|
|
62
|
-
description: "
|
|
63
|
+
title: "NMO Mode (Special MVP Workflow)",
|
|
64
|
+
description: "Separate unfinished NMO mode: current MVP workflow, limits, participants, checkpoints, and technical results.",
|
|
63
65
|
text: [
|
|
64
|
-
"#
|
|
66
|
+
"# NMO Mode (Special MVP Workflow)",
|
|
65
67
|
"",
|
|
66
|
-
"NMO mode
|
|
68
|
+
"NMO is a separate, unfinished MVP mode for attendance-controlled medical education webinars. It is not part of a standard OKO webinar and must never be enabled because the audience happens to be doctors or the topic is medical. Proceed only when the organizer explicitly requests NMO and understands the limitations below.",
|
|
67
69
|
"",
|
|
68
|
-
"##
|
|
70
|
+
"## Current limits",
|
|
71
|
+
"- The hardened email-link login and strict instant single-device enforcement are not finished.",
|
|
72
|
+
"- Checkpoint timeout does not auto-close the checkpoint; the organizer must close it manually.",
|
|
73
|
+
"- OKO is not integrated with the official NMO portal and does not issue an official credit or certificate.",
|
|
74
|
+
"- Sprint 2 operator UX and automation remain incomplete. Treat this as a controlled pilot workflow, not a default production promise.",
|
|
75
|
+
"",
|
|
76
|
+
"Within those limits, OKO can record technical eligibility from watch-time and checkpoint ratios. The organizer remains responsible for participant communication, identity assurance, accreditation, and the decision to use the mode.",
|
|
77
|
+
"",
|
|
78
|
+
"## Available MVP workflow",
|
|
69
79
|
"1. Create the event with its video source, then call `oko_configure_blocks` with `nmo.enabled:true`, watch-time and checkpoint criteria, and optional position/organization fields.",
|
|
70
80
|
"2. Add approved participants with `oko_add_nmo_participant` or bulk-import them with `oko_import_nmo_participants`. Inspect per-row import failures before continuing.",
|
|
71
81
|
"3. Return the event's registration and login links to participants. NMO access is gated by the imported participant list.",
|
|
@@ -79,7 +89,7 @@ const GUIDE_RESOURCES = [
|
|
|
79
89
|
"## After the webinar",
|
|
80
90
|
"1. End the analytics session only after explicit organizer confirmation.",
|
|
81
91
|
"2. Use `oko_get_session_report` or `oko_get_analytics` with NMO rows when detailed technical attendance results are needed.",
|
|
82
|
-
"3. Report watch-time and checkpoint results as technical OKO evidence. Do not promise an official credit
|
|
92
|
+
"3. Report watch-time and checkpoint results only as technical OKO evidence. Do not present the NMO mode as complete or promise an official credit, certificate, strict identity proof, or production readiness.",
|
|
83
93
|
].join("\n"),
|
|
84
94
|
},
|
|
85
95
|
{
|
|
@@ -181,7 +191,7 @@ const GUIDE_RESOURCES = [
|
|
|
181
191
|
"",
|
|
182
192
|
"## Webinar setup",
|
|
183
193
|
"- Create, duplicate, move, update, validate, and delete webinars.",
|
|
184
|
-
"- Configure forms, CTA, banner, cards, video placeholder, Telegram
|
|
194
|
+
"- Configure forms, CTA, banner, cards, video placeholder, and Telegram settings for standard webinars.",
|
|
185
195
|
"- Upload images from local paths, data URLs, or HTTPS URLs and wait for variants.",
|
|
186
196
|
"",
|
|
187
197
|
"## Live analytics",
|
|
@@ -192,7 +202,10 @@ const GUIDE_RESOURCES = [
|
|
|
192
202
|
"## Collaboration and comms",
|
|
193
203
|
"- Manage workspaces, members, invites, notifications, and Telegram post lifecycle.",
|
|
194
204
|
"- Send organizer chat messages and moderate chat users when scoped.",
|
|
195
|
-
"
|
|
205
|
+
"",
|
|
206
|
+
"## NMO special mode (unfinished MVP)",
|
|
207
|
+
"- Only after an explicit organizer request, configure NMO criteria, import/remove participants, run manual checkpoints, and read technical attendance evidence.",
|
|
208
|
+
"- Read `oko://guide/nmo` and disclose its current limitations before enabling or operating the mode.",
|
|
196
209
|
"",
|
|
197
210
|
"## Outside the MCP boundary",
|
|
198
211
|
"- OKO MCP does not host, encode, start, or stop the underlying video stream; configure that in the source player or encoder.",
|
|
@@ -237,10 +250,11 @@ export function registerGuides(server) {
|
|
|
237
250
|
"Required flow:",
|
|
238
251
|
"1. Call oko_whoami and verify scopes.",
|
|
239
252
|
"2. Create the webinar in the requested workspace if provided.",
|
|
240
|
-
"3. Configure metadata, blocks, forms, Telegram,
|
|
241
|
-
"4.
|
|
242
|
-
"5.
|
|
243
|
-
"6.
|
|
253
|
+
"3. Configure metadata, standard blocks, forms, Telegram, and cards as needed.",
|
|
254
|
+
"4. Do not enable NMO unless the brief explicitly requests the separate NMO MVP mode. If it does, read oko://guide/nmo and disclose the current limitations before any NMO write.",
|
|
255
|
+
"5. Upload images only after target slots/cards exist; wait for image variants.",
|
|
256
|
+
"6. Run oko_validate_event_setup and fix actionable errors.",
|
|
257
|
+
"7. Return public, setup, and analytics links; include NMO registration/login links only for an explicitly requested NMO event.",
|
|
244
258
|
"",
|
|
245
259
|
workspaceId ? `Workspace id: ${workspaceId}` : "Workspace id: not specified; choose the personal workspace unless the user clarifies.",
|
|
246
260
|
"",
|
|
@@ -261,8 +275,9 @@ export function registerGuides(server) {
|
|
|
261
275
|
"1. Call oko_whoami and verify scopes.",
|
|
262
276
|
"2. Call oko_get_event and oko_validate_event_setup.",
|
|
263
277
|
"3. If relevant, inspect live state, Telegram posts, participants, leads, and image variant readiness.",
|
|
264
|
-
"4.
|
|
265
|
-
"5.
|
|
278
|
+
"4. If nmoMode is enabled, read oko://guide/nmo and report the unfinished-mode limitations separately from setup findings.",
|
|
279
|
+
"5. Separate errors that block launch from warnings and polish suggestions.",
|
|
280
|
+
"6. Propose exact MCP tool calls needed to fix issues; execute only if the organizer asked for implementation.",
|
|
266
281
|
"",
|
|
267
282
|
focus ? `Focus: ${focus}` : "Focus: full setup readiness.",
|
|
268
283
|
].join("\n")));
|
package/dist/server.js
CHANGED