You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .oxlintrc.json
+19-1Lines changed: 19 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -10,9 +10,27 @@
10
10
"react/react-in-jsx-scope": "off",
11
11
"import/no-unassigned-import": "off",
12
12
"unicorn/no-array-sort": "off",
13
-
"copilotkit/require-cpk-prefix": "off"
13
+
"copilotkit/require-cpk-prefix": "off",
14
+
"no-restricted-imports": "off"
14
15
},
15
16
"overrides": [
17
+
{
18
+
"files": ["packages/**/*.{ts,tsx}"],
19
+
"rules": {
20
+
"no-restricted-imports": [
21
+
"error",
22
+
{
23
+
"paths": [
24
+
{
25
+
"name": "@a2ui/lit",
26
+
"message": "Do not use value imports from '@a2ui/lit' — it registers custom elements as a side effect, which breaks React Strict Mode. Use `import type` for types, or import from '@a2ui/lit/0.8' for value access (core only, no UI side effects).",
This monorepo demonstrates **MCP Apps** with **CopilotKit**: the **MCP App builder** web UI (`apps/web`) drives a **Mastra** agent (`/api/mastra-agent`) that can provision **E2B** sandboxes running the **`mcp-use-server`** template (`apps/mcp-use-server`). An optional local sample is the [Three.js MCP example](https://github.com/modelcontextprotocol/ext-apps/tree/main/examples/threejs-server) in **`apps/threejs-server`** (used for sidebar defaults when running everything locally).
|`pnpm build`| Runs **`prebuild`** → **`pack-download-kit`** (writes **`.download-kit/base.tar.gz`** for [full app kit](docs/HANDOFF.md) download), then **`next build`**|
57
+
|`pnpm pack-download-kit`| Regenerate **`.download-kit/base.tar.gz`** without a full Next build|
58
+
|`pnpm start`| Production Next server|
59
+
|`pnpm lint`| ESLint|
60
+
|`pnpm run test:download-kit`| Integration test: Next + E2B + **`POST /api/workspace/download`** (see **`apps/web/test/`)**|
61
+
|`pnpm run test:e2b-download`| Smoke test: E2B tarball only |
62
+
|`pnpm run dev:mcp`| Starts the **Three.js** sample MCP from **`apps/threejs-server`** (for local MCP alongside web)|
63
63
64
64
Manual scripts under **`apps/web/test/`**: run from **`apps/web`** as `node test/<file>.mjs` (paths and env documented in each file).
65
65
66
66
### E2B sandbox template (`apps/mcp-use-server`)
67
67
68
68
The agent provisions sandboxes from an E2B **template** defined in **`template.ts`**. Rebuild the image when you change dependencies, tools, or widgets there.
69
69
70
-
| Script | When to use | Command (from repo root) |
|**Prod template** (`mcp-use-server`) | Stable snapshot for production |`cd apps/mcp-use-server && npx tsx --env-file=../../.env build.prod.ts`|
74
74
75
75
Requirements: **`E2B_API_KEY`** in `.env` (or environment). The CLI prints a **`BuildInfo`** object; set **`E2B_TEMPLATE`** to **`templateId`** from that output (and the same in your hosting dashboard). Template **name** (e.g. `mcp-use-server-dev`) is not the same as **`templateId`**.
|`E2B_API_KEY`| From [e2b.dev/dashboard](https://e2b.dev/dashboard)|
112
+
|`E2B_TEMPLATE`|**`templateId`** from `Template.build` output after **`build.dev.ts`** / **`build.prod.ts`**|
113
113
|`E2B_REPO_URL`| Used when **`E2B_TEMPLATE`** is empty — clones repo into sandbox (slower cold start). Default in code: **`mcp-use-server-template`** GitHub URL |
114
114
115
115
## Hosting on Render
@@ -129,19 +129,19 @@ Widget tools should include **`_meta["ui/previewData"]`** for offline sidebar pr
Copy file name to clipboardExpand all lines: examples/showcases/open-mcp-client/apps/mcp-use-server/.agent/skills/chatgpt-app-builder/references/architecture.md
+61-39Lines changed: 61 additions & 39 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,7 @@ Design UX flows and API shape for your ChatGPT app.
7
7
A **tool** is a backend action with no UI. It takes input and returns structured output. Use for CRUD operations, API calls, and actions (checkout, submit, cancel).
8
8
9
9
A **widget** is a tool with a UI. It renders the tool output visually. The UI is a React component that can:
0 commit comments