genexus-mcp 3.12.0 → 3.14.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 +27 -3
- package/cli/docs.test.js +21 -0
- package/cli/index.js +27 -1
- package/cli/lib/config.js +17 -1
- package/cli/run.test.js +1 -1
- package/docs/llm_cli_mcp_playbook.md +9 -4
- package/package.json +1 -1
- package/publish/GxMcp.Gateway.deps.json +2 -2
- package/publish/GxMcp.Gateway.dll +0 -0
- package/publish/GxMcp.Gateway.exe +0 -0
- package/publish/config.json +8 -8
- package/publish/gxmcp-manifest.json +12 -12
- package/publish/gxmcp-sbom.json +5 -5
- package/publish/gxwire.exe +0 -0
- package/publish/nexus-ide.vsix +0 -0
- package/publish/start_mcp.bat +24 -24
- package/publish/tool_definitions.json +11 -8
- package/publish/worker/GxMcp.Worker.exe +0 -0
package/README.md
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
> **¿Hablás español?** → [Guía de inicio en español](docs/GETTING_STARTED.es.md)
|
|
10
10
|
> **Fala português?** → [Guia de início em português](docs/GETTING_STARTED.pt-br.md)
|
|
11
11
|
> **Stuck?** → [Troubleshooting guide](TROUBLESHOOTING.md)
|
|
12
|
+
> **All docs** → [Documentation index](docs/README.md)
|
|
12
13
|
|
|
13
14
|
---
|
|
14
15
|
|
|
@@ -175,11 +176,12 @@ the measured two-client smoke and backpressure results.
|
|
|
175
176
|
|
|
176
177
|
## What you can do with it
|
|
177
178
|
|
|
178
|
-
A quick map of what the agent can do against your real KB through the **
|
|
179
|
+
A quick map of what the agent can do against your real KB through the **60 tools** (details in [Tool Surface](#tool-surface)):
|
|
179
180
|
|
|
180
181
|
| Area | What the agent can do |
|
|
181
182
|
|---|---|
|
|
182
183
|
| 🔎 **Explore** | Search & list objects, read any part (source, rules, events, structure, docs, pattern XML), inspect metadata & callers, regex-search source, view the navigation report |
|
|
184
|
+
| 🧭 **Orient & trace** | Rank the objects a task touches, list direct and transitive callers, trace the shortest call path between two objects, check blast radius and safe-delete, follow one variable's data flow. Runs on exported sources through `genexus_wire` (read-only, token-budgeted) |
|
|
183
185
|
| ✏️ **Edit code** | Edit any object part (`full`/`patch`/`ops` modes), variables CRUD, format, create & delete objects, scaffold a Procedure from a **curl command**, edit + rebuild callers in one shot |
|
|
184
186
|
| 🗄️ **Author the data model** | Transaction structure (DSL), **unique/non-unique indexes** (create & drop), **attribute formulas & subtypes**, level Description/Image attributes, **Domain enum values**, folders & modules, table↔transaction relations & redundant-attribute detection |
|
|
185
187
|
| 🧩 **Author other objects** | External Object methods & properties, Menu options, REST API objects, WorkWithPlus / WorkWith patterns, typed .NET generator references |
|
|
@@ -350,6 +352,12 @@ Once installed, here's what unlocks. Try these as your first prompts:
|
|
|
350
352
|
- *"Remove the Export action from the Selection grid of WorkWithPlusReport."*
|
|
351
353
|
- *"Read the Documentation part of the transaction Customer and rewrite it in markdown."*
|
|
352
354
|
|
|
355
|
+
**Architecture, call graph & impact** (`genexus_wire`)
|
|
356
|
+
- *"Before I change CliSaldo, what is the blast radius? Which procedures write it?"*
|
|
357
|
+
- *"Who calls PValidaCreditoLive, directly and through other procedures?"*
|
|
358
|
+
- *"Show me the call path from PEmiteFaturaLive to PValidaCreditoLive."*
|
|
359
|
+
- *"I need to change the invoice interest calculation. Where should I start?"*
|
|
360
|
+
|
|
353
361
|
**Analysis**
|
|
354
362
|
- *"Explain what the procedure ProcessShipment does."* — `genexus_analyze mode=explain` is a compatibility-only envelope and returns `NotImplemented`; use `mode=summary`, `mode=context`, or `genexus_read` for supported analysis and source.
|
|
355
363
|
- *"What SQL does the query in WebPanel CustomerList generate?"*
|
|
@@ -359,7 +367,7 @@ Once installed, here's what unlocks. Try these as your first prompts:
|
|
|
359
367
|
- *"Build the KB and report any errors."*
|
|
360
368
|
- *"Run the unit tests and show me which failed."*
|
|
361
369
|
|
|
362
|
-
The agent picks the right tool from the **
|
|
370
|
+
The agent picks the right tool from the **60 tools** the MCP exposes (read, edit, refactor, analyze, build, data-model authoring, layout automation, DB/DDL, versioning, security, SQL preview, etc.). The full tool list is in [Tool Surface](#tool-surface) below.
|
|
363
371
|
|
|
364
372
|
---
|
|
365
373
|
|
|
@@ -429,7 +437,7 @@ Still stuck? [Open an issue](https://github.com/lennix1337/Genexus18MCP/issues)
|
|
|
429
437
|
|
|
430
438
|
## Tool Surface
|
|
431
439
|
|
|
432
|
-
The worker exposes **
|
|
440
|
+
The worker exposes **60 tools** to the MCP router, grouped by capability below. Most are umbrellas with an `action` (e.g. `genexus_db action=sql_ddl`); the detailed schemas live in [`src/GxMcp.Gateway/tool_definitions.json`](src/GxMcp.Gateway/tool_definitions.json). Feature guides such as the [K2B Designer bridge](docs/k2b-ide-bridge.md), [WorkWithPlus on Empty WebPanels](docs/wwp-empty-webpanel.md), [textual Variables edits](docs/variables-text-integrity.md) and [External Object methods](docs/external-object-method-authoring.md) are listed in the [documentation index](docs/README.md).
|
|
433
441
|
|
|
434
442
|
**Orientation & health**
|
|
435
443
|
- `genexus_whoami` — KB context, version, worker/index/database health, self-update check, next-step hints
|
|
@@ -437,6 +445,11 @@ The worker exposes **50 tools** to the MCP router, grouped by capability below.
|
|
|
437
445
|
- `genexus_recipe` — named playbooks / self-extending macros
|
|
438
446
|
- `genexus_telemetry` — observability (metrics, latency, errors)
|
|
439
447
|
|
|
448
|
+
**Architecture discovery & call graph**
|
|
449
|
+
- `genexus_wire` — read-only, token-budgeted call-graph engine (bundled `gxwire.exe`). Actions: `pack_task` (default; one-shot orientation bundle for a task), `for` (intent ranking with domain synonyms such as `fat` → `faturamento`), `status` (graph size and top hubs), `callers` (direct and transitive), `impact` (blast radius, writers, readers), `path` (shortest call path from `from` to `to`), `slice` (definitions and uses of one variable, `target` = `Object:Variable`), `safe_delete` (blockers before deleting a symbol), `index` (rebuild the cache), `doctor` (engine and cache diagnostics)
|
|
450
|
+
|
|
451
|
+
`genexus_wire` does not go through the Worker or the GeneXus SDK. The Gateway runs `gxwire.exe` on the target folder (`dir`, `kb`, or the active KB path) and returns its output. It reads exported source text (`.prc`, `.trn`, `.wp`, `.sdp`, `.xml`, `.txt`, `.gx`, `.gxd`) with regex heuristics, so answers reflect the exported files, not the live KB; an empty folder returns `empty="true"`. Use it to decide where to look and what a change touches. Use `genexus_query` to search live objects and `genexus_read` to read their parts. Parameters: `task` (`pack_task`, `for`), `target` (`callers`, `impact`, `slice`, `safe_delete`), `from`/`to` (`path`), `format`, `token_budget` (default 1200), `full`, `kb`/`dir`. `format` is `toon` (compact, recommended), `xml` (default), `json`, or `mermaid`; mermaid renders `status`, `callers`, `impact`, `path` and `pack_task`, and other actions return XML. The only file it writes is `.gxwire_cache.bin` in the target folder, on `index` and when the cache is stale.
|
|
452
|
+
|
|
440
453
|
**Search & discovery**
|
|
441
454
|
- `genexus_query` — object search (prefixes `name:`, `type:`, `usedby:`, `parent:`, …)
|
|
442
455
|
- `genexus_list_objects` — paginated object listing with aggregates
|
|
@@ -486,6 +499,7 @@ in GeneXus first.
|
|
|
486
499
|
- `genexus_refactor` — rename, extract procedure, WWP condition set
|
|
487
500
|
- `genexus_apply_pattern` — apply a GeneXus pattern (WorkWith, WorkWithPlus, …); `mode=actions` manages typed WorkWithPlus grid actions and Action Groups
|
|
488
501
|
- `genexus_wwp` — typed WorkWithPlus editing: Action Groups, atomic native `add_grid_attribute`, plus `add_tab`, `move_tab`, and `remove_tab` for WebPanel tabs and typed children
|
|
502
|
+
- `genexus_workwith` — typed authoring of standard WorkWith (WorkWith for Web) pattern actions on tabs (`General`, etc.), procedure calls, conditions, and parameters
|
|
489
503
|
- `genexus_compare` — IDE "Compare Objects" parity (`IComparerService`)
|
|
490
504
|
- `genexus_merge` — 2- or 3-way object merge (`IMergeService`)
|
|
491
505
|
|
|
@@ -613,6 +627,15 @@ genexus-mcp layout status # native layout automation state
|
|
|
613
627
|
|
|
614
628
|
Global flags: `--format toon|json|text` · `--fields f1,f2,...` · `--limit N` · `--query <text>` · `--quiet` · `--no-color`.
|
|
615
629
|
|
|
630
|
+
`genexus-mcp wire` is the exception: it forwards its arguments unchanged to the bundled `gxwire.exe` (exit code included), so its `--format` is GxWire's:
|
|
631
|
+
|
|
632
|
+
```bash
|
|
633
|
+
genexus-mcp wire --dir ./exports/KBTeste --pack-task "invoice interest" --format toon
|
|
634
|
+
genexus-mcp wire --dir ./exports/KBTeste --callers PValidaCreditoLive
|
|
635
|
+
genexus-mcp wire --dir ./exports/KBTeste --path PEmiteFaturaLive:PValidaCreditoLive
|
|
636
|
+
genexus-mcp wire --help
|
|
637
|
+
```
|
|
638
|
+
|
|
616
639
|
Full contract: [`docs/axi_cli_contract.md`](docs/axi_cli_contract.md). Best-practices playbook: [`docs/llm_cli_mcp_playbook.md`](docs/llm_cli_mcp_playbook.md).
|
|
617
640
|
|
|
618
641
|
---
|
|
@@ -721,6 +744,7 @@ Want to contribute or run a local dev build?
|
|
|
721
744
|
1. Clone this repo on Windows.
|
|
722
745
|
2. Run `.\build.ps1` to restore and build the C# components and package the local artifacts. The script checks for the required .NET SDK and GeneXus 18 installation.
|
|
723
746
|
3. If GeneXus is installed outside the default path, set `$env:GX_PATH` to its installation folder before running the build. A Knowledge Base is only needed for runtime testing.
|
|
747
|
+
4. GxWire (needed for `genexus_wire` and `genexus-mcp wire`) is a Rust engine in `src/gxwire`. Install the Rust toolchain (`cargo`). `build.ps1` builds it in release mode and copies `gxwire.exe` into `publish/`. Without `cargo` that step is skipped without a message, and the tool returns `GxwireNotFound`. The Gateway looks for `gxwire.exe` next to itself, in `publish/`, in `src/gxwire/target/release/`, and on `PATH`. The CLI also honours `GENEXUS_MCP_GXWIRE_EXE`.
|
|
724
748
|
|
|
725
749
|
### Bundled AI skills (`.gemini/skills/`)
|
|
726
750
|
|
package/cli/docs.test.js
CHANGED
|
@@ -74,3 +74,24 @@ test('the README release section describes the release flow that actually ships'
|
|
|
74
74
|
// npm authentication is OIDC Trusted Publishing, so there is no token secret.
|
|
75
75
|
assert.match(section, /OIDC Trusted Publishing/);
|
|
76
76
|
});
|
|
77
|
+
|
|
78
|
+
test('the docs index lists every top-level document and every link resolves', () => {
|
|
79
|
+
const docsDir = path.join(repoRoot, 'docs');
|
|
80
|
+
const index = read('docs/README.md');
|
|
81
|
+
const targets = new Set(
|
|
82
|
+
[...index.matchAll(/\]\(([^)#\s]+)(?:#[^)]*)?\)/g)]
|
|
83
|
+
.map((match) => match[1])
|
|
84
|
+
.filter((target) => !/^[a-z]+:/i.test(target))
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
const unlisted = fs.readdirSync(docsDir)
|
|
88
|
+
.filter((name) => name.endsWith('.md') && name !== 'README.md')
|
|
89
|
+
.filter((name) => !targets.has(name));
|
|
90
|
+
assert.deepEqual(unlisted, [], 'Add these documents to docs/README.md');
|
|
91
|
+
|
|
92
|
+
const broken = [...targets].filter((target) => !fs.existsSync(path.join(docsDir, target)));
|
|
93
|
+
assert.deepEqual(broken, [], 'docs/README.md links to missing files');
|
|
94
|
+
|
|
95
|
+
assert.match(read('README.md'), /\]\(docs\/README\.md\)/);
|
|
96
|
+
assert.match(read('AGENTS.md'), /\]\(docs\/README\.md\)/);
|
|
97
|
+
});
|
package/cli/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
const { spawn } = require('child_process');
|
|
2
|
+
const fs = require('fs');
|
|
2
3
|
const {
|
|
3
4
|
getGatewayExePath,
|
|
5
|
+
getGxwireExePath,
|
|
4
6
|
applyLauncherConfigOrExit,
|
|
5
7
|
isPathLikelyAppLockerBlocked
|
|
6
8
|
} = require('./lib/config');
|
|
@@ -67,7 +69,7 @@ const GLOBAL_DEFAULTS = {
|
|
|
67
69
|
// Single source of truth for command routing: cli/run.js imports both sets so the
|
|
68
70
|
// AXI-vs-passthrough decision (stdout vs stderr for unhandled errors) cannot drift
|
|
69
71
|
// from the parser again — issue #207 was caused by two hand-synced copies.
|
|
70
|
-
const KNOWN_COMMANDS = new Set(['status', 'doctor', 'tools', 'config', 'init', 'setup', 'whoami', 'uninstall', 'kb', 'clients', 'help', 'home', 'axi', 'llm', 'layout', 'update', 'version']);
|
|
72
|
+
const KNOWN_COMMANDS = new Set(['status', 'doctor', 'tools', 'config', 'init', 'setup', 'whoami', 'uninstall', 'kb', 'clients', 'help', 'home', 'axi', 'llm', 'layout', 'update', 'version', 'wire']);
|
|
71
73
|
|
|
72
74
|
// Version query aliases. `-v` deliberately is NOT an alias of `--help`/`-h`: those
|
|
73
75
|
// return immediately, while the version aliases are command tokens so that remaining
|
|
@@ -153,6 +155,11 @@ function parseArgs(argv) {
|
|
|
153
155
|
tokens.shift();
|
|
154
156
|
}
|
|
155
157
|
|
|
158
|
+
if (result.command === 'wire') {
|
|
159
|
+
result.passthroughArgs = tokens;
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
162
|
+
|
|
156
163
|
for (let i = 0; i < tokens.length; i += 1) {
|
|
157
164
|
const token = tokens[i];
|
|
158
165
|
|
|
@@ -718,6 +725,25 @@ async function main(argv) {
|
|
|
718
725
|
case 'update':
|
|
719
726
|
result = await handleUpdate(parsed.options, ctx);
|
|
720
727
|
break;
|
|
728
|
+
case 'wire': {
|
|
729
|
+
const gxwireExe = getGxwireExePath();
|
|
730
|
+
if (!fs.existsSync(gxwireExe)) {
|
|
731
|
+
console.error(`[genexus-mcp] gxwire binary not found at: ${gxwireExe}`);
|
|
732
|
+
return EXIT_CODES.ERROR;
|
|
733
|
+
}
|
|
734
|
+
const wireArgs = argv.slice(1);
|
|
735
|
+
const child = spawn(gxwireExe, wireArgs, {
|
|
736
|
+
stdio: 'inherit',
|
|
737
|
+
windowsHide: true
|
|
738
|
+
});
|
|
739
|
+
return new Promise((resolve) => {
|
|
740
|
+
child.on('close', (code) => resolve(code ?? 0));
|
|
741
|
+
child.on('error', (err) => {
|
|
742
|
+
console.error(`[genexus-mcp] Failed to launch gxwire: ${err.message}`);
|
|
743
|
+
resolve(EXIT_CODES.ERROR);
|
|
744
|
+
});
|
|
745
|
+
});
|
|
746
|
+
}
|
|
721
747
|
default:
|
|
722
748
|
writeStructured(
|
|
723
749
|
process.stdout,
|
package/cli/lib/config.js
CHANGED
|
@@ -54,6 +54,21 @@ function getGatewayExePath() {
|
|
|
54
54
|
return path.join(__dirname, '..', '..', 'publish', 'GxMcp.Gateway.exe');
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
function getGxwireExePath() {
|
|
58
|
+
if (process.env.GENEXUS_MCP_GXWIRE_EXE) {
|
|
59
|
+
return process.env.GENEXUS_MCP_GXWIRE_EXE;
|
|
60
|
+
}
|
|
61
|
+
const publishPath = path.join(__dirname, '..', '..', 'publish', 'gxwire.exe');
|
|
62
|
+
if (fs.existsSync(publishPath)) {
|
|
63
|
+
return publishPath;
|
|
64
|
+
}
|
|
65
|
+
const releaseTarget = path.join(__dirname, '..', '..', 'src', 'gxwire', 'target', 'release', 'gxwire.exe');
|
|
66
|
+
if (fs.existsSync(releaseTarget)) {
|
|
67
|
+
return releaseTarget;
|
|
68
|
+
}
|
|
69
|
+
return publishPath;
|
|
70
|
+
}
|
|
71
|
+
|
|
57
72
|
function getToolDefinitionsPath() {
|
|
58
73
|
// The gateway loads tool_definitions.json from its own exe directory at
|
|
59
74
|
// runtime (see GxMcp.Gateway/McpRouter.cs). The packaged distribution
|
|
@@ -1046,7 +1061,7 @@ function nodeEntrypointInfo(args) {
|
|
|
1046
1061
|
if (arg.startsWith('-')) {
|
|
1047
1062
|
// Inline/evaluated Node programs may start MCP, but their semantics
|
|
1048
1063
|
// cannot be established without executing them. Keep them unknown.
|
|
1049
|
-
if (/^(?:-e|-p|--
|
|
1064
|
+
if (/^(?:-e|-p|--ev(?:al)(?:=|$)|--print(?:=|$)|--check(?:=|$))/.test(arg)) {
|
|
1050
1065
|
return { state: 'indeterminate', value: null };
|
|
1051
1066
|
}
|
|
1052
1067
|
continue;
|
|
@@ -2401,6 +2416,7 @@ module.exports = {
|
|
|
2401
2416
|
generateConfig,
|
|
2402
2417
|
generateNeutralConfig,
|
|
2403
2418
|
getGatewayExePath,
|
|
2419
|
+
getGxwireExePath,
|
|
2404
2420
|
getToolDefinitionsPath,
|
|
2405
2421
|
getGeneXusVersionCatalog,
|
|
2406
2422
|
getGeneXusCatalogEntries,
|
package/cli/run.test.js
CHANGED
|
@@ -88,7 +88,7 @@ function stopLingeringGatewayStubs(dirPath, deps = {}) {
|
|
|
88
88
|
const escapedDir = canonicalDir.replace(/'/g, "''");
|
|
89
89
|
const processPipeline = [
|
|
90
90
|
`Get-CimInstance Win32_Process -Filter "Name = 'GxMcp.Gateway.exe'"`,
|
|
91
|
-
'Where-Object { if (-not $_.ExecutablePath -
|
|
91
|
+
'Where-Object { if (-not $targetDirectory) { return $false }; $imagePath = $_.ExecutablePath; if (-not $imagePath) { $imagePath = (Get-Process -Id $_.ProcessId -ErrorAction SilentlyContinue).Path }; if (-not $imagePath) { return $false }; $processDirectory = (Get-Item -LiteralPath ([System.IO.Path]::GetDirectoryName($imagePath)) -ErrorAction SilentlyContinue).FullName; $processDirectory -and [System.StringComparer]::OrdinalIgnoreCase.Equals($processDirectory, $targetDirectory) }',
|
|
92
92
|
'ForEach-Object { $processId = $_.ProcessId; Stop-Process -Id $processId -Force; try { Wait-Process -Id $processId -Timeout 5 -ErrorAction SilentlyContinue } catch { } }'
|
|
93
93
|
].join(' | ');
|
|
94
94
|
const script = `$ErrorActionPreference = 'SilentlyContinue'; $targetDirectory = (Get-Item -LiteralPath '${escapedDir}' -ErrorAction SilentlyContinue).FullName; ${processPipeline}`;
|
|
@@ -126,10 +126,15 @@ the profile(s) that expose it and the setting to change. Legacy alias names
|
|
|
126
126
|
remain callable through compatibility rewrites but are not listed as tools.
|
|
127
127
|
|
|
128
128
|
The public list omits examples and shortens long descriptions to stay within
|
|
129
|
-
the enforced per-profile and per-tool byte budgets. Each tool description
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
129
|
+
the enforced per-profile and per-tool byte budgets. Each tool description is a
|
|
130
|
+
purpose summary of at most 200 characters (whole sentences when they fit)
|
|
131
|
+
followed by a pointer to `genexus://kb/tool-help/<tool>`; read that resource
|
|
132
|
+
when full constraints, rationale, or examples are needed. The original
|
|
133
|
+
description and complete input schema remain available there.
|
|
134
|
+
|
|
135
|
+
`initialize` and `server/discover` return `instructions`: a short
|
|
136
|
+
intent-to-tool routing guide built from the active profile, so it only names
|
|
137
|
+
tools the client can call.
|
|
133
138
|
|
|
134
139
|
### KB context, leases, and compatibility
|
|
135
140
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "genexus-mcp",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.14.0",
|
|
4
4
|
"mcpName": "io.github.lennix1337/genexus",
|
|
5
5
|
"description": "GeneXus 16, GeneXus 17, GeneXus 18 MCP server with native SDK support; basic legacy compatibility for GeneXus Evolution 3, GeneXus Evolution 2, GeneXus Evolution 1, GeneXus 15, GeneXus 9.0, GeneXus 8.0 via com-gxpublic and dotnet-reflection drivers — read, edit, and analyze Knowledge Base objects directly from Claude, Cursor, and other AI agents over the Model Context Protocol.",
|
|
6
6
|
"keywords": [
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"targets": {
|
|
8
8
|
".NETCoreApp,Version=v10.0": {},
|
|
9
9
|
".NETCoreApp,Version=v10.0/win-x64": {
|
|
10
|
-
"GxMcp.Gateway/3.
|
|
10
|
+
"GxMcp.Gateway/3.14.0": {
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"Newtonsoft.Json": "13.0.3",
|
|
13
13
|
"System.Management": "10.0.5",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
}
|
|
67
67
|
},
|
|
68
68
|
"libraries": {
|
|
69
|
-
"GxMcp.Gateway/3.
|
|
69
|
+
"GxMcp.Gateway/3.14.0": {
|
|
70
70
|
"type": "project",
|
|
71
71
|
"serviceable": false,
|
|
72
72
|
"sha512": ""
|
|
Binary file
|
|
Binary file
|
package/publish/config.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
2
|
+
"ConfigSchemaVersion": 2,
|
|
3
3
|
"GeneXus": {
|
|
4
4
|
"WorkerExecutable": "worker\\\\GxMcp.Worker.exe",
|
|
5
5
|
"InstallationPath": "C:\\Program Files (x86)\\GeneXus\\GeneXus18"
|
|
6
6
|
},
|
|
7
|
-
"
|
|
8
|
-
"ResolutionPolicy": "strict"
|
|
9
|
-
},
|
|
7
|
+
"GatewayMode": "stdio-isolated",
|
|
10
8
|
"Server": {
|
|
11
|
-
"
|
|
12
|
-
"HttpPort": 0,
|
|
9
|
+
"TerseResponses": true,
|
|
13
10
|
"EmitStructuredContent": false,
|
|
14
11
|
"McpStdio": true,
|
|
15
|
-
"
|
|
12
|
+
"HttpPort": 0,
|
|
13
|
+
"SessionIdleTimeoutMinutes": 10,
|
|
16
14
|
"WorkerIdleTimeoutMinutes": 5
|
|
17
15
|
},
|
|
18
|
-
"
|
|
16
|
+
"Environment": {
|
|
17
|
+
"ResolutionPolicy": "strict"
|
|
18
|
+
}
|
|
19
19
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "gxmcp-release-manifest/1",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"sourceCommit": "
|
|
3
|
+
"version": "3.14.0",
|
|
4
|
+
"sourceCommit": "f01292782f848a1dcdc34a25c4df587109fae958",
|
|
5
5
|
"sourceCommitPolicy": "exact-tag",
|
|
6
|
-
"generatedAtUtc": "2026-10-
|
|
6
|
+
"generatedAtUtc": "2026-10-11T15:50:22.5851347Z",
|
|
7
7
|
"runtime": {
|
|
8
8
|
"gateway": "net10.0-windows",
|
|
9
9
|
"worker": "net48-x86",
|
|
@@ -15,33 +15,33 @@
|
|
|
15
15
|
"2026-07-28"
|
|
16
16
|
],
|
|
17
17
|
"schema": "tool_definitions.json",
|
|
18
|
-
"schemaSha256": "
|
|
18
|
+
"schemaSha256": "440b995c7f9a52d263eddf25540360171074afd2348c41c6c67d46f9154c46ea",
|
|
19
19
|
"provenance": "gxmcp-sbom.json",
|
|
20
20
|
"artifacts": [
|
|
21
21
|
{
|
|
22
22
|
"path": "gxmcp-sbom.json",
|
|
23
23
|
"size": 591,
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "86f802b1181f634a72135ec29d3a5d060e413232af5b2a244f3144c2b87f8054"
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
"path": "GxMcp.Gateway.exe",
|
|
28
28
|
"size": 162304,
|
|
29
|
-
"sha256": "
|
|
29
|
+
"sha256": "fa65c1d520a4f11c773c7cc42a7dd7f7d526593bc1fc9f45186c5584a731b26f"
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
"path": "nexus-ide.vsix",
|
|
33
|
-
"size":
|
|
34
|
-
"sha256": "
|
|
33
|
+
"size": 1319956,
|
|
34
|
+
"sha256": "f88521f2a4c580ecdbf389335fff35c83dad4b7b862108c9d603477b43ce2b8b"
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
"path": "tool_definitions.json",
|
|
38
|
-
"size":
|
|
39
|
-
"sha256": "
|
|
38
|
+
"size": 152232,
|
|
39
|
+
"sha256": "440b995c7f9a52d263eddf25540360171074afd2348c41c6c67d46f9154c46ea"
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
"path": "worker/GxMcp.Worker.exe",
|
|
43
|
-
"size":
|
|
44
|
-
"sha256": "
|
|
43
|
+
"size": 4161024,
|
|
44
|
+
"sha256": "921fd79cde9d1a2ae3c915ac5c525c3adac7baf029ea47989aa1ae6296bbd251"
|
|
45
45
|
}
|
|
46
46
|
]
|
|
47
47
|
}
|
package/publish/gxmcp-sbom.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "gxmcp-provenance/1",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"sourceCommit": "
|
|
3
|
+
"version": "3.14.0",
|
|
4
|
+
"sourceCommit": "f01292782f848a1dcdc34a25c4df587109fae958",
|
|
5
5
|
"sourceCommitPolicy": "exact-tag",
|
|
6
6
|
"components": [
|
|
7
7
|
{
|
|
8
8
|
"name": "genexus-mcp",
|
|
9
9
|
"lockfile": "package-lock.json",
|
|
10
10
|
"size": 38806,
|
|
11
|
-
"sha256": "
|
|
11
|
+
"sha256": "6b86c72717bbe224a34372c0a7d795f4a0b05acd0948f66794ee9b6fcef809ab"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
"name": "nexus-ide",
|
|
15
15
|
"lockfile": "src/nexus-ide/package-lock.json",
|
|
16
|
-
"size":
|
|
17
|
-
"sha256": "
|
|
16
|
+
"size": 186678,
|
|
17
|
+
"sha256": "953ed5fc3493b150b1fdb3d410dbff02c15ea6da3b31555490e26773b9e4efad"
|
|
18
18
|
}
|
|
19
19
|
]
|
|
20
20
|
}
|
|
Binary file
|
package/publish/nexus-ide.vsix
CHANGED
|
Binary file
|
package/publish/start_mcp.bat
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
@echo off
|
|
2
|
-
setlocal
|
|
3
|
-
|
|
4
|
-
rem Resolve the directory containing this bat file (works at any install path).
|
|
5
|
-
set "BAT_DIR=%~dp0"
|
|
6
|
-
rem Remove trailing backslash so paths join cleanly.
|
|
7
|
-
if "%BAT_DIR:~-1%"=="\" set "BAT_DIR=%BAT_DIR:~0,-1%"
|
|
8
|
-
|
|
9
|
-
rem Only set GX_CONFIG_PATH when the caller hasn't provided one.
|
|
10
|
-
if not defined GX_CONFIG_PATH (
|
|
11
|
-
set "GX_CONFIG_PATH=%BAT_DIR%\config.json"
|
|
12
|
-
)
|
|
13
|
-
|
|
14
|
-
set "GX_MCP_STDIO=true"
|
|
15
|
-
|
|
16
|
-
rem Launch the gateway exe that lives alongside this bat file.
|
|
17
|
-
set "GATEWAY_EXE=%BAT_DIR%\GxMcp.Gateway.exe"
|
|
18
|
-
if exist "%GATEWAY_EXE%" (
|
|
19
|
-
"%GATEWAY_EXE%"
|
|
20
|
-
exit /b %ERRORLEVEL%
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
rem Fallback: run the DLL via dotnet (dev layout where .exe is not present).
|
|
24
|
-
cd /d "%BAT_DIR%"
|
|
1
|
+
@echo off
|
|
2
|
+
setlocal
|
|
3
|
+
|
|
4
|
+
rem Resolve the directory containing this bat file (works at any install path).
|
|
5
|
+
set "BAT_DIR=%~dp0"
|
|
6
|
+
rem Remove trailing backslash so paths join cleanly.
|
|
7
|
+
if "%BAT_DIR:~-1%"=="\" set "BAT_DIR=%BAT_DIR:~0,-1%"
|
|
8
|
+
|
|
9
|
+
rem Only set GX_CONFIG_PATH when the caller hasn't provided one.
|
|
10
|
+
if not defined GX_CONFIG_PATH (
|
|
11
|
+
set "GX_CONFIG_PATH=%BAT_DIR%\config.json"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
set "GX_MCP_STDIO=true"
|
|
15
|
+
|
|
16
|
+
rem Launch the gateway exe that lives alongside this bat file.
|
|
17
|
+
set "GATEWAY_EXE=%BAT_DIR%\GxMcp.Gateway.exe"
|
|
18
|
+
if exist "%GATEWAY_EXE%" (
|
|
19
|
+
"%GATEWAY_EXE%"
|
|
20
|
+
exit /b %ERRORLEVEL%
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
rem Fallback: run the DLL via dotnet (dev layout where .exe is not present).
|
|
24
|
+
cd /d "%BAT_DIR%"
|
|
25
25
|
dotnet GxMcp.Gateway.dll
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
[
|
|
2
|
+
{"name":"genexus_k2b_designer","description":"Inspect and edit an already-active K2B WebPanel Designer through the open GeneXus IDE document. The IDE bridge must be installed and started with the same explicit KB and pipe. No inactive Designer activation or pattern conversion is performed. Edits require expectedVersion; preview returns a read-only change summary; saves use the native IDE path and should be independently reread.","inputSchema":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string","description":"Name of an open WebPanel with an active K2B Designer."},"action":{"type":"string","enum":["inspect","tree","preview","set_property","add_node","move_node","remove_node"],"default":"inspect","description":"Inspect the active Designer, read its tree, preview a change, or apply a typed edit."},"operation":{"type":"string","enum":["set_property","add_node","move_node","remove_node"],"description":"Mutation to validate when action=preview."},"path":{"type":"string","description":"Designer node path returned by tree; root is root."},"property":{"type":"string","description":"Exact SDK property name for set_property."},"value":{"type":"string","description":"Property value in the K2B SDK string format."},"nodeType":{"type":"string","description":"SDK node type offered by the Designer for add_node."},"destination":{"type":"string","description":"Parent node path for move_node."},"index":{"type":"integer","minimum":0,"description":"Optional destination child index for move_node."},"expectedVersion":{"type":"string","description":"Version from inspect, tree, or preview; required for mutations."},"confirm":{"type":"boolean","description":"Required for remove_node."},"kb":{"type":"string","description":"Explicit KB alias."}},"examples":[{"name":"SamplePanel","action":"tree"},{"name":"SamplePanel","action":"preview","operation":"set_property","path":"root","property":"Title","value":"Orders"},{"name":"SamplePanel","action":"set_property","path":"root","property":"Title","value":"Orders","expectedVersion":"<version from preview>"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
|
|
2
3
|
{"name":"genexus_data_view","description":"Native, typed, atomic Transaction + Data View authoring over an existing physical table. action=inspect|dry_run|create|update|delete. dry_run performs validation without constructing or saving SDK objects. create/update persist the root-only Transaction and Data View, then reread and verify the committed pair; commit and verification status are reported separately. action=delete is destructive and requires confirm=true when dryRun=false. No action implicitly runs Specify, Generate, Build, Rebuild, Reorg, compilation, publish, execution, or tests; the response includes a no-DDL reorg preview.","inputSchema":{"type":"object","required":["action","transaction","dataViewName"],"additionalProperties":false,"properties":{"action":{"type":"string","enum":["inspect","dry_run","create","update","delete"],"description":"Operation to inspect, preview, create, update, or delete a native Data View mapping."},"transaction":{"type":"string","description":"Root-only Transaction name."},"dataViewName":{"type":"string","description":"Data View name associated with the Transaction logical table."},"dataStore":{"type":"string","description":"Existing GeneXus data store category (default Default)."},"schema":{"type":"string","description":"Existing physical schema."},"table":{"type":"string","description":"Existing physical table and GeneXus table-metadata name."},"attributeMappings":{"type":"array","items":{"type":"object","required":["attribute","column"],"additionalProperties":false,"properties":{"attribute":{"type":"string"},"column":{"type":"string"},"key":{"type":"boolean","default":false}}}},"updatable":{"type":"boolean","default":true},"expectedVersion":{"type":"string","description":"Optimistic concurrency token returned by inspect/dry_run/create/update/delete preview."},"dryRun":{"type":"boolean","default":false,"description":"Forces every action to remain read-only; create/update validate their complete definition and delete returns a deletion preview."},"confirm":{"type":"boolean","description":"Required for action=delete when dryRun=false; explicitly authorizes removing the Transaction and Data View."},"rollbackOnFailure":{"type":"boolean","default":true,"description":"Atomic SDK rollback is always enforced; this flag records the caller's rollback intent."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"dry_run","transaction":"LedgerEntryView","dataViewName":"LedgerEntryDV","dataStore":"Default","schema":"APP","table":"LEDGERENTRY","updatable":true,"attributeMappings":[{"attribute":"LedgerEntryId","column":"LedgerEntryId","key":true},{"attribute":"LedgerEntryAmount","column":"LedgerEntryAmount"}],"rollbackOnFailure":true},{"action":"delete","transaction":"LedgerEntryView","dataViewName":"LedgerEntryDV","confirm":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
|
|
3
4
|
{"name":"genexus_whoami","description":"KB context + version + health (worker/index/database) + next-step hints. Call FIRST every session. Lean by default; pass verbose=true ONCE for the inline playbooks + skills catalog of verified GeneXus reference resources (navigation, GAM, SD panel, WebPanel events). For a minimal connection+index health check use genexus_doctor.","inputSchema":{"type":"object","properties":{"verbose":{"type":"boolean","description":"Include the static playbooks + skills catalog + per-tool stats/heatmap. Default false (lean health payload)."}},"additionalProperties":false,"examples":[{},{"verbose":true}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
5
|
+
{"name":"genexus_wire","description":"MANDATORY ARCHITECTURAL DISCOVERY & CALL GRAPH ENGINE (Rust native, sub-10ms). Call this FIRST before genexus_read, genexus_query, or editing KB objects to orient on any task. Features domain synonyms (fat->faturamento), shortest-path tracing, auto-refreshed cache (mtime), callers/impact, and native Mermaid diagrams. action=pack_task (default, orientation bundle) | status (KB status & hubs) | for (semantic search with synonyms) | callers (who calls symbol) | impact (blast radius) | path (trace shortest path from A to B via 'from' and 'to') | slice (variable data flow) | safe_delete (safe deletion check) | index (fast cache) | doctor (engine diagnostics).","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["pack_task","status","for","callers","impact","path","slice","safe_delete","index","doctor"],"default":"pack_task","description":"Architectural discovery action to run."},"task":{"type":"string","description":"Intent / task description in natural language (for pack_task or for actions)."},"target":{"type":"string","description":"Symbol name (e.g. 'CustomerProc' or 'CustomerProc:VarName' for slice)."},"from":{"type":"string","description":"Source symbol name for path action (e.g. 'PInvoice')."},"to":{"type":"string","description":"Target symbol name for path action (e.g. 'Customer')."},"token_budget":{"type":"integer","description":"Maximum token budget cap (default 1200)."},"full":{"type":"boolean","default":false,"description":"Bypass token budget clipping and output full untruncated graph/results."},"format":{"type":"string","enum":["xml","json","toon","mermaid"],"default":"xml","description":"Output format: toon (~40% savings, recommended), xml, json, or mermaid (graph diagram)."},"kb":{"type":"string","description":"KB alias or directory path (defaults to active open KB)."},"dir":{"type":"string","description":"Explicit KB directory path override."}},"additionalProperties":false,"examples":[{"action":"pack_task","task":"Update invoice discount calculation"},{"action":"status"},{"action":"path","from":"PInvoice","to":"Customer","format":"mermaid"},{"action":"for","task":"faturamento clientes"},{"action":"callers","target":"CalculateDiscount"},{"action":"impact","target":"InvoiceTotal"},{"action":"slice","target":"CalculateDiscount:DiscountRate"},{"action":"doctor"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
4
6
|
{"name":"genexus_recipe","description":"Named playbooks + self-extending macros. action=list|describe|suggest_macro|crystallize.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Recipe key (latest version), 'name@v1' (pinned), or 'list'."},"action":{"type":"string","enum":["list","describe","suggest_macro","crystallize"],"description":"list: show recipes; describe: inspect recipe; suggest_macro: detect repeated sequences; crystallize: save sequence as recipe."},"windowMinutes":{"type":"integer","description":"suggest_macro: history window (default 30)."},"minRepetitions":{"type":"integer","description":"suggest_macro: threshold (default 3)."},"macroName":{"type":"string","description":"crystallize: proposed name from suggest_macro."},"description":{"type":"string","description":"crystallize: human-readable description."},"steps":{"type":"array","items":{"type":"object","description":"Tool call step object or template."},"description":"crystallize: ordered array of tool call steps to include in the macro."}},"examples":[{"name":"list"},{"name":"wwp_on_transaction"},{"action":"suggest_macro"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
|
|
5
|
-
{"name":"genexus_query","description":"Search objects in active KB. Prefixes: name:, type:, usedby:, parent:, parentPath:, description:. name:\"X\" (or bare quoted \"X\") demands exact-name match — use it when you know the object's name. Compact by default. Pass kbs:[...] to run the same read-only search across an explicit set of already-open KBs in one bounded, per-KB-reported call. See genexus://kb/tool-help/genexus_query. Requires the KB index to be Ready — check genexus_lifecycle action=status if results look empty.","inputSchema":{"type":"object","properties":{"query":{"type":"string"},"typeFilter":{"type":"string"},"domainFilter":{"type":"string"},"limit":{"type":"integer"},"inline_read_top":{"type":"integer","description":"0-3. Inline reads of top N."},"sort":{"type":"string","enum":["relevance","lastUpdate"],"description":"relevance (default) or lastUpdate (newest first; bypasses score ranking)."},"since":{"type":"string","description":"ISO-8601 UTC. Only items with lastUpdate >= since."},"modifiedBefore":{"type":"string","description":"ISO-8601 UTC. Only items with lastUpdate < modifiedBefore."},"cursor":{"type":"string","description":"Opaque token from prior nextCursor. Use with sort=lastUpdate for stable paging."},"kb":{"type":"string","description":"KB alias."},"kbs":{"type":"array","items":{"type":"string"},"description":"Federated read-only discovery over an explicit KB set (max 16). Uses only already-open KBs and never opens one (the Worker pool can evict a KB you are working in). Results are grouped per KB with per-KB status and complete flags plus a coverage summary; a not-open/warming/slow/failing KB is reported individually, never as zero matches. Mutually exclusive with kb."},"cursors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-KB continuation: map each alias in kbs to that KB's nextCursor. An alias outside kbs is rejected, not dropped."},"maxConcurrency":{"type":"integer","description":"Federation only: KBs searched in parallel (default 4, max 8)."},"maxTotalResults":{"type":"integer","description":"Federation only: total results across all KBs (default 500, max 5000). Overflow marks the affected KB incomplete with its nextCursor intact."},"perKbTimeoutMs":{"type":"integer","description":"Federation only: per-KB deadline in ms (default 30000, max 120000)."},"axiCompact":{"type":"boolean","description":"Compact projection (default true).","default":true},"exactMatch":{"type":"boolean","description":"Require an exact object-name match."}},"required":["query"],"examples":[{"query":"type:Transaction parent:Customers"},{"query":"\"Customer\"","limit":5},{"query":"name:\"Customer\"","kbs":["KbAlpha","KbBeta"]}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
7
|
+
{"name":"genexus_query","description":"Search objects in active KB. Prefixes: name:, type:, usedby:, parent:, parentPath:, description:. name:\"X\" (or bare quoted \"X\") demands exact-name match — use it when you know the object's name. Compact by default. Pass kbs:[...] to run the same read-only search across an explicit set of already-open KBs in one bounded, per-KB-reported call. TIP: For architectural orientation, intent ranking, or call graph impact, call genexus_wire first (sub-10ms, token-budgeted). See genexus://kb/tool-help/genexus_query. Requires the KB index to be Ready — check genexus_lifecycle action=status if results look empty.","inputSchema":{"type":"object","properties":{"query":{"type":"string"},"typeFilter":{"type":"string"},"domainFilter":{"type":"string"},"limit":{"type":"integer"},"inline_read_top":{"type":"integer","description":"0-3. Inline reads of top N."},"sort":{"type":"string","enum":["relevance","lastUpdate"],"description":"relevance (default) or lastUpdate (newest first; bypasses score ranking)."},"since":{"type":"string","description":"ISO-8601 UTC. Only items with lastUpdate >= since."},"modifiedBefore":{"type":"string","description":"ISO-8601 UTC. Only items with lastUpdate < modifiedBefore."},"cursor":{"type":"string","description":"Opaque token from prior nextCursor. Use with sort=lastUpdate for stable paging."},"kb":{"type":"string","description":"KB alias."},"kbs":{"type":"array","items":{"type":"string"},"description":"Federated read-only discovery over an explicit KB set (max 16). Uses only already-open KBs and never opens one (the Worker pool can evict a KB you are working in). Results are grouped per KB with per-KB status and complete flags plus a coverage summary; a not-open/warming/slow/failing KB is reported individually, never as zero matches. Mutually exclusive with kb."},"cursors":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-KB continuation: map each alias in kbs to that KB's nextCursor. An alias outside kbs is rejected, not dropped."},"maxConcurrency":{"type":"integer","description":"Federation only: KBs searched in parallel (default 4, max 8)."},"maxTotalResults":{"type":"integer","description":"Federation only: total results across all KBs (default 500, max 5000). Overflow marks the affected KB incomplete with its nextCursor intact."},"perKbTimeoutMs":{"type":"integer","description":"Federation only: per-KB deadline in ms (default 30000, max 120000)."},"axiCompact":{"type":"boolean","description":"Compact projection (default true).","default":true},"exactMatch":{"type":"boolean","description":"Require an exact object-name match."}},"required":["query"],"examples":[{"query":"type:Transaction parent:Customers"},{"query":"\"Customer\"","limit":5},{"query":"name:\"Customer\"","kbs":["KbAlpha","KbBeta"]}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
6
8
|
{"name":"genexus_list_objects","description":"List objects with pagination. Feed nextOffset until hasMore=false. Every item exposes its persisted GUID and path; verbose=true also exposes the typed EntityKey when available.","inputSchema":{"type":"object","properties":{"filter":{"type":"string","description":"Legacy: name OR description. Prefer nameFilter/descriptionFilter."},"nameFilter":{"type":"string","description":"Substring on name."},"descriptionFilter":{"type":"string","description":"Substring on description."},"pathPrefix":{"type":"string","description":"Folder prefix, e.g. 'Root Module/X/'."},"limit":{"type":"integer"},"offset":{"type":"integer"},"parent":{"type":"string"},"parentPath":{"type":"string"},"typeFilter":{"type":"string"},"verbose":{"type":"boolean","description":"Full item shape."},"sort":{"type":"string","enum":["name","lastUpdate"],"description":"name (default, type-bucketed) or lastUpdate (newest first)."},"since":{"type":"string","description":"ISO-8601 UTC. Only items with lastUpdate >= since."},"modifiedBefore":{"type":"string","description":"ISO-8601 UTC. Only items with lastUpdate < modifiedBefore."},"cursor":{"type":"string","description":"Opaque token from prior nextCursor. Use with sort=lastUpdate for stable paging."},"inline_read_top":{"type":"integer","description":"0-3. Inline reads of top N."},"kb":{"type":"string","description":"KB alias."},"axiCompact":{"type":"boolean","description":"Compact projection (default true).","default":true},"projection":{"type":"string","enum":["minimal","standard","verbose"],"description":"minimal=name+type+lastUpdate; standard=default compact; verbose=all fields. Overrides axiCompact when set."}},"examples":[{"limit":25},{"typeFilter":"Transaction","limit":10}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
7
|
-
{"name":"genexus_read","description":"Read object code and metadata. Omitting 'part' (RECOMMENDED) returns the COMPLETE object in 1 call (rules with parm, source/events, variables, structure, called signatures) tailored to the object type. Resolve modular objects by name/type, persisted GUID, EntityKey, or path. Pass 'part' only for targeted single-part reads. Response carries versionToken for safe writes. A single-part response also carries contentToken: echo it back as ifUnchangedSince to re-read the same representation without retransmitting an unchanged body. See genexus://kb/tool-help/genexus_read.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"targets":{"type":"array","items":{"type":"string"}},"guid":{"type":"string","description":"Persisted object GUID from genexus_list_objects."},"entityKey":{"type":"string","description":"Typed GeneXus EntityKey from genexus_list_objects verbose output."},"path":{"type":"string","description":"Module/folder-qualified object path from genexus_list_objects."},"part":{"type":"string","description":"DataSelector: parameters|conditions|orders|projection|definedBy|baseTransaction|baseTable|joins|structure."},"parts":{"type":"array","items":{"type":"string"},"description":"Selected parts; unavailable DataSelector parts appear in unsupportedParts. Mutually exclusive with part/offset/limit."},"offset":{"type":"integer"},"limit":{"type":"integer"},"refresh":{"type":"boolean","default":false,"description":"Bypass response caches, invalidate the SDK object, then independently reload the same identity. Use after an IDE save. Fails with FreshReadUnavailable if freshness cannot be confirmed. readFreshness reports Worker origin/age; _meta reports Gateway cache hits."},"ifUnchangedSince":{"type":"string","description":"Opaque contentToken from a previous single-part read of the SAME object/part/offset/limit. Provably unchanged -> notModified:true with identity and freshness metadata and no source; otherwise the full body plus a new contentToken and conditional.reason. Single-part reads only (rejected with ConditionalReadUnsupportedForm on targets[]/parts[]/full-object forms). Omit to keep the unconditional behavior."},"type":{"type":"string"},"kb":{"type":"string","description":"KB alias."}},"examples":[{"name":"Customer"},{"name":"Customer","type":"Procedure","guid":"<guid-from-list>"},{"name":"Customer","path":"Operations/Customer","type":"Procedure"},{"name":"Customer","part":"Source"},{"name":"Customer","part":"Source","refresh":true},{"name":"Customer","part":"Source","limit":0,"ifUnchangedSince":"<contentToken-from-previous-read>"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
9
|
+
{"name":"genexus_read","description":"Read object code and metadata. Omitting 'part' (RECOMMENDED) returns the COMPLETE object in 1 call (rules with parm, source/events, variables, structure, called signatures) tailored to the object type. Resolve modular objects by name/type, persisted GUID, EntityKey, or path. Pass 'part' only for targeted single-part reads. Response carries versionToken for safe writes. A single-part response also carries contentToken: echo it back as ifUnchangedSince to re-read the same representation without retransmitting an unchanged body. TIP: Avoid blind whole-object reads; call genexus_wire action=pack_task or callers/impact first to pinpoint exact targets. See genexus://kb/tool-help/genexus_read.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"targets":{"type":"array","items":{"type":"string"}},"guid":{"type":"string","description":"Persisted object GUID from genexus_list_objects."},"entityKey":{"type":"string","description":"Typed GeneXus EntityKey from genexus_list_objects verbose output."},"path":{"type":"string","description":"Module/folder-qualified object path from genexus_list_objects."},"part":{"type":"string","description":"DataSelector: parameters|conditions|orders|projection|definedBy|baseTransaction|baseTable|joins|structure."},"parts":{"type":"array","items":{"type":"string"},"description":"Selected parts; unavailable DataSelector parts appear in unsupportedParts. Mutually exclusive with part/offset/limit."},"offset":{"type":"integer"},"limit":{"type":"integer"},"refresh":{"type":"boolean","default":false,"description":"Bypass response caches, invalidate the SDK object, then independently reload the same identity. Use after an IDE save. Fails with FreshReadUnavailable if freshness cannot be confirmed. readFreshness reports Worker origin/age; _meta reports Gateway cache hits."},"ifUnchangedSince":{"type":"string","description":"Opaque contentToken from a previous single-part read of the SAME object/part/offset/limit. Provably unchanged -> notModified:true with identity and freshness metadata and no source; otherwise the full body plus a new contentToken and conditional.reason. Single-part reads only (rejected with ConditionalReadUnsupportedForm on targets[]/parts[]/full-object forms). Omit to keep the unconditional behavior."},"type":{"type":"string"},"kb":{"type":"string","description":"KB alias."}},"examples":[{"name":"Customer"},{"name":"Customer","type":"Procedure","guid":"<guid-from-list>"},{"name":"Customer","path":"Operations/Customer","type":"Procedure"},{"name":"Customer","part":"Source"},{"name":"Customer","part":"Source","refresh":true},{"name":"Customer","part":"Source","limit":0,"ifUnchangedSince":"<contentToken-from-previous-read>"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
8
10
|
{"name":"genexus_edit","description":"Edit object part. name or targets (exclusive). mode: full|patch|ops. dryRun first. async=true returns an operationId for lifecycle polling. Text payloads for Source/Rules/Events/Code must contain real line breaks; literal backslash sequences \\r\\n, \\n, or \\r are rejected before persistence with LiteralLineBreaksDetected. For WWP edit host's PatternInstance NOT the parent WebForm (gets overwritten on reapply). Uncertain about a property/method/event? → resources/read uri=genexus://kb/skills/navigation (or gam-integrated-security / sd-panel-mobile / webpanel-events) first.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"part":{"type":"string"},"parts":{"type":"array","description":"Multi-part edit on a single object. Each item: {part, content, mode?}. Saves the object once atomically. Text content must use real line breaks; literal backslash sequences \\r\\n, \\n, or \\r are rejected before persistence.","items":{"type":"object","properties":{"part":{"type":"string"},"content":{"type":"string"},"mode":{"type":"string"}},"required":["part","content"]}},"mode":{"type":"string","enum":["full","patch","ops"]},"content":{"type":"string"},"ops":{"type":"array","description":"GeneXus semantic ops (NOT RFC 6902 JSON-Patch). Each item: {op, args}. Supported ops: set_attribute, add_attribute, remove_attribute (Transaction); add_rule, remove_rule (Transaction/Procedure/WebPanel); set_property (any kind). Use mode=patch for textual find/replace.","items":{"type":"object","properties":{"op":{"type":"string","enum":["set_attribute","add_attribute","remove_attribute","add_rule","remove_rule","set_property"]},"args":{"type":"object","description":"Op-specific args. set_attribute: {name, type?, description?}. add_attribute: {name, type, ...}. add_rule: {rule}. set_property: {name, value}."}},"required":["op"]}},"patch":{"type":"object","additionalProperties":true,"description":"Shorthand for {find,replace}; implies mode=patch when mode is omitted, and is a usage_error with mode=full|ops: find is the exact existing text, replace is inserted literally (no auto-indentation). Optional opt-in protections: scope bounds the search region, indentation validates the replacement's base indent. Both apply ONLY to this shape — never with operation, mode=ops, targets[], parts[], Insert_After or Append.","properties":{"find":{"type":"string","description":"Exact existing text to find. Real line breaks; tabs/spaces must match the part."},"replace":{"type":"string","description":"Replacement text, inserted literally."},"scope":{"type":"object","required":["start"],"description":"Region delimited by complete-line anchors: editable starts after scope.start's last line and ends before scope.end's first line (EOF when end is omitted). Anchors stay outside the region, are compared with only CRLF/LF normalized, and must each be unique. Errors: ScopeStartRequired, ScopeAnchorNotFound, ScopeAnchorAmbiguous, ScopeAnchorNotComparable. The response reports editableStartLine, editableEndLineExclusive and scopeEndsAtEof.","properties":{"start":{"type":"string","description":"Required. Unique complete-line anchor ending immediately before the editable region."},"end":{"type":"string","description":"Optional. Unique complete-line anchor starting immediately after the editable region. Omitted = region runs to EOF."}}},"indentation":{"type":"object","required":["mode"],"description":"Validates the base indentation of the located match against the first line of replace before persisting; tabs and spaces are distinct and nothing is reformatted. With replaceAll=true every match is validated. Errors: IndentationMismatch, IndentationNotComparable.","properties":{"mode":{"type":"string","enum":["validate"],"description":"validate: block the write when the replacement's base indentation differs from the matched line's."}}}}},"scope":{"type":"object","description":"patch.scope may also be passed at the top level. Honored ONLY by the abbreviated patch={find,replace} form; combined with operation, mode=ops, targets[], parts[], Insert_After or Append the call is rejected with ScopeUnsupportedPatchForm and nothing is written."},"indentation":{"type":"object","description":"patch.indentation may also be passed at the top level. Honored ONLY by the abbreviated patch={find,replace} form; combined with operation, mode=ops, targets[], parts[], Insert_After or Append the call is rejected with IndentationUnsupportedPatchForm and nothing is written."},"context":{"type":"string","description":"Exact existing text to find (Replace) or anchor after (Insert_After). Required for both. For text parts, send real line breaks; literal backslash sequences \\r\\n, \\n, or \\r are rejected before persistence."},"operation":{"type":"string","enum":["Replace","Insert_After","Append"]},"expectedCount":{"type":"integer"},"replaceAll":{"type":"boolean","description":"patch mode only. Apply to ALL occurrences instead of requiring expectedCount to match exactly."},"dryRun":{"type":"boolean"},"async":{"type":"boolean","description":"Run as a background job. Result returns operationId/job_id for genexus_lifecycle polling."},"estimated_seconds":{"type":"integer","description":"When async=true, expected runtime used for progress/job metadata (default 30)."},"verifyRollback":{"type":"boolean"},"targets":{"type":"array","description":"Multi-target Source/Rules writes. Each target may include expectedVersion/baseVersion; all versions are checked before the first write.","items":{"type":"object","properties":{"name":{"type":"string"},"part":{"type":"string"},"content":{"type":"string"},"expectedVersion":{"type":"string"},"baseVersion":{"type":"string"}},"required":["name","content"]}},"type":{"type":"string"},"return_post_state":{"type":"boolean","description":"Omit post_state.diff (default true)."},"includePersistedText":{"type":"boolean","description":"Full text; default false."},"verbose":{"type":"boolean","description":"Add ±15-line slices to post_state."},"validate":{"type":"string","enum":["strict","best-effort","only"],"description":"strict (default) aborts on first error and post-write-verifies visual/PatternInstance writes (re-reads + diffs the persisted XML). best-effort applies what compiles and SKIPS the post-write XML re-read/diff (faster on large WebForm/PatternInstance writes; build to confirm). only runs in-memory, no persist."},"validationMode":{"type":"string","enum":["specify"],"description":"Issue #60: run the inline Specify pass (Spec+Gen, no Compile) against the edited object right after the write, returning structured spc*/gen* diagnostics in the same call. Combines with rollbackOnFailure."},"rollbackOnFailure":{"type":"boolean","description":"Explicit rollback only. Full Source verification failure reports AtomicRollbackUnavailable without a restore write until atomic conditional restore is supported. Other paths require a valid snapshot. No rollback when false or omitted."},"requireObjectSave":{"type":"boolean","default":false,"description":"Full Source requires transactional object save. Events patch: dryRun available; real writes blocked by ObjectSaveIsolationUnverified until SDK/pattern save-event isolation is established. No override; baseVersion required."},"forceWrite":{"type":"boolean","default":false,"description":"WebForm only: persist despite SDK WebForm validation errors; response includes validationOverridden=true."},"verifyMode":{"type":"string","enum":["semantic","normalized","exact"],"default":"normalized","description":"Post-save text comparison. Full exact compares public-read text verbatim; patch exact retains logical CRLF/LF equivalence. normalized ignores EOL, BOM, trailing whitespace and blank lines; semantic also tolerates casing/spacing. Fresh reread always required. sdkSaveCompleted/saved report physical save; persistedStateKnown and postSaveVerification report read evidence. Mismatch never retries automatically."},"visualVerify":{"type":"boolean","default":false,"description":"Post-edit headless screenshot + pixel-diff vs baseline. See tool-help."},"baseVersion":{"type":"string","description":"Optimistic concurrency: pass the versionToken from the genexus_read this edit is based on. If the object changed since (e.g. edited in the IDE), the write is refused with VersionConflict instead of overwriting the newer version. Omit to skip the check."},"expectedVersion":{"type":"string","description":"Alias of baseVersion. The write is refused when the current version no longer matches."},"concurrencyPolicy":{"type":"string","enum":["warn","fail_if_open"],"default":"warn","description":"warn (default) or fail_if_open if open in GeneXus IDE."},"autoDeclareVariables":{"type":"boolean","default":false,"description":"When true, scans updated source for newly referenced &Variable tokens and auto-declares them in VariablesPart."},"kb":{"type":"string","description":"KB alias."},"changeSet":{"type":"object","required":["action","changes"],"properties":{"action":{"type":"string","enum":["preview","validate","apply"]},"changes":{"type":"array","items":{"type":"object","required":["name","content"],"properties":{"name":{"type":"string"},"part":{"type":"string","enum":["Source","Rules","Variables"]},"content":{"type":"string"},"expectedVersion":{"type":"string"}}}},"changeSetId":{"type":"string"},"baseRevision":{"type":"string"}}},"module":{"type":"string","description":"mode=ops: Transaction module for modular objects."}},"examples":[{"name":"Customer","mode":"patch","part":"Source","patch":{"find":"old","replace":"new"}},{"name":"Customer","mode":"patch","part":"Rules","patch":{"find":"error(","replace":"msg("},"dryRun":true},{"name":"Customer","mode":"patch","part":"Source","patch":{"find":"old","replace":"new","scope":{"start":"// Banco B","end":"// Proximo banco"}}}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
|
|
9
11
|
{"name":"genexus_inspect","description":"Use this for a compact object snapshot: metadata, variables, structure, signature and navigation context. Modular objects accept persisted GUID, EntityKey, or path in addition to name/type. Don't use it when you need full Source or exact part bytes; use genexus_read for that. runtimeIds needs a prior build.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"guid":{"type":"string","description":"Persisted object GUID from genexus_list_objects."},"entityKey":{"type":"string","description":"Typed GeneXus EntityKey from genexus_list_objects verbose output."},"path":{"type":"string","description":"Module/folder-qualified object path from genexus_list_objects."},"include":{"type":"array","items":{"type":"string","enum":["metadata","variables","signature","structure","parts","controls","events_repertoire","callers","runtimeIds"]}},"projection":{"type":"string","enum":["minimal","standard","verbose"],"description":"Token budget. minimal=name/type/lastUpdate; standard=default (vars≤40 name+type, source heads 1200c); verbose=full vars + 8000c heads."},"type":{"type":"string"},"kb":{"type":"string","description":"KB alias."},"verbose":{"type":"boolean","description":"Include verbose diagnostic fields."}},"examples":[{"name":"Customer"},{"name":"Customer","type":"Procedure","path":"Operations/Customer"},{"name":"Customer","include":["variables","signature"]}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
10
12
|
{"name":"genexus_analyze","description":"Use this for cross-object semantic analysis. mode=context (alias deep_context) returns 360° task context in 1 call (object + called procedures' parm signatures + referenced tables' schemas/PKs + SDTs + callers). Other modes: impact, callers, hierarchy, navigation, linter, summary, explain. mode=theme_classes lists the KB's theme classes (name + objectGuid) so you can pick a class by name; objectGuid is the class object's GUID and is NOT the value a layout class attribute takes, so never invent that value. mode=explain is compatibility-only: it preserves the legacy response envelope and returns NotImplemented; use mode=summary for a concise overview, mode=context for 360° task context, or genexus_read for source. Requires Ready index for impact/callers.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"mode":{"type":"string","enum":["context","deep_context","linter","navigation","hierarchy","impact","cross_platform_impact","callers","event_flow","data_context","ui_context","pattern_metadata","summary","dependency_heatmap","code_metrics","kb_stats","table_relations","theme_classes","explain"]},"code":{"type":"string","description":"mode=explain: legacy code snippet carried through the compatibility-only envelope; the result is NotImplemented. Use mode=summary, mode=context, or genexus_read for supported analysis."},"cursor":{"type":"string","description":"Continuation cursor from a budgeted page. mode=context: scan.nextCursor. mode=callers: the integer scan.nextCursor (resume offset into the caller list)."},"maxCallers":{"type":"integer","description":"mode=callers: callers to scan in this page (default 50)."},"maxSourceBytes":{"type":"integer","description":"mode=callers: UTF-8 bytes of caller source per page (default 4194304). A caller larger than this is listed in scan.skippedCallers."},"format":{"type":"string","enum":["json","ascii"],"description":"mode=dependency_heatmap: ascii adds rendered bar chart."},"kb":{"type":"string","description":"KB alias."},"maxBytes":{"type":"integer","description":"mode=context: maximum UTF-8 bytes for the returned context bundle (bounded by the server)."},"waitForIndex":{"type":"boolean","description":"mode=impact: block up to 30s for Ready index (default true).","default":true},"dryRun":{"type":"boolean","description":"mode=linter: with fix=true, reject the unsupported combination before any SDK read; with fix=false, lint remains read-only."},"fix":{"type":"boolean","description":"mode=linter: apply automatic fixes to the KB."},"top":{"type":"integer","description":"mode=code_metrics: maximum results (default 25)."},"waitTimeoutMs":{"type":"integer","description":"mode=impact: maximum index wait in milliseconds."}},"required":["mode"],"examples":[{"name":"Customer","mode":"impact"},{"name":"Customer","mode":"summary"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
|
|
@@ -18,9 +20,9 @@
|
|
|
18
20
|
{"name":"genexus_run_object","description":"Resolve runtime URL for an object (webRoot + aspx + encoded args). gamSession='auto'|{user,pass,...} captures GAM cookies. Does NOT open a browser. dryRun=true returns the resolved URL without performing GAM login.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"args":{"type":"array","items":{"type":"string"},"description":"Positional parameter values."},"gamSession":{"description":"'auto' (use GXMCP_GAM_USER/PASS env) or {user, pass, repository?, loginUrl?}."},"dryRun":{"type":"boolean","default":false,"description":"When true, returns the resolved URL without performing the GAM login step."},"kb":{"type":"string","description":"KB alias."}},"required":["name"],"examples":[{"name":"WPMain"},{"name":"WPCustomer","args":["42"]}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}},
|
|
19
21
|
{"name":"genexus_format","description":"Format a GeneXus code snippet using worker rules.","inputSchema":{"type":"object","properties":{"code":{"type":"string"},"kb":{"type":"string","description":"KB alias."}},"required":["code"],"examples":[{"code":"for each Customer where CustomerId = &Id\n &Name = CustomerName\nendfor"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
20
22
|
{"name":"genexus_gam","description":"GAM / integrated-security provisioning via the SDK's IIntegratedSecurityService — distinct from genexus_security (env-scan/regex audit). action=status (default) is read-only: IsEnabledIntegratedSecurity + GAM-DB-reorganize flag. action=define_api / action=deploy are DESTRUCTIVE — they create/alter GAM security tables in the KB's datastore; no default reaches them, action must be set explicitly.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["status","define_api","deploy"],"description":"status (default, read-only) | define_api | deploy."},"force":{"type":"boolean","description":"define_api only: force flag passed to DefineAPI."},"forceTableCreation":{"type":"boolean","description":"deploy only: force GAM table creation."},"rebuild":{"type":"boolean","description":"deploy only: rebuild flag."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"status"},{"action":"deploy","forceTableCreation":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
|
|
21
|
-
{"name":"genexus_properties","description":"Properties API. get
|
|
22
|
-
{"name":"genexus_structure","description":"Read or write the structure/data-model of GeneXus objects. update_visual
|
|
23
|
-
{"name":"genexus_authoring","description":"Author members of object types the structure DSL doesn't cover. add_external_method / add_external_property add a method (with parameters) or property to an External Object; add_menu_option adds an option to a Menu (target = a KB object to call); add_condition adds a filter expression to a Data Selector. name = the target object.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["add_external_method","add_external_property","add_menu_option","add_condition"],"description":"Authoring operation to add a typed member or condition to a supported object."},"name":{"type":"string","description":"ExternalObject / Menu / DataSelector name."},"payload":{"type":"object","description":"add_external_method:{name,returnType?,parameters?:[{name,type?,inout?}]}.
|
|
23
|
+
{"name":"genexus_properties","description":"Properties API. get can reconcile a timed-out property write by a fresh typed read. set supports dryRun, expectedVersion, post-save verification and rollback; move is transactional. No lifecycle/tests. Use genexus_layout for controls.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["get","set","move"],"description":"Object-property operation to read or change metadata or move the object."},"name":{"type":"string"},"targets":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name"],"additionalProperties":false},"description":"action=get: read up to 100 objects in input order."},"type":{"type":"string","description":"Optional object type disambiguator; used when a batch item omits type."},"control":{"type":"string","description":"Optional layout control, variable (&Name), or attribute."},"propertyName":{"type":"string","description":"get: property name/list/wildcard filter; set: property to change."},"propertyNames":{"type":"array","items":{"type":"string"},"description":"action=get: list of property names to return."},"query":{"type":"string","description":"get: substring or * wildcard filter for property names."},"projection":{"type":"string","enum":["minimal","standard","full"],"description":"action=get: compact property subset (minimal, standard, full). Defaults to full."},"value":{"type":"string"},"properties":{"type":"object","description":"Batch set: map of propertyName to value applied in 1 transaction."},"destination":{"type":"string","description":"move: target Folder/Module name (auto-detects kind)."},"targetModule":{"type":"string","description":"move: typed alias for a Module destination."},"folder":{"type":"string","description":"move: destination alias with Folder kind."},"module":{"type":"string","description":"move: destination alias with Module kind."},"destKind":{"type":"string","enum":["Folder","Module"],"description":"move: disambiguate when a Folder and Module share a name."},"dryRun":{"type":"boolean","description":"set/move: preview without persisting."},"baseVersion":{"type":"string","description":"set/move: opaque optimistic concurrency token returned by a prior read."},"expectedVersion":{"type":"string","description":"set: versionToken from an authoritative properties read; rejects a concurrent change."},"reconcileTimedOutWrite":{"type":"boolean","description":"get: fresh typed read; clear timeout fence only after all affected values and versionToken."},"validationMode":{"type":"string","enum":["specify"],"description":"set: run inline Specify (Spec+Gen, no Compile); returns diagnostics and can roll back on failure."},"rollbackOnFailure":{"type":"boolean","description":"set: required true; restore and verify snapshot on failure. move: compensating restoration (default true)."},"kb":{"type":"string","description":"KB alias."}},"required":["action"],"examples":[{"action":"get","name":"MyPanel","propertyName":"Description"},{"action":"get","name":"MyDomain","query":"*Type*"},{"action":"get","name":"MyDomain","projection":"minimal"},{"action":"get","targets":[{"name":"ProcA","type":"Procedure"},{"name":"ProcB","type":"Procedure"}],"query":"*Main*"},{"action":"move","name":"InvoiceHelper","type":"Procedure","targetModule":"operacional","baseVersion":"<versionToken from genexus_read>","dryRun":true,"rollbackOnFailure":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
|
|
24
|
+
{"name":"genexus_structure","description":"Read or write the structure/data-model of GeneXus objects. update_visual requires expectedVersion for SDT writes. SDT mode=replace previews omitted members as removals and requires allowRemoval=true to delete them; mode=add inserts members without rebuilding existing ones. Both paths verify persisted structure and attempt rollback on divergence. Transaction writes retain their complete-snapshot verification. Default form projections are allowed to follow Structure; user-authored forms are invariant. No structure action implicitly runs Specify, Generate, Build, Rebuild, compilation, reorganization, execution, or tests. Other actions cover indexes, attributes (set_attribute operates on global attribute definitions; use update_visual/move_attribute/remove_attribute for Transaction structure), levels, Domains (including enumValues), SubType Groups and subtype consistency (check_subtypes). For layout control trees use genexus_layout.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["get_visual","update_visual","get_indexes","create_index","drop_index","set_attribute","set_level","set_domain","get_logic","update_group","move_attribute","remove_attribute","check_subtypes"],"description":"Structure operation to execute."},"name":{"type":"string","description":"Object name. update_visual: Transaction or SDT name; move_attribute: Transaction name; create_index/get_indexes: Transaction or Table name."},"module":{"type":"string","description":"update_visual/move_attribute optional: Transaction module."},"attribute":{"type":"string","description":"move_attribute: existing attribute to reorder by native SDK identity."},"before":{"type":"string","description":"move_attribute: place attribute before this attribute in the same level. Mutually exclusive with after/position."},"after":{"type":"string","description":"move_attribute: place attribute after this attribute in the same level. Mutually exclusive with before/position."},"position":{"type":"integer","minimum":0,"description":"move_attribute: zero-based final attribute position in the level. Mutually exclusive with before/after."},"level":{"type":"string","description":"move_attribute: root (default) or an unambiguous subordinate level name."},"levelPath":{"type":"array","items":{"type":"string"},"description":"move_attribute: nested level path, e.g. [\"Item\",\"Operation\"]."},"dryRun":{"type":"boolean","default":false,"description":"update_visual/move_attribute/create_index: validate and return the projected diff without changing any object, Attribute, hash, or version."},"baseVersion":{"type":"string","description":"Optimistic-concurrency token for update_visual/move_attribute/create_index. Stale state returns VersionConflict before mutation."},"expectedVersion":{"type":"string","description":"Alias of baseVersion for update_visual; required for SDT writes."},"payload":{"type":"object","description":"update_visual (Transaction):{children:[...]}; update_visual (SDT):{mode?:\"replace\"|\"add\",allowRemoval?:boolean,isCollection?,collectionItemName?,children:[{name,type?,length?,decimals?,basedOnDomain?,basedOnAttribute?,isCollection?,isLevel?,children?}]}. update_group:{members:[{name,subtypeOf}],remove?:[name]}. create_index:{attributes:[\"Attr\"],unique?:true,name?,order?:\"Ascending\"|\"Descending\"}. Other actions keep their existing typed payloads."},"validationMode":{"type":"string","enum":["specify"],"description":"Explicitly run the inline Specify pass after selected writes. Never runs unless requested."},"rollbackOnFailure":{"type":"boolean","default":true,"description":"update_visual, move_attribute and create_index capture snapshots and verify rollback after any save or re-read divergence."},"kb":{"type":"string","description":"KB alias."},"type":{"type":"string","description":"Optional object type disambiguator (e.g. 'Transaction', 'Table') when multiple objects share the same name."}},"required":["action","name"],"examples":[{"action":"update_visual","name":"OrderRecord","module":"Operations","dryRun":true,"expectedVersion":"<versionToken>","payload":{"children":[{"name":"OrderId"},{"name":"OrderAverageTime"}]}},{"action":"move_attribute","name":"SampleTransaction","attribute":"SampleSubtypeId","after":"SampleReferenceId","level":"root","dryRun":true},{"action":"get_indexes","name":"Customer"},{"action":"create_index","name":"Country","dryRun":true,"baseVersion":"<get_indexes versionToken>","payload":{"name":"UCountryName","attributes":["CountryName"],"unique":true},"rollbackOnFailure":true},{"action":"set_attribute","name":"CustomerBalance","payload":{"formula":"sum(SampleTransactionAmount)"}},{"action":"set_level","name":"Customer","payload":{"descriptionAttribute":"CustomerName"}},{"action":"update_group","name":"SampleSubtypeGroup","payload":{"members":[{"name":"SampleId","subtypeOf":"BaseId"}]}}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
|
|
25
|
+
{"name":"genexus_authoring","description":"Author members of object types the structure DSL doesn't cover. add_external_method / add_external_property add a method (with parameters) or property to an External Object; add_menu_option adds an option to a Menu (target = a KB object to call); add_condition adds a filter expression to a Data Selector. name = the target object.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["add_external_method","add_external_property","add_menu_option","add_condition"],"description":"Authoring operation to add a typed member or condition to a supported object."},"name":{"type":"string","description":"ExternalObject / Menu / DataSelector name."},"payload":{"type":"object","description":"add_external_method:{name,externalName?,returnType?,dryRun?,expectedVersion?,parameters?:[{name,type?,length?,decimals?,inout?,externalName?}]} (in|out|inout). Save verified, repeats unchanged. Other actions: {name,type?}|{description,target?,optionCode?}|{source}."},"kb":{"type":"string","description":"KB alias."}},"required":["action","name"],"examples":[{"action":"add_external_property","name":"MyExternalObject","payload":{"name":"apiKey","type":"Character"}},{"action":"add_menu_option","name":"MainMenu","payload":{"description":"Customers","target":"CustomerWW"}},{"action":"add_condition","name":"ActiveCustomers","payload":{"source":"CustomerActive = True"}}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
|
|
24
26
|
{"name":"genexus_layout","description":"Layout/WebForm: get_tree, set_property, find_controls, inspect_surface, scan_mutators. Properties: genexus_properties; structure: genexus_structure get_visual.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["get_tree","set_property","find_controls","set_properties","inspect_surface","get_preview","scan_mutators","rename_printblock","add_printblock","delete_printblock","add_report_control","move_report_control","remove_report_control","list_controls","design_system"],"description":"Layout/WebForm operation to perform."},"name":{"type":"string","description":"Target object name (WebPanel, Transaction, Procedure)."},"control":{"type":"string","description":"Control name within the layout or WebForm."},"propertyName":{"type":"string","description":"Property name to modify (e.g. Caption, Visible, Enabled, Class)."},"value":{"type":"string","description":"Value to assign to the specified property."},"query":{"type":"string","description":"find_controls: search query matching control names or captions."},"changes":{"type":"array","description":"set_properties: batch array of {control, propertyName, value} objects.","items":{"type":"object","properties":{"control":{"type":"string","description":"Control name."},"propertyName":{"type":"string","description":"Property name."},"value":{"type":"string","description":"Property value."}},"required":["control","propertyName","value"]}},"limit":{"type":"integer","description":"find_controls/list_controls: maximum results to return."},"currentName":{"type":"string","description":"rename_printblock: existing printblock name."},"newName":{"type":"string","description":"rename_printblock: new printblock name."},"printBlockName":{"type":"string","description":"add_printblock/delete_printblock: name of the printblock."},"appendPrintToSource":{"type":"boolean","description":"add_printblock: also insert `print <printBlockName>` into the Procedure Source (default true). Set false to leave Source untouched."},"height":{"type":"integer","description":"add_printblock: height of the new printblock; report controls use the same field for control height."},"kind":{"type":"string","enum":["variable","attribute","label","line","box","image"],"description":"add_report_control: report control kind."},"controlName":{"type":"string","description":"add/move/remove_report_control: stable report control name."},"controlType":{"type":"string","description":"Optional native report control type override."},"binding":{"type":"string","description":"add_report_control: variable (&Name) or attribute binding for variable/attribute controls."},"caption":{"type":"string","description":"add_report_control: label text for label controls."},"left":{"type":"number","description":"Report control X/left coordinate."},"top":{"type":"number","description":"Report control Y/top coordinate."},"x":{"type":"number","description":"Alias for left."},"y":{"type":"number","description":"Alias for top."},"width":{"type":"number","description":"Report control width."},"after":{"type":"string","description":"Place/move after this report control."},"below":{"type":"string","description":"Place/move below this report control."},"font":{"type":"string","description":"Optional report font token."},"fontName":{"type":"string","description":"Optional report font family."},"fontSize":{"type":"string","description":"Optional report font size."},"alignment":{"type":"string","description":"Optional report text alignment."},"picture":{"type":"string","description":"Optional image/report picture token."},"baseVersion":{"type":"string","description":"Version token from get_tree; required for report-control actions, including dryRun."},"dryRun":{"type":"boolean","description":"Preview report-control mutation without saving."},"rollbackOnFailure":{"type":"boolean","default":true,"description":"Request rollback on verification failure. Report restore is currently unavailable without atomic ownership proof; returns recovery evidence without a second write."},"kb":{"type":"string","description":"KB alias."}},"required":["action"],"examples":[{"action":"get_tree","name":"WPMain"},{"action":"find_controls","name":"WPMain","query":"Button"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
|
|
25
27
|
{"name":"genexus_doc","description":"Use to generate structured docs (wiki, dependency graph, health reports). Don't use for programmatic analysis (see genexus_analyze) or source (see genexus_read).","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["wiki","visualize","health"],"description":"wiki: generate markdown docs; visualize: generate dependency graph; health: produce health report."},"target":{"type":"string","description":"Object or domain name (required for wiki/visualize)."},"kb":{"type":"string","description":"KB alias for health or other worker-backed document actions."}},"required":["action"],"examples":[{"action":"wiki","target":"Customer"},{"action":"health"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
|
|
26
28
|
{"name":"genexus_search_source","description":"Regex/semantic search across Procedure/DataProvider/WebPanel/Transaction source. Restrict a scan by object name, persisted GUID, EntityKey, or module/folder-qualified path. Requires the KB index to be Ready — check genexus_lifecycle action=status if results look empty.","inputSchema":{"type":"object","properties":{"callee":{"type":"string","description":"Method/function name (qualified or unqualified)."},"argMatches":{"type":"object","description":"Positional arg index to expected literal text."},"pattern":{"type":"string"},"typeFilter":{"type":"string"},"objectName":{"type":"string","description":"Restrict the scan to these exact object name(s), comma-separated. Makes a search inside one known object O(object) not O(KB), and bypasses the type whitelist."},"guid":{"type":"string","description":"Persisted object GUID from genexus_list_objects."},"entityKey":{"type":"string","description":"Typed GeneXus EntityKey from genexus_list_objects verbose output."},"path":{"type":"string","description":"Module/folder-qualified object path from genexus_list_objects."},"startIndex":{"type":"integer","description":"Legacy object-boundary resume. For a page that ended inside an object, prefer the opaque cursor returned in nextCursor."},"cursor":{"type":"string","description":"Opaque continuation token from nextCursor; preferred when a result page ended inside an object. Do not edit."},"timeoutMs":{"type":"integer","description":"Wall-clock budget (default 30000). Raise it to scan more objects per call."},"scope":{"type":"array","items":{"type":"string","enum":["source","rules","conditions","events","webForm","layout"]},"description":"Parts to scan with line-numbered context. Default [source]. webForm/layout scans the WebPanel/Transaction visual XML (control names, captions, classes, bindings)."},"fields":{"type":"array","items":{"type":"string","enum":["source","caption","description","parmNames","webForm"]},"description":"Whole-field metadata match (returns matchedValue, no line context). Default [source]. Prefer scope=[webForm] for line-context WebForm hits; use fields=[webForm] only for a coarse contains-match."},"maxResults":{"type":"integer"},"caseSensitive":{"type":"boolean"},"includeComments":{"type":"boolean"},"inline_read_top":{"type":"integer","description":"0-3. Inline reads of top N distinct objects in response."},"kb":{"type":"string","description":"KB alias."}},"additionalProperties":false,"examples":[{"pattern":"ControlType=\"Radio\""},{"pattern":"for each","typeFilter":"Procedure","maxResults":20}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
@@ -39,7 +41,7 @@
|
|
|
39
41
|
{"name":"genexus_kb_version","description":"SDK KB version tree via KBVersionHelper. list and changed_objects are read-only; changed_objects compares active Design with a frozen version and returns paged NEW/CHANGED items without SQL. Other actions mutate. createdAt may be unavailable; lastUpdate is separate.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["list","changed_objects","freeze","branch","set_active","revert"],"description":"Version delta or tree operation."},"name":{"type":"string","description":"New version/branch name (freeze/branch)."},"description":{"type":"string","description":"New version/branch description (freeze/branch)."},"parentVersion":{"type":"string","description":"Parent version name (freeze/branch). Defaults to the active version."},"targetVersion":{"type":"string","description":"Version to activate (set_active) or revert to (revert)."},"fromVersion":{"type":"string","description":"changed_objects frozen baseline; revert source; omit for latest frozen."},"offset":{"type":"integer","minimum":0,"description":"offset."},"limit":{"type":"integer","minimum":1,"maximum":200,"description":"limit."},"backupModel":{"type":"boolean","description":"freeze."},"includeEnvironments":{"type":"boolean","description":"branch."},"autoUpdate":{"type":"boolean","description":"set_active."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"list"},{"action":"changed_objects","fromVersion":"v1.0"},{"action":"freeze","name":"v1.0","description":"Release 1.0"},{"action":"set_active","targetVersion":"Trunk"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
|
|
40
42
|
{"name":"genexus_browser","description":"Headless-browser verification umbrella. action=smoke (HTTP 200 + clean console), a11y (axe), wcag (caption/tooltip lint), capture (console/network/exceptions), cross (multi-engine), preview (render WebPanel + capture HTML/a11y/screenshot, optionally diff baseline). preview uses mode=render|run (default render; run auto-resolves the KB launcher, IDE F5 parity).","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["smoke","a11y","wcag","capture","cross","preview"],"description":"Browser verification operation to execute."},"name":{"type":"string","description":"WebPanel name."},"mode":{"type":"string","enum":["render","run"],"description":"preview only."},"capture":{"type":"array","items":{"type":"string"},"description":"capture|cross|preview channels: console|network|exceptions|html|a11y|screenshot."},"browsers":{"type":"array","items":{"type":"string","enum":["chrome","firefox","safari","webkit"]},"description":"cross only."},"parms":{"type":"object","description":"preview only."},"launcher":{"type":"string","description":"preview only."},"buildFirst":{"type":"boolean","description":"preview only."},"waitMs":{"type":"integer","description":"preview only."},"diffBaseline":{"type":"boolean","description":"preview only."},"updateBaseline":{"type":"boolean","description":"preview only."},"fill":{"type":"object","description":"preview only."},"click":{"type":"string","description":"preview only."},"auth":{"type":"object","description":"preview only."},"emulate":{"type":"string","enum":["iPhone12","iPhone15Pro","iPadPro","Pixel7","desktop1920","desktop1280"],"description":"preview only."},"network":{"type":"string","enum":["fast","slow3g","fast3g","offline"],"description":"preview only."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"preview","name":"WPMain"},{"action":"cross","name":"WPMain","browsers":["chrome","firefox"]}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}},
|
|
41
43
|
{"name":"genexus_db","description":"Database umbrella. Actions: drift_check|drift_report; optimize_analyze|optimize_suggest|optimize_report; sql_ddl|sql_navigation; sample_data; records_query|records_insert|records_update (typed Transaction rows; query read-only; writes dryRun; no business rules); types_list|types_describe|types_validate; reorg_impact; reorg_preview (non-mutating; deep uses ImpactDatabase); translations_import.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["drift_check","drift_report","optimize_analyze","optimize_suggest","optimize_report","sql_ddl","sql_navigation","sample_data","records_query","records_insert","records_update","types_list","types_describe","types_validate","translations_import","reorg_impact","reorg_preview"],"description":"Database operation. records_query is read-only; records_insert/records_update default to dryRun=true and require the matching single-use v2 preview token for persistence."},"deep":{"type":"boolean","description":"reorg_impact/reorg_preview only: run ISpecifierService.ImpactDatabase (specification, build-heavy) for the authoritative AnalysisResult. Default false (cheap timestamp heuristic)."},"name":{"type":"string","description":"Object/transaction/type name."},"trn":{"type":"string","description":"sample_data: Transaction name."},"transaction":{"type":"string","description":"records_*: root-level Transaction name."},"dataStore":{"type":"string","description":"records_*: existing active-environment datastore; defaults to the SDK default."},"dataStoreAlias":{"type":"string","description":"records_query: profile alias; no credentials."},"where":{"type":"object","description":"records_query/update: equality filters only; update requires a filter."},"values":{"type":"object","description":"records_insert/update: typed attribute values."},"fields":{"type":"array","items":{"type":"string"},"description":"records_query: optional root-attribute projection."},"databaseManagedFields":{"type":"array","items":{"type":"string"},"description":"records_*: reviewed trigger-maintained fields; excludes keys and supplied values. Included in the preview token."},"limit":{"type":"integer","description":"records_query: 1-1000; default 100."},"expectedCount":{"type":"integer","description":"records_update: defaults to exactly one matched record."},"expectedVersion":{"type":"string","description":"records_*: v2 token from the matching write dry-run; query/v1 tokens cannot authorize writes."},"versionToken":{"type":"string","description":"records_*: alias of expectedVersion."},"dryRun":{"type":"boolean","default":true,"description":"records_insert/update: validate and reread the plan without writing."},"rollbackOnFailure":{"type":"boolean","default":true,"description":"records_*: default true; validation failures roll back before commit. Post-commit compensation is refused to preserve concurrent writers."},"timeoutSeconds":{"type":"integer","description":"records_*: command timeout, 1-60 seconds."},"rows":{"type":"integer","description":"sample_data: 1-1000; default 5."},"includeSubordinated":{"type":"boolean","description":"sql_ddl only."},"levelNumber":{"type":"integer","description":"sql_navigation only."},"includeExecutionPlan":{"type":"boolean","description":"sql_navigation."},"includeIndexAdvisor":{"type":"boolean","description":"sql_navigation."},"format":{"type":"string","enum":["json","markdown"],"description":"optimize_report only."},"kind":{"type":"string","enum":["domain","sdt","all"],"description":"types_list filter."},"value":{"type":"string","description":"types_validate."},"type":{"type":"string","description":"types_validate / disambiguator."},"inputPath":{"type":"string","description":"translations_import: CSV path."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"drift_check"},{"action":"sql_ddl","name":"Customer"},{"action":"records_query","dataStoreAlias":"production","transaction":"Order","where":{"OrderId":1},"limit":20,"timeoutSeconds":20}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
|
|
42
|
-
{"name":"genexus_versioning","description":"Versioning umbrella. action: history_list|history_get|history_save|history_restore (snapshot store; restore+discard=true is IDE 'Discard changes' parity) | undo (revert last N edits) | time_travel (recover bytes from a past git commit) | blame (git blame an object part) | diff (text: mode=textVsText|currentVsText) | diff_generated (against=last-build|git-head). Long version-store reads (history_get/history_list/diff/diff_generated/blame) accept async=true: the reply returns {operationId, pollTarget} before the read starts and the result stays readable via genexus_lifecycle action=status/result.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["history_list","history_get","history_save","history_restore","undo","time_travel","blame","diff","diff_generated"],"description":"History, diff, time-travel, or rollback operation to perform."},"name":{"type":"string","description":"Object name for history, diff, time_travel, or blame."},"part":{"type":"string","description":"Object part name, e.g. Source, Rules, Events."},"partName":{"type":"string","description":"Legacy alias for part on history actions."},"versionId":{"type":"integer","description":"history_get/history_restore: numerical version ID."},"snapshot":{"type":"string","description":"history_restore: snapshot label or path to restore."},"discard":{"type":"boolean","description":"history_restore: true for IDE 'Discard changes' parity."},"dryRun":{"type":"boolean","description":"history_restore/undo: preview without mutating the KB."},"async":{"type":"boolean","description":"history_get/history_list/diff/diff_generated/blame only: return {operationId, job_id, pollTarget:'op:<id>', status:'running'} before the read starts and run it in the background, so the result is still readable with genexus_lifecycle action=status/result if this call's window expires. Never applies to the mutating actions."},"estimated_seconds":{"type":"integer","description":"async=true: expected duration used as the poll cadence hint in the accepted envelope."},"last":{"type":"integer","description":"undo: default 1, max 20."},"at":{"type":"string","description":"time_travel: ISO-8601 or commit sha."},"line":{"type":"integer","description":"blame: 1-based line number to annotate."},"filePath":{"type":"string","description":"blame: absolute or KB-relative file path."},"context":{"type":"integer","description":"blame: surrounding lines of context."},"mode":{"type":"string","enum":["textVsText","currentVsText"],"description":"diff."},"left":{"type":"string","description":"diff: left-side text or snapshot label."},"right":{"type":"string","description":"diff: right-side text or snapshot label."},"against":{"type":"string","enum":["last-build","git-head"],"description":"diff_generated."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"history_list","name":"Customer"},{"action":"time_travel","name":"Customer","at":"2026-05-20T10:00:00Z"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
|
|
44
|
+
{"name":"genexus_versioning","description":"Versioning umbrella. action: history_list|history_get|history_save|history_restore (snapshot store; restore+discard=true is IDE 'Discard changes' parity; versionId with part=SDTStructure restores the native SDT revision with required expectedVersion and dryRun) | undo (revert last N edits) | time_travel (recover bytes from a past git commit) | blame (git blame an object part) | diff (text: mode=textVsText|currentVsText) | diff_generated (against=last-build|git-head). Long version-store reads (history_get/history_list/diff/diff_generated/blame) accept async=true: the reply returns {operationId, pollTarget} before the read starts and the result stays readable via genexus_lifecycle action=status/result.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["history_list","history_get","history_save","history_restore","undo","time_travel","blame","diff","diff_generated"],"description":"History, diff, time-travel, or rollback operation to perform."},"name":{"type":"string","description":"Object name for history, diff, time_travel, or blame."},"part":{"type":"string","description":"Object part name, e.g. Source, Rules, Events, SDTStructure."},"partName":{"type":"string","description":"Legacy alias for part on history actions."},"versionId":{"type":"integer","description":"history_get/history_restore: numerical version ID."},"expectedVersion":{"type":"string","description":"Required for history_restore of an SDTStructure revision; current SDT get_visual versionToken."},"snapshot":{"type":"string","description":"history_restore: snapshot label or path to restore."},"discard":{"type":"boolean","description":"history_restore: true for IDE 'Discard changes' parity."},"dryRun":{"type":"boolean","description":"history_restore/undo: preview without mutating the KB."},"async":{"type":"boolean","description":"history_get/history_list/diff/diff_generated/blame only: return {operationId, job_id, pollTarget:'op:<id>', status:'running'} before the read starts and run it in the background, so the result is still readable with genexus_lifecycle action=status/result if this call's window expires. Never applies to the mutating actions."},"estimated_seconds":{"type":"integer","description":"async=true: expected duration used as the poll cadence hint in the accepted envelope."},"last":{"type":"integer","description":"undo: default 1, max 20."},"at":{"type":"string","description":"time_travel: ISO-8601 or commit sha."},"line":{"type":"integer","description":"blame: 1-based line number to annotate."},"filePath":{"type":"string","description":"blame: absolute or KB-relative file path."},"context":{"type":"integer","description":"blame: surrounding lines of context."},"mode":{"type":"string","enum":["textVsText","currentVsText"],"description":"diff."},"left":{"type":"string","description":"diff: left-side text or snapshot label."},"right":{"type":"string","description":"diff: right-side text or snapshot label."},"against":{"type":"string","enum":["last-build","git-head"],"description":"diff_generated."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"history_list","name":"Customer"},{"action":"time_travel","name":"Customer","at":"2026-05-20T10:00:00Z"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
|
|
43
45
|
{"name":"genexus_io","description":"IO umbrella for assets, Object Text exchange, screenshots, OCR. action: asset_find|asset_read|asset_write | read_blob | export_part|import_part (single part) | export_kb_to_text|import_text_to_kb|validate_kb_text_files|delete_kb_objects (official GeneXus for Agents Object Text parity) | export_unified|screenshot_publish|ocr.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["asset_find","asset_read","asset_write","read_blob","export_part","import_part","export_kb_to_text","import_text_to_kb","validate_kb_text_files","validate_text_in_memory","list_text_files","text_mirror_start","text_mirror_stop","text_mirror_status","text_mirror_catchup","text_mirror_set_references","delete_kb_objects","export_unified","screenshot_publish","ocr"],"description":"Asset, single-part, SDK text-tree, batch Object Text, screenshot, or OCR operation."},"path":{"type":"string","description":"asset/screenshot_publish/ocr: file path; Object Text import/validate may use a manifest directory."},"name":{"type":"string","description":"single object name or comma-separated selector; export_unified uses one object."},"targets":{"type":"array","items":{},"description":"Object Text selector array. Items may be names or {name,type} objects. Omit for export_kb_to_text to export the full indexed KB."},"outputPath":{"type":"string","description":"path"},"inputPath":{"type":"string","description":"import_part: source file; import_text_to_kb/validate_kb_text_files: manifest or directory."},"part":{"type":"string","description":"Object Text or part-exchange part name (e.g. Source, Rules, WebForm). For native format, part=all serializes authored textual parts into one sectioned .gx document."},"parts":{"type":"array","items":{"type":"string"},"description":"native export: explicit authored parts to include in one sectioned .gx document; part=all uses the safe default part set."},"format":{"type":"string","enum":["legacy","native"],"description":"Object Text export/import format. legacy preserves .gxtext compatibility; native creates the SDK text tree under src/ and ref/ without GX4A DLLs."},"mode":{"type":"string","enum":["all","newAndModified","newOnly"],"description":"native export mode. all writes every selected object; newAndModified uses the SDK/index version token; newOnly keeps existing files."},"includeDependencies":{"type":"boolean","description":"native export/import: include Calls/Tables dependency closure under ref/."},"includeReferences":{"type":"boolean","description":"Alias of includeDependencies for native src/ref exchange."},"includeVisualParts":{"type":"boolean","description":"native export/import: include WebForm/Layout companions (.web.xml or .report.xml)."},"includeModuleMetadata":{"type":"boolean","default":true,"description":"native export: emit deterministic module.toml metadata for modules represented in src/ref; no package DLL is loaded."},"includeModulePackages":{"type":"boolean","description":"native export: copy matching official .opc reference packages from the selected GeneXus installation into ref/; defaults to includeDependencies and never copies DLLs."},"includeTableProjections":{"type":"boolean","description":"native export: emit official SDK Table structures under src/#tables for selected Transactions; opt-in because tables may be shared/derived."},"includeChildren":{"type":"boolean","default":true,"description":"filesystem parity: recurse into child directories or expand Module/Folder selectors recursively; default true."},"listOnly":{"type":"boolean","description":"filesystem parity: return the resolved plan without reading the SDK, writing files or mutating the KB."},"stopOnError":{"type":"boolean","description":"filesystem parity: stop after the first item-level error and report remaining work for a safe resume."},"skip":{"type":"integer","minimum":0,"description":"filesystem parity: skip this many deterministic planned items before processing; useful for resuming a large batch."},"indentString":{"type":"string","description":"native export: optional prefix applied to non-empty source lines inside the object body; omitted preserves source indentation."},"forceSave":{"type":"boolean","description":"text import: force the official WriteService persistence path even when the content is unchanged."},"rollbackOnFailure":{"type":"boolean","default":true,"description":"native multi-part import: restore parts already written when a later SDK part write fails; reports reconciliationRequired if a prior snapshot cannot be read or restored."},"importMissingReferences":{"type":"boolean","description":"native import: include reference/dependency files when importing a tree."},"ignore":{"type":"array","items":{"type":"string"},"description":"list_text_files/validate_text_in_memory: relative file or directory prefixes to ignore; batch KB actions also accept object selectors."},"intervalMs":{"type":"integer","minimum":250,"description":"text_mirror_start: debounce/poll interval in milliseconds (250-600000)."},"initialSync":{"type":"boolean","description":"text_mirror_start: schedule a full catch-up immediately after start."},"full":{"type":"boolean","description":"text_mirror_catchup: reconcile the complete indexed KB instead of only queued changes."},"enabled":{"type":"boolean","description":"text_mirror_set_references: enable/disable reference export."},"type":{"type":"string","description":"Object type disambiguator/filter."},"module":{"type":"string","description":"Object Text module filter."},"pathPrefix":{"type":"string","description":"Object Text KB object-path prefix filter."},"overwrite":{"type":"boolean","description":"replace file"},"confirm":{"type":"boolean","description":"delete_kb_objects: required for a real delete; dryRun remains non-mutating."},"dryRun":{"type":"boolean","description":"Object Text import/delete preview without persisting changes."},"async":{"type":"boolean","description":"Run a batch Object Text operation as a cancellable background job when supported."},"pattern":{"type":"string","description":"asset_find: glob pattern."},"relativeRoot":{"type":"string","description":"asset_find: root for relative paths."},"limit":{"type":"integer","description":"asset_find/Object Text: max results."},"includeContent":{"type":"boolean","description":"asset_find: inline file content."},"maxBytes":{"type":"integer","description":"inline limit"},"includeBase64":{"type":"boolean","description":"include Base64 response"},"contentBase64":{"type":"string","description":"asset_write: base64-encoded file content."},"includePersistedText":{"type":"boolean","description":"Full text; default false."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"export_kb_to_text","outputPath":"C:\\tmp\\customer-text","targets":[{"name":"Customer","type":"Transaction"}]},{"action":"validate_kb_text_files","inputPath":"C:\\tmp\\customer-text"},{"action":"delete_kb_objects","targets":["Procedure:OldProc"],"dryRun":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
|
|
44
46
|
{"name":"genexus_variable","description":"Variables CRUD. add accepts varName or variables[] batch; modify changes type atomically, or only the description when typeName is omitted (the type is kept). basedOn binds a Domain; basedOnAttribute (or typeName Attribute:<name>) binds an Attribute by native SDK identity preserving picture/semantics. objectType=BusinessComponent with objectName+module binds a modular BC by EntityKey/GUID and verifies it after save. length/decimals override size; collection=true declares a collection; dimensions=1|2 plus dimensionSizes declares a fixed-size vector/matrix (not a collection); untyped add inherits a same-named attribute with its binding. modify refuses to silently drop an Attribute binding (AttributeBindingWouldBeLost); reads surface basedOn. dryRun validates and previews without mutation; async returns an operationId.","inputSchema":{"type":"object","required":["action","name"],"properties":{"action":{"type":"string","enum":["add","delete","modify"],"description":"Variable-part operation to add, delete, or modify a variable."},"name":{"type":"string"},"varName":{"type":"string","description":"Single-variable form (add/delete/modify). For batch add use variables[] instead."},"variables":{"type":"array","description":"Batch add only: one object per variable — {varName, typeName?, basedOn?, basedOnAttribute?, length?, decimals?, collection?, dimensions?, dimensionSizes?}. Added before a single save.","items":{"type":"object","required":["varName"],"properties":{"varName":{"type":"string"},"typeName":{"type":"string"},"length":{"type":"integer"},"decimals":{"type":"integer"},"collection":{"type":"boolean"},"dimensions":{"type":"integer","minimum":1,"maximum":2,"description":"Fixed-size vector/matrix rank; requires dimensionSizes and conflicts with collection."},"dimensionSizes":{"type":"array","minItems":1,"maxItems":2,"items":{"type":"integer","minimum":1},"description":"Positive sizes in row/column order; length must equal dimensions."},"basedOn":{"type":"string","description":"Domain name; native SDK reference."},"basedOnAttribute":{"type":"string","description":"Attribute name (or Attribute:<name>); preserves picture/semantics."}}}},"typeName":{"type":"string","description":"Primitive (Character/Numeric/VarChar/Date/...), SDT/BC/Domain name, Attribute:<name>, or WebSession. VarChar keeps VARCHAR semantics."},"newTypeName":{"type":"string","description":"modify alias for the replacement type; accepted alongside typeName."},"dataType":{"type":"string","description":"modify alias for the replacement type; accepted alongside typeName."},"description":{"type":"string","description":"modify: new variable Description (empty string clears it). Without typeName the type is kept and only the description changes."},"objectType":{"type":"string","enum":["BusinessComponent"],"description":"add/modify: resolve an object-backed variable natively instead of interpreting typeName as a Domain."},"objectName":{"type":"string","description":"Business Component Transaction name, without module when module is passed separately."},"module":{"type":"string","description":"Module owning objectName. Required to disambiguate modular Business Components."},"expectedVersion":{"type":"string","description":"Optimistic-concurrency token for an object-backed add/modify. Stale state returns VersionConflict before mutation."},"length":{"type":"integer","description":"add/modify optional: overrides the length parsed from typeName."},"decimals":{"type":"integer","description":"add/modify optional: overrides decimals parsed from typeName."},"collection":{"type":"boolean","description":"add/modify optional: declare the variable as a collection."},"dimensions":{"type":"integer","minimum":1,"maximum":2,"description":"add/modify optional: fixed-size vector/matrix rank; requires dimensionSizes and conflicts with collection."},"dimensionSizes":{"type":"array","minItems":1,"maxItems":2,"items":{"type":"integer","minimum":1},"description":"add/modify optional: positive sizes in row/column order; length must equal dimensions."},"basedOn":{"type":"string","description":"Domain name, or Attribute:<name> for an attribute binding (prefer basedOnAttribute)."},"basedOnAttribute":{"type":"string","description":"Attribute name (or Attribute:<name>) to bind; preserves picture/semantics."},"dryRun":{"type":"boolean","default":false,"description":"Validate and return the typed diff without changing any object, Attribute, hash, or version."},"validationMode":{"type":"string","enum":["specify"],"description":"Explicitly run the inline Specify pass after a legacy variable write. Never runs unless requested."},"rollbackOnFailure":{"type":"boolean","default":true,"description":"Object-backed variables always snapshot the complete owner and restore it on save/re-read divergence."},"async":{"type":"boolean","description":"Run as a background job. Result returns operationId/job_id for genexus_lifecycle polling."},"estimated_seconds":{"type":"integer","description":"When async=true, expected runtime used for progress/job metadata (default 30)."},"includePersistedText":{"type":"boolean","description":"Full text; default false."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"add","name":"MyPanel","varName":"&Choice","typeName":"Numeric"},{"action":"add","name":"MyProc","varName":"&OrderRecord","objectType":"BusinessComponent","objectName":"OrderRecord","module":"Operations","dryRun":true},{"action":"add","name":"MyProc","variables":[{"varName":"&ApiKey","typeName":"VarChar","length":80},{"varName":"&CmdNro","typeName":"Numeric","length":9}]},{"action":"delete","name":"MyPanel","varName":"&OldVar"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
|
|
45
47
|
{"name":"genexus_telemetry","description":"Observability umbrella. action: executions (recent invocations) | watch_event (ops mentioning an event) | friction_append|friction_tail (.gx/friction.jsonl) | learning_report (aggregate friction) | logs (worker_debug.log tail) | profile_analyze|profile_hotspots|profile_correlate (GeneXus profiler XML).","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["executions","watch_event","friction_append","friction_tail","learning_report","logs","profile_analyze","profile_hotspots","profile_correlate"],"description":"Telemetry, profiling, or friction-log operation to perform."},"target":{"type":"string","description":"executions/watch_event: object name to filter."},"event":{"type":"string","description":"watch_event: event name to match in operation payload."},"last":{"type":"integer","description":"executions/watch_event: max results."},"tool":{"type":"string","description":"friction_append: tool name that produced the friction entry."},"message":{"type":"string","description":"friction_append: description of the friction encountered."},"severity":{"type":"string","enum":["info","warn","error","critical"],"description":"friction_append: severity level."},"n":{"type":"integer","description":"friction_tail: number of recent lines to return."},"since":{"type":"string","description":"learning_report/logs: ISO-8601 start time filter."},"until":{"type":"string","description":"learning_report: ISO-8601 end time filter."},"tail":{"type":"integer","description":"logs: number of tail lines from worker_debug.log."},"filterCorrelation":{"type":"string","description":"logs: filter by correlation/operation ID."},"grep":{"type":"string","description":"logs: substring filter on log lines."},"path":{"type":"string","description":"profile_*: path to the GeneXus profiler XML file."},"top":{"type":"integer","description":"profile_hotspots: top-N hottest procedures to return."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"executions"},{"action":"friction_tail","n":20}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
|
|
@@ -48,12 +50,13 @@
|
|
|
48
50
|
{"name":"genexus_transfer","description":"Real XPZ export/import over the SDK's IKnowledgeManagerService — dependency-aware, IDE Export/Import parity (NOT the filesystem copy genexus_io/kb_import do). action=export (targets[]+outputFile; includeDependencies=true exports transitive closure) | inspect (explore an .xpz, read-only) | import (apply into KB; dryRun defaults true=preview via ExploreExport; to actually import pass dryRun=false AND confirm=true; confirm=true alone only previews).","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["export","inspect","import"],"description":"XPZ export, inspection, or import operation to perform."},"targets":{"type":"array","items":{"type":"string"},"description":"export: object names to export."},"outputFile":{"type":"string","description":"export: absolute .xpz output path."},"includeDependencies":{"type":"boolean","description":"export: compute transitive dependency closure (Calls, Tables) and export all referenced objects.","default":false},"file":{"type":"string","description":"inspect/import: absolute .xpz path."},"type":{"type":"string","description":"export: disambiguate object type."},"dryRun":{"type":"boolean","description":"import: true (default) previews and imports NOTHING; pass false (with confirm=true) to actually apply. confirm=true alone does not import."},"confirm":{"type":"boolean","description":"import with dryRun=false: required."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"export","targets":["Customer"],"outputFile":"C:\\tmp\\cust.xpz"},{"action":"export","targets":["Customer"],"outputFile":"C:\\tmp\\cust_full.xpz","includeDependencies":true},{"action":"inspect","file":"C:\\tmp\\cust.xpz"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
|
|
49
51
|
{"name":"genexus_deploy","description":"Deploy application over the SDK. action=list_targets (read-only, default) enumerates deployment target types (IDeploymentTargetService); action=deploy (destructive, confirm=true) runs IDeploymentService.Deploy(model).","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list_targets","deploy"],"description":"Deployment-target or deployment execution operation to perform."},"confirm":{"type":"boolean","description":"deploy: required (builds + ships the app)."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"list_targets"},{"action":"deploy","confirm":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
|
|
50
52
|
{"name":"genexus_generator_reference","description":"Native typed .NET generator references used by GxExternalReference. list and dry-run actions are read-only. add/remove validate a managed assembly when a path is supplied, require optimistic baseVersion for changes, save only the native GeneratorsPart, reread it, and restore the complete generator-property snapshot on verification failure. No lifecycle action runs implicitly.","inputSchema":{"type":"object","additionalProperties":false,"required":["action","environment","generator"],"properties":{"action":{"type":"string","enum":["list","dry_run_add","add","dry_run_remove","remove"],"description":"Typed .NET generator-reference operation to perform."},"environment":{"type":"string","description":"Active GeneXus Environment name; the tool never switches environments."},"generator":{"type":"string","description":"Generator display name, e.g. Default (.NET)."},"assembly":{"type":"string","description":"Assembly file name for add/remove, e.g. SpreadsheetLibrary.dll."},"assemblyPath":{"type":"string","description":"Absolute path or KB-relative path used to validate a managed assembly. Required for add unless found in a standard model/bin location."},"baseVersion":{"type":"string","description":"Optimistic token returned by list or a dry-run. Required for a real state change."},"dryRun":{"type":"boolean","default":false,"description":"Force add/remove to remain read-only."},"rollbackOnFailure":{"type":"boolean","default":true,"description":"Restore and verify the complete prior generator-property snapshot if save/reread diverges."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"list","environment":".Net Environment","generator":"Default (.NET)"},{"action":"dry_run_add","environment":".Net Environment","generator":"Default (.NET)","assembly":"SpreadsheetLibrary.dll","assemblyPath":"C:\\KBs\\Sample\\CSharpModel\\web\\bin\\SpreadsheetLibrary.dll"},{"action":"add","environment":".Net Environment","generator":"Default (.NET)","assembly":"SpreadsheetLibrary.dll","assemblyPath":"C:\\KBs\\Sample\\CSharpModel\\web\\bin\\SpreadsheetLibrary.dll","baseVersion":"sha256:<token>","rollbackOnFailure":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},
|
|
51
|
-
{"name":"genexus_wwp","description":"Typed WorkWithPlus action, form-level action, tab, grid, native table-type, and structural edits with dryRun, optimistic concurrency, exact snapshots, post-save reread, projection verification, and rollback. set_table_type mutates only an existing table type through the native PatternInstance SDK and preserves children, bindings, events, names, classes, defaultType, and childrenOrderedList. add_grid writes a grid over an SDT collection variable (typed SDT columns, optional delete action). add_user_action with callObject opens another object (popup, parameters) instead of firing a derived event. list_tabs/tab_schema read the instance tabs and the pattern tab schema. No lifecycle operation is implicit. Settings: embedded and separate WWP templates, paged reads and exact table-class dryRun; saves remain blocked.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["list","add_action","add_user_action","update_action","move_action","remove_action","add_tab","move_tab","remove_tab","set_table_type","add_grid_attribute","move_grid_column","add_grid_variable","add_grid","list_tabs","tab_schema","replace_web_component_with_user_action","settings_templates","settings_read","settings_edit"],"description":"WorkWithPlus action-group, tab, grid-attribute, or explicit native structural operation to perform."},"name":{"type":"string","description":"Transaction, WebPanel, or WorkWithPlus<Object> host."},"group":{"type":"string","description":"Action group name. add_action creates it when absent; update/remove use it as a filter."},"containerName":{"type":"string","description":"add_user_action: form-level action container, usually TableActions."},"actionName":{"type":"string","description":"Action name. add_user_action derives the GeneXus event Do<actionName>."},"attribute":{"type":"string","description":"add_grid_attribute/move_grid_column: GeneXus Attribute name or grid-column reference."},"variable":{"type":"string","description":"add_grid_variable: presentation variable name; pair with variableReference for identity-safe writes."},"variableReference":{"type":"string","description":"Verified SDK variable identity in GUID-Name form; required for add_grid_variable."},"gridPath":{"type":"string","description":"move_grid_column/add_grid_variable: explicit grid path when the instance has multiple grids."},"before":{"type":"string","description":"move_grid_column/add_grid_variable: place before this existing column."},"caption":{"type":"string","description":"Action caption or add_grid_variable label."},"basicType":{"type":"string","description":"add_grid_variable: Character or VarChar presentation type."},"length":{"type":"integer","minimum":1,"description":"add_grid_variable: Character/VarChar length."},"procedure":{"type":"string","description":"add/update: associated Procedure; existence is validated against the KB."},"selection":{"type":"string","enum":["single","multiple"],"description":"add/update: execution scope for grid actions."},"enabledWhen":{"type":"string","description":"Availability condition stored verbatim; expression semantics are not validated."},"icon":{"type":"string","description":"add/update: button icon."},"description":{"type":"string","description":"add/update: tooltip or description."},"confirm":{"type":"boolean","description":"Confirmation prompt; required to delete unless dryRun."},"buttonClass":{"type":"string","description":"add/update: theme button class."},"position":{"type":"integer","minimum":0,"description":"Zero-based action or tab index."},"toGroup":{"type":"string","description":"move_action: destination group (created when absent)."},"fromGroup":{"type":"string","description":"move_action: source group (optional; searched across groups when omitted)."},"dryRun":{"type":"boolean","description":"Return a typed diff and versionToken without mutation."},"rollbackOnFailure":{"type":"boolean","default":true,"description":"On a failed write or post-save verification, restore the original PatternInstance when possible."},"controlName":{"type":"string","description":"Tab ControlName."},"title":{"type":"string","description":"add_tab: tab title."},"children":{"type":"array","description":"add_tab controls; flat children are wrapped in a responsive table. Nested table children accept the same control shape.","items":{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["variable","userAction","table"]},"name":{"type":"string"},"caption":{"type":"string"},"description":{"type":"string"},"basicType":{"type":"string"},"length":{"type":"integer","minimum":1},"decimals":{"type":"integer","minimum":0},"controlType":{"type":"string"},"controlValues":{"type":"string"},"controlEmptyItem":{"type":"boolean"},"controlEmptyItemText":{"type":"string"},"columns":{"type":"integer","minimum":1},"themeClass":{"type":"string"},"children":{"type":"array","items":{"type":"object"}}},"additionalProperties":false}},"sourceName":{"type":"string","description":"replace_web_component_with_user_action: existing WebComponent name."},"userActionName":{"type":"string","description":"replace_web_component_with_user_action: resulting UserAction name; defaults to sourceName."},"tablePath":{"type":"string","description":"set_table_type: existing table breadcrumb by names or indexed table segments; replace_web_component_with_user_action: full breadcrumb including the source node, for example TableHeader > TableUserRole > EmpresaSelector."},"tableType":{"type":"string","enum":["Regular","Responsive"],"description":"set_table_type: requested native WWP table type. Only the existing table @type changes; defaultType and all child identity/metadata remain guarded."},"gxobject":{"type":"string","description":"replace_web_component_with_user_action: existing WebComponent Gxobject to retain; it must match the current node."},"controlType":{"type":"string","enum":["DropDownComponent"],"description":"replace_web_component_with_user_action: resulting UserAction ControlType."},"webComponentLoad":{"type":"string","enum":["On Web Panel load","On first click","On every click"],"description":"DropDownComponent load timing."},"trigger":{"type":"string","enum":["Click","Hover"],"description":"DropDownComponent trigger."},"baseVersion":{"type":"string","description":"Optimistic-concurrency token returned by dryRun/read."},"expectedVersion":{"type":"string","description":"Alias for baseVersion."},"versionToken":{"type":"string","description":"Backward-compatible alias for baseVersion."},"kb":{"type":"string","description":"KB alias."},"kind":{"type":"string","enum":["grid","tabular","webcomponent"],"description":"tab_schema: tab kind to read the pattern schema for."},"callObject":{"type":"string","description":"add_user_action: object the button opens (Name or Type:Name, e.g. WebPanel:ReceiveOrderWP); the action then has no derived event. Not with procedure."},"popup":{"type":"boolean","description":"add_user_action with callObject: open the object in a popup."},"parameters":{"type":"array","items":{"type":"string"},"description":"add_user_action with callObject: ordered parameters; an attribute is its bare name, a variable carries &, an expression is its full text."},"collection":{"type":"string","description":"add_grid: SDT collection variable, e.g. &Lines."},"sdt":{"type":"string","description":"add_grid: the SDT the collection is made of."},"columns":{"type":"array","items":{"description":"An SDT item name, or {item, description}."},"description":"add_grid: SDT items shown, in order; a string is the item name, an object {item, description} also sets its description."},"deleteAction":{"type":"boolean","description":"add_grid: add a UDelete image action to the grid."},"template":{"description":"Settings catalog path, wwp:<template-guid>, or unique template name.","type":"string"},"limit":{"type":"integer","minimum":0,"description":"Settings nodes per page; offset=0, limit=0 includes full separate-template XML."},"guid":{"type":"string","description":"Pattern Settings object GUID for settings_* actions."},"nodePath":{"description":"Settings node path returned by settings_read.","type":"string"},"entityKey":{"type":"string"},"value":{"type":"string"},"property":{"description":"Exact SDK property name.","type":"string"},"offset":{"minimum":0,"type":"integer"}},"examples":[{"action":"list","name":"SampleOrderWW"},{"action":"add_action","name":"SampleOrderWW","group":"Operations","actionName":"Retry","procedure":"RetrySampleOrder","selection":"multiple","dryRun":true},{"action":"add_tab","name":"SamplePanel","controlName":"Details","title":"Details","children":[{"type":"variable","name":"Status","basicType":"VarChar","length":40},{"type":"userAction","name":"Refresh","caption":"Refresh"}],"dryRun":true},{"action":"add_grid_attribute","name":"SampleOrderWW","attribute":"SampleOrderStatus","caption":"Status","dryRun":true},{"action":"replace_web_component_with_user_action","name":"WorkWithPlusWorkWithPlusMasterPage","sourceName":"EmpresaSelector","userActionName":"EmpresaSelector","tablePath":"TableHeader > TableUserRole > EmpresaSelector","gxobject":"WWP_MasterPageEmpresaSelectorWC","controlType":"DropDownComponent","caption":"&Context.EmpresaDescricao","webComponentLoad":"On every click","trigger":"Click","dryRun":true},{"action":"set_table_type","name":"SamplePanel","tablePath":"TableMain > TableContent > TableLogin","tableType":"Responsive","dryRun":true},{"action":"add_user_action","name":"WorkWithPlusImpressaoConfiguracao","containerName":"TableActions","actionName":"BaixarConfiguracao","caption":"Baixar Configuração","dryRun":true,"rollbackOnFailure":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
|
|
53
|
+
{"name":"genexus_wwp","description":"Typed WorkWithPlus action, form-level action, tab, grid, native table-type, and structural edits with dryRun, optimistic concurrency, exact snapshots, post-save reread, projection verification, and rollback. set_table_type mutates only an existing table type through the native PatternInstance SDK and preserves children, bindings, events, names, classes, defaultType, and childrenOrderedList. add_grid creates SDT-collection grids or typed variable grids without a collection. add_user_action creates missing TableActions under a unique TableMain on Empty WebPanels. add_user_action with callObject opens another object (popup, parameters) instead of firing a derived event. list_tabs/tab_schema read the instance tabs and the pattern tab schema. No lifecycle operation is implicit. Settings: embedded and separate WWP templates, paged reads and exact table-class dryRun; saves remain blocked.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["list","add_action","add_user_action","update_action","move_action","remove_action","add_tab","move_tab","remove_tab","set_table_type","add_grid_attribute","move_grid_column","add_grid_variable","add_grid","list_tabs","tab_schema","replace_web_component_with_user_action","settings_templates","settings_read","settings_edit"],"description":"WorkWithPlus action-group, tab, grid-attribute, or explicit native structural operation to perform."},"name":{"type":"string","description":"Transaction, WebPanel, or WorkWithPlus<Object> host."},"group":{"type":"string","description":"Action group name. add_action creates it when absent; update/remove use it as a filter."},"containerName":{"type":"string","description":"add_user_action: form-level action container, usually TableActions. add_user_action creates missing TableActions under a unique TableMain."},"actionName":{"type":"string","description":"Action name. add_user_action derives the GeneXus event Do<actionName>."},"attribute":{"type":"string","description":"add_grid_attribute/move_grid_column: GeneXus Attribute name or grid-column reference."},"variable":{"type":"string","description":"add_grid_variable: presentation variable name; pair with variableReference for identity-safe writes."},"variableReference":{"type":"string","description":"Verified SDK variable identity in GUID-Name form; required for add_grid_variable."},"gridPath":{"type":"string","description":"move_grid_column/add_grid_variable: explicit grid path when the instance has multiple grids."},"before":{"type":"string","description":"move_grid_column/add_grid_variable: place before this existing column."},"caption":{"type":"string","description":"Action caption or add_grid_variable label."},"basicType":{"type":"string","description":"add_grid_variable: Character or VarChar presentation type."},"length":{"type":"integer","minimum":1,"description":"add_grid_variable: Character/VarChar length."},"procedure":{"type":"string","description":"add/update: associated Procedure; existence is validated against the KB."},"selection":{"type":"string","enum":["single","multiple"],"description":"add/update: execution scope for grid actions."},"enabledWhen":{"type":"string","description":"Availability condition stored verbatim; expression semantics are not validated."},"icon":{"type":"string","description":"add/update: button icon."},"description":{"type":"string","description":"add/update: tooltip or description."},"confirm":{"type":"boolean","description":"Confirmation prompt; required to delete unless dryRun."},"buttonClass":{"type":"string","description":"add/update: theme button class."},"position":{"type":"integer","minimum":0,"description":"Zero-based action or tab index."},"toGroup":{"type":"string","description":"move_action: destination group (created when absent)."},"fromGroup":{"type":"string","description":"move_action: source group (optional; searched across groups when omitted)."},"dryRun":{"type":"boolean","description":"Return a typed diff and versionToken without mutation."},"rollbackOnFailure":{"type":"boolean","default":true,"description":"On a failed write or post-save verification, restore the original PatternInstance when possible."},"controlName":{"type":"string","description":"Tab ControlName."},"title":{"type":"string","description":"add_tab: tab title."},"children":{"type":"array","description":"add_tab controls; flat children are wrapped in a responsive table. Nested table children accept the same control shape.","items":{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["variable","userAction","table"]},"name":{"type":"string"},"caption":{"type":"string"},"description":{"type":"string"},"basicType":{"type":"string"},"length":{"type":"integer","minimum":1},"decimals":{"type":"integer","minimum":0},"controlType":{"type":"string"},"controlValues":{"type":"string"},"controlEmptyItem":{"type":"boolean"},"controlEmptyItemText":{"type":"string"},"columns":{"type":"integer","minimum":1},"themeClass":{"type":"string"},"children":{"type":"array","items":{"type":"object"}}},"additionalProperties":false}},"sourceName":{"type":"string","description":"replace_web_component_with_user_action: existing WebComponent name."},"userActionName":{"type":"string","description":"replace_web_component_with_user_action: resulting UserAction name; defaults to sourceName."},"tablePath":{"type":"string","description":"set_table_type: existing table breadcrumb by names or indexed table segments; replace_web_component_with_user_action: full breadcrumb including the source node, for example TableHeader > TableUserRole > EmpresaSelector."},"tableType":{"type":"string","enum":["Regular","Responsive"],"description":"set_table_type: requested native WWP table type. Only the existing table @type changes; defaultType and all child identity/metadata remain guarded."},"gxobject":{"type":"string","description":"replace_web_component_with_user_action: existing WebComponent Gxobject to retain; it must match the current node."},"controlType":{"type":"string","enum":["DropDownComponent"],"description":"replace_web_component_with_user_action: resulting UserAction ControlType."},"webComponentLoad":{"type":"string","enum":["On Web Panel load","On first click","On every click"],"description":"DropDownComponent load timing."},"trigger":{"type":"string","enum":["Click","Hover"],"description":"DropDownComponent trigger."},"baseVersion":{"type":"string","description":"Optimistic-concurrency token returned by dryRun/read."},"expectedVersion":{"type":"string","description":"Alias for baseVersion."},"versionToken":{"type":"string","description":"Backward-compatible alias for baseVersion."},"kb":{"type":"string","description":"KB alias."},"kind":{"type":"string","enum":["grid","tabular","webcomponent"],"description":"tab_schema: tab kind to read the pattern schema for."},"callObject":{"type":"string","description":"add_user_action: object the button opens (Name or Type:Name, e.g. WebPanel:ReceiveOrderWP); the action then has no derived event. Not with procedure."},"popup":{"type":"boolean","description":"add_user_action with callObject: open the object in a popup."},"parameters":{"type":"array","items":{"type":"string"},"description":"add_user_action with callObject: ordered parameters; an attribute is its bare name, a variable carries &, an expression is its full text."},"collection":{"type":"string","description":"add_grid: SDT collection variable, e.g. &Lines."},"sdt":{"type":"string","description":"add_grid: the SDT the collection is made of."},"columns":{"type":"array","items":{"description":"SDT item or variable-column object."},"description":"add_grid: SDT items as strings or {item, description}; without collection/sdt, ordered {variable, basicType, length, decimals, description, readOnly} columns. Numeric and string types require length."},"deleteAction":{"type":"boolean","description":"add_grid: add a UDelete image action to the grid."},"template":{"description":"Settings catalog path, wwp:<template-guid>, or unique template name.","type":"string"},"limit":{"type":"integer","minimum":0,"description":"Settings nodes per page; offset=0, limit=0 includes full separate-template XML."},"guid":{"type":"string","description":"Pattern Settings object GUID for settings_* actions."},"nodePath":{"description":"Settings node path returned by settings_read.","type":"string"},"entityKey":{"type":"string"},"value":{"type":"string"},"property":{"description":"Exact SDK property name.","type":"string"},"offset":{"minimum":0,"type":"integer"},"gridName":{"type":"string","description":"add_grid without collection/sdt: variable grid control name (default Grid)."}},"examples":[{"action":"list","name":"SampleOrderWW"},{"action":"add_action","name":"SampleOrderWW","group":"Operations","actionName":"Retry","procedure":"RetrySampleOrder","selection":"multiple","dryRun":true},{"action":"add_tab","name":"SamplePanel","controlName":"Details","title":"Details","children":[{"type":"variable","name":"Status","basicType":"VarChar","length":40},{"type":"userAction","name":"Refresh","caption":"Refresh"}],"dryRun":true},{"action":"add_grid_attribute","name":"SampleOrderWW","attribute":"SampleOrderStatus","caption":"Status","dryRun":true},{"action":"replace_web_component_with_user_action","name":"WorkWithPlusWorkWithPlusMasterPage","sourceName":"EmpresaSelector","userActionName":"EmpresaSelector","tablePath":"TableHeader > TableUserRole > EmpresaSelector","gxobject":"WWP_MasterPageEmpresaSelectorWC","controlType":"DropDownComponent","caption":"&Context.EmpresaDescricao","webComponentLoad":"On every click","trigger":"Click","dryRun":true},{"action":"set_table_type","name":"SamplePanel","tablePath":"TableMain > TableContent > TableLogin","tableType":"Responsive","dryRun":true},{"action":"add_user_action","name":"WorkWithPlusImpressaoConfiguracao","containerName":"TableActions","actionName":"BaixarConfiguracao","caption":"Baixar Configuração","dryRun":true,"rollbackOnFailure":true},{"action":"add_grid","name":"SamplePanel","containerName":"TableContent","gridName":"Grid","columns":[{"variable":"Code","basicType":"Character","length":13},{"variable":"Op","basicType":"Numeric","length":2,"readOnly":false}],"dryRun":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
|
|
52
54
|
{"name":"genexus_kb_diff","description":"Gateway-only filesystem comparison of two KB directories. Requires kbA and kbB aliases or paths; no active KB selection is used. Modification detection compares SHA-256 content per object part, not filesystem metadata. The response reports inventory authority and completeness per side: an absent, unreadable or truncated Objects/ tree is status=Incomplete with complete=false, and only a proven empty Objects/ is reported as an empty model. identityAuthority is the on-disk Objects/<Type>/<Name> naming and is not module-qualified.","inputSchema":{"type":"object","required":["kbA","kbB"],"properties":{"kbA":{"type":"string"},"kbB":{"type":"string"},"mode":{"type":"string","enum":["content","metadata"],"default":"content","description":"content (default) compares SHA-256 over each object part file. metadata restores the cheaper timestamp/part-count heuristic, which cannot see same-metadata content changes; the response labels which one ran in contentComparison."},"maxObjects":{"type":"integer","minimum":1,"default":50000,"description":"Maximum objects enumerated per side. Exceeding it returns status=Incomplete with inventory.truncated=true."}},"examples":[{"kbA":"development","kbB":"staging"},{"kbA":"development","kbB":"staging","mode":"content","maxObjects":5000}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
53
55
|
{"name":"genexus_kb_import","description":"Gateway-only filesystem copy of one object between two KB directories. Requires source and object identity; run lifecycle index afterwards.","inputSchema":{"type":"object","required":["from","name","type"],"properties":{"from":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"to":{"type":"string"}},"examples":[{"from":"C:\\KBs\\source","to":"C:\\KBs\\target","name":"Customer","type":"Transaction"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},
|
|
54
56
|
{"name":"genexus_sandbox","description":"Gateway-only filesystem sandbox management; clone or remove a KB directory without SDK dispatch.","inputSchema":{"type":"object","required":["action","name"],"properties":{"action":{"type":"string","enum":["create","remove"],"description":"Sandbox operation to create or remove a KB directory."},"name":{"type":"string"},"from":{"type":"string"},"overwrite":{"type":"boolean"}},"examples":[{"action":"create","name":"probe","from":"C:\\KBs\\base"},{"action":"remove","name":"probe"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},
|
|
55
57
|
{"name":"genexus_worker_pool","description":"Gateway-only worker-pool warm-spare configuration. Does not require a KB selection or dispatch to the Worker.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["warm_spares"],"description":"Worker-pool operation to warm spare workers."},"spareCount":{"type":"integer"},"count":{"type":"integer"}},"examples":[{"action":"warm_spares","spareCount":1}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
56
58
|
{"name":"genexus_dfd","description":"Read-only entity-relationship diagram of a Transaction or Table, built only from the table relations the SDK reports: extends (N-1) and subordinates (1-N) edges, a Mermaid erDiagram, and the truncation cause.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Transaction or Table name."},"maxDepth":{"type":"integer","minimum":1,"maximum":6,"description":"Relation hops from the root (default 3)."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"name":"Order"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
57
59
|
{"name":"genexus_impact","description":"Read-only affected set of an object over the caller/callee graph: objects with depth, counts by type, a dependencies-first rebuild order, cycles and the cap that truncated it. No risk score.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Object name; a name shared by several objects is refused with their guids and paths."},"guid":{"type":"string","description":"Object GUID."},"entityKey":{"type":"string","description":"Object entity key."},"path":{"type":"string","description":"Object path, with or without the Root Module/ prefix; never falls back to a homonym."},"type":{"type":"string","description":"Object type, to narrow a bare name."},"kb":{"type":"string","description":"KB alias."},"direction":{"type":"string","enum":["up","down","both"],"description":"up: callers (default); down: callees."},"maxDepth":{"type":"integer","minimum":1,"maximum":6,"description":"Default 2."},"maxNodes":{"type":"integer","minimum":1,"maximum":2000,"description":"Default 200."},"typeFilter":{"type":"string","description":"Only report objects of this type; the traversal is unchanged."}},"examples":[{"name":"PostOrder","direction":"up","maxDepth":3}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
58
|
-
{"name":"genexus_object_context","description":"Read-only context of one object: identity from the index, callers/callees with coverage (fieldTrust partial means not read), and its data model (ER diagram for a Transaction/Table), with what was suppressed.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Object name; a name shared by several objects is refused with their guids and paths."},"guid":{"type":"string","description":"Object GUID."},"entityKey":{"type":"string","description":"Object entity key."},"path":{"type":"string","description":"Object path, with or without the Root Module/ prefix; never falls back to a homonym."},"type":{"type":"string","description":"Object type, to narrow a bare name."},"kb":{"type":"string","description":"KB alias."},"maxDepth":{"type":"integer","minimum":1,"maximum":6,"description":"Default 1."},"maxNodes":{"type":"integer","minimum":1,"maximum":2000,"description":"Default 100."}},"examples":[{"guid":"00000000-0000-0000-0000-000000000000"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}}
|
|
60
|
+
{"name":"genexus_object_context","description":"Read-only context of one object: identity from the index, callers/callees with coverage (fieldTrust partial means not read), and its data model (ER diagram for a Transaction/Table), with what was suppressed.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Object name; a name shared by several objects is refused with their guids and paths."},"guid":{"type":"string","description":"Object GUID."},"entityKey":{"type":"string","description":"Object entity key."},"path":{"type":"string","description":"Object path, with or without the Root Module/ prefix; never falls back to a homonym."},"type":{"type":"string","description":"Object type, to narrow a bare name."},"kb":{"type":"string","description":"KB alias."},"maxDepth":{"type":"integer","minimum":1,"maximum":6,"description":"Default 1."},"maxNodes":{"type":"integer","minimum":1,"maximum":2000,"description":"Default 100."}},"examples":[{"guid":"00000000-0000-0000-0000-000000000000"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
|
|
61
|
+
{"name":"genexus_workwith","description":"Typed authoring of actions and action parameters for standard WorkWith (WorkWith for Web) pattern instances. action=list_actions|add_action. Preserves strict boundary with WorkWithPlus (genexus_wwp). add_action authors a custom action with Procedure call, ordered parameters, condition expression, and caption on a target tab (default General) through the native SDK. Supports dryRun and optimistic concurrency; never mutates derived objects directly (derived WebComponents may require IDE Apply/build to re-project).","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Target Transaction or standard WorkWith PatternInstance name (e.g. 'TestTrn' or 'WorkWithWebTestTrn')."},"action":{"type":"string","enum":["list_actions","add_action"],"default":"list_actions","description":"Operation to perform: list_actions (read existing actions on tabs) or add_action (author a typed action with Procedure call)."},"tab":{"type":"string","default":"General","description":"Target tab code on the View (default 'General')."},"actionName":{"type":"string","description":"Unique name for the action (required for add_action, e.g. 'ExecutaTeste')."},"caption":{"type":"string","description":"Display caption for the button (defaults to actionName)."},"procedure":{"type":"string","description":"Target Procedure name or GUID to invoke on action click (required for add_action)."},"parameters":{"type":"array","items":{"type":"string"},"description":"Ordered parameters passed to the Procedure (attributes, variables, or expressions, e.g. ['procUrlTeste(\"General\")', 'TestTrnEmpresaId'])."},"condition":{"type":"string","description":"Optional condition expression to determine whether the action is enabled."},"dryRun":{"type":"boolean","default":false,"description":"When true, returns the execution plan without persisting changes to the KB."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"name":"Customer","action":"list_actions"},{"name":"TestTrn","action":"add_action","tab":"General","actionName":"ExecutaTeste","caption":"Executa Teste","procedure":"procExecutaTeste","parameters":["procUrlTeste(\"General\")","TestTrnEmpresaId"],"condition":"TestTrnPropria","dryRun":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}}
|
|
59
62
|
]
|
|
Binary file
|