create-skybridge 0.0.0-dev.e0de4e3 → 0.0.0-dev.e0fef20
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 +2 -2
- package/template/README.md +18 -40
- package/template/node_modules/.bin/mcp-inspector +21 -0
- package/template/node_modules/.bin/sb +2 -2
- package/template/node_modules/.bin/skybridge +2 -2
- package/template/node_modules/.bin/vite +2 -2
- package/template/package.json +9 -9
- package/template/node_modules/.bin/alpic +0 -21
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-skybridge",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.e0fef20",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Alpic",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"typescript": "^5.9.3",
|
|
26
|
-
"vitest": "^4.0.
|
|
26
|
+
"vitest": "^4.0.17"
|
|
27
27
|
},
|
|
28
28
|
"scripts": {
|
|
29
29
|
"build": "tsc",
|
package/template/README.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Skybridge Starter
|
|
2
2
|
|
|
3
|
-
A minimal TypeScript template for building
|
|
3
|
+
A minimal TypeScript template for building ChatGPT and MCP Apps with widget rendering.
|
|
4
4
|
|
|
5
5
|
## Getting Started
|
|
6
6
|
|
|
7
7
|
### Prerequisites
|
|
8
8
|
|
|
9
9
|
- Node.js 24+
|
|
10
|
-
- HTTP tunnel such as [ngrok](https://ngrok.com/download)
|
|
10
|
+
- HTTP tunnel such as [ngrok](https://ngrok.com/download)
|
|
11
11
|
|
|
12
12
|
### Local Development
|
|
13
13
|
|
|
@@ -37,63 +37,41 @@ pnpm dev
|
|
|
37
37
|
bun dev
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
This command starts:
|
|
41
|
-
- Your MCP server at `http://localhost:3000/mcp`.
|
|
42
|
-
- Skybridge DevTools UI at `http://localhost:3000/`.
|
|
40
|
+
This command starts an Express server on port 3000. This server packages:
|
|
43
41
|
|
|
44
|
-
|
|
42
|
+
- an MCP endpoint on `/mcp` (the app backend)
|
|
43
|
+
- a React application on Vite HMR dev server (the UI elements to be displayed in the host)
|
|
45
44
|
|
|
45
|
+
#### 3. Connect to ChatGPT
|
|
46
|
+
|
|
47
|
+
- ChatGPT requires connectors to be publicly accessible. To expose your server on the Internet, run:
|
|
48
|
+
```bash
|
|
49
|
+
ngrok http 3000
|
|
46
50
|
```
|
|
47
|
-
|
|
48
|
-
│ └── src/
|
|
49
|
-
│ ├── index.ts # Entry point
|
|
50
|
-
│ ├── middleware.ts # MCP middleware
|
|
51
|
-
│ └── server.ts # Widget registry & routes
|
|
52
|
-
├── web/
|
|
53
|
-
│ ├── src/
|
|
54
|
-
│ │ ├── widgets/ # React components (one per widget)
|
|
55
|
-
│ │ ├── helpers.ts # Shared utilities
|
|
56
|
-
│ │ └── index.css # Global styles
|
|
57
|
-
│ └── vite.config.ts
|
|
58
|
-
├── alpic.json # Deployment config
|
|
59
|
-
├── nodemon.json # Dev server config
|
|
60
|
-
└── package.json
|
|
61
|
-
```
|
|
51
|
+
- In ChatGPT, navigate to **Settings → Connectors → Create** and add the forwarding URL provided by ngrok suffixed with `/mcp` (e.g. `https://3785c5ddc4b6.ngrok-free.app/mcp`)
|
|
62
52
|
|
|
63
53
|
### Create your first widget
|
|
64
54
|
|
|
65
55
|
#### 1. Add a new widget
|
|
66
56
|
|
|
67
|
-
- Register a widget in `server/
|
|
68
|
-
- Create a matching React component at `web/src/widgets/my-widget.tsx`.
|
|
57
|
+
- Register a widget in `server/server.ts` with a unique name (e.g., `my-widget`)
|
|
58
|
+
- Create a matching React component at `web/src/widgets/my-widget.tsx`. The file name must match the widget name exactly
|
|
69
59
|
|
|
70
60
|
#### 2. Edit widgets with Hot Module Replacement (HMR)
|
|
71
61
|
|
|
72
|
-
Edit and save components in `web/src/widgets/` — changes
|
|
62
|
+
Edit and save components in `web/src/widgets/` — changes appear instantly in the host
|
|
73
63
|
|
|
74
64
|
#### 3. Edit server code
|
|
75
65
|
|
|
76
|
-
Modify files in `server/` and
|
|
77
|
-
|
|
78
|
-
### Testing your App
|
|
79
|
-
|
|
80
|
-
You can test your App locally by using our DevTools UI on `localhost:3000` while running the `pnpm dev` command.
|
|
81
|
-
|
|
82
|
-
To test your app with other MCP Clients like ChatGPT, Claude or VSCode, see [Testing Your App](https://docs.skybridge.tech/quickstart/test-your-app).
|
|
83
|
-
|
|
66
|
+
Modify files in `server/` and reload your ChatGPT connector in **Settings → Connectors → [Your connector] → Reload**
|
|
84
67
|
|
|
85
68
|
## Deploy to Production
|
|
86
69
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
Deploy your app in minutes with [Alpic](https://alpic.ai/).
|
|
90
|
-
1. Create an account on [Alpic platform](https://app.alpic.ai/).
|
|
91
|
-
2. Connect your GitHub repository to automatically deploy at each commit.
|
|
92
|
-
3. Use your remote App URL to connect it to MCP Clients, or use the Alpic Playground to easily test your App.
|
|
70
|
+
- Use [Alpic](https://alpic.ai/) to deploy your OpenAI App to production
|
|
71
|
+
- In ChatGPT, navigate to **Settings → Connectors → Create** and add your MCP server URL (e.g., `https://your-app-name.alpic.live`)
|
|
93
72
|
|
|
94
73
|
## Resources
|
|
95
|
-
|
|
74
|
+
|
|
96
75
|
- [Apps SDK Documentation](https://developers.openai.com/apps-sdk)
|
|
97
|
-
- [MCP Apps Documentation](https://github.com/modelcontextprotocol/ext-apps/tree/main)
|
|
98
76
|
- [Model Context Protocol Documentation](https://modelcontextprotocol.io/)
|
|
99
77
|
- [Alpic Documentation](https://docs.alpic.ai/)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
+
|
|
4
|
+
case `uname` in
|
|
5
|
+
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
+
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
+
basedir=`cygpath -w "$basedir"`
|
|
8
|
+
fi
|
|
9
|
+
;;
|
|
10
|
+
esac
|
|
11
|
+
|
|
12
|
+
if [ -z "$NODE_PATH" ]; then
|
|
13
|
+
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@24.10.8_@types+react-dom@19.2.3_@typ_5968ed93e0f9cb52dedbe69b148b9d41/node_modules/@modelcontextprotocol/inspector/cli/build/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@24.10.8_@types+react-dom@19.2.3_@typ_5968ed93e0f9cb52dedbe69b148b9d41/node_modules/@modelcontextprotocol/inspector/cli/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@24.10.8_@types+react-dom@19.2.3_@typ_5968ed93e0f9cb52dedbe69b148b9d41/node_modules/@modelcontextprotocol/inspector/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@24.10.8_@types+react-dom@19.2.3_@typ_5968ed93e0f9cb52dedbe69b148b9d41/node_modules/@modelcontextprotocol/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@24.10.8_@types+react-dom@19.2.3_@typ_5968ed93e0f9cb52dedbe69b148b9d41/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules"
|
|
14
|
+
else
|
|
15
|
+
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@24.10.8_@types+react-dom@19.2.3_@typ_5968ed93e0f9cb52dedbe69b148b9d41/node_modules/@modelcontextprotocol/inspector/cli/build/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@24.10.8_@types+react-dom@19.2.3_@typ_5968ed93e0f9cb52dedbe69b148b9d41/node_modules/@modelcontextprotocol/inspector/cli/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@24.10.8_@types+react-dom@19.2.3_@typ_5968ed93e0f9cb52dedbe69b148b9d41/node_modules/@modelcontextprotocol/inspector/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@24.10.8_@types+react-dom@19.2.3_@typ_5968ed93e0f9cb52dedbe69b148b9d41/node_modules/@modelcontextprotocol/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/@modelcontextprotocol+inspector@0.18.0_@types+node@24.10.8_@types+react-dom@19.2.3_@typ_5968ed93e0f9cb52dedbe69b148b9d41/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
|
+
fi
|
|
17
|
+
if [ -x "$basedir/node" ]; then
|
|
18
|
+
exec "$basedir/node" "$basedir/../@modelcontextprotocol/inspector/cli/build/cli.js" "$@"
|
|
19
|
+
else
|
|
20
|
+
exec node "$basedir/../@modelcontextprotocol/inspector/cli/build/cli.js" "$@"
|
|
21
|
+
fi
|
|
@@ -10,9 +10,9 @@ case `uname` in
|
|
|
10
10
|
esac
|
|
11
11
|
|
|
12
12
|
if [ -z "$NODE_PATH" ]; then
|
|
13
|
-
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.
|
|
13
|
+
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.26.1_@modelcontextprotocol+sdk@1.25.2_hono@4.11.3_zod@4.3.5__@types+node@24_671cc373c6bb45b21f626579e808ae68/node_modules/skybridge/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.26.1_@modelcontextprotocol+sdk@1.25.2_hono@4.11.3_zod@4.3.5__@types+node@24_671cc373c6bb45b21f626579e808ae68/node_modules/skybridge/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.26.1_@modelcontextprotocol+sdk@1.25.2_hono@4.11.3_zod@4.3.5__@types+node@24_671cc373c6bb45b21f626579e808ae68/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules"
|
|
14
14
|
else
|
|
15
|
-
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.
|
|
15
|
+
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.26.1_@modelcontextprotocol+sdk@1.25.2_hono@4.11.3_zod@4.3.5__@types+node@24_671cc373c6bb45b21f626579e808ae68/node_modules/skybridge/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.26.1_@modelcontextprotocol+sdk@1.25.2_hono@4.11.3_zod@4.3.5__@types+node@24_671cc373c6bb45b21f626579e808ae68/node_modules/skybridge/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.26.1_@modelcontextprotocol+sdk@1.25.2_hono@4.11.3_zod@4.3.5__@types+node@24_671cc373c6bb45b21f626579e808ae68/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
16
|
fi
|
|
17
17
|
if [ -x "$basedir/node" ]; then
|
|
18
18
|
exec "$basedir/node" "$basedir/../skybridge/bin/run.js" "$@"
|
|
@@ -10,9 +10,9 @@ case `uname` in
|
|
|
10
10
|
esac
|
|
11
11
|
|
|
12
12
|
if [ -z "$NODE_PATH" ]; then
|
|
13
|
-
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.
|
|
13
|
+
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.26.1_@modelcontextprotocol+sdk@1.25.2_hono@4.11.3_zod@4.3.5__@types+node@24_671cc373c6bb45b21f626579e808ae68/node_modules/skybridge/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.26.1_@modelcontextprotocol+sdk@1.25.2_hono@4.11.3_zod@4.3.5__@types+node@24_671cc373c6bb45b21f626579e808ae68/node_modules/skybridge/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.26.1_@modelcontextprotocol+sdk@1.25.2_hono@4.11.3_zod@4.3.5__@types+node@24_671cc373c6bb45b21f626579e808ae68/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules"
|
|
14
14
|
else
|
|
15
|
-
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.
|
|
15
|
+
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.26.1_@modelcontextprotocol+sdk@1.25.2_hono@4.11.3_zod@4.3.5__@types+node@24_671cc373c6bb45b21f626579e808ae68/node_modules/skybridge/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.26.1_@modelcontextprotocol+sdk@1.25.2_hono@4.11.3_zod@4.3.5__@types+node@24_671cc373c6bb45b21f626579e808ae68/node_modules/skybridge/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/skybridge@0.26.1_@modelcontextprotocol+sdk@1.25.2_hono@4.11.3_zod@4.3.5__@types+node@24_671cc373c6bb45b21f626579e808ae68/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
16
|
fi
|
|
17
17
|
if [ -x "$basedir/node" ]; then
|
|
18
18
|
exec "$basedir/node" "$basedir/../skybridge/bin/run.js" "$@"
|
|
@@ -10,9 +10,9 @@ case `uname` in
|
|
|
10
10
|
esac
|
|
11
11
|
|
|
12
12
|
if [ -z "$NODE_PATH" ]; then
|
|
13
|
-
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/vite@7.3.1_@types+node@
|
|
13
|
+
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/vite@7.3.1_@types+node@24.10.8_jiti@2.6.1_lightningcss@1.30.2_terser@5.44.1_tsx@4.21.0_yaml@2.8.2/node_modules/vite/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/vite@7.3.1_@types+node@24.10.8_jiti@2.6.1_lightningcss@1.30.2_terser@5.44.1_tsx@4.21.0_yaml@2.8.2/node_modules/vite/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/vite@7.3.1_@types+node@24.10.8_jiti@2.6.1_lightningcss@1.30.2_terser@5.44.1_tsx@4.21.0_yaml@2.8.2/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules"
|
|
14
14
|
else
|
|
15
|
-
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/vite@7.3.1_@types+node@
|
|
15
|
+
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/vite@7.3.1_@types+node@24.10.8_jiti@2.6.1_lightningcss@1.30.2_terser@5.44.1_tsx@4.21.0_yaml@2.8.2/node_modules/vite/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/vite@7.3.1_@types+node@24.10.8_jiti@2.6.1_lightningcss@1.30.2_terser@5.44.1_tsx@4.21.0_yaml@2.8.2/node_modules/vite/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/vite@7.3.1_@types+node@24.10.8_jiti@2.6.1_lightningcss@1.30.2_terser@5.44.1_tsx@4.21.0_yaml@2.8.2/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
16
|
fi
|
|
17
17
|
if [ -x "$basedir/node" ]; then
|
|
18
18
|
exec "$basedir/node" "$basedir/../vite/bin/vite.js" "$@"
|
package/template/package.json
CHANGED
|
@@ -8,26 +8,26 @@
|
|
|
8
8
|
"dev": "skybridge dev",
|
|
9
9
|
"build": "skybridge build",
|
|
10
10
|
"start": "skybridge start",
|
|
11
|
-
"
|
|
11
|
+
"inspector": "mcp-inspector http://localhost:3000/mcp"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
15
|
-
"cors": "^2.8.
|
|
15
|
+
"cors": "^2.8.5",
|
|
16
16
|
"express": "^5.2.1",
|
|
17
|
-
"react": "^19.2.
|
|
18
|
-
"react-dom": "^19.2.
|
|
19
|
-
"skybridge": ">=0.
|
|
17
|
+
"react": "^19.2.3",
|
|
18
|
+
"react-dom": "^19.2.3",
|
|
19
|
+
"skybridge": ">=0.26.1 <1.0.0",
|
|
20
20
|
"vite": "^7.3.1",
|
|
21
|
-
"zod": "^4.3.
|
|
21
|
+
"zod": "^4.3.5"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
+
"@modelcontextprotocol/inspector": "^0.18.0",
|
|
24
25
|
"@skybridge/devtools": ">=0.26.1 <1.0.0",
|
|
25
26
|
"@types/cors": "^2.8.19",
|
|
26
27
|
"@types/express": "^5.0.6",
|
|
27
|
-
"@types/react": "^19.2.
|
|
28
|
+
"@types/react": "^19.2.8",
|
|
28
29
|
"@types/react-dom": "^19.2.3",
|
|
29
|
-
"@vitejs/plugin-react": "^5.1.
|
|
30
|
-
"alpic": "^1.84.3",
|
|
30
|
+
"@vitejs/plugin-react": "^5.1.2",
|
|
31
31
|
"nodemon": "^3.1.11",
|
|
32
32
|
"tsx": "^4.21.0",
|
|
33
33
|
"typescript": "^5.9.3"
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
-
|
|
4
|
-
case `uname` in
|
|
5
|
-
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
-
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
-
basedir=`cygpath -w "$basedir"`
|
|
8
|
-
fi
|
|
9
|
-
;;
|
|
10
|
-
esac
|
|
11
|
-
|
|
12
|
-
if [ -z "$NODE_PATH" ]; then
|
|
13
|
-
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/alpic@1.84.3/node_modules/alpic/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/alpic@1.84.3/node_modules/alpic/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/alpic@1.84.3/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules"
|
|
14
|
-
else
|
|
15
|
-
export NODE_PATH="/home/runner/work/skybridge/skybridge/node_modules/.pnpm/alpic@1.84.3/node_modules/alpic/bin/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/alpic@1.84.3/node_modules/alpic/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/alpic@1.84.3/node_modules:/home/runner/work/skybridge/skybridge/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
|
-
fi
|
|
17
|
-
if [ -x "$basedir/node" ]; then
|
|
18
|
-
exec "$basedir/node" "$basedir/../alpic/bin/run.js" "$@"
|
|
19
|
-
else
|
|
20
|
-
exec node "$basedir/../alpic/bin/run.js" "$@"
|
|
21
|
-
fi
|