@marlinjai/studio-mcp 0.3.0 → 0.4.0

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/README.md CHANGED
@@ -21,7 +21,9 @@ claude mcp add lumitra-studio \
21
21
  -- node /absolute/path/to/packages/studio-mcp/dist/cli.js
22
22
  ```
23
23
 
24
- If the key is already in your shell (for example injected by `cc.sh` as `LUMITRA_STUDIO_SERVICE_TOKEN`), drop the `--env` flag: the server reads the legacy variable too.
24
+ If `LUMITRA_STUDIO_API_KEY` is already exported in your shell, drop the `--env` flag: the server reads it from its own environment.
25
+
26
+ **Breaking in 0.4.0.** The legacy variable `LUMITRA_STUDIO_SERVICE_TOKEN` is no longer read. Provide the same key as `LUMITRA_STUDIO_API_KEY`; a server started with only the legacy name stops with an error that says so.
25
27
 
26
28
  ### Cursor (`.cursor/mcp.json`) and Claude Desktop
27
29
 
@@ -67,7 +69,6 @@ The HTTP mode is stateless (one server instance per request, no sessions to expi
67
69
  | Variable | Required | Default | Notes |
68
70
  |---|---|---|---|
69
71
  | `LUMITRA_STUDIO_API_KEY` | yes | | Bearer token for the Studio API. |
70
- | `LUMITRA_STUDIO_SERVICE_TOKEN` | fallback | | Legacy name, accepted when `LUMITRA_STUDIO_API_KEY` is unset. |
71
72
  | `LUMITRA_STUDIO_BASE_URL` | no | `https://studio.lumitra.co` | Point at a local Studio (`http://localhost:3000`) to test. |
72
73
 
73
74
  An env value that is still a literal, unexpanded `${VAR}` placeholder (some plugin hosts only expand `${PLUGIN_ROOT}` and pass everything else through verbatim) is treated as unset and the variable is read from the server's own `process.env` instead.
package/dist/cli.js CHANGED
@@ -8,6 +8,7 @@ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/
8
8
 
9
9
  // src/config.ts
10
10
  var DEFAULT_BASE_URL = "https://studio.lumitra.co";
11
+ var LEGACY_API_KEY_VAR = "LUMITRA_STUDIO_SERVICE_TOKEN";
11
12
  var ConfigError = class extends Error {
12
13
  constructor(message) {
13
14
  super(message);
@@ -40,10 +41,11 @@ function resolveConfig(env = process.env) {
40
41
  `LUMITRA_STUDIO_BASE_URL is not a valid http(s) URL (got ${JSON.stringify(rawBase)})`
41
42
  );
42
43
  }
43
- const apiKey = readEnvVar("LUMITRA_STUDIO_API_KEY", env) ?? readEnvVar("LUMITRA_STUDIO_SERVICE_TOKEN", env);
44
+ const apiKey = readEnvVar("LUMITRA_STUDIO_API_KEY", env);
44
45
  if (!apiKey) {
46
+ const legacyHint = readEnvVar(LEGACY_API_KEY_VAR, env) ? ` ${LEGACY_API_KEY_VAR} is set, but that legacy name is no longer read since 0.4.0: provide the same key as LUMITRA_STUDIO_API_KEY.` : "";
45
47
  throw new ConfigError(
46
- 'Missing API key: set LUMITRA_STUDIO_API_KEY (or the legacy LUMITRA_STUDIO_SERVICE_TOKEN) to a Lumitra Studio bearer token. An unexpanded "${...}" placeholder counts as unset.'
48
+ `Missing API key: set LUMITRA_STUDIO_API_KEY to a Lumitra Studio bearer token. An unexpanded "\${...}" placeholder counts as unset.${legacyHint}`
47
49
  );
48
50
  }
49
51
  return { baseUrl, apiKey };
@@ -6552,7 +6554,7 @@ function registerTools(server, ctx) {
6552
6554
 
6553
6555
  // src/server.ts
6554
6556
  var SERVER_NAME = "lumitra-studio";
6555
- var SERVER_VERSION = "0.3.0";
6557
+ var SERVER_VERSION = "0.4.0";
6556
6558
  function createStudioMcpServer(opts = {}) {
6557
6559
  const config = opts.config ?? resolveConfig(opts.env ?? process.env);
6558
6560
  const client = new StudioClient(config, {
@@ -6605,7 +6607,7 @@ Usage:
6605
6607
  studio-mcp --http --host 0.0.0.0 --port 3939
6606
6608
 
6607
6609
  Environment:
6608
- LUMITRA_STUDIO_API_KEY bearer token (required; legacy LUMITRA_STUDIO_SERVICE_TOKEN accepted)
6610
+ LUMITRA_STUDIO_API_KEY bearer token (required)
6609
6611
  LUMITRA_STUDIO_BASE_URL default https://studio.lumitra.co
6610
6612
 
6611
6613
  Tools: ${TOOL_NAMES.join(", ")}
package/dist/index.d.ts CHANGED
@@ -869,11 +869,12 @@ interface ProjectionIssue {
869
869
  /**
870
870
  * Server configuration, resolved from the environment once at startup.
871
871
  *
872
- * `LUMITRA_STUDIO_API_KEY` is the bearer token. The legacy name
873
- * `LUMITRA_STUDIO_SERVICE_TOKEN` (the batch skill + lola-stories backend) is
874
- * accepted as a fallback so an existing cc.sh-injected environment works
875
- * unchanged. The token is held in memory only: nothing in this package ever
876
- * logs, echoes, or serializes it (see `redactSecret` in errors.ts).
872
+ * `LUMITRA_STUDIO_API_KEY` is the bearer token, and the only name read. The
873
+ * legacy name `LUMITRA_STUDIO_SERVICE_TOKEN` was a fallback until 0.4.0; the two
874
+ * names carried different keys on one machine, so there is now one. A legacy
875
+ * variable that is still set is named in the error, never read. The token is
876
+ * held in memory only: nothing in this package ever logs, echoes, or serializes
877
+ * it (see `redactSecret` in errors.ts).
877
878
  *
878
879
  * Placeholder handling: the Agent Plugins spec only guarantees expansion of
879
880
  * `${PLUGIN_ROOT}` / `${PLUGIN_DATA}` in a plugin's `.mcp.json`, so some
@@ -1499,7 +1500,7 @@ declare function registerTools(server: McpServer, ctx: ToolContext): void;
1499
1500
  */
1500
1501
 
1501
1502
  declare const SERVER_NAME = "lumitra-studio";
1502
- declare const SERVER_VERSION = "0.3.0";
1503
+ declare const SERVER_VERSION = "0.4.0";
1503
1504
  interface CreateServerOptions {
1504
1505
  config?: StudioConfig;
1505
1506
  env?: NodeJS.ProcessEnv;
@@ -2839,7 +2840,7 @@ declare function buildCharacterSwapDefinition(input: CharacterSwapInput): Workfl
2839
2840
  * `studio-mcp --http [--port 3939]` Streamable HTTP transport on /mcp (remote / shared)
2840
2841
  *
2841
2842
  * Config: LUMITRA_STUDIO_BASE_URL (default https://studio.lumitra.co) and
2842
- * LUMITRA_STUDIO_API_KEY (or legacy LUMITRA_STUDIO_SERVICE_TOKEN). The token is
2843
+ * LUMITRA_STUDIO_API_KEY (the only key name read). The token is
2843
2844
  * never printed. All diagnostics go to stderr (stdout is the stdio transport).
2844
2845
  */
2845
2846
 
package/dist/index.js CHANGED
@@ -377,6 +377,7 @@ function projectQuery(projectId) {
377
377
 
378
378
  // src/config.ts
379
379
  var DEFAULT_BASE_URL = "https://studio.lumitra.co";
380
+ var LEGACY_API_KEY_VAR = "LUMITRA_STUDIO_SERVICE_TOKEN";
380
381
  var ConfigError = class extends Error {
381
382
  constructor(message) {
382
383
  super(message);
@@ -409,10 +410,11 @@ function resolveConfig(env = process.env) {
409
410
  `LUMITRA_STUDIO_BASE_URL is not a valid http(s) URL (got ${JSON.stringify(rawBase)})`
410
411
  );
411
412
  }
412
- const apiKey = readEnvVar("LUMITRA_STUDIO_API_KEY", env) ?? readEnvVar("LUMITRA_STUDIO_SERVICE_TOKEN", env);
413
+ const apiKey = readEnvVar("LUMITRA_STUDIO_API_KEY", env);
413
414
  if (!apiKey) {
415
+ const legacyHint = readEnvVar(LEGACY_API_KEY_VAR, env) ? ` ${LEGACY_API_KEY_VAR} is set, but that legacy name is no longer read since 0.4.0: provide the same key as LUMITRA_STUDIO_API_KEY.` : "";
414
416
  throw new ConfigError(
415
- 'Missing API key: set LUMITRA_STUDIO_API_KEY (or the legacy LUMITRA_STUDIO_SERVICE_TOKEN) to a Lumitra Studio bearer token. An unexpanded "${...}" placeholder counts as unset.'
417
+ `Missing API key: set LUMITRA_STUDIO_API_KEY to a Lumitra Studio bearer token. An unexpanded "\${...}" placeholder counts as unset.${legacyHint}`
416
418
  );
417
419
  }
418
420
  return { baseUrl, apiKey };
@@ -6547,7 +6549,7 @@ function registerTools(server, ctx) {
6547
6549
 
6548
6550
  // src/server.ts
6549
6551
  var SERVER_NAME = "lumitra-studio";
6550
- var SERVER_VERSION = "0.3.0";
6552
+ var SERVER_VERSION = "0.4.0";
6551
6553
  function createStudioMcpServer(opts = {}) {
6552
6554
  const config = opts.config ?? resolveConfig(opts.env ?? process.env);
6553
6555
  const client = new StudioClient(config, {
@@ -6604,7 +6606,7 @@ Usage:
6604
6606
  studio-mcp --http --host 0.0.0.0 --port 3939
6605
6607
 
6606
6608
  Environment:
6607
- LUMITRA_STUDIO_API_KEY bearer token (required; legacy LUMITRA_STUDIO_SERVICE_TOKEN accepted)
6609
+ LUMITRA_STUDIO_API_KEY bearer token (required)
6608
6610
  LUMITRA_STUDIO_BASE_URL default https://studio.lumitra.co
6609
6611
 
6610
6612
  Tools: ${TOOL_NAMES.join(", ")}
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env bash
2
2
  # Register the Lumitra Studio MCP server with Claude Code.
3
3
  # Pick ONE of the blocks below. Never paste the key into a chat; set it in your
4
- # shell (or let cc.sh inject LUMITRA_STUDIO_SERVICE_TOKEN) and pass it by reference.
4
+ # shell as LUMITRA_STUDIO_API_KEY and pass it by reference.
5
5
  set -euo pipefail
6
6
 
7
7
  # 1) stdio via npx (published package), key from the current shell
8
8
  claude mcp add lumitra-studio \
9
- --env "LUMITRA_STUDIO_API_KEY=${LUMITRA_STUDIO_API_KEY:-${LUMITRA_STUDIO_SERVICE_TOKEN:?set LUMITRA_STUDIO_API_KEY}}" \
9
+ --env "LUMITRA_STUDIO_API_KEY=${LUMITRA_STUDIO_API_KEY:?set LUMITRA_STUDIO_API_KEY}" \
10
10
  -- npx -y @marlinjai/studio-mcp
11
11
 
12
12
  # 2) stdio from a local monorepo build
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marlinjai/studio-mcp",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "private": false,
5
5
  "description": "Model Context Protocol (MCP) server over the Lumitra Studio HTTP API: generate images, mint characters, run workflows, swap characters into video.",
6
6
  "license": "MIT",