@happyvertical/smrt-app-cli 0.53.3 → 0.53.5
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/AGENTS.md +7 -0
- package/README.md +29 -0
- package/dist/bin/smrt-app.js +1 -1
- package/dist/bin/smrt-mcp-bridge.d.ts +4 -0
- package/dist/bin/smrt-mcp-bridge.d.ts.map +1 -1
- package/dist/bin/smrt-mcp-bridge.js +91 -13
- package/dist/bridge-Bl1p3Oun.js +2 -0
- package/dist/bridge-args.d.ts +25 -0
- package/dist/bridge-args.d.ts.map +1 -0
- package/dist/bridge.d.ts +4 -1
- package/dist/bridge.d.ts.map +1 -1
- package/dist/{config-Ds7ofwtL.js → config-B9dESami.js} +12 -3
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/executable.d.ts +1 -1
- package/dist/executable.d.ts.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/{src-CMc9Yx_3.js → src-DjwsOuHK.js} +16 -5
- package/package.json +3 -3
- package/dist/bridge-C80xQmmW.js +0 -2
package/AGENTS.md
CHANGED
|
@@ -15,6 +15,13 @@ Application CLI support for SMRT-based apps.
|
|
|
15
15
|
- Do not persist tokens, server URLs, or app slugs outside the configured local CLI config path.
|
|
16
16
|
- Bind persisted bearer tokens to the exact issuer emitted by the device flow
|
|
17
17
|
and to the server selected during login. Never reuse them after either changes.
|
|
18
|
+
- The modern bridge targets `mcpPath` (default `/api/mcp`): `createAppCli`
|
|
19
|
+
option, `startMcpBridge({ mcpPath })`, `smrt-mcp-bridge --mcp-path` /
|
|
20
|
+
`SMRT_MCP_PATH`, `smrt-app --mcp-path` / `SMRT_APP_MCP_PATH`. Validate it
|
|
21
|
+
with `resolveMcpPath` (same-server absolute path only) before listening.
|
|
22
|
+
`smrt-mcp-bridge` parses argv with `parseMcpBridgeArgs`: empty, missing or
|
|
23
|
+
repeated value options and an explicit invalid (even empty) path are usage
|
|
24
|
+
errors (exit 2) — never silently the default.
|
|
18
25
|
- Keep command output stream-injectable so tests can assert behavior without writing to the real terminal.
|
|
19
26
|
|
|
20
27
|
## Gotchas
|
package/README.md
CHANGED
|
@@ -150,6 +150,35 @@ stdio clients:
|
|
|
150
150
|
await cli.startMcpBridge({ name: 'acme-mcp', version: '1.0.0' });
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
+
The bridge forwards to `/api/mcp` by default. When the app mounts its MCP
|
|
154
|
+
route elsewhere, set `mcpPath` on `createAppCli()` or pass it per call
|
|
155
|
+
(`startMcpBridge({ mcpPath: '/mcp' })`). The binaries take `--mcp-path=/mcp`
|
|
156
|
+
(`smrt-mcp-bridge`, or `SMRT_MCP_PATH`) and `--mcp-path` / `SMRT_APP_MCP_PATH`
|
|
157
|
+
(`smrt-app`). The path must be same-server and absolute.
|
|
158
|
+
|
|
159
|
+
For a local-profile s-m-r-t app, mint a credential with
|
|
160
|
+
`smrt app token --scopes <scope>` in the app checkout. The token is printed
|
|
161
|
+
once. Then give the bridge the loopback server and that token through the
|
|
162
|
+
app's environment prefix. This Claude Desktop entry is an example:
|
|
163
|
+
|
|
164
|
+
```json
|
|
165
|
+
{
|
|
166
|
+
"mcpServers": {
|
|
167
|
+
"notes": {
|
|
168
|
+
"command": "npx",
|
|
169
|
+
"args": ["smrt-mcp-bridge", "--env-prefix=NOTES", "--mcp-path=/mcp"],
|
|
170
|
+
"env": {
|
|
171
|
+
"NOTES_SERVER_URL": "http://127.0.0.1:5173",
|
|
172
|
+
"NOTES_TOKEN": "smrt_mcp_…"
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
The token is sent only when `<PREFIX>_SERVER_URL` matches the target server.
|
|
180
|
+
Revoke a token with `smrt app token revoke <id>`.
|
|
181
|
+
|
|
153
182
|
The package also ships the generic `smrt-mcp-bridge` binary. The remote app
|
|
154
183
|
surface is typically mounted with
|
|
155
184
|
[`@happyvertical/smrt-app-mcp`](../smrt-app-mcp/README.md).
|
package/dist/bin/smrt-app.js
CHANGED
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
* - `SMRT_MCP_APP_SLUG` — directory name under `~/.config`.
|
|
16
16
|
* - `SMRT_MCP_SERVER_NAME` / `SMRT_MCP_SERVER_VERSION` — local server identity.
|
|
17
17
|
* - `SMRT_MCP_DEFAULT_SERVER_URL` — fallback server URL.
|
|
18
|
+
* - `SMRT_MCP_PATH` (`--mcp-path`) — the app's MCP endpoint path, e.g.
|
|
19
|
+
* `/mcp`. Defaults to `/api/mcp`. An explicit value (even an empty
|
|
20
|
+
* environment value) must be valid; a malformed, missing or repeated
|
|
21
|
+
* value option is a usage error (exit 2) before the bridge listens.
|
|
18
22
|
*
|
|
19
23
|
* Apps that want their own branded bin should call `runMcpStdioBridge`
|
|
20
24
|
* directly from `@happyvertical/smrt-app-cli` — this package's root export —
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smrt-mcp-bridge.d.ts","sourceRoot":"","sources":["../../src/bin/smrt-mcp-bridge.ts"],"names":[],"mappings":"AACA
|
|
1
|
+
{"version":3,"file":"smrt-mcp-bridge.d.ts","sourceRoot":"","sources":["../../src/bin/smrt-mcp-bridge.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG"}
|
|
@@ -1,5 +1,76 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
2
|
+
import { h as runMcpStdioBridge, u as resolveMcpPath } from "../config-B9dESami.js";
|
|
3
|
+
//#region src/bridge-args.ts
|
|
4
|
+
/**
|
|
5
|
+
* Argument parsing for the generic `smrt-mcp-bridge` binary. Every value
|
|
6
|
+
* option requires a non-empty value and may appear once; an explicitly
|
|
7
|
+
* supplied endpoint path (argument or `SMRT_MCP_PATH`, even when empty) is
|
|
8
|
+
* validated and never replaced by the default.
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
var VALUE_OPTIONS = [
|
|
13
|
+
"env-prefix",
|
|
14
|
+
"app-slug",
|
|
15
|
+
"default-server-url",
|
|
16
|
+
"name",
|
|
17
|
+
"version",
|
|
18
|
+
"mcp-path"
|
|
19
|
+
];
|
|
20
|
+
/** A usage error: print the message and exit non-zero without listening. */
|
|
21
|
+
var McpBridgeUsageError = class extends Error {
|
|
22
|
+
name = "McpBridgeUsageError";
|
|
23
|
+
};
|
|
24
|
+
/** Parse bridge argv and the `SMRT_MCP_PATH` environment value. */
|
|
25
|
+
function parseMcpBridgeArgs(argv, env = {}) {
|
|
26
|
+
const values = /* @__PURE__ */ new Map();
|
|
27
|
+
let legacyRest = false;
|
|
28
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
29
|
+
const arg = argv[index];
|
|
30
|
+
if (arg === "--legacy-rest") {
|
|
31
|
+
legacyRest = true;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (!arg.startsWith("--")) continue;
|
|
35
|
+
const equals = arg.indexOf("=");
|
|
36
|
+
const key = arg.slice(2, equals < 0 ? void 0 : equals);
|
|
37
|
+
if (!VALUE_OPTIONS.includes(key)) continue;
|
|
38
|
+
const option = key;
|
|
39
|
+
let value;
|
|
40
|
+
if (equals >= 0) value = arg.slice(equals + 1);
|
|
41
|
+
else {
|
|
42
|
+
value = argv[index + 1];
|
|
43
|
+
if (value !== void 0 && !value.startsWith("--")) index += 1;
|
|
44
|
+
else value = void 0;
|
|
45
|
+
}
|
|
46
|
+
if (!value) throw new McpBridgeUsageError(`--${option} requires a value.`);
|
|
47
|
+
if (values.has(option)) throw new McpBridgeUsageError(`--${option} was provided more than once.`);
|
|
48
|
+
values.set(option, value);
|
|
49
|
+
}
|
|
50
|
+
let mcpPath;
|
|
51
|
+
const explicit = values.has("mcp-path") ? {
|
|
52
|
+
source: "--mcp-path",
|
|
53
|
+
value: values.get("mcp-path")
|
|
54
|
+
} : env.SMRT_MCP_PATH !== void 0 ? {
|
|
55
|
+
source: "SMRT_MCP_PATH",
|
|
56
|
+
value: env.SMRT_MCP_PATH
|
|
57
|
+
} : void 0;
|
|
58
|
+
if (explicit) {
|
|
59
|
+
const invalid = new McpBridgeUsageError(`${explicit.source} must be a same-server absolute path such as /mcp.`);
|
|
60
|
+
if (!explicit.value) throw invalid;
|
|
61
|
+
try {
|
|
62
|
+
mcpPath = resolveMcpPath(explicit.value);
|
|
63
|
+
} catch {
|
|
64
|
+
throw invalid;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
values,
|
|
69
|
+
legacyRest,
|
|
70
|
+
...mcpPath ? { mcpPath } : {}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//#endregion
|
|
3
74
|
//#region src/bin/smrt-mcp-bridge.ts
|
|
4
75
|
/**
|
|
5
76
|
* `smrt-mcp-bridge` — generic stdio MCP bridge.
|
|
@@ -18,33 +89,40 @@ import { m as runMcpStdioBridge } from "../config-Ds7ofwtL.js";
|
|
|
18
89
|
* - `SMRT_MCP_APP_SLUG` — directory name under `~/.config`.
|
|
19
90
|
* - `SMRT_MCP_SERVER_NAME` / `SMRT_MCP_SERVER_VERSION` — local server identity.
|
|
20
91
|
* - `SMRT_MCP_DEFAULT_SERVER_URL` — fallback server URL.
|
|
92
|
+
* - `SMRT_MCP_PATH` (`--mcp-path`) — the app's MCP endpoint path, e.g.
|
|
93
|
+
* `/mcp`. Defaults to `/api/mcp`. An explicit value (even an empty
|
|
94
|
+
* environment value) must be valid; a malformed, missing or repeated
|
|
95
|
+
* value option is a usage error (exit 2) before the bridge listens.
|
|
21
96
|
*
|
|
22
97
|
* Apps that want their own branded bin should call `runMcpStdioBridge`
|
|
23
98
|
* directly from `@happyvertical/smrt-app-cli` — this package's root export —
|
|
24
99
|
* instead of going through this generic entrypoint.
|
|
25
100
|
*/
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
101
|
+
var parsed;
|
|
102
|
+
try {
|
|
103
|
+
parsed = parseMcpBridgeArgs(process.argv.slice(2), process.env);
|
|
104
|
+
} catch (error) {
|
|
105
|
+
if (!(error instanceof McpBridgeUsageError)) throw error;
|
|
106
|
+
console.error(`smrt-mcp-bridge: ${error.message}`);
|
|
107
|
+
process.exit(2);
|
|
32
108
|
}
|
|
33
|
-
var
|
|
109
|
+
var arg = (name) => parsed.values.get(name);
|
|
110
|
+
var envPrefix = arg("env-prefix") ?? process.env.SMRT_MCP_ENV_PREFIX ?? "";
|
|
34
111
|
if (!envPrefix) {
|
|
35
112
|
console.error("smrt-mcp-bridge: --env-prefix=<PREFIX> (or SMRT_MCP_ENV_PREFIX) is required.");
|
|
36
113
|
process.exit(2);
|
|
37
114
|
}
|
|
38
|
-
var appSlug =
|
|
39
|
-
var defaultServerUrl =
|
|
40
|
-
var serverName =
|
|
41
|
-
var serverVersion =
|
|
115
|
+
var appSlug = arg("app-slug") ?? process.env.SMRT_MCP_APP_SLUG;
|
|
116
|
+
var defaultServerUrl = arg("default-server-url") ?? process.env.SMRT_MCP_DEFAULT_SERVER_URL;
|
|
117
|
+
var serverName = arg("name") ?? process.env.SMRT_MCP_SERVER_NAME ?? "smrt-app-mcp";
|
|
118
|
+
var serverVersion = arg("version") ?? process.env.SMRT_MCP_SERVER_VERSION ?? "0.0.0";
|
|
42
119
|
await runMcpStdioBridge({
|
|
43
|
-
transport:
|
|
120
|
+
transport: parsed.legacyRest ? "legacy-rest" : "mcp",
|
|
44
121
|
envPrefix,
|
|
45
122
|
appSlug,
|
|
46
123
|
defaultServerUrl,
|
|
47
124
|
requireSecureServerUrl: true,
|
|
125
|
+
...parsed.mcpPath ? { mcpPath: parsed.mcpPath } : {},
|
|
48
126
|
serverInfo: {
|
|
49
127
|
name: serverName,
|
|
50
128
|
version: serverVersion
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Argument parsing for the generic `smrt-mcp-bridge` binary. Every value
|
|
3
|
+
* option requires a non-empty value and may appear once; an explicitly
|
|
4
|
+
* supplied endpoint path (argument or `SMRT_MCP_PATH`, even when empty) is
|
|
5
|
+
* validated and never replaced by the default.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
declare const VALUE_OPTIONS: readonly ["env-prefix", "app-slug", "default-server-url", "name", "version", "mcp-path"];
|
|
10
|
+
type ValueOption = (typeof VALUE_OPTIONS)[number];
|
|
11
|
+
/** Parsed bridge configuration (before environment defaults for identity). */
|
|
12
|
+
export interface McpBridgeArgs {
|
|
13
|
+
readonly values: ReadonlyMap<ValueOption, string>;
|
|
14
|
+
readonly legacyRest: boolean;
|
|
15
|
+
/** Validated endpoint path, when one was supplied explicitly. */
|
|
16
|
+
readonly mcpPath?: string;
|
|
17
|
+
}
|
|
18
|
+
/** A usage error: print the message and exit non-zero without listening. */
|
|
19
|
+
export declare class McpBridgeUsageError extends Error {
|
|
20
|
+
readonly name = "McpBridgeUsageError";
|
|
21
|
+
}
|
|
22
|
+
/** Parse bridge argv and the `SMRT_MCP_PATH` environment value. */
|
|
23
|
+
export declare function parseMcpBridgeArgs(argv: readonly string[], env?: Readonly<Record<string, string | undefined>>): McpBridgeArgs;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=bridge-args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-args.d.ts","sourceRoot":"","sources":["../src/bridge-args.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,QAAA,MAAM,aAAa,0FAOT,CAAC;AAEX,KAAK,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAElD,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,4EAA4E;AAC5E,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,SAAkB,IAAI,yBAAyB;CAChD;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAM,GACrD,aAAa,CAiDf"}
|
package/dist/bridge.d.ts
CHANGED
|
@@ -40,7 +40,10 @@ export interface McpStdioBridgeOptions extends CliConfigContext {
|
|
|
40
40
|
toolsPath?: string;
|
|
41
41
|
/** Modern SDK-v2 HTTP by default. Legacy REST requires explicit opt-in. */
|
|
42
42
|
transport?: 'mcp' | 'legacy-rest';
|
|
43
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* Same-server modern endpoint path, e.g. `/mcp`. Defaults to `/api/mcp`.
|
|
45
|
+
* Must be an absolute path with no query, fragment, backslash or `//`.
|
|
46
|
+
*/
|
|
44
47
|
mcpPath?: string;
|
|
45
48
|
/** Override the call endpoint path. Defaults to `/api/mcp/call`. */
|
|
46
49
|
callPath?: string;
|
package/dist/bridge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAOH,OAAO,EAEL,KAAK,cAAc,EAGnB,aAAa,EAEb,MAAM,EACP,MAAM,8BAA8B,CAAC;AAKtC,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EAIrB,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAOH,OAAO,EAEL,KAAK,cAAc,EAGnB,aAAa,EAEb,MAAM,EACP,MAAM,8BAA8B,CAAC;AAKtC,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EAIrB,KAAK,iBAAiB,EAIvB,MAAM,aAAa,CAAC;AAErB,oEAAoE;AACpE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AAYtF;;;;;GAKG;AACH,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D,uDAAuD;IACvD,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,KAAK,GAAG,aAAa,CAAC;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAoDA;AA+ED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,GACzC,cAAc,CAiChB;AAuCD,2EAA2E;AAC3E,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,oBAAoB,GAC7B,aAAa,CAOf;AAiCD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
|
@@ -75,8 +75,7 @@ function createMcpStdioBridge(options) {
|
|
|
75
75
|
}
|
|
76
76
|
/** Native SDK-v2 forwarding, with fresh credential resolution for each request. */
|
|
77
77
|
function createModernBridge(options) {
|
|
78
|
-
const path = options.mcpPath
|
|
79
|
-
if (!path.startsWith("/") || path.startsWith("//") || path.includes("\\") || path.includes("?") || path.includes("#")) throw new TypeError("mcpPath must be a same-server absolute path.");
|
|
78
|
+
const path = resolveMcpPath(options.mcpPath);
|
|
80
79
|
const server = new Server(options.serverInfo, {
|
|
81
80
|
capabilities: {
|
|
82
81
|
tools: {},
|
|
@@ -207,6 +206,7 @@ function isRecord$1(value) {
|
|
|
207
206
|
* promise resolves once the stdio listener is installed.
|
|
208
207
|
*/
|
|
209
208
|
async function runMcpStdioBridge(options) {
|
|
209
|
+
if (options.transport !== "legacy-rest") resolveMcpPath(options.mcpPath);
|
|
210
210
|
serveStdio(() => createMcpStdioBridge(options).server);
|
|
211
211
|
}
|
|
212
212
|
//#endregion
|
|
@@ -222,6 +222,15 @@ async function runMcpStdioBridge(options) {
|
|
|
222
222
|
* @packageDocumentation
|
|
223
223
|
*/
|
|
224
224
|
var DEFAULT_LOCAL_SERVER = "http://localhost:5173";
|
|
225
|
+
/**
|
|
226
|
+
* Validate a same-server MCP endpoint path (default `/api/mcp`): absolute,
|
|
227
|
+
* with no scheme-relative `//`, backslash, query or fragment.
|
|
228
|
+
*/
|
|
229
|
+
function resolveMcpPath(value) {
|
|
230
|
+
const path = value ?? "/api/mcp";
|
|
231
|
+
if (typeof path !== "string" || !path.startsWith("/") || path.startsWith("//") || path.includes("\\") || path.includes("?") || path.includes("#")) throw new TypeError("mcpPath must be a same-server absolute path.");
|
|
232
|
+
return path;
|
|
233
|
+
}
|
|
225
234
|
/** Enforce the executable-safe server URL policy without echoing URL values. */
|
|
226
235
|
function assertSecureServerUrl(value) {
|
|
227
236
|
let url;
|
|
@@ -520,4 +529,4 @@ async function readBodyWithCap(response, maxBytes) {
|
|
|
520
529
|
return new TextDecoder().decode(Buffer.concat(chunks.map((c) => Buffer.from(c))));
|
|
521
530
|
}
|
|
522
531
|
//#endregion
|
|
523
|
-
export { getStoredToken as a, requestJson as c,
|
|
532
|
+
export { getStoredToken as a, requestJson as c, saveAuth as d, saveCliConfig as f, toMcpTransportError as g, runMcpStdioBridge as h, getServerUrl as i, requestJsonResult as l, formatMcpCallResult as m, assertSecureServerUrl as n, loadCliConfig as o, createMcpStdioBridge as p, clearStoredToken as r, redactTransportValue as s, AppCliRequestError as t, resolveMcpPath as u };
|
package/dist/config.d.ts
CHANGED
|
@@ -50,6 +50,11 @@ export interface CliConfigContext {
|
|
|
50
50
|
*/
|
|
51
51
|
expectedCredentialIssuer?: string;
|
|
52
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Validate a same-server MCP endpoint path (default `/api/mcp`): absolute,
|
|
55
|
+
* with no scheme-relative `//`, backslash, query or fragment.
|
|
56
|
+
*/
|
|
57
|
+
export declare function resolveMcpPath(value: string | undefined): string;
|
|
53
58
|
/** Enforce the executable-safe server URL policy without echoing URL values. */
|
|
54
59
|
export declare function assertSecureServerUrl(value: string): void;
|
|
55
60
|
/** Read the CLI config file. Missing file → empty config. */
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/executable.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { type AppCli, type CreateAppCliOptions } from './index.js';
|
|
11
11
|
export interface AppCliExecutableConfig {
|
|
12
|
-
cliOptions: Pick<CreateAppCliOptions, 'name' | 'envPrefix' | 'configDir' | 'defaultServerUrl' | 'requireSecureServerUrl'>;
|
|
12
|
+
cliOptions: Pick<CreateAppCliOptions, 'name' | 'envPrefix' | 'configDir' | 'defaultServerUrl' | 'requireSecureServerUrl' | 'mcpPath'>;
|
|
13
13
|
argv: string[];
|
|
14
14
|
mcp?: {
|
|
15
15
|
name: string;
|
package/dist/executable.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executable.d.ts","sourceRoot":"","sources":["../src/executable.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,KAAK,MAAM,EACX,KAAK,mBAAmB,EAEzB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,IAAI,CACd,mBAAmB,EACjB,MAAM,GACN,WAAW,GACX,WAAW,GACX,kBAAkB,GAClB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"executable.d.ts","sourceRoot":"","sources":["../src/executable.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,KAAK,MAAM,EACX,KAAK,mBAAmB,EAEzB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,IAAI,CACd,mBAAmB,EACjB,MAAM,GACN,WAAW,GACX,WAAW,GACX,kBAAkB,GAClB,wBAAwB,GACxB,SAAS,CACZ,CAAC;IACF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,MAAM,CAAC;CACtD;AA6BD,4EAA4E;AAC5E,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,sBAAsB,CA+FxB;AAED,gFAAgF;AAChF,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
package/dist/index.d.ts
CHANGED
|
@@ -60,6 +60,12 @@ export interface CreateAppCliOptions {
|
|
|
60
60
|
defaultServerUrl?: string;
|
|
61
61
|
/** Enforce HTTPS or loopback HTTP for every effective server URL. */
|
|
62
62
|
requireSecureServerUrl?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Same-server path of the app's modern MCP endpoint used by
|
|
65
|
+
* `startMcpBridge()`. Defaults to `/api/mcp`; apps that mount
|
|
66
|
+
* `mountMcpAppRoute` elsewhere (for example `/mcp`) set it here or per call.
|
|
67
|
+
*/
|
|
68
|
+
mcpPath?: string;
|
|
63
69
|
/**
|
|
64
70
|
* App-specific commands. Dispatched BEFORE built-ins (`auth`,
|
|
65
71
|
* `resources`, `mcp`) and before the resource-slug dispatcher, so an
|
|
@@ -92,6 +98,8 @@ export interface AppCli {
|
|
|
92
98
|
startMcpBridge(serverInfo?: {
|
|
93
99
|
name?: string;
|
|
94
100
|
version?: string;
|
|
101
|
+
/** Endpoint path; overrides `CreateAppCliOptions.mcpPath` (default `/api/mcp`). */
|
|
102
|
+
mcpPath?: string;
|
|
95
103
|
}): Promise<void>;
|
|
96
104
|
}
|
|
97
105
|
export declare function createAppCli(options: CreateAppCliOptions): AppCli;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as getStoredToken, c as requestJson, d as
|
|
2
|
-
import { a as buildFlagParser, c as createMcpClientIdMetadataDocument, d as buildUrl, f as invokeCommand, h as findResourceBySlug, i as runAppCliExecutable, l as registerMcpClient, m as findCommand, n as createAppCli, o as classifySchema, p as fetchResourceList, r as parseAppCliExecutableConfig, s as renderResponse, t as SMRT_MCP_RESULT_METADATA_KEY, u as resolveMcpClientRegistration } from "./src-
|
|
1
|
+
import { a as getStoredToken, c as requestJson, d as saveAuth, f as saveCliConfig, h as runMcpStdioBridge, i as getServerUrl, l as requestJsonResult, n as assertSecureServerUrl, o as loadCliConfig, p as createMcpStdioBridge, r as clearStoredToken, s as redactTransportValue, t as AppCliRequestError } from "./config-B9dESami.js";
|
|
2
|
+
import { a as buildFlagParser, c as createMcpClientIdMetadataDocument, d as buildUrl, f as invokeCommand, h as findResourceBySlug, i as runAppCliExecutable, l as registerMcpClient, m as findCommand, n as createAppCli, o as classifySchema, p as fetchResourceList, r as parseAppCliExecutableConfig, s as renderResponse, t as SMRT_MCP_RESULT_METADATA_KEY, u as resolveMcpClientRegistration } from "./src-DjwsOuHK.js";
|
|
3
3
|
export { AppCliRequestError, SMRT_MCP_RESULT_METADATA_KEY, assertSecureServerUrl, buildFlagParser, buildUrl, classifySchema, clearStoredToken, createAppCli, createMcpClientIdMetadataDocument, createMcpStdioBridge, fetchResourceList, findCommand, findResourceBySlug, getServerUrl, getStoredToken, invokeCommand, loadCliConfig, parseAppCliExecutableConfig, redactTransportValue, registerMcpClient, renderResponse, requestJson, requestJsonResult, resolveMcpClientRegistration, runAppCliExecutable, runMcpStdioBridge, saveAuth, saveCliConfig };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as getStoredToken, c as requestJson, i as getServerUrl, l as requestJsonResult, n as assertSecureServerUrl, o as loadCliConfig, r as clearStoredToken, u as
|
|
1
|
+
import { a as getStoredToken, c as requestJson, d as saveAuth, i as getServerUrl, l as requestJsonResult, n as assertSecureServerUrl, o as loadCliConfig, r as clearStoredToken, u as resolveMcpPath } from "./config-B9dESami.js";
|
|
2
2
|
import { SMRT_MCP_RESULT_METADATA_KEY as SMRT_MCP_RESULT_METADATA_KEY$1, validateDiscoveryConformanceArtifact } from "@happyvertical/smrt-users/app-contract";
|
|
3
3
|
import { spawn, spawnSync } from "node:child_process";
|
|
4
4
|
//#region src/discovery.ts
|
|
@@ -860,7 +860,8 @@ var CONFIG_KEYS = [
|
|
|
860
860
|
"config-dir",
|
|
861
861
|
"default-server-url",
|
|
862
862
|
"mcp-server-name",
|
|
863
|
-
"mcp-server-version"
|
|
863
|
+
"mcp-server-version",
|
|
864
|
+
"mcp-path"
|
|
864
865
|
];
|
|
865
866
|
var ENV_BY_KEY = {
|
|
866
867
|
name: "SMRT_APP_NAME",
|
|
@@ -868,7 +869,8 @@ var ENV_BY_KEY = {
|
|
|
868
869
|
"config-dir": "SMRT_APP_CONFIG_DIR",
|
|
869
870
|
"default-server-url": "SMRT_APP_DEFAULT_SERVER_URL",
|
|
870
871
|
"mcp-server-name": "SMRT_APP_MCP_SERVER_NAME",
|
|
871
|
-
"mcp-server-version": "SMRT_APP_MCP_SERVER_VERSION"
|
|
872
|
+
"mcp-server-version": "SMRT_APP_MCP_SERVER_VERSION",
|
|
873
|
+
"mcp-path": "SMRT_APP_MCP_PATH"
|
|
872
874
|
};
|
|
873
875
|
var APP_NAME_RE = /^[A-Za-z][A-Za-z0-9_-]*$/u;
|
|
874
876
|
var ENV_PREFIX_RE = /^[A-Z][A-Z0-9_]*$/u;
|
|
@@ -916,6 +918,12 @@ function parseAppCliExecutableConfig(argv, env = process.env) {
|
|
|
916
918
|
if (stdioMcp && (!mcpName || !mcpVersion)) throw new Error("MCP stdio mode requires a server name and version.");
|
|
917
919
|
if (mcpName) validate(mcpName, MCP_IDENTITY_RE, "MCP server name");
|
|
918
920
|
if (mcpVersion) validate(mcpVersion, MCP_IDENTITY_RE, "MCP server version");
|
|
921
|
+
const mcpPath = values.get("mcp-path");
|
|
922
|
+
if (mcpPath !== void 0) try {
|
|
923
|
+
resolveMcpPath(mcpPath);
|
|
924
|
+
} catch {
|
|
925
|
+
throw new Error("Invalid MCP path configuration.");
|
|
926
|
+
}
|
|
919
927
|
const commandArgv = argv.slice(cursor);
|
|
920
928
|
if (stdioMcp && commandArgv.length > 0) throw new Error("MCP stdio mode does not accept command arguments.");
|
|
921
929
|
return {
|
|
@@ -924,7 +932,8 @@ function parseAppCliExecutableConfig(argv, env = process.env) {
|
|
|
924
932
|
envPrefix,
|
|
925
933
|
configDir,
|
|
926
934
|
defaultServerUrl,
|
|
927
|
-
requireSecureServerUrl: true
|
|
935
|
+
requireSecureServerUrl: true,
|
|
936
|
+
...mcpPath === void 0 ? {} : { mcpPath }
|
|
928
937
|
},
|
|
929
938
|
argv: commandArgv,
|
|
930
939
|
mcp: mcpName && mcpVersion ? {
|
|
@@ -983,9 +992,11 @@ function createAppCli(options) {
|
|
|
983
992
|
return {
|
|
984
993
|
run: (argv) => runCli(context, options, extraByName, argv),
|
|
985
994
|
startMcpBridge: async (serverInfo) => {
|
|
986
|
-
const { runMcpStdioBridge } = await import("./bridge-
|
|
995
|
+
const { runMcpStdioBridge } = await import("./bridge-Bl1p3Oun.js");
|
|
996
|
+
const mcpPath = serverInfo?.mcpPath ?? options.mcpPath;
|
|
987
997
|
await runMcpStdioBridge({
|
|
988
998
|
...context,
|
|
999
|
+
...mcpPath === void 0 ? {} : { mcpPath },
|
|
989
1000
|
serverInfo: {
|
|
990
1001
|
name: serverInfo?.name ?? `${options.name}-mcp`,
|
|
991
1002
|
version: serverInfo?.version ?? "0.0.0"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-app-cli",
|
|
3
|
-
"version": "0.53.
|
|
3
|
+
"version": "0.53.5",
|
|
4
4
|
"description": "Reusable CLI factory for SMRT apps — branded `<name> <resource> <command>` CLI + stdio MCP bridge with decorator-driven resource discovery",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
"AGENTS.md"
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@happyvertical/smrt-users": "0.53.
|
|
24
|
+
"@happyvertical/smrt-users": "0.53.5",
|
|
25
25
|
"@modelcontextprotocol/client": "2.0.0",
|
|
26
26
|
"@modelcontextprotocol/server": "2.0.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@happyvertical/smrt-core": "0.53.
|
|
29
|
+
"@happyvertical/smrt-core": "0.53.5",
|
|
30
30
|
"@types/node": "24.13.6",
|
|
31
31
|
"typescript": "6.0.3",
|
|
32
32
|
"vite": "8.1.4",
|
package/dist/bridge-C80xQmmW.js
DELETED