@cyanheads/mcp-ts-core 0.1.18 → 0.1.20
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/CLAUDE.md +4 -1
- package/README.md +1 -1
- package/dist/cli/init.js +6 -3
- package/dist/cli/init.js.map +1 -1
- package/package.json +1 -1
- package/scripts/devcheck.ts +35 -10
- package/skills/field-test/SKILL.md +105 -0
- package/templates/.env.example +4 -1
- package/templates/.vscode/settings.json +0 -1
- package/templates/AGENTS.md +19 -0
- package/templates/CLAUDE.md +19 -0
- package/templates/Dockerfile +1 -4
- package/templates/_.gitignore +10 -127
- package/templates/devcheck.config.json +15 -0
- package/templates/package.json +12 -2
- package/templates/server.json +99 -0
package/CLAUDE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Agent Protocol
|
|
2
2
|
|
|
3
|
-
**Package:** `@cyanheads/mcp-ts-core` · **Version:** 0.1.
|
|
3
|
+
**Package:** `@cyanheads/mcp-ts-core` · **Version:** 0.1.20
|
|
4
4
|
**npm:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) · **Docker:** [ghcr.io/cyanheads/mcp-ts-core](https://ghcr.io/cyanheads/mcp-ts-core)
|
|
5
5
|
|
|
6
6
|
> **Developer note:** Never assume. Read related files and docs before making changes. Read full file content for context. Never edit a file before reading it.
|
|
@@ -145,6 +145,8 @@ src/
|
|
|
145
145
|
|
|
146
146
|
**File suffixes:** `.tool.ts` (standard or task), `.resource.ts`, `.prompt.ts`, `.app-tool.ts` (UI-enabled), `.app-resource.ts` (UI resource linked to app tool).
|
|
147
147
|
|
|
148
|
+
**`templates/` directory:** Scaffolding source for the CLI init script (`setup` skill). Contents are copied into new consumer servers — includes starter `package.json`, `tsconfig`, `biome.json`, `vitest.config.ts`, `.env.example`, `Dockerfile`, `CLAUDE.md`/`AGENTS.md`, and example tool/resource/prompt definitions. Files prefixed with `_` (e.g. `_.gitignore`, `_tsconfig.json`) are renamed on copy (strip `_` prefix). Changes here affect every newly scaffolded server.
|
|
149
|
+
|
|
148
150
|
---
|
|
149
151
|
|
|
150
152
|
## Adding a Tool
|
|
@@ -400,6 +402,7 @@ Detailed method signatures, options, and examples live in skill files. Read the
|
|
|
400
402
|
| `add-prompt` | `skills/add-prompt/SKILL.md` | Scaffold a new MCP prompt definition |
|
|
401
403
|
| `add-service` | `skills/add-service/SKILL.md` | Scaffold a new domain service |
|
|
402
404
|
| `add-test` | `skills/add-test/SKILL.md` | Scaffold test file for a tool, resource, or service |
|
|
405
|
+
| `field-test` | `skills/field-test/SKILL.md` | Exercise tools/resources/prompts with real inputs, verify behavior, report issues |
|
|
403
406
|
| `add-provider` | `skills/add-provider/SKILL.md` | Add a new provider implementation |
|
|
404
407
|
| `add-export` | `skills/add-export/SKILL.md` | Add a new subpath export |
|
|
405
408
|
| `design-mcp-server` | `skills/design-mcp-server/SKILL.md` | Design tool surface, resources, and service layer for a new server |
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
<div align="center">
|
|
7
7
|
|
|
8
|
-
[](./CHANGELOG.md) [](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/docs/specification/2025-11-25/changelog.mdx) [](https://modelcontextprotocol.io/) [](./LICENSE)
|
|
9
9
|
|
|
10
10
|
[](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
11
11
|
|
package/dist/cli/init.js
CHANGED
|
@@ -59,11 +59,12 @@ function init() {
|
|
|
59
59
|
}
|
|
60
60
|
mkdirSync(dest, { recursive: true });
|
|
61
61
|
}
|
|
62
|
+
const pkg = JSON.parse(readFileSync(join(PACKAGE_ROOT, 'package.json'), 'utf-8'));
|
|
62
63
|
console.log(`\n Scaffolding${name ? ` ${name}` : ''} in ${dest}\n`);
|
|
63
64
|
const created = [];
|
|
64
65
|
const skipped = [];
|
|
65
66
|
// Step 1: Copy templates
|
|
66
|
-
copyTemplates(dest, packageName, created, skipped);
|
|
67
|
+
copyTemplates(dest, packageName, pkg.version, created, skipped);
|
|
67
68
|
// Step 2: Copy scripts
|
|
68
69
|
copyScripts(dest, created, skipped);
|
|
69
70
|
// Step 3: Copy external skills
|
|
@@ -72,7 +73,7 @@ function init() {
|
|
|
72
73
|
printSummary(created, skipped, name);
|
|
73
74
|
}
|
|
74
75
|
// ── Template copying ──────────────────────────────────────────────────
|
|
75
|
-
function copyTemplates(dest, name, created, skipped) {
|
|
76
|
+
function copyTemplates(dest, name, frameworkVersion, created, skipped) {
|
|
76
77
|
const entries = walkDir(TEMPLATES_DIR);
|
|
77
78
|
for (const srcPath of entries) {
|
|
78
79
|
let relPath = relative(TEMPLATES_DIR, srcPath);
|
|
@@ -88,7 +89,9 @@ function copyTemplates(dest, name, created, skipped) {
|
|
|
88
89
|
continue;
|
|
89
90
|
}
|
|
90
91
|
mkdirSync(dirname(destPath), { recursive: true });
|
|
91
|
-
const content = readFileSync(srcPath, 'utf-8')
|
|
92
|
+
const content = readFileSync(srcPath, 'utf-8')
|
|
93
|
+
.replace(/\{\{PACKAGE_NAME\}\}/g, name)
|
|
94
|
+
.replace(/\{\{FRAMEWORK_VERSION\}\}/g, frameworkVersion);
|
|
92
95
|
writeFileSync(destPath, content);
|
|
93
96
|
created.push(relPath);
|
|
94
97
|
}
|
package/dist/cli/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/mcp-ts-core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.20",
|
|
4
4
|
"mcpName": "io.github.cyanheads/mcp-ts-core",
|
|
5
5
|
"description": "Agent-native TypeScript framework for building MCP servers. Build tools, not infrastructure. Declarative definitions with auth, multi-backend storage, OpenTelemetry, and first-class support for Node.js and Cloudflare Workers.",
|
|
6
6
|
"main": "dist/core/index.js",
|
package/scripts/devcheck.ts
CHANGED
|
@@ -229,9 +229,31 @@ const Shell = {
|
|
|
229
229
|
|
|
230
230
|
const ROOT_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), '..');
|
|
231
231
|
|
|
232
|
-
//
|
|
233
|
-
|
|
234
|
-
|
|
232
|
+
// ── Project-local config (devcheck.config.json) ─────────────────────
|
|
233
|
+
|
|
234
|
+
interface DevcheckConfig {
|
|
235
|
+
depcheck?: {
|
|
236
|
+
ignores?: string[];
|
|
237
|
+
ignorePatterns?: string[];
|
|
238
|
+
};
|
|
239
|
+
outdated?: {
|
|
240
|
+
allowlist?: string[];
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function loadDevcheckConfig(rootDir: string): DevcheckConfig {
|
|
245
|
+
try {
|
|
246
|
+
return JSON.parse(
|
|
247
|
+
readFileSync(path.join(rootDir, 'devcheck.config.json'), 'utf-8'),
|
|
248
|
+
) as DevcheckConfig;
|
|
249
|
+
} catch {
|
|
250
|
+
return {};
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
const DEVCHECK_CONFIG = loadDevcheckConfig(ROOT_DIR);
|
|
255
|
+
|
|
256
|
+
const OUTDATED_ALLOWLIST = new Set(DEVCHECK_CONFIG.outdated?.allowlist ?? []);
|
|
235
257
|
|
|
236
258
|
/** Use bun for package management commands if available, otherwise npm. */
|
|
237
259
|
const PM_CMD = spawnSync('bun', ['--version'], { stdio: 'ignore' }).status === 0 ? 'bun' : 'npm';
|
|
@@ -433,13 +455,16 @@ const ALL_CHECKS: Check[] = [
|
|
|
433
455
|
flag: '--no-depcheck',
|
|
434
456
|
canFix: false,
|
|
435
457
|
slowCheck: true,
|
|
436
|
-
getCommand: (ctx) =>
|
|
437
|
-
path.join(ctx.rootDir, 'node_modules', '.bin', 'depcheck')
|
|
438
|
-
'
|
|
439
|
-
'
|
|
440
|
-
|
|
458
|
+
getCommand: (ctx) => {
|
|
459
|
+
const cmd = [path.join(ctx.rootDir, 'node_modules', '.bin', 'depcheck')];
|
|
460
|
+
const ignores = DEVCHECK_CONFIG.depcheck?.ignores ?? ['@types/*'];
|
|
461
|
+
if (ignores.length > 0) cmd.push(`--ignores=${ignores.join(',')}`);
|
|
462
|
+
const patterns = DEVCHECK_CONFIG.depcheck?.ignorePatterns ?? [];
|
|
463
|
+
if (patterns.length > 0) cmd.push(`--ignore-patterns=${patterns.join(',')}`);
|
|
464
|
+
return cmd;
|
|
465
|
+
},
|
|
441
466
|
tip: (c) =>
|
|
442
|
-
`Remove unused packages with ${c.bold(`${PM_CMD} remove <pkg>`)} or add to
|
|
467
|
+
`Remove unused packages with ${c.bold(`${PM_CMD} remove <pkg>`)} or add to ${c.bold('devcheck.config.json')} ignores.`,
|
|
443
468
|
},
|
|
444
469
|
// Slow checks last (network-bound operations)
|
|
445
470
|
{
|
|
@@ -519,7 +544,7 @@ const ALL_CHECKS: Check[] = [
|
|
|
519
544
|
return unexpected.length === 0;
|
|
520
545
|
},
|
|
521
546
|
tip: (c) =>
|
|
522
|
-
`Run ${c.bold(`${PM_CMD} update`)} to upgrade dependencies.
|
|
547
|
+
`Run ${c.bold(`${PM_CMD} update`)} to upgrade dependencies. Configure allowlist in ${c.bold('devcheck.config.json')}.`,
|
|
523
548
|
},
|
|
524
549
|
];
|
|
525
550
|
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: field-test
|
|
3
|
+
description: >
|
|
4
|
+
Exercise tools, resources, and prompts with real-world inputs to verify behavior end-to-end. Use after adding or modifying definitions, or when the user asks to test, try out, or verify their MCP surface. Calls each definition with realistic and adversarial inputs and produces a report of issues, pain points, and recommendations.
|
|
5
|
+
metadata:
|
|
6
|
+
author: cyanheads
|
|
7
|
+
version: "1.0"
|
|
8
|
+
audience: external
|
|
9
|
+
type: debug
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Context
|
|
13
|
+
|
|
14
|
+
Unit tests (`add-test` skill) verify handler logic with mocked context. Field testing verifies the full picture: real server, real transport, real inputs, real outputs. It catches issues that unit tests miss — bad descriptions, awkward input shapes, unhelpful error messages, missing format functions, schema mismatches, and surprising edge-case behavior.
|
|
15
|
+
|
|
16
|
+
**Actively use** the tools — don't just read their code.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
### 1. Surface available definitions
|
|
23
|
+
|
|
24
|
+
List the MCP tools, resources, and prompts available in your environment. This confirms the server is connected and gives you everything you need — names, descriptions, parameter schemas — to plan your tests.
|
|
25
|
+
|
|
26
|
+
If you don't see any MCP tools from this server, ask the user to connect it first (e.g. `claude mcp add` for Claude Code, or the equivalent for their client). Don't proceed until the tools are visible.
|
|
27
|
+
|
|
28
|
+
Present what you find: each definition's name, parameters (with types and descriptions), and any notable schema details (optional fields, enums, constraints). This is your test surface.
|
|
29
|
+
|
|
30
|
+
### 2. Test each definition
|
|
31
|
+
|
|
32
|
+
For every tool, resource, and prompt, run through these categories:
|
|
33
|
+
|
|
34
|
+
#### Tools
|
|
35
|
+
|
|
36
|
+
| Category | What to test |
|
|
37
|
+
|:---------|:-------------|
|
|
38
|
+
| **Happy path** | Realistic input that should succeed. Verify output shape matches the output schema. Verify format function produces sensible content blocks. |
|
|
39
|
+
| **Variations** | Different valid input combinations — optional fields omitted, optional fields included, different enum values, min/max boundaries. |
|
|
40
|
+
| **Edge cases** | Empty strings, zero values, very long inputs, special characters, Unicode. |
|
|
41
|
+
| **Error paths** | Missing required fields, wrong types, nonexistent IDs, inputs that should trigger domain errors. Verify errors are clear and actionable. |
|
|
42
|
+
| **Descriptions** | Read every field's `.describe()` — would a user/LLM understand what to provide? Flag vague or missing descriptions. |
|
|
43
|
+
|
|
44
|
+
#### Resources
|
|
45
|
+
|
|
46
|
+
| Category | What to test |
|
|
47
|
+
|:---------|:-------------|
|
|
48
|
+
| **Happy path** | Valid URI with known params. Verify returned content and MIME type. |
|
|
49
|
+
| **List** | Call `list` if defined. Verify returned resources have names and valid URIs. |
|
|
50
|
+
| **Not found** | URI with nonexistent params. Verify a clear error, not a crash. |
|
|
51
|
+
| **Pagination** | If the resource uses `extractCursor`/`paginateArray`, test with varying limits and cursors. |
|
|
52
|
+
|
|
53
|
+
#### Prompts
|
|
54
|
+
|
|
55
|
+
| Category | What to test |
|
|
56
|
+
|:---------|:-------------|
|
|
57
|
+
| **Happy path** | Valid args. Verify generated messages are well-formed. |
|
|
58
|
+
| **Defaults** | Omit optional args. Verify the output still makes sense. |
|
|
59
|
+
| **Content quality** | Read the generated messages — are they clear, well-structured prompts? |
|
|
60
|
+
|
|
61
|
+
### 3. Track progress
|
|
62
|
+
|
|
63
|
+
Use a todo list to track each definition and its test status. Mark each as you go — don't batch.
|
|
64
|
+
|
|
65
|
+
### 4. Produce the report
|
|
66
|
+
|
|
67
|
+
After testing everything, present a structured report:
|
|
68
|
+
|
|
69
|
+
#### Summary table
|
|
70
|
+
|
|
71
|
+
| Definition | Type | Status | Issues |
|
|
72
|
+
|:-----------|:-----|:-------|:-------|
|
|
73
|
+
| `search_items` | tool | pass | — |
|
|
74
|
+
| `get_item` | tool | issues | Error message unhelpful for missing ID |
|
|
75
|
+
| `item://` | resource | fail | Crashes on nonexistent ID |
|
|
76
|
+
|
|
77
|
+
#### Detailed findings
|
|
78
|
+
|
|
79
|
+
For each definition with issues, include:
|
|
80
|
+
|
|
81
|
+
- **What happened** — the input, the output or error, and what was expected
|
|
82
|
+
- **Severity** — `bug` (broken behavior), `ux` (works but confusing/unhelpful), `nit` (minor polish)
|
|
83
|
+
- **Recommendation** — specific fix suggestion
|
|
84
|
+
|
|
85
|
+
#### Pain points
|
|
86
|
+
|
|
87
|
+
Cross-cutting observations that aren't tied to a single definition:
|
|
88
|
+
|
|
89
|
+
- Inconsistent error message patterns across tools
|
|
90
|
+
- Missing format functions (raw JSON returned to user)
|
|
91
|
+
- Description quality issues (vague, missing, or misleading)
|
|
92
|
+
- Schema design issues (required fields that should be optional, missing defaults, overly broad types)
|
|
93
|
+
- Performance observations (unexpectedly slow responses)
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Checklist
|
|
98
|
+
|
|
99
|
+
- [ ] All registered tools tested (happy path + edge cases)
|
|
100
|
+
- [ ] All registered resources tested (happy path + not found)
|
|
101
|
+
- [ ] All registered prompts tested (happy path + defaults)
|
|
102
|
+
- [ ] Error messages reviewed for clarity and actionability
|
|
103
|
+
- [ ] Descriptions reviewed for completeness and accuracy
|
|
104
|
+
- [ ] Format functions verified (or absence noted)
|
|
105
|
+
- [ ] Summary report presented to user
|
package/templates/.env.example
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ── Transport ──────────────────────────────────────────────────────────
|
|
2
2
|
# MCP_TRANSPORT_TYPE=stdio # stdio | http (default: stdio)
|
|
3
|
-
# MCP_HTTP_PORT=
|
|
3
|
+
# MCP_HTTP_PORT=3010 # HTTP port (default: 3010)
|
|
4
4
|
# MCP_HTTP_HOST=localhost # HTTP host (default: localhost)
|
|
5
5
|
# MCP_HTTP_ENDPOINT_PATH=/mcp # HTTP endpoint path (default: /mcp)
|
|
6
6
|
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
# ── Storage ───────────────────────────────────────────────────────────
|
|
12
12
|
# STORAGE_PROVIDER_TYPE=in-memory # in-memory | filesystem | supabase | cloudflare-r2 | cloudflare-kv | cloudflare-d1
|
|
13
13
|
|
|
14
|
+
# ── Session ──────────────────────────────────────────────────────────
|
|
15
|
+
# MCP_SESSION_MODE=stateful # stateful | stateless (default: stateful)
|
|
16
|
+
|
|
14
17
|
# ── Logging ───────────────────────────────────────────────────────────
|
|
15
18
|
# MCP_LOG_LEVEL=info # debug | info | notice | warning | error
|
|
16
19
|
|
package/templates/AGENTS.md
CHANGED
|
@@ -19,6 +19,24 @@
|
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
22
|
+
## What's Next?
|
|
23
|
+
|
|
24
|
+
When the user asks what to do next, what's left, or needs direction, suggest relevant options based on the current project state:
|
|
25
|
+
|
|
26
|
+
1. **Re-run the `setup` skill** — ensures CLAUDE.md, skills, structure, and metadata are populated and up to date with the current codebase
|
|
27
|
+
2. **Run the `design-mcp-server` skill** — if the tool/resource surface hasn't been mapped yet, work through domain design
|
|
28
|
+
3. **Add tools/resources/prompts** — scaffold new definitions using the `add-tool`, `add-resource`, `add-prompt` skills
|
|
29
|
+
4. **Add services** — scaffold domain service integrations using the `add-service` skill
|
|
30
|
+
5. **Add tests** — scaffold tests for existing definitions using the `add-test` skill
|
|
31
|
+
6. **Field-test definitions** — exercise tools/resources/prompts with real inputs using the `field-test` skill, get a report of issues and pain points
|
|
32
|
+
7. **Run `devcheck`** — lint, format, typecheck, and security audit
|
|
33
|
+
8. **Run the `polish-docs-meta` skill** — finalize README, CHANGELOG, metadata, and agent protocol for shipping
|
|
34
|
+
9. **Run the `maintenance` skill** — sync skills and dependencies after framework updates
|
|
35
|
+
|
|
36
|
+
Tailor suggestions to what's actually missing or stale — don't recite the full list every time.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
22
40
|
## Core Rules
|
|
23
41
|
|
|
24
42
|
- **Logic throws, framework catches.** Tool/resource handlers are pure — throw on failure, no `try/catch`. Plain `Error` is fine; the framework catches, classifies, and formats. Use error factories (`notFound()`, `validationError()`, etc.) when the error code matters.
|
|
@@ -205,6 +223,7 @@ Available skills:
|
|
|
205
223
|
| `add-prompt` | Scaffold a new prompt definition |
|
|
206
224
|
| `add-service` | Scaffold a new service integration |
|
|
207
225
|
| `add-test` | Scaffold test file for a tool, resource, or service |
|
|
226
|
+
| `field-test` | Exercise tools/resources/prompts with real inputs, verify behavior, report issues |
|
|
208
227
|
| `devcheck` | Lint, format, typecheck, audit |
|
|
209
228
|
| `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
|
|
210
229
|
| `maintenance` | Sync skills and dependencies after updates |
|
package/templates/CLAUDE.md
CHANGED
|
@@ -19,6 +19,24 @@
|
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
22
|
+
## What's Next?
|
|
23
|
+
|
|
24
|
+
When the user asks what to do next, what's left, or needs direction, suggest relevant options based on the current project state:
|
|
25
|
+
|
|
26
|
+
1. **Re-run the `setup` skill** — ensures CLAUDE.md, skills, structure, and metadata are populated and up to date with the current codebase
|
|
27
|
+
2. **Run the `design-mcp-server` skill** — if the tool/resource surface hasn't been mapped yet, work through domain design
|
|
28
|
+
3. **Add tools/resources/prompts** — scaffold new definitions using the `add-tool`, `add-resource`, `add-prompt` skills
|
|
29
|
+
4. **Add services** — scaffold domain service integrations using the `add-service` skill
|
|
30
|
+
5. **Add tests** — scaffold tests for existing definitions using the `add-test` skill
|
|
31
|
+
6. **Field-test definitions** — exercise tools/resources/prompts with real inputs using the `field-test` skill, get a report of issues and pain points
|
|
32
|
+
7. **Run `devcheck`** — lint, format, typecheck, and security audit
|
|
33
|
+
8. **Run the `polish-docs-meta` skill** — finalize README, CHANGELOG, metadata, and agent protocol for shipping
|
|
34
|
+
9. **Run the `maintenance` skill** — sync skills and dependencies after framework updates
|
|
35
|
+
|
|
36
|
+
Tailor suggestions to what's actually missing or stale — don't recite the full list every time.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
22
40
|
## Core Rules
|
|
23
41
|
|
|
24
42
|
- **Logic throws, framework catches.** Tool/resource handlers are pure — throw on failure, no `try/catch`. Plain `Error` is fine; the framework catches, classifies, and formats. Use error factories (`notFound()`, `validationError()`, etc.) when the error code matters.
|
|
@@ -205,6 +223,7 @@ Available skills:
|
|
|
205
223
|
| `add-prompt` | Scaffold a new prompt definition |
|
|
206
224
|
| `add-service` | Scaffold a new service integration |
|
|
207
225
|
| `add-test` | Scaffold test file for a tool, resource, or service |
|
|
226
|
+
| `field-test` | Exercise tools/resources/prompts with real inputs, verify behavior, report issues |
|
|
208
227
|
| `devcheck` | Lint, format, typecheck, audit |
|
|
209
228
|
| `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
|
|
210
229
|
| `maintenance` | Sync skills and dependencies after updates |
|
package/templates/Dockerfile
CHANGED
|
@@ -46,10 +46,7 @@ COPY package.json bun.lock ./
|
|
|
46
46
|
|
|
47
47
|
# Install only production dependencies, ignoring any lifecycle scripts (like 'prepare')
|
|
48
48
|
# that are not needed in the final production image.
|
|
49
|
-
|
|
50
|
-
# by @modelcontextprotocol/ext-apps — only needed for its build toolchain, not runtime.
|
|
51
|
-
RUN bun install --production --frozen-lockfile --ignore-scripts \
|
|
52
|
-
&& rm -rf node_modules/@oven node_modules/@rollup
|
|
49
|
+
RUN bun install --production --frozen-lockfile --ignore-scripts
|
|
53
50
|
|
|
54
51
|
# Copy the compiled application code from the build stage
|
|
55
52
|
COPY --from=build /usr/src/app/dist ./dist
|
package/templates/_.gitignore
CHANGED
|
@@ -2,22 +2,17 @@
|
|
|
2
2
|
# OPERATING SYSTEM FILES
|
|
3
3
|
# =============================================================================
|
|
4
4
|
.DS_Store
|
|
5
|
-
.DS_Store?
|
|
6
|
-
._*
|
|
7
|
-
.Spotlight-V100
|
|
8
|
-
.Trashes
|
|
9
|
-
ehthumbs.db
|
|
10
5
|
Thumbs.db
|
|
11
6
|
|
|
12
7
|
# =============================================================================
|
|
13
8
|
# IDE AND EDITOR FILES
|
|
14
9
|
# =============================================================================
|
|
15
10
|
.idea/
|
|
11
|
+
.vscode/!settings.json
|
|
12
|
+
.vscode/!extensions.json
|
|
16
13
|
*.swp
|
|
17
14
|
*.swo
|
|
18
15
|
*~
|
|
19
|
-
*.sublime-workspace
|
|
20
|
-
*.sublime-project
|
|
21
16
|
.history/
|
|
22
17
|
|
|
23
18
|
# =============================================================================
|
|
@@ -28,106 +23,23 @@ npm-debug.log*
|
|
|
28
23
|
yarn-debug.log*
|
|
29
24
|
yarn-error.log*
|
|
30
25
|
.pnpm-debug.log*
|
|
31
|
-
.npm
|
|
32
|
-
.pnp.js
|
|
33
|
-
.pnp.cjs
|
|
34
|
-
.pnp.mjs
|
|
35
|
-
.pnp.json
|
|
36
|
-
.pnp.ts
|
|
37
26
|
|
|
38
27
|
# =============================================================================
|
|
39
|
-
# TYPESCRIPT &
|
|
28
|
+
# TYPESCRIPT & BUILD
|
|
40
29
|
# =============================================================================
|
|
30
|
+
dist/
|
|
41
31
|
*.tsbuildinfo
|
|
42
32
|
.tsbuildinfo
|
|
43
33
|
.tsbuildinfo.scripts
|
|
44
|
-
.tscache/
|
|
45
34
|
*.js.map
|
|
46
|
-
*.mjs.map
|
|
47
|
-
*.cjs.map
|
|
48
35
|
*.d.ts.map
|
|
49
|
-
*.d.ts
|
|
50
|
-
!*.d.ts.template
|
|
51
36
|
*.tgz
|
|
52
|
-
.rollup.cache
|
|
53
|
-
|
|
54
|
-
# =============================================================================
|
|
55
|
-
# PYTHON
|
|
56
|
-
# =============================================================================
|
|
57
|
-
__pycache__/
|
|
58
|
-
*.py[cod]
|
|
59
|
-
*$py.class
|
|
60
|
-
*.so
|
|
61
|
-
.Python
|
|
62
|
-
develop-eggs/
|
|
63
|
-
eggs/
|
|
64
|
-
.eggs/
|
|
65
|
-
parts/
|
|
66
|
-
sdist/
|
|
67
|
-
var/
|
|
68
|
-
wheels/
|
|
69
|
-
*.egg-info/
|
|
70
|
-
.installed.cfg
|
|
71
|
-
*.egg
|
|
72
|
-
.pytest_cache/
|
|
73
|
-
htmlcov/
|
|
74
|
-
.tox/
|
|
75
|
-
.venv
|
|
76
|
-
venv/
|
|
77
|
-
ENV/
|
|
78
|
-
|
|
79
|
-
# =============================================================================
|
|
80
|
-
# JAVA
|
|
81
|
-
# =============================================================================
|
|
82
|
-
*.class
|
|
83
|
-
*.jar
|
|
84
|
-
*.war
|
|
85
|
-
*.nar
|
|
86
|
-
*.ear
|
|
87
|
-
hs_err_pid*
|
|
88
|
-
target/
|
|
89
|
-
.gradle/
|
|
90
|
-
|
|
91
|
-
# =============================================================================
|
|
92
|
-
# RUBY
|
|
93
|
-
# =============================================================================
|
|
94
|
-
*.gem
|
|
95
|
-
*.rbc
|
|
96
|
-
/.config
|
|
97
|
-
/InstalledFiles
|
|
98
|
-
/pkg/
|
|
99
|
-
/spec/reports/
|
|
100
|
-
/test/tmp/
|
|
101
|
-
/test/version_tmp/
|
|
102
|
-
/tmp/
|
|
103
|
-
.byebug_history
|
|
104
|
-
|
|
105
|
-
# =============================================================================
|
|
106
|
-
# BUILD & DISTRIBUTION
|
|
107
|
-
# =============================================================================
|
|
108
|
-
build/
|
|
109
|
-
dist/
|
|
110
|
-
out/
|
|
111
37
|
|
|
112
38
|
# =============================================================================
|
|
113
|
-
#
|
|
114
|
-
# =============================================================================
|
|
115
|
-
*.com
|
|
116
|
-
*.dll
|
|
117
|
-
*.exe
|
|
118
|
-
*.o
|
|
119
|
-
|
|
120
|
-
# =============================================================================
|
|
121
|
-
# PACKAGE & ARCHIVE FILES
|
|
39
|
+
# TESTING & COVERAGE
|
|
122
40
|
# =============================================================================
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
*.gz
|
|
126
|
-
*.iso
|
|
127
|
-
*.rar
|
|
128
|
-
*.tar
|
|
129
|
-
*.tar.gz
|
|
130
|
-
*.zip
|
|
41
|
+
coverage/
|
|
42
|
+
!coverage/coverage-final.json
|
|
131
43
|
|
|
132
44
|
# =============================================================================
|
|
133
45
|
# LOGS & DATABASES
|
|
@@ -137,60 +49,31 @@ out/
|
|
|
137
49
|
*.sqlite3
|
|
138
50
|
logs/
|
|
139
51
|
|
|
140
|
-
# =============================================================================
|
|
141
|
-
# TESTING & COVERAGE
|
|
142
|
-
# =============================================================================
|
|
143
|
-
.nyc_output/
|
|
144
|
-
coverage/
|
|
145
|
-
!coverage/coverage-final.json
|
|
146
|
-
reports/
|
|
147
|
-
|
|
148
52
|
# =============================================================================
|
|
149
53
|
# CACHE & TEMPORARY FILES
|
|
150
54
|
# =============================================================================
|
|
151
55
|
.cache/
|
|
152
56
|
.parcel-cache/
|
|
153
|
-
*.bak
|
|
154
57
|
|
|
155
58
|
# =============================================================================
|
|
156
59
|
# ENVIRONMENT & CONFIGURATION
|
|
157
60
|
# =============================================================================
|
|
158
61
|
.env
|
|
159
62
|
.env.local
|
|
160
|
-
.env
|
|
161
|
-
.env.test.local
|
|
162
|
-
.env.production.local
|
|
163
|
-
.sample-env
|
|
164
|
-
!sample.template.*
|
|
165
|
-
mcp-servers.json
|
|
166
|
-
mcp-config.json
|
|
63
|
+
.env.*.local
|
|
167
64
|
.wrangler
|
|
168
65
|
worker-configuration.d.ts
|
|
169
66
|
|
|
170
|
-
# =============================================================================
|
|
171
|
-
# DEMO & EXAMPLE DIRECTORIES
|
|
172
|
-
# =============================================================================
|
|
173
|
-
|
|
174
|
-
# =============================================================================
|
|
175
|
-
# GENERATED DOCUMENTATION
|
|
176
|
-
# =============================================================================
|
|
177
|
-
docs/api/
|
|
178
|
-
|
|
179
67
|
# =============================================================================
|
|
180
68
|
# APPLICATION SPECIFIC
|
|
181
69
|
# =============================================================================
|
|
182
70
|
.storage/
|
|
183
71
|
repomix-output*
|
|
184
|
-
duckdata/
|
|
185
72
|
data/
|
|
73
|
+
docs/api/
|
|
186
74
|
docs/devdocs.md
|
|
187
|
-
ideas/
|
|
188
75
|
.mcp.json
|
|
189
76
|
.claude/
|
|
190
77
|
.agents/
|
|
191
|
-
|
|
192
|
-
# =============================================================================
|
|
193
|
-
# MCP REGISTRY
|
|
194
|
-
# =============================================================================
|
|
195
78
|
.mcpregistry_github_token
|
|
196
|
-
.mcpregistry_registry_token
|
|
79
|
+
.mcpregistry_registry_token
|
package/templates/package.json
CHANGED
|
@@ -9,7 +9,13 @@
|
|
|
9
9
|
"{{PACKAGE_NAME}}": "dist/index.js"
|
|
10
10
|
},
|
|
11
11
|
"files": [
|
|
12
|
-
"dist/"
|
|
12
|
+
"dist/",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE",
|
|
15
|
+
"CLAUDE.md",
|
|
16
|
+
"AGENTS.md",
|
|
17
|
+
"Dockerfile",
|
|
18
|
+
"server.json"
|
|
13
19
|
],
|
|
14
20
|
"scripts": {
|
|
15
21
|
"build": "tsx scripts/build.ts",
|
|
@@ -30,6 +36,10 @@
|
|
|
30
36
|
"mcp-server",
|
|
31
37
|
"model-context-protocol"
|
|
32
38
|
],
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": ""
|
|
42
|
+
},
|
|
33
43
|
"license": "Apache-2.0",
|
|
34
44
|
"engines": {
|
|
35
45
|
"node": ">=22.0.0"
|
|
@@ -38,7 +48,7 @@
|
|
|
38
48
|
"access": "public"
|
|
39
49
|
},
|
|
40
50
|
"dependencies": {
|
|
41
|
-
"@cyanheads/mcp-ts-core": "^
|
|
51
|
+
"@cyanheads/mcp-ts-core": "^{{FRAMEWORK_VERSION}}",
|
|
42
52
|
"pino-pretty": "^13.1.3"
|
|
43
53
|
},
|
|
44
54
|
"devDependencies": {
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "{{PACKAGE_NAME}}",
|
|
4
|
+
"description": "",
|
|
5
|
+
"repository": {
|
|
6
|
+
"url": "",
|
|
7
|
+
"source": "github"
|
|
8
|
+
},
|
|
9
|
+
"version": "0.1.0",
|
|
10
|
+
"packages": [
|
|
11
|
+
{
|
|
12
|
+
"registryType": "npm",
|
|
13
|
+
"registryBaseUrl": "https://registry.npmjs.org",
|
|
14
|
+
"identifier": "{{PACKAGE_NAME}}",
|
|
15
|
+
"runtimeHint": "node",
|
|
16
|
+
"version": "0.1.0",
|
|
17
|
+
"packageArguments": [
|
|
18
|
+
{
|
|
19
|
+
"type": "positional",
|
|
20
|
+
"value": "run"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"type": "positional",
|
|
24
|
+
"value": "start:stdio"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"environmentVariables": [
|
|
28
|
+
{
|
|
29
|
+
"name": "MCP_LOG_LEVEL",
|
|
30
|
+
"description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').",
|
|
31
|
+
"format": "string",
|
|
32
|
+
"isRequired": false,
|
|
33
|
+
"default": "info"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"transport": {
|
|
37
|
+
"type": "stdio"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"registryType": "npm",
|
|
42
|
+
"registryBaseUrl": "https://registry.npmjs.org",
|
|
43
|
+
"identifier": "{{PACKAGE_NAME}}",
|
|
44
|
+
"runtimeHint": "node",
|
|
45
|
+
"version": "0.1.0",
|
|
46
|
+
"packageArguments": [
|
|
47
|
+
{
|
|
48
|
+
"type": "positional",
|
|
49
|
+
"value": "run"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"type": "positional",
|
|
53
|
+
"value": "start:http"
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
"environmentVariables": [
|
|
57
|
+
{
|
|
58
|
+
"name": "MCP_HTTP_HOST",
|
|
59
|
+
"description": "The hostname for the HTTP server.",
|
|
60
|
+
"format": "string",
|
|
61
|
+
"isRequired": false,
|
|
62
|
+
"default": "127.0.0.1"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "MCP_HTTP_PORT",
|
|
66
|
+
"description": "The port to run the HTTP server on.",
|
|
67
|
+
"format": "string",
|
|
68
|
+
"isRequired": false,
|
|
69
|
+
"default": "3010"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "MCP_HTTP_ENDPOINT_PATH",
|
|
73
|
+
"description": "The endpoint path for the MCP server.",
|
|
74
|
+
"format": "string",
|
|
75
|
+
"isRequired": false,
|
|
76
|
+
"default": "/mcp"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"name": "MCP_AUTH_MODE",
|
|
80
|
+
"description": "Authentication mode to use: 'none', 'jwt', or 'oauth'.",
|
|
81
|
+
"format": "string",
|
|
82
|
+
"isRequired": false,
|
|
83
|
+
"default": "none"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"name": "MCP_LOG_LEVEL",
|
|
87
|
+
"description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').",
|
|
88
|
+
"format": "string",
|
|
89
|
+
"isRequired": false,
|
|
90
|
+
"default": "info"
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
"transport": {
|
|
94
|
+
"type": "streamable-http",
|
|
95
|
+
"url": "http://localhost:3010/mcp"
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
}
|