@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.
- package/CLAUDE.md +19 -1
- package/README.md +18 -1
- package/biome.json +10 -0
- package/dist/linter/rules/tool-rules.js +10 -22
- package/dist/linter/rules/tool-rules.js.map +1 -1
- package/dist/testing/fuzz.d.ts +109 -0
- package/dist/testing/fuzz.d.ts.map +1 -0
- package/dist/testing/fuzz.js +558 -0
- package/dist/testing/fuzz.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/network/retry.d.ts +83 -0
- package/dist/utils/network/retry.d.ts.map +1 -0
- package/dist/utils/network/retry.js +152 -0
- package/dist/utils/network/retry.js.map +1 -0
- package/package.json +7 -3
- package/skills/add-service/SKILL.md +53 -0
- package/skills/api-utils/SKILL.md +1 -0
- package/skills/design-mcp-server/SKILL.md +37 -1
- package/skills/polish-docs-meta/SKILL.md +32 -8
- package/skills/report-issue-framework/SKILL.md +231 -0
- package/skills/report-issue-local/SKILL.md +225 -0
- package/skills/setup/SKILL.md +1 -0
- package/templates/.github/ISSUE_TEMPLATE/bug_report.yml +106 -0
- package/templates/.github/ISSUE_TEMPLATE/config.yml +1 -0
- package/templates/.github/ISSUE_TEMPLATE/feature_request.yml +36 -0
- package/templates/CLAUDE.md +2 -0
|
@@ -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
|
package/skills/setup/SKILL.md
CHANGED
|
@@ -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
|
package/templates/CLAUDE.md
CHANGED
|
@@ -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 |
|