---
summary: "Adopt @cyanheads/mcp-ts-core ^0.10.6 — server identity pair, MCPB bundle cleaner, root-anchored .mcpbignore, plus dep bumps and identity-consistency fixes."
breaking: false
security: false
---

# 2.1.1 — 2026-06-11

## Added

- **Server identity pair** — `createApp()` now sets explicit `name: 'ntfy-mcp-server'` / `title: 'ntfy-mcp-server'`, so `initialize` serverInfo and `/.well-known/mcp.json` carry the unscoped repo name instead of falling back to the npm-scoped package name. ([#231](https://github.com/cyanheads/mcp-ts-core/issues/231))
- **`scripts/clean-mcpb.ts`** — post-pack bundle cleaner wired into the `bundle` script: runs `mcpb clean` (dev-dependency prune + manifest validation), then strips `node_modules/**` agent-doc entries (`skills/`, `.claude/`, `.agents/`, `SKILL.md`) that root-anchored `.mcpbignore` patterns cannot reach, and asserts zero remain. ([#230](https://github.com/cyanheads/mcp-ts-core/issues/230))
- **`scripts/release-github.ts`** — creates/repairs the GitHub Release on the version tag, enforcing the `v<version>: <subject>` title format. ([#179](https://github.com/cyanheads/mcp-ts-core/issues/179))
- **`scripts/check-skill-versions.ts`** + devcheck `Skill Versions` gate — a `skills/<name>/SKILL.md` body change without a `metadata.version` bump surfaces as a warning. ([#99](https://github.com/cyanheads/mcp-ts-core/issues/99))
- **`coerce-boolean-env-flag` antipattern rule** — devcheck flags `z.coerce.boolean()` in `src/` (`Boolean("false") === true`); recommends `z.stringbool()`. ([#201](https://github.com/cyanheads/mcp-ts-core/issues/201))
- **`stdio`, `streamable-http`** added to `package.json` keywords.

## Changed

- **`.mcpbignore` patterns root-anchored** — dev-dir entries (`/skills/`, `/.claude/`, `/.agents/`, `/Dockerfile`, …) now carry a leading `/` so they cannot strip nested `node_modules` runtime paths. ([#207](https://github.com/cyanheads/mcp-ts-core/issues/207))
- **`.codex-plugin/plugin.json`** — `category` set to `developer tools` (was empty).
- **README MCP client config** — `mcpServers` key renamed `ntfy → ntfy-mcp-server` to match the server's display identity.
- **Framework** — `@cyanheads/mcp-ts-core` `^0.9.16 → ^0.10.6`. Notable across the range: `fetchWithTimeout` strips query-string secrets from error messages and logs ([#190](https://github.com/cyanheads/mcp-ts-core/issues/190)), the sampling surface (`ctx.sample`) was removed (unused here) and `createApp()` gained the `title`/`name` identity fields ([#220](https://github.com/cyanheads/mcp-ts-core/issues/220), [#213](https://github.com/cyanheads/mcp-ts-core/issues/213)), env-boolean flags parse via Zod `stringbool` ([#201](https://github.com/cyanheads/mcp-ts-core/issues/201)), and `lint:packaging` added post-bundle content and entrypoint-identity checks ([#230](https://github.com/cyanheads/mcp-ts-core/issues/230), [#231](https://github.com/cyanheads/mcp-ts-core/issues/231)).
- **`zod`** — declared as an explicit direct dependency at `^4.4.3` (was transitive via the framework).
- **Dev deps** — `@types/node` `^25.9.1 → ^25.9.3`, `vitest` `^4.1.7 → ^4.1.8`.
- **Skills** — re-synced from the framework, including new `skills/api-mirror/`, `skills/orchestrations/`, and `skills/techniques/`.
