---
summary: "Adopts @cyanheads/mcp-ts-core ^0.9.1: URL string fields drop `format: uri` for OpenAI/Gemini portability, server `instructions` field added, devcheck `bun outdated` parser fixed."
breaking: false
security: false
---

# 2.0.1 — 2026-05-16

Adopts `@cyanheads/mcp-ts-core` ^0.9.1, including the new `schema-format-portability` linter rule. URL-shaped tool inputs are switched from `z.url()` to `z.string()` with absolute-URL annotations in `.describe()` so OpenAI's tool validator (which hard-rejects `format: "uri"`) and Gemini accept the schema. Adds a server-level `instructions` string that orients the model on every `initialize`.

## Added

- **Server `instructions`** (`src/index.ts`) — one-paragraph orientation forwarded to the model on every `initialize`. Names the tool surface, the typical flow (`ntfy_publish_message` → `ntfy_fetch_messages` → `ntfy_manage_message`), and flags topic names as access tokens. Uses the framework's new `instructions` option introduced in mcp-ts-core 0.9.x.

## Changed

- **URL-shaped tool inputs** — `base_url` (`ntfy_publish_message`, `ntfy_manage_message`, `ntfy_fetch_messages`), `attach`, `icon`, and the `http` action's `url` switched from `z.url()` to `z.string()` with the absolute-URL constraint moved into `.describe()` text. Required by the new `schema-format-portability` lint rule — OpenAI's tool validator hard-rejects `format: "uri"`, which silently dropped these tools from the catalog. No runtime behavior change; ntfy still validates URLs server-side.
- **Dependencies** — `@cyanheads/mcp-ts-core` `^0.8.20 → ^0.9.1`, `@biomejs/biome` `^2.4.14 → ^2.4.15`, `@types/node` `^25.6.2 → ^25.8.0`, `vitest` `^4.1.5 → ^4.1.6`.
- **Changelog summary cap** — soft cap raised from 250 → 350 chars in `changelog/template.md` and `scripts/build-changelog.ts` to match upstream.

## Fixed

- **`scripts/devcheck.ts`** — `bun outdated` switched to markdown-style table output (leading `|`), so `split('|')[0]` produced an empty cell and the allowlist match silently failed. Now reads from `[1]` and strips the `(dev|peer|prod|optional)` workspace-type marker before lookup.
