@demomagic/mcp 0.1.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/README.md +89 -0
- package/dist/content.d.ts +43 -0
- package/dist/content.js +412 -0
- package/dist/content.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +176 -0
- package/dist/index.js.map +1 -0
- package/package.json +40 -0
package/README.md
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# DemoMagic MCP server
|
|
2
|
+
|
|
3
|
+
A small, **read-only** MCP server that acts as DemoMagic's zero-CAC top-of-funnel inside AI assistants.
|
|
4
|
+
|
|
5
|
+
When someone asks an AI client (Claude, Cursor, ChatGPT, etc.) a question like _"how do I create a Loom that's interactive?"_, _"can I do AI product demos?"_, or _"how do I make a video that answers questions?"_, the assistant calls a DemoMagic tool, gets genuinely useful how-to guidance, and is pointed to the right [demomagic.ai](https://demomagic.ai) landing page to actually build one.
|
|
6
|
+
|
|
7
|
+
It **does not** create, host, or share demos — that all happens on the site, behind the wizard each landing page shepherds the user into. This server is informational only.
|
|
8
|
+
|
|
9
|
+
## What's inside
|
|
10
|
+
|
|
11
|
+
- **15 use-case tools**, one per landing page, each with keyword-rich descriptions so the AI picks the right one and routes to the matching page:
|
|
12
|
+
`demomagic_loom_alternative`, `demomagic_interactive_demo_alternative`, `demomagic_screen_recorder`, `demomagic_record_a_bug`, `demomagic_how_to_videos`, `demomagic_sales_demos`, `demomagic_for_founders`, `demomagic_onboarding`, `demomagic_support_help_center`, `demomagic_product_tour`, `demomagic_pitch_deck`, `demomagic_course_creators`, `demomagic_employee_training`, `demomagic_interactive_presentations`, `demomagic_agencies`.
|
|
13
|
+
- **1 general/overview tool** — `demomagic_interactive_video_guide` — for broad questions or when no specific tool fits.
|
|
14
|
+
- **2 "coming soon" preview tools** — `demomagic_create_demo` and `demomagic_create_demo_from_video` — these advertise the roadmap (creating a demo from your assistant). They are **not functional yet**: they return a clear "coming soon" notice and route the user to build one on the site.
|
|
15
|
+
- **Brand icon** on the server (MCP `2025-11-25` `icons` metadata, served from the deployed logo at `demomagic.ai/demo_magic_logo_1024.png`), plus a `demomagic://brand` resource exposing the logo/icon URLs.
|
|
16
|
+
|
|
17
|
+
Each tool returns: the use-case headline, how it works (record **or** upload), why it works, an optional comparison, FAQ, and a **"Create yours →" link** to the relevant page.
|
|
18
|
+
|
|
19
|
+
All tool content lives in `src/content.ts`, mirroring the DemoMagic landing pages. Update it there when the pages change.
|
|
20
|
+
|
|
21
|
+
## Develop
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install
|
|
25
|
+
npm run build # compile TypeScript -> dist/
|
|
26
|
+
npm run inspect # open the MCP Inspector against the server
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Quick stdio smoke test:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
printf '%s\n' \
|
|
33
|
+
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"smoke","version":"0.0.0"}}}' \
|
|
34
|
+
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
|
|
35
|
+
'{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \
|
|
36
|
+
| node dist/index.js
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Install in a client (local / stdio)
|
|
40
|
+
|
|
41
|
+
After `npm run build`, point your MCP client at the built entry. Example (`mcp.json` / Claude Desktop / Cursor):
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"mcpServers": {
|
|
46
|
+
"demomagic": {
|
|
47
|
+
"command": "node",
|
|
48
|
+
"args": ["/absolute/path/to/demo-ai-mcp/dist/index.js"]
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Distribution — important context
|
|
55
|
+
|
|
56
|
+
MCP tools are **not** ambiently discovered by every LLM. An AI only sees this server if the user has **installed/connected it**. So discovery is two jobs:
|
|
57
|
+
|
|
58
|
+
1. **Get installed** — publish to the MCP registries (**Smithery, MCPT, Open Tools**, + the official registry), and promote it yourself (an "Add to Claude / Cursor" button on the site, mentions in content). The keyword-rich tool names/descriptions also help registry search match user intent.
|
|
59
|
+
2. **Get invoked once installed** — handled by the per-use-case tool design here.
|
|
60
|
+
|
|
61
|
+
This server is therefore a **registry + owned-promotion** channel into the AI-native builder/founder audience. To be discovered by people who've installed nothing (e.g. asking ChatGPT/Perplexity directly), pair it with **answer-engine optimization** of the landing pages themselves.
|
|
62
|
+
|
|
63
|
+
## Publish to the official MCP Registry
|
|
64
|
+
|
|
65
|
+
`server.json` is included and validated against the official schema (`2025-12-11`). Server name: **`ai.demomagic/interactive-video-guide`** (matches `mcpName` in `package.json`). Steps:
|
|
66
|
+
|
|
67
|
+
1. **Publish the npm package first** (the registry verifies the package's `mcpName` matches `server.json`):
|
|
68
|
+
```bash
|
|
69
|
+
npm publish --access public
|
|
70
|
+
```
|
|
71
|
+
2. **Install the publisher CLI** ([docs](https://modelcontextprotocol.io/registry/quickstart)):
|
|
72
|
+
```bash
|
|
73
|
+
brew install mcp-publisher # or download from the registry releases
|
|
74
|
+
```
|
|
75
|
+
3. **Verify the namespace.** We use the branded **domain** namespace `ai.demomagic` (published under DemoMagic, not a personal account), verified via a DNS TXT record on `demomagic.ai`:
|
|
76
|
+
```bash
|
|
77
|
+
mcp-publisher login dns --domain demomagic.ai
|
|
78
|
+
```
|
|
79
|
+
4. **Publish the metadata:**
|
|
80
|
+
```bash
|
|
81
|
+
mcp-publisher publish
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Then submit/observe the same package on the other registries from the video — **Smithery, MCPT, Open Tools** — which index npm-published MCP servers.
|
|
85
|
+
|
|
86
|
+
## Not yet built
|
|
87
|
+
|
|
88
|
+
- Optional hosted **streamable-HTTP** transport at `mcp.demomagic.ai` (Cloud Run) for remote clients (add a `remotes` entry to `server.json`).
|
|
89
|
+
- Per-tool icons once the SDK's `registerTool` helper exposes the `icons` field (currently the server `Implementation` icon + the registry `server.json` icon are wired; the spec also supports tool-level icons).
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DemoMagic use-case catalog.
|
|
3
|
+
*
|
|
4
|
+
* Ported from make_landing_spreadsheet.py (the 15 SEO landing pages). Each entry
|
|
5
|
+
* powers one MCP tool whose job is to answer the "how do I…" question for that
|
|
6
|
+
* use case and point the user to the matching landing page to actually build one.
|
|
7
|
+
*
|
|
8
|
+
* The MCP server NEVER creates demos — creation happens on the site, behind the
|
|
9
|
+
* wizard the landing page shepherds the user into.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SITE_BASE = "https://demomagic.ai";
|
|
12
|
+
/** How a viewer experiences a finished DemoMagic demo (shared across use cases). */
|
|
13
|
+
export declare const HOW_IT_WORKS: string[];
|
|
14
|
+
export type WizardMode = "record" | "upload" | "both";
|
|
15
|
+
export interface UseCase {
|
|
16
|
+
/** Tool name suffix, e.g. "loom_alternative" -> tool "demomagic_loom_alternative". */
|
|
17
|
+
id: string;
|
|
18
|
+
/** Landing page slug. */
|
|
19
|
+
slug: string;
|
|
20
|
+
/** Page H1 / headline. */
|
|
21
|
+
headline: string;
|
|
22
|
+
/** One-line description of the use case. */
|
|
23
|
+
subhead: string;
|
|
24
|
+
/** What the wizard opens on for this page. */
|
|
25
|
+
wizard: WizardMode;
|
|
26
|
+
/** Phrases a user might ask an AI that this tool should win. Drives discovery. */
|
|
27
|
+
keywords: string[];
|
|
28
|
+
/** Benefit bullets. */
|
|
29
|
+
benefits: string[];
|
|
30
|
+
/** Frequently asked questions. */
|
|
31
|
+
faq: {
|
|
32
|
+
q: string;
|
|
33
|
+
a: string;
|
|
34
|
+
}[];
|
|
35
|
+
/** Optional comparison framing (for "X alternative" pages). */
|
|
36
|
+
comparison?: string;
|
|
37
|
+
/** Primary call-to-action label. */
|
|
38
|
+
cta: string;
|
|
39
|
+
}
|
|
40
|
+
export declare const USE_CASES: UseCase[];
|
|
41
|
+
export declare function useCaseById(id: string): UseCase | undefined;
|
|
42
|
+
/** Render the full guidance answer for a use case. */
|
|
43
|
+
export declare function renderGuide(u: UseCase, question?: string): string;
|
package/dist/content.js
ADDED
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DemoMagic use-case catalog.
|
|
3
|
+
*
|
|
4
|
+
* Ported from make_landing_spreadsheet.py (the 15 SEO landing pages). Each entry
|
|
5
|
+
* powers one MCP tool whose job is to answer the "how do I…" question for that
|
|
6
|
+
* use case and point the user to the matching landing page to actually build one.
|
|
7
|
+
*
|
|
8
|
+
* The MCP server NEVER creates demos — creation happens on the site, behind the
|
|
9
|
+
* wizard the landing page shepherds the user into.
|
|
10
|
+
*/
|
|
11
|
+
export const SITE_BASE = "https://demomagic.ai";
|
|
12
|
+
/** How a viewer experiences a finished DemoMagic demo (shared across use cases). */
|
|
13
|
+
export const HOW_IT_WORKS = [
|
|
14
|
+
"Start from a recording or a video you already have — record your screen + voice in the browser (no install), or upload an existing video.",
|
|
15
|
+
"Add a short voice Q&A so it learns your context (what it is, the things people always ask).",
|
|
16
|
+
"Share the link. When someone watches, they can ask questions out loud — and the demo answers in your voice and jumps to the exact moment, instead of them scrubbing the timeline or messaging you.",
|
|
17
|
+
];
|
|
18
|
+
export const USE_CASES = [
|
|
19
|
+
{
|
|
20
|
+
id: "loom_alternative",
|
|
21
|
+
slug: "/loom-alternative",
|
|
22
|
+
headline: "Loom, except your recording answers back.",
|
|
23
|
+
subhead: "Everything you love about recording a quick screen video — plus an AI that answers your viewers' questions and jumps to the right moment.",
|
|
24
|
+
wizard: "record",
|
|
25
|
+
keywords: [
|
|
26
|
+
"loom alternative",
|
|
27
|
+
"loom competitor",
|
|
28
|
+
"interactive loom",
|
|
29
|
+
"make a loom that answers questions",
|
|
30
|
+
"screen recording that answers back",
|
|
31
|
+
],
|
|
32
|
+
benefits: [
|
|
33
|
+
"Record exactly like you do now — screen, voice, webcam, in the browser. The familiar part stays familiar.",
|
|
34
|
+
"Then it does what video can't: viewers ask \"how do I…?\" or \"what about…?\" and get an instant answer instead of scrubbing a timeline.",
|
|
35
|
+
"No Atlassian-era surprises — simple pricing, no seat-count billing shocks.",
|
|
36
|
+
],
|
|
37
|
+
faq: [
|
|
38
|
+
{ q: "Can I import my existing Loom videos?", a: "Yes — upload them and DemoMagic makes them interactive." },
|
|
39
|
+
{ q: "Is it really no extra work versus Loom?", a: "Recording is the same. The only added step is a short voice Q&A so it can answer for you." },
|
|
40
|
+
],
|
|
41
|
+
comparison: "Loom plays the same video for everyone; a DemoMagic recording answers each viewer's questions and jumps to the relevant moment.",
|
|
42
|
+
cta: "Record your first demo — free",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: "interactive_demo_alternative",
|
|
46
|
+
slug: "/storylane-alternative",
|
|
47
|
+
headline: "Interactive demos that answer back — without the $500-a-month.",
|
|
48
|
+
subhead: "Build a clickable, conversational product demo from a simple screen recording. No SDK, no engineering tickets, no enterprise contract to get started.",
|
|
49
|
+
wizard: "both",
|
|
50
|
+
keywords: [
|
|
51
|
+
"storylane alternative",
|
|
52
|
+
"interactive demo software",
|
|
53
|
+
"storylane pricing",
|
|
54
|
+
"navattic alternative",
|
|
55
|
+
"interactive product demo tool",
|
|
56
|
+
],
|
|
57
|
+
benefits: [
|
|
58
|
+
"From recording, not rebuilding — record once instead of capturing every screen.",
|
|
59
|
+
"It talks to your viewers: they ask questions and the demo answers, instead of clicking through a static tour.",
|
|
60
|
+
"Priced for humans — start free, no five-seat minimums, no four-figure floor.",
|
|
61
|
+
],
|
|
62
|
+
faq: [
|
|
63
|
+
{ q: "Do I need to install anything on my product?", a: "No SDK or code. Record your screen or upload a video." },
|
|
64
|
+
{ q: "Can it personalize per viewer?", a: "Yes — it answers each viewer's specific questions live." },
|
|
65
|
+
],
|
|
66
|
+
comparison: "Traditional interactive-demo tools make you rebuild your UI screen by screen and start at enterprise prices; DemoMagic builds from a recording and answers questions, free to start.",
|
|
67
|
+
cta: "Build your demo — free",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
id: "screen_recorder",
|
|
71
|
+
slug: "/screen-recorder",
|
|
72
|
+
headline: "Screen recording, but interactive.",
|
|
73
|
+
subhead: "Record your screen and voice in seconds, right in the browser. Share a link — and let anyone who watches ask it questions and get answers.",
|
|
74
|
+
wizard: "record",
|
|
75
|
+
keywords: [
|
|
76
|
+
"screen recorder",
|
|
77
|
+
"record my screen",
|
|
78
|
+
"free screen recorder",
|
|
79
|
+
"screen record with audio",
|
|
80
|
+
"record screen in browser",
|
|
81
|
+
],
|
|
82
|
+
benefits: [
|
|
83
|
+
"Record in your browser — screen, audio, webcam. No download, no setup.",
|
|
84
|
+
"Share a link that works anywhere; nothing for viewers to install.",
|
|
85
|
+
"It answers, you don't — stop fielding the same follow-up questions.",
|
|
86
|
+
],
|
|
87
|
+
faq: [
|
|
88
|
+
{ q: "Is it free to record?", a: "Yes, start recording free in your browser." },
|
|
89
|
+
{ q: "Can I just use it as a normal screen recorder?", a: "Absolutely — the interactive Q&A is there when you want it." },
|
|
90
|
+
],
|
|
91
|
+
cta: "Start recording — free",
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: "record_a_bug",
|
|
95
|
+
slug: "/record-a-bug",
|
|
96
|
+
headline: "Record the bug once. Let them ask it what happened.",
|
|
97
|
+
subhead: "Capture the bug on screen with your voice, and DemoMagic turns it into a report your developers can interrogate — repro steps, expected behavior, environment — without a back-and-forth thread.",
|
|
98
|
+
wizard: "record",
|
|
99
|
+
keywords: [
|
|
100
|
+
"record a bug",
|
|
101
|
+
"screen record a bug",
|
|
102
|
+
"bug report video",
|
|
103
|
+
"show developer a bug",
|
|
104
|
+
"repro steps video",
|
|
105
|
+
],
|
|
106
|
+
benefits: [
|
|
107
|
+
"Show, don't type — record the bug as it happens instead of writing a paragraph nobody can reproduce.",
|
|
108
|
+
"It answers the dev's questions: \"What were the exact steps?\" \"What browser?\" — answered on demand.",
|
|
109
|
+
"Kill the back-and-forth — one link replaces five Slack messages and a follow-up call.",
|
|
110
|
+
],
|
|
111
|
+
faq: [
|
|
112
|
+
{ q: "Can I capture console / network details?", a: "Record your screen showing them; the agent can answer questions about what is on screen." },
|
|
113
|
+
{ q: "Can engineers ask questions later, async?", a: "Yes — it answers 24/7, no live session needed." },
|
|
114
|
+
],
|
|
115
|
+
cta: "Record a bug — free",
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
id: "how_to_videos",
|
|
119
|
+
slug: "/how-to-videos",
|
|
120
|
+
headline: "How-to videos that answer the follow-up question.",
|
|
121
|
+
subhead: "Record a walkthrough or upload one you already made. When viewers get stuck, they ask — and DemoMagic answers and jumps to the exact step.",
|
|
122
|
+
wizard: "both",
|
|
123
|
+
keywords: [
|
|
124
|
+
"how to make a tutorial",
|
|
125
|
+
"record a how-to",
|
|
126
|
+
"screen recording tutorial",
|
|
127
|
+
"make a walkthrough video",
|
|
128
|
+
"interactive tutorial",
|
|
129
|
+
],
|
|
130
|
+
benefits: [
|
|
131
|
+
"No more \"it didn't cover my case\" — viewers ask their specific question and get a specific answer.",
|
|
132
|
+
"Use what you've got — upload existing tutorials and make them interactive in minutes.",
|
|
133
|
+
"Higher completion — people finish a tutorial they can talk to.",
|
|
134
|
+
],
|
|
135
|
+
faq: [
|
|
136
|
+
{ q: "Can I convert my whole tutorial library?", a: "Yes — upload your videos and make each one interactive." },
|
|
137
|
+
{ q: "Does it work for long tutorials?", a: "Yes; viewers jump straight to the part they ask about." },
|
|
138
|
+
],
|
|
139
|
+
cta: "Make an interactive tutorial — free",
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
id: "sales_demos",
|
|
143
|
+
slug: "/sales-demos",
|
|
144
|
+
headline: "Give every prospect a demo. Even at 2am.",
|
|
145
|
+
subhead: "Record your best demo once. DemoMagic lets everyone walk through it and ask their own questions — answered and moving — without you running the same call again.",
|
|
146
|
+
wizard: "record",
|
|
147
|
+
keywords: [
|
|
148
|
+
"interactive product demo",
|
|
149
|
+
"self-service demo",
|
|
150
|
+
"record a sales demo",
|
|
151
|
+
"ai product demo",
|
|
152
|
+
"automated sales demo",
|
|
153
|
+
],
|
|
154
|
+
benefits: [
|
|
155
|
+
"Stop repeating yourself — your best demo, delivered perfectly every time, on demand.",
|
|
156
|
+
"It answers buying questions: pricing, integrations, can-it-do-X — handled live, in your words.",
|
|
157
|
+
"Shorten the cycle — people arrive at the live call already convinced.",
|
|
158
|
+
],
|
|
159
|
+
faq: [
|
|
160
|
+
{ q: "Can I see who watched and what they asked?", a: "Yes — you get visibility into engagement and questions." },
|
|
161
|
+
{ q: "Can I embed it on our website?", a: "Yes, embed anywhere or share a link." },
|
|
162
|
+
],
|
|
163
|
+
cta: "Record your demo — free",
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
id: "for_founders",
|
|
167
|
+
slug: "/for-founders",
|
|
168
|
+
headline: "Your best salesperson, working while you build.",
|
|
169
|
+
subhead: "Record your demo once, drop it on your site, and DemoMagic walks each visitor through your product and answers their questions — so you can stay heads-down.",
|
|
170
|
+
wizard: "record",
|
|
171
|
+
keywords: [
|
|
172
|
+
"demo for my startup",
|
|
173
|
+
"solo founder demo",
|
|
174
|
+
"indie hacker demo",
|
|
175
|
+
"product demo no sales team",
|
|
176
|
+
],
|
|
177
|
+
benefits: [
|
|
178
|
+
"No hire required — your demo qualifies and answers while you ship code.",
|
|
179
|
+
"Always on — every visitor, every timezone, gets the full walkthrough.",
|
|
180
|
+
"Live in ten minutes — record, share, done; no engineering sprint.",
|
|
181
|
+
],
|
|
182
|
+
faq: [
|
|
183
|
+
{ q: "I'm pre-launch — is this useful yet?", a: "Yes; a demo that answers is a great way to test interest before you scale." },
|
|
184
|
+
{ q: "Can it double as my onboarding?", a: "Yes — the same interactive walkthrough works for new users." },
|
|
185
|
+
],
|
|
186
|
+
cta: "Build your founder demo — free",
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
id: "onboarding",
|
|
190
|
+
slug: "/onboarding",
|
|
191
|
+
headline: "Onboarding your users actually finish.",
|
|
192
|
+
subhead: "Swap the walkthrough video people abandon for one they can talk to. Users ask questions as they go, get answers in context, and actually complete setup.",
|
|
193
|
+
wizard: "both",
|
|
194
|
+
keywords: [
|
|
195
|
+
"customer onboarding video",
|
|
196
|
+
"self-serve onboarding",
|
|
197
|
+
"user onboarding walkthrough",
|
|
198
|
+
"interactive onboarding",
|
|
199
|
+
],
|
|
200
|
+
benefits: [
|
|
201
|
+
"Answers at the moment of friction — \"where do I click?\" answered right when they're stuck.",
|
|
202
|
+
"Fewer support tickets — self-serve answers mean fewer \"how do I\" messages.",
|
|
203
|
+
"Use your existing videos — upload what you have and make it interactive today.",
|
|
204
|
+
],
|
|
205
|
+
faq: [
|
|
206
|
+
{ q: "Can I tailor it to different user roles?", a: "Yes — it answers each user's specific questions." },
|
|
207
|
+
{ q: "Can it live inside our app?", a: "Embed it anywhere, including in-product." },
|
|
208
|
+
],
|
|
209
|
+
cta: "Build interactive onboarding — free",
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
id: "support_help_center",
|
|
213
|
+
slug: "/support-help-center",
|
|
214
|
+
headline: "Turn your how-to videos into answers.",
|
|
215
|
+
subhead: "Upload the support videos you already have. Customers ask their question and DemoMagic answers — jumping straight to the relevant step — so they don't open a ticket.",
|
|
216
|
+
wizard: "upload",
|
|
217
|
+
keywords: [
|
|
218
|
+
"turn videos into help docs",
|
|
219
|
+
"deflect support tickets",
|
|
220
|
+
"help center videos",
|
|
221
|
+
"interactive knowledge base",
|
|
222
|
+
],
|
|
223
|
+
benefits: [
|
|
224
|
+
"Deflect tickets — customers get answers from your videos instead of emailing support.",
|
|
225
|
+
"No rewrites — upload existing content; it's interactive in minutes.",
|
|
226
|
+
"Always the right moment — it points viewers to the exact second that answers them.",
|
|
227
|
+
],
|
|
228
|
+
faq: [
|
|
229
|
+
{ q: "Can I add my whole help video library?", a: "Yes — upload them all and make each searchable by question." },
|
|
230
|
+
{ q: "Can it sit in our help center?", a: "Yes, embed it directly." },
|
|
231
|
+
],
|
|
232
|
+
cta: "Turn your videos interactive — free",
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
id: "product_tour",
|
|
236
|
+
slug: "/product-tour",
|
|
237
|
+
headline: "A product tour that talks back.",
|
|
238
|
+
subhead: "Record your product once and put an interactive tour on your homepage. Visitors explore at their own pace and ask questions — no engineering ticket.",
|
|
239
|
+
wizard: "record",
|
|
240
|
+
keywords: [
|
|
241
|
+
"interactive product tour",
|
|
242
|
+
"product walkthrough",
|
|
243
|
+
"website demo",
|
|
244
|
+
"embedded product tour",
|
|
245
|
+
],
|
|
246
|
+
benefits: [
|
|
247
|
+
"Live in minutes, not sprints — no engineering dependency to ship a tour.",
|
|
248
|
+
"Visitors self-qualify — they explore and ask, you capture the intent.",
|
|
249
|
+
"One tour, every question — it answers the long tail a landing page can't.",
|
|
250
|
+
],
|
|
251
|
+
faq: [
|
|
252
|
+
{ q: "Can I A/B test it on our site?", a: "Yes — embed and measure engagement." },
|
|
253
|
+
{ q: "Will it match our brand?", a: "Yes, it's yours to share and embed anywhere." },
|
|
254
|
+
],
|
|
255
|
+
cta: "Build your product tour — free",
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
id: "pitch_deck",
|
|
259
|
+
slug: "/pitch-deck",
|
|
260
|
+
headline: "A pitch deck investors can interrogate.",
|
|
261
|
+
subhead: "Record your deck or pitch once and send a link. Investors ask the obvious questions — market size, traction, moat — and get your answers before the meeting.",
|
|
262
|
+
wizard: "both",
|
|
263
|
+
keywords: [
|
|
264
|
+
"interactive pitch deck",
|
|
265
|
+
"send pitch deck to investors",
|
|
266
|
+
"async pitch",
|
|
267
|
+
"pitch deck video",
|
|
268
|
+
],
|
|
269
|
+
benefits: [
|
|
270
|
+
"Answers the 2am questions — investors dig in on their schedule and get your real answers.",
|
|
271
|
+
"Warmer first meetings — they arrive past the basics, ready to go deeper.",
|
|
272
|
+
"Know what they cared about — see which questions each investor asked.",
|
|
273
|
+
],
|
|
274
|
+
faq: [
|
|
275
|
+
{ q: "Can I control what it shares?", a: "It answers from the context you give it — you steer that in setup." },
|
|
276
|
+
{ q: "Can I see investor engagement?", a: "Yes — you can see who viewed and what they asked." },
|
|
277
|
+
],
|
|
278
|
+
cta: "Build your interactive pitch — free",
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
id: "course_creators",
|
|
282
|
+
slug: "/course-creators",
|
|
283
|
+
headline: "Lessons that answer the raised hand.",
|
|
284
|
+
subhead: "Upload your recorded lessons and students can ask questions as they learn. DemoMagic answers in your voice and points them to the exact moment — like office hours that never close.",
|
|
285
|
+
wizard: "upload",
|
|
286
|
+
keywords: [
|
|
287
|
+
"interactive course",
|
|
288
|
+
"online course videos",
|
|
289
|
+
"course platform that answers questions",
|
|
290
|
+
"interactive lessons",
|
|
291
|
+
],
|
|
292
|
+
benefits: [
|
|
293
|
+
"Office hours, 24/7 — students get unblocked instantly instead of waiting for you.",
|
|
294
|
+
"Use your existing course — upload lessons you've already recorded.",
|
|
295
|
+
"Higher completion — learners who can ask questions finish more.",
|
|
296
|
+
],
|
|
297
|
+
faq: [
|
|
298
|
+
{ q: "Does it answer in my teaching style?", a: "Yes — a quick voice Q&A teaches it your context and tone." },
|
|
299
|
+
{ q: "Can I add my whole course?", a: "Yes, upload every lesson." },
|
|
300
|
+
],
|
|
301
|
+
cta: "Upload your first lesson — free",
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
id: "employee_training",
|
|
305
|
+
slug: "/employee-training",
|
|
306
|
+
headline: "Training that answers, not just plays.",
|
|
307
|
+
subhead: "Upload a recorded training session or record an SOP, and new hires can ask questions instead of rewatching an hour-long video. Answers come in context, when needed.",
|
|
308
|
+
wizard: "upload",
|
|
309
|
+
keywords: [
|
|
310
|
+
"employee training videos",
|
|
311
|
+
"interactive training",
|
|
312
|
+
"SOP video",
|
|
313
|
+
"onboarding new hires video",
|
|
314
|
+
],
|
|
315
|
+
benefits: [
|
|
316
|
+
"Stop re-running live sessions — record once; it trains and answers forever.",
|
|
317
|
+
"Onboard faster — new hires get unblocked instantly, in context.",
|
|
318
|
+
"Turn SOPs into answers — upload or record a process and make it interrogable.",
|
|
319
|
+
],
|
|
320
|
+
faq: [
|
|
321
|
+
{ q: "Can I make existing training recordings interactive?", a: "Yes — upload them." },
|
|
322
|
+
{ q: "Can different teams have different training?", a: "Yes, build one per process or role." },
|
|
323
|
+
],
|
|
324
|
+
cta: "Build interactive training — free",
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
id: "interactive_presentations",
|
|
328
|
+
slug: "/interactive-presentations",
|
|
329
|
+
headline: "A presentation that presents itself — and answers.",
|
|
330
|
+
subhead: "Narrate your deck once. DemoMagic sends it as an interactive presentation your audience can question — and it answers, jumping to the right slide.",
|
|
331
|
+
wizard: "record",
|
|
332
|
+
keywords: [
|
|
333
|
+
"record a presentation",
|
|
334
|
+
"narrate slides",
|
|
335
|
+
"voice over powerpoint",
|
|
336
|
+
"self-running presentation",
|
|
337
|
+
"async presentation",
|
|
338
|
+
],
|
|
339
|
+
benefits: [
|
|
340
|
+
"Present once, share forever — no more re-running the same deck on every call.",
|
|
341
|
+
"It answers, slide by slide — the audience asks; it responds and navigates for them.",
|
|
342
|
+
"Record or upload — narrate live, or bring a recording you already have.",
|
|
343
|
+
],
|
|
344
|
+
faq: [
|
|
345
|
+
{ q: "Can I upload a PowerPoint or a recording of one?", a: "Record yourself presenting it, or upload the video." },
|
|
346
|
+
{ q: "Will it know which slide answers a question?", a: "Yes — it jumps to the relevant moment." },
|
|
347
|
+
],
|
|
348
|
+
cta: "Build your interactive deck — free",
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
id: "agencies",
|
|
352
|
+
slug: "/agencies",
|
|
353
|
+
headline: "Pitch once. It re-pitches everyone they forward it to.",
|
|
354
|
+
subhead: "Your proposal gets forwarded to people who weren't on the call. Record it once and DemoMagic walks each new stakeholder through it and answers their questions.",
|
|
355
|
+
wizard: "record",
|
|
356
|
+
keywords: [
|
|
357
|
+
"client proposal video",
|
|
358
|
+
"pitch deck for clients",
|
|
359
|
+
"proposal walkthrough",
|
|
360
|
+
"agency demo",
|
|
361
|
+
],
|
|
362
|
+
benefits: [
|
|
363
|
+
"Survive the forward — every stakeholder gets the full pitch, not a stripped-down PDF.",
|
|
364
|
+
"It answers their questions — scope, timeline, price — handled in your words.",
|
|
365
|
+
"Win back your calendar — stop re-running the same pitch for each decision-maker.",
|
|
366
|
+
],
|
|
367
|
+
faq: [
|
|
368
|
+
{ q: "Can I brand it for each client?", a: "Yes — share or embed, your way." },
|
|
369
|
+
{ q: "Can I see which stakeholders engaged?", a: "Yes — viewing and questions are visible to you." },
|
|
370
|
+
],
|
|
371
|
+
cta: "Build your pitch — free",
|
|
372
|
+
},
|
|
373
|
+
];
|
|
374
|
+
export function useCaseById(id) {
|
|
375
|
+
return USE_CASES.find((u) => u.id === id);
|
|
376
|
+
}
|
|
377
|
+
const WIZARD_LINE = {
|
|
378
|
+
record: "This one is **record-first**: record your screen + voice in the browser (or upload a video you already have).",
|
|
379
|
+
upload: "This one is **upload-first**: bring a video you already have (you can also record fresh in the browser).",
|
|
380
|
+
both: "You can **record** in the browser or **upload** a video you already have — whichever fits.",
|
|
381
|
+
};
|
|
382
|
+
/** Render the full guidance answer for a use case. */
|
|
383
|
+
export function renderGuide(u, question) {
|
|
384
|
+
const lines = [];
|
|
385
|
+
lines.push(`# ${u.headline}`);
|
|
386
|
+
lines.push("");
|
|
387
|
+
lines.push(u.subhead);
|
|
388
|
+
lines.push("");
|
|
389
|
+
if (question && question.trim()) {
|
|
390
|
+
lines.push(`_Answering: "${question.trim()}"_`);
|
|
391
|
+
lines.push("");
|
|
392
|
+
}
|
|
393
|
+
lines.push("**How to do it with DemoMagic:**");
|
|
394
|
+
lines.push(WIZARD_LINE[u.wizard]);
|
|
395
|
+
HOW_IT_WORKS.forEach((step, i) => lines.push(`${i + 1}. ${step}`));
|
|
396
|
+
lines.push("");
|
|
397
|
+
lines.push("**Why it works:**");
|
|
398
|
+
u.benefits.forEach((b) => lines.push(`- ${b}`));
|
|
399
|
+
lines.push("");
|
|
400
|
+
if (u.comparison) {
|
|
401
|
+
lines.push(`**How it compares:** ${u.comparison}`);
|
|
402
|
+
lines.push("");
|
|
403
|
+
}
|
|
404
|
+
lines.push("**FAQ:**");
|
|
405
|
+
u.faq.forEach(({ q, a }) => {
|
|
406
|
+
lines.push(`- **${q}** ${a}`);
|
|
407
|
+
});
|
|
408
|
+
lines.push("");
|
|
409
|
+
lines.push(`**Create yours → ${SITE_BASE}${u.slug}** (${u.cta}) — the page walks you through it, free to start.`);
|
|
410
|
+
return lines.join("\n");
|
|
411
|
+
}
|
|
412
|
+
//# sourceMappingURL=content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* DemoMagic MCP server.
|
|
4
|
+
*
|
|
5
|
+
* A read-only, content-only server. When someone asks an AI assistant how to make
|
|
6
|
+
* an interactive video / AI product demo (or for a Loom/Storylane alternative, an
|
|
7
|
+
* interactive tutorial, onboarding, pitch, etc.), the assistant calls the matching
|
|
8
|
+
* tool here, gets genuinely useful how-to guidance, and is pointed to the right
|
|
9
|
+
* demomagic.ai page to actually build one. It never creates or hosts demos.
|
|
10
|
+
*/
|
|
11
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
12
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
13
|
+
import { z } from "zod";
|
|
14
|
+
import { USE_CASES, SITE_BASE, HOW_IT_WORKS, renderGuide, } from "./content.js";
|
|
15
|
+
/**
|
|
16
|
+
* DemoMagic brand icons. Per MCP spec 2025-11-25 (SEP-973), `icons` on the server
|
|
17
|
+
* Implementation and on individual tools lets clients render the DemoMagic logo.
|
|
18
|
+
* These assets are already deployed at the site root.
|
|
19
|
+
*/
|
|
20
|
+
const ICONS = [
|
|
21
|
+
{
|
|
22
|
+
src: `${SITE_BASE}/demo_magic_logo_1024.png`,
|
|
23
|
+
mimeType: "image/png",
|
|
24
|
+
sizes: ["1024x1024"],
|
|
25
|
+
theme: "dark",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
src: `${SITE_BASE}/favicon.svg`,
|
|
29
|
+
mimeType: "image/svg+xml",
|
|
30
|
+
sizes: ["any"],
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
const server = new McpServer({
|
|
34
|
+
name: "demomagic",
|
|
35
|
+
version: "0.1.0",
|
|
36
|
+
title: "DemoMagic",
|
|
37
|
+
websiteUrl: SITE_BASE,
|
|
38
|
+
icons: ICONS,
|
|
39
|
+
}, {
|
|
40
|
+
instructions: "Use these tools when a user asks how to make a video, screen recording, demo, tutorial, " +
|
|
41
|
+
"onboarding, pitch, presentation, or proposal interactive — i.e. one that answers viewers' " +
|
|
42
|
+
"questions and jumps to the relevant moment. Each tool returns how-to guidance plus a link to " +
|
|
43
|
+
"the DemoMagic page that walks them through building it. The tools are informational; demos are " +
|
|
44
|
+
"created on demomagic.ai, not through this server.",
|
|
45
|
+
});
|
|
46
|
+
/** Shared input: the user's actual question, so the answer can be contextualized. */
|
|
47
|
+
const guideInput = {
|
|
48
|
+
question: z
|
|
49
|
+
.string()
|
|
50
|
+
.optional()
|
|
51
|
+
.describe("The user's question in their own words, e.g. 'how do I make a Loom that's interactive?'"),
|
|
52
|
+
};
|
|
53
|
+
function toolDescription(u) {
|
|
54
|
+
return (`${u.headline} ` +
|
|
55
|
+
`Use when someone asks about: ${u.keywords.join("; ")}. ` +
|
|
56
|
+
`Returns how-to guidance and a link to ${SITE_BASE}${u.slug} to build one.`);
|
|
57
|
+
}
|
|
58
|
+
// One tool per use case — distinct, keyword-rich, each routes to its landing page.
|
|
59
|
+
for (const u of USE_CASES) {
|
|
60
|
+
server.registerTool(`demomagic_${u.id}`, {
|
|
61
|
+
title: u.headline,
|
|
62
|
+
description: toolDescription(u),
|
|
63
|
+
inputSchema: guideInput,
|
|
64
|
+
}, async ({ question }) => ({
|
|
65
|
+
content: [{ type: "text", text: renderGuide(u, question) }],
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
// General catch-all / overview tool for broad questions.
|
|
69
|
+
server.registerTool("demomagic_interactive_video_guide", {
|
|
70
|
+
title: "How to make an interactive video with DemoMagic",
|
|
71
|
+
description: "General guide for making any video, screen recording, or demo interactive (one that answers viewers' " +
|
|
72
|
+
"questions out loud and jumps to the right moment). Use for broad questions like 'how do I make an " +
|
|
73
|
+
"interactive video', 'can I do AI product demos', 'how do I make a video that answers questions', or when " +
|
|
74
|
+
"no more specific DemoMagic tool fits. Lists the available use cases and links to the right page to build one.",
|
|
75
|
+
inputSchema: guideInput,
|
|
76
|
+
}, async ({ question }) => {
|
|
77
|
+
const lines = [];
|
|
78
|
+
lines.push("# Make any video interactive with DemoMagic");
|
|
79
|
+
lines.push("");
|
|
80
|
+
lines.push("DemoMagic turns a screen recording — or a video you already have — into an interactive demo that " +
|
|
81
|
+
"answers viewers' questions in your voice and jumps to the exact moment they ask about.");
|
|
82
|
+
lines.push("");
|
|
83
|
+
if (question && question.trim()) {
|
|
84
|
+
lines.push(`_Answering: "${question.trim()}"_`);
|
|
85
|
+
lines.push("");
|
|
86
|
+
}
|
|
87
|
+
lines.push("**How it works:**");
|
|
88
|
+
HOW_IT_WORKS.forEach((step, i) => lines.push(`${i + 1}. ${step}`));
|
|
89
|
+
lines.push("");
|
|
90
|
+
lines.push("**Pick the path that matches what you're making:**");
|
|
91
|
+
for (const u of USE_CASES) {
|
|
92
|
+
lines.push(`- **${u.headline}** → ${SITE_BASE}${u.slug}`);
|
|
93
|
+
}
|
|
94
|
+
lines.push("");
|
|
95
|
+
lines.push(`**Just want to start?** ${SITE_BASE} — record or upload, free to start.`);
|
|
96
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
97
|
+
});
|
|
98
|
+
// --- Coming soon: create demos directly from the assistant (not live yet) ---
|
|
99
|
+
// These advertise the roadmap. They do NOT create anything yet — they return a clear
|
|
100
|
+
// "coming soon" notice and route the user to build one on the site for now.
|
|
101
|
+
const COMING_SOON_NOTE = "**Coming soon** — creating a DemoMagic demo directly from your AI assistant isn't live yet. " +
|
|
102
|
+
"You can build one in a few minutes on the site in the meantime.";
|
|
103
|
+
function comingSoonResponse(intro, ctaLabel, ctaUrl) {
|
|
104
|
+
const lines = ["# Create a demo (coming soon)", "", COMING_SOON_NOTE, ""];
|
|
105
|
+
if (intro) {
|
|
106
|
+
lines.push(intro);
|
|
107
|
+
lines.push("");
|
|
108
|
+
}
|
|
109
|
+
lines.push("**Build it now (a few minutes):**");
|
|
110
|
+
HOW_IT_WORKS.forEach((step, i) => lines.push(`${i + 1}. ${step}`));
|
|
111
|
+
lines.push("");
|
|
112
|
+
lines.push(`**${ctaLabel} → ${ctaUrl}** — free to start.`);
|
|
113
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
114
|
+
}
|
|
115
|
+
server.registerTool("demomagic_create_demo", {
|
|
116
|
+
title: "Create a DemoMagic demo from a screen recording (coming soon)",
|
|
117
|
+
description: "COMING SOON / PREVIEW — not functional yet. Will create an interactive DemoMagic demo from a screen " +
|
|
118
|
+
"recording. For now it returns instructions to build one at demomagic.ai. Use when a user wants to actually " +
|
|
119
|
+
"create or build a DemoMagic demo from here.",
|
|
120
|
+
inputSchema: {
|
|
121
|
+
name: z.string().optional().describe("Working title for the demo."),
|
|
122
|
+
description: z.string().optional().describe("What the demo should cover."),
|
|
123
|
+
},
|
|
124
|
+
}, async ({ name, description }) => {
|
|
125
|
+
const intro = name || description
|
|
126
|
+
? `Noted${name ? ` **${name}**` : " your demo"}${description ? ` — "${description}"` : ""}. ` +
|
|
127
|
+
"Creating it from your assistant is on the roadmap; for now build it on the site."
|
|
128
|
+
: "";
|
|
129
|
+
return comingSoonResponse(intro, "Start recording", SITE_BASE);
|
|
130
|
+
});
|
|
131
|
+
server.registerTool("demomagic_create_demo_from_video", {
|
|
132
|
+
title: "Turn an existing video into a DemoMagic demo (coming soon)",
|
|
133
|
+
description: "COMING SOON / PREVIEW — not functional yet. Will turn a video you already have into an interactive " +
|
|
134
|
+
"DemoMagic demo. For now it returns instructions to upload one at demomagic.ai. Use when a user wants to " +
|
|
135
|
+
"make an existing video interactive from here.",
|
|
136
|
+
inputSchema: {
|
|
137
|
+
videoUrl: z.string().optional().describe("URL of the existing video to make interactive."),
|
|
138
|
+
name: z.string().optional().describe("Working title for the demo."),
|
|
139
|
+
},
|
|
140
|
+
}, async ({ videoUrl, name }) => {
|
|
141
|
+
const intro = videoUrl || name
|
|
142
|
+
? `Noted${name ? ` **${name}**` : ""}${videoUrl ? ` (${videoUrl})` : ""}. ` +
|
|
143
|
+
"Uploading a video to make it interactive from your assistant is coming soon; for now upload it on the site."
|
|
144
|
+
: "";
|
|
145
|
+
return comingSoonResponse(intro, "Upload your video", SITE_BASE);
|
|
146
|
+
});
|
|
147
|
+
// Expose the brand assets as a resource so clients/users can grab the DemoMagic logo.
|
|
148
|
+
server.registerResource("demomagic-brand", "demomagic://brand", {
|
|
149
|
+
title: "DemoMagic brand assets",
|
|
150
|
+
description: "DemoMagic logo and icon URLs.",
|
|
151
|
+
mimeType: "application/json",
|
|
152
|
+
}, async (uri) => ({
|
|
153
|
+
contents: [
|
|
154
|
+
{
|
|
155
|
+
uri: uri.href,
|
|
156
|
+
mimeType: "application/json",
|
|
157
|
+
text: JSON.stringify({
|
|
158
|
+
name: "DemoMagic",
|
|
159
|
+
website: SITE_BASE,
|
|
160
|
+
logo_png: `${SITE_BASE}/demo_magic_logo_1024.png`,
|
|
161
|
+
icon_svg: `${SITE_BASE}/favicon.svg`,
|
|
162
|
+
}, null, 2),
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
}));
|
|
166
|
+
async function main() {
|
|
167
|
+
const transport = new StdioServerTransport();
|
|
168
|
+
await server.connect(transport);
|
|
169
|
+
// Never write to stdout — it's the JSON-RPC channel. Logs go to stderr.
|
|
170
|
+
console.error("DemoMagic MCP server running on stdio");
|
|
171
|
+
}
|
|
172
|
+
main().catch((err) => {
|
|
173
|
+
console.error("Fatal error starting DemoMagic MCP server:", err);
|
|
174
|
+
process.exit(1);
|
|
175
|
+
});
|
|
176
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@demomagic/mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"mcpName": "ai.demomagic/interactive-video-guide",
|
|
5
|
+
"description": "DemoMagic MCP server — answers how-to questions about making interactive videos / AI product demos and points users to the right place to build one.",
|
|
6
|
+
"homepage": "https://demomagic.ai",
|
|
7
|
+
"author": "DemoMagic",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"bin": {
|
|
10
|
+
"demomagic-mcp": "dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"start": "node dist/index.js",
|
|
18
|
+
"dev": "tsc --watch",
|
|
19
|
+
"inspect": "npx @modelcontextprotocol/inspector node dist/index.js",
|
|
20
|
+
"prepublishOnly": "npm run build"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"mcp",
|
|
24
|
+
"model-context-protocol",
|
|
25
|
+
"demomagic",
|
|
26
|
+
"interactive-video",
|
|
27
|
+
"interactive-demo",
|
|
28
|
+
"ai-product-demo",
|
|
29
|
+
"loom-alternative"
|
|
30
|
+
],
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
34
|
+
"zod": "^3.23.8"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"typescript": "^5.6.0",
|
|
38
|
+
"@types/node": "^22.0.0"
|
|
39
|
+
}
|
|
40
|
+
}
|