---
summary: "mcp-ts-core ^0.12.3 (strict inputs, 2020-12 schemas, resource subscriptions), battery/display parsing fixes, community-health docs"
breaking: false
security: false
---

# 0.1.5 — 2026-08-22

## Added

- **`bunfig.toml`** — `minimumReleaseAge` supply-chain guard (3 days, `@cyanheads/mcp-ts-core` excluded) and `@socketsecurity/bun-security-scanner` as the install-time scanner
- **`scripts/check-dependency-specifiers.ts`** — devcheck step rejecting floating `latest`/`*`/pre-release dist-tags in `package.json` dependency sections and `bun.lock`'s workspace map
- **`.github/SECURITY.md`**, **`.github/CONTRIBUTING.md`**, **`.github/CODE_OF_CONDUCT.md`** — community-health docs
- **`.gitattributes`** — normalizes line endings and marks generated files (`bun.lock`, `CHANGELOG.md`, `docs/tree.md`) as linguist-generated

## Changed

- **`@cyanheads/mcp-ts-core`** `^0.10.6` → `^0.12.3` — crosses the 0.12.0 SDK-v2 window; `@modelcontextprotocol/sdk` is replaced by `@modelcontextprotocol/server` `^2.0.0`
- Tool arguments are now strict — an argument key a tool's schema doesn't declare is rejected by name instead of silently dropped, and `inputSchema` advertises `additionalProperties: false`
- Advertised JSON Schema is 2020-12, not draft-07
- `outputSchema` now declares the error envelope, so a client that validates `structuredContent` without checking `isError` no longer rejects error results
- Protocol revision 2026-07-28 is served on the HTTP endpoint alongside the 2025 revisions
- `resources: { subscribe: true }` and the `logging` capability are now advertised and backed
- **Dev tooling**: TypeScript `^6.0.3` → `^7.0.2`, Vitest `^4.1.8` → `^4.1.11`, Biome `^2.5.0` → `^2.5.9`

## Fixed

- **`macos_get_info` / `macos://system/info`**: a `discharging` battery reported `charging: true` — `charging` matched the substring `charging`, which `discharging` also contains; now a word-boundary match
- **`macos_get_info`**: `format()` labeled every non-charging state "on battery," including a fully charged battery on AC — the label now checks `power_source` and adds a distinct "not charging" state ([#6](https://github.com/cyanheads/macos-mcp-server/issues/6))
- **`macos_manage_displays` / `macos://displays`**: `current_config` captured displayplacer's example rotation command instead of the real current arrangement — the parser now takes the last `displayplacer "..."` match in the output, not the first
- **`macos_manage_displays` / `macos://displays`**: `origin` and `rotation` values carried displayplacer's trailing ` - <note>` annotation (e.g. `(0,0) - main display`) — now stripped
