@cyanheads/mcp-ts-core 0.6.8 → 0.6.10

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.
Files changed (85) hide show
  1. package/CLAUDE.md +3 -3
  2. package/README.md +2 -2
  3. package/changelog/0.6.x/0.6.10.md +21 -0
  4. package/changelog/0.6.x/0.6.9.md +21 -0
  5. package/dist/core/serverManifest.d.ts +12 -0
  6. package/dist/core/serverManifest.d.ts.map +1 -1
  7. package/dist/core/serverManifest.js +25 -0
  8. package/dist/core/serverManifest.js.map +1 -1
  9. package/dist/linter/rules/landing-rules.d.ts.map +1 -1
  10. package/dist/linter/rules/landing-rules.js +1 -20
  11. package/dist/linter/rules/landing-rules.js.map +1 -1
  12. package/dist/logs/combined.log +4 -0
  13. package/dist/logs/error.log +4 -0
  14. package/dist/logs/interactions.log +0 -0
  15. package/dist/mcp-server/transports/http/httpTransport.js +1 -1
  16. package/dist/mcp-server/transports/http/httpTransport.js.map +1 -1
  17. package/dist/mcp-server/transports/http/landing-page/assets/copy-script.d.ts +11 -0
  18. package/dist/mcp-server/transports/http/landing-page/assets/copy-script.d.ts.map +1 -0
  19. package/dist/mcp-server/transports/http/landing-page/assets/copy-script.js +36 -0
  20. package/dist/mcp-server/transports/http/landing-page/assets/copy-script.js.map +1 -0
  21. package/dist/mcp-server/transports/http/landing-page/assets/styles.d.ts +21 -0
  22. package/dist/mcp-server/transports/http/landing-page/assets/styles.d.ts.map +1 -0
  23. package/dist/mcp-server/transports/http/landing-page/assets/styles.js +921 -0
  24. package/dist/mcp-server/transports/http/landing-page/assets/styles.js.map +1 -0
  25. package/dist/mcp-server/transports/http/landing-page/handler.d.ts +32 -0
  26. package/dist/mcp-server/transports/http/landing-page/handler.d.ts.map +1 -0
  27. package/dist/mcp-server/transports/http/landing-page/handler.js +92 -0
  28. package/dist/mcp-server/transports/http/landing-page/handler.js.map +1 -0
  29. package/dist/mcp-server/transports/http/landing-page/index.d.ts +27 -0
  30. package/dist/mcp-server/transports/http/landing-page/index.d.ts.map +1 -0
  31. package/dist/mcp-server/transports/http/landing-page/index.js +27 -0
  32. package/dist/mcp-server/transports/http/landing-page/index.js.map +1 -0
  33. package/dist/mcp-server/transports/http/landing-page/primitives.d.ts +19 -0
  34. package/dist/mcp-server/transports/http/landing-page/primitives.d.ts.map +1 -0
  35. package/dist/mcp-server/transports/http/landing-page/primitives.js +38 -0
  36. package/dist/mcp-server/transports/http/landing-page/primitives.js.map +1 -0
  37. package/dist/mcp-server/transports/http/landing-page/render.d.ts +16 -0
  38. package/dist/mcp-server/transports/http/landing-page/render.d.ts.map +1 -0
  39. package/dist/mcp-server/transports/http/landing-page/render.js +57 -0
  40. package/dist/mcp-server/transports/http/landing-page/render.js.map +1 -0
  41. package/dist/mcp-server/transports/http/landing-page/sections/connect.d.ts +19 -0
  42. package/dist/mcp-server/transports/http/landing-page/sections/connect.d.ts.map +1 -0
  43. package/dist/mcp-server/transports/http/landing-page/sections/connect.js +130 -0
  44. package/dist/mcp-server/transports/http/landing-page/sections/connect.js.map +1 -0
  45. package/dist/mcp-server/transports/http/landing-page/sections/extensions.d.ts +10 -0
  46. package/dist/mcp-server/transports/http/landing-page/sections/extensions.d.ts.map +1 -0
  47. package/dist/mcp-server/transports/http/landing-page/sections/extensions.js +30 -0
  48. package/dist/mcp-server/transports/http/landing-page/sections/extensions.js.map +1 -0
  49. package/dist/mcp-server/transports/http/landing-page/sections/footer.d.ts +12 -0
  50. package/dist/mcp-server/transports/http/landing-page/sections/footer.d.ts.map +1 -0
  51. package/dist/mcp-server/transports/http/landing-page/sections/footer.js +49 -0
  52. package/dist/mcp-server/transports/http/landing-page/sections/footer.js.map +1 -0
  53. package/dist/mcp-server/transports/http/landing-page/sections/head.d.ts +11 -0
  54. package/dist/mcp-server/transports/http/landing-page/sections/head.d.ts.map +1 -0
  55. package/dist/mcp-server/transports/http/landing-page/sections/head.js +68 -0
  56. package/dist/mcp-server/transports/http/landing-page/sections/head.js.map +1 -0
  57. package/dist/mcp-server/transports/http/landing-page/sections/hero.d.ts +12 -0
  58. package/dist/mcp-server/transports/http/landing-page/sections/hero.d.ts.map +1 -0
  59. package/dist/mcp-server/transports/http/landing-page/sections/hero.js +48 -0
  60. package/dist/mcp-server/transports/http/landing-page/sections/hero.js.map +1 -0
  61. package/dist/mcp-server/transports/http/landing-page/sections/prompts.d.ts +11 -0
  62. package/dist/mcp-server/transports/http/landing-page/sections/prompts.d.ts.map +1 -0
  63. package/dist/mcp-server/transports/http/landing-page/sections/prompts.js +48 -0
  64. package/dist/mcp-server/transports/http/landing-page/sections/prompts.js.map +1 -0
  65. package/dist/mcp-server/transports/http/landing-page/sections/resources.d.ts +10 -0
  66. package/dist/mcp-server/transports/http/landing-page/sections/resources.d.ts.map +1 -0
  67. package/dist/mcp-server/transports/http/landing-page/sections/resources.js +44 -0
  68. package/dist/mcp-server/transports/http/landing-page/sections/resources.js.map +1 -0
  69. package/dist/mcp-server/transports/http/landing-page/sections/status-strip.d.ts +18 -0
  70. package/dist/mcp-server/transports/http/landing-page/sections/status-strip.d.ts.map +1 -0
  71. package/dist/mcp-server/transports/http/landing-page/sections/status-strip.js +71 -0
  72. package/dist/mcp-server/transports/http/landing-page/sections/status-strip.js.map +1 -0
  73. package/dist/mcp-server/transports/http/landing-page/sections/tools.d.ts +13 -0
  74. package/dist/mcp-server/transports/http/landing-page/sections/tools.d.ts.map +1 -0
  75. package/dist/mcp-server/transports/http/landing-page/sections/tools.js +130 -0
  76. package/dist/mcp-server/transports/http/landing-page/sections/tools.js.map +1 -0
  77. package/package.json +5 -5
  78. package/skills/polish-docs-meta/references/package-meta.md +1 -1
  79. package/skills/release-and-publish/SKILL.md +150 -0
  80. package/skills/setup/SKILL.md +64 -14
  81. package/dist/mcp-server/transports/http/landing-page.d.ts +0 -48
  82. package/dist/mcp-server/transports/http/landing-page.d.ts.map +0 -1
  83. package/dist/mcp-server/transports/http/landing-page.js +0 -1621
  84. package/dist/mcp-server/transports/http/landing-page.js.map +0 -1
  85. package/skills/release/SKILL.md +0 -142
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/mcp-ts-core",
3
- "version": "0.6.8",
3
+ "version": "0.6.10",
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",
@@ -146,7 +146,7 @@
146
146
  "audit:fix": "bun audit --fix",
147
147
  "changelog:build": "bun run scripts/build-changelog.ts",
148
148
  "changelog:check": "bun run scripts/build-changelog.ts --check",
149
- "publish-mcp": "bunx mcp-publisher publish"
149
+ "publish-mcp": "mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish"
150
150
  },
151
151
  "resolutions": {
152
152
  "brace-expansion": "1.1.14",
@@ -160,7 +160,7 @@
160
160
  },
161
161
  "devDependencies": {
162
162
  "@biomejs/biome": "2.4.12",
163
- "@cloudflare/workers-types": "^4.20260422.1",
163
+ "@cloudflare/workers-types": "^4.20260423.1",
164
164
  "@hono/otel": "^1.1.1",
165
165
  "@opentelemetry/instrumentation-http": "^0.215.0",
166
166
  "@opentelemetry/exporter-metrics-otlp-http": "^0.215.0",
@@ -171,7 +171,7 @@
171
171
  "@opentelemetry/sdk-node": "^0.215.0",
172
172
  "@opentelemetry/sdk-trace-node": "^2.7.0",
173
173
  "@opentelemetry/semantic-conventions": "^1.40.0",
174
- "@supabase/supabase-js": "^2.104.0",
174
+ "@supabase/supabase-js": "^2.104.1",
175
175
  "@types/bun": "^1.3.13",
176
176
  "@types/js-yaml": "^4.0.9",
177
177
  "@types/node": "^25.6.0",
@@ -202,7 +202,7 @@
202
202
  "typescript": "^6.0.3",
203
203
  "unpdf": "^1.6.0",
204
204
  "validator": "^13.15.35",
205
- "vite": "8.0.9",
205
+ "vite": "8.0.10",
206
206
  "vitest": "^4.1.5"
207
207
  },
208
208
  "keywords": [
@@ -7,7 +7,7 @@ Fields that may still be empty or generic from scaffolding. Check each one and f
7
7
  | Field | Default / Scaffolded | What It Should Be |
8
8
  |:------|:---------------------|:------------------|
9
9
  | `name` | `{{PACKAGE_NAME}}` (substituted by init) | Verify it's correct. Use scoped name if publishing (`@org/my-server`). |
10
- | `version` | `0.1.0` | Keep for initial development. Bump via the `release` skill. |
10
+ | `version` | `0.1.0` | Keep for initial development. Bump via the `release-and-publish` skill. |
11
11
  | `mcpName` | _(often missing)_ | Reverse-domain identifier: `"io.github.{owner}/{repo}"`. Used in `server.json` `name` field and Dockerfile OCI labels. |
12
12
  | `description` | `""` (empty) | One sentence: what the server does and what it wraps. Appears on npm and in `npm search`. |
13
13
  | `repository` | _(often missing)_ | `{ "type": "git", "url": "git+https://github.com/org/repo.git" }` |
@@ -0,0 +1,150 @@
1
+ ---
2
+ name: release-and-publish
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. Halts and alerts the user on the first failure.
5
+ metadata:
6
+ author: cyanheads
7
+ version: "2.0"
8
+ audience: external
9
+ type: workflow
10
+ ---
11
+
12
+ ## Preconditions
13
+
14
+ This skill runs **after** git wrapup. By the time it's invoked:
15
+
16
+ - `package.json` version is bumped
17
+ - `changelog/<major.minor>.x/<version>.md` is authored
18
+ - `CHANGELOG.md` is regenerated
19
+ - README and every version-bearing file is in sync
20
+ - Release commit (`chore: release v<version>`) exists
21
+ - Annotated tag (`v<version>`) exists locally
22
+ - Working tree is clean
23
+
24
+ If any are missing, halt and tell the user to finish wrapup first. Do not attempt to redo wrapup work from inside this skill.
25
+
26
+ ## Failure Protocol
27
+
28
+ **Stop on the first non-zero exit.** No retries, no remediation from inside the skill. Report to the user:
29
+
30
+ 1. Which step failed
31
+ 2. The exact error output
32
+ 3. Which destinations already received the release (npm published? tag pushed? etc.) so they know the partial state
33
+
34
+ The user fixes locally and re-invokes, or runs the remaining steps manually. Publishes hard-fail with "version already exists" if replayed — that's the signal the step already succeeded.
35
+
36
+ ## Steps
37
+
38
+ ### 1. Sanity-check wrapup outputs
39
+
40
+ Read `package.json` → capture `version`. Then verify:
41
+
42
+ ```bash
43
+ git status --porcelain # must be empty — clean working tree
44
+ git describe --exact-match --tags HEAD 2>&1 # must equal v<version>
45
+ git rev-parse --abbrev-ref HEAD # note the branch name for step 3
46
+ ```
47
+
48
+ If working tree is dirty or HEAD isn't on `v<version>`, halt.
49
+
50
+ ### 2. Run the verification gate
51
+
52
+ All three must succeed. Use `test:all` if the script exists in `package.json`, otherwise fall back to `test`:
53
+
54
+ ```bash
55
+ bun run devcheck
56
+ bun run rebuild
57
+ bun run test:all # or `bun run test` if no test:all
58
+ ```
59
+
60
+ Any non-zero exit → halt with the failing command's output.
61
+
62
+ ### 3. Push to origin
63
+
64
+ ```bash
65
+ git push
66
+ git push --tags
67
+ ```
68
+
69
+ If the remote rejects either push, halt.
70
+
71
+ ### 4. Publish to npm
72
+
73
+ ```bash
74
+ bun publish --access public
75
+ ```
76
+
77
+ `bun publish` uses whatever npm auth the user has configured in `~/.npmrc`. If 2FA is enabled on the npm account, the command will prompt for an OTP or open a browser — that's expected; the user completes it interactively.
78
+
79
+ **Friction reducers (optional, configure once):**
80
+
81
+ | Option | How |
82
+ |:--|:--|
83
+ | **npm granular access token** with "Bypass 2FA for publish" | Generate at npmjs.com → replace `_authToken` in `~/.npmrc` → no OTP prompt at all |
84
+ | **1Password CLI TOTP injection** (requires `brew install --cask 1password-cli` + signed-in `op`) | `bun publish --access public --otp="$(op item get 'npm' --otp)"` |
85
+
86
+ Halt on publish error other than "version already exists" (which means this step already ran).
87
+
88
+ ### 5. Publish to MCP Registry
89
+
90
+ Only if `server.json` exists at the repo root (otherwise skip).
91
+
92
+ ```bash
93
+ bun run publish-mcp
94
+ ```
95
+
96
+ If `publish-mcp` isn't defined in `package.json`, add it (macOS):
97
+
98
+ ```json
99
+ "publish-mcp": "mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish"
100
+ ```
101
+
102
+ Prereq: a GitHub PAT with `read:org` + `read:user` scopes stored in Keychain under the service name `mcp-publisher-github-pat`:
103
+
104
+ ```bash
105
+ security add-generic-password -a "$USER" -s mcp-publisher-github-pat -w
106
+ # paste PAT at the silent prompt
107
+ ```
108
+
109
+ Halt on any publisher error other than "cannot publish duplicate version".
110
+
111
+ ### 6. Publish Docker image
112
+
113
+ Only if `Dockerfile` exists at the repo root (otherwise skip).
114
+
115
+ Derive:
116
+
117
+ - `OWNER/REPO` from `git remote get-url origin` (strip `.git`, handle both `https://github.com/<owner>/<repo>` and `git@github.com:<owner>/<repo>` forms)
118
+ - `VERSION` from `package.json` (step 1)
119
+
120
+ ```bash
121
+ docker buildx build --platform linux/amd64,linux/arm64 \
122
+ -t ghcr.io/<OWNER>/<REPO>:<VERSION> \
123
+ -t ghcr.io/<OWNER>/<REPO>:latest \
124
+ --push .
125
+ ```
126
+
127
+ If the project uses a non-GHCR registry or a custom image name, respect the project's convention. Halt on build or push failure.
128
+
129
+ ### 7. Report the deployed artifacts
130
+
131
+ Print clickable URLs for every destination that succeeded:
132
+
133
+ - npm: `https://www.npmjs.com/package/<package.json#name>/v/<version>`
134
+ - MCP Registry: `https://registry.modelcontextprotocol.io/v0/servers?search=<package.json#mcpName>`
135
+ - GHCR: `ghcr.io/<OWNER>/<REPO>:<VERSION>`
136
+
137
+ Skip any destination that was skipped in its step.
138
+
139
+ ## Checklist
140
+
141
+ - [ ] Working tree clean; HEAD tagged `v<version>`
142
+ - [ ] `bun run devcheck` passes
143
+ - [ ] `bun run rebuild` succeeds
144
+ - [ ] `bun run test:all` (or `test`) passes
145
+ - [ ] `git push` succeeds
146
+ - [ ] `git push --tags` succeeds
147
+ - [ ] `bun publish --access public` succeeds
148
+ - [ ] `bun run publish-mcp` succeeds (if `server.json` present)
149
+ - [ ] Docker buildx multi-arch push succeeds (if `Dockerfile` present)
150
+ - [ ] Deployed artifact URLs reported to the user
@@ -4,7 +4,7 @@ description: >
4
4
  Post-init orientation for an MCP server built on @cyanheads/mcp-ts-core. Use after running `@cyanheads/mcp-ts-core init` to understand the project structure, conventions, and skill sync model. Also use when onboarding to an existing project for the first time.
5
5
  metadata:
6
6
  author: cyanheads
7
- version: "1.4"
7
+ version: "1.5"
8
8
  audience: external
9
9
  type: workflow
10
10
  ---
@@ -29,19 +29,39 @@ For the full framework API, read `node_modules/@cyanheads/mcp-ts-core/CLAUDE.md`
29
29
  What `init` actually creates:
30
30
 
31
31
  ```text
32
- CLAUDE.md # Agent protocol (project-specific)
33
- AGENTS.md # Alternate agent protocol file keep the one your agent uses
34
- .github/ISSUE_TEMPLATE/ # GitHub issue templates (bug report, feature request)
35
- skills/ # Project skills (source of truth)
32
+ CLAUDE.md # Agent protocol — Claude Code
33
+ AGENTS.md # Agent protocol — other agents (Codex, Cursor, etc.)
34
+ package.json # Starter deps + scripts (placeholders substituted on init)
35
+ tsconfig.json # TypeScript config
36
+ tsconfig.build.json # Build-only TS config
37
+ vitest.config.ts # Test runner config
38
+ biome.json # Lint + format config
39
+ devcheck.config.json # Which devcheck steps to run
40
+ Dockerfile # Starter multi-stage image
41
+ .dockerignore
42
+ .env.example # Copy to .env and fill in
43
+ .gitignore
44
+ .github/ISSUE_TEMPLATE/ # Bug / feature-request issue forms
45
+ .vscode/ # Recommended extensions + editor settings
46
+ server.json # MCP Registry publishing metadata
47
+ changelog/template.md # Format reference for per-version changelog files
48
+ scripts/ # build, clean, devcheck, lint-mcp, build-changelog, tree, check-docs-sync
49
+ skills/ # External skills copied from the package (source of truth)
36
50
  src/
37
51
  index.ts # createApp() entry point
38
52
  mcp-server/
39
53
  tools/definitions/
40
- echo.tool.ts # Echo tool (starter — replace when ready)
54
+ echo.tool.ts # Standard tool starter
55
+ echo-app.app-tool.ts # UI-enabled app tool starter (pairs with echo-app-ui resource)
41
56
  resources/definitions/
42
- echo.resource.ts # Echo resource (starter — replace when ready)
57
+ echo.resource.ts # Standard resource starter
58
+ echo-app-ui.app-resource.ts # UI resource paired with echo-app app tool
43
59
  prompts/definitions/
44
- echo.prompt.ts # Echo prompt (starter — replace when ready)
60
+ echo.prompt.ts # Prompt starter
61
+ tests/
62
+ tools/echo.tool.test.ts # Starter tests (one per echo definition)
63
+ resources/echo.resource.test.ts
64
+ prompts/echo.prompt.test.ts
45
65
  ```
46
66
 
47
67
  Add these as needed:
@@ -59,11 +79,24 @@ src/
59
79
 
60
80
  ## Scaffolded Echo Definitions
61
81
 
62
- The init creates echo definitions for tools, resources, and prompts. They're functional examples with inline comments explaining conventions. After init:
82
+ The init creates five echo definitions plus matching starter tests:
63
83
 
64
- 1. Clean up what you don't need. If your server has no prompts, the echo prompt definition and its registration in `src/index.ts` can go. Same for resources.
65
- 2. Rename and replace what you keep. The echo definitions show the pattern — swap them out for your real tools/resources/prompts.
66
- 3. Definitions register directly in `src/index.ts`. No barrel files, just import and add to the arrays.
84
+ | File | Demonstrates |
85
+ |:--|:--|
86
+ | `echo.tool.ts` | Standard MCP tool: input/output Zod schemas, `handler`, `format` |
87
+ | `echo-app.app-tool.ts` | MCP App tool — same as a tool, but emits a UI (`ui_app://` link) for clients that render MCP Apps |
88
+ | `echo.resource.ts` | Standard MCP resource with a parameterised URI template |
89
+ | `echo-app-ui.app-resource.ts` | UI resource served to MCP App clients; paired with `echo-app.app-tool.ts` |
90
+ | `echo.prompt.ts` | Prompt template (pure message generator) |
91
+ | `tests/**/echo.*.test.ts` | Starter tests using `createMockContext` — edit alongside the definitions |
92
+
93
+ After init:
94
+
95
+ 1. **Clean up what you don't need.** If your server has no prompts, delete the echo prompt and its registration in `src/index.ts`. Same for resources, or the app-tool pair if you're not targeting UI-capable clients.
96
+ 2. **Rename and replace what you keep.** The echo definitions and their tests show the pattern — swap them out for your real tools/resources/prompts.
97
+ 3. **Definitions register directly in `src/index.ts`.** No barrel files, just import and add to the `tools` / `resources` / `prompts` arrays.
98
+
99
+ See the `add-tool`, `add-app-tool`, `add-resource`, `add-prompt`, and `add-test` skills for the scaffolding patterns when you start adding real definitions.
67
100
 
68
101
  ## Conventions
69
102
 
@@ -71,7 +104,7 @@ The init creates echo definitions for tools, resources, and prompts. They're fun
71
104
  |:-----------|:-----|
72
105
  | File names | kebab-case |
73
106
  | Tool/resource/prompt names | snake_case, prefixed with server name (e.g. `tasks_fetch_list`) |
74
- | File suffixes | `.tool.ts`, `.resource.ts`, `.prompt.ts` |
107
+ | File suffixes | `.tool.ts`, `.resource.ts`, `.prompt.ts`, `.app-tool.ts` (UI-enabled), `.app-resource.ts` (paired UI resource) |
75
108
  | Imports (framework) | `@cyanheads/mcp-ts-core` and subpaths |
76
109
  | Imports (server code) | `@/` path alias for `src/` |
77
110
 
@@ -97,6 +130,23 @@ After `bun install`, complete these one-time setup tasks:
97
130
  2. **Initialize git** — `git init && git add -A && git commit -m "chore: scaffold from @cyanheads/mcp-ts-core"`
98
131
  3. **Verify agent protocol placeholders** — if the `init` CLI was run without a `[name]` argument, `{{PACKAGE_NAME}}` may remain as a literal in `CLAUDE.md`/`AGENTS.md` and `package.json`. Replace it with the actual server name.
99
132
 
133
+ ## Changelog Convention
134
+
135
+ `changelog/template.md` ships as a **format reference** — never edit, rename, or move it. For each release, author a per-version file at `changelog/<major.minor>.x/<version>.md` (e.g. `changelog/0.1.x/0.1.0.md`) with YAML frontmatter (`summary:` + optional `breaking:`) and grouped sections (Added / Changed / Fixed / Removed). Then regenerate the rollup with `bun run changelog:build` — `CHANGELOG.md` is an auto-generated navigation index, never hand-edited. See the `release-and-publish` skill for the full release flow.
136
+
137
+ ## Next Steps
138
+
139
+ The included skills form a rough progression — not a rigid sequence, but the typical flow through a new server:
140
+
141
+ 1. **`design-mcp-server`** — map the domain into tools, resources, and services before writing any definitions
142
+ 2. **`add-tool`** / **`add-app-tool`** / **`add-resource`** / **`add-prompt`** / **`add-service`** — scaffold each piece as you go
143
+ 3. **`add-test`** — pair tests with each definition (or retrofit later)
144
+ 4. **`field-test`** — exercise the built surface with real and adversarial inputs; produces a report of issues and pain points
145
+ 5. **`polish-docs-meta`** — finalize README, metadata, and agent protocol before shipping
146
+ 6. **`maintenance`** — after `bun update --latest`, investigate upstream changelogs and re-sync skills
147
+
148
+ Skip or reorder as the project calls for it. The agent protocol's "What's Next?" section is the authoritative map once the first session is over.
149
+
100
150
  ## Checklist
101
151
 
102
152
  - [ ] Agent protocol file selected — keep one authoritative file (`CLAUDE.md` or `AGENTS.md`)
@@ -106,4 +156,4 @@ After `bun install`, complete these one-time setup tasks:
106
156
  - [ ] Skills copied to agent directory (`cp -R skills/* .claude/skills/` or equivalent)
107
157
  - [ ] Project structure understood (definitions directories, entry point)
108
158
  - [ ] `bun run devcheck` passes
109
- - [ ] If new server: proceed to `design-mcp-server` skill to plan the tool surface
159
+ - [ ] Next: if new server, move on to `design-mcp-server` to plan the tool surface
@@ -1,48 +0,0 @@
1
- /**
2
- * @fileoverview HTML landing page served at `GET /`. Self-contained,
3
- * zero-dependency renderer producing a branded, a11y-conscious,
4
- * `prefers-color-scheme`-aware page from the shared `ServerManifest`.
5
- *
6
- * The page is the human-facing sibling of `/mcp` (bespoke JSON) and
7
- * `/.well-known/mcp.json` (SEP-1649 Server Card). Framework owns the design
8
- * system; servers supply content through `LandingConfig`.
9
- *
10
- * ## Surfaces
11
- *
12
- * - Hero — eyebrow, display-size server name, version + pre-release chips,
13
- * tagline, single-line status strip, terminal-chrome connection card,
14
- * framework attribution pill
15
- * - Tools section — responsive 2-column card grid; prefix-grouped; per-card
16
- * annotation chips, invocation snippet, view-source link, schema preview
17
- * - Resources section — URI template, mime type, description, view-source link
18
- * - Prompts section — args list, view-source link
19
- * - Extensions section — rendered when SEP-2133 extensions are present
20
- * - Footer — single-row, dim, separator-dot delimited
21
- *
22
- * @module src/mcp-server/transports/http/landing-page
23
- */
24
- import type { Context } from 'hono';
25
- import type { ServerManifest } from '../../../core/serverManifest.js';
26
- /**
27
- * Render the full landing page. `baseUrl` is the request origin
28
- * (e.g. `https://pubmed.example.com`) — used in connect snippets and OG meta.
29
- * `degraded` reduces the body when `requireAuth` gates unauth callers.
30
- */
31
- export declare function renderLandingPage(manifest: ServerManifest, baseUrl: string, degraded?: boolean): string;
32
- /**
33
- * Factory for the `GET /` route handler.
34
- *
35
- * Cache behavior and body shape depend on `manifest.landing.requireAuth`:
36
- *
37
- * | `requireAuth` | Authenticated | Unauthenticated |
38
- * |:---|:---|:---|
39
- * | `false` (default) | full page · `Cache-Control: public, max-age=60` | full page · same |
40
- * | `true` | full page · `Cache-Control: private, max-age=60` · `Vary: Authorization` | reduced hero-only page · same cache headers |
41
- *
42
- * The check is header-presence based — we don't validate the bearer token
43
- * here (that's the MCP endpoint's job). If a caller presents any Authorization
44
- * header, the full inventory renders; if not, they see a stub and a pointer
45
- * to the docs link when available.
46
- */
47
- export declare function createLandingPageHandler(manifest: ServerManifest): (c: Context) => Response;
48
- //# sourceMappingURL=landing-page.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"landing-page.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/transports/http/landing-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,KAAK,EAKV,cAAc,EACf,MAAM,0BAA0B,CAAC;AAwlDlC;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,MAAM,EACf,QAAQ,UAAQ,GACf,MAAM,CAmCR;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,cAAc,IACvD,GAAG,OAAO,KAAG,QAAQ,CA+B9B"}