Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 42 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,47 @@ All notable changes to DevHarbor are documented here. The format is based on
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
## [1.2.0] - 2026-07-11

### Added
- **MCP server (F22)** - an opt-in, localhost-only HTTP server that exposes DevHarbor to MCP
clients (coding agents), so an assistant can manage your dev servers through DevHarbor
rather than running them in its own shell. 22 tools cover listing, adding, updating, and
removing apps; adding and removing tasks; starting, stopping, and restarting apps and
individual tasks; reading and searching logs; inspecting ports, run history, and Node
versions; reading and setting env vars; scanning a folder for projects; and configuring
readiness probes. Off by default. When on, it binds
`127.0.0.1` only, validates the `Host`/`Origin` on every request, and requires a bearer
token by default. Stored secret env values are masked in env responses and redacted from
log output. Configure it under Settings -> MCP server (enable, port, token, and
copy-paste client config). See `specs/07-mcp-server.md`.
- **Monorepos over MCP** - `add_app` accepts `workspaceTasks: true` to register a monorepo
once with one task per workspace package (pnpm/yarn/npm workspaces, same detection as the
UI), each running its own dev script from its own directory; registering a monorepo
without the flag returns the detected packages and says how to get per-service tasks.
New `add_task` and `remove_task` tools let an agent shape the task set itself: per-task
working directory, `dependsOn` ordering (migrate, then api, then web), and `oneShot` for
run-to-completion tasks (defaults to exit-code readiness so dependents wait).
- **MCP over HTTPS** - optional TLS for the MCP server using a self-signed localhost
certificate that DevHarbor generates on first use (Settings -> MCP server -> Use HTTPS;
the certificate path is shown for client trust, e.g. `NODE_EXTRA_CA_CERTS`).
- **Honest readiness over MCP** - a task with no readiness probe reports `ready: null`
(unknown) instead of a vacuous `true`; a factual `listening` flag says whether ports are
open, separate from verified `ready`; start results carry `readinessVerified` plus the
task's recent output, wait for the port set to stabilize so slow-binding siblings in a
monorepo are captured inline, and label every port with the process that owns it. The new
`set_readiness` tool lets an agent configure a port/log/http/delay probe so
`readinessVerified` becomes achievable for slow-booting services.
- **HTTP readiness probes** - a new readiness kind polls a `/health` or `/ready` URL until
it returns success, so a service that opens its port before its database/cache connect is
reported ready only when it can actually serve. Configurable in the task editor and, over
MCP, via `set_readiness`.
- **Live UI updates from MCP** - when the MCP server adds, updates, removes, starts, or stops
an app, the desktop reflects it immediately (previously it needed a manual reload).

### Changed
- Softened the "auth off" note in Settings -> MCP server: it is now an informational note
sized to a single-user desktop, not a red danger banner.

## [1.1.0] - 2026-06-14

Expand Down Expand Up @@ -117,7 +157,7 @@ First public preview. macOS-only (Apple Silicon).
- Dashboard control room, folder organization, and a ⌘K command palette.
- Local-only storage (SQLite). No accounts, no telemetry.

[Unreleased]: https://github.com/jainath/devharbor/compare/v1.1.0...HEAD
[1.2.0]: https://github.com/jainath/devharbor/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/jainath/devharbor/compare/v1.0.1...v1.1.0
[1.0.1]: https://github.com/jainath/devharbor/compare/v1.0.0...v1.0.1
[1.0.0]: https://github.com/jainath/devharbor/compare/v0.1.0...v1.0.0
Expand Down
45 changes: 45 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,50 @@ Website: [www.devharbor.app](https://www.devharbor.app)
**encrypted at rest** (macOS Keychain). Your settings always win over a repo's `.env`.
- **Keyboard-first** - ⌘K palette, folders/tags, dashboard with live CPU/memory, per-app
auto-start + launch at login, signed/notarized builds with auto-update.
- **MCP server for coding agents** - opt-in, loopback-only HTTP server that lets an AI coding
assistant list, add, start, stop, and inspect your apps *through DevHarbor* instead of
spawning `npm run dev` in a shell it then loses track of. See [MCP server](#mcp-server).

## MCP server

DevHarbor doubles as an MCP server, so a coding agent (Claude Code, Cursor, or anything
else that speaks MCP) manages your dev servers through DevHarbor instead of running them
in its own shell. Servers an agent starts this way outlive the agent's session, show up in
the app like everything else, and get logs, port tracking, readiness checks, and clean
shutdown for free. The desktop updates live as the agent works.

22 tools cover the full surface: list, add, update, and remove apps; add and remove tasks;
start, stop, and restart apps or individual tasks; read and search logs; inspect ports,
run history, and Node versions; read and set env vars; scan a folder for projects to
register; and configure readiness probes so the agent can tell "port is open" apart from
"actually ready to serve".

Monorepos are first-class: `add_app` with `workspaceTasks: true` registers the repo once
and creates one task per workspace package (pnpm, yarn, or npm workspaces), each running
its own dev script from its own directory. The agent can then start or stop individual
services, wire "API before web" ordering with `add_task` dependencies, give each service
its own health probe, and see which detected port belongs to which service.

It is off by default. Turn it on under Settings → MCP server, copy the client config it
shows, and drop that into your agent's MCP settings:

```json
{
"mcpServers": {
"devharbor": {
"type": "http",
"url": "http://127.0.0.1:6872/mcp",
"headers": { "Authorization": "Bearer <token from Settings>" }
}
}
}
```

Security posture: binds `127.0.0.1` only (not configurable), requires a bearer token by
default, validates `Host`/`Origin` on every request, masks secret env values in responses,
and redacts them from log output. Optional HTTPS with a locally generated certificate for
clients that want it. Design and full tool list in
[`specs/07-mcp-server.md`](specs/07-mcp-server.md).

## Install

Expand Down Expand Up @@ -60,6 +104,7 @@ The `specs/` folder is the source of truth for this project. See [`specs/WORKFLO
6. [`specs/03-features.md`](specs/03-features.md) - every feature, with acceptance criteria
7. [`specs/04-ui.md`](specs/04-ui.md) - screens, layout, key interactions
8. [`specs/05-roadmap.md`](specs/05-roadmap.md) - phased delivery plan
9. [`specs/07-mcp-server.md`](specs/07-mcp-server.md) - the MCP server: tools, transport, security

## Stack (as built)

Expand Down
6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "devharbor",
"version": "1.1.0",
"version": "1.2.0",
"private": true,
"description": "DevHarbor - a harbor for your local dev servers. Desktop app for managing local Node.js projects on macOS.",
"author": "Jainath Ponnala",
Expand Down Expand Up @@ -38,6 +38,7 @@
},
"dependencies": {
"@homebridge/node-pty-prebuilt-multiarch": "^0.13.1",
"@modelcontextprotocol/sdk": "^1.29.0",
"better-sqlite3": "^11.5.0",
"chokidar": "^5.0.0",
"electron-updater": "^6.8.3",
Expand All @@ -46,7 +47,8 @@
"pidusage": "^4.0.1",
"semver": "^7.8.1",
"tree-kill": "^1.2.2",
"ulid": "^2.3.0"
"ulid": "^2.3.0",
"zod": "^3.25.76"
},
"devDependencies": {
"@electron/fuses": "^1.8.0",
Expand Down
Loading