@cyanheads/mcp-ts-core 0.1.28 → 0.2.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.
@@ -0,0 +1,231 @@
1
+ ---
2
+ name: report-issue-framework
3
+ description: >
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
+ metadata:
6
+ author: cyanheads
7
+ version: "1.1"
8
+ audience: external
9
+ type: workflow
10
+ ---
11
+
12
+ ## When to Use
13
+
14
+ You've isolated a problem to `@cyanheads/mcp-ts-core` itself — not your server code, not a misconfiguration, not a missing peer dependency. Typical triggers:
15
+
16
+ - Framework builder (`tool()`, `resource()`, `prompt()`) rejects valid input or produces incorrect output
17
+ - `createApp()` or `createWorkerHandler()` fails on a valid config
18
+ - `Context` properties (`ctx.log`, `ctx.state`, `ctx.elicit`, etc.) behave contrary to docs
19
+ - A utility from `/utils`, `/errors`, `/auth`, `/storage`, `/services` returns wrong results or throws unexpectedly
20
+ - Type exports are incorrect or missing (compile error on documented usage)
21
+ - The definition linter (`bun run lint:mcp`) produces false positives or misses real violations
22
+
23
+ ## Before Filing
24
+
25
+ 1. **Confirm framework version** — `bun pm ls @cyanheads/mcp-ts-core` or check `node_modules/@cyanheads/mcp-ts-core/package.json`
26
+ 2. **Check you're on latest** — `bun outdated @cyanheads/mcp-ts-core`. If behind, update and retest before filing.
27
+ 3. **Isolate the issue** — reproduce with a minimal handler or standalone script. Strip server-specific services, config, and dependencies. If the bug disappears when isolated, it's likely in your server code.
28
+ 4. **Search existing issues** — don't file duplicates:
29
+
30
+ ```bash
31
+ gh issue list -R cyanheads/mcp-ts-core --search "your error message or keyword"
32
+ ```
33
+
34
+ ## Redact Before Posting
35
+
36
+ GitHub issues are **public and permanent**. Before submitting any issue, scrub the title, body, logs, and code snippets for:
37
+
38
+ - **Secrets** — API keys, tokens, passwords, `MCP_AUTH_SECRET_KEY`, `OPENROUTER_API_KEY`, JWT values
39
+ - **Credentials** — auth headers (`Authorization: Bearer ...`), session IDs, cookie values
40
+ - **PII** — names, emails, IP addresses, user IDs tied to real people
41
+ - **Internal URLs** — private API endpoints, internal hostnames, database connection strings
42
+ - **Env dumps** — `process.env` output, `.env` file contents, Cloudflare Worker bindings
43
+
44
+ Replace sensitive values with obvious placeholders: `REDACTED`, `sk-...REDACTED`, `https://internal.example.com`, `user-id-123`. Do not rely on partial masking (`sk-abc...xyz`) — partial keys can still be exploited.
45
+
46
+ ## Filing a Bug
47
+
48
+ The repo has YAML form issue templates. Use `--web` to open the form in the browser (preferred when available), or pass `--title` + `--body` for non-interactive use.
49
+
50
+ ### Browser (interactive)
51
+
52
+ ```bash
53
+ gh issue create -R cyanheads/mcp-ts-core --template "Bug Report" --web
54
+ ```
55
+
56
+ ### CLI (non-interactive)
57
+
58
+ Structure the `--body` to match the template's form fields:
59
+
60
+ ````bash
61
+ gh issue create -R cyanheads/mcp-ts-core \
62
+ --title "bug(scope): concise description" \
63
+ --label "bug" \
64
+ --body "$(cat <<'ISSUE'
65
+ ### mcp-ts-core version
66
+
67
+ 0.1.29
68
+
69
+ ### Runtime
70
+
71
+ Bun
72
+
73
+ ### Runtime version
74
+
75
+ Bun 1.2.x
76
+
77
+ ### Transport
78
+
79
+ stdio
80
+
81
+ ### OS
82
+
83
+ macOS 15.x
84
+
85
+ ### Description
86
+
87
+ Brief explanation of the bug — what you expected vs what happened.
88
+
89
+ ### Reproduction
90
+
91
+ ```ts
92
+ import { tool, z } from '@cyanheads/mcp-ts-core';
93
+
94
+ export const broken = tool('broken_example', {
95
+ description: 'Minimal repro.',
96
+ input: z.object({ id: z.string().describe('ID') }),
97
+ output: z.object({
98
+ name: z.string().describe('Name'),
99
+ extra: z.string().optional().describe('Optional field'),
100
+ }),
101
+ async handler(input, ctx) {
102
+ return { name: 'test' }; // omitting optional field causes validation error
103
+ },
104
+ });
105
+ ```
106
+
107
+ ### Actual behavior
108
+
109
+ ```
110
+ Error: Output validation failed: ...
111
+ ```
112
+
113
+ ### Expected behavior
114
+
115
+ Omitting an optional output field should pass validation.
116
+
117
+ ### Additional context
118
+
119
+ Any workarounds, related issues, or observations.
120
+ ISSUE
121
+ )"
122
+ ````
123
+
124
+ ### Title conventions
125
+
126
+ Format: `bug(<scope>): concise description`
127
+
128
+ | Scope | When |
129
+ |:------|:-----|
130
+ | `tool` | Tool builder, handler, format, annotations |
131
+ | `resource` | Resource builder, handler, list, params |
132
+ | `prompt` | Prompt builder, generate, args |
133
+ | `context` | Context, logger, state, progress, elicit, sample |
134
+ | `config` | AppConfig, parseConfig, env parsing |
135
+ | `errors` | McpError, error factories, auto-classification |
136
+ | `auth` | Auth modes, scope checking, JWT/OAuth |
137
+ | `storage` | StorageService, providers |
138
+ | `transport` | stdio/http transport, SSE, session handling |
139
+ | `worker` | createWorkerHandler, Worker runtime |
140
+ | `utils` | Utilities (formatting, parsing, pagination, etc.) |
141
+ | `linter` | Definition linter false positives/negatives |
142
+ | `types` | Type exports, type inference |
143
+ | `services` | LLM, Speech, Graph services |
144
+ | `deps` | Dependency issues, peer dep conflicts |
145
+
146
+ ### Labels
147
+
148
+ | Label | When |
149
+ |:------|:-----|
150
+ | `bug` | Something broken |
151
+ | `regression` | Worked before, broken after update |
152
+ | `types` | TypeScript type issue |
153
+ | `docs` | Documentation is wrong or misleading |
154
+ | `enhancement` | Feature request or improvement (not a bug) |
155
+
156
+ Combine labels: `--label "bug" --label "types"`.
157
+
158
+ ### Attaching logs or stack traces
159
+
160
+ For long output, write to a file and attach:
161
+
162
+ ```bash
163
+ bun run dev:stdio 2>&1 | head -100 > /tmp/mcp-error.log
164
+
165
+ # As part of a new issue
166
+ gh issue create -R cyanheads/mcp-ts-core \
167
+ --title "bug(transport): stdio crashes on large payload" \
168
+ --label "bug" \
169
+ --body-file /tmp/mcp-error.log
170
+
171
+ # Or as a comment on an existing issue
172
+ gh issue comment <number> -R cyanheads/mcp-ts-core --body-file /tmp/mcp-error.log
173
+ ```
174
+
175
+ ## Filing a Feature Request
176
+
177
+ ### Browser (interactive)
178
+
179
+ ```bash
180
+ gh issue create -R cyanheads/mcp-ts-core --template "Feature Request" --web
181
+ ```
182
+
183
+ ### CLI (non-interactive)
184
+
185
+ ````bash
186
+ gh issue create -R cyanheads/mcp-ts-core \
187
+ --title "feat(scope): concise description" \
188
+ --label "enhancement" \
189
+ --body "$(cat <<'ISSUE'
190
+ ### Use case
191
+
192
+ Describe the problem you're solving and why the framework should handle it.
193
+
194
+ ### Proposed API
195
+
196
+ ```ts
197
+ import { withRetry } from '@cyanheads/mcp-ts-core/utils';
198
+
199
+ const result = await withRetry(() => fetchExternal(url), {
200
+ maxAttempts: 3,
201
+ backoff: 'exponential',
202
+ });
203
+ ```
204
+
205
+ ### Alternatives considered
206
+
207
+ What you tried or considered instead.
208
+ ISSUE
209
+ )"
210
+ ````
211
+
212
+ ## Following Up
213
+
214
+ ```bash
215
+ # Check issue status
216
+ gh issue view <number> -R cyanheads/mcp-ts-core
217
+
218
+ # Add context or respond to maintainer questions
219
+ gh issue comment <number> -R cyanheads/mcp-ts-core --body "Additional context..."
220
+
221
+ # List your open issues
222
+ gh issue list -R cyanheads/mcp-ts-core --author @me
223
+ ```
224
+
225
+ ## Checklist
226
+
227
+ - [ ] Confirmed bug is in `@cyanheads/mcp-ts-core`, not server code
228
+ - [ ] Running latest (or documented) framework version
229
+ - [ ] Searched existing issues — no duplicate found
230
+ - [ ] All secrets, credentials, PII, and internal URLs redacted
231
+ - [ ] Issue filed with: version, runtime, repro code, actual vs expected behavior
@@ -0,0 +1,225 @@
1
+ ---
2
+ name: report-issue-local
3
+ description: >
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
+ metadata:
6
+ author: cyanheads
7
+ version: "1.1"
8
+ audience: external
9
+ type: workflow
10
+ ---
11
+
12
+ ## When to Use
13
+
14
+ The bug is in this server's code, not in `@cyanheads/mcp-ts-core`. Typical triggers:
15
+
16
+ - A tool handler returns wrong results or throws on valid input
17
+ - A service integration (external API, database, third-party SDK) fails or misbehaves
18
+ - Server-specific config (`server-config.ts`) rejects valid env vars or has wrong defaults
19
+ - Resource handlers return stale, incomplete, or incorrect data
20
+ - Domain logic errors — wrong calculations, missing edge cases, bad state transitions
21
+ - Missing or incorrect `.describe()` on schema fields causing poor LLM tool use
22
+
23
+ **If the issue is in the framework itself** (builders, Context, utilities, type exports, linter), use `report-issue-framework` instead.
24
+
25
+ ## Before Filing
26
+
27
+ 1. **Identify the repo**:
28
+
29
+ ```bash
30
+ gh repo view --json nameWithOwner -q '.nameWithOwner'
31
+ ```
32
+
33
+ 2. **Search existing issues**:
34
+
35
+ ```bash
36
+ gh issue list --search "your error message or keyword"
37
+ ```
38
+
39
+ 3. **Reproduce the issue** — confirm it's reproducible. Note the exact input, transport mode, and any relevant env vars.
40
+
41
+ 4. **Check logs** — review `ctx.log` output and any framework telemetry for clues. If running HTTP, check the response body for structured error details.
42
+
43
+ ## Redact Before Posting
44
+
45
+ GitHub issues are **public and permanent**. Before submitting any issue, scrub the title, body, logs, and code snippets for:
46
+
47
+ - **Secrets** — API keys, tokens, passwords, env var values from `.env` or server config
48
+ - **Credentials** — auth headers (`Authorization: Bearer ...`), session IDs, cookie values
49
+ - **PII** — names, emails, IP addresses, user IDs tied to real people
50
+ - **Internal URLs** — private API endpoints, internal hostnames, database connection strings
51
+ - **Env dumps** — `process.env` output, `.env` file contents, Worker bindings
52
+
53
+ Replace sensitive values with obvious placeholders: `REDACTED`, `sk-...REDACTED`, `https://internal.example.com`, `user-id-123`. Do not rely on partial masking (`sk-abc...xyz`) — partial keys can still be exploited.
54
+
55
+ ## Filing a Bug
56
+
57
+ This repo includes YAML form issue templates (scaffolded from the framework). Use `--web` to open the form in the browser (preferred when available), or pass `--title` + `--body` for non-interactive use.
58
+
59
+ ### Browser (interactive)
60
+
61
+ ```bash
62
+ gh issue create --template "Bug Report" --web
63
+ ```
64
+
65
+ ### CLI (non-interactive)
66
+
67
+ Structure the `--body` to match the template's form fields:
68
+
69
+ ````bash
70
+ gh issue create \
71
+ --title "bug(tool_name): concise description" \
72
+ --label "bug" \
73
+ --body "$(cat <<'ISSUE'
74
+ ### Server version
75
+
76
+ 0.1.0
77
+
78
+ ### mcp-ts-core version
79
+
80
+ 0.1.29
81
+
82
+ ### Runtime
83
+
84
+ Bun
85
+
86
+ ### Runtime version
87
+
88
+ Bun 1.2.x
89
+
90
+ ### Transport
91
+
92
+ stdio
93
+
94
+ ### Description
95
+
96
+ What happened and what you expected instead.
97
+
98
+ ### Steps to reproduce
99
+
100
+ 1. Call `tool_name` with input: `{ "key": "value" }`
101
+ 2. Observe error / wrong output
102
+
103
+ ### Actual behavior
104
+
105
+ ```
106
+ Error or incorrect output here
107
+ ```
108
+
109
+ ### Expected behavior
110
+
111
+ What should have happened.
112
+
113
+ ### Additional context
114
+
115
+ Relevant `ctx.log` output, stack traces, or telemetry spans.
116
+ ISSUE
117
+ )"
118
+ ````
119
+
120
+ ### Title conventions
121
+
122
+ Format: `type(scope): description`
123
+
124
+ - **type:** `bug`, `feat`, `docs`, `chore`
125
+ - **scope:** tool name, service name, resource name, `config`, `auth`, or domain area
126
+
127
+ Examples:
128
+ - `bug(search_docs): returns empty results for queries with special characters`
129
+ - `feat(analytics): add date range filter to usage_report tool`
130
+ - `docs(setup): .env.example missing REDIS_URL`
131
+
132
+ ### Labels
133
+
134
+ | Label | When |
135
+ |:------|:-----|
136
+ | `bug` | Something broken |
137
+ | `enhancement` | New feature or improvement |
138
+ | `docs` | Documentation issue |
139
+ | `config` | Configuration or environment issue |
140
+ | `regression` | Worked before, broken after a change |
141
+
142
+ Combine labels: `--label "bug" --label "regression"`.
143
+
144
+ ### Attaching logs or large output
145
+
146
+ ```bash
147
+ bun run dev:stdio 2>&1 | head -200 > /tmp/server-error.log
148
+
149
+ # As part of a new issue
150
+ gh issue create \
151
+ --title "bug(ingest): crashes on large payload" \
152
+ --label "bug" \
153
+ --body-file /tmp/server-error.log
154
+
155
+ # Or as a comment on an existing issue
156
+ gh issue comment <number> --body-file /tmp/server-error.log
157
+ ```
158
+
159
+ ## Filing a Feature Request
160
+
161
+ ### Browser (interactive)
162
+
163
+ ```bash
164
+ gh issue create --template "Feature Request" --web
165
+ ```
166
+
167
+ ### CLI (non-interactive)
168
+
169
+ ````bash
170
+ gh issue create \
171
+ --title "feat(scope): concise description" \
172
+ --label "enhancement" \
173
+ --body "$(cat <<'ISSUE'
174
+ ### Use case
175
+
176
+ What problem does this solve? Who benefits?
177
+
178
+ ### Proposed behavior
179
+
180
+ Describe the expected behavior or API change.
181
+
182
+ ### Alternatives considered
183
+
184
+ What you tried or considered instead.
185
+ ISSUE
186
+ )"
187
+ ````
188
+
189
+ ## Triage: Framework vs Server
190
+
191
+ Not sure where the bug lives? Quick checks:
192
+
193
+ | Signal | Likely framework | Likely server |
194
+ |:-------|:-----------------|:--------------|
195
+ | Error originates in `node_modules/@cyanheads/mcp-ts-core/` | Yes | |
196
+ | Error in `src/mcp-server/tools/` or `src/services/` | | Yes |
197
+ | Same bug reproduces with a bare `tool()` definition (no services) | Yes | |
198
+ | Bug disappears when you swap in a dummy handler | | Yes |
199
+ | `ctx.state`, `ctx.log`, `ctx.elicit` behave wrong on any tool | Yes | |
200
+ | Only one specific tool/resource is affected | | Yes |
201
+
202
+ When genuinely ambiguous, file against this server's repo and note that it might be a framework issue. The maintainer can transfer it upstream.
203
+
204
+ ## Following Up
205
+
206
+ ```bash
207
+ # View issue details
208
+ gh issue view <number>
209
+
210
+ # Add context
211
+ gh issue comment <number> --body "Additional findings..."
212
+
213
+ # List your open issues
214
+ gh issue list --author @me
215
+
216
+ # Close if resolved
217
+ gh issue close <number> --reason completed --comment "Fixed in <commit or PR>"
218
+ ```
219
+
220
+ ## Checklist
221
+
222
+ - [ ] Confirmed bug is in server code, not the framework
223
+ - [ ] Searched existing issues — no duplicate found
224
+ - [ ] All secrets, credentials, PII, and internal URLs redacted
225
+ - [ ] Issue filed with: version, runtime, repro steps, actual vs expected behavior
@@ -35,6 +35,7 @@ What `init` actually creates:
35
35
  ```text
36
36
  CLAUDE.md # Agent protocol (project-specific)
37
37
  AGENTS.md # Same content — discard whichever you don't use
38
+ .github/ISSUE_TEMPLATE/ # GitHub issue templates (bug report, feature request)
38
39
  skills/ # Project skills (source of truth)
39
40
  src/
40
41
  index.ts # createApp() entry point
@@ -0,0 +1,106 @@
1
+ name: Bug Report
2
+ description: Report a bug in {{PACKAGE_NAME}}
3
+ labels: ["bug"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ **Do not include secrets, credentials, API keys, tokens, PII, or other sensitive data.** Redact env vars, auth headers, user-identifying information, and internal URLs from all code snippets, logs, and stack traces before submitting. GitHub issues are public and permanent.
9
+
10
+ - type: input
11
+ id: version
12
+ attributes:
13
+ label: Server version
14
+ placeholder: "0.1.0"
15
+ validations:
16
+ required: true
17
+
18
+ - type: input
19
+ id: framework-version
20
+ attributes:
21
+ label: mcp-ts-core version
22
+ placeholder: "0.1.29"
23
+ validations:
24
+ required: true
25
+
26
+ - type: dropdown
27
+ id: runtime
28
+ attributes:
29
+ label: Runtime
30
+ options:
31
+ - Bun
32
+ - Node.js
33
+ - Cloudflare Workers
34
+ validations:
35
+ required: true
36
+
37
+ - type: input
38
+ id: runtime-version
39
+ attributes:
40
+ label: Runtime version
41
+ placeholder: "Bun 1.2.x / Node 22.x"
42
+ validations:
43
+ required: true
44
+
45
+ - type: dropdown
46
+ id: transport
47
+ attributes:
48
+ label: Transport
49
+ options:
50
+ - stdio
51
+ - HTTP (Streamable HTTP)
52
+ - Worker (Cloudflare)
53
+ validations:
54
+ required: true
55
+
56
+ - type: input
57
+ id: os
58
+ attributes:
59
+ label: OS
60
+ placeholder: "macOS 15.x / Ubuntu 24.04 / etc."
61
+ validations:
62
+ required: false
63
+
64
+ - type: textarea
65
+ id: description
66
+ attributes:
67
+ label: Description
68
+ description: What happened and what you expected instead.
69
+ validations:
70
+ required: true
71
+
72
+ - type: textarea
73
+ id: reproduction
74
+ attributes:
75
+ label: Steps to reproduce
76
+ description: Exact inputs, tool calls, or sequence of actions to trigger the bug.
77
+ placeholder: |
78
+ 1. Call `tool_name` with input: `{ "key": "value" }`
79
+ 2. Observe error / wrong output
80
+ validations:
81
+ required: true
82
+
83
+ - type: textarea
84
+ id: actual
85
+ attributes:
86
+ label: Actual behavior
87
+ description: Error messages, stack traces, or incorrect output.
88
+ render: shell
89
+ validations:
90
+ required: true
91
+
92
+ - type: textarea
93
+ id: expected
94
+ attributes:
95
+ label: Expected behavior
96
+ description: What should have happened.
97
+ validations:
98
+ required: true
99
+
100
+ - type: textarea
101
+ id: context
102
+ attributes:
103
+ label: Additional context
104
+ description: Workarounds, related issues, logs, or anything else relevant.
105
+ validations:
106
+ required: false
@@ -0,0 +1 @@
1
+ blank_issues_enabled: false
@@ -0,0 +1,36 @@
1
+ name: Feature Request
2
+ description: Suggest a new feature or improvement for {{PACKAGE_NAME}}
3
+ labels: ["enhancement"]
4
+ body:
5
+ - type: textarea
6
+ id: use-case
7
+ attributes:
8
+ label: Use case
9
+ description: What problem does this solve? Who benefits?
10
+ validations:
11
+ required: true
12
+
13
+ - type: textarea
14
+ id: proposed-behavior
15
+ attributes:
16
+ label: Proposed behavior
17
+ description: Describe the expected behavior or API change. Include example code if possible.
18
+ render: typescript
19
+ validations:
20
+ required: true
21
+
22
+ - type: textarea
23
+ id: alternatives
24
+ attributes:
25
+ label: Alternatives considered
26
+ description: What you tried or considered instead, and why it fell short.
27
+ validations:
28
+ required: false
29
+
30
+ - type: textarea
31
+ id: context
32
+ attributes:
33
+ label: Additional context
34
+ description: Related issues, prior art, links, or anything else relevant.
35
+ validations:
36
+ required: false
@@ -227,6 +227,8 @@ Available skills:
227
227
  | `devcheck` | Lint, format, typecheck, audit |
228
228
  | `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
229
229
  | `maintenance` | Sync skills and dependencies after updates |
230
+ | `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` via `gh` CLI |
231
+ | `report-issue-local` | File a bug or feature request against this server's own repo via `gh` CLI |
230
232
  | `api-auth` | Auth modes, scopes, JWT/OAuth |
231
233
  | `api-config` | AppConfig, parseConfig, env vars |
232
234
  | `api-context` | Context interface, logger, state, progress |