@mcp-rune/create 0.11.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/LICENSE +21 -0
- package/README.md +184 -0
- package/bin/rune.js +7 -0
- package/dist/commands/add-model.d.ts +5 -0
- package/dist/commands/add-model.d.ts.map +1 -0
- package/dist/commands/add-model.js +131 -0
- package/dist/commands/add-model.js.map +1 -0
- package/dist/commands/db-up.d.ts +2 -0
- package/dist/commands/db-up.d.ts.map +1 -0
- package/dist/commands/db-up.js +29 -0
- package/dist/commands/db-up.js.map +1 -0
- package/dist/commands/doctor/env-checks.d.ts +4 -0
- package/dist/commands/doctor/env-checks.d.ts.map +1 -0
- package/dist/commands/doctor/env-checks.js +88 -0
- package/dist/commands/doctor/env-checks.js.map +1 -0
- package/dist/commands/doctor/index.d.ts +21 -0
- package/dist/commands/doctor/index.d.ts.map +1 -0
- package/dist/commands/doctor/index.js +44 -0
- package/dist/commands/doctor/index.js.map +1 -0
- package/dist/commands/doctor/project-validation.d.ts +5 -0
- package/dist/commands/doctor/project-validation.d.ts.map +1 -0
- package/dist/commands/doctor/project-validation.js +166 -0
- package/dist/commands/doctor/project-validation.js.map +1 -0
- package/dist/commands/doctor.d.ts +7 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +306 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/inspect.d.ts +16 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +66 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/new/actions/apps.d.ts +5 -0
- package/dist/commands/new/actions/apps.d.ts.map +1 -0
- package/dist/commands/new/actions/apps.js +51 -0
- package/dist/commands/new/actions/apps.js.map +1 -0
- package/dist/commands/new/actions/architecture.d.ts +5 -0
- package/dist/commands/new/actions/architecture.d.ts.map +1 -0
- package/dist/commands/new/actions/architecture.js +45 -0
- package/dist/commands/new/actions/architecture.js.map +1 -0
- package/dist/commands/new/actions/auth.d.ts +5 -0
- package/dist/commands/new/actions/auth.d.ts.map +1 -0
- package/dist/commands/new/actions/auth.js +30 -0
- package/dist/commands/new/actions/auth.js.map +1 -0
- package/dist/commands/new/actions/database.d.ts +5 -0
- package/dist/commands/new/actions/database.d.ts.map +1 -0
- package/dist/commands/new/actions/database.js +60 -0
- package/dist/commands/new/actions/database.js.map +1 -0
- package/dist/commands/new/actions/fetch-template.d.ts +5 -0
- package/dist/commands/new/actions/fetch-template.d.ts.map +1 -0
- package/dist/commands/new/actions/fetch-template.js +22 -0
- package/dist/commands/new/actions/fetch-template.js.map +1 -0
- package/dist/commands/new/actions/intro.d.ts +5 -0
- package/dist/commands/new/actions/intro.d.ts.map +1 -0
- package/dist/commands/new/actions/intro.js +7 -0
- package/dist/commands/new/actions/intro.js.map +1 -0
- package/dist/commands/new/actions/layers.d.ts +5 -0
- package/dist/commands/new/actions/layers.d.ts.map +1 -0
- package/dist/commands/new/actions/layers.js +38 -0
- package/dist/commands/new/actions/layers.js.map +1 -0
- package/dist/commands/new/actions/models.d.ts +5 -0
- package/dist/commands/new/actions/models.d.ts.map +1 -0
- package/dist/commands/new/actions/models.js +18 -0
- package/dist/commands/new/actions/models.js.map +1 -0
- package/dist/commands/new/actions/next-steps.d.ts +5 -0
- package/dist/commands/new/actions/next-steps.d.ts.map +1 -0
- package/dist/commands/new/actions/next-steps.js +38 -0
- package/dist/commands/new/actions/next-steps.js.map +1 -0
- package/dist/commands/new/actions/observability.d.ts +5 -0
- package/dist/commands/new/actions/observability.d.ts.map +1 -0
- package/dist/commands/new/actions/observability.js +45 -0
- package/dist/commands/new/actions/observability.js.map +1 -0
- package/dist/commands/new/actions/post-scaffold.d.ts +5 -0
- package/dist/commands/new/actions/post-scaffold.d.ts.map +1 -0
- package/dist/commands/new/actions/post-scaffold.js +81 -0
- package/dist/commands/new/actions/post-scaffold.js.map +1 -0
- package/dist/commands/new/actions/preset.d.ts +5 -0
- package/dist/commands/new/actions/preset.d.ts.map +1 -0
- package/dist/commands/new/actions/preset.js +23 -0
- package/dist/commands/new/actions/preset.js.map +1 -0
- package/dist/commands/new/actions/prompts.d.ts +5 -0
- package/dist/commands/new/actions/prompts.d.ts.map +1 -0
- package/dist/commands/new/actions/prompts.js +33 -0
- package/dist/commands/new/actions/prompts.js.map +1 -0
- package/dist/commands/new/actions/render.d.ts +5 -0
- package/dist/commands/new/actions/render.d.ts.map +1 -0
- package/dist/commands/new/actions/render.js +35 -0
- package/dist/commands/new/actions/render.js.map +1 -0
- package/dist/commands/new/actions/scaffold-header.d.ts +5 -0
- package/dist/commands/new/actions/scaffold-header.d.ts.map +1 -0
- package/dist/commands/new/actions/scaffold-header.js +19 -0
- package/dist/commands/new/actions/scaffold-header.js.map +1 -0
- package/dist/commands/new/actions/scaffold-mode.d.ts +5 -0
- package/dist/commands/new/actions/scaffold-mode.d.ts.map +1 -0
- package/dist/commands/new/actions/scaffold-mode.js +49 -0
- package/dist/commands/new/actions/scaffold-mode.js.map +1 -0
- package/dist/commands/new/actions/summary.d.ts +5 -0
- package/dist/commands/new/actions/summary.d.ts.map +1 -0
- package/dist/commands/new/actions/summary.js +71 -0
- package/dist/commands/new/actions/summary.js.map +1 -0
- package/dist/commands/new/actions/toggles.d.ts +5 -0
- package/dist/commands/new/actions/toggles.d.ts.map +1 -0
- package/dist/commands/new/actions/toggles.js +25 -0
- package/dist/commands/new/actions/toggles.js.map +1 -0
- package/dist/commands/new/actions/tools.d.ts +5 -0
- package/dist/commands/new/actions/tools.d.ts.map +1 -0
- package/dist/commands/new/actions/tools.js +36 -0
- package/dist/commands/new/actions/tools.js.map +1 -0
- package/dist/commands/new/actions/transport.d.ts +5 -0
- package/dist/commands/new/actions/transport.d.ts.map +1 -0
- package/dist/commands/new/actions/transport.js +24 -0
- package/dist/commands/new/actions/transport.js.map +1 -0
- package/dist/commands/new/context.d.ts +76 -0
- package/dist/commands/new/context.d.ts.map +1 -0
- package/dist/commands/new/context.js +134 -0
- package/dist/commands/new/context.js.map +1 -0
- package/dist/commands/new/index.d.ts +5 -0
- package/dist/commands/new/index.d.ts.map +1 -0
- package/dist/commands/new/index.js +18 -0
- package/dist/commands/new/index.js.map +1 -0
- package/dist/commands/new/pipeline.d.ts +12 -0
- package/dist/commands/new/pipeline.d.ts.map +1 -0
- package/dist/commands/new/pipeline.js +67 -0
- package/dist/commands/new/pipeline.js.map +1 -0
- package/dist/commands/new/presets.d.ts +40 -0
- package/dist/commands/new/presets.d.ts.map +1 -0
- package/dist/commands/new/presets.js +91 -0
- package/dist/commands/new/presets.js.map +1 -0
- package/dist/commands/new.d.ts +24 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +162 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/post-scaffold.d.ts +6 -0
- package/dist/commands/post-scaffold.d.ts.map +1 -0
- package/dist/commands/post-scaffold.js +24 -0
- package/dist/commands/post-scaffold.js.map +1 -0
- package/dist/core/cancel.d.ts +3 -0
- package/dist/core/cancel.d.ts.map +1 -0
- package/dist/core/cancel.js +17 -0
- package/dist/core/cancel.js.map +1 -0
- package/dist/core/color.d.ts +12 -0
- package/dist/core/color.d.ts.map +1 -0
- package/dist/core/color.js +14 -0
- package/dist/core/color.js.map +1 -0
- package/dist/core/db-setup.d.ts +13 -0
- package/dist/core/db-setup.d.ts.map +1 -0
- package/dist/core/db-setup.js +63 -0
- package/dist/core/db-setup.js.map +1 -0
- package/dist/core/fs-utils.d.ts +4 -0
- package/dist/core/fs-utils.d.ts.map +1 -0
- package/dist/core/fs-utils.js +31 -0
- package/dist/core/fs-utils.js.map +1 -0
- package/dist/core/output.d.ts +19 -0
- package/dist/core/output.d.ts.map +1 -0
- package/dist/core/output.js +42 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/prompts.d.ts +2 -0
- package/dist/core/prompts.d.ts.map +1 -0
- package/dist/core/prompts.js +2 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/tasks.d.ts +11 -0
- package/dist/core/tasks.d.ts.map +1 -0
- package/dist/core/tasks.js +28 -0
- package/dist/core/tasks.js.map +1 -0
- package/dist/data/mascot.d.ts +13 -0
- package/dist/data/mascot.d.ts.map +1 -0
- package/dist/data/mascot.js +80 -0
- package/dist/data/mascot.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -0
- package/dist/render/copy-tree.d.ts +5 -0
- package/dist/render/copy-tree.d.ts.map +1 -0
- package/dist/render/copy-tree.js +146 -0
- package/dist/render/copy-tree.js.map +1 -0
- package/dist/render/fetch-template.d.ts +9 -0
- package/dist/render/fetch-template.d.ts.map +1 -0
- package/dist/render/fetch-template.js +113 -0
- package/dist/render/fetch-template.js.map +1 -0
- package/dist/render/model-gen.d.ts +3 -0
- package/dist/render/model-gen.d.ts.map +1 -0
- package/dist/render/model-gen.js +23 -0
- package/dist/render/model-gen.js.map +1 -0
- package/dist/templates/registry.d.ts +14 -0
- package/dist/templates/registry.d.ts.map +1 -0
- package/dist/templates/registry.js +34 -0
- package/dist/templates/registry.js.map +1 -0
- package/dist/types.d.ts +87 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/wizard/presets.d.ts +35 -0
- package/dist/wizard/presets.d.ts.map +1 -0
- package/dist/wizard/presets.js +67 -0
- package/dist/wizard/presets.js.map +1 -0
- package/dist/wizard/questions.d.ts +11 -0
- package/dist/wizard/questions.d.ts.map +1 -0
- package/dist/wizard/questions.js +154 -0
- package/dist/wizard/questions.js.map +1 -0
- package/package.json +52 -0
- package/templates/advanced/.env.example.ejs +82 -0
- package/templates/advanced/.node-version +1 -0
- package/templates/advanced/README.md.ejs +76 -0
- package/templates/advanced/__only_if_hasHttp__/src/servers/remote.ts.ejs +36 -0
- package/templates/advanced/__only_if_hasStdio__/src/servers/local.ts +30 -0
- package/templates/advanced/__only_if_useAxiosClient__/src/api/axios-client.ts +74 -0
- package/templates/advanced/__only_if_useCustomApiClient__/src/api/custom-client.ts +48 -0
- package/templates/advanced/__only_if_useCustomConvention__/src/conventions/custom-convention.ts +64 -0
- package/templates/advanced/__only_if_useCustomSearch__/src/api-extensions/custom-search-adapter.ts +30 -0
- package/templates/advanced/__only_if_useFetchClient__/src/api/fetch-client.ts +111 -0
- package/templates/advanced/__only_if_useFlatRestConvention__/src/conventions/flat-rest-convention.ts +85 -0
- package/templates/advanced/__only_if_usePinoLogger__/src/observability/logger.ts +62 -0
- package/templates/advanced/__only_if_useRansackSearch__/src/api-extensions/ransack-search-adapter.ts +41 -0
- package/templates/advanced/__only_if_useSharedModelAttrs__/src/models/app-base-model.ts +22 -0
- package/templates/advanced/__only_if_useVectorStorage__/src/storage/vector-store.ts +21 -0
- package/templates/advanced/__only_if_withAnalysis__/docker-compose.yml +18 -0
- package/templates/advanced/__only_if_withDomain__/src/domain/registry.ts +25 -0
- package/templates/advanced/config/schema.ts.ejs +126 -0
- package/templates/advanced/package.json.ejs +50 -0
- package/templates/advanced/src/config.ts.ejs +207 -0
- package/templates/advanced/src/db.ts.ejs +35 -0
- package/templates/advanced/src/models/_model_.ts.ejs +25 -0
- package/templates/advanced/src/models/index.ts.ejs +13 -0
- package/templates/advanced/src/profiles.ts +44 -0
- package/templates/advanced/src/prompts/_model_-prompt.ts.ejs +27 -0
- package/templates/advanced/src/prompts/index.ts.ejs +18 -0
- package/templates/advanced/src/scripts/db-migrate.ts +90 -0
- package/templates/advanced/src/tools/index.ts.ejs +133 -0
- package/templates/advanced/test/smoke.test.ts +16 -0
- package/templates/advanced/tsconfig.json +14 -0
- package/templates/simple/.env.example +3 -0
- package/templates/simple/.node-version +1 -0
- package/templates/simple/README.md +40 -0
- package/templates/simple/package.json.ejs +27 -0
- package/templates/simple/src/config.ts.ejs +56 -0
- package/templates/simple/src/models/_model_.ts.ejs +25 -0
- package/templates/simple/src/models/index.ts.ejs +13 -0
- package/templates/simple/src/prompts/_model_-prompt.ts.ejs +27 -0
- package/templates/simple/src/prompts/index.ts.ejs +18 -0
- package/templates/simple/src/server.ts +12 -0
- package/templates/simple/test/smoke.test.ts +16 -0
- package/templates/simple/tsconfig.json +14 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "<%= projectName %>",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server scaffolded with @mcp-rune/create",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"private": true,
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": "<%= nodeEngine %>"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"start": "tsx src/server.ts",
|
|
12
|
+
"start:local": "tsx src/server.ts",
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"typecheck": "tsc --noEmit",
|
|
15
|
+
"test": "vitest run",
|
|
16
|
+
"inspect": "mcp-rune inspect"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@mcp-rune/mcp-rune": "<%= mcpRuneVersion %>"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@types/node": "^24.0.0",
|
|
23
|
+
"tsx": "^4.22.3",
|
|
24
|
+
"typescript": "^5.9.3",
|
|
25
|
+
"vitest": "^4.1.7"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { ApiClient } from '@mcp-rune/mcp-rune/core'
|
|
2
|
+
import { createServer } from '@mcp-rune/mcp-rune/server'
|
|
3
|
+
import {
|
|
4
|
+
DATA_TOOL_CLASSES,
|
|
5
|
+
FORM_STRATEGY_TOOL_CLASSES,
|
|
6
|
+
ToolRegistry
|
|
7
|
+
} from '@mcp-rune/mcp-rune/tools'
|
|
8
|
+
|
|
9
|
+
import { MODEL_CLASSES } from './models/index.js'
|
|
10
|
+
import { promptRegistry } from './prompts/index.js'
|
|
11
|
+
|
|
12
|
+
// Stub ApiClient — replace with your real HTTP client. The Proxy surfaces a
|
|
13
|
+
// clear error if any tool accidentally tries to hit the network before you
|
|
14
|
+
// have one wired up.
|
|
15
|
+
const stubApiClient = new Proxy({} as ApiClient, {
|
|
16
|
+
get() {
|
|
17
|
+
throw new Error(
|
|
18
|
+
'No ApiClient configured. Wire `createApiClient` in src/config.ts before using auth-gated tools.'
|
|
19
|
+
)
|
|
20
|
+
}
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
const toolRegistry = new ToolRegistry({
|
|
24
|
+
toolClasses: { ...DATA_TOOL_CLASSES, ...FORM_STRATEGY_TOOL_CLASSES },
|
|
25
|
+
models: MODEL_CLASSES,
|
|
26
|
+
serverContext: {
|
|
27
|
+
name: '<%= projectNamePascal %>'
|
|
28
|
+
},
|
|
29
|
+
namespace: '<%= projectName %>',
|
|
30
|
+
promptRegistry,
|
|
31
|
+
createApiClient: () => stubApiClient
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
export const mcpConfig = {
|
|
35
|
+
name: '<%= projectName %>',
|
|
36
|
+
|
|
37
|
+
createServer({
|
|
38
|
+
sessionId,
|
|
39
|
+
transport,
|
|
40
|
+
getAccessToken
|
|
41
|
+
}: {
|
|
42
|
+
sessionId: string
|
|
43
|
+
transport: string
|
|
44
|
+
getAccessToken: () => Promise<string>
|
|
45
|
+
}) {
|
|
46
|
+
return createServer({
|
|
47
|
+
name: '<%= projectName %>',
|
|
48
|
+
version: '0.1.0',
|
|
49
|
+
sessionId,
|
|
50
|
+
transport,
|
|
51
|
+
toolRegistry,
|
|
52
|
+
promptRegistry,
|
|
53
|
+
getAccessToken
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AttributeDefinition } from '@mcp-rune/mcp-rune/models'
|
|
2
|
+
import { BaseModel } from '@mcp-rune/mcp-rune/models'
|
|
3
|
+
|
|
4
|
+
export class <%= model.namePascal %> extends BaseModel {
|
|
5
|
+
static override description = '<%= model.description || `A ${model.name} record` %>'
|
|
6
|
+
static override api = { endpoint: '<%= model.endpoint || `${model.fileName}s` %>' }
|
|
7
|
+
|
|
8
|
+
static override attributes: Record<string, AttributeDefinition> = {
|
|
9
|
+
<% for (const attr of model.attributes) { -%>
|
|
10
|
+
<%= attr.name %>: {
|
|
11
|
+
type: '<%= attr.type %>',
|
|
12
|
+
<% if (attr.required) { -%>
|
|
13
|
+
required: true,
|
|
14
|
+
<% } -%>
|
|
15
|
+
<% if (attr.description) { -%>
|
|
16
|
+
description: '<%= attr.description %>',
|
|
17
|
+
<% } -%>
|
|
18
|
+
},
|
|
19
|
+
<% } -%>
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static get attributesConfig(): Record<string, AttributeDefinition> {
|
|
23
|
+
return this.attributes
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<% for (const m of models) { -%>
|
|
2
|
+
import { <%= m.namePascal %> } from './<%= m.fileName %>.js'
|
|
3
|
+
<% } -%>
|
|
4
|
+
|
|
5
|
+
export const MODEL_CLASSES = {
|
|
6
|
+
<% for (const m of models) { -%>
|
|
7
|
+
<%= m.fileName %>: <%= m.namePascal %>,
|
|
8
|
+
<% } -%>
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
<% for (const m of models) { -%>
|
|
12
|
+
export { <%= m.namePascal %> }
|
|
13
|
+
<% } -%>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BasePrompt,
|
|
3
|
+
derivePromptSchema,
|
|
4
|
+
PromptContentBuilder
|
|
5
|
+
} from '@mcp-rune/mcp-rune/prompts'
|
|
6
|
+
import type { FormStrategyType } from '@mcp-rune/mcp-rune/prompts'
|
|
7
|
+
|
|
8
|
+
import { <%= model.namePascal %> } from '../models/<%= model.fileName %>.js'
|
|
9
|
+
|
|
10
|
+
export class <%= model.namePascal %>Prompt extends BasePrompt {
|
|
11
|
+
static override formStrategy: FormStrategyType = 'hybrid'
|
|
12
|
+
|
|
13
|
+
static {
|
|
14
|
+
const schema = derivePromptSchema(<%= model.namePascal %>)
|
|
15
|
+
this.fieldGroups = schema.fieldGroups
|
|
16
|
+
this.fieldDefinitions = schema.fieldDefinitions
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
override get promptContent(): string {
|
|
20
|
+
return PromptContentBuilder.for(<%= model.namePascal %>Prompt, '<%= model.fileName %>')
|
|
21
|
+
.add('# <%= model.namePascal %> guide')
|
|
22
|
+
.standard()
|
|
23
|
+
.toolUsage()
|
|
24
|
+
.attributeReference()
|
|
25
|
+
.build()
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BasePromptRegistry } from '@mcp-rune/mcp-rune/prompts'
|
|
2
|
+
|
|
3
|
+
<% for (const m of models) { -%>
|
|
4
|
+
import { <%= m.namePascal %> } from '../models/<%= m.fileName %>.js'
|
|
5
|
+
<% } -%>
|
|
6
|
+
<% for (const m of models) { -%>
|
|
7
|
+
import { <%= m.namePascal %>Prompt } from './<%= m.fileName %>-prompt.js'
|
|
8
|
+
<% } -%>
|
|
9
|
+
|
|
10
|
+
export const promptRegistry = new BasePromptRegistry()
|
|
11
|
+
|
|
12
|
+
<% for (const m of models) { -%>
|
|
13
|
+
promptRegistry.register('<%= m.fileName %>', <%= m.namePascal %>Prompt, {
|
|
14
|
+
description: <%= m.namePascal %>.description,
|
|
15
|
+
required: true,
|
|
16
|
+
model: '<%= m.fileName %>'
|
|
17
|
+
})
|
|
18
|
+
<% } -%>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { StdioServer } from '@mcp-rune/mcp-rune/server'
|
|
2
|
+
|
|
3
|
+
import { mcpConfig } from './config.js'
|
|
4
|
+
|
|
5
|
+
const ACCESS_TOKEN = process.env.ACCESS_TOKEN ?? 'demo-token'
|
|
6
|
+
|
|
7
|
+
const server = new StdioServer({
|
|
8
|
+
accessToken: ACCESS_TOKEN,
|
|
9
|
+
mcp: mcpConfig
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
server.start()
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises'
|
|
2
|
+
import { dirname, join } from 'node:path'
|
|
3
|
+
import { fileURLToPath } from 'node:url'
|
|
4
|
+
|
|
5
|
+
import { describe, expect, it } from 'vitest'
|
|
6
|
+
|
|
7
|
+
const root = join(dirname(fileURLToPath(import.meta.url)), '..')
|
|
8
|
+
|
|
9
|
+
describe('scaffold smoke', () => {
|
|
10
|
+
it('package.json declares the design-mandated scripts', async () => {
|
|
11
|
+
const pkg = JSON.parse(await readFile(join(root, 'package.json'), 'utf8'))
|
|
12
|
+
for (const name of ['start', 'start:local', 'test', 'typecheck', 'inspect']) {
|
|
13
|
+
expect(pkg.scripts[name], `missing script: ${name}`).toBeTypeOf('string')
|
|
14
|
+
}
|
|
15
|
+
})
|
|
16
|
+
})
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"strict": true,
|
|
7
|
+
"noEmit": true,
|
|
8
|
+
"esModuleInterop": true,
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
"resolveJsonModule": true,
|
|
11
|
+
"isolatedModules": true
|
|
12
|
+
},
|
|
13
|
+
"include": ["src/**/*.ts", "test/**/*.ts"]
|
|
14
|
+
}
|