genexus-mcp 2.2.0 → 2.3.1

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
@@ -2,8 +2,9 @@
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/genexus-mcp.svg)](https://www.npmjs.com/package/genexus-mcp)
4
4
  [![npm downloads](https://img.shields.io/npm/dm/genexus-mcp.svg)](https://www.npmjs.com/package/genexus-mcp)
5
- [![MCP Badge](https://lobehub.com/badge/mcp/lennix1337-genexus18mcp?style=for-the-badge)](https://lobehub.com/mcp/lennix1337-genexus18mcp)
6
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+ [![SafeSkill 85/100](https://img.shields.io/badge/SafeSkill-85%2F100_Passes%20with%20Notes-yellow)](https://safeskill.dev/scan/lennix1337-genexus18mcp)
7
+ [![MCP Badge](https://lobehub.com/badge/mcp/lennix1337-genexus18mcp)](https://lobehub.com/mcp/lennix1337-genexus18mcp)
7
8
 
8
9
  > **¿Hablás español?** → [Guía de inicio en español](docs/GETTING_STARTED.es.md)
9
10
  > **Stuck?** → [Troubleshooting guide](TROUBLESHOOTING.md)
@@ -70,6 +71,37 @@ Replace the placeholders or let the AI ask you for them.
70
71
 
71
72
  ---
72
73
 
74
+ ## Corporate install (fixed path, ASR-friendly)
75
+
76
+ If your machine has **Microsoft Defender ASR**, **SmartScreen**, or another endpoint policy blocking unsigned binaries, the default `npx` flow is painful — `npx` caches the package under `%LOCALAPPDATA%\npm-cache\_npx\<hash>\...`, and the `<hash>` changes per version, so IT can't whitelist a stable path without a wildcard over the whole npm cache (which is too broad).
77
+
78
+ Use the corporate installer instead. It extracts the binaries to a stable directory and registers the AI clients to launch the gateway directly from there — `npx` is never on the runtime path.
79
+
80
+ ```pwsh
81
+ # One-liner — installs latest release, registers AI clients
82
+ iex (irm https://raw.githubusercontent.com/lennix1337/Genexus18MCP/main/scripts/install.ps1)
83
+
84
+ # With explicit KB and GeneXus paths
85
+ $s = irm https://raw.githubusercontent.com/lennix1337/Genexus18MCP/main/scripts/install.ps1
86
+ & ([scriptblock]::Create($s)) -Kb "C:\KBs\MyKB" -Gx "C:\Program Files (x86)\GeneXus\GeneXus18"
87
+ ```
88
+
89
+ Install location:
90
+
91
+ - **Admin shell** → `C:\Tools\GenexusMCP\`
92
+ - **Non-admin shell** → `%LOCALAPPDATA%\Programs\GenexusMCP\`
93
+
94
+ Paths to give to IT for the ASR / Defender exclusion list:
95
+
96
+ ```
97
+ <InstallDir>\GxMcp.Gateway.exe
98
+ <InstallDir>\worker\GxMcp.Worker.exe
99
+ ```
100
+
101
+ Re-run the same one-liner later to **upgrade** — it detects the installed version (`version.txt` in the install dir) and downloads only if a newer release is available. Use `-Force` to reinstall the same version, `-Version v2.3.0` to pin a specific tag, `-NoClient` to skip AI client registration. Node.js 18+ must be installed for client registration; without it the script still extracts the binaries but you'll need to edit the client config (`claude_desktop_config.json` etc.) manually.
102
+
103
+ ---
104
+
73
105
  ## What can I ask the AI?
74
106
 
75
107
  Once installed, here's what unlocks. Try these as your first prompts:
@@ -131,14 +163,17 @@ Still stuck? [Open an issue](https://github.com/lennix1337/Genexus18MCP/issues)
131
163
  The worker exposes these tool families to the MCP router. *(Detailed schemas in [`GEMINI.md`](GEMINI.md).)*
132
164
 
133
165
  - **Search & Discovery** — `genexus_query`, `genexus_read`, `genexus_inspect`, `genexus_list_objects`, `genexus_properties`
134
- - **Editing & Architecture** — `genexus_edit`, `genexus_create_object`, `genexus_refactor`, `genexus_forge`, `genexus_add_variable`
135
- - **Analysis** — `genexus_analyze`, `genexus_inject_context`, `genexus_doc`, `genexus_explain_code`, `genexus_summarize`
166
+ - **Editing & Architecture** — `genexus_edit`, `genexus_create_object`, `genexus_delete_object`, `genexus_refactor`, `genexus_forge`, `genexus_add_variable`
167
+ - **Analysis** — `genexus_analyze` (modes: `linter`, `navigation`, `hierarchy`, `impact`, `data_context`, `ui_context`, `pattern_metadata`, `summary`, `explain`), `genexus_inject_context`, `genexus_doc`, `genexus_search_source`
136
168
  - **File System & Assets** — `genexus_asset`, `genexus_export_object`, `genexus_import_object`
137
- - **History & DB** — `genexus_history`, `genexus_get_sql`, `genexus_structure`
169
+ - **History & DB** — `genexus_history`, `genexus_sql` (`action=ddl` or `action=navigation`), `genexus_structure`
138
170
  - **Lifecycle & Build** — `genexus_lifecycle`, `genexus_test`, `genexus_format`
139
171
  - **Native Layout SDK** — `genexus_layout` (`get_tree`, `find_controls`, `set_property`, `rename_printblock`, `add_printblock`, `get_preview`, …)
172
+ - **KB pool (v2.3.0+)** — `genexus_kb` (`list`, `open`, `close`, `set_default`) for multi-KB parallel work
140
173
  - **Patterns** — Smart XML generation/interpretation (e.g., WorkWithPlus PatternInstance).
141
174
 
175
+ > **Multi-KB (v2.3.0+):** every non-meta tool takes an optional `kb` argument (alias or absolute path). The gateway can hold up to `Server.MaxOpenKbs` (default 3) KBs open at once, each in its own Worker process — calls to different KBs run truly in parallel. See [Advanced Configuration](#advanced-configuration) for the `KBs[]` schema.
176
+
142
177
  **Edit modes** (`genexus_edit`): `xml` (full replacement, default), `ops` (typed semantic ops like `set_attribute`, `add_rule`), `patch` (JSON-Patch RFC 6902).
143
178
 
144
179
  **Safe by default**: all write tools accept `dryRun: true` (returns a preview without mutating the KB) and `idempotencyKey` (safe retries; concurrent calls coalesce, results cached 15 min).
@@ -173,18 +208,53 @@ The installer writes a `config.json` for you. To customize networking, timeouts,
173
208
  "HttpPort": 5000,
174
209
  "BindAddress": "127.0.0.1",
175
210
  "SessionIdleTimeoutMinutes": 10,
176
- "WorkerIdleTimeoutMinutes": 5
211
+ "WorkerIdleTimeoutMinutes": 5,
212
+ "MaxOpenKbs": 3
177
213
  },
178
214
  "GeneXus": {
179
215
  "InstallationPath": "C:\\Program Files (x86)\\GeneXus\\GeneXus18",
180
216
  "WorkerExecutable": "worker\\GxMcp.Worker.exe"
181
217
  },
182
218
  "Environment": {
183
- "KBPath": "C:\\KBs\\YourKB"
219
+ "DefaultKb": "main",
220
+ "KBs": [
221
+ { "alias": "main", "path": "C:\\KBs\\YourKB" },
222
+ { "alias": "legacy", "path": "C:\\KBs\\OtherKB" }
223
+ ]
184
224
  }
185
225
  }
186
226
  ```
187
227
 
228
+ > **Backward compatibility:** old configs with a single `Environment.KBPath` keep working — the gateway auto-migrates them to `KBs[]` + `DefaultKb` at load time.
229
+
230
+ ### Working with multiple KBs
231
+
232
+ Once you declare more than one KB in `Environment.KBs[]`, every tool accepts an optional `kb` argument:
233
+
234
+ ```jsonc
235
+ // LLM example: list procedures in two KBs in parallel
236
+ { "tool": "genexus_list_objects", "arguments": { "kb": "main", "type": "Procedure" } }
237
+ { "tool": "genexus_list_objects", "arguments": { "kb": "legacy", "type": "Transaction" } }
238
+ ```
239
+
240
+ Resolution rules when `kb` is omitted:
241
+ - exactly 1 KB open → uses that KB
242
+ - 0 KBs open + `DefaultKb` set → opens `DefaultKb` lazily
243
+ - 2+ KBs open → server returns `KB_AMBIGUOUS` and you must pass `kb` explicitly
244
+
245
+ Manage the pool at runtime:
246
+
247
+ ```jsonc
248
+ { "tool": "genexus_kb", "arguments": { "action": "list" } }
249
+ // → { openKbs: [{alias, path, pid, workingSetMB, idleSeconds}], maxOpenKbs, defaultKb, declaredKbs }
250
+
251
+ { "tool": "genexus_kb", "arguments": { "action": "open", "alias": "adhoc", "path": "C:/KBs/ScratchKB" } }
252
+ { "tool": "genexus_kb", "arguments": { "action": "close", "alias": "legacy" } }
253
+ { "tool": "genexus_kb", "arguments": { "action": "set_default", "alias": "main" } } // persists to config.json
254
+ ```
255
+
256
+ When the pool is full and no Worker is idle, the server returns `KB_POOL_FULL` — close one explicitly or raise `Server.MaxOpenKbs`. Each Worker carries the SDK in its own process (~200–400 MB idle, up to 1–2 GB on heavy KBs), so size the pool against available RAM.
257
+
188
258
  ### Architecture
189
259
 
190
260
  ```mermaid
@@ -194,7 +264,8 @@ graph LR
194
264
  C -->|Native SDK| D[GeneXus KB]
195
265
  ```
196
266
 
197
- - **Lazy worker**: the heavy .NET 4.8 worker only spins up on first command and shuts down after `WorkerIdleTimeoutMinutes` of inactivity to unlock build artifacts.
267
+ - **Worker pool (v2.3.0+)**: one .NET 4.8 Worker process per open KB, capped by `MaxOpenKbs` (default 3). Workers are spawned lazily, recycled by `WorkerIdleTimeoutMinutes`, and evicted LRU when the pool is full.
268
+ - **Cross-KB parallelism**: tool calls to different KBs run on different Worker processes and never block each other. Calls to the same KB are still serialized by the GeneXus SDK's STA requirement.
198
269
  - **Gateway reuse**: multiple IDE instances share one gateway via lease files at `%LOCALAPPDATA%\GenexusMCP\gateway-leases`.
199
270
  - **HTTP mode**: also available at `http://127.0.0.1:5000/mcp` with SSE. Header: `MCP-Protocol-Version: 2025-11-25`.
200
271
 
@@ -208,6 +279,22 @@ Want to contribute or run a local dev build?
208
279
  2. Run `.\setup.bat` — checks prerequisites, builds the C# components, and auto-registers the local build with detected AI clients.
209
280
  3. If GeneXus or your KB aren't auto-detected, follow the prompts.
210
281
 
282
+ ### Bundled AI skills (`.gemini/skills/`)
283
+
284
+ This repo ships a set of **agent skills** under `.gemini/skills/` that any MCP-compatible client with skill support (Gemini CLI, Claude Code via plugin, etc.) can load to ground its GeneXus reasoning:
285
+
286
+ | Skill | What it gives the agent |
287
+ |---|---|
288
+ | `genexus-mastery` | This repository's preferred MCP workflow + multi-KB usage |
289
+ | `genexus18-guidelines` | Local engineering rules layered on top of Nexa |
290
+ | `nexa` | Full GeneXus 18 reference set: every object type, command, type, property — imported from the official [`genexuslabs/genexus-skills`](https://github.com/genexuslabs/genexus-skills) |
291
+ | `frontend/chameleon-controls-library` | 58 Chameleon UI component specs |
292
+ | `frontend/mercury-design-system` | Mercury tokens, bundles, theming |
293
+ | `frontend/design-system-builder` | Authoring custom design systems |
294
+ | `frontend/ui-creator` | Panel/screen generation templates |
295
+
296
+ Third-party skills are Apache 2.0 (see [`.gemini/skills/NOTICE.md`](.gemini/skills/NOTICE.md)). To refresh against upstream, follow the steps in `NOTICE.md`.
297
+
211
298
  ### Nexus-IDE (VS Code extension)
212
299
 
213
300
  `src/nexus-ide` is a lightweight VS Code extension that ships with the repo:
package/cli/lib/config.js CHANGED
@@ -148,6 +148,13 @@ function createConfigFile(kbPath, gxPath) {
148
148
  function patchClientConfig(targetConfigPath) {
149
149
  const clients = getClientConfigTargets();
150
150
 
151
+ // Set by scripts/install.ps1 for fixed-path corporate installs — clients
152
+ // launch the gateway exe directly instead of resolving via the npx cache.
153
+ const directExe = process.env.GENEXUS_MCP_GATEWAY_EXE;
154
+ const launcher = directExe
155
+ ? { command: directExe, args: [] }
156
+ : { command: process.platform === 'win32' ? 'npx.cmd' : 'npx', args: ['-y', 'genexus-mcp@latest'] };
157
+
151
158
  const patched = [];
152
159
  const failed = [];
153
160
 
@@ -163,11 +170,7 @@ function patchClientConfig(targetConfigPath) {
163
170
 
164
171
  const cfgObj = parsed || {};
165
172
  cfgObj.mcpServers = cfgObj.mcpServers || {};
166
- cfgObj.mcpServers.genexus = {
167
- command: process.platform === 'win32' ? 'npx.cmd' : 'npx',
168
- args: ['-y', 'genexus-mcp@latest'],
169
- env: { GX_CONFIG_PATH: targetConfigPath }
170
- };
173
+ cfgObj.mcpServers.genexus = { ...launcher, env: { GX_CONFIG_PATH: targetConfigPath } };
171
174
 
172
175
  fs.writeFileSync(client.path, JSON.stringify(cfgObj, null, 2));
173
176
  patched.push(client.name);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genexus-mcp",
3
- "version": "2.2.0",
3
+ "version": "2.3.1",
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": [
@@ -6,7 +6,7 @@
6
6
  "compilationOptions": {},
7
7
  "targets": {
8
8
  ".NETCoreApp,Version=v8.0": {
9
- "GxMcp.Gateway/2.2.0": {
9
+ "GxMcp.Gateway/2.3.1": {
10
10
  "dependencies": {
11
11
  "Newtonsoft.Json": "13.0.3",
12
12
  "System.Management": "10.0.5",
@@ -81,7 +81,7 @@
81
81
  }
82
82
  },
83
83
  "libraries": {
84
- "GxMcp.Gateway/2.2.0": {
84
+ "GxMcp.Gateway/2.3.1": {
85
85
  "type": "project",
86
86
  "serviceable": false,
87
87
  "sha512": ""
Binary file
Binary file
Binary file
@@ -1,19 +1,20 @@
1
- {
2
- "GeneXus": {
3
- "InstallationPath": "C:\\Program Files (x86)\\GeneXus\\GeneXus18",
4
- "WorkerExecutable": "C:\\Projetos\\Genexus18MCP\\publish\\worker\\GxMcp.Worker.exe"
5
- },
6
- "Server": {
7
- "HttpPort": 5000,
8
- "McpStdio": true,
9
- "BindAddress": "127.0.0.1"
10
- },
11
- "Logging": {
12
- "Level": "Debug",
13
- "Path": "logs"
14
- },
15
- "Environment": {
16
- "KBPath": "C:\\KBs\\AcademicoHomolog1",
17
- "GX_SHADOW_PATH": "C:\\Projetos\\Genexus18MCP\\.gx_mirror"
18
- }
1
+ {
2
+ "GeneXus": {
3
+ "InstallationPath": "C:\\Program Files (x86)\\GeneXus\\GeneXus18",
4
+ "WorkerExecutable": "C:\\Projetos\\Genexus18MCP\\publish\\worker\\GxMcp.Worker.exe"
5
+ },
6
+ "Server": {
7
+ "HttpPort": 5000,
8
+ "McpStdio": true,
9
+ "BindAddress": "127.0.0.1"
10
+ },
11
+ "Logging": {
12
+ "Level": "Debug",
13
+ "Path": "logs"
14
+ },
15
+ "Environment": {
16
+ "KBPath": "C:\\KBs\\AcademicoHomolog1",
17
+ "GX_SHADOW_PATH": "C:\\Projetos\\Genexus18MCP\\.gx_mirror",
18
+ "DefaultKb": "academicohomolog1"
19
+ }
19
20
  }
@@ -1,34 +1,31 @@
1
- [
2
- {"name":"genexus_whoami","description":"Return current KB context, GeneXus install, and MCP version.","inputSchema":{"type":"object","properties":{}}},
3
- {"name":"genexus_query","description":"Search objects. Prefixes: usedby:, type:, description:, parent:, parentPath:.","inputSchema":{"type":"object","properties":{"query":{"type":"string"},"typeFilter":{"type":"string"},"domainFilter":{"type":"string"},"limit":{"type":"integer"},"inline_read_top":{"type":"integer","description":"0-3. When >0, response includes inline_reads array with full content of the top N matches. Capped at 3."}},"required":["query"]}},
4
- {"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"},"limit":{"type":"integer"},"offset":{"type":"integer"},"parent":{"type":"string"},"parentPath":{"type":"string"},"typeFilter":{"type":"string"},"verbose":{"type":"boolean","description":"When true, returns full item shape (default false)."},"inline_read_top":{"type":"integer","description":"0-3. When >0, response includes inline_reads array with full content of the top N matches. Capped at 3."}}}},
5
- {"name":"genexus_read","description":"Read source/metadata parts. name or targets (mutually exclusive). Paginate with offset/limit. Use parts=[\"Source\",\"Variables\",...] to select specific parts and skip the rest.","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"}}}},
6
- {"name":"genexus_edit","description":"Edit source/metadata. name or targets (mutually exclusive). Use dryRun=true with mode=patch first. Returns post_state.diff (unified diff) by default; verbose=true adds slices (±15 lines); return_post_state=false opts out.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"part":{"type":"string"},"mode":{"type":"string","enum":["full","patch","ops"]},"content":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"op":{"type":"string"}},"required":["op"]}},"patch":{},"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","required":["name","content"]}},"type":{"type":"string"},"return_post_state":{"type":"boolean","description":"Set false to omit post_state.diff from the response (default true)."},"verbose":{"type":"boolean","description":"When true, adds slices (±15 lines around each hunk) to post_state (default false)."}}}},
7
- {"name":"genexus_inspect","description":"Snapshot of an object: metadata, variables, structure, signature.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"include":{"type":"array","items":{"type":"string","enum":["metadata","variables","signature","structure","parts","controls","events_repertoire"]}},"type":{"type":"string"}},"required":["name"]}},
8
- {"name":"genexus_analyze","description":"Semantic analysis: impact, dependencies, complexity, dead code, naming.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"mode":{"type":"string","enum":["linter","navigation","hierarchy","impact","data_context","ui_context","pattern_metadata"]}},"required":["name","mode"]}},
9
- {"name":"genexus_summarize","description":"Natural-language summary of a single object.","inputSchema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},
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"}},"required":["name"]}},
11
- {"name":"genexus_lifecycle","description":"Build/validate/index/poll. action=build is non-blocking when estimated_seconds>=20 returns {job_id, status:running} and surfaces _meta.background_jobs on the next call. action=status accepts taskId OR job_id via target; wait_seconds>0 long-polls up to 25s.","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:<operationId>."},"code":{"type":"string"},"limit":{"type":"integer"},"snapshotPath":{"type":"string"},"estimated_seconds":{"type":"integer","description":"Build: <20 forces sync fast-path (one turn); >=20 (default 60) goes async."},"wait_seconds":{"type":"integer","description":"Status: 0-25. >0 long-polls server-side until terminal or timeout."}},"required":["action"]}},
12
- {"name":"genexus_open_kb","description":"Open a GeneXus Knowledge Base for the active session.","inputSchema":{"type":"object","properties":{"path":{"type":"string"}},"required":["path"]}},
13
- {"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"}},"required":["action"]}},
14
- {"name":"genexus_test","description":"Execute native GeneXus tests (GXtest).","inputSchema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},
15
- {"name":"genexus_get_sql","description":"Return SQL DDL for a Transaction or Table object.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"includeSubordinated":{"type":"boolean"}},"required":["name"]}},
16
- {"name":"genexus_create_object","description":"Create a new GeneXus object in the active KB.","inputSchema":{"type":"object","properties":{"type":{"type":"string","description":"e.g. Procedure, Transaction, WebPanel, SDT."},"name":{"type":"string"}},"required":["type","name"]}},
17
- {"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"}}}},
18
- {"name":"genexus_worker_reload","description":"Hot-reload worker: copy new binaries and respawn.","inputSchema":{"type":"object","properties":{"sourceDir":{"type":"string","description":"Absolute path to freshly built bin/Release."}},"required":["sourceDir"]}},
19
- {"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"}},"required":["name","confirm"]}},
20
- {"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"}},"required":["name","outputPath"]}},
21
- {"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"}},"required":["name","inputPath"]}},
22
- {"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"}},"required":["action"]}},
23
- {"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"}},"required":["name","varName"]}},
24
- {"name":"genexus_explain_code","description":"Explain or auto-fix a GeneXus code snippet.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"}},"required":["name","code"]}},
25
- {"name":"genexus_format","description":"Format a GeneXus code snippet using worker rules.","inputSchema":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"]}},
26
- {"name":"genexus_properties","description":"Read or update GeneXus object properties.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["get","set"]},"name":{"type":"string"},"control":{"type":"string"},"propertyName":{"type":"string"},"value":{"type":"string"}},"required":["action","name"]}},
27
- {"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"}},"required":["action"]}},
28
- {"name":"genexus_history","description":"List, read, save, or restore GeneXus object history snapshots.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list","get_source","save","restore"]},"name":{"type":"string"},"versionId":{"type":"integer"}},"required":["action","name"]}},
29
- {"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."}},"required":["action","name"]}},
30
- {"name":"genexus_layout","description":"Native SDK layout/WebForm operations: 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":"Object name alias for backward compatibility."},"control":{"type":"string"},"propertyName":{"type":"string"},"value":{"type":"string"},"query":{"type":"string"},"changes":{"type":"array","items":{"type":"object","required":["control","propertyName","value"]}},"limit":{"type":"integer"},"currentName":{"type":"string"},"newName":{"type":"string"},"printBlockName":{"type":"string"},"height":{"type":"integer"}},"required":["action"]}},
31
- {"name":"genexus_doc","description":"Generate structured docs (markdown, sequence diagrams, API contracts).","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["wiki","visualize","health"]},"target":{"type":"string","description":"Object or domain name."}},"required":["action"]}},
32
- {"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"}}}},
33
- {"name":"genexus_get_sql_for_navigation","description":"Generate SQL from a procedure/data-provider's resolved For Each navigation.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"levelNumber":{"type":"integer"},"type":{"type":"string"}},"required":["name"]}}
34
- ]
1
+ [
2
+ {"name":"genexus_whoami","description":"Return current KB context, GeneXus install, and MCP version.","inputSchema":{"type":"object","properties":{}}},
3
+ {"name":"genexus_query","description":"Search objects. Prefixes: usedby:, type:, description:, parent:, parentPath:.","inputSchema":{"type":"object","properties":{"query":{"type":"string"},"typeFilter":{"type":"string"},"domainFilter":{"type":"string"},"limit":{"type":"integer"},"inline_read_top":{"type":"integer","description":"0-3. When >0, response includes inline_reads array with full content of the top N matches. Capped at 3."},"kb":{"type":"string","description":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["query"]}},
4
+ {"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"},"limit":{"type":"integer"},"offset":{"type":"integer"},"parent":{"type":"string"},"parentPath":{"type":"string"},"typeFilter":{"type":"string"},"verbose":{"type":"boolean","description":"When true, returns full item shape (default false)."},"inline_read_top":{"type":"integer","description":"0-3. When >0, response includes inline_reads array with full content of the top N matches. Capped at 3."},"kb":{"type":"string","description":"Target KB (alias or path). Required when 2+ KBs are open."}}}},
5
+ {"name":"genexus_read","description":"Read source/metadata parts. name or targets (mutually exclusive). Paginate with offset/limit. Use parts=[\"Source\",\"Variables\",...] to select specific parts and skip the rest.","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":"Target KB (alias or path). Required when 2+ KBs are open."}}}},
6
+ {"name":"genexus_edit","description":"Edit source/metadata. name or targets (mutually exclusive). Use dryRun=true with mode=patch first. Returns post_state.diff (unified diff) by default; verbose=true adds slices (±15 lines); return_post_state=false opts out.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"part":{"type":"string"},"mode":{"type":"string","enum":["full","patch","ops"]},"content":{"type":"string"},"ops":{"type":"array","items":{"type":"object","properties":{"op":{"type":"string"}},"required":["op"]}},"patch":{},"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","required":["name","content"]}},"type":{"type":"string"},"return_post_state":{"type":"boolean","description":"Set false to omit post_state.diff from the response (default true)."},"verbose":{"type":"boolean","description":"When true, adds slices (±15 lines around each hunk) to post_state (default false)."},"kb":{"type":"string","description":"Target KB (alias or path). Required when 2+ KBs are open."}}}},
7
+ {"name":"genexus_inspect","description":"Snapshot of an object: metadata, variables, structure, signature.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"include":{"type":"array","items":{"type":"string","enum":["metadata","variables","signature","structure","parts","controls","events_repertoire"]}},"type":{"type":"string"},"kb":{"type":"string","description":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["name"]}},
8
+ {"name":"genexus_analyze","description":"Semantic analysis: impact, dependencies, complexity, naming, summary, explain.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"mode":{"type":"string","enum":["linter","navigation","hierarchy","impact","data_context","ui_context","pattern_metadata","summary","explain"]},"kb":{"type":"string","description":"Target KB (alias or path). Required when 2+ KBs are open."},"code":{"type":"string","description":"Required when mode=explain."}},"required":["name","mode"]}},
9
+ {"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":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["name"]}},
10
+ {"name":"genexus_lifecycle","description":"Build/validate/index/poll. action=build is non-blocking when estimated_seconds>=20 — returns {job_id, status:running} and surfaces _meta.background_jobs on the next call. action=status accepts taskId OR job_id via target; wait_seconds>0 long-polls up to 25s.","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:<operationId>."},"code":{"type":"string"},"limit":{"type":"integer"},"snapshotPath":{"type":"string"},"estimated_seconds":{"type":"integer","description":"Build: <20 forces sync fast-path (one turn); >=20 (default 60) goes async."},"wait_seconds":{"type":"integer","description":"Status: 0-25. >0 long-polls server-side until terminal or timeout."},"kb":{"type":"string","description":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["action"]}},
11
+ {"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":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["action"]}},
12
+ {"name":"genexus_test","description":"Execute native GeneXus tests (GXtest).","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"kb":{"type":"string","description":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["name"]}},
13
+ {"name":"genexus_create_object","description":"Create a new GeneXus object in the active KB.","inputSchema":{"type":"object","properties":{"type":{"type":"string","description":"e.g. Procedure, Transaction, WebPanel, SDT."},"name":{"type":"string"},"kb":{"type":"string","description":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["type","name"]}},
14
+ {"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"}}}},
15
+ {"name":"genexus_worker_reload","description":"Hot-reload worker: copy new binaries and respawn.","inputSchema":{"type":"object","properties":{"sourceDir":{"type":"string","description":"Absolute path to freshly built bin/Release."}},"required":["sourceDir"]}},
16
+ {"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":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["name","confirm"]}},
17
+ {"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":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["name","outputPath"]}},
18
+ {"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":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["name","inputPath"]}},
19
+ {"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":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["action"]}},
20
+ {"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":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["name","varName"]}},
21
+ {"name":"genexus_format","description":"Format a GeneXus code snippet using worker rules.","inputSchema":{"type":"object","properties":{"code":{"type":"string"},"kb":{"type":"string","description":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["code"]}},
22
+ {"name":"genexus_properties","description":"Read or update GeneXus object properties.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["get","set"]},"name":{"type":"string"},"control":{"type":"string"},"propertyName":{"type":"string"},"value":{"type":"string"},"kb":{"type":"string","description":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["action","name"]}},
23
+ {"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":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["action"]}},
24
+ {"name":"genexus_history","description":"List, read, save, or restore GeneXus object history snapshots.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list","get_source","save","restore"]},"name":{"type":"string"},"versionId":{"type":"integer"},"kb":{"type":"string","description":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["action","name"]}},
25
+ {"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":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["action","name"]}},
26
+ {"name":"genexus_layout","description":"Native SDK layout/WebForm operations: 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":"Object name alias for backward compatibility."},"control":{"type":"string"},"propertyName":{"type":"string"},"value":{"type":"string"},"query":{"type":"string"},"changes":{"type":"array","items":{"type":"object","required":["control","propertyName","value"]}},"limit":{"type":"integer"},"currentName":{"type":"string"},"newName":{"type":"string"},"printBlockName":{"type":"string"},"height":{"type":"integer"},"kb":{"type":"string","description":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["action"]}},
27
+ {"name":"genexus_doc","description":"Generate structured docs (markdown, sequence diagrams, API contracts).","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["wiki","visualize","health"]},"target":{"type":"string","description":"Object or domain name."}},"required":["action"]}},
28
+ {"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"},"kb":{"type":"string","description":"Target KB (alias or path). Required when 2+ KBs are open."}}}},
29
+ {"name":"genexus_kb","description":"Manage open KBs: list (with PID/RSS/idle), open (acquire Worker), close (release), set_default (persist alias to config.json).","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["list","open","close","set_default"]},"alias":{"type":"string","description":"KB alias (for open/close). For open, auto-generated from path basename if omitted."},"path":{"type":"string","description":"Absolute path to the KB (required for action=open if alias is not declared in config)."}},"required":["action"]}},
30
+ {"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":"Target KB (alias or path). Required when 2+ KBs are open."}},"required":["action","name"]}}
31
+ ]
Binary file
Binary file