genexus-mcp 2.6.6 → 2.6.8
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/cli/commands/axi.js +1 -1
- package/cli/lib/config.js +24 -1
- package/cli/run.test.js +28 -0
- package/package.json +1 -1
- package/publish/GxMcp.Gateway.deps.json +2 -2
- package/publish/GxMcp.Gateway.dll +0 -0
- package/publish/GxMcp.Gateway.exe +0 -0
- package/publish/GxMcp.Gateway.pdb +0 -0
- package/publish/tool_definitions.json +42 -42
- package/publish/worker/GxMcp.Worker.exe +0 -0
- package/publish/worker/GxMcp.Worker.pdb +0 -0
package/cli/commands/axi.js
CHANGED
|
@@ -690,7 +690,7 @@ async function handleDoctor(options, ctx) {
|
|
|
690
690
|
// guarantees a worker crash on first MCP call. Promote from warn to fail so init
|
|
691
691
|
// exits non-zero and the caller (install.ps1, AI client) actually sees the problem.
|
|
692
692
|
{ id: 'gx_installation', status: gxExeExists ? 'pass' : (gxPath ? 'fail' : 'warn'), detail: gxExeExists ? 'GeneXus installation has genexus.exe.' : (gxPath ? `Configured GeneXus installation is missing genexus.exe at: ${gxPath}` : 'No GeneXus installation path is configured.') },
|
|
693
|
-
{ id: 'tool_definitions', status: toolDefsExists ? 'pass' : 'warn', detail: toolDefsExists ? `Tool definition file found (${toolCount} tools).` :
|
|
693
|
+
{ id: 'tool_definitions', status: toolDefsExists ? 'pass' : 'warn', detail: toolDefsExists ? `Tool definition file found (${toolCount} tools) at ${toolDefPath}.` : (process.env.GENEXUS_MCP_TOOL_DEFINITIONS ? `tool_definitions.json missing at GENEXUS_MCP_TOOL_DEFINITIONS=${toolDefPath}. Unset the env var or point it at a valid file.` : `tool_definitions.json missing. Expected at ${toolDefPath} (next to the gateway exe). The csproj should copy it on publish — reinstall via scripts/install.ps1, or set GENEXUS_MCP_TOOL_DEFINITIONS to override.`) },
|
|
694
694
|
{ id: 'gx_env', status: process.env.GX_CONFIG_PATH ? 'pass' : 'warn', detail: process.env.GX_CONFIG_PATH ? 'GX_CONFIG_PATH env var is set.' : 'GX_CONFIG_PATH env var is not set for this process.' },
|
|
695
695
|
{ id: 'client_config_sync', status: clientCrossCheck.status, detail: clientCrossCheck.detail }
|
|
696
696
|
];
|
package/cli/lib/config.js
CHANGED
|
@@ -18,7 +18,30 @@ function getGatewayExePath() {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
function getToolDefinitionsPath() {
|
|
21
|
-
|
|
21
|
+
// The gateway loads tool_definitions.json from its own exe directory at
|
|
22
|
+
// runtime (see GxMcp.Gateway/McpRouter.cs). The packaged distribution
|
|
23
|
+
// places the file alongside publish/GxMcp.Gateway.exe via the csproj's
|
|
24
|
+
// <Content CopyToPublishDirectory="Always" /> rule. Prior versions hardcoded
|
|
25
|
+
// the dev-tree path, so `genexus-mcp doctor` reported "tool_definitions.json
|
|
26
|
+
// is missing" on every installed copy even though the file was present next
|
|
27
|
+
// to the exe.
|
|
28
|
+
if (process.env.GENEXUS_MCP_TOOL_DEFINITIONS) {
|
|
29
|
+
return process.env.GENEXUS_MCP_TOOL_DEFINITIONS;
|
|
30
|
+
}
|
|
31
|
+
const candidates = [
|
|
32
|
+
// 1. Sibling of the gateway exe (packaged install — the path the gateway itself uses).
|
|
33
|
+
path.join(path.dirname(getGatewayExePath()), 'tool_definitions.json'),
|
|
34
|
+
// 2. Dev-tree source (when running from a git checkout).
|
|
35
|
+
path.join(__dirname, '..', '..', 'src', 'GxMcp.Gateway', 'tool_definitions.json'),
|
|
36
|
+
// 3. Fallback alongside the CLI itself (defensive — for unusual layouts).
|
|
37
|
+
path.join(__dirname, '..', '..', 'publish', 'tool_definitions.json')
|
|
38
|
+
];
|
|
39
|
+
for (const candidate of candidates) {
|
|
40
|
+
if (fs.existsSync(candidate)) return candidate;
|
|
41
|
+
}
|
|
42
|
+
// Nothing found — return the canonical packaged path so the doctor's
|
|
43
|
+
// existence check reports the location that SHOULD have the file.
|
|
44
|
+
return candidates[0];
|
|
22
45
|
}
|
|
23
46
|
|
|
24
47
|
function discoverGeneXusFromRegistry() {
|
package/cli/run.test.js
CHANGED
|
@@ -523,6 +523,34 @@ test('--fields validation returns usage error for invalid doctor field', () => {
|
|
|
523
523
|
assert.equal(parsed.error.code, 'usage_error');
|
|
524
524
|
});
|
|
525
525
|
|
|
526
|
+
test('doctor finds tool_definitions.json next to the gateway exe (not just dev-tree)', () => {
|
|
527
|
+
// Regression for v2.6.6 bug: getToolDefinitionsPath() hard-coded the dev-tree
|
|
528
|
+
// location, so every installed copy reported "tool_definitions.json is missing"
|
|
529
|
+
// even though the file was published alongside GxMcp.Gateway.exe.
|
|
530
|
+
const result = runCli(['doctor', '--format', 'json']);
|
|
531
|
+
assert.equal(result.status, 0);
|
|
532
|
+
|
|
533
|
+
const parsed = JSON.parse(result.stdout);
|
|
534
|
+
const check = parsed.ok.checks.find((c) => c.id === 'tool_definitions');
|
|
535
|
+
assert.ok(check, 'tool_definitions check must be present');
|
|
536
|
+
assert.equal(check.status, 'pass', `expected pass, got '${check.status}': ${check.detail}`);
|
|
537
|
+
assert.match(check.detail, /Tool definition file found \(\d+ tools\) at .+/);
|
|
538
|
+
});
|
|
539
|
+
|
|
540
|
+
test('doctor honours GENEXUS_MCP_TOOL_DEFINITIONS override and reports it on miss', () => {
|
|
541
|
+
const bogusPath = path.join(os.tmpdir(), 'nonexistent-tool-defs-' + Date.now() + '.json');
|
|
542
|
+
const result = runCli(['doctor', '--format', 'json'], { env: { GENEXUS_MCP_TOOL_DEFINITIONS: bogusPath } });
|
|
543
|
+
assert.equal(result.status, 0);
|
|
544
|
+
|
|
545
|
+
const parsed = JSON.parse(result.stdout);
|
|
546
|
+
const check = parsed.ok.checks.find((c) => c.id === 'tool_definitions');
|
|
547
|
+
assert.ok(check);
|
|
548
|
+
assert.equal(check.status, 'warn');
|
|
549
|
+
assert.match(check.detail, /GENEXUS_MCP_TOOL_DEFINITIONS=/);
|
|
550
|
+
assert.ok(check.detail.includes(bogusPath) || check.detail.includes(bogusPath.replace(/\\/g, '/')),
|
|
551
|
+
`detail should mention the bogus override path; got: ${check.detail}`);
|
|
552
|
+
});
|
|
553
|
+
|
|
526
554
|
test('doctor --mcp-smoke adds explicit mcp_smoke check', () => {
|
|
527
555
|
const result = runCli(['doctor', '--mcp-smoke', '--format', 'json']);
|
|
528
556
|
assert.equal(result.status, 0);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "genexus-mcp",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.8",
|
|
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.6.
|
|
10
|
+
"GxMcp.Gateway/2.6.8": {
|
|
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.6.
|
|
69
|
+
"GxMcp.Gateway/2.6.8": {
|
|
70
70
|
"type": "project",
|
|
71
71
|
"serviceable": false,
|
|
72
72
|
"sha512": ""
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,44 +1,44 @@
|
|
|
1
1
|
[
|
|
2
|
-
{"name":"genexus_whoami","description":"
|
|
3
|
-
{"name":"genexus_recipe","description":"
|
|
4
|
-
{"name":"genexus_query","description":"Search objects in the active KB. Supports prefixes (type:, usedby:, parent:, parentPath:, description:). Compact projection by default. See genexus://kb/tool-help/genexus_query for examples.","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
|
|
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:
|
|
6
|
-
{"name":"genexus_read","description":"Read source/metadata parts of one or more objects. Pass name or targets, plus parts=[...]. Paginate large source with offset/limit. See genexus://kb/tool-help/genexus_read for examples.","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":"
|
|
7
|
-
{"name":"genexus_edit","description":"Edit
|
|
8
|
-
{"name":"genexus_inspect","description":"
|
|
9
|
-
{"name":"genexus_analyze","description":"
|
|
10
|
-
{"name":"genexus_inject_context","description":"Inject SDT structures and Procedure signatures of called objects.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"recursive":{"type":"boolean"},"kb":{"type":"string","description":"
|
|
11
|
-
{"name":"genexus_lifecycle","description":"Build, validate, index, or poll the KB. Long ops are async with operationId. See genexus://kb/tool-help/genexus_lifecycle for actions and target formats.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["build","cancel","rebuild","reorg","validate","validate-kb","sync","index","status","result","snapshots-list","snapshots-restore"]},"target":{"type":"string","description":"Object name(s), taskId, job_id, or op:<
|
|
12
|
-
{"name":"genexus_forge","description":"Generate new code or structures from templates or translations.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["scaffold","translate","sample"]},"type":{"type":"string"},"name":{"type":"string"},"content":{"type":"string"},"kb":{"type":"string","description":"
|
|
13
|
-
{"name":"genexus_test","description":"Execute native GeneXus tests (GXtest).","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"kb":{"type":"string","description":"
|
|
14
|
-
{"name":"genexus_create_object","description":"Create any IDE-creatable
|
|
15
|
-
{"name":"genexus_logs","description":"Read worker_debug.log tail for error diagnosis or correlation.","inputSchema":{"type":"object","properties":{"lines":{"type":"integer"},"filterCorrelation":{"type":"string"},"grep":{"type":"string"}}}},
|
|
16
|
-
{"name":"genexus_sdk_probe","description":"
|
|
17
|
-
{"name":"genexus_worker_reload","description":"Reload worker.
|
|
18
|
-
{"name":"genexus_delete_object","description":"Delete an object from the KB. Irreversible — confirm=true required.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"confirm":{"type":"boolean"},"kb":{"type":"string","description":"
|
|
19
|
-
{"name":"genexus_export_object","description":"Export a GeneXus object part to a text file on disk.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"outputPath":{"type":"string"},"part":{"type":"string"},"type":{"type":"string"},"overwrite":{"type":"boolean"},"kb":{"type":"string","description":"
|
|
20
|
-
{"name":"genexus_import_object","description":"Import a text file from disk into a GeneXus object part.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"inputPath":{"type":"string"},"part":{"type":"string"},"type":{"type":"string"},"kb":{"type":"string","description":"
|
|
21
|
-
{"name":"genexus_refactor","description":"Run GeneXus refactor: rename, extract procedure, or WWP condition set.","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"},"kb":{"type":"string","description":"
|
|
22
|
-
{"name":"genexus_add_variable","description":"Add a variable to the Variables part of a GeneXus object.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"varName":{"type":"string"},"typeName":{"type":"string"},"kb":{"type":"string","description":"
|
|
23
|
-
{"name":"genexus_delete_variable","description":"Remove a variable. Idempotent. Refuses GAM/WWP+ framework-managed vars.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"varName":{"type":"string"},"kb":{"type":"string","description":"
|
|
24
|
-
{"name":"genexus_modify_variable","description":"Change
|
|
25
|
-
{"name":"genexus_validate_payload","description":"Pre-flight: parse + SDK schema scan + would-be diff vs current state. No save.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"part":{"type":"string"},"content":{"type":"string"},"kb":{"type":"string","description":"
|
|
26
|
-
{"name":"genexus_bulk_edit","description":"Apply N independent edits. Item: {name,part?,content,type?,dryRun?}. stopOnError halts at first fail.","inputSchema":{"type":"object","properties":{"targets":{"type":"array","items":{"type":"object"}},"stopOnError":{"type":"boolean"},"dryRun":{"type":"boolean"},"kb":{"type":"string","description":"
|
|
27
|
-
{"name":"genexus_apply_template","description":"Apply
|
|
28
|
-
{"name":"genexus_diff","description":"Unified text diff. mode=textVsText|currentVsText.","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["textVsText","currentVsText"]},"name":{"type":"string"},"part":{"type":"string"},"left":{"type":"string"},"right":{"type":"string"},"context":{"type":"integer"},"kb":{"type":"string","description":"
|
|
29
|
-
{"name":"genexus_export_unified","description":"Export an object's full state (all parts) as a single JSON envelope.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"kb":{"type":"string","description":"
|
|
30
|
-
{"name":"genexus_format","description":"Format a GeneXus code snippet using worker rules.","inputSchema":{"type":"object","properties":{"code":{"type":"string"},"kb":{"type":"string","description":"
|
|
31
|
-
{"name":"genexus_properties","description":"Read or update GeneXus object properties. Note: Description is the title-bar text shown when a WebPanel/Popup is opened via .Popup().","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["get","set"]},"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"},"kb":{"type":"string","description":"
|
|
32
|
-
{"name":"genexus_asset","description":"Find, read, or write binary assets inside the active KB.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["find","read","write"]},"path":{"type":"string"},"includeContent":{"type":"boolean"},"maxBytes":{"type":"integer"},"pattern":{"type":"string"},"relativeRoot":{"type":"string"},"limit":{"type":"integer"},"contentBase64":{"type":"string"},"kb":{"type":"string","description":"
|
|
33
|
-
{"name":"genexus_history","description":"List
|
|
34
|
-
{"name":"genexus_structure","description":"Read or update visual and logical structure of GeneXus objects.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["get_visual","update_visual","get_indexes","get_logic"]},"name":{"type":"string"},"payload":{"type":"object","description":"Update payload for update_visual."},"kb":{"type":"string","description":"
|
|
35
|
-
{"name":"genexus_layout","description":"
|
|
36
|
-
{"name":"genexus_doc","description":"
|
|
37
|
-
{"name":"genexus_search_source","description":"Regex/semantic search across Procedure/DataProvider/WebPanel/Transaction source.","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"},"scope":{"type":"array","items":{"type":"string"}},"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":"
|
|
38
|
-
{"name":"genexus_kb","description":"Manage open KBs: list
|
|
39
|
-
{"name":"genexus_sql","description":"SQL for a Transaction/Table (DDL) or a procedure For Each navigation.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["ddl","navigation"]},"name":{"type":"string"},"includeSubordinated":{"type":"boolean","description":"action=ddl only."},"levelNumber":{"type":"integer","description":"action=navigation only."},"type":{"type":"string"},"kb":{"type":"string","description":"
|
|
40
|
-
{"name":"genexus_preview","description":"Render
|
|
41
|
-
{"name":"genexus_apply_pattern","description":"Apply a
|
|
42
|
-
{"name":"genexus_edit_and_build","description":"Edit
|
|
43
|
-
{"name":"genexus_create_popup","description":"
|
|
2
|
+
{"name":"genexus_whoami","description":"KB context + version + playbooks. Call FIRST every session — playbooks block routes you to the right tool.","inputSchema":{"type":"object","properties":{}}},
|
|
3
|
+
{"name":"genexus_recipe","description":"Step-by-step playbook for a named flow ('wwp_on_transaction', 'create_popup', etc.). name='list' to enumerate.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Recipe key, or 'list'."}},"required":["name"]}},
|
|
4
|
+
{"name":"genexus_query","description":"Search objects in the active KB. Supports prefixes (type:, usedby:, parent:, parentPath:, description:). Compact projection by default. See genexus://kb/tool-help/genexus_query for examples.","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 (multi-KB only)."},"axiCompact":{"type":"boolean","description":"Compact projection (default true).","default":true}},"required":["query"]}},
|
|
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 (multi-KB only)."},"axiCompact":{"type":"boolean","description":"Compact projection (default true).","default":true}}}},
|
|
6
|
+
{"name":"genexus_read","description":"Read source/metadata parts of one or more objects. Pass name or targets, plus parts=[...]. Paginate large source with offset/limit. See genexus://kb/tool-help/genexus_read for examples.","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 (multi-KB only)."}}}},
|
|
7
|
+
{"name":"genexus_edit","description":"Edit object part. name or targets (exclusive). mode: full|patch|ops. dryRun first. For WWP edit host's PatternInstance NOT the parent WebForm (gets overwritten on reapply).","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"part":{"type":"string"},"mode":{"type":"string","enum":["full","patch","ops"]},"content":{"type":"string"},"ops":{"type":"array","description":"RFC 6902 JSON-Patch ops. Supported: add, remove, replace, test.","items":{"type":"object","properties":{"op":{"type":"string","enum":["add","remove","replace","test"]},"path":{"type":"string"},"value":{}},"required":["op","path"]}},"patch":{"description":"String or {find,replace} object. Prefer operation+context+content.","anyOf":[{"type":"string"},{"type":"object","properties":{"find":{"type":"string"},"replace":{"type":"string"}},"required":["find","replace"]}]},"context":{"type":"string"},"operation":{"type":"string","enum":["Replace","Insert_After","Append"]},"expectedCount":{"type":"integer"},"dryRun":{"type":"boolean"},"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. best-effort applies what compiles. only runs in-memory, no persist."},"kb":{"type":"string","description":"KB alias (multi-KB only)."}}}},
|
|
8
|
+
{"name":"genexus_inspect","description":"Use to snapshot an object: metadata, variables, structure, signature. Raw shape, no source text — use genexus_read for code.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"include":{"type":"array","items":{"type":"string","enum":["metadata","variables","signature","structure","parts","controls","events_repertoire","callers"]}},"type":{"type":"string"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["name"]}},
|
|
9
|
+
{"name":"genexus_analyze","description":"Use this for cross-object semantic analysis: impact, dependencies, complexity, naming, summary. See tool-help for mode selection.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"mode":{"type":"string","enum":["linter","navigation","hierarchy","impact","data_context","ui_context","pattern_metadata","summary"]},"kb":{"type":"string","description":"KB alias (multi-KB only)."},"waitForIndex":{"type":"boolean","description":"mode=impact: block up to 30s for Ready index (default true).","default":true}},"required":["name","mode"]}},
|
|
10
|
+
{"name":"genexus_inject_context","description":"Inject SDT structures and Procedure signatures of called objects.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"recursive":{"type":"boolean"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["name"]}},
|
|
11
|
+
{"name":"genexus_lifecycle","description":"Build, validate, index, or poll the KB. Long ops are async with operationId. See genexus://kb/tool-help/genexus_lifecycle for actions and target formats.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["build","cancel","rebuild","reorg","validate","validate-kb","sync","index","status","result","snapshots-list","snapshots-restore"]},"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 taskId event-driven block, 0-600s."},"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)."},"includeCallees":{"type":"string","enum":["none","direct","transitive"],"description":"Build: expand call graph so callees compile first (default transitive)."},"buildPlanCap":{"type":"integer","description":"Build: max nodes before BuildPlanTooLarge (default 200)."},"skipFullDeploy":{"type":"boolean","description":"EXPERIMENTAL. Single-target Build + includeCallees=none: skip deploy step. DLL is NOT redeployed; see tool-help."},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["action"]}},
|
|
12
|
+
{"name":"genexus_forge","description":"Generate new code or structures from templates or translations.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["scaffold","translate","sample"]},"type":{"type":"string"},"name":{"type":"string"},"content":{"type":"string"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["action"]}},
|
|
13
|
+
{"name":"genexus_test","description":"Execute native GeneXus tests (GXtest).","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["name"]}},
|
|
14
|
+
{"name":"genexus_create_object","description":"Create any IDE-creatable object (Transaction, Procedure, WebPanel, SDPanel, SDT, DataProvider, Domain, Dashboard...). Domain takes dataType+length or enumValues. NOT for WorkWithPlus (use genexus_apply_pattern) or popups with inputs (use genexus_create_popup).","inputSchema":{"type":"object","properties":{"type":{"type":"string"},"name":{"type":"string"},"dataType":{"type":"string"},"length":{"type":"integer"},"decimals":{"type":"integer"},"signed":{"type":"boolean"},"description":{"type":"string"},"basedOn":{"type":"string"},"enumValues":{"type":"array","items":{"type":"object"}},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["type","name"]}},
|
|
15
|
+
{"name":"genexus_logs","description":"Read worker_debug.log tail for error diagnosis or correlation. since='crash' slices from the last ERROR/CRITICAL marker.","inputSchema":{"type":"object","properties":{"lines":{"type":"integer"},"filterCorrelation":{"type":"string"},"grep":{"type":"string"},"since":{"type":"string","enum":["crash"],"description":"'crash' = tail from the most recent ERROR/CRITICAL line + 5 lines of context."}}}},
|
|
16
|
+
{"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/."}}}},
|
|
17
|
+
{"name":"genexus_worker_reload","description":"Reload worker. soft (default): drain + respawn. hard: copy sourceDir + respawn. force=true: gateway kills directly (use when worker is hung).","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."}}}},
|
|
18
|
+
{"name":"genexus_delete_object","description":"Delete an object from the KB. Irreversible — confirm=true required.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"confirm":{"type":"boolean"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["name","confirm"]}},
|
|
19
|
+
{"name":"genexus_export_object","description":"Export a GeneXus object part to a text file on disk.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"outputPath":{"type":"string"},"part":{"type":"string"},"type":{"type":"string"},"overwrite":{"type":"boolean"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["name","outputPath"]}},
|
|
20
|
+
{"name":"genexus_import_object","description":"Import a text file from disk into a GeneXus object part.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"inputPath":{"type":"string"},"part":{"type":"string"},"type":{"type":"string"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["name","inputPath"]}},
|
|
21
|
+
{"name":"genexus_refactor","description":"Run GeneXus refactor: rename, extract procedure, or WWP condition set.","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"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["action"]}},
|
|
22
|
+
{"name":"genexus_add_variable","description":"Add a variable to the Variables part of a GeneXus object.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"varName":{"type":"string"},"typeName":{"type":"string"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["name","varName"]}},
|
|
23
|
+
{"name":"genexus_delete_variable","description":"Remove a variable. Idempotent. Refuses GAM/WWP+ framework-managed vars.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"varName":{"type":"string"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["name","varName"]}},
|
|
24
|
+
{"name":"genexus_modify_variable","description":"Change variable type atomically. Preserves name + description.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"varName":{"type":"string"},"typeName":{"type":"string"},"basedOn":{"type":"string","description":"Domain (optional)."},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["name","varName","typeName"]}},
|
|
25
|
+
{"name":"genexus_validate_payload","description":"Pre-flight: parse + SDK schema scan + would-be diff vs current state. No save.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"part":{"type":"string"},"content":{"type":"string"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["name","content"]}},
|
|
26
|
+
{"name":"genexus_bulk_edit","description":"Apply N independent edits. Item: {name,part?,content,type?,dryRun?}. stopOnError halts at first fail.","inputSchema":{"type":"object","properties":{"targets":{"type":"array","items":{"type":"object"}},"stopOnError":{"type":"boolean"},"dryRun":{"type":"boolean"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["targets"]}},
|
|
27
|
+
{"name":"genexus_apply_template","description":"Apply visual template: kpi_header | empty_state | confirm_dialog. See tool-help for args per template.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"template":{"type":"string","enum":["kpi_header","empty_state","confirm_dialog"]},"part":{"type":"string"},"args":{"type":"object"},"dryRun":{"type":"boolean"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["name","template"]}},
|
|
28
|
+
{"name":"genexus_diff","description":"Unified text diff. mode=textVsText|currentVsText.","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["textVsText","currentVsText"]},"name":{"type":"string"},"part":{"type":"string"},"left":{"type":"string"},"right":{"type":"string"},"context":{"type":"integer"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}}}},
|
|
29
|
+
{"name":"genexus_export_unified","description":"Export an object's full state (all parts) as a single JSON envelope.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["name"]}},
|
|
30
|
+
{"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 (multi-KB only)."}},"required":["code"]}},
|
|
31
|
+
{"name":"genexus_properties","description":"Read or update GeneXus object properties. Note: Description is the title-bar text shown when a WebPanel/Popup is opened via .Popup().","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["get","set"]},"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"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["action","name"]}},
|
|
32
|
+
{"name":"genexus_asset","description":"Find, read, or write binary assets inside the active KB.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["find","read","write"]},"path":{"type":"string"},"includeContent":{"type":"boolean"},"maxBytes":{"type":"integer"},"pattern":{"type":"string"},"relativeRoot":{"type":"string"},"limit":{"type":"integer"},"contentBase64":{"type":"string"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["action"]}},
|
|
33
|
+
{"name":"genexus_history","description":"List/read/save/restore object history snapshots. restore + discard=true = IDE 'Discard changes' parity.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list","get_source","save","restore"]},"name":{"type":"string"},"versionId":{"type":"integer"},"part":{"type":"string","description":"Default 'Source'."},"snapshot":{"type":"string","description":"Snapshot token (timestamp or 'latest')."},"discard":{"type":"boolean","default":false,"description":"restore-only: drop in-memory edits, restore last persisted baseline for (name,part)."},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["action","name"]}},
|
|
34
|
+
{"name":"genexus_structure","description":"Read or update visual and logical structure of GeneXus objects.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["get_visual","update_visual","get_indexes","get_logic"]},"name":{"type":"string"},"payload":{"type":"object","description":"Update payload for update_visual."},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["action","name"]}},
|
|
35
|
+
{"name":"genexus_layout","description":"SDK layout/WebForm ops: get_tree, set_property, find_controls, inspect_surface, scan_mutators.","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"]},"name":{"type":"string"},"target":{"type":"string","description":"Alias for name (backcompat)."},"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 (multi-KB only)."}},"required":["action"]}},
|
|
36
|
+
{"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"]}},
|
|
37
|
+
{"name":"genexus_search_source","description":"Regex/semantic search across Procedure/DataProvider/WebPanel/Transaction source.","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"},"scope":{"type":"array","items":{"type":"string"}},"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 (multi-KB only)."}}}},
|
|
38
|
+
{"name":"genexus_kb","description":"Manage open KBs: list / open / close / set_default.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list","open","close","set_default"]},"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)."}},"required":["action"]}},
|
|
39
|
+
{"name":"genexus_sql","description":"SQL for a Transaction/Table (DDL) or a procedure For Each navigation.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["ddl","navigation"]},"name":{"type":"string"},"includeSubordinated":{"type":"boolean","description":"action=ddl only."},"levelNumber":{"type":"integer","description":"action=navigation only."},"type":{"type":"string"},"kb":{"type":"string","description":"KB alias (multi-KB only)."}},"required":["action","name"]}},
|
|
40
|
+
{"name":"genexus_preview","description":"Render WebPanel via headless Chrome. Opens launcher, fills parms, navigates, captures HTML/a11y/screenshot, optionally diffs vs baseline.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["render","run"],"default":"render","description":"run = auto-resolve launcher (IDE F5 parity). render = explicit name."},"name":{"type":"string","description":"WebPanel name. Optional for action=run."},"parms":{"type":"object","description":"Per-call launcher parms."},"launcher":{"type":"string","description":"Launcher page (default 'auto')."},"buildFirst":{"type":"boolean","default":false,"description":"Build before launch."},"waitMs":{"type":"integer","default":3000,"description":"Wait ms after nav."},"capture":{"type":"array","items":{"type":"string","enum":["html","a11y","screenshot","console"]},"description":"Default ['html','a11y']."},"diffBaseline":{"type":"boolean","default":false,"description":"Structural diff vs stored baseline."},"updateBaseline":{"type":"boolean","default":false,"description":"Persist current as new baseline."},"fill":{"type":"object","description":"GX-aware form fills."},"click":{"type":"string","description":"GX-aware click target."},"auth":{"type":"object","description":"GAM override (mode/user/pass)."},"kb":{"type":"string","description":"KB alias (multi-KB only)."}}}},
|
|
41
|
+
{"name":"genexus_apply_pattern","description":"Apply a pattern (e.g. WorkWithPlus) to a parent. IDE 'Right-click → Apply Pattern'. Inspect parentType first: Transaction=family-gen, WebPanel/SDPanel=direct-attach (pass settings.template). Others rejected.","inputSchema":{"type":"object","required":["name","pattern"],"properties":{"name":{"type":"string","description":"Target KBObject name."},"pattern":{"type":"string","description":"Pattern key ('WorkWithPlus') or GUID."},"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."},"kb":{"type":"string","description":"KB alias (multi-KB only)."}}}},
|
|
42
|
+
{"name":"genexus_edit_and_build","description":"Edit + rebuild callers in one call. Returns edit diff + impact + build operationId.","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.","anyOf":[{"type":"string"},{"type":"object","properties":{"find":{"type":"string"},"replace":{"type":"string"}},"required":["find","replace"]}]},"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}},"required":["name","part"]}},
|
|
43
|
+
{"name":"genexus_create_popup","description":"Create popup WebPanel with Form type=\"layout\" body (radio/combo render editable). Spec: title, inputs, buttons, inParms, outParms.","inputSchema":{"type":"object","required":["name","spec"],"properties":{"name":{"type":"string","description":"WebPanel name (created or updated)."},"spec":{"type":"object","description":"Popup spec.","properties":{"title":{"type":"string"},"description":{"type":"string"},"inputs":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["radio","combo","text"]},"varName":{"type":"string"},"label":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"}}}},"showWhen":{"type":"string","description":"e.g. \"X == 'S'\"; emits Refresh toggling group visibility."}},"required":["type","varName"]}},"buttons":{"type":"array","items":{"type":"object","properties":{"caption":{"type":"string"},"event":{"type":"string"}}}},"inParms":{"type":"array","items":{"type":"string"},"description":"e.g. [\"X:Numeric(2)\"]"},"outParms":{"type":"array","items":{"type":"string"}}}},"kb":{"type":"string","description":"KB alias (multi-KB only)."}}}}
|
|
44
44
|
]
|
|
Binary file
|
|
Binary file
|