@cyanheads/mcp-ts-core 0.6.16 → 0.7.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/CLAUDE.md +1 -1
- package/README.md +1 -1
- package/changelog/0.6.x/0.6.17.md +26 -0
- package/changelog/0.7.x/0.7.0.md +30 -0
- package/dist/linter/rules/format-parity-rules.d.ts.map +1 -1
- package/dist/linter/rules/format-parity-rules.js +24 -1
- package/dist/linter/rules/format-parity-rules.js.map +1 -1
- package/dist/logs/combined.log +4 -4
- package/dist/logs/error.log +4 -4
- package/dist/mcp-server/resources/resource-registration.d.ts.map +1 -1
- package/dist/mcp-server/resources/resource-registration.js +10 -7
- package/dist/mcp-server/resources/resource-registration.js.map +1 -1
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts +10 -2
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts.map +1 -1
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.js +5 -5
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.js.map +1 -1
- package/dist/mcp-server/tools/tool-registration.d.ts.map +1 -1
- package/dist/mcp-server/tools/tool-registration.js +18 -20
- package/dist/mcp-server/tools/tool-registration.js.map +1 -1
- package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts +11 -2
- package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -1
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js +10 -5
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -1
- package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/httpTransport.js +101 -21
- package/dist/mcp-server/transports/http/httpTransport.js.map +1 -1
- package/dist/utils/internal/error-handler/errorHandler.d.ts +4 -1
- package/dist/utils/internal/error-handler/errorHandler.d.ts.map +1 -1
- package/dist/utils/internal/error-handler/errorHandler.js +15 -2
- package/dist/utils/internal/error-handler/errorHandler.js.map +1 -1
- package/dist/utils/internal/error-handler/helpers.d.ts +17 -0
- package/dist/utils/internal/error-handler/helpers.d.ts.map +1 -1
- package/dist/utils/internal/error-handler/helpers.js +29 -0
- package/dist/utils/internal/error-handler/helpers.js.map +1 -1
- package/dist/utils/internal/error-handler/mappings.d.ts.map +1 -1
- package/dist/utils/internal/error-handler/mappings.js +1 -0
- package/dist/utils/internal/error-handler/mappings.js.map +1 -1
- package/package.json +2 -2
- package/scripts/build-changelog.ts +7 -1
- package/scripts/devcheck.ts +3 -4
- package/skills/api-linter/SKILL.md +13 -2
- package/skills/maintenance/SKILL.md +20 -9
- package/skills/release-and-publish/SKILL.md +29 -5
- package/skills/report-issue-framework/SKILL.md +20 -6
- package/skills/report-issue-local/SKILL.md +26 -3
- package/templates/.github/ISSUE_TEMPLATE/bug_report.yml +9 -0
- package/templates/.github/ISSUE_TEMPLATE/feature_request.yml +11 -0
|
@@ -86,6 +86,7 @@ export const ERROR_TYPE_MAPPINGS = {
|
|
|
86
86
|
URIError: JsonRpcErrorCode.ValidationError,
|
|
87
87
|
EvalError: JsonRpcErrorCode.InternalError,
|
|
88
88
|
AggregateError: JsonRpcErrorCode.InternalError,
|
|
89
|
+
ZodError: JsonRpcErrorCode.ValidationError,
|
|
89
90
|
};
|
|
90
91
|
/**
|
|
91
92
|
* Common error patterns for classifying errors by message/name.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mappings.js","sourceRoot":"","sources":["../../../../src/utils/internal/error-handler/mappings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D;;;;GAIG;AACH,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAwB;IACzD,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,OAAO,YAAY,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;IAEtF,qCAAqC;IACrC,IAAI,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,OAAO,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAW,CAAC;IACxD,CAAC;IAED,sBAAsB;IACtB,IAAI,QAAgB,CAAC;IACrB,IAAI,OAAO,YAAY,MAAM,EAAE,CAAC;QAC9B,8CAA8C;QAC9C,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,IAAI,GAAG,CAAC;QACf,CAAC;QACD,QAAQ,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,uBAAuB;IACvB,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAWD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA+C;IAC7E,WAAW,EAAE,gBAAgB,CAAC,eAAe;IAC7C,cAAc,EAAE,gBAAgB,CAAC,aAAa;IAC9C,UAAU,EAAE,gBAAgB,CAAC,eAAe;IAC5C,QAAQ,EAAE,gBAAgB,CAAC,eAAe;IAC1C,SAAS,EAAE,gBAAgB,CAAC,aAAa;IACzC,cAAc,EAAE,gBAAgB,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"mappings.js","sourceRoot":"","sources":["../../../../src/utils/internal/error-handler/mappings.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.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"mcpName": "io.github.cyanheads/mcp-ts-core",
|
|
5
5
|
"description": "Agent-native TypeScript framework for building MCP servers. Declarative definitions with auth, multi-backend storage, OpenTelemetry, and first-class support for Bun/Node/Cloudflare Workers.",
|
|
6
6
|
"main": "dist/core/index.js",
|
|
@@ -263,7 +263,7 @@
|
|
|
263
263
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
264
264
|
"@opentelemetry/api": "^1.9.1",
|
|
265
265
|
"dotenv": "^17.4.2",
|
|
266
|
-
"hono": "^4.12.
|
|
266
|
+
"hono": "^4.12.15",
|
|
267
267
|
"jose": "^6.2.2",
|
|
268
268
|
"pino": "^10.3.1",
|
|
269
269
|
"zod": "^4.3.6"
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* @module scripts/build-changelog
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
-
import { readdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
30
|
+
import { existsSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
31
31
|
import { resolve } from 'node:path';
|
|
32
32
|
import process from 'node:process';
|
|
33
33
|
|
|
@@ -194,6 +194,12 @@ function reportMissingSummaries(missing: string[]): void {
|
|
|
194
194
|
|
|
195
195
|
function main(): void {
|
|
196
196
|
const checkOnly = process.argv.includes('--check');
|
|
197
|
+
|
|
198
|
+
if (!existsSync(CHANGELOG_DIR)) {
|
|
199
|
+
console.log(`Skipped: ${CHANGELOG_DIR} does not exist (single-file CHANGELOG.md project).`);
|
|
200
|
+
process.exit(0);
|
|
201
|
+
}
|
|
202
|
+
|
|
197
203
|
const { content: generated, missingSummary } = buildRollup();
|
|
198
204
|
|
|
199
205
|
if (checkOnly) {
|
package/scripts/devcheck.ts
CHANGED
|
@@ -453,11 +453,10 @@ const ALL_CHECKS: Check[] = [
|
|
|
453
453
|
flag: '--no-changelog-sync',
|
|
454
454
|
canFix: false,
|
|
455
455
|
// --check exits non-zero if CHANGELOG.md drifts from changelog/*.md.
|
|
456
|
-
// Skipped cleanly when
|
|
456
|
+
// Skipped cleanly when the directory-based changelog isn't in use — CHANGELOG.md
|
|
457
|
+
// alone is a supported configuration (runtime-only consumers, opt-out per #41).
|
|
457
458
|
getCommand: () => {
|
|
458
|
-
|
|
459
|
-
const hasRollup = existsSync(path.join(ROOT_DIR, 'CHANGELOG.md'));
|
|
460
|
-
if (!hasChangelog && !hasRollup) return null;
|
|
459
|
+
if (!existsSync(path.join(ROOT_DIR, 'changelog'))) return null;
|
|
461
460
|
return ['bun', 'run', 'scripts/build-changelog.ts', '--check'];
|
|
462
461
|
},
|
|
463
462
|
tip: (c) =>
|
|
@@ -4,7 +4,7 @@ description: >
|
|
|
4
4
|
MCP definition linter rules reference. Use when `bun run lint:mcp`, `bun run devcheck`, or `createApp()` startup reports a lint error or warning (`format-parity`, `schema-is-object`, `name-format`, `server-json-*`, etc.) and you need to understand the rule, its severity, and how to fix it. Every rule ID the linter emits has an entry in this doc.
|
|
5
5
|
metadata:
|
|
6
6
|
author: cyanheads
|
|
7
|
-
version: "1.
|
|
7
|
+
version: "1.1"
|
|
8
8
|
audience: external
|
|
9
9
|
type: reference
|
|
10
10
|
---
|
|
@@ -134,7 +134,18 @@ input: z.object({ items: z.array(z.string()).describe('List of items') })
|
|
|
134
134
|
|
|
135
135
|
Every field in `input`, `output`, `params`, or `args` needs a `.describe('...')` call. Descriptions ship to the client and the LLM — missing ones make tools harder to use correctly.
|
|
136
136
|
|
|
137
|
-
**Fix:** add `.describe('...')` to
|
|
137
|
+
**Fix:** add `.describe('...')` to the paths the linter flags. The diagnostic names which path is missing a description (e.g., `input.filters.status`).
|
|
138
|
+
|
|
139
|
+
**Recursion rules** — the linter walks selectively; primitive array elements are intentionally skipped. Knowing what's walked prevents over-application of describes that end up as noise in the generated JSON Schema.
|
|
140
|
+
|
|
141
|
+
| Schema position | Walked? | Describe required on inner? |
|
|
142
|
+
|:---|:---|:---|
|
|
143
|
+
| `z.object({ ... })` field | Yes | Yes, on each field |
|
|
144
|
+
| `z.array(compound)` element — object, array, or union | Yes | Yes, on the element |
|
|
145
|
+
| `z.array(primitive)` element — string, number, enum, regex-branded primitive, etc. | **No** | No — outer array describe is sufficient |
|
|
146
|
+
| `z.union([a, b, ...])` option | Yes (every option) | Yes, on each option |
|
|
147
|
+
|
|
148
|
+
The asymmetry that catches agents: inside `z.union([z.string(), z.array(z.string())])`, the outer `z.string()` option **does** need a describe (unions walk every option), but the `z.string()` inside the inner array does **not** (arrays don't walk primitive elements). If the linter didn't flag a path, don't add a describe there — the redundant describe ships to the JSON Schema as clutter.
|
|
138
149
|
|
|
139
150
|
### schema-serializable
|
|
140
151
|
|
|
@@ -4,7 +4,7 @@ description: >
|
|
|
4
4
|
Investigate, adopt, and verify dependency updates — with special handling for `@cyanheads/mcp-ts-core`. Captures what changed, understands why, cross-references against the codebase, adopts framework improvements, syncs project skills, and runs final checks. Supports two entry modes: run the full flow end-to-end, or review updates you already applied.
|
|
5
5
|
metadata:
|
|
6
6
|
author: cyanheads
|
|
7
|
-
version: "1.
|
|
7
|
+
version: "1.5"
|
|
8
8
|
audience: external
|
|
9
9
|
type: workflow
|
|
10
10
|
---
|
|
@@ -77,7 +77,7 @@ Cross-reference each finding against the server's code. Collect adoption opportu
|
|
|
77
77
|
|
|
78
78
|
**Template review.** The framework also ships `templates/CLAUDE.md` and `templates/AGENTS.md` as scaffolding for consumer agent protocol files. The consumer's `CLAUDE.md`/`AGENTS.md` was copied at init time and has since diverged (local customizations, echo replacements, server-specific sections). Read the upstream template fresh at `node_modules/@cyanheads/mcp-ts-core/templates/CLAUDE.md`.
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
Read the upstream template end-to-end, mentally comparing against the current `CLAUDE.md`/`AGENTS.md`. Apply framework-authored updates directly — new skill references in the skills table, new entries in the "What's Next?" section, updated convention callouts, clarified patterns. These are factual updates, not taste decisions; the consumer's agent protocol file is meant to track the framework's. Only surface a decision when a template change conflicts with a section the consumer has intentionally customized (server-specific domain context, bespoke checklists, etc.) — in that case, note the conflict and ask.
|
|
81
81
|
|
|
82
82
|
### 5. Sync project skills and scripts
|
|
83
83
|
|
|
@@ -140,14 +140,25 @@ If the consumer customized a framework script, the overwrite discards those chan
|
|
|
140
140
|
|
|
141
141
|
### 6. Adopt changes in the codebase
|
|
142
142
|
|
|
143
|
-
Apply the findings from Steps 3 and 4
|
|
143
|
+
Apply the findings from Steps 3 and 4. Framework changes and third-party library changes have different adoption defaults — the asymmetry is deliberate.
|
|
144
144
|
|
|
145
|
-
|
|
146
|
-
- **Deprecations** — migrate now, while context is fresh
|
|
147
|
-
- **New framework features** — refactor targeted spots only; don't cargo-cult everywhere
|
|
148
|
-
- **New configuration** — update `.env.example`, server config schema, README if user-facing
|
|
145
|
+
**Framework changes (`@cyanheads/mcp-ts-core`) — default adopt.**
|
|
149
146
|
|
|
150
|
-
|
|
147
|
+
The consumer opted into the framework; its templates, skills, scripts, linter rules, and conventions are authoritative. Adopt directly unless the change genuinely conflicts with a documented local override.
|
|
148
|
+
|
|
149
|
+
- **Breaking changes** — fix call sites. Not optional.
|
|
150
|
+
- **Deprecations** — migrate now, while context is fresh.
|
|
151
|
+
- **New linter rules** — if the rule now flags existing code, fix the code; don't silence the rule.
|
|
152
|
+
- **New utilities that supersede local code** — swap them in. The point of the framework is to centralize.
|
|
153
|
+
- **New conventions** (template changes, new config keys, renamed env vars) — adopt and update `.env.example`, server config schema, `server.json`, and README if user-facing.
|
|
154
|
+
- **New framework features that don't match existing use cases** — skip; those are for future features, not retroactive refactors.
|
|
155
|
+
|
|
156
|
+
**Third-party library changes — default cost/benefit.**
|
|
157
|
+
|
|
158
|
+
- Read the changelog findings from Step 3, assess impact against actual call sites in `src/`.
|
|
159
|
+
- Adopt when the change is a clear win (performance, correctness, removed deprecation warning, smaller surface).
|
|
160
|
+
- Skip when marginal — a new convenience API isn't a reason to touch working code.
|
|
161
|
+
- If the library added a feature the server could use, note it but don't refactor speculatively.
|
|
151
162
|
|
|
152
163
|
### 7. Rebuild and verify
|
|
153
164
|
|
|
@@ -171,7 +182,7 @@ Present a concise numbered summary to the user:
|
|
|
171
182
|
2. **Breaking changes handled** — call sites fixed
|
|
172
183
|
3. **Features adopted** — new framework APIs now in use
|
|
173
184
|
4. **Skills synced** — added/updated with versions (Phase A) and agent directories refreshed (Phase B)
|
|
174
|
-
5. **
|
|
185
|
+
5. **Open decisions** — genuinely ambiguous items: breaking changes with multiple migration paths, framework changes that conflict with a documented local override, third-party adoptions where the cost/benefit is close
|
|
175
186
|
6. **Status** — rebuild / devcheck / test results
|
|
176
187
|
|
|
177
188
|
## Checklist
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: release-and-publish
|
|
3
3
|
description: >
|
|
4
|
-
Ship a release end-to-end across every registry the project targets (npm, MCP Registry, GHCR). Runs the final verification gate, pushes commits and tags, then publishes to each applicable destination. Assumes git wrapup (version bumps, changelog, commit, annotated tag) is already complete — this skill is the post-wrapup publish workflow.
|
|
4
|
+
Ship a release end-to-end across every registry the project targets (npm, MCP Registry, GHCR). Runs the final verification gate, pushes commits and tags, then publishes to each applicable destination. Assumes git wrapup (version bumps, changelog, commit, annotated tag) is already complete — this skill is the post-wrapup publish workflow. Retries transient network failures on publish steps; halts with a partial-state report when retries are exhausted or the failure is terminal.
|
|
5
5
|
metadata:
|
|
6
6
|
author: cyanheads
|
|
7
|
-
version: "2.
|
|
7
|
+
version: "2.1"
|
|
8
8
|
audience: external
|
|
9
9
|
type: workflow
|
|
10
10
|
---
|
|
@@ -26,13 +26,37 @@ If any are missing, halt and tell the user to finish wrapup first. Do not attemp
|
|
|
26
26
|
|
|
27
27
|
## Failure Protocol
|
|
28
28
|
|
|
29
|
-
**
|
|
29
|
+
Steps 3–6 are network-bound. For those, **retry transient failures up to 2 times** with short backoff (~5 s before the first retry, ~15 s before the second) before halting. All other steps halt on the first non-zero exit — they're deterministic and a second attempt won't change the outcome.
|
|
30
|
+
|
|
31
|
+
### Retry on transient patterns
|
|
32
|
+
|
|
33
|
+
Match stderr (case-insensitive) against any of these — if matched, the failure is almost always a network blip; retry:
|
|
34
|
+
|
|
35
|
+
- `integrity check failed` / `IntegrityCheckFailed` — corrupt tarball during download
|
|
36
|
+
- `ECONNRESET` / `EAI_AGAIN` / `ETIMEDOUT` / `ENOTFOUND` — network layer
|
|
37
|
+
- `connection reset` / `connection refused` — transport blip
|
|
38
|
+
- `timed out` / `request timeout` — server or network timeout
|
|
39
|
+
- HTTP `502` / `503` / `504` — transient registry error
|
|
40
|
+
|
|
41
|
+
**Before retrying `docker buildx --push` (step 6)**, run `docker builder prune -f` to drop any cached corrupt layer. Skip this extra step for other retries.
|
|
42
|
+
|
|
43
|
+
### Never retry on idempotent-success signals
|
|
44
|
+
|
|
45
|
+
These mean the step already succeeded on a prior run — treat as success and proceed to the next step:
|
|
46
|
+
|
|
47
|
+
- npm (`bun publish`): `version already exists`, `You cannot publish over the previously published versions`
|
|
48
|
+
- MCP Registry (`mcp-publisher publish`): `cannot publish duplicate version`
|
|
49
|
+
|
|
50
|
+
### Halt fallback
|
|
51
|
+
|
|
52
|
+
If retries are exhausted, or the failure matches none of the transient patterns, halt and report:
|
|
30
53
|
|
|
31
54
|
1. Which step failed
|
|
32
55
|
2. The exact error output
|
|
33
|
-
3.
|
|
56
|
+
3. Retry count attempted (0 for terminal errors, 2 for exhausted retries)
|
|
57
|
+
4. Which destinations already received the release (npm published? tag pushed? MCP Registry? GHCR?) — the partial state across destinations
|
|
34
58
|
|
|
35
|
-
The user fixes locally and re-invokes
|
|
59
|
+
The user fixes locally and re-invokes. On re-invocation, already-published destinations hit the idempotent-success signal and skip naturally — no manual step-skipping required.
|
|
36
60
|
|
|
37
61
|
## Steps
|
|
38
62
|
|
|
@@ -4,7 +4,7 @@ description: >
|
|
|
4
4
|
File a bug or feature request against @cyanheads/mcp-ts-core when you hit a framework issue. Use when a builder, utility, context method, or config behaves contrary to the documented API — not for server-specific application bugs.
|
|
5
5
|
metadata:
|
|
6
6
|
author: cyanheads
|
|
7
|
-
version: "1.
|
|
7
|
+
version: "1.3"
|
|
8
8
|
audience: external
|
|
9
9
|
type: workflow
|
|
10
10
|
---
|
|
@@ -69,6 +69,7 @@ Structure the `--body` to match the template's form fields:
|
|
|
69
69
|
gh issue create -R cyanheads/mcp-ts-core \
|
|
70
70
|
--title "bug(scope): concise description" \
|
|
71
71
|
--label "bug" \
|
|
72
|
+
--assignee "@me" \
|
|
72
73
|
--body "$(cat <<'ISSUE'
|
|
73
74
|
### mcp-ts-core version
|
|
74
75
|
|
|
@@ -153,15 +154,26 @@ Format: `bug(<scope>): concise description`
|
|
|
153
154
|
|
|
154
155
|
### Labels
|
|
155
156
|
|
|
157
|
+
Every issue needs exactly one primary label. Stack secondary labels on top when applicable.
|
|
158
|
+
|
|
159
|
+
**Primary (required — pick one):**
|
|
160
|
+
|
|
156
161
|
| Label | When |
|
|
157
162
|
|:------|:-----|
|
|
158
163
|
| `bug` | Something broken |
|
|
159
|
-
| `
|
|
160
|
-
| `
|
|
161
|
-
|
|
162
|
-
|
|
164
|
+
| `enhancement` | Feature request or improvement |
|
|
165
|
+
| `documentation` | Documentation is wrong, missing, or misleading |
|
|
166
|
+
|
|
167
|
+
**Secondary (optional — stack on top of primary):**
|
|
168
|
+
|
|
169
|
+
| Label | When |
|
|
170
|
+
|:------|:-----|
|
|
171
|
+
| `regression` | Worked before, broken after an update |
|
|
172
|
+
| `performance` | Memory, CPU, latency, or resource usage |
|
|
173
|
+
| `security` | Vulnerability, CVE, or hardening work |
|
|
174
|
+
| `breaking-change` | Fix/feature will break public API; requires a major bump |
|
|
163
175
|
|
|
164
|
-
Combine labels: `--label "bug" --label "
|
|
176
|
+
Combine labels: `--label "bug" --label "regression"`.
|
|
165
177
|
|
|
166
178
|
### Attaching logs or stack traces
|
|
167
179
|
|
|
@@ -174,6 +186,7 @@ bun run dev:stdio 2>&1 | head -100 > /tmp/mcp-error.log
|
|
|
174
186
|
gh issue create -R cyanheads/mcp-ts-core \
|
|
175
187
|
--title "bug(transport): stdio crashes on large payload" \
|
|
176
188
|
--label "bug" \
|
|
189
|
+
--assignee "@me" \
|
|
177
190
|
--body-file /tmp/mcp-error.log
|
|
178
191
|
|
|
179
192
|
# Or as a comment on an existing issue
|
|
@@ -196,6 +209,7 @@ Template below demonstrates the richer structure. Omit sections you don't need
|
|
|
196
209
|
gh issue create -R cyanheads/mcp-ts-core \
|
|
197
210
|
--title "feat(scope): concise description" \
|
|
198
211
|
--label "enhancement" \
|
|
212
|
+
--assignee "@me" \
|
|
199
213
|
--body "$(cat <<'ISSUE'
|
|
200
214
|
Concrete statement of what's currently missing or broken in the framework. Name the specific builder, utility, context method, or config field. Two or three sentences — the reader should know the gap before the end of the paragraph.
|
|
201
215
|
|
|
@@ -4,7 +4,7 @@ description: >
|
|
|
4
4
|
File a bug or feature request against this MCP server's own repo. Use for server-specific issues — tool logic, service integrations, config problems, or domain bugs that aren't caused by the framework.
|
|
5
5
|
metadata:
|
|
6
6
|
author: cyanheads
|
|
7
|
-
version: "1.
|
|
7
|
+
version: "1.3"
|
|
8
8
|
audience: external
|
|
9
9
|
type: workflow
|
|
10
10
|
---
|
|
@@ -78,6 +78,7 @@ Structure the `--body` to match the template's form fields:
|
|
|
78
78
|
gh issue create \
|
|
79
79
|
--title "bug(tool_name): concise description" \
|
|
80
80
|
--label "bug" \
|
|
81
|
+
--assignee "@me" \
|
|
81
82
|
--body "$(cat <<'ISSUE'
|
|
82
83
|
### Server version
|
|
83
84
|
|
|
@@ -139,16 +140,36 @@ Examples:
|
|
|
139
140
|
|
|
140
141
|
### Labels
|
|
141
142
|
|
|
143
|
+
Every issue needs exactly one primary label. Stack secondary labels on top when applicable.
|
|
144
|
+
|
|
145
|
+
**Primary (required — pick one):**
|
|
146
|
+
|
|
142
147
|
| Label | When |
|
|
143
148
|
|:------|:-----|
|
|
144
149
|
| `bug` | Something broken |
|
|
145
150
|
| `enhancement` | New feature or improvement |
|
|
146
|
-
| `
|
|
147
|
-
|
|
151
|
+
| `documentation` | Documentation is wrong, missing, or misleading |
|
|
152
|
+
|
|
153
|
+
**Secondary (optional — stack on top of primary):**
|
|
154
|
+
|
|
155
|
+
| Label | When |
|
|
156
|
+
|:------|:-----|
|
|
148
157
|
| `regression` | Worked before, broken after a change |
|
|
158
|
+
| `performance` | Memory, CPU, latency, or resource usage |
|
|
159
|
+
| `security` | Vulnerability, CVE, or hardening work |
|
|
160
|
+
| `breaking-change` | Change will break public API; requires a major bump |
|
|
149
161
|
|
|
150
162
|
Combine labels: `--label "bug" --label "regression"`.
|
|
151
163
|
|
|
164
|
+
Secondary labels are not GitHub defaults — if `gh issue create --label "regression"` fails with `label not found`, create it once:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
gh label create regression --color e99695 --description "Worked before, broken after a change"
|
|
168
|
+
gh label create performance --color 5319e7 --description "Memory, CPU, latency, or resource usage"
|
|
169
|
+
gh label create security --color b60205 --description "Vulnerability, CVE, or hardening work"
|
|
170
|
+
gh label create breaking-change --color d93f0b --description "Change will break public API; requires a major bump"
|
|
171
|
+
```
|
|
172
|
+
|
|
152
173
|
### Attaching logs or large output
|
|
153
174
|
|
|
154
175
|
```bash
|
|
@@ -158,6 +179,7 @@ bun run dev:stdio 2>&1 | head -200 > /tmp/server-error.log
|
|
|
158
179
|
gh issue create \
|
|
159
180
|
--title "bug(ingest): crashes on large payload" \
|
|
160
181
|
--label "bug" \
|
|
182
|
+
--assignee "@me" \
|
|
161
183
|
--body-file /tmp/server-error.log
|
|
162
184
|
|
|
163
185
|
# Or as a comment on an existing issue
|
|
@@ -180,6 +202,7 @@ Template below demonstrates the richer structure. Omit sections you don't need
|
|
|
180
202
|
gh issue create \
|
|
181
203
|
--title "feat(scope): concise description" \
|
|
182
204
|
--label "enhancement" \
|
|
205
|
+
--assignee "@me" \
|
|
183
206
|
--body "$(cat <<'ISSUE'
|
|
184
207
|
Concrete statement of what's currently missing or broken. Name the specific tool, service, resource, or domain area. Two or three sentences — the reader should know the gap before the end of the paragraph.
|
|
185
208
|
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
name: Bug Report
|
|
2
2
|
description: Report a bug in {{PACKAGE_NAME}}
|
|
3
3
|
labels: ["bug"]
|
|
4
|
+
# assignees: ["your-github-username"] # uncomment to auto-assign new issues
|
|
4
5
|
body:
|
|
5
6
|
- type: markdown
|
|
6
7
|
attributes:
|
|
7
8
|
value: |
|
|
8
9
|
**Do not include secrets, credentials, API keys, or tokens.** Redact sensitive values from env vars, headers, and logs before submitting. GitHub issues are public.
|
|
9
10
|
|
|
11
|
+
**Secondary labels.** `bug` is applied automatically — also add one or more of the following in the sidebar if they apply:
|
|
12
|
+
- `regression` — worked before, broken after a change
|
|
13
|
+
- `performance` — memory, CPU, latency, or resource usage
|
|
14
|
+
- `security` — vulnerability, CVE, or hardening work
|
|
15
|
+
- `breaking-change` — fix will break public API
|
|
16
|
+
|
|
17
|
+
If a label doesn't exist in this repo yet, create it once: `gh label create <name>`.
|
|
18
|
+
|
|
10
19
|
- type: input
|
|
11
20
|
id: version
|
|
12
21
|
attributes:
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
name: Feature Request
|
|
2
2
|
description: Suggest a new feature or improvement for {{PACKAGE_NAME}}
|
|
3
3
|
labels: ["enhancement"]
|
|
4
|
+
# assignees: ["your-github-username"] # uncomment to auto-assign new issues
|
|
4
5
|
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
**Secondary labels.** `enhancement` is applied automatically — also add one or more of the following in the sidebar if they apply:
|
|
10
|
+
- `performance` — improves memory, CPU, latency, or resource usage
|
|
11
|
+
- `security` — hardens the security posture
|
|
12
|
+
- `breaking-change` — will break public API; requires a major bump
|
|
13
|
+
|
|
14
|
+
If a label doesn't exist in this repo yet, create it once: `gh label create <name>`.
|
|
15
|
+
|
|
5
16
|
- type: textarea
|
|
6
17
|
id: use-case
|
|
7
18
|
attributes:
|