@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 +3 -2
- package/dist/cli.js +6 -4
- package/dist/index.d.ts +8 -7
- package/dist/index.js +6 -4
- package/examples/claude-code.sh +2 -2
- package/package.json +1 -1
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
|
|
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)
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
|
873
|
-
* `LUMITRA_STUDIO_SERVICE_TOKEN`
|
|
874
|
-
*
|
|
875
|
-
*
|
|
876
|
-
* logs, echoes, or serializes
|
|
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.
|
|
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 (
|
|
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)
|
|
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
|
-
|
|
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.
|
|
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
|
|
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(", ")}
|
package/examples/claude-code.sh
CHANGED
|
@@ -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
|
|
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
|
|
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
|
+
"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",
|