genexus-mcp 4.0.0 → 4.0.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 +29 -30
- package/cli/docs.test.js +39 -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/config.json +9 -9
- package/publish/gx-engine.exe +0 -0
- package/publish/gxmcp-manifest.json +9 -9
- package/publish/gxmcp-sbom.json +4 -4
- package/publish/gxwire.exe +0 -0
- package/publish/nexus-ide.vsix +0 -0
- package/publish/worker/GxMcp.Worker.exe +0 -0
package/README.md
CHANGED
|
@@ -121,15 +121,20 @@ does not claim the same feature parity as the native SDK contract for GeneXus
|
|
|
121
121
|
|
|
122
122
|
### 🎮 Decompilation / Parity Progress
|
|
123
123
|
|
|
124
|
-
Progress is measured against recorded SDK differential inputs and observable results, not the number of implemented modules or passing unit tests.
|
|
124
|
+
Progress is measured against recorded SDK differential inputs and observable results, not the number of implemented modules or passing unit tests. At the published 4.0.0 baseline, the disposable `KBTeste` Rebuild All recorded **346/346, 0 skipped, 0 refused** and **byte for byte (328/328 files)** C# agreement, together with web scripts, `gxcfg.js`, messages and runtime configuration. These historical counts do not validate later changes or prove that unsupported database semantics were preserved. **Full SDK replacement is not verified** for arbitrary KBs: unsupported forms are still refused by name, and only one KB is the oracle. gx-engine is the **default backend** (`Engine.Backend=gxengine`: admitted builds and field-limited type-only queries; reads/edits and other shapes use SDK fallback; `auto` = builds only, `sdk` = engine off); see [engine routing](docs/engine_backend.md).
|
|
125
125
|
|
|
126
126
|
### What builds today
|
|
127
127
|
|
|
128
|
+
The counts and timings below describe the published 4.0.0 baseline, not a fresh
|
|
129
|
+
validation of uncommitted generator changes. Checked emission now refuses
|
|
130
|
+
unsupported database statements rather than accepting incomplete behavior;
|
|
131
|
+
post-change whole-KB counts and SDK parity must be measured again.
|
|
132
|
+
|
|
128
133
|
| Lane | Verified evidence | Boundary |
|
|
129
134
|
| :--- | :--- | :--- |
|
|
130
135
|
| Package build | `build.ps1` built Gateway, Worker, gxwire and gx-engine; local publish/backend engine hashes match. | Building the MCP distribution is not building every object in a KB. |
|
|
131
136
|
| Selected-object build | Five alternating local SDK/engine pairs regenerated and compiled `DCM37961700`; core APIs and actual CLI output matched. SDK median **14.756s**, engine **0.230s** (**64.19×**). | Synthetic warm fixture; AUTO_CLOSE=OFF on both sides, original ON restored. The packaged binary was not benchmarked; it passed a separate build/run smoke. |
|
|
132
|
-
| Full native KB build (`KBTeste`) | `rebuild-all`: **346 generated / 346 compiled, 0 skipped, 0 refused**. Against the SDK's own output for the same KB: **328/328 C# files byte-identical, 0 missing**; 24/24 web `.js`, `gxcfg.js`, `messages.eng.txt/.js`, `log.config`, `log.console.config` (+ `bin/` copies) and `CloudServices.config` byte-identical. | One oracle KB.
|
|
137
|
+
| Full native KB build (`KBTeste`) | `rebuild-all`: **346 generated / 346 compiled, 0 skipped, 0 refused**. Against the SDK's own output for the same KB: **328/328 C# files byte-identical, 0 missing**; 24/24 web `.js`, `gxcfg.js`, `messages.eng.txt/.js`, `log.config`, `log.console.config` (+ `bin/` copies) and `CloudServices.config` byte-identical. | One oracle KB. Extra SDT and assembly-info output remains outside the matching-file denominator. Developer Menu not written (its object selection is not established). |
|
|
133
138
|
|
|
134
139
|
Use the SDK for required workflows outside validated engine coverage. See
|
|
135
140
|
[Plan 131](plans/131-sdk-performance-benchmark.md) for the exact binary, commands,
|
|
@@ -148,32 +153,26 @@ See the [current acceptance/evidence ledger](plans/129-implementation-progress.m
|
|
|
148
153
|
|
|
149
154
|
#### Gateway Capability Registry Gates
|
|
150
155
|
|
|
151
|
-
The MCP Gateway exposes
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
| `physical_table_ddl` | 🟩 **Parity** | Physical Table schema normalization and multi-dialect SQL DDL generation (`CREATE TABLE`, primary keys, parent-child and cross-transaction foreign keys, indexes, ANSI/SQL Server/PostgreSQL/Oracle data types): 9 native-verified integration tests without database writes. |
|
|
172
|
-
| `sql_navigation` | 🟩 **Parity** | Specifier, base table inference, For Each navigation, extended table joins, and multi-dialect SQL query planning (ANSI, SQL Server, PostgreSQL, Oracle): 10 native-verified integration tests, 13 frontend tests, fail-closed diagnostics (`spc0004`, `spc0005`), and zero SQL writes. |
|
|
173
|
-
| `numeric_core`, `text_core`, `calendar_values`, `records_collections`, `procedure_pipeline`, `xml_projection`, `kb_catalog` | 🟩 **Parity** | Foundational runtime capabilities behind the four Native Parity subsystems above; each `EngineCapabilityRegistry` entry lists its native differential corpus or bounded portable fixture (`decimal_oracle`, `numeric_math`, `text_extended`, `calendar_ops`, `date_conversions`, `collection_ops`, `subroutines`, `exchange`, `sdt_xml`, `catalog`). |
|
|
174
|
-
| `udm_storage_access` | 🟩 **Parity** (bounded reads) | Direct native UDM reads without COM/STA Worker (`knowledgebase.connection`, SQL Server, LocalDB); registered read/query consumers. Live engine writes are not implemented: `genexus_edit` remains SDK-backed or is refused under strict engine verification. Portable writer/lock tests are not live persistence evidence. |
|
|
175
|
-
| `csharp_emitter` | **Bounded coverage** | C# generation and Roslyn compilation tests for supported object forms; unsupported native forms still fail closed. Compilation alone does not establish SDK behavior parity. |
|
|
176
|
-
| `parallel_rebuild_all` | **Bounded coverage** | Parallel specification, C# emission and compilation; consumers `genexus_lifecycle.build` / `rebuild`. `KBTeste` Rebuild All: 346/346 compiled, 0 skipped/refused; paired speed ratios below are `KBTeste`-only and do not establish full SDK parity. |
|
|
156
|
+
The MCP Gateway exposes an evidence gate (`EngineCapabilityRegistry`). See the
|
|
157
|
+
[current capability table](docs/engine_backend.md) for each bounded status,
|
|
158
|
+
consumer and evidence source. Runtime oracle fixtures, portable model tests and
|
|
159
|
+
live MCP compatibility are different kinds of evidence; none is an overall SDK
|
|
160
|
+
replacement percentage.
|
|
161
|
+
|
|
162
|
+
- Native-runtime oracle rows cover only their recorded inputs, encodings and
|
|
163
|
+
environment; synthetic library tests alone do not establish native parity.
|
|
164
|
+
- Admitted type-only queries and blocking builds/rebuilds are the current native
|
|
165
|
+
MCP surface. Reads and edits remain SDK-backed or fail closed; routing a call
|
|
166
|
+
to a deferral guard is not native implementation coverage.
|
|
167
|
+
- Storage decoding, navigation planning, object modeling and C# emission remain
|
|
168
|
+
partial. Unsupported database statements must fail generation rather than
|
|
169
|
+
produce a successful Procedure with missing database behavior.
|
|
170
|
+
|
|
171
|
+
The published 4.0.0 `KBTeste` result (346 compiled classes, 328 matching SDK C#
|
|
172
|
+
files and 20 extra files) is historical, bounded evidence. It is not a fresh
|
|
173
|
+
validation of later safety changes, all object families or whole-SDK behavior.
|
|
174
|
+
The [full-parity acceptance plan](plans/132-gxengine-full-parity.md) tracks the
|
|
175
|
+
remaining workflows and evidence required.
|
|
177
176
|
|
|
178
177
|
### ⚡ Performance Benchmarks (gx-engine vs. GeneXus SDK)
|
|
179
178
|
|
|
@@ -219,8 +218,8 @@ No backend setting is needed. To narrow routing to builds (`"auto"`) or turn the
|
|
|
219
218
|
```
|
|
220
219
|
|
|
221
220
|
- **`Engine.Backend`**: `"gxengine"` (default: admitted builds and field-limited type-only queries; reads/edits use SDK fallback), `"auto"` (admitted builds only), or `"sdk"` (SDK only, engine never invoked).
|
|
222
|
-
- **`Engine.Fallback`**: `"sdk"` (fallback to GeneXus SDK
|
|
223
|
-
- **Diagnostics**: `genexus_doctor` inspects the engine via `--version` handshake and reports an `engine` status block with `backend`, `available`, `version`, `capabilities
|
|
221
|
+
- **`Engine.Fallback`**: `"sdk"` (fallback to GeneXus SDK outside admitted native coverage) or `"error"` (fails closed: `EngineCapabilityNotParity` for evidence-gate rejection; `EngineOperationOutsideAdmittedSpace` for read/edit deferrals and unsupported query/build arguments).
|
|
222
|
+
- **Diagnostics**: `genexus_doctor` inspects the engine via `--version` handshake and reports an `engine` status block with `backend`, `available`, `version`, and `capabilities`. Its `routedOperations` lists served native operations; `deferredOperations` lists read/edit deferrals separately, never as parity.
|
|
224
223
|
|
|
225
224
|
To run compiler tests or standalone projects from checkout:
|
|
226
225
|
|
package/cli/docs.test.js
CHANGED
|
@@ -108,6 +108,12 @@ test('engine guidance separates package builds, fixture speed and full-KB covera
|
|
|
108
108
|
assert.ok(fs.existsSync(path.join(repoRoot, document)), `Missing agent document: ${document}`);
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
+
const artifactSkill = '.agents/skills/gxe-artifact-parity/SKILL.md';
|
|
112
|
+
assert.ok(guidance.includes(`](${artifactSkill})`), 'Missing artifact-parity skill pointer');
|
|
113
|
+
assert.match(read(artifactSkill), /^name: gxe-artifact-parity$/m);
|
|
114
|
+
assert.match(read(artifactSkill), /scripts\/artifact_diff\.py/);
|
|
115
|
+
assert.ok(fs.existsSync(path.join(repoRoot, 'src/gx-engine/scripts/artifact_diff.py')));
|
|
116
|
+
|
|
111
117
|
const engineReadme = read('src/gx-engine/README.md');
|
|
112
118
|
const engineCoverage = markdownSection(engineReadme, '## Build coverage and routing');
|
|
113
119
|
assert.match(engineCoverage, /full SDK replacement is not established/);
|
|
@@ -115,6 +121,32 @@ test('engine guidance separates package builds, fixture speed and full-KB covera
|
|
|
115
121
|
assert.match(engineReadme, /packaged binary was smoke-tested, not benchmarked/);
|
|
116
122
|
});
|
|
117
123
|
|
|
124
|
+
test('engine SQL authentication guidance distinguishes safe preflight fallback from replay', () => {
|
|
125
|
+
const guide = read('docs/engine_backend.md');
|
|
126
|
+
const auth = markdownSection(guide, '## SQL authentication (issue #635)');
|
|
127
|
+
assert.match(auth, /SQLCMDUSER/);
|
|
128
|
+
assert.match(auth, /SQLCMDPASSWORD/);
|
|
129
|
+
assert.match(auth, /private credential store/);
|
|
130
|
+
assert.match(auth, /exit \*\*5\*\*/);
|
|
131
|
+
assert.match(auth, /sql_credentials_unavailable/);
|
|
132
|
+
assert.match(auth, /EngineSqlCredentialsUnavailable/);
|
|
133
|
+
assert.match(auth, /must not\s+trigger automatic SDK build replay/);
|
|
134
|
+
const auto = markdownSection(guide, '### Exactly what `auto` routes');
|
|
135
|
+
assert.match(auto, /compile_check callers=false includeCallees=transitive/);
|
|
136
|
+
assert.match(auto, /Whole-KB/);
|
|
137
|
+
assert.match(auto, /estimated_seconds/);
|
|
138
|
+
assert.match(auto, /Read, query, edit/);
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
test('engine capability guidance does not duplicate synthetic parity claims', () => {
|
|
142
|
+
const section = markdownSection(read('README.md'), '#### Gateway Capability Registry Gates');
|
|
143
|
+
assert.match(section, /\[current capability table\]\(docs\/engine_backend\.md\)/);
|
|
144
|
+
assert.doesNotMatch(section, /\|\s*`[^`]+`[^\n]*\*\*Parity\*\*/);
|
|
145
|
+
assert.match(section, /deferral guard is not native implementation coverage/);
|
|
146
|
+
assert.match(section, /historical, bounded evidence/);
|
|
147
|
+
assert.match(section, /plans\/132-gxengine-full-parity\.md/);
|
|
148
|
+
});
|
|
149
|
+
|
|
118
150
|
test('engine default policy is gxengine and preserves auto/SDK opt-out and reconciliation', () => {
|
|
119
151
|
const section = markdownSection(read('README.md'), '### Activation Flag & Safety Seam');
|
|
120
152
|
assert.match(section, /defaults to `"gxengine"`/);
|
|
@@ -128,6 +160,13 @@ test('engine default policy is gxengine and preserves auto/SDK opt-out and recon
|
|
|
128
160
|
assert.match(section, /`"auto"` routes only builds/);
|
|
129
161
|
assert.match(section, /`"sdk"` keeps every operation on the SDK/);
|
|
130
162
|
assert.match(section, /never trigger automatic SDK replay/);
|
|
163
|
+
assert.match(section, /EngineCapabilityNotParity.*evidence-gate rejection/);
|
|
164
|
+
assert.match(section, /EngineOperationOutsideAdmittedSpace.*read\/edit deferrals/);
|
|
165
|
+
for (const document of ['src/gx-engine/README.md', 'docs/engine_backend.md']) {
|
|
166
|
+
const text = read(document);
|
|
167
|
+
assert.match(text, /planning skips.*Partial|Partial when skipped during planning/);
|
|
168
|
+
assert.match(text, /checked-emission errors.*Failed/);
|
|
169
|
+
}
|
|
131
170
|
assert.match(section, /admitted type-only `genexus_query` calls/);
|
|
132
171
|
assert.match(section, /all reads/);
|
|
133
172
|
assert.match(backend, /No read shape is currently admitted/);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "genexus-mcp",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.1",
|
|
4
4
|
"mcpName": "io.github.lennix1337/genexus",
|
|
5
5
|
"description": "GeneXus 16, GeneXus 17, GeneXus 18 MCP server with native SDK support; basic legacy compatibility for GeneXus Evolution 3, GeneXus Evolution 2, GeneXus Evolution 1, GeneXus 15, GeneXus 9.0, GeneXus 8.0 via com-gxpublic and dotnet-reflection drivers — read, edit, and analyze Knowledge Base objects directly from Claude, Cursor, and other AI agents over the Model Context Protocol.",
|
|
6
6
|
"keywords": [
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"targets": {
|
|
8
8
|
".NETCoreApp,Version=v10.0": {},
|
|
9
9
|
".NETCoreApp,Version=v10.0/win-x64": {
|
|
10
|
-
"GxMcp.Gateway/4.0.
|
|
10
|
+
"GxMcp.Gateway/4.0.1": {
|
|
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/4.0.
|
|
69
|
+
"GxMcp.Gateway/4.0.1": {
|
|
70
70
|
"type": "project",
|
|
71
71
|
"serviceable": false,
|
|
72
72
|
"sha512": ""
|
|
Binary file
|
|
Binary file
|
package/publish/config.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"ConfigSchemaVersion": 2,
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"WorkerExecutable": "worker\\\\GxMcp.Worker.exe"
|
|
3
|
+
"Environment": {
|
|
4
|
+
"ResolutionPolicy": "strict"
|
|
6
5
|
},
|
|
7
6
|
"GatewayMode": "stdio-isolated",
|
|
7
|
+
"GeneXus": {
|
|
8
|
+
"WorkerExecutable": "worker\\\\GxMcp.Worker.exe",
|
|
9
|
+
"InstallationPath": "C:\\Program Files (x86)\\GeneXus\\GeneXus18"
|
|
10
|
+
},
|
|
8
11
|
"Server": {
|
|
9
12
|
"WorkerIdleTimeoutMinutes": 5,
|
|
13
|
+
"HttpPort": 0,
|
|
14
|
+
"TerseResponses": true,
|
|
10
15
|
"EmitStructuredContent": false,
|
|
11
16
|
"McpStdio": true,
|
|
12
|
-
"SessionIdleTimeoutMinutes": 10
|
|
13
|
-
"TerseResponses": true,
|
|
14
|
-
"HttpPort": 0
|
|
15
|
-
},
|
|
16
|
-
"Environment": {
|
|
17
|
-
"ResolutionPolicy": "strict"
|
|
17
|
+
"SessionIdleTimeoutMinutes": 10
|
|
18
18
|
}
|
|
19
19
|
}
|
package/publish/gx-engine.exe
CHANGED
|
Binary file
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "gxmcp-release-manifest/1",
|
|
3
|
-
"version": "4.0.
|
|
4
|
-
"sourceCommit": "
|
|
3
|
+
"version": "4.0.1",
|
|
4
|
+
"sourceCommit": "290aff51e3a7c810619eaed2cc5059622eb0939b",
|
|
5
5
|
"sourceCommitPolicy": "exact-tag",
|
|
6
|
-
"generatedAtUtc": "2026-10-
|
|
6
|
+
"generatedAtUtc": "2026-10-21T18:49:57.9694364Z",
|
|
7
7
|
"runtime": {
|
|
8
8
|
"gateway": "net10.0-windows",
|
|
9
9
|
"worker": "net48-x86",
|
|
@@ -21,17 +21,17 @@
|
|
|
21
21
|
{
|
|
22
22
|
"path": "gxmcp-sbom.json",
|
|
23
23
|
"size": 590,
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "fb7abeca06e3c06c0a4dc346c86e0b1dad5056ef1c442a99feab4cc2b5ae187f"
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
"path": "GxMcp.Gateway.exe",
|
|
28
28
|
"size": 162304,
|
|
29
|
-
"sha256": "
|
|
29
|
+
"sha256": "e829a6ba15543bf92c65d1ab59bce6c480133e622de30e3d33c18cf09604911b"
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
"path": "nexus-ide.vsix",
|
|
33
|
-
"size":
|
|
34
|
-
"sha256": "
|
|
33
|
+
"size": 1325111,
|
|
34
|
+
"sha256": "b872a9df865037e84d2188247d374485a4de2681d2a4c861a5e411a1c5b7dda2"
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
"path": "tool_definitions.json",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
"path": "worker/GxMcp.Worker.exe",
|
|
43
|
-
"size":
|
|
44
|
-
"sha256": "
|
|
43
|
+
"size": 4594688,
|
|
44
|
+
"sha256": "1427ffb13fd69b0f72ea3bac949f53dd67f510d327426dd4b1c9ef55989b5eaf"
|
|
45
45
|
}
|
|
46
46
|
]
|
|
47
47
|
}
|
package/publish/gxmcp-sbom.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "gxmcp-provenance/1",
|
|
3
|
-
"version": "4.0.
|
|
4
|
-
"sourceCommit": "
|
|
3
|
+
"version": "4.0.1",
|
|
4
|
+
"sourceCommit": "290aff51e3a7c810619eaed2cc5059622eb0939b",
|
|
5
5
|
"sourceCommitPolicy": "exact-tag",
|
|
6
6
|
"components": [
|
|
7
7
|
{
|
|
8
8
|
"name": "genexus-mcp",
|
|
9
9
|
"lockfile": "package-lock.json",
|
|
10
10
|
"size": 38804,
|
|
11
|
-
"sha256": "
|
|
11
|
+
"sha256": "db0291b993484bcc255896278ba1416ebaaae00b4afb0d97b73e357d41f67016"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
"name": "nexus-ide",
|
|
15
15
|
"lockfile": "src/nexus-ide/package-lock.json",
|
|
16
16
|
"size": 179503,
|
|
17
|
-
"sha256": "
|
|
17
|
+
"sha256": "030671cb319b730ab2c6893ff540b8809e7aefc7df1d2b97631a46315786c977"
|
|
18
18
|
}
|
|
19
19
|
]
|
|
20
20
|
}
|
package/publish/gxwire.exe
CHANGED
|
Binary file
|
package/publish/nexus-ide.vsix
CHANGED
|
Binary file
|
|
Binary file
|