genexus-mcp 2.37.0 → 2.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -252,10 +252,10 @@ The worker exposes **46 tools** to the MCP router, grouped by capability below.
252
252
 
253
253
  **Editing**
254
254
  - `genexus_edit` — edit any object part; modes `full` / `patch` / `ops`
255
- - `genexus_edit_and_build` — edit + rebuild callers in one call
255
+ - `genexus_edit_and_build` — edit + optional specification + rebuild callers in one call, with compensating rollback on validation failure
256
256
  - `genexus_edit_form` — semantic WebForm edits
257
257
  - `genexus_variable` — Variables-part CRUD
258
- - `genexus_create` — creation umbrella (Transaction, Procedure, Domain, SDT, API, Folder, Module, `curl_procedure` = scaffold a Procedure from a curl command, …)
258
+ - `genexus_create` — creation umbrella (Transaction, Procedure, Domain, SDT, API, Folder, Module, `curl_procedure` = scaffold a Procedure from a curl command, …); `object_atomic` authors definition + variables + Rules + properties + Source with preflight/read-back/rollback
259
259
  - `genexus_delete_object` — delete an object
260
260
  - `genexus_format` — format a code snippet with the worker's rules
261
261
 
@@ -266,7 +266,7 @@ The worker exposes **46 tools** to the MCP router, grouped by capability below.
266
266
 
267
267
  **Refactor, patterns & compare**
268
268
  - `genexus_refactor` — rename, extract procedure, WWP condition set
269
- - `genexus_apply_pattern` — apply a GeneXus pattern (WorkWith, WorkWithPlus, …)
269
+ - `genexus_apply_pattern` — apply a GeneXus pattern (WorkWith, WorkWithPlus, …); `mode=actions` manages typed WorkWithPlus grid actions and Action Groups
270
270
  - `genexus_compare` — IDE "Compare Objects" parity (`IComparerService`)
271
271
  - `genexus_merge` — 2- or 3-way object merge (`IMergeService`)
272
272
 
@@ -279,7 +279,7 @@ The worker exposes **46 tools** to the MCP router, grouped by capability below.
279
279
  **Lifecycle, build, test & DB**
280
280
  - `genexus_lifecycle` — build (incl. `compile_check`), validate, index, reorg, poll status
281
281
  - `genexus_test` — run native GXtest tests
282
- - `genexus_db` — DB umbrella: schema-drift, `sql_ddl`/`sql_navigation`, static index advisor, `sample_data`, Domain/SDT type introspection, translation import, `reorg_impact` (reorg/DDL impact preview; `deep=true` runs specification)
282
+ - `genexus_db` — DB umbrella: schema-drift, `sql_ddl`/`sql_navigation`, static index advisor, `sample_data`, Domain/SDT type introspection, translation import, `reorg_impact`, and non-mutating `reorg_preview` with exact DDL only from a current Impact Analysis artifact
283
283
  - `genexus_deploy` — deploy application (`IDeploymentService`): `list_targets` (read) / `deploy` (destructive, `confirm=true`)
284
284
  - `genexus_run_object` / `genexus_browser` — resolve runtime URL and headless-browser verification
285
285
 
package/cli/run.test.js CHANGED
@@ -9,6 +9,10 @@ const { compareSemver, detectInstallMethod, upgradePlanFor } = require('./lib/up
9
9
  const { detectClientInstalled, readJsonFileSafe } = require('./lib/config');
10
10
 
11
11
  const cliPath = path.join(__dirname, 'run.js');
12
+ const testGxPath = fs.mkdtempSync(path.join(os.tmpdir(), 'genexus-mcp-gx-'));
13
+ fs.writeFileSync(path.join(testGxPath, 'genexus.exe'), '');
14
+ const testGatewayEnv = { GENEXUS_MCP_GATEWAY_EXE: process.execPath };
15
+ test.after(() => fs.rmSync(testGxPath, { recursive: true, force: true }));
12
16
 
13
17
  function runCli(args, opts = {}) {
14
18
  return spawnSync(process.execPath, [cliPath, ...args], {
@@ -135,13 +139,13 @@ test('non-interactive init supports idempotent no-op', () => {
135
139
  '--kb',
136
140
  kbDir,
137
141
  '--gx',
138
- 'C:\\Program Files (x86)\\GeneXus\\GeneXus18',
142
+ testGxPath,
139
143
  '--no-smoke',
140
144
  '--format',
141
145
  'json'
142
146
  ];
143
147
 
144
- const first = runCli(args);
148
+ const first = runCli(args, { env: testGatewayEnv });
145
149
  assert.equal(first.status, 0);
146
150
  const firstParsed = JSON.parse(first.stdout);
147
151
  assert.equal(firstParsed.ok.noOp, false);
@@ -150,7 +154,7 @@ test('non-interactive init supports idempotent no-op', () => {
150
154
  assert.ok(Array.isArray(firstParsed.ok.verification.checks), 'verification should have checks array');
151
155
  assert.equal(firstParsed.meta.smokeSkipped, true, '--no-smoke should be reflected in meta');
152
156
 
153
- const second = runCli(args);
157
+ const second = runCli(args, { env: testGatewayEnv });
154
158
  assert.equal(second.status, 0);
155
159
  const secondParsed = JSON.parse(second.stdout);
156
160
  assert.equal(secondParsed.ok.noOp, true);
@@ -176,7 +180,7 @@ test('whoami with config returns kb and geneXus details', () => {
176
180
  const kbDir = path.join(tempRoot, 'kb-w');
177
181
  fs.mkdirSync(kbDir, { recursive: true });
178
182
 
179
- runCli(['init', '--kb', kbDir, '--gx', 'C:\\Program Files (x86)\\GeneXus\\GeneXus18', '--no-smoke', '--format', 'json']);
183
+ runCli(['init', '--kb', kbDir, '--gx', testGxPath, '--no-smoke', '--format', 'json']);
180
184
 
181
185
  const res = runCli(['whoami', '--format', 'json'], { cwd: kbDir });
182
186
  assert.equal(res.status, 0);
@@ -184,7 +188,7 @@ test('whoami with config returns kb and geneXus details', () => {
184
188
  assert.equal(parsed.ok.connected, true);
185
189
  assert.equal(parsed.ok.kb.path, kbDir);
186
190
  assert.equal(parsed.ok.kb.name, path.basename(kbDir));
187
- assert.equal(parsed.ok.geneXus.installationPath, 'C:\\Program Files (x86)\\GeneXus\\GeneXus18');
191
+ assert.equal(parsed.ok.geneXus.installationPath, testGxPath);
188
192
  assert.equal(parsed.meta.command, 'whoami');
189
193
 
190
194
  fs.rmSync(tempRoot, { recursive: true, force: true });
@@ -195,7 +199,7 @@ test('uninstall --yes removes local config and reports plan', () => {
195
199
  const kbDir = path.join(tempRoot, 'kb-u');
196
200
  fs.mkdirSync(kbDir, { recursive: true });
197
201
 
198
- runCli(['init', '--kb', kbDir, '--gx', 'C:\\Program Files (x86)\\GeneXus\\GeneXus18', '--no-smoke', '--format', 'json']);
202
+ runCli(['init', '--kb', kbDir, '--gx', testGxPath, '--no-smoke', '--format', 'json']);
199
203
 
200
204
  const cfgPath = path.join(kbDir, 'config.json');
201
205
  assert.equal(fs.existsSync(cfgPath), true, 'precondition: config.json exists');
@@ -233,8 +237,8 @@ test('init auto-discovers KB from cwd when --kb is omitted', () => {
233
237
  fs.writeFileSync(path.join(kbDir, 'KnowledgeBase.Connection'), '');
234
238
 
235
239
  const res = runCli(
236
- ['init', '--gx', 'C:\\Program Files (x86)\\GeneXus\\GeneXus18', '--no-smoke', '--format', 'json'],
237
- { cwd: kbDir }
240
+ ['init', '--gx', testGxPath, '--no-smoke', '--format', 'json'],
241
+ { cwd: kbDir, env: testGatewayEnv }
238
242
  );
239
243
 
240
244
  assert.equal(res.status, 0);
@@ -250,7 +254,7 @@ test('init fails clearly when paths cannot be auto-discovered', () => {
250
254
  const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'genexus-mcp-test-'));
251
255
 
252
256
  const res = runCli(
253
- ['init', '--gx', 'C:\\Program Files (x86)\\GeneXus\\GeneXus18', '--no-smoke', '--format', 'json'],
257
+ ['init', '--gx', testGxPath, '--no-smoke', '--format', 'json'],
254
258
  { cwd: tempRoot }
255
259
  );
256
260
 
@@ -267,7 +271,7 @@ test('kb list shows the KB auto-registered by init', () => {
267
271
  const kbDir = path.join(tempRoot, 'kb-list');
268
272
  fs.mkdirSync(kbDir, { recursive: true });
269
273
 
270
- runCli(['init', '--kb', kbDir, '--gx', 'C:\\Program Files (x86)\\GeneXus\\GeneXus18', '--no-smoke', '--format', 'json']);
274
+ runCli(['init', '--kb', kbDir, '--gx', testGxPath, '--no-smoke', '--format', 'json']);
271
275
 
272
276
  const res = runCli(['kb', 'list', '--format', 'json'], { cwd: kbDir });
273
277
  assert.equal(res.status, 0);
@@ -288,7 +292,7 @@ test('kb add and switch update active KB', () => {
288
292
  fs.mkdirSync(kbA, { recursive: true });
289
293
  fs.mkdirSync(kbB, { recursive: true });
290
294
 
291
- runCli(['init', '--kb', kbA, '--gx', 'C:\\Program Files (x86)\\GeneXus\\GeneXus18', '--no-smoke', '--format', 'json']);
295
+ runCli(['init', '--kb', kbA, '--gx', testGxPath, '--no-smoke', '--format', 'json']);
292
296
 
293
297
  const addRes = runCli(['kb', 'add', '--name', 'bravo', '--kb', kbB, '--format', 'json'], { cwd: kbA });
294
298
  assert.equal(addRes.status, 0);
@@ -314,7 +318,7 @@ test('kb switch rejects unknown name', () => {
314
318
  const kbDir = path.join(tempRoot, 'kb-x');
315
319
  fs.mkdirSync(kbDir, { recursive: true });
316
320
 
317
- runCli(['init', '--kb', kbDir, '--gx', 'C:\\Program Files (x86)\\GeneXus\\GeneXus18', '--no-smoke', '--format', 'json']);
321
+ runCli(['init', '--kb', kbDir, '--gx', testGxPath, '--no-smoke', '--format', 'json']);
318
322
 
319
323
  const res = runCli(['kb', 'switch', '--name', 'nonexistent', '--format', 'json'], { cwd: kbDir });
320
324
  assert.equal(res.status, 2);
@@ -332,7 +336,7 @@ test('kb remove deletes entry and reassigns active when applicable', () => {
332
336
  fs.mkdirSync(kbA, { recursive: true });
333
337
  fs.mkdirSync(kbB, { recursive: true });
334
338
 
335
- runCli(['init', '--kb', kbA, '--gx', 'C:\\Program Files (x86)\\GeneXus\\GeneXus18', '--no-smoke', '--format', 'json']);
339
+ runCli(['init', '--kb', kbA, '--gx', testGxPath, '--no-smoke', '--format', 'json']);
336
340
  runCli(['kb', 'add', '--name', 'second', '--kb', kbB, '--format', 'json'], { cwd: kbA });
337
341
 
338
342
  const removeRes = runCli(['kb', 'remove', '--name', path.basename(kbA), '--format', 'json'], { cwd: kbA });
@@ -351,7 +355,7 @@ test('kb switch --kb refuses to overwrite existing entry with different path', (
351
355
  fs.mkdirSync(kbA, { recursive: true });
352
356
  fs.mkdirSync(kbB, { recursive: true });
353
357
 
354
- runCli(['init', '--kb', kbA, '--gx', 'C:\\Program Files (x86)\\GeneXus\\GeneXus18', '--no-smoke', '--format', 'json']);
358
+ runCli(['init', '--kb', kbA, '--gx', testGxPath, '--no-smoke', '--format', 'json']);
355
359
 
356
360
  const res = runCli(['kb', 'switch', '--kb', kbB, '--format', 'json'], { cwd: kbA });
357
361
  assert.equal(res.status, 2);
@@ -369,7 +373,7 @@ test('kb remove of last KB clears legacy KBPath', () => {
369
373
  const kbDir = path.join(tempRoot, 'kb-last');
370
374
  fs.mkdirSync(kbDir, { recursive: true });
371
375
 
372
- runCli(['init', '--kb', kbDir, '--gx', 'C:\\Program Files (x86)\\GeneXus\\GeneXus18', '--no-smoke', '--format', 'json']);
376
+ runCli(['init', '--kb', kbDir, '--gx', testGxPath, '--no-smoke', '--format', 'json']);
373
377
 
374
378
  runCli(['kb', 'remove', '--name', path.basename(kbDir), '--format', 'json'], { cwd: kbDir });
375
379
 
@@ -385,7 +389,7 @@ test('kb subcommand validation: missing subcommand returns usage error', () => {
385
389
  const kbDir = path.join(tempRoot, 'kb-v');
386
390
  fs.mkdirSync(kbDir, { recursive: true });
387
391
 
388
- runCli(['init', '--kb', kbDir, '--gx', 'C:\\Program Files (x86)\\GeneXus\\GeneXus18', '--no-smoke', '--format', 'json']);
392
+ runCli(['init', '--kb', kbDir, '--gx', testGxPath, '--no-smoke', '--format', 'json']);
389
393
 
390
394
  const res = runCli(['kb', '--format', 'json'], { cwd: kbDir });
391
395
  assert.equal(res.status, 2);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genexus-mcp",
3
- "version": "2.37.0",
3
+ "version": "2.38.0",
4
4
  "mcpName": "io.github.lennix1337/genexus",
5
5
  "description": "GeneXus 18 MCP server — read, edit, and analyze GeneXus knowledge base objects (transactions, web panels, procedures, SDTs) 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=v8.0": {},
9
9
  ".NETCoreApp,Version=v8.0/win-x64": {
10
- "GxMcp.Gateway/2.37.0": {
10
+ "GxMcp.Gateway/2.38.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/2.37.0": {
69
+ "GxMcp.Gateway/2.38.0": {
70
70
  "type": "project",
71
71
  "serviceable": false,
72
72
  "sha512": ""
Binary file
Binary file
@@ -1,15 +1,15 @@
1
1
  {
2
+ "GeneXus": {
3
+ "InstallationPath": "C:\\\\Program Files (x86)\\\\GeneXus\\\\GeneXus18",
4
+ "WorkerExecutable": "C:\\Projetos\\Genexus18MCP\\publish\\\\worker\\\\GxMcp.Worker.exe"
5
+ },
2
6
  "Server": {
3
7
  "HttpPort": 5000,
4
8
  "McpStdio": true
5
9
  },
6
10
  "Logging": {
7
- "Level": "Debug",
8
- "Path": "logs"
9
- },
10
- "GeneXus": {
11
- "InstallationPath": "C:\\\\Program Files (x86)\\\\GeneXus\\\\GeneXus18",
12
- "WorkerExecutable": "C:\\Projetos\\Genexus18MCP\\publish\\\\worker\\\\GxMcp.Worker.exe"
11
+ "Path": "logs",
12
+ "Level": "Debug"
13
13
  },
14
14
  "Environment": {
15
15
  "KBPath": "C:\\\\KBs\\\\YourKB"
@@ -1,48 +1,50 @@
1
- [
2
- {"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}},
3
- {"name":"genexus_recipe","description":"Named playbooks + self-extending macros. action=list|describe|run|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","run","suggest_macro","crystallize"],"description":"suggest_macro: detect repeated sequences; crystallize: save one as a 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."}},"examples":[{"name":"list"},{"name":"wwp_on_transaction"},{"action":"suggest_macro"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
4
- {"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. 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."},"axiCompact":{"type":"boolean","description":"Compact projection (default true).","default":true}},"required":["query"],"examples":[{"query":"type:Transaction parent:Customers"},{"query":"\"Customer\"","limit":5}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
5
- {"name":"genexus_list_objects","description":"List objects with pagination. Feed nextOffset until hasMore=false. Returns minimal shape by default (name, type, path, parent); verbose=true for full shape.","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}},
6
- {"name":"genexus_read","description":"Read parts of objects. name or targets + parts=[...]. Paginate via offset/limit. Response carries versionToken — pass it as baseVersion on genexus_edit for a safe (optimistic-concurrency) write. See genexus://kb/tool-help/genexus_read.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"targets":{"type":"array","items":{"type":"string"}},"part":{"type":"string"},"parts":{"type":"array","items":{"type":"string"},"description":"When set, only the listed parts are returned in a combined response. Mutually exclusive with part/offset/limit."},"offset":{"type":"integer"},"limit":{"type":"integer"},"type":{"type":"string"},"kb":{"type":"string","description":"KB alias."}},"examples":[{"name":"Customer"},{"name":"Customer","part":"Source"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
7
- {"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. 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"},"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":{"description":"Shorthand for {find,replace}. Equivalent to operation=Replace + context=find + content=replace."},"context":{"type":"string","description":"Exact existing text to find (Replace) or anchor after (Insert_After). Required for both."},"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","items":{"type":"object","properties":{"name":{"type":"string"},"content":{"type":"string"}},"required":["name","content"]}},"type":{"type":"string"},"return_post_state":{"type":"boolean","description":"Omit post_state.diff (default true)."},"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."},"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 StaleObject instead of overwriting the newer version. Omit to skip the check."},"kb":{"type":"string","description":"KB alias."}},"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}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
8
- {"name":"genexus_inspect","description":"Snapshot an object: metadata, variables, structure, signature. runtimeIds needs a prior build; use genexus_read for full source.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"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."}},"required":["name"],"examples":[{"name":"Customer"},{"name":"Customer","include":["variables","signature"]}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
9
- {"name":"genexus_analyze","description":"Use this for cross-object semantic analysis: impact, dependencies, complexity, naming, summary. See tool-help for mode selection. Requires the KB index to be Ready for impact/callers modes — check genexus_lifecycle action=status if results look empty.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"mode":{"type":"string","enum":["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"]},"format":{"type":"string","enum":["json","ascii"],"description":"mode=dependency_heatmap: ascii adds rendered bar chart."},"kb":{"type":"string","description":"KB alias."},"waitForIndex":{"type":"boolean","description":"mode=impact: block up to 30s for Ready index (default true).","default":true}},"required":["mode"],"examples":[{"name":"Customer","mode":"impact"},{"name":"Customer","mode":"summary"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
10
- {"name":"genexus_lifecycle","description":"Build, validate, index, or poll the KB. action=specify runs a spec-check (Spec+Gen only, no Compile/deploy) returning spc*/gen* diagnostics for the target fast (catch spec errors without a full build). action=build with mode=compile_check spec+gen+compiles the target(s) PLUS their transitive callers and skips the KB-wide DeveloperMenu regen (the dominant build-all cost) -- a fast 'did my edit break the build?' check that requires a target. Long ops are async with operationId. dryRun=true (build/rebuild/index) returns the build plan or index plan without executing. Build results carry generateEvidence + effective_status=SucceededWithGaps when a Succeeded build emitted no fresh .cs (don't trust Status=Succeeded alone); a 2nd concurrent build is refused (BuildAlreadyRunning). See genexus://kb/tool-help/genexus_lifecycle for the build-evidence checklist, actions, and target formats.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["build","cancel","specify","rebuild","reorg","reorg_preview","validate","validate-kb","sync","index","status","result","snapshots-list","snapshots-restore"]},"mode":{"type":"string","enum":["compile_check"],"description":"With action=build: compile_check spec+gen+compiles target(s) plus their transitive callers and SKIPS the KB-wide DeveloperMenu regen (the dominant build-all cost). Fast 'did my edit break the build?' check; requires target."},"target":{"type":"string","description":"Object name(s), taskId, job_id, or op:<id>. Build accepts CSV ('Foo,Bar')."},"code":{"type":"string"},"limit":{"type":"integer"},"snapshotPath":{"type":"string"},"estimated_seconds":{"type":"integer","description":"Build: <20 sync, >=20 async (default 60)."},"wait_seconds":{"type":"integer","description":"Status/build long-poll cap, 0-600s."},"wait_until_done":{"type":"boolean","description":"Build/rebuild: block in one turn until terminal (up to wait_seconds, default 600)."},"wait":{"type":"integer","description":"Status block, 0-600s. With a build taskId (or since): event-driven, returns on change. On index status with no since: blocks until index is Ready."},"since":{"type":"string","description":"Status: prior _meta.snapshot for chained waits."},"compact":{"type":"boolean","description":"Status: counts + top-10 errors (default true)."},"force":{"type":"boolean","description":"Index: full SDK rescan (clears snapshot)."},"dryRun":{"type":"boolean","default":false,"description":"build/rebuild/index: returns the plan (object list / index entries) without executing."},"includeCallees":{"type":"string","enum":["none","direct","transitive"],"description":"Build: expand call graph so callees compile first (default transitive)."},"callers":{"type":"boolean","description":"compile_check: expand transitive callers of the target (default true). Set false for a target-only check when the target is a base transaction/BC with a huge caller closure."},"callerCap":{"type":"integer","description":"compile_check: max callers to pull into the check (default 40). Closure beyond this is truncated and flagged."},"deploy":{"type":"boolean","description":"Build: force the full deploy (Theme/Image/Style/Module copy to web/bin + WebAppConfig) so the built object is runnable, not just compiled. Default false (fast compile-only path). Slower; use when you need to run/preview the object."},"buildPlanCap":{"type":"integer","description":"Build: max nodes before BuildPlanTooLarge (default 200)."},"kb":{"type":"string","description":"KB alias."}},"required":["action"],"examples":[{"action":"build"},{"action":"status","target":"op:abc123"},{"action":"build","mode":"compile_check","target":"MyObject"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
11
- {"name":"genexus_test","description":"Execute native GeneXus tests (GXtest).","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"kb":{"type":"string","description":"KB alias."}},"required":["name"],"examples":[{"name":"MyTestProc"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}},
12
- {"name":"genexus_sdk_probe","description":"Dump SDK surface (types/methods/props) to docs/sdk-probe/. Use when hunting for entry points.","inputSchema":{"type":"object","properties":{"outputDir":{"type":"string","description":"Absolute path. Default <repo>/docs/sdk-probe/."}},"examples":[{}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
13
- {"name":"genexus_worker_reload","description":"Reload worker. modes: soft (drain+respawn), hard (copy sourceDir+respawn). force=true: gateway kills directly. See tool-help.","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["soft","hard"]},"force":{"type":"boolean","description":"Bypass drain; gateway kills + respawns. Use when worker is wedged."},"sourceDir":{"type":"string","description":"Required for mode=hard."},"drainTimeoutMs":{"type":"integer","description":"Soft only; default 30000."}},"examples":[{"mode":"soft"},{"mode":"hard","sourceDir":"C:\\Projetos\\Genexus18MCP\\src\\GxMcp.Worker\\bin\\Debug"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}},
14
- {"name":"genexus_delete_object","description":"Delete an object from the KB. Irreversible — confirm=true required. dryRun=true returns what would be deleted without persisting.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"confirm":{"type":"boolean"},"dryRun":{"type":"boolean","default":false,"description":"When true, returns the object that would be deleted without deleting it."},"kb":{"type":"string","description":"KB alias."}},"required":["name","confirm"],"examples":[{"name":"ObsoletePanel","type":"WebPanel","confirm":true},{"name":"ObsoletePanel","type":"WebPanel","confirm":true,"dryRun":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},
15
- {"name":"genexus_refactor","description":"Run GeneXus refactor: rename, extract procedure, or WWP condition set. For KB-wide rename with call-site patching (RenameObject/RenameAttribute), the response includes a patched-site count from RefactorService. dryRun=true previews what would change without persisting.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["RenameAttribute","RenameVariable","RenameObject","ExtractProcedure","WWPSetCondition"]},"target":{"type":"string","description":"Primary object or symbol to refactor."},"newName":{"type":"string"},"objectName":{"type":"string"},"code":{"type":"string"},"procedureName":{"type":"string"},"controlAttribute":{"type":"string"},"value":{"type":"string"},"type":{"type":"string","description":"RenameObject: object type (e.g. WebPanel, Transaction, Procedure) to disambiguate when several objects share the name — e.g. a WebPanel vs the same-named Table behind a Transaction. Ignored by RenameAttribute/RenameVariable."},"dryRun":{"type":"boolean","default":false,"description":"When true, returns what would be changed without persisting."},"kb":{"type":"string","description":"KB alias."}},"required":["action"],"examples":[{"action":"RenameObject","target":"Customer","newName":"Client"},{"action":"RenameAttribute","target":"CustomerId","newName":"ClientId"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
16
- {"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}},
17
- {"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}},
18
- {"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}},
19
- {"name":"genexus_properties","description":"Read or update GeneXus object properties. action=get|set|move. move places the object into a Folder or Module — pass destination=<Folder or Module name> (add destKind=Folder|Module only to disambiguate a shared name); re-read to confirm, so a no-op returns MoveNotPersisted not a false success. (To create an object directly in a folder, use genexus_create folder=/module=.) Description is the title-bar text when a WebPanel/Popup opens via .Popup(). Uncertain a property exists or its values? → resources/read uri=genexus://kb/skills/navigation (CallProtocol does NOT apply to Web/SD Panels; 'Modal' is not a value). Use genexus_layout set_property for layout control properties.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["get","set","move"]},"name":{"type":"string"},"control":{"type":"string","description":"Optional. Layout control name (e.g. BtnConfirmar), variable name with & prefix (e.g. &Alu2RegProf), or attribute name."},"propertyName":{"type":"string"},"value":{"type":"string"},"destination":{"type":"string","description":"move: target Folder/Module name (auto-detects kind)."},"destKind":{"type":"string","enum":["Folder","Module"],"description":"move: disambiguate when a Folder and Module share a name."},"dryRun":{"type":"boolean","description":"move: preview from/to without persisting."},"kb":{"type":"string","description":"KB alias."}},"required":["action","name"],"examples":[{"action":"get","name":"MyPanel"},{"action":"move","name":"ZeferinoMonstrao","destination":"Lixeira"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
20
- {"name":"genexus_structure","description":"Read or write the structure/data-model of GeneXus objects. Read: get_visual, get_logic, get_indexes (source=User indexes are droppable). Write: update_visual (structure DSL for a Transaction; for an SDT it sets the root isCollection/collectionItemName and adds primitive, Domain-based (basedOnDomain) and SDT-reference members plus nested levels); update_group (SubType Group membership — each member {name, subtypeOf} registers the subtype attribute in the Group and asserts its SuperType link, IDE Group-editor parity; remove:[names] detaches); create_index/drop_index (unique/non-unique indexes — the GeneXus way to enforce uniqueness, there is no Unique() rule); set_attribute (Formula, subtype, Title/ColumnTitle, IsCollection, basedOnDomain on a KB-global attribute); set_level (Transaction level DescriptionAttribute/ImageAttribute); set_domain (edit an existing Domain's enumValues/dataType). After index/type changes run genexus_lifecycle action=reorg. 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"]},"name":{"type":"string","description":"Object name. For set_attribute it is the attribute name; for set_domain the domain name."},"payload":{"type":"object","description":"update_visual (Transaction):{children:[...]}; update_visual (SDT):{isCollection?,collectionItemName?,children:[{name,type?,length?,decimals?,basedOnDomain?,isCollection?,isLevel?,children?}]}. update_group:{members:[{name,subtypeOf}],remove?:[name]}. create_index:{attributes:[\"Attr\"],unique?:true,name?,order?}. drop_index:{indexName}. set_attribute:{formula?,subtypeOf?,title?,columnTitle?,contextualTitle?,isCollection?,basedOnDomain?}. set_level:{level?,descriptionAttribute?,imageAttribute?}. set_domain:{enumValues:[{name,value,description?}],dataType?,length?,decimals?,signed?}."},"kb":{"type":"string","description":"KB alias."}},"required":["action","name"],"examples":[{"action":"get_indexes","name":"Customer"},{"action":"create_index","name":"Country","payload":{"attributes":["CountryName"],"unique":true}},{"action":"set_attribute","name":"CustomerBalance","payload":{"formula":"sum(InvoiceAmount)"}},{"action":"set_level","name":"Customer","payload":{"descriptionAttribute":"CustomerName"}},{"action":"update_visual","name":"MySdt","payload":{"isCollection":true,"collectionItemName":"MySdtItem","children":[{"name":"Title","type":"VarChar","length":100},{"name":"Kind","basedOnDomain":"MyDomain"}]}},{"action":"update_group","name":"gst_orgao_exercicio","payload":{"members":[{"name":"orgao_exercicio_id","subtypeOf":"exercicio_id"},{"name":"orgao_exercicio","subtypeOf":"exercicio"}]}}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
21
- {"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"]},"name":{"type":"string","description":"ExternalObject / Menu / DataSelector name."},"payload":{"type":"object","description":"add_external_method:{name,returnType?,parameters?:[{name,type?,inout?}]}. add_external_property:{name,type?}. add_menu_option:{description,target?,optionCode?}. add_condition:{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}},
22
- {"name":"genexus_layout","description":"SDK layout/WebForm ops: get_tree, set_property, find_controls, inspect_surface, scan_mutators. For object-level properties use genexus_properties; for object-level visual structure use 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","list_controls","design_system"]},"name":{"type":"string"},"control":{"type":"string"},"propertyName":{"type":"string"},"value":{"type":"string"},"query":{"type":"string"},"changes":{"type":"array","items":{"type":"object","properties":{"control":{"type":"string"},"propertyName":{"type":"string"},"value":{"type":"string"}},"required":["control","propertyName","value"]}},"limit":{"type":"integer"},"currentName":{"type":"string"},"newName":{"type":"string"},"printBlockName":{"type":"string"},"height":{"type":"integer"},"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}},
23
- {"name":"genexus_doc","description":"Use to generate structured docs (wiki, sequence diagrams, 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"]},"target":{"type":"string","description":"Object or domain name."}},"required":["action"],"examples":[{"action":"wiki","target":"Customer"},{"action":"health"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
24
- {"name":"genexus_search_source","description":"Regex/semantic search across Procedure/DataProvider/WebPanel/Transaction source. 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."},"startIndex":{"type":"integer","description":"Resume cursor. On Timeout the response returns nextCursor; pass it here to continue where the scan stopped."},"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."}},"examples":[{"pattern":"ControlType=\"Radio\""},{"pattern":"for each","typeFilter":"Procedure","maxResults":20}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
25
- {"name":"genexus_kb","description":"Manage open KBs and startup config. list/open/close/set_default operate on WorkerPool; set_startup/get_startup mirror IDE 'Set As Startup Object'.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list","open","close","set_default","set_startup","get_startup"]},"alias":{"type":"string","description":"KB alias. open: auto from path basename if omitted."},"path":{"type":"string","description":"Absolute KB path (required for open if alias not in config)."},"name":{"type":"string","description":"Object name (required for set_startup)."}},"required":["action"],"examples":[{"action":"open","path":"C:\\KBs\\MyKb"},{"action":"list"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
26
- {"name":"genexus_navigation","description":"View navigation report (IDE Right-click → View Navigation). latest=true returns cached report from .gx/navigation-cache; else runs fresh.","inputSchema":{"type":"object","required":["action","name"],"properties":{"action":{"type":"string","enum":["view"]},"name":{"type":"string"},"latest":{"type":"boolean","default":false,"description":"Return the most recent cached navigation if any; otherwise run fresh."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"view","name":"Customer"},{"action":"view","name":"Customer","latest":true}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
27
- {"name":"genexus_api","description":"Introspect REST endpoints exposed by HTTP procedures. action=list|describe|snapshot|diff_baseline. Returns endpoints + detects breaking changes vs a saved baseline.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["list","describe","snapshot","diff_baseline"]},"target":{"type":"string","description":"Procedure name (action=describe)."},"name":{"type":"string","description":"Baseline name (action=snapshot)."},"baseline":{"type":"string","description":"Baseline name under .gx/api-baselines/ or absolute path (action=diff_baseline)."},"pathPrefix":{"type":"string","description":"Folder prefix filter (action=list), e.g. 'Root Module/API/'."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"list"},{"action":"describe","target":"ApiCustomerGet"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
28
- {"name":"genexus_apply_pattern","description":"Apply a pattern (e.g. WorkWithPlus) to a parent (IDE Right-click → Apply Pattern). Transaction=family-gen; WebPanel/SDPanel=direct-attach (pass settings.template). mode=diagnose (or dryRun=true) returns findings without mutating. Working on Smart Devices? → resources/read uri=genexus://kb/skills/sd-panel-mobile for Main object semantics.","inputSchema":{"type":"object","required":["name","pattern"],"properties":{"name":{"type":"string","description":"Target KBObject name."},"pattern":{"type":"string","description":"Pattern key ('WorkWithPlus') or GUID."},"mode":{"type":"string","enum":["apply","diagnose"],"description":"apply (default) mutates; diagnose returns reasons without applying."},"settings":{"type":"object","description":"Pattern-instance settings tree."},"reapply":{"type":"boolean","default":false,"description":"Re-run on existing instance."},"validate":{"type":"boolean","default":false,"description":"After apply, build the generated host. Adds validation block (60-180s). Catches binding errors."},"dryRun":{"type":"boolean","default":false,"description":"Alias for mode=diagnose. When true, returns pattern findings without mutating."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"name":"Customer","pattern":"WorkWithPlus"},{"name":"Customer","pattern":"WorkWithPlus","mode":"diagnose"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
29
- {"name":"genexus_edit_and_build","description":"Edit + rebuild callers in one call. Returns edit diff + impact + a build block that may include taskId/pollTarget for lifecycle follow-up.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Target object name."},"part":{"type":"string","description":"Part (Source, Rules, ...)."},"content":{"type":"string","description":"New content. For mode=patch may be {find,replace} object."},"patch":{"description":"Same shape as genexus_edit.patch. Auto-sets mode=patch."},"mode":{"type":"string","enum":["full","patch"],"default":"patch"},"type":{"type":"string","description":"Disambiguates ambiguous names."},"dryRun":{"type":"boolean","default":false},"buildIncludeCallees":{"type":"string","enum":["none","direct","transitive"],"default":"direct"},"buildPlanCap":{"type":"integer","default":200},"waitForIndex":{"type":"boolean","default":true},"waitTimeoutMs":{"type":"integer","default":30000},"visualVerify":{"type":"boolean","default":false,"description":"Post-edit headless screenshot + pixel-diff vs baseline. See tool-help."}},"required":["name","part"],"examples":[{"name":"Customer","part":"Source","patch":{"find":"oldValue","replace":"newValue"}},{"name":"Customer","part":"Rules","mode":"patch","patch":{"find":"error(","replace":"msg("},"dryRun":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
30
- {"name":"genexus_security","description":"Audit KB security. action=audit_gam scans GAM/env props; action=scan_secrets greps Source for credential-shaped literals. Returns findings with severity.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["audit_gam","scan_secrets","scan_native"]},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"audit_gam"},{"action":"scan_secrets"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
31
- {"name":"genexus_doctor","description":"Health check: GX install, KB state, worker, cache age, recent telemetry. Paste output for triage when something feels off. When more than one KB is open, pass kb=<alias> to pick which one to diagnose.","inputSchema":{"type":"object","properties":{"kb":{"type":"string","description":"Alias of the KB to diagnose. Optional; required only when multiple KBs are open (otherwise the single open / default KB is used)."}},"additionalProperties":false,"examples":[{},{"kb":"mykb"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
32
- {"name":"genexus_edit_form","description":"Semantic WebForm edits. Actions: add_textblock, add_button, set_visibility, remove_control, wrap_in_fieldset.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["add_textblock","add_button","set_visibility","remove_control","wrap_in_fieldset"]},"name":{"type":"string"},"parent":{"type":"string"},"position":{"type":"string","description":"first|last|after:<id>"},"caption":{"type":"string"},"format":{"type":"string","enum":["Text","HTML"]},"event":{"type":"string"},"controlId":{"type":"string"},"controlIds":{"type":"array","items":{"type":"string"}},"legend":{"type":"string"},"visible":{"type":"boolean"},"dryRun":{"type":"boolean"},"kb":{"type":"string","description":"KB alias."}},"required":["action","name"],"examples":[{"action":"add_button","name":"WPMain","caption":"Confirmar","event":"OnConfirm"},{"action":"set_visibility","name":"WPMain","controlId":"GrpDetail","visible":false}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
33
- {"name":"genexus_compare","description":"Diff two KB objects — IDE 'Compare Objects' parity over the SDK's IComparerService. mode=content (default) diffs full object content; mode=properties diffs top-level properties only. Read-only.","inputSchema":{"type":"object","required":["objectA","objectB"],"properties":{"objectA":{"type":"string"},"objectB":{"type":"string"},"type":{"type":"string","description":"Object type filter applied to both lookups, e.g. 'Transaction'."},"mode":{"type":"string","enum":["content","properties"],"description":"content (default) or properties."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"objectA":"Customer","objectB":"CustomerV2"},{"objectA":"Customer","objectB":"CustomerV2","mode":"properties"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
34
- {"name":"genexus_module","description":"GeneXus Module Manager over the SDK's IModuleManagerService. action=list (read-only: installed Module KB objects) | install (opcFile=<path to .opc file>, or name[+version] to install a named module) | install_builtin (name=<built-in module>) | update (name+version).","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["install","install_builtin","update","list"]},"opcFile":{"type":"string","description":"install: absolute path to a .opc module package file."},"name":{"type":"string","description":"install (by name)/install_builtin/update: module name."},"version":{"type":"string","description":"install (by name)/update: target module version."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"list"},{"action":"install_builtin","name":"GeneXusGAM"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
35
- {"name":"genexus_merge","description":"Merge two (or three, with an ancestor) KB objects via the SDK's IMergeService. mode=objects only (mode=models is unsupported — needs multiple KBModel instances not available in this worker). Omit objectBase for a 2-way merge (ignoreConflicts applies); pass objectBase for a 3-way merge. dryRun (default true) reports what would merge via IComparerService WITHOUT writing; dryRun=false performs the merge and saves it. WRITE + destructive.","inputSchema":{"type":"object","required":["objectLeft","objectRight"],"properties":{"mode":{"type":"string","enum":["objects"],"description":"Only 'objects' is supported."},"objectLeft":{"type":"string"},"objectRight":{"type":"string"},"objectBase":{"type":"string","description":"Optional common ancestor. Omit for a 2-way merge; pass for a 3-way merge."},"type":{"type":"string","description":"Object type filter applied to all lookups, e.g. 'Transaction'."},"ignoreConflicts":{"type":"boolean","description":"2-way merge only: let the SDK auto-resolve conflicting parts instead of failing. Default false."},"dryRun":{"type":"boolean","default":true,"description":"true (default): report-only, no SDK MergeObjects call, nothing written. false: perform the merge and save it."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"objectLeft":"Customer","objectRight":"CustomerV2"},{"objectBase":"CustomerBase","objectLeft":"Customer","objectRight":"CustomerV2","dryRun":false}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
36
- {"name":"genexus_gxserver","description":"GxServer (Team Development) sync. Read: status|pending|ignored|conflicts|history. pending lists locally-changed objects, each flagged ignoredForCommit (true = in the IDE 'Ignored Objects' tab, skipped by a full commit). ignored lists ONLY the excluded objects: commitIgnored (IDE Commit > Ignored Objects) + updateIgnored (IDE Update > Ignored Objects). Write (destructive; requires a GXserver-linked KB): commit (message; optional targets[] = commit ONLY those pending objects; reports committedObjects + remoteVersion) | update (applies changes into local KB; apply=false = download only; leaves conflicts flagged) | lock (target) | resolve (targets[] + strategy). theirs/automerge/update talk to the server and need creds via GXMCP_TEAMDEV_USER/PASSWORD env (url auto-resolves). Returns {connected:false} when KB is not linked.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["status","pending","ignored","conflicts","history","commit","update","lock","resolve","pipeline_list","pipeline_runs","pipeline_output","pipeline_run","pipeline_abort"]},"project":{"type":"string","description":"pipeline_*: CI pipeline/project name (from pipeline_list)."},"buildId":{"type":"integer","description":"pipeline_output: build id to fetch output for."},"rebuild":{"type":"boolean","description":"pipeline_run: full rebuild instead of incremental."},"runTests":{"type":"boolean","description":"pipeline_run: run tests as part of the pipeline."},"confirm":{"type":"boolean","description":"pipeline_run/pipeline_abort: required (these trigger/cancel a build)."},"limit":{"type":"integer","description":"history only; default 10, max 200."},"message":{"type":"string","description":"commit: commit comment."},"force":{"type":"boolean","description":"commit: force commit despite pending server-side changes."},"apply":{"type":"boolean","description":"update: apply changes into local KB (default true); false = download package only."},"async":{"type":"boolean","description":"update/commit: run as a background job — returns an operationId immediately; poll genexus_lifecycle(action=status|result, target=op:<id>). Use for a large update that would exceed the sync window."},"strategy":{"type":"string","enum":["mine","theirs","automerge"],"description":"resolve: which version wins — mine (keep local, default, creds-free), theirs (take server), automerge (3-way merge). theirs/automerge need server creds."},"target":{"type":"string","description":"lock: object name to lock."},"targets":{"type":"array","items":{"type":"string"},"description":"commit: partial commit — object names to commit (all other pending objects are excluded). resolve: conflicted object names to resolve. Names must appear in action=pending/conflicts."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"status"},{"action":"commit","message":"Fix Customer validation"},{"action":"commit","message":"Ship my proc only","targets":["ApiCtlObjTransicionar"]},{"action":"update"},{"action":"resolve","targets":["Customer"],"strategy":"automerge"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
37
- {"name":"genexus_kb_version","description":"KB model-version management (Create Version/Branch/Activate/Revert) over the SDK's KBVersionHelper — the IDE Version menu's code path. action=list is read-only; freeze/branch/set_active/revert mutate the KB's version tree.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["list","freeze","branch","set_active","revert"]},"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":"revert: source version. Defaults to the active version."},"backupModel":{"type":"boolean","description":"freeze: back up the KB model. Default false."},"includeEnvironments":{"type":"boolean","description":"branch: include environments. Default false."},"autoUpdate":{"type":"boolean","description":"set_active: auto-update the working model. Default false."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"list"},{"action":"freeze","name":"v1.0","description":"Release 1.0"},{"action":"set_active","targetVersion":"Trunk"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
38
- {"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"]},"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}},
39
- {"name":"genexus_db","description":"Database umbrella. action: drift_check|drift_report (Transaction↔DB schema drift) | optimize_analyze|optimize_suggest|optimize_report (static index advisor) | sql_ddl|sql_navigation (SQL for Transaction/Procedure) | sample_data (fake INSERTs) | types_list|types_describe|types_validate (Domains/SDT constraints) | 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","types_list","types_describe","types_validate","translations_import","reorg_impact"]},"deep":{"type":"boolean","description":"reorg_impact 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."},"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"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
40
- {"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).","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"]},"name":{"type":"string"},"part":{"type":"string"},"versionId":{"type":"integer"},"snapshot":{"type":"string"},"discard":{"type":"boolean"},"dryRun":{"type":"boolean"},"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}},
41
- {"name":"genexus_io","description":"IO umbrella for assets, part text exchange, screenshots, OCR. action: asset_find|asset_read|asset_write (binary asset CRUD) | export_part|import_part (object part to/from a text file) | export_unified (full object envelope JSON) | screenshot_publish (copy PNG to .gx/published-screenshots) | ocr (Tesseract stub).","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["asset_find","asset_read","asset_write","export_part","import_part","export_unified","screenshot_publish","ocr"]},"path":{"type":"string","description":"asset/screenshot_publish/ocr: file path."},"name":{"type":"string","description":"export/import/export_unified: object name."},"outputPath":{"type":"string","description":"export_part: destination file path."},"inputPath":{"type":"string","description":"import_part: source file path."},"part":{"type":"string","description":"export/import_part: part name (e.g. Source)."},"type":{"type":"string","description":"export/import/export_unified disambiguator."},"overwrite":{"type":"boolean","description":"export_part: overwrite if exists."},"pattern":{"type":"string","description":"asset_find: glob pattern."},"relativeRoot":{"type":"string","description":"asset_find: root for relative paths."},"limit":{"type":"integer","description":"asset_find: max results."},"includeContent":{"type":"boolean","description":"asset_find: inline file content."},"maxBytes":{"type":"integer","description":"asset_read: max bytes to return."},"contentBase64":{"type":"string","description":"asset_write: base64-encoded file content."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"asset_read","path":"C:\\KBs\\MyKb\\custom.xml"},{"action":"export_part","name":"Customer","part":"Source","outputPath":"C:\\tmp\\Customer.gxp"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
42
- {"name":"genexus_variable","description":"Variables part CRUD. action: add | delete (idempotent; refuses GAM/WWP+ framework-managed vars) | modify (atomically change type; preserves name+description). For add, pass EITHER varName (single) OR variables:[{varName,typeName,length,decimals,collection},...] to add many in one call (one save; per-item Added/Exists/Failed outcomes). length/decimals override the type-embedded size (e.g. long API-key strings); collection=true declares a collection var; add with no typeName inherits a same-named attribute's type. VarChar persists as VARCHAR (not CHARACTER). async=true returns an operationId for lifecycle polling. dryRun=true previews the change without persisting. typeName required for modify.","inputSchema":{"type":"object","required":["action","name"],"properties":{"action":{"type":"string","enum":["add","delete","modify"]},"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?, length?, decimals?, collection?}. 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"}}}},"typeName":{"type":"string","description":"Primitive (Character/Numeric/VarChar/Date/...), SDT/BC/Domain name, or WebSession. VarChar keeps VARCHAR semantics."},"length":{"type":"integer","description":"add/modify optional: overrides the length parsed from typeName (fixes the Character(20) default)."},"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."},"basedOn":{"type":"string","description":"modify optional: Domain."},"dryRun":{"type":"boolean","default":false,"description":"When true, returns what would change without persisting."},"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)."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"add","name":"MyPanel","varName":"&Choice","typeName":"Numeric"},{"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}},
43
- {"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"]},"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}},
44
- {"name":"genexus_create","description":"Creation umbrella. action: object (Transaction/Procedure/WebPanel/SDT/API/Domain/Dashboard/Folder/Module; type='API' scaffolds a REST API object — routes use ONE HTTP-verb block per object 'Verb { route => Object; }' (mixing Get+Post blocks is unsupported); type='Folder'/'Module' create containers, and folder=<name>/module=<name> place the new object there (created in Root, then moved+verified); SDT takes optional firstItem/firstItemType; Domain takes dataType+length or enumValues; NOT WWP — use genexus_apply_pattern) | popup (popup WebPanel with Form type='layout' body) | sd_panel_create|sd_panel_inspect|sd_panel_edit | save_as (clone parts) | scaffold|translate|sample (forge) | template (kpi_header|empty_state|confirm_dialog).","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["object","popup","sd_panel_create","sd_panel_inspect","sd_panel_edit","save_as","scaffold","translate","sample","template","curl_procedure"]},"curl":{"type":"string","description":"curl_procedure: the curl command to import as a Procedure."},"type":{"type":"string"},"name":{"type":"string"},"newName":{"type":"string","description":"save_as."},"description":{"type":"string"},"dataType":{"type":"string","description":"object Domain."},"length":{"type":"integer","description":"object Domain."},"decimals":{"type":"integer","description":"object Domain."},"signed":{"type":"boolean","description":"object Domain."},"basedOn":{"type":"string","description":"object Domain."},"enumValues":{"type":"array","items":{"type":"object"},"description":"object Domain enum."},"firstItem":{"type":"string","description":"object SDT optional: name of the first structure item to seed (SDK requires ≥1). Defaults to Item1. Use to avoid the throwaway Item1."},"firstItemType":{"type":"string","description":"object SDT optional: type of the seeded first item (Character/Numeric/VarChar/…). Defaults to VarChar."},"folder":{"type":"string","description":"object: Folder destination (created in Root, then moved+verified)."},"module":{"type":"string","description":"object: Module destination (created in Root, then moved+verified)."},"parentPath":{"type":"string","description":"object: folder/module destination (fallback when folder/module absent)."},"spec":{"type":"object","description":"popup."},"part":{"type":"string","description":"sd_panel_edit/template."},"content":{"type":"string","description":"sd_panel_edit/scaffold/translate."},"includePatternInstance":{"type":"boolean","description":"save_as."},"overwrite":{"type":"boolean","description":"save_as."},"dryRun":{"type":"boolean","description":"popup/save_as/template/object."},"template":{"type":"string","enum":["kpi_header","empty_state","confirm_dialog"],"description":"template."},"args":{"type":"object","description":"template."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"object","name":"NewPanel","type":"WebPanel"},{"action":"object","name":"CustomerApi","type":"API"},{"action":"popup","name":"MyPopup","spec":{"host":"Customer"}}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
45
- {"name":"genexus_memory","description":"Per-KB fact store. action: save (fact required; optional target/type/tags; dedups on identical fact+object, bumping a hit count) | recall (filter by target/type/tags — ANY match; no filter returns all) | list (all, newest first) | forget (tombstone by id) | promote (lift a friction-log message into a memory, tagged 'friction') | consolidate (dreaming — merge redundant/overlapping facts within scope; dryRun=true previews, dryRun=false compacts memory.jsonl). Persisted to .gx/memory/memory.jsonl.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["save","recall","list","forget","promote","consolidate"]},"fact":{"type":"string","description":"save: the fact to remember."},"target":{"type":"string","description":"object name this memory is about."},"type":{"type":"string","description":"object type this memory is about."},"tags":{"type":"array","items":{"type":"string"},"description":"labels for filtering."},"id":{"type":"string","description":"forget: memory id to tombstone."},"message":{"type":"string","description":"promote: friction text to promote into a memory."},"dryRun":{"type":"boolean","description":"consolidate: true previews proposed merges without writing; false (default) applies and compacts memory.jsonl."},"kb":{"type":"string","description":"KB alias."}},"additionalProperties":false,"examples":[{"action":"save","fact":"Customer.Email must be unique","target":"Customer","type":"Transaction","tags":["validation"]},{"action":"recall","target":"Customer"},{"action":"consolidate","dryRun":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
46
- {"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) | inspect (explore an .xpz, read-only) | import (apply into KB; dryRun defaults true=preview via ExploreExport; dryRun=false requires confirm=true).","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["export","inspect","import"]},"targets":{"type":"array","items":{"type":"string"},"description":"export: object names to export."},"outputFile":{"type":"string","description":"export: absolute .xpz output path."},"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; false applies (needs confirm)."},"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":"inspect","file":"C:\\tmp\\cust.xpz"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
47
- {"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"]},"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}}
48
- ]
1
+ [
2
+ {"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}},
3
+ {"name":"genexus_recipe","description":"Named playbooks + self-extending macros. action=list|describe|run|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","run","suggest_macro","crystallize"],"description":"suggest_macro: detect repeated sequences; crystallize: save one as a 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."}},"examples":[{"name":"list"},{"name":"wwp_on_transaction"},{"action":"suggest_macro"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
4
+ {"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. 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."},"axiCompact":{"type":"boolean","description":"Compact projection (default true).","default":true}},"required":["query"],"examples":[{"query":"type:Transaction parent:Customers"},{"query":"\"Customer\"","limit":5}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
5
+ {"name":"genexus_list_objects","description":"List objects with pagination. Feed nextOffset until hasMore=false. Returns minimal shape by default (name, type, path, parent); verbose=true for full shape.","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}},
6
+ {"name":"genexus_read","description":"Read parts of objects. name or targets + parts=[...]. Paginate via offset/limit. Response carries versionToken — pass it as baseVersion on genexus_edit for a safe (optimistic-concurrency) write. See genexus://kb/tool-help/genexus_read.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"targets":{"type":"array","items":{"type":"string"}},"part":{"type":"string"},"parts":{"type":"array","items":{"type":"string"},"description":"When set, only the listed parts are returned in a combined response. Mutually exclusive with part/offset/limit."},"offset":{"type":"integer"},"limit":{"type":"integer"},"type":{"type":"string"},"kb":{"type":"string","description":"KB alias."}},"examples":[{"name":"Customer"},{"name":"Customer","part":"Source"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
7
+ {"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. 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"},"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":{"description":"Shorthand for {find,replace}. Equivalent to operation=Replace + context=find + content=replace."},"context":{"type":"string","description":"Exact existing text to find (Replace) or anchor after (Insert_After). Required for both."},"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","items":{"type":"object","properties":{"name":{"type":"string"},"content":{"type":"string"}},"required":["name","content"]}},"type":{"type":"string"},"return_post_state":{"type":"boolean","description":"Omit post_state.diff (default true)."},"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":"Issue #60: with validationMode=specify, restore the pre-write state (from the edit snapshot) when the specify pass reports errors."},"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 StaleObject instead of overwriting the newer version. Omit to skip the check."},"kb":{"type":"string","description":"KB alias."}},"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}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
8
+ {"name":"genexus_inspect","description":"Use this for a compact object snapshot: metadata, variables, structure, signature and navigation context. 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"},"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."}},"required":["name"],"examples":[{"name":"Customer"},{"name":"Customer","include":["variables","signature"]}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
9
+ {"name":"genexus_analyze","description":"Use this for cross-object semantic analysis: impact, dependencies, complexity, naming, summary. See tool-help for mode selection. Requires the KB index to be Ready for impact/callers modes — check genexus_lifecycle action=status if results look empty.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"mode":{"type":"string","enum":["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"]},"format":{"type":"string","enum":["json","ascii"],"description":"mode=dependency_heatmap: ascii adds rendered bar chart."},"kb":{"type":"string","description":"KB alias."},"waitForIndex":{"type":"boolean","description":"mode=impact: block up to 30s for Ready index (default true).","default":true}},"required":["mode"],"examples":[{"name":"Customer","mode":"impact"},{"name":"Customer","mode":"summary"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
10
+ {"name":"genexus_lifecycle","description":"Build, validate, index, or poll the KB. action=specify runs a spec-check (Spec+Gen only, no Compile/deploy) returning spc*/gen* diagnostics for the target fast (catch spec errors without a full build). action=build with mode=compile_check spec+gen+compiles the target(s) PLUS their transitive callers and skips the KB-wide DeveloperMenu regen (the dominant build-all cost) -- a fast 'did my edit break the build?' check that requires a target. Long ops are async with operationId. dryRun=true (build/rebuild/index) returns the build plan or index plan without executing. Build results carry generateEvidence + effective_status=SucceededWithGaps when a Succeeded build emitted no fresh .cs (don't trust Status=Succeeded alone); a 2nd concurrent build is refused (BuildAlreadyRunning). See genexus://kb/tool-help/genexus_lifecycle for the build-evidence checklist, actions, and target formats.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["build","cancel","specify","rebuild","reorg","reorg_preview","validate","validate-kb","sync","index","status","result","snapshots-list","snapshots-restore"]},"mode":{"type":"string","enum":["compile_check"],"description":"With action=build: compile_check spec+gen+compiles target(s) plus their transitive callers and SKIPS the KB-wide DeveloperMenu regen (the dominant build-all cost). Fast 'did my edit break the build?' check; requires target."},"target":{"type":"string","description":"Object name(s), taskId, job_id, or op:<id>. Build accepts CSV ('Foo,Bar')."},"code":{"type":"string"},"limit":{"type":"integer"},"snapshotPath":{"type":"string"},"estimated_seconds":{"type":"integer","description":"Build: <20 sync, >=20 async (default 60)."},"wait_seconds":{"type":"integer","description":"Status/build long-poll cap, 0-600s."},"wait_until_done":{"type":"boolean","description":"Build/rebuild: block in one turn until terminal (up to wait_seconds, default 600)."},"wait":{"type":"integer","description":"Status block, 0-600s. With a build taskId (or since): event-driven, returns on change. On index status with no since: blocks until index is Ready."},"since":{"type":"string","description":"Status: prior _meta.snapshot for chained waits."},"compact":{"type":"boolean","description":"Status: counts + top-10 errors (default true)."},"force":{"type":"boolean","description":"Index: full SDK rescan (clears snapshot)."},"dryRun":{"type":"boolean","default":false,"description":"build/rebuild/index: returns the plan (object list / index entries) without executing."},"includeCallees":{"type":"string","enum":["none","direct","transitive"],"description":"Build: expand call graph so callees compile first (default transitive)."},"callers":{"type":"boolean","description":"compile_check: expand transitive callers of the target (default true). Set false for a target-only check when the target is a base transaction/BC with a huge caller closure."},"callerCap":{"type":"integer","description":"compile_check: max callers to pull into the check (default 40). Closure beyond this is truncated and flagged."},"deploy":{"type":"boolean","description":"Build: force the full deploy (Theme/Image/Style/Module copy to web/bin + WebAppConfig) so the built object is runnable, not just compiled. Default false (fast compile-only path). Slower; use when you need to run/preview the object."},"buildPlanCap":{"type":"integer","description":"Build: max nodes before BuildPlanTooLarge (default 200)."},"kb":{"type":"string","description":"KB alias."}},"required":["action"],"examples":[{"action":"build"},{"action":"status","target":"op:abc123"},{"action":"build","mode":"compile_check","target":"MyObject"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
11
+ {"name":"genexus_test","description":"Execute native GeneXus tests (GXtest).","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"kb":{"type":"string","description":"KB alias."}},"required":["name"],"examples":[{"name":"MyTestProc"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}},
12
+ {"name":"genexus_sdk_probe","description":"Dump SDK surface (types/methods/props) to docs/sdk-probe/. Use when hunting for entry points.","inputSchema":{"type":"object","properties":{"outputDir":{"type":"string","description":"Absolute path. Default <repo>/docs/sdk-probe/."}},"examples":[{}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
13
+ {"name":"genexus_worker_reload","description":"Reload worker. modes: soft (drain+respawn), hard (copy sourceDir+respawn). force=true: gateway kills directly. See tool-help.","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["soft","hard"]},"force":{"type":"boolean","description":"Bypass drain; gateway kills + respawns. Use when worker is wedged."},"sourceDir":{"type":"string","description":"Required for mode=hard."},"drainTimeoutMs":{"type":"integer","description":"Soft only; default 30000."}},"examples":[{"mode":"soft"},{"mode":"hard","sourceDir":"C:\\Projetos\\Genexus18MCP\\src\\GxMcp.Worker\\bin\\Debug"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}},
14
+ {"name":"genexus_delete_object","description":"Delete an object from the KB. Irreversible — confirm=true required. dryRun=true returns what would be deleted without persisting.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"confirm":{"type":"boolean"},"dryRun":{"type":"boolean","default":false,"description":"When true, returns the object that would be deleted without deleting it."},"kb":{"type":"string","description":"KB alias."}},"required":["name","confirm"],"examples":[{"name":"ObsoletePanel","type":"WebPanel","confirm":true},{"name":"ObsoletePanel","type":"WebPanel","confirm":true,"dryRun":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},
15
+ {"name":"genexus_refactor","description":"Run GeneXus refactor: rename, extract procedure, or WWP condition set. For KB-wide rename with call-site patching (RenameObject/RenameAttribute), the response includes a patched-site count from RefactorService. dryRun=true previews what would change without persisting.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["RenameAttribute","RenameVariable","RenameObject","ExtractProcedure","WWPSetCondition"]},"target":{"type":"string","description":"Primary object or symbol to refactor."},"newName":{"type":"string"},"objectName":{"type":"string"},"code":{"type":"string"},"procedureName":{"type":"string"},"controlAttribute":{"type":"string"},"value":{"type":"string"},"type":{"type":"string","description":"RenameObject: object type (e.g. WebPanel, Transaction, Procedure) to disambiguate when several objects share the name — e.g. a WebPanel vs the same-named Table behind a Transaction. Ignored by RenameAttribute/RenameVariable."},"dryRun":{"type":"boolean","default":false,"description":"When true, returns what would be changed without persisting."},"kb":{"type":"string","description":"KB alias."}},"required":["action"],"examples":[{"action":"RenameObject","target":"Customer","newName":"Client"},{"action":"RenameAttribute","target":"CustomerId","newName":"ClientId"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
16
+ {"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}},
17
+ {"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}},
18
+ {"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}},
19
+ {"name":"genexus_properties","description":"Read or update GeneXus object properties. action=get|set|move. move places the object into a Folder or Module — pass destination=<Folder or Module name> (add destKind=Folder|Module only to disambiguate a shared name); re-read to confirm, so a no-op returns MoveNotPersisted not a false success. (To create an object directly in a folder, use genexus_create folder=/module=.) Description is the title-bar text when a WebPanel/Popup opens via .Popup(). Uncertain a property exists or its values? → resources/read uri=genexus://kb/skills/navigation (CallProtocol does NOT apply to Web/SD Panels; 'Modal' is not a value). Use genexus_layout set_property for layout control properties.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["get","set","move"]},"name":{"type":"string"},"control":{"type":"string","description":"Optional. Layout control name (e.g. BtnConfirmar), variable name with & prefix (e.g. &Alu2RegProf), or attribute name."},"propertyName":{"type":"string"},"value":{"type":"string"},"destination":{"type":"string","description":"move: target Folder/Module name (auto-detects kind)."},"destKind":{"type":"string","enum":["Folder","Module"],"description":"move: disambiguate when a Folder and Module share a name."},"dryRun":{"type":"boolean","description":"move: preview from/to without persisting."},"validationMode":{"type":"string","enum":["specify"],"description":"Issue #60: with action=set, run the inline Specify pass (Spec+Gen, no Compile) after the property write, returning structured spc*/gen* diagnostics in the same call. Combines with rollbackOnFailure."},"rollbackOnFailure":{"type":"boolean","description":"Issue #60: with action=set and validationMode=specify, restore the pre-write state when the specify pass reports errors. Property writes have no pre-write snapshot, so rollback reports rolledBack=false (the object keeps the new value) when spec fails."},"kb":{"type":"string","description":"KB alias."}},"required":["action","name"],"examples":[{"action":"get","name":"MyPanel"},{"action":"move","name":"ZeferinoMonstrao","destination":"Lixeira"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
20
+ {"name":"genexus_structure","description":"Read or write the structure/data-model of GeneXus objects. Read: get_visual, get_logic, get_indexes (source=User indexes are droppable). Write: update_visual (structure DSL for a Transaction; for an SDT it sets the root isCollection/collectionItemName and adds primitive, Domain-based (basedOnDomain) and SDT-reference members plus nested levels); update_group (SubType Group membership — each member {name, subtypeOf} registers the subtype attribute in the Group and asserts its SuperType link, IDE Group-editor parity; remove:[names] detaches); create_index/drop_index (unique/non-unique indexes — the GeneXus way to enforce uniqueness, there is no Unique() rule); set_attribute (Formula, subtype, Title/ColumnTitle, IsCollection, basedOnDomain on a KB-global attribute); set_level (Transaction level DescriptionAttribute/ImageAttribute); set_domain (edit an existing Domain's enumValues/dataType). After index/type changes run genexus_lifecycle action=reorg. 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"]},"name":{"type":"string","description":"Object name. For set_attribute it is the attribute name; for set_domain the domain name."},"payload":{"type":"object","description":"update_visual (Transaction):{children:[...]}; update_visual (SDT):{isCollection?,collectionItemName?,children:[{name,type?,length?,decimals?,basedOnDomain?,isCollection?,isLevel?,children?}]}. update_group:{members:[{name,subtypeOf}],remove?:[name]}. create_index:{attributes:[\"Attr\"],unique?:true,name?,order?}. drop_index:{indexName}. set_attribute:{formula?,subtypeOf?,title?,columnTitle?,contextualTitle?,isCollection?,basedOnDomain?}. set_level:{level?,descriptionAttribute?,imageAttribute?}. set_domain:{enumValues:[{name,value,description?}],dataType?,length?,decimals?,signed?}."},"validationMode":{"type":"string","enum":["specify"],"description":"Issue #60: run the inline Specify pass (Spec+Gen, no Compile) after a structure write (update_visual / set_domain / set_attribute / set_level / update_group), returning structured spc*/gen* diagnostics in the same call. Combines with rollbackOnFailure."},"rollbackOnFailure":{"type":"boolean","description":"Issue #60: with validationMode=specify, restore the pre-write state when the specify pass reports errors. Structure/Domain writes have no pre-write snapshot, so rollback reports rolledBack=false (the object keeps the new state) when spec fails."},"kb":{"type":"string","description":"KB alias."}},"required":["action","name"],"examples":[{"action":"get_indexes","name":"Customer"},{"action":"create_index","name":"Country","payload":{"attributes":["CountryName"],"unique":true}},{"action":"set_attribute","name":"CustomerBalance","payload":{"formula":"sum(InvoiceAmount)"}},{"action":"set_level","name":"Customer","payload":{"descriptionAttribute":"CustomerName"}},{"action":"update_visual","name":"MySdt","payload":{"isCollection":true,"collectionItemName":"MySdtItem","children":[{"name":"Title","type":"VarChar","length":100},{"name":"Kind","basedOnDomain":"MyDomain"}]}},{"action":"update_group","name":"gst_orgao_exercicio","payload":{"members":[{"name":"orgao_exercicio_id","subtypeOf":"exercicio_id"},{"name":"orgao_exercicio","subtypeOf":"exercicio"}]}}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
21
+ {"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"]},"name":{"type":"string","description":"ExternalObject / Menu / DataSelector name."},"payload":{"type":"object","description":"add_external_method:{name,returnType?,parameters?:[{name,type?,inout?}]}. add_external_property:{name,type?}. add_menu_option:{description,target?,optionCode?}. add_condition:{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}},
22
+ {"name":"genexus_layout","description":"SDK layout/WebForm ops: get_tree, set_property, find_controls, inspect_surface, scan_mutators. For object-level properties use genexus_properties; for object-level visual structure use 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","list_controls","design_system"]},"name":{"type":"string"},"control":{"type":"string"},"propertyName":{"type":"string"},"value":{"type":"string"},"query":{"type":"string"},"changes":{"type":"array","items":{"type":"object","properties":{"control":{"type":"string"},"propertyName":{"type":"string"},"value":{"type":"string"}},"required":["control","propertyName","value"]}},"limit":{"type":"integer"},"currentName":{"type":"string"},"newName":{"type":"string"},"printBlockName":{"type":"string"},"height":{"type":"integer"},"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}},
23
+ {"name":"genexus_doc","description":"Use to generate structured docs (wiki, sequence diagrams, 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"]},"target":{"type":"string","description":"Object or domain name."}},"required":["action"],"examples":[{"action":"wiki","target":"Customer"},{"action":"health"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
24
+ {"name":"genexus_search_source","description":"Regex/semantic search across Procedure/DataProvider/WebPanel/Transaction source. 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."},"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."}},"examples":[{"pattern":"ControlType=\"Radio\""},{"pattern":"for each","typeFilter":"Procedure","maxResults":20}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
25
+ {"name":"genexus_kb","description":"Manage open KBs and startup config. list/open/close/set_default operate on WorkerPool; set_startup/get_startup mirror IDE 'Set As Startup Object'.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list","open","close","set_default","set_startup","get_startup"]},"alias":{"type":"string","description":"KB alias. open: auto from path basename if omitted."},"path":{"type":"string","description":"Absolute KB path (required for open if alias not in config)."},"name":{"type":"string","description":"Object name (required for set_startup)."}},"required":["action"],"examples":[{"action":"open","path":"C:\\KBs\\MyKb"},{"action":"list"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
26
+ {"name":"genexus_navigation","description":"View navigation report (IDE Right-click → View Navigation). latest=true returns cached report from .gx/navigation-cache; else runs fresh.","inputSchema":{"type":"object","required":["action","name"],"properties":{"action":{"type":"string","enum":["view"]},"name":{"type":"string"},"latest":{"type":"boolean","default":false,"description":"Return the most recent cached navigation if any; otherwise run fresh."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"view","name":"Customer"},{"action":"view","name":"Customer","latest":true}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
27
+ {"name":"genexus_api","description":"Introspect REST endpoints exposed by HTTP procedures. action=list|describe|snapshot|diff_baseline. Returns endpoints + detects breaking changes vs a saved baseline.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["list","describe","snapshot","diff_baseline"]},"target":{"type":"string","description":"Procedure name (action=describe)."},"name":{"type":"string","description":"Baseline name (action=snapshot)."},"baseline":{"type":"string","description":"Baseline name under .gx/api-baselines/ or absolute path (action=diff_baseline)."},"pathPrefix":{"type":"string","description":"Folder prefix filter (action=list), e.g. 'Root Module/API/'."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"list"},{"action":"describe","target":"ApiCustomerGet"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
28
+ {"name":"genexus_apply_pattern","description":"Apply a pattern (e.g. WorkWithPlus) to a parent (IDE Right-click → Apply Pattern). Transaction=family-gen; WebPanel/SDPanel=direct-attach (pass settings.template). mode=diagnose (or dryRun=true) returns findings without mutating. Working on Smart Devices? → resources/read uri=genexus://kb/skills/sd-panel-mobile for Main object semantics. mode=actions manages typed grid actions and Action Groups, persists and re-reads PatternInstance, supports dryRun diff, and never adds security permissions automatically.","inputSchema":{"type":"object","required":["name","pattern"],"properties":{"name":{"type":"string","description":"Target KBObject name."},"pattern":{"type":"string","description":"Pattern key ('WorkWithPlus') or GUID."},"mode":{"type":"string","enum":["apply","diagnose","actions"],"description":"apply (default) mutates; diagnose returns reasons without applying. actions exposes typed WWP action-group editing."},"action":{"type":"string","enum":["list_actions","add_grid_action","update_action","move_action","remove_action"],"description":"mode=actions operation."},"group":{"type":"string"},"actionName":{"type":"string"},"newGroup":{"type":"string"},"position":{"type":"integer","minimum":0},"procedure":{"type":"string"},"selection":{"type":"string","enum":["current","multiple"]},"enabledWhen":{"type":"string"},"visibleWhen":{"type":"string"},"icon":{"type":"string"},"description":{"type":"string"},"confirmation":{"type":"string"},"confirmTitle":{"type":"string"},"settings":{"type":"object","description":"Pattern-instance settings tree."},"reapply":{"type":"boolean","default":false,"description":"Re-run on existing instance."},"validate":{"type":"boolean","default":false,"description":"After apply, build the generated host. Adds validation block (60-180s). Catches binding errors."},"dryRun":{"type":"boolean","default":false,"description":"Alias for mode=diagnose. When true, returns pattern findings without mutating. With mode=actions it previews the typed action diff."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"name":"Customer","pattern":"WorkWithPlus"},{"name":"Customer","pattern":"WorkWithPlus","mode":"diagnose"},{"name":"Customer","pattern":"WorkWithPlus","mode":"actions","action":"add_grid_action","group":"Actions","actionName":"Approve","procedure":"ApproveCustomer","dryRun":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
29
+ {"name":"genexus_edit_and_build","description":"Edit + rebuild callers in one call. Returns edit diff + impact + a build block that may include taskId/pollTarget for lifecycle follow-up. validate=true/validationMode=specify validates the saved object; rollbackOnFailure restores its pre-write snapshot on specification failure.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Target object name."},"part":{"type":"string","description":"Part (Source, Rules, ...)."},"content":{"type":"string","description":"New content. For mode=patch may be {find,replace} object."},"patch":{"description":"Same shape as genexus_edit.patch. Auto-sets mode=patch."},"mode":{"type":"string","enum":["full","patch"],"default":"patch"},"type":{"type":"string","description":"Disambiguates ambiguous names."},"dryRun":{"type":"boolean","default":false},"validate":{"type":"boolean","default":false},"validationMode":{"type":"string","enum":["specify"],"default":"specify"},"rollbackOnFailure":{"type":"boolean","default":true},"buildIncludeCallees":{"type":"string","enum":["none","direct","transitive"],"default":"direct"},"buildPlanCap":{"type":"integer","default":200},"waitForIndex":{"type":"boolean","default":true},"waitTimeoutMs":{"type":"integer","default":30000},"visualVerify":{"type":"boolean","default":false,"description":"Post-edit headless screenshot + pixel-diff vs baseline. See tool-help."}},"required":["name","part"],"examples":[{"name":"Customer","part":"Source","patch":{"find":"oldValue","replace":"newValue"},"validate":true},{"name":"Customer","part":"Rules","mode":"patch","patch":{"find":"error(","replace":"msg("},"dryRun":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
30
+ {"name":"genexus_security","description":"Audit KB security. action=audit_gam scans GAM/env props; action=scan_secrets greps Source for credential-shaped literals. Returns findings with severity.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["audit_gam","scan_secrets","scan_native"]},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"audit_gam"},{"action":"scan_secrets"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
31
+ {"name":"genexus_doctor","description":"Health check: GX install, KB state, worker, cache age, recent telemetry. Paste output for triage when something feels off. When more than one KB is open, pass kb=<alias> to pick which one to diagnose.","inputSchema":{"type":"object","properties":{"kb":{"type":"string","description":"Alias of the KB to diagnose. Optional; required only when multiple KBs are open (otherwise the single open / default KB is used)."}},"additionalProperties":false,"examples":[{},{"kb":"mykb"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
32
+ {"name":"genexus_edit_form","description":"Semantic WebForm edits. Actions: add_textblock, add_button, set_visibility, remove_control, wrap_in_fieldset.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["add_textblock","add_button","set_visibility","remove_control","wrap_in_fieldset"]},"name":{"type":"string"},"parent":{"type":"string"},"position":{"type":"string","description":"first|last|after:<id>"},"caption":{"type":"string"},"format":{"type":"string","enum":["Text","HTML"]},"event":{"type":"string"},"controlId":{"type":"string"},"controlIds":{"type":"array","items":{"type":"string"}},"legend":{"type":"string"},"visible":{"type":"boolean"},"dryRun":{"type":"boolean"},"kb":{"type":"string","description":"KB alias."}},"required":["action","name"],"examples":[{"action":"add_button","name":"WPMain","caption":"Confirmar","event":"OnConfirm"},{"action":"set_visibility","name":"WPMain","controlId":"GrpDetail","visible":false}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
33
+ {"name":"genexus_compare","description":"Diff two KB objects — IDE 'Compare Objects' parity over the SDK's IComparerService. mode=content (default) diffs full object content; mode=properties diffs top-level properties only. Read-only.","inputSchema":{"type":"object","required":["objectA","objectB"],"properties":{"objectA":{"type":"string"},"objectB":{"type":"string"},"type":{"type":"string","description":"Object type filter applied to both lookups, e.g. 'Transaction'."},"mode":{"type":"string","enum":["content","properties"],"description":"content (default) or properties."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"objectA":"Customer","objectB":"CustomerV2"},{"objectA":"Customer","objectB":"CustomerV2","mode":"properties"}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},
34
+ {"name":"genexus_module","description":"GeneXus Module Manager over the SDK's IModuleManagerService. action=list (read-only: installed Module KB objects) | install (opcFile=<path to .opc file>, or name[+version] to install a named module) | install_builtin (name=<built-in module>) | update (name+version).","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["install","install_builtin","update","list"]},"opcFile":{"type":"string","description":"install: absolute path to a .opc module package file."},"name":{"type":"string","description":"install (by name)/install_builtin/update: module name."},"version":{"type":"string","description":"install (by name)/update: target module version."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"list"},{"action":"install_builtin","name":"GeneXusGAM"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
35
+ {"name":"genexus_merge","description":"Merge two (or three, with an ancestor) KB objects via the SDK's IMergeService. mode=objects only (mode=models is unsupported — needs multiple KBModel instances not available in this worker). Omit objectBase for a 2-way merge (ignoreConflicts applies); pass objectBase for a 3-way merge. dryRun (default true) reports what would merge via IComparerService WITHOUT writing; dryRun=false performs the merge and saves it. WRITE + destructive.","inputSchema":{"type":"object","required":["objectLeft","objectRight"],"properties":{"mode":{"type":"string","enum":["objects"],"description":"Only 'objects' is supported."},"objectLeft":{"type":"string"},"objectRight":{"type":"string"},"objectBase":{"type":"string","description":"Optional common ancestor. Omit for a 2-way merge; pass for a 3-way merge."},"type":{"type":"string","description":"Object type filter applied to all lookups, e.g. 'Transaction'."},"ignoreConflicts":{"type":"boolean","description":"2-way merge only: let the SDK auto-resolve conflicting parts instead of failing. Default false."},"dryRun":{"type":"boolean","default":true,"description":"true (default): report-only, no SDK MergeObjects call, nothing written. false: perform the merge and save it."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"objectLeft":"Customer","objectRight":"CustomerV2"},{"objectBase":"CustomerBase","objectLeft":"Customer","objectRight":"CustomerV2","dryRun":false}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
36
+ {"name":"genexus_gxserver","description":"GxServer (Team Development) sync. Read: status|pending|ignored|conflicts|history. pending lists locally-changed objects, each flagged ignoredForCommit (true = in the IDE 'Ignored Objects' tab, skipped by a full commit). ignored lists ONLY the excluded objects: commitIgnored (IDE Commit > Ignored Objects) + updateIgnored (IDE Update > Ignored Objects). Write (destructive; requires a GXserver-linked KB): commit (message; optional targets[] = commit ONLY those pending objects; reports committedObjects + remoteVersion) | update (applies changes into local KB; apply=false = download only; leaves conflicts flagged) | lock (target) | resolve (targets[] + strategy). theirs/automerge/update talk to the server and need creds via GXMCP_TEAMDEV_USER/PASSWORD env (url auto-resolves). Returns {connected:false} when KB is not linked.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["status","pending","ignored","conflicts","history","commit","update","lock","resolve","pipeline_list","pipeline_runs","pipeline_output","pipeline_run","pipeline_abort"]},"project":{"type":"string","description":"pipeline_*: CI pipeline/project name (from pipeline_list)."},"buildId":{"type":"integer","description":"pipeline_output: build id to fetch output for."},"rebuild":{"type":"boolean","description":"pipeline_run: full rebuild instead of incremental."},"runTests":{"type":"boolean","description":"pipeline_run: run tests as part of the pipeline."},"confirm":{"type":"boolean","description":"pipeline_run/pipeline_abort: required (these trigger/cancel a build)."},"limit":{"type":"integer","description":"history only; default 10, max 200."},"message":{"type":"string","description":"commit: commit comment."},"force":{"type":"boolean","description":"commit: force commit despite pending server-side changes."},"apply":{"type":"boolean","description":"update: apply changes into local KB (default true); false = download package only."},"async":{"type":"boolean","description":"update/commit: run as a background job — returns an operationId immediately; poll genexus_lifecycle(action=status|result, target=op:<id>). Use for a large update that would exceed the sync window."},"strategy":{"type":"string","enum":["mine","theirs","automerge"],"description":"resolve: which version wins — mine (keep local, default, creds-free), theirs (take server), automerge (3-way merge). theirs/automerge need server creds."},"target":{"type":"string","description":"lock: object name to lock."},"targets":{"type":"array","items":{"type":"string"},"description":"commit: partial commit — object names to commit (all other pending objects are excluded). resolve: conflicted object names to resolve. Names must appear in action=pending/conflicts."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"status"},{"action":"commit","message":"Fix Customer validation"},{"action":"commit","message":"Ship my proc only","targets":["ApiCtlObjTransicionar"]},{"action":"update"},{"action":"resolve","targets":["Customer"],"strategy":"automerge"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
37
+ {"name":"genexus_kb_version","description":"KB model-version management (Create Version/Branch/Activate/Revert) over the SDK's KBVersionHelper — the IDE Version menu's code path. action=list is read-only; freeze/branch/set_active/revert mutate the KB's version tree.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["list","freeze","branch","set_active","revert"]},"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":"revert: source version. Defaults to the active version."},"backupModel":{"type":"boolean","description":"freeze: back up the KB model. Default false."},"includeEnvironments":{"type":"boolean","description":"branch: include environments. Default false."},"autoUpdate":{"type":"boolean","description":"set_active: auto-update the working model. Default false."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"list"},{"action":"freeze","name":"v1.0","description":"Release 1.0"},{"action":"set_active","targetVersion":"Trunk"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
38
+ {"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"]},"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}},
39
+ {"name":"genexus_db","description":"Database umbrella. action: drift_check|drift_report (Transaction↔DB schema drift) | optimize_analyze|optimize_suggest|optimize_report (static index advisor) | sql_ddl|sql_navigation (SQL for Transaction/Procedure) | sample_data (fake INSERTs) | types_list|types_describe|types_validate (Domains/SDT constraints) | reorg_impact (timestamp/deep ImpactDatabase) | reorg_preview (non-mutating logical↔physical impact diff plus exact SQL only when a current artifact is available) | 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","types_list","types_describe","types_validate","translations_import","reorg_impact","reorg_preview"]},"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."},"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":"reorg_preview","name":"Customer","deep":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
40
+ {"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).","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"]},"name":{"type":"string"},"part":{"type":"string"},"versionId":{"type":"integer"},"snapshot":{"type":"string"},"discard":{"type":"boolean"},"dryRun":{"type":"boolean"},"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}},
41
+ {"name":"genexus_io","description":"IO umbrella for assets, part text exchange, screenshots, OCR. action: asset_find|asset_read|asset_write (binary asset CRUD) | export_part|import_part (object part to/from a text file) | export_unified (full object envelope JSON) | screenshot_publish (copy PNG to .gx/published-screenshots) | ocr (Tesseract stub).","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["asset_find","asset_read","asset_write","export_part","import_part","export_unified","screenshot_publish","ocr"]},"path":{"type":"string","description":"asset/screenshot_publish/ocr: file path."},"name":{"type":"string","description":"export/import/export_unified: object name."},"outputPath":{"type":"string","description":"export_part: destination file path."},"inputPath":{"type":"string","description":"import_part: source file path."},"part":{"type":"string","description":"export/import_part: part name (e.g. Source)."},"type":{"type":"string","description":"export/import/export_unified disambiguator."},"overwrite":{"type":"boolean","description":"export_part: overwrite if exists."},"pattern":{"type":"string","description":"asset_find: glob pattern."},"relativeRoot":{"type":"string","description":"asset_find: root for relative paths."},"limit":{"type":"integer","description":"asset_find: max results."},"includeContent":{"type":"boolean","description":"asset_find: inline file content."},"maxBytes":{"type":"integer","description":"asset_read: max bytes to return."},"contentBase64":{"type":"string","description":"asset_write: base64-encoded file content."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"asset_read","path":"C:\\KBs\\MyKb\\custom.xml"},{"action":"export_part","name":"Customer","part":"Source","outputPath":"C:\\tmp\\Customer.gxp"}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
42
+ {"name":"genexus_variable","description":"Variables CRUD. add accepts varName or variables[] batch; modify changes type atomically. basedOn binds a Domain by native SDK identity. length/decimals override size; collection=true declares a collection; untyped add inherits a same-named attribute. VarChar stays VARCHAR. dryRun previews; validationMode=specify can run inline validation; async returns an operationId.","inputSchema":{"type":"object","required":["action","name"],"properties":{"action":{"type":"string","enum":["add","delete","modify"]},"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?, length?, decimals?, collection?}. 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"},"basedOn":{"type":"string","description":"Domain name; native SDK reference."}}}},"typeName":{"type":"string","description":"Primitive (Character/Numeric/VarChar/Date/...), SDT/BC/Domain name, or WebSession. VarChar keeps VARCHAR semantics."},"length":{"type":"integer","description":"add/modify optional: overrides the length parsed from typeName (fixes the Character(20) default)."},"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."},"basedOn":{"type":"string","description":"modify optional: Domain."},"dryRun":{"type":"boolean","default":false,"description":"When true, returns what would change without persisting."},"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":"Issue #60: with validationMode=specify, restore the pre-write state when the specify pass reports errors. Variable writes have no pre-write snapshot, so rollback reports rolledBack=false (the variables stay) when spec fails."},"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)."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"add","name":"MyPanel","varName":"&Choice","typeName":"Numeric"},{"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}},
43
+ {"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"]},"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}},
44
+ {"name":"genexus_create","description":"Creation umbrella. action: object (Transaction/Procedure/WebPanel/SDT/API/Domain/Dashboard/Folder/Module; type='API' scaffolds a REST API object — routes use ONE HTTP-verb block per object 'Verb { route => Object; }' (mixing Get+Post blocks is unsupported); type='Folder'/'Module' create containers, and folder=<name>/module=<name> place the new object there (created in Root, then moved+verified); SDT takes optional firstItem/firstItemType; Domain takes dataType+length or enumValues; NOT WWP — use genexus_apply_pattern) | popup (popup WebPanel with Form type='layout' body) | sd_panel_create|sd_panel_inspect|sd_panel_edit | save_as (clone parts) | scaffold|translate|sample (forge) | template (kpi_header|empty_state|confirm_dialog) | object_atomic (issue #62: all-or-nothing create/update of an object with variables[], rules[], parms[], properties{} and source in ONE validated call — pre-validates every field before the first save, composes the SDK write primitives, compensates on failure, dryRun previews, validate=true runs the inline Specify pass, update mode guards concurrent writes via expectedVersion). | curl_procedure imports a REST-consumer Procedure from a curl command through the GeneXus SDK.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["object","object_atomic","popup","sd_panel_create","sd_panel_inspect","sd_panel_edit","save_as","scaffold","translate","sample","template","curl_procedure"]},"curl":{"type":"string","description":"curl_procedure: the curl command to import as a Procedure."},"type":{"type":"string"},"name":{"type":"string"},"newName":{"type":"string","description":"save_as."},"description":{"type":"string"},"dataType":{"type":"string","description":"object Domain."},"length":{"type":"integer","description":"object Domain."},"decimals":{"type":"integer","description":"object Domain."},"signed":{"type":"boolean","description":"object Domain."},"basedOn":{"type":"string","description":"object Domain."},"enumValues":{"type":"array","items":{"type":"object"},"description":"object Domain enum."},"firstItem":{"type":"string","description":"object SDT optional: name of the first structure item to seed (SDK requires ≥1). Defaults to Item1. Use to avoid the throwaway Item1."},"firstItemType":{"type":"string","description":"object SDT optional: type of the seeded first item (Character/Numeric/VarChar/…). Defaults to VarChar."},"folder":{"type":"string","description":"object: Folder destination (created in Root, then moved+verified)."},"module":{"type":"string","description":"object: Module destination (created in Root, then moved+verified)."},"parentPath":{"type":"string","description":"object: folder/module destination (fallback when folder/module absent)."},"mode":{"type":"string","enum":["create","update","auto"],"description":"object_atomic: create (fail if exists), update (fail if missing), auto (default — create or update by existence)."},"variables":{"type":"array","items":{"type":"object","required":["varName"],"properties":{"varName":{"type":"string"},"typeName":{"type":"string"},"length":{"type":"integer"},"decimals":{"type":"integer"},"collection":{"type":"boolean"},"name":{"type":"string"},"basedOn":{"type":"string"}}},"description":"object_atomic: one object per variable — {varName, typeName?, length?, decimals?, collection?}. Validated before any save; errors are attributed to variables[N]."},"rules":{"type":"array","items":{"type":"string"},"description":"object_atomic: rule lines (e.g. \"Parm(in:&Id);\")."},"parms":{"type":"array","items":{"type":"string"},"description":"object_atomic: parameter entries rendered into a Parm rule — bare names (\"&Id\") or prefixed (\"out:&Msg\")."},"source":{"type":"string","description":"object_atomic: Source part text."},"properties":{"type":"object","description":"object_atomic: object-level properties applied via the genexus_properties path (propertyName → value)."},"expectedVersion":{"type":"string","description":"object_atomic update: optimistic concurrency token returned as `version` by a prior atomic create/update/read; a mismatch fails with ConcurrentModification instead of overwriting concurrent changes."},"validate":{"type":"boolean","description":"object_atomic: run the inline Specify pass (Spec+Gen) before confirming success. On failure with rollbackOnFailure=true, a freshly-created object is deleted so the operation stays all-or-nothing."},"validationMode":{"type":"string","enum":["specify"],"description":"Issue #60: with action=object, run the inline Specify pass (Spec+Gen, no Compile) after creation, returning structured spc*/gen* diagnostics in the same call. Combines with rollbackOnFailure."},"rollbackOnFailure":{"type":"boolean","description":"Issue #60: with action=object and validationMode=specify, roll back the created object when the specify pass reports errors. A fresh object has no pre-write snapshot, so rollback reports rolledBack=false — delete it via genexus_delete_object if spec fails."},"spec":{"type":"object","description":"popup."},"part":{"type":"string","description":"sd_panel_edit/template."},"content":{"type":"string","description":"sd_panel_edit/scaffold/translate."},"includePatternInstance":{"type":"boolean","description":"save_as."},"overwrite":{"type":"boolean","description":"save_as."},"dryRun":{"type":"boolean","description":"popup/save_as/template/object."},"template":{"type":"string","enum":["kpi_header","empty_state","confirm_dialog"],"description":"template."},"args":{"type":"object","description":"template."},"kb":{"type":"string","description":"KB alias."},"baseVersion":{"type":"string"},"updateExisting":{"type":"boolean","default":false}},"examples":[{"action":"object","name":"NewPanel","type":"WebPanel"},{"action":"object","name":"CustomerApi","type":"API"},{"action":"popup","name":"MyPopup","spec":{"host":"Customer"}}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
45
+ {"name":"genexus_memory","description":"Per-KB fact store. action: save (fact required; optional target/type/tags; dedups on identical fact+object, bumping a hit count) | recall (filter by target/type/tags — ANY match; no filter returns all) | list (all, newest first) | forget (tombstone by id) | promote (lift a friction-log message into a memory, tagged 'friction') | consolidate (dreaming — merge redundant/overlapping facts within scope; dryRun=true previews, dryRun=false compacts memory.jsonl). Persisted to .gx/memory/memory.jsonl.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["save","recall","list","forget","promote","consolidate"]},"fact":{"type":"string","description":"save: the fact to remember."},"target":{"type":"string","description":"object name this memory is about."},"type":{"type":"string","description":"object type this memory is about."},"tags":{"type":"array","items":{"type":"string"},"description":"labels for filtering."},"id":{"type":"string","description":"forget: memory id to tombstone."},"message":{"type":"string","description":"promote: friction text to promote into a memory."},"dryRun":{"type":"boolean","description":"consolidate: true previews proposed merges without writing; false (default) applies and compacts memory.jsonl."},"kb":{"type":"string","description":"KB alias."}},"additionalProperties":false,"examples":[{"action":"save","fact":"Customer.Email must be unique","target":"Customer","type":"Transaction","tags":["validation"]},{"action":"recall","target":"Customer"},{"action":"consolidate","dryRun":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},
46
+ {"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) | inspect (explore an .xpz, read-only) | import (apply into KB; dryRun defaults true=preview via ExploreExport; dryRun=false requires confirm=true).","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["export","inspect","import"]},"targets":{"type":"array","items":{"type":"string"},"description":"export: object names to export."},"outputFile":{"type":"string","description":"export: absolute .xpz output path."},"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; false applies (needs confirm)."},"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":"inspect","file":"C:\\tmp\\cust.xpz"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},
47
+ {"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"]},"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}},
48
+ {"name":"genexus_wwp","description":"WorkWithPlus Action Group / grid-action editing (issue #58). action=list (read-only) lists the PatternInstance's action containers and their <userAction>/<standardAction> children; add_action adds a custom userAction to an existing or new group (procedure existence verified, selection single|multiple, enabledWhen condition, icon, description, confirm, position); update_action changes those attributes; move_action relocates an action between groups or reorders it; remove_action deletes an action (confirm=true). dryRun=true returns the XML diff without persisting. Edits target the WorkWithPlus host's PatternInstance XML (survives pattern reapply). NEVER creates Security/GAM permissions. Attributes are passed verbatim to the WWP XML; the SDK's own save normalization is reported honestly via the pattern write verification.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["list","add_action","update_action","move_action","remove_action"]},"name":{"type":"string","description":"Transaction, WebPanel, or WorkWithPlus<Object> host."},"group":{"type":"string","description":"Action group/container name (TableActions row). add_action: creates a new group when absent; update/remove: scope filter."},"actionName":{"type":"string","description":"Action name (e.g. 'Reativar')."},"caption":{"type":"string","description":"add/update: button caption (defaults to actionName)."},"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":"add/update: availability condition text (e.g. 'MonitorIntegracaoStatus = DSituacaoProcessamento.Suspenso'). Stored verbatim; expression semantics are not validated."},"icon":{"type":"string","description":"add/update: button icon."},"description":{"type":"string","description":"add/update: tooltip/description."},"confirm":{"type":"boolean","description":"add/update: confirmation prompt; remove_action: required to delete (unless dryRun)."},"buttonClass":{"type":"string","description":"add/update: theme button class (e.g. 'btn ButtonCinza')."},"position":{"type":"integer","description":"add/move/update: zero-based index among the group's actions."},"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 the XML diff without persisting (default false)."},"kb":{"type":"string","description":"KB alias."}},"examples":[{"action":"list","name":"MonitorIntegracaoWW"},{"action":"add_action","name":"MonitorIntegracaoWW","group":"Processamento","actionName":"Reativar","procedure":"MonitorIntegracaoReativar","selection":"multiple","enabledWhen":"MonitorIntegracaoStatus = DSituacaoProcessamento.Suspenso","dryRun":true},{"action":"remove_action","name":"MonitorIntegracaoWW","actionName":"Reativar","confirm":true}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}}
49
+ ]
50
+
Binary file