@ammduncan/easel 0.2.1 → 0.2.2

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  All notable changes to easel. This project adheres to [Semantic Versioning](https://semver.org/).
4
4
 
5
+ ## 0.2.2 — 2026-05-22
6
+
7
+ ### Fixed
8
+ - **MCP servers wired via `npx -y @ammduncan/easel` now boot the MCP server instead of printing CLI help.** When stdin isn't a TTY (i.e. the process is launched over a pipe by an MCP client), the bin transparently boots the MCP server. Interactive terminal use still shows help. Previously, Claude Desktop, Cursor, and Windsurf saw the CLI's help text on stdout and reported `Unexpected token 'e' is not valid JSON` for every line.
9
+
10
+ ### Added
11
+ - Explicit `easel mcp` subcommand that runs the stdio MCP server in the foreground (used internally by the no-TTY auto-detection; available as an explicit entry point for clients that want it).
12
+
13
+ ### Changed
14
+ - `dist/mcp.js` now exports `main()` and only auto-runs when invoked directly (not when imported), so the CLI can route to it without double-booting.
15
+
5
16
  ## 0.2.1 — 2026-05-22
6
17
 
7
18
  ### Added
package/dist/cli.js CHANGED
@@ -28,6 +28,7 @@ Usage:
28
28
  easel setup --client claude-desktop register the MCP in Claude Desktop's config
29
29
  easel setup --client windsurf register the MCP in Windsurf's config
30
30
  easel update git pull + npm install + build + setup (re-runs setup to apply new conventions)
31
+ easel mcp run the stdio MCP server in the foreground (used by clients)
31
32
  easel restart kill the running HTTP server and respawn it (picks up new builds/paths)
32
33
  easel server run the HTTP server in the foreground (debug)
33
34
  easel version
@@ -377,7 +378,23 @@ async function main() {
377
378
  case "-v":
378
379
  cmdVersion();
379
380
  return;
380
- case undefined:
381
+ case "mcp": {
382
+ const { main: mcpMain } = await import("./mcp.js");
383
+ await mcpMain();
384
+ return;
385
+ }
386
+ case undefined: {
387
+ // When invoked over a pipe (no TTY on stdin) — e.g. an MCP client
388
+ // launching us via `npx -y @ammduncan/easel` — boot the MCP server.
389
+ // Interactive terminal use still gets the help text.
390
+ if (!process.stdin.isTTY) {
391
+ const { main: mcpMain } = await import("./mcp.js");
392
+ await mcpMain();
393
+ return;
394
+ }
395
+ help();
396
+ return;
397
+ }
381
398
  case "help":
382
399
  case "--help":
383
400
  case "-h":
package/dist/mcp.js CHANGED
@@ -79,7 +79,7 @@ async function pushToServer(args) {
79
79
  }
80
80
  return (await r.json());
81
81
  }
82
- async function main() {
82
+ export async function main() {
83
83
  const server = new Server({ name: "easel", version: "0.1.0" }, { capabilities: { tools: {} } });
84
84
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
85
85
  tools: [
@@ -229,7 +229,12 @@ async function main() {
229
229
  const transport = new StdioServerTransport();
230
230
  await server.connect(transport);
231
231
  }
232
- main().catch((err) => {
233
- console.error("[easel mcp] fatal:", err);
234
- process.exit(1);
235
- });
232
+ // Auto-run when invoked directly (e.g. `node dist/mcp.js`), not when imported.
233
+ const invokedDirectly = import.meta.url === `file://${process.argv[1]}` ||
234
+ import.meta.url.endsWith("/dist/mcp.js");
235
+ if (invokedDirectly) {
236
+ main().catch((err) => {
237
+ console.error("[easel mcp] fatal:", err);
238
+ process.exit(1);
239
+ });
240
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ammduncan/easel",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "A live browser tab for every Claude Code (and MCP) session. The push MCP tool appends HTML cards to a scrolling feed you keep open in split-screen.",
5
5
  "type": "module",
6
6
  "license": "MIT",