nitrostack 1.0.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/CHANGELOG.md +227 -0
- package/CONTRIBUTING.md +182 -0
- package/LICENSE +201 -0
- package/LICENSE_URLS_UPDATE_COMPLETE.md +388 -0
- package/NOTICE +153 -0
- package/README.md +571 -0
- package/dist/auth/api-key.d.ts +118 -0
- package/dist/auth/api-key.d.ts.map +1 -0
- package/dist/auth/api-key.js +168 -0
- package/dist/auth/api-key.js.map +1 -0
- package/dist/auth/client.d.ts +151 -0
- package/dist/auth/client.d.ts.map +1 -0
- package/dist/auth/client.js +330 -0
- package/dist/auth/client.js.map +1 -0
- package/dist/auth/index.d.ts +30 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +43 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +95 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +260 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/pkce.d.ts +53 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +105 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/quick-setup.d.ts +94 -0
- package/dist/auth/quick-setup.d.ts.map +1 -0
- package/dist/auth/quick-setup.js +210 -0
- package/dist/auth/quick-setup.js.map +1 -0
- package/dist/auth/server-integration.d.ts +97 -0
- package/dist/auth/server-integration.d.ts.map +1 -0
- package/dist/auth/server-integration.js +182 -0
- package/dist/auth/server-integration.js.map +1 -0
- package/dist/auth/server-metadata.d.ts +51 -0
- package/dist/auth/server-metadata.d.ts.map +1 -0
- package/dist/auth/server-metadata.js +106 -0
- package/dist/auth/server-metadata.js.map +1 -0
- package/dist/auth/simple-jwt.d.ts +88 -0
- package/dist/auth/simple-jwt.d.ts.map +1 -0
- package/dist/auth/simple-jwt.js +152 -0
- package/dist/auth/simple-jwt.js.map +1 -0
- package/dist/auth/token-store.d.ts +104 -0
- package/dist/auth/token-store.d.ts.map +1 -0
- package/dist/auth/token-store.js +205 -0
- package/dist/auth/token-store.js.map +1 -0
- package/dist/auth/token-validation.d.ts +47 -0
- package/dist/auth/token-validation.d.ts.map +1 -0
- package/dist/auth/token-validation.js +237 -0
- package/dist/auth/token-validation.js.map +1 -0
- package/dist/auth/types.d.ts +215 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +6 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli/commands/build.d.ts +6 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +104 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +7 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +312 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/generate-types.d.ts +8 -0
- package/dist/cli/commands/generate-types.d.ts.map +1 -0
- package/dist/cli/commands/generate-types.js +220 -0
- package/dist/cli/commands/generate-types.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +5 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +365 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/init.d.ts +7 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +365 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/start.d.ts +6 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +61 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +47 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/mcp-dev-wrapper.d.ts +3 -0
- package/dist/cli/mcp-dev-wrapper.d.ts.map +1 -0
- package/dist/cli/mcp-dev-wrapper.js +116 -0
- package/dist/cli/mcp-dev-wrapper.js.map +1 -0
- package/dist/core/apikey-module.d.ts +69 -0
- package/dist/core/apikey-module.d.ts.map +1 -0
- package/dist/core/apikey-module.js +114 -0
- package/dist/core/apikey-module.js.map +1 -0
- package/dist/core/app-decorator.d.ts +58 -0
- package/dist/core/app-decorator.d.ts.map +1 -0
- package/dist/core/app-decorator.js +261 -0
- package/dist/core/app-decorator.js.map +1 -0
- package/dist/core/builders.d.ts +38 -0
- package/dist/core/builders.d.ts.map +1 -0
- package/dist/core/builders.js +129 -0
- package/dist/core/builders.js.map +1 -0
- package/dist/core/component.d.ts +105 -0
- package/dist/core/component.d.ts.map +1 -0
- package/dist/core/component.js +182 -0
- package/dist/core/component.js.map +1 -0
- package/dist/core/config-module.d.ts +55 -0
- package/dist/core/config-module.d.ts.map +1 -0
- package/dist/core/config-module.js +94 -0
- package/dist/core/config-module.js.map +1 -0
- package/dist/core/decorators/cache.decorator.d.ts +61 -0
- package/dist/core/decorators/cache.decorator.d.ts.map +1 -0
- package/dist/core/decorators/cache.decorator.js +115 -0
- package/dist/core/decorators/cache.decorator.js.map +1 -0
- package/dist/core/decorators/health-check.decorator.d.ts +80 -0
- package/dist/core/decorators/health-check.decorator.d.ts.map +1 -0
- package/dist/core/decorators/health-check.decorator.js +153 -0
- package/dist/core/decorators/health-check.decorator.js.map +1 -0
- package/dist/core/decorators/rate-limit.decorator.d.ts +62 -0
- package/dist/core/decorators/rate-limit.decorator.d.ts.map +1 -0
- package/dist/core/decorators/rate-limit.decorator.js +129 -0
- package/dist/core/decorators/rate-limit.decorator.js.map +1 -0
- package/dist/core/decorators.d.ts +151 -0
- package/dist/core/decorators.d.ts.map +1 -0
- package/dist/core/decorators.js +142 -0
- package/dist/core/decorators.js.map +1 -0
- package/dist/core/di/container.d.ts +42 -0
- package/dist/core/di/container.d.ts.map +1 -0
- package/dist/core/di/container.js +76 -0
- package/dist/core/di/container.js.map +1 -0
- package/dist/core/di/injectable.decorator.d.ts +35 -0
- package/dist/core/di/injectable.decorator.d.ts.map +1 -0
- package/dist/core/di/injectable.decorator.js +57 -0
- package/dist/core/di/injectable.decorator.js.map +1 -0
- package/dist/core/errors.d.ts +54 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +87 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/events/event-emitter.d.ts +50 -0
- package/dist/core/events/event-emitter.d.ts.map +1 -0
- package/dist/core/events/event-emitter.js +94 -0
- package/dist/core/events/event-emitter.js.map +1 -0
- package/dist/core/events/event.decorator.d.ts +48 -0
- package/dist/core/events/event.decorator.d.ts.map +1 -0
- package/dist/core/events/event.decorator.js +68 -0
- package/dist/core/events/event.decorator.js.map +1 -0
- package/dist/core/filters/exception-filter.decorator.d.ts +40 -0
- package/dist/core/filters/exception-filter.decorator.d.ts.map +1 -0
- package/dist/core/filters/exception-filter.decorator.js +54 -0
- package/dist/core/filters/exception-filter.decorator.js.map +1 -0
- package/dist/core/filters/exception-filter.interface.d.ts +30 -0
- package/dist/core/filters/exception-filter.interface.d.ts.map +1 -0
- package/dist/core/filters/exception-filter.interface.js +2 -0
- package/dist/core/filters/exception-filter.interface.js.map +1 -0
- package/dist/core/guards/apikey.guard.d.ts +22 -0
- package/dist/core/guards/apikey.guard.d.ts.map +1 -0
- package/dist/core/guards/apikey.guard.js +11 -0
- package/dist/core/guards/apikey.guard.js.map +1 -0
- package/dist/core/guards/guard.interface.d.ts +18 -0
- package/dist/core/guards/guard.interface.d.ts.map +1 -0
- package/dist/core/guards/guard.interface.js +2 -0
- package/dist/core/guards/guard.interface.js.map +1 -0
- package/dist/core/guards/jwt.guard.d.ts +18 -0
- package/dist/core/guards/jwt.guard.d.ts.map +1 -0
- package/dist/core/guards/jwt.guard.js +2 -0
- package/dist/core/guards/jwt.guard.js.map +1 -0
- package/dist/core/guards/oauth.guard.d.ts +35 -0
- package/dist/core/guards/oauth.guard.d.ts.map +1 -0
- package/dist/core/guards/oauth.guard.js +2 -0
- package/dist/core/guards/oauth.guard.js.map +1 -0
- package/dist/core/guards/use-guards.decorator.d.ts +25 -0
- package/dist/core/guards/use-guards.decorator.d.ts.map +1 -0
- package/dist/core/guards/use-guards.decorator.js +32 -0
- package/dist/core/guards/use-guards.decorator.js.map +1 -0
- package/dist/core/health/health-checks.resource.d.ts +14 -0
- package/dist/core/health/health-checks.resource.d.ts.map +1 -0
- package/dist/core/health/health-checks.resource.js +29 -0
- package/dist/core/health/health-checks.resource.js.map +1 -0
- package/dist/core/index.d.ts +55 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +57 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/interceptors/interceptor.decorator.d.ts +37 -0
- package/dist/core/interceptors/interceptor.decorator.d.ts.map +1 -0
- package/dist/core/interceptors/interceptor.decorator.js +51 -0
- package/dist/core/interceptors/interceptor.decorator.js.map +1 -0
- package/dist/core/interceptors/interceptor.interface.d.ts +31 -0
- package/dist/core/interceptors/interceptor.interface.d.ts.map +1 -0
- package/dist/core/interceptors/interceptor.interface.js +2 -0
- package/dist/core/interceptors/interceptor.interface.js.map +1 -0
- package/dist/core/jwt-module.d.ts +51 -0
- package/dist/core/jwt-module.d.ts.map +1 -0
- package/dist/core/jwt-module.js +52 -0
- package/dist/core/jwt-module.js.map +1 -0
- package/dist/core/logger.d.ts +18 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +51 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/middleware/middleware.decorator.d.ts +39 -0
- package/dist/core/middleware/middleware.decorator.d.ts.map +1 -0
- package/dist/core/middleware/middleware.decorator.js +53 -0
- package/dist/core/middleware/middleware.decorator.js.map +1 -0
- package/dist/core/middleware/middleware.interface.d.ts +29 -0
- package/dist/core/middleware/middleware.interface.d.ts.map +1 -0
- package/dist/core/middleware/middleware.interface.js +2 -0
- package/dist/core/middleware/middleware.interface.js.map +1 -0
- package/dist/core/module.d.ts +74 -0
- package/dist/core/module.d.ts.map +1 -0
- package/dist/core/module.js +82 -0
- package/dist/core/module.js.map +1 -0
- package/dist/core/oauth-module.d.ts +144 -0
- package/dist/core/oauth-module.d.ts.map +1 -0
- package/dist/core/oauth-module.js +190 -0
- package/dist/core/oauth-module.js.map +1 -0
- package/dist/core/pipes/pipe.decorator.d.ts +55 -0
- package/dist/core/pipes/pipe.decorator.d.ts.map +1 -0
- package/dist/core/pipes/pipe.decorator.js +85 -0
- package/dist/core/pipes/pipe.decorator.js.map +1 -0
- package/dist/core/pipes/pipe.interface.d.ts +36 -0
- package/dist/core/pipes/pipe.interface.d.ts.map +1 -0
- package/dist/core/pipes/pipe.interface.js +2 -0
- package/dist/core/pipes/pipe.interface.js.map +1 -0
- package/dist/core/prompt.d.ts +37 -0
- package/dist/core/prompt.d.ts.map +1 -0
- package/dist/core/prompt.js +76 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/resource.d.ts +42 -0
- package/dist/core/resource.d.ts.map +1 -0
- package/dist/core/resource.js +90 -0
- package/dist/core/resource.js.map +1 -0
- package/dist/core/server.d.ts +72 -0
- package/dist/core/server.d.ts.map +1 -0
- package/dist/core/server.js +406 -0
- package/dist/core/server.js.map +1 -0
- package/dist/core/tool.d.ts +78 -0
- package/dist/core/tool.d.ts.map +1 -0
- package/dist/core/tool.js +190 -0
- package/dist/core/tool.js.map +1 -0
- package/dist/core/transports/http-server.d.ts +102 -0
- package/dist/core/transports/http-server.d.ts.map +1 -0
- package/dist/core/transports/http-server.js +265 -0
- package/dist/core/transports/http-server.js.map +1 -0
- package/dist/core/types.d.ts +123 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/widgets/widget-examples.resource.d.ts +17 -0
- package/dist/core/widgets/widget-examples.resource.d.ts.map +1 -0
- package/dist/core/widgets/widget-examples.resource.js +28 -0
- package/dist/core/widgets/widget-examples.resource.js.map +1 -0
- package/dist/core/widgets/widget-registry.d.ts +56 -0
- package/dist/core/widgets/widget-registry.d.ts.map +1 -0
- package/dist/core/widgets/widget-registry.js +75 -0
- package/dist/core/widgets/widget-registry.js.map +1 -0
- package/dist/testing/index.d.ts +82 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +164 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/ui-next/index.d.ts +31 -0
- package/dist/ui-next/index.d.ts.map +1 -0
- package/dist/ui-next/index.js +687 -0
- package/dist/ui-next/index.js.map +1 -0
- package/dist/widgets/index.d.ts +9 -0
- package/dist/widgets/index.d.ts.map +1 -0
- package/dist/widgets/index.js +9 -0
- package/dist/widgets/index.js.map +1 -0
- package/dist/widgets/metadata.d.ts +53 -0
- package/dist/widgets/metadata.d.ts.map +1 -0
- package/dist/widgets/metadata.js +29 -0
- package/dist/widgets/metadata.js.map +1 -0
- package/dist/widgets/withToolData.d.ts +19 -0
- package/dist/widgets/withToolData.d.ts.map +1 -0
- package/dist/widgets/withToolData.js +240 -0
- package/dist/widgets/withToolData.js.map +1 -0
- package/jest.config.js +21 -0
- package/package.json +108 -0
- package/templates/typescript-auth/AI_AGENT_CLI_REFERENCE.md +702 -0
- package/templates/typescript-auth/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-auth/README.md +400 -0
- package/templates/typescript-auth/package.json +44 -0
- package/templates/typescript-auth-api-key/AI_AGENT_CLI_REFERENCE.md +701 -0
- package/templates/typescript-auth-api-key/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-auth-api-key/README.md +483 -0
- package/templates/typescript-auth-api-key/package-lock.json +124 -0
- package/templates/typescript-auth-api-key/package.json +29 -0
- package/templates/typescript-oauth/AI_AGENT_CLI_REFERENCE.md +701 -0
- package/templates/typescript-oauth/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-oauth/OAUTH_SETUP.md +406 -0
- package/templates/typescript-oauth/README.md +350 -0
- package/templates/typescript-oauth/package.json +30 -0
- package/templates/typescript-starter/AI_AGENT_CLI_REFERENCE.md +701 -0
- package/templates/typescript-starter/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-starter/README.md +312 -0
- package/templates/typescript-starter/package.json +32 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
# NitroStack Starter Template
|
|
2
|
+
|
|
3
|
+
**The simple starter template** - Learn NitroStack v3.0 fundamentals with a clean calculator example.
|
|
4
|
+
|
|
5
|
+
## 🎯 What's Inside
|
|
6
|
+
|
|
7
|
+
This template demonstrates core NitroStack v3.0 features:
|
|
8
|
+
|
|
9
|
+
- **One Module** - Calculator module with all features
|
|
10
|
+
- **One Tool** - `calculate` - Perform arithmetic operations
|
|
11
|
+
- **One Resource** - `calculator://operations` - List of operations
|
|
12
|
+
- **One Prompt** - `calculator_help` - Get usage help
|
|
13
|
+
- **Two Widgets** - Beautiful UI for results and operations list
|
|
14
|
+
- **No Authentication** - Focus on learning the basics
|
|
15
|
+
- **No Database** - Pure computation example
|
|
16
|
+
|
|
17
|
+
## 🚀 Quick Start
|
|
18
|
+
|
|
19
|
+
### Prerequisites
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# Install NitroStack CLI globally
|
|
23
|
+
npm install -g nitrostack
|
|
24
|
+
|
|
25
|
+
# Or use npx
|
|
26
|
+
npx nitrostack --version
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Setup Your Project
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
nitrostack init my-calculator --template typescript-starter
|
|
33
|
+
cd my-calculator
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
That's it! The CLI automatically:
|
|
37
|
+
- ✅ Installs all dependencies
|
|
38
|
+
- ✅ Installs widget dependencies
|
|
39
|
+
- ✅ Builds the widgets
|
|
40
|
+
- ✅ Sets up the project structure
|
|
41
|
+
|
|
42
|
+
### Run the Project
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm run dev
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
This starts:
|
|
49
|
+
- **MCP Server** (stdio mode) - Hot reloads on code changes
|
|
50
|
+
- **Studio** on http://localhost:3000 - Visual testing environment
|
|
51
|
+
- **Widget Dev Server** on http://localhost:3001 - Hot module replacement
|
|
52
|
+
|
|
53
|
+
The `nitrostack dev` command handles everything automatically:
|
|
54
|
+
- ✅ Auto-detects widget directory
|
|
55
|
+
- ✅ Installs dependencies (if needed)
|
|
56
|
+
- ✅ Builds widgets (on first run)
|
|
57
|
+
- ✅ Starts all services concurrently
|
|
58
|
+
- ✅ Hot reload for TypeScript and widgets
|
|
59
|
+
|
|
60
|
+
## 📁 Project Structure
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
src/
|
|
64
|
+
├── modules/
|
|
65
|
+
│ └── calculator/
|
|
66
|
+
│ ├── calculator.module.ts # @Module definition
|
|
67
|
+
│ ├── calculator.tools.ts # @Tool with examples
|
|
68
|
+
│ ├── calculator.resources.ts # @Resource
|
|
69
|
+
│ └── calculator.prompts.ts # @Prompt
|
|
70
|
+
├── widgets/ # Next.js UI widgets
|
|
71
|
+
│ └── app/
|
|
72
|
+
│ ├── calculator-result/ # Tool result widget
|
|
73
|
+
│ └── calculator-operations/ # Resource widget
|
|
74
|
+
├── app.module.ts # Root @McpApp module
|
|
75
|
+
└── index.ts # Application bootstrap
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## 🛠️ Available Features
|
|
79
|
+
|
|
80
|
+
### Health Check: `system`
|
|
81
|
+
|
|
82
|
+
Monitors server health and resources:
|
|
83
|
+
|
|
84
|
+
- **Uptime**: Server running time
|
|
85
|
+
- **Memory Usage**: Heap memory consumption
|
|
86
|
+
- **Process Info**: PID and Node.js version
|
|
87
|
+
- **Status**: `up`, `degraded`, or `down`
|
|
88
|
+
|
|
89
|
+
Check health status in Studio's Health Checks tab!
|
|
90
|
+
|
|
91
|
+
### Tool: `calculate`
|
|
92
|
+
|
|
93
|
+
Perform basic arithmetic operations:
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
@Tool({
|
|
97
|
+
name: 'calculate',
|
|
98
|
+
description: 'Perform basic arithmetic calculations',
|
|
99
|
+
inputSchema: z.object({
|
|
100
|
+
operation: z.enum(['add', 'subtract', 'multiply', 'divide']),
|
|
101
|
+
a: z.number(),
|
|
102
|
+
b: z.number()
|
|
103
|
+
}),
|
|
104
|
+
examples: {
|
|
105
|
+
request: { operation: 'add', a: 5, b: 3 },
|
|
106
|
+
response: { result: 8, expression: '5 + 3 = 8' }
|
|
107
|
+
}
|
|
108
|
+
})
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Usage:**
|
|
112
|
+
```
|
|
113
|
+
User: "Calculate 5 + 3"
|
|
114
|
+
AI: [Calls calculate tool]
|
|
115
|
+
Result: Beautiful widget showing "5 + 3 = 8"
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Resource: `calculator://operations`
|
|
119
|
+
|
|
120
|
+
Lists all available operations with examples.
|
|
121
|
+
|
|
122
|
+
### Prompt: `calculator_help`
|
|
123
|
+
|
|
124
|
+
Get help on how to use the calculator.
|
|
125
|
+
|
|
126
|
+
## 🎨 Widgets
|
|
127
|
+
|
|
128
|
+
### Calculator Result Widget
|
|
129
|
+
- Gradient background
|
|
130
|
+
- Operation icon
|
|
131
|
+
- Breakdown of numbers
|
|
132
|
+
- Beautiful animations
|
|
133
|
+
|
|
134
|
+
### Calculator Operations Widget
|
|
135
|
+
- Grid of all operations
|
|
136
|
+
- Color-coded by type
|
|
137
|
+
- Examples for each operation
|
|
138
|
+
|
|
139
|
+
## 💡 Learning Path
|
|
140
|
+
|
|
141
|
+
This template is perfect for learning:
|
|
142
|
+
|
|
143
|
+
1. **Module Organization** - How to structure a feature module
|
|
144
|
+
2. **Tools** - How to create a tool with `@Tool` decorator
|
|
145
|
+
3. **Resources** - How to expose data with `@Resource`
|
|
146
|
+
4. **Prompts** - How to create conversation templates
|
|
147
|
+
5. **Widgets** - How to build UI components
|
|
148
|
+
6. **Examples** - How to include request/response examples
|
|
149
|
+
7. **Validation** - How to use Zod schemas
|
|
150
|
+
|
|
151
|
+
## 🔧 Commands
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# Development
|
|
155
|
+
npm run dev # Start dev server with Studio (auto-builds everything)
|
|
156
|
+
npm run build # Build TypeScript and widgets for production
|
|
157
|
+
npm start # Run production server
|
|
158
|
+
|
|
159
|
+
# Widget Management
|
|
160
|
+
npm run widget <command> # Run npm command in widgets directory
|
|
161
|
+
npm run widget add <pkg> # Add a widget dependency (e.g., @mui/material)
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Note:** The NitroStack CLI automatically handles building, installing dependencies, and hot reload. You don't need separate commands for widgets anymore!
|
|
165
|
+
|
|
166
|
+
## 📝 Example Interactions
|
|
167
|
+
|
|
168
|
+
### Basic Calculation
|
|
169
|
+
```
|
|
170
|
+
User: "What's 12 times 8?"
|
|
171
|
+
AI: Calls calculate(operation="multiply", a=12, b=8)
|
|
172
|
+
Result: Widget showing "12 × 8 = 96"
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Get Help
|
|
176
|
+
```
|
|
177
|
+
User: "How do I use the calculator?"
|
|
178
|
+
AI: Uses calculator_help prompt
|
|
179
|
+
Result: Complete usage instructions
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### List Operations
|
|
183
|
+
```
|
|
184
|
+
User: "What operations are available?"
|
|
185
|
+
AI: Fetches calculator://operations resource
|
|
186
|
+
Result: Widget showing all 4 operations with examples
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## 🎓 Code Walkthrough
|
|
190
|
+
|
|
191
|
+
### 1. Tool Definition
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
@Tool({
|
|
195
|
+
name: 'calculate',
|
|
196
|
+
description: 'Perform basic arithmetic calculations',
|
|
197
|
+
inputSchema: z.object({...}),
|
|
198
|
+
examples: {...}
|
|
199
|
+
})
|
|
200
|
+
@Widget('calculator-result') // Link UI widget
|
|
201
|
+
async calculate(input: any, ctx: ExecutionContext) {
|
|
202
|
+
// Your logic here
|
|
203
|
+
return { result, expression };
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Key Points:**
|
|
208
|
+
- `@Tool` decorator defines the tool
|
|
209
|
+
- `inputSchema` validates input with Zod
|
|
210
|
+
- `examples` help AI understand usage
|
|
211
|
+
- `@Widget` links the UI component
|
|
212
|
+
- `ExecutionContext` provides logger, metadata
|
|
213
|
+
|
|
214
|
+
### 2. Resource Definition
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
@Resource({
|
|
218
|
+
uri: 'calculator://operations',
|
|
219
|
+
name: 'Calculator Operations',
|
|
220
|
+
mimeType: 'application/json',
|
|
221
|
+
examples: {...}
|
|
222
|
+
})
|
|
223
|
+
@Widget('calculator-operations')
|
|
224
|
+
async getOperations(uri: string, ctx: ExecutionContext) {
|
|
225
|
+
return { contents: [{...}] };
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### 3. Prompt Definition
|
|
230
|
+
|
|
231
|
+
```typescript
|
|
232
|
+
@Prompt({
|
|
233
|
+
name: 'calculator_help',
|
|
234
|
+
arguments: [...]
|
|
235
|
+
})
|
|
236
|
+
async getHelp(args: any, ctx: ExecutionContext) {
|
|
237
|
+
return { messages: [...] };
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### 4. Module Definition
|
|
242
|
+
|
|
243
|
+
```typescript
|
|
244
|
+
@Module({
|
|
245
|
+
name: 'calculator',
|
|
246
|
+
controllers: [CalculatorTools, CalculatorResources, CalculatorPrompts]
|
|
247
|
+
})
|
|
248
|
+
export class CalculatorModule {}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### 5. Root Module
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
@McpApp({
|
|
255
|
+
server: { name: 'calculator-server', version: '1.0.0' }
|
|
256
|
+
})
|
|
257
|
+
@Module({
|
|
258
|
+
imports: [ConfigModule.forRoot(), CalculatorModule]
|
|
259
|
+
})
|
|
260
|
+
export class AppModule {}
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## 🚀 Extend This Template
|
|
264
|
+
|
|
265
|
+
### Add More Operations
|
|
266
|
+
|
|
267
|
+
Edit `calculator.tools.ts` and add new operations to the enum and switch statement.
|
|
268
|
+
|
|
269
|
+
### Add History Feature
|
|
270
|
+
|
|
271
|
+
1. Create a service to store calculations
|
|
272
|
+
2. Add a `get_history` tool
|
|
273
|
+
3. Create a history widget
|
|
274
|
+
|
|
275
|
+
### Add More Modules
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
nitrostack generate module converter
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## 📚 Next Steps
|
|
282
|
+
|
|
283
|
+
Once you understand this template:
|
|
284
|
+
|
|
285
|
+
1. Try the [E-commerce Template](/templates/ecommerce) - Advanced features with auth
|
|
286
|
+
2. Read [Server Concepts](/sdk/typescript/server) - Deep dive into modules
|
|
287
|
+
3. Read [Tools Guide](/sdk/typescript/tools) - Advanced tool patterns
|
|
288
|
+
4. Read [Widgets Guide](/sdk/typescript/ui/widgets) - Build better UIs
|
|
289
|
+
|
|
290
|
+
## 💡 Tips
|
|
291
|
+
|
|
292
|
+
- **Keep it Simple** - This template shows the minimum needed
|
|
293
|
+
- **Study the Code** - Each file has clear examples
|
|
294
|
+
- **Test in Studio** - Use the chat to test your tools
|
|
295
|
+
- **Check Examples** - The `examples` field helps AI understand your tools
|
|
296
|
+
|
|
297
|
+
## 🎉 What to Build
|
|
298
|
+
|
|
299
|
+
Use this as a starting point for:
|
|
300
|
+
|
|
301
|
+
- **Unit Converters** - Temperature, currency, etc.
|
|
302
|
+
- **Text Tools** - String manipulation, formatting
|
|
303
|
+
- **Data Processors** - JSON, CSV, XML parsing
|
|
304
|
+
- **Simple APIs** - Weather, jokes, facts
|
|
305
|
+
- **Utilities** - Date/time, UUID generation
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
**Happy Learning! 📖**
|
|
310
|
+
|
|
311
|
+
Start simple, learn the patterns, then build something amazing!
|
|
312
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nitrostack-starter",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "NitroStack starter template with calculator example",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"dev": "nitrostack dev",
|
|
9
|
+
"build": "nitrostack build",
|
|
10
|
+
"start": "nitrostack start",
|
|
11
|
+
"widget": "npm --prefix src/widgets"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"mcp",
|
|
15
|
+
"nitrostack",
|
|
16
|
+
"starter",
|
|
17
|
+
"template",
|
|
18
|
+
"calculator"
|
|
19
|
+
],
|
|
20
|
+
"author": "",
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"nitrostack": "^1.0.0",
|
|
24
|
+
"zod": "^3.22.4",
|
|
25
|
+
"reflect-metadata": "^0.2.1"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^20.10.0",
|
|
29
|
+
"typescript": "^5.3.3"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|