@gmickel/gno 1.45.0 → 1.46.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/assets/skill/cli-reference.md +14 -6
- package/assets/skill/mcp-reference.md +4 -1
- package/browser-extension/artifacts/{gno-browser-clipper-v1.45.0.zip → gno-browser-clipper-v1.46.0.zip} +0 -0
- package/browser-extension/artifacts/gno-browser-clipper-v1.46.0.zip.sha256 +1 -0
- package/browser-extension/dist/manifest.json +1 -1
- package/package.json +1 -1
- package/spec/cli.md +9 -7
- package/src/cli/commands/mcp/install.ts +20 -0
- package/src/cli/commands/mcp/paths.ts +25 -0
- package/src/cli/commands/mcp/status.ts +6 -0
- package/src/cli/program.ts +6 -0
- package/browser-extension/artifacts/gno-browser-clipper-v1.45.0.zip.sha256 +0 -1
|
@@ -742,12 +742,14 @@ Install GNO as MCP server in client configurations.
|
|
|
742
742
|
gno mcp install [options]
|
|
743
743
|
```
|
|
744
744
|
|
|
745
|
-
| Option
|
|
746
|
-
|
|
|
747
|
-
| `-t, --target`
|
|
748
|
-
| `-s, --scope`
|
|
749
|
-
| `-f, --force`
|
|
750
|
-
| `--dry-run`
|
|
745
|
+
| Option | Default | Description |
|
|
746
|
+
| ---------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
747
|
+
| `-t, --target` | claude-desktop | Target client (see below) |
|
|
748
|
+
| `-s, --scope` | target default | Scope: `user`, `project` |
|
|
749
|
+
| `-f, --force` | false | Overwrite existing config |
|
|
750
|
+
| `--dry-run` | false | Preview changes |
|
|
751
|
+
| `--enable-write` | false | Registered server starts with write tools enabled |
|
|
752
|
+
| `--tool-profile` | full | Advertised tool set the registration starts with: `core` (7 read tools, plus `gno_capture` and `gno_remember` with `--enable-write`) or `full`; omitted writes no flag |
|
|
751
753
|
|
|
752
754
|
Targets: `claude-desktop`, `claude-code`, `codex`, `cursor`, `zed`,
|
|
753
755
|
`windsurf`, `opencode`, `amp`, `lmstudio`, and `librechat`. Project scope is
|
|
@@ -763,6 +765,12 @@ gno mcp install
|
|
|
763
765
|
# Claude Code (user scope)
|
|
764
766
|
gno mcp install -t claude-code
|
|
765
767
|
|
|
768
|
+
# Claude Code on the slim core profile, with capture and remember enabled
|
|
769
|
+
gno mcp install -t claude-code --tool-profile core --enable-write
|
|
770
|
+
|
|
771
|
+
# Switch an existing registration to core (nothing migrates on its own)
|
|
772
|
+
gno mcp install -t cursor --tool-profile core --force
|
|
773
|
+
|
|
766
774
|
# Claude Code (project scope)
|
|
767
775
|
gno mcp install -t claude-code -s project
|
|
768
776
|
```
|
|
@@ -100,7 +100,10 @@ gateway) advertises only `gno_query`, `gno_search`, `gno_get`, `gno_multi_get`,
|
|
|
100
100
|
`gno_context`, `gno_changes`, and `gno_recall`, plus `gno_capture` and
|
|
101
101
|
`gno_remember` with `--enable-write`; their descriptions state when to call
|
|
102
102
|
each and what comes back. Every other tool named below is available under the
|
|
103
|
-
default `full` profile.
|
|
103
|
+
default `full` profile. Pick the profile once per client at install time with
|
|
104
|
+
`gno mcp install --target <client> --tool-profile core` (add `--force` to
|
|
105
|
+
switch an existing registration); `gno mcp status` shows the profile each
|
|
106
|
+
registration carries.
|
|
104
107
|
|
|
105
108
|
For normal questions, start with `gno_query`, then read targeted snippets with
|
|
106
109
|
`gno_get` or batch refs with `gno_multi_get`. Use `gno_context` for one bounded,
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
303bbadcb92766b35c3b21aaf66ac959b36679159e90014a06499ff6a84e5708 gno-browser-clipper-v1.46.0.zip
|
package/package.json
CHANGED
package/spec/cli.md
CHANGED
|
@@ -2466,17 +2466,19 @@ Install gno as an MCP server in client configurations.
|
|
|
2466
2466
|
**Synopsis:**
|
|
2467
2467
|
|
|
2468
2468
|
```bash
|
|
2469
|
-
gno mcp install [--target <target>] [--scope <scope>] [--force] [--dry-run] [--json]
|
|
2469
|
+
gno mcp install [--target <target>] [--scope <scope>] [--force] [--dry-run] [--enable-write] [--tool-profile <core|full>] [--json]
|
|
2470
2470
|
```
|
|
2471
2471
|
|
|
2472
2472
|
**Options:**
|
|
2473
2473
|
|
|
2474
|
-
| Option
|
|
2475
|
-
|
|
|
2476
|
-
| `--target`
|
|
2477
|
-
| `--scope`
|
|
2478
|
-
| `--force`
|
|
2479
|
-
| `--dry-run`
|
|
2474
|
+
| Option | Type | Default | Description |
|
|
2475
|
+
| ---------------- | ------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
2476
|
+
| `--target` | string | claude-desktop | Target client (see table below) |
|
|
2477
|
+
| `--scope` | string | target default | Scope: `user` or `project`; LibreChat defaults to project |
|
|
2478
|
+
| `--force` | boolean | false | Overwrite existing gno configuration |
|
|
2479
|
+
| `--dry-run` | boolean | false | Show what would be done without changes |
|
|
2480
|
+
| `--enable-write` | boolean | false | Start the registered server with write tools enabled |
|
|
2481
|
+
| `--tool-profile` | string | full | Advertised tool set written into the registration: `core` (7 read tools, plus capture and remember with `--enable-write`) or `full`; omitted writes no flag |
|
|
2480
2482
|
|
|
2481
2483
|
**Targets:**
|
|
2482
2484
|
|
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
|
|
7
7
|
import { DEFAULT_INDEX_NAME } from "../../../app/constants.js";
|
|
8
8
|
import { getConfigPaths, toAbsolutePath } from "../../../config/paths.js";
|
|
9
|
+
import {
|
|
10
|
+
type McpToolProfile,
|
|
11
|
+
parseMcpToolProfile,
|
|
12
|
+
} from "../../../mcp/tool-profile.js";
|
|
9
13
|
import { CliError } from "../../errors.js";
|
|
10
14
|
import { getGlobals } from "../../program.js";
|
|
11
15
|
import { resolveMcpConfigLocation } from "./config-discovery.js";
|
|
@@ -45,6 +49,8 @@ export interface InstallOptions {
|
|
|
45
49
|
force?: boolean;
|
|
46
50
|
dryRun?: boolean;
|
|
47
51
|
enableWrite?: boolean;
|
|
52
|
+
/** Advertised tool set written into the registration (`core` or `full`). */
|
|
53
|
+
toolProfile?: McpToolProfile;
|
|
48
54
|
/** Index identity persisted in the installed MCP command. */
|
|
49
55
|
indexName?: string;
|
|
50
56
|
/** Active GNO config persisted as a canonical absolute path. */
|
|
@@ -166,6 +172,18 @@ function safeGetGlobals(): { json: boolean; quiet: boolean } {
|
|
|
166
172
|
}
|
|
167
173
|
}
|
|
168
174
|
|
|
175
|
+
/** Validate the requested profile before any config file is read or written. */
|
|
176
|
+
function parseInstallToolProfile(value: unknown): McpToolProfile | undefined {
|
|
177
|
+
try {
|
|
178
|
+
return parseMcpToolProfile(value);
|
|
179
|
+
} catch (error) {
|
|
180
|
+
throw new CliError(
|
|
181
|
+
"VALIDATION",
|
|
182
|
+
error instanceof Error ? error.message : String(error)
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
169
187
|
/**
|
|
170
188
|
* Install gno MCP server.
|
|
171
189
|
*/
|
|
@@ -175,6 +193,7 @@ export async function installMcp(opts: InstallOptions = {}): Promise<void> {
|
|
|
175
193
|
const force = opts.force ?? false;
|
|
176
194
|
const dryRun = opts.dryRun ?? false;
|
|
177
195
|
const enableWrite = opts.enableWrite ?? false;
|
|
196
|
+
const toolProfile = parseInstallToolProfile(opts.toolProfile);
|
|
178
197
|
const indexName = opts.indexName ?? DEFAULT_INDEX_NAME;
|
|
179
198
|
const paths = getConfigPaths();
|
|
180
199
|
const configPath = toAbsolutePath(
|
|
@@ -196,6 +215,7 @@ export async function installMcp(opts: InstallOptions = {}): Promise<void> {
|
|
|
196
215
|
// Build server entry (uses process.execPath, always succeeds)
|
|
197
216
|
const serverEntry = buildMcpServerEntry({
|
|
198
217
|
enableWrite,
|
|
218
|
+
toolProfile,
|
|
199
219
|
indexName,
|
|
200
220
|
configPath,
|
|
201
221
|
dataDir: toAbsolutePath(paths.dataDir, opts.cwd),
|
|
@@ -13,6 +13,11 @@ import type { ConnectorWorkspaceEnvironment } from "../../../core/connector-envi
|
|
|
13
13
|
import { resolveDirs } from "../../../app/constants";
|
|
14
14
|
import { assertValidIndexName } from "../../../app/index-name";
|
|
15
15
|
import { getCurrentGnoEntrypoint } from "../../../core/runtime-entrypoint";
|
|
16
|
+
import {
|
|
17
|
+
DEFAULT_MCP_TOOL_PROFILE,
|
|
18
|
+
type McpToolProfile,
|
|
19
|
+
isMcpToolProfile,
|
|
20
|
+
} from "../../../mcp/tool-profile.js";
|
|
16
21
|
import { getTargetDisplayName } from "./target-display.js";
|
|
17
22
|
|
|
18
23
|
export { getTargetDisplayName } from "./target-display.js";
|
|
@@ -70,6 +75,8 @@ export interface McpServerEntry {
|
|
|
70
75
|
|
|
71
76
|
interface McpServerEntryOptions {
|
|
72
77
|
enableWrite?: boolean;
|
|
78
|
+
/** Advertised MCP tool set the registration starts with; omitted = `full`. */
|
|
79
|
+
toolProfile?: McpToolProfile;
|
|
73
80
|
indexName?: string;
|
|
74
81
|
configPath?: string;
|
|
75
82
|
dataDir?: string;
|
|
@@ -485,7 +492,25 @@ function appendMcpArguments(
|
|
|
485
492
|
args.push("--config", resolve(options.configPath));
|
|
486
493
|
}
|
|
487
494
|
args.push("mcp");
|
|
495
|
+
if (options.toolProfile !== undefined) {
|
|
496
|
+
args.push("--tool-profile", options.toolProfile);
|
|
497
|
+
}
|
|
488
498
|
if (options.enableWrite) {
|
|
489
499
|
args.push("--enable-write");
|
|
490
500
|
}
|
|
491
501
|
}
|
|
502
|
+
|
|
503
|
+
/**
|
|
504
|
+
* The tool profile a registration starts with, read back from its args.
|
|
505
|
+
* A registration written before the flag existed carries none and runs `full`.
|
|
506
|
+
*/
|
|
507
|
+
export function readMcpToolProfileFromArgs(
|
|
508
|
+
args: ReadonlyArray<string>
|
|
509
|
+
): McpToolProfile {
|
|
510
|
+
const index = args.indexOf("--tool-profile");
|
|
511
|
+
if (index === -1) {
|
|
512
|
+
return DEFAULT_MCP_TOOL_PROFILE;
|
|
513
|
+
}
|
|
514
|
+
const value = args[index + 1];
|
|
515
|
+
return isMcpToolProfile(value) ? value : DEFAULT_MCP_TOOL_PROFILE;
|
|
516
|
+
}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
import type { ConnectorWorkspaceEnvironment } from "../../../core/connector-environment";
|
|
8
8
|
import type { McpConnectorVerificationTarget } from "../../../core/connector-verifier";
|
|
9
|
+
import type { McpToolProfile } from "../../../mcp/tool-profile.js";
|
|
9
10
|
import type { StandardMcpEntry } from "./config.js";
|
|
10
11
|
|
|
11
12
|
import { normalizeConnectorWorkspaceEnvironment } from "../../../core/connector-environment";
|
|
@@ -29,6 +30,7 @@ import {
|
|
|
29
30
|
type McpScope,
|
|
30
31
|
type McpTarget,
|
|
31
32
|
resolveMcpConfigPath,
|
|
33
|
+
readMcpToolProfileFromArgs,
|
|
32
34
|
} from "./paths.js";
|
|
33
35
|
|
|
34
36
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
@@ -56,6 +58,8 @@ export interface McpTargetStatus {
|
|
|
56
58
|
args: string[];
|
|
57
59
|
env?: ConnectorWorkspaceEnvironment;
|
|
58
60
|
};
|
|
61
|
+
/** Tool profile the registration starts with; `full` when its args carry none. */
|
|
62
|
+
toolProfile?: McpToolProfile;
|
|
59
63
|
error?: string;
|
|
60
64
|
}
|
|
61
65
|
|
|
@@ -234,6 +238,7 @@ export async function checkMcpTargetStatus(
|
|
|
234
238
|
configPath,
|
|
235
239
|
configured: true,
|
|
236
240
|
serverEntry,
|
|
241
|
+
toolProfile: readMcpToolProfileFromArgs(serverEntry.args),
|
|
237
242
|
};
|
|
238
243
|
configIdentityByStatus.set(status, configIdentity);
|
|
239
244
|
return status;
|
|
@@ -341,6 +346,7 @@ export async function statusMcp(opts: StatusOptions = {}): Promise<void> {
|
|
|
341
346
|
if (status.configured && status.serverEntry) {
|
|
342
347
|
process.stdout.write(` Command: ${status.serverEntry.command}\n`);
|
|
343
348
|
process.stdout.write(` Args: ${status.serverEntry.args.join(" ")}\n`);
|
|
349
|
+
process.stdout.write(` Profile: ${status.toolProfile ?? "full"}\n`);
|
|
344
350
|
}
|
|
345
351
|
|
|
346
352
|
if (status.error) {
|
package/src/cli/program.ts
CHANGED
|
@@ -2234,9 +2234,14 @@ function wireMcpCommand(program: Command): void {
|
|
|
2234
2234
|
"--enable-write",
|
|
2235
2235
|
"Enable write operations in installed MCP configuration"
|
|
2236
2236
|
)
|
|
2237
|
+
.option(
|
|
2238
|
+
"--tool-profile <profile>",
|
|
2239
|
+
"advertised tool set the registration starts with: core (7 read tools + capture/remember with --enable-write) or full (default)"
|
|
2240
|
+
)
|
|
2237
2241
|
.option("--json", "JSON output")
|
|
2238
2242
|
.action(async (cmdOpts: Record<string, unknown>) => {
|
|
2239
2243
|
const target = cmdOpts.target as string;
|
|
2244
|
+
const toolProfile = parseToolProfileOption(cmdOpts.toolProfile);
|
|
2240
2245
|
const requestedScope = cmdOpts.scope;
|
|
2241
2246
|
|
|
2242
2247
|
// Import MCP_TARGETS for validation
|
|
@@ -2278,6 +2283,7 @@ function wireMcpCommand(program: Command): void {
|
|
|
2278
2283
|
force: Boolean(cmdOpts.force),
|
|
2279
2284
|
dryRun: Boolean(cmdOpts.dryRun),
|
|
2280
2285
|
enableWrite: Boolean(cmdOpts.enableWrite),
|
|
2286
|
+
toolProfile,
|
|
2281
2287
|
indexName: globals.index,
|
|
2282
2288
|
configPath: globals.config,
|
|
2283
2289
|
// Pass undefined if not set, so global --json can take effect
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ea5867ff2927a15524f4d5167c7ee9ee8a530b3604fefad886ec0327af7185d8 gno-browser-clipper-v1.45.0.zip
|