Skip to content

MCP-KittoX: the MCP server

Kittox Enterprise feature

MCP-KittoX is part of the Kittoˣ Enterprise edition and ships together with KIDEx. It uses the same OnGuard license file (%CSIDL_COMMON_DOCUMENTS%\Ethea\KIDEX\Registration.ini) — a single registration unlocks both. See the Feature Matrix for the full comparison with the Open-Source edition.

MCP-KittoX is a standalone executable (MCPKittoX.exe) that exposes the functionality of KIDEx to AI agents — Claude Desktop, Claude Code, Codex, LM Studio and any other client compatible with the Model Context Protocol.

While KIDEx remains the human-facing visual IDE, MCP-KittoX is the AI-facing design tool: agents can scaffold new applications, reverse- engineer Models from a database, generate Views and Layouts, validate metadata, and refresh translation files — all conversationally, without leaving the agent.

Why use it

  • Fast onboarding: an agent can create a complete Kittox app scaffold ("scaffold an app named MyApp under D:\Dev with FireDAC, JWT auth and all 4 deployment modes") without you opening RAD Studio or KIDEx.
  • Assisted maintenance: ask the agent to validate the project, refresh the .po translation files, or propagate database schema changes back into the Model YAML files.
  • Enterprise differentiator: pair the visual IDE with an AI tool — the same way a developer pairs an IDE with an LLM-powered code assistant.

Quick start

After installing KIDEx Enterprise (which deploys MCPKittoX.exe to the same Bin\ folder as KIDEX.exe) and registering the OnGuard license, wire your MCP client:

Claude Desktop / Codex (STDIO transport)

%APPDATA%\Claude\claude_desktop_config.json (Windows):

json
{
  "mcpServers": {
    "kittox": {
      "command": "C:\\Program Files\\Ethea\\KIDEX\\Bin\\MCPKittoX.exe",
      "args": ["--stdio", "--workspace=D:\\Dev\\KittoXProjects"]
    }
  }
}

Restart Claude Desktop. The agent will discover all the tools registered by the server (currently 9 — see the Feature Matrix below) and use them autonomously when you ask for Kittox development tasks.

Test the connection

MCPKittoX.exe --version

prints MCP-KittoX 4.0.7 and exits with code 0. From a JSON-RPC client (or MCPJam Inspector), invoke meta_version to verify the license check passes:

json
{
  "name": "MCP-KittoX",
  "version": "4.0.7",
  "build_date": "2026-05-07",
  "mcp_spec": "2025-06-18",
  "kittox_version": "4.0.7",
  "license_status": "(Trial version. Expiration days: 30)"
}

Conversational example: scaffold + reverse-engineer Models

A typical end-to-end interaction once the MCP server is wired:

You"Scaffold a new Kittox app named Northwind2 under D:\Dev\Examples, then point me at the SQL Server Northwind database and generate Models for every table."

Agent

  1. Calls project_create_app (project_name Northwind2, template Basic). The wizard's defaults kick in: Auth: TextFile with the demo FileAuthenticator.txt (admin/admin), JWT envelope, AccessControl: Null.
  2. Asks you to edit Home\Metadata\Config.yaml so Databases.Main points at your SQL Server (or you tell the agent how it's reachable and it edits the file via your IDE).
  3. Calls project_open on the freshly-generated .kproj.
  4. Calls models_create_from_db with dry_run: true and shows you the proposed action tree — typically N add_model actions and a few hundred add_field / add_reference_field sub-actions.
  5. After your OK, calls models_create_from_db again with dry_run: false — this time the tool executes the actions and writes the YAML files to Home\Metadata\Models\. Returns applied: true and a summary.
  6. Suggests the next step (open the project in KIDEx or RAD Studio, run the DataView Wizard to scaffold List/Form views, or ask for it conversationally once the relevant tools are added to the next Phase).

The whole exchange runs without you opening RAD Studio or KIDEx — the agent uses MCP-KittoX's tools the same way it would use a filesystem or a shell tool, and the resulting Models/ is identical to what the Model Wizard would have written if you'd driven it visually.

Architecture

AspectImplementation
LibraryMCPConnect (delphi-blocks, MIT) — attribute-driven, multi-transport
SerializationNeon (MIT) — RTTI-based JSON, snake_case field naming
LoggingLogify (MIT) — meta-logging facade
Transport (current)STDIO (Claude Desktop, Codex)
Transport (planned)Indy HTTP (LM Studio, web-based clients)
MCP spec2025-06-18
Naming conventionsnake_case for tool args/results, plural scope for collections (models_list), singular-typed scope for typed creators (view_grid_create)
License gateOnGuard, shared with KIDEx; every tool method calls EnsureLicensed first; unlicensed → EKXLicenseError (EJRPCException) → JSON-RPC error visible to client

The server is a standalone executable, not embedded in your Kittox runtime nor inside KIDEx. Agents talk to it; KIDEx continues to be the human visual IDE. Both share a common headless layer so that — for instance — the models_create_from_db tool produces a Models/ folder byte-identical to what the Model Wizard writes when driven manually.

Feature Matrix

The following table tracks the implementation status of each MCP tool. Tools are organised by scope: collections use plural names (e.g. models, views) for browse/CRUD operations; typed creators use singular per-controller scopes (e.g. view_grid, view_chart) so the tool surface can grow additively without breaking changes.

Implemented (Phases 1 → 3)

ScopeToolDescriptionStatus
metameta_versionServer identity, build date, MCP spec, license status✅ Done
metameta_capabilitiesRegistered tool scopes + runtime feature flags (readonly, allow-update, allow-delete, workspace root)✅ Done
metameta_list_metadata_templatesList the YAML templates KIDEx uses as design-time defaults✅ Done
projectproject_openOpen a Kittox project (.kproj file or Home/ folder)✅ Done
projectproject_infoSnapshot of the currently-open project✅ Done
projectproject_list_appsList the application configs (Config.yaml variants)✅ Done
projectproject_closeClose the currently-open project✅ Done
projectproject_create_appGenerate a new app from a template (Empty / Basic), with full parametrization: DB drivers, auth + JWT envelope, access control, server settings, deployment modes (Standalone / Desktop / ISAPI / Apache), language, charset, theme. Default Auth: TextFile ships with a ready-to-use FileAuthenticator.txt so the generated app authenticates without a users table✅ Done
modelsmodels_create_from_dbReverse-engineer Models from a database connection (the headless equivalent of the Model Wizard inside KIDEx). Reads the live schema, diffs it against the open project's Models/, and returns the proposed action tree. Defaults to dry_run: true (preview only); pass dry_run: false to commit. Output is byte-identical to what the visual Model Wizard would write✅ Done

Planned (Phase 4 and beyond)

ScopeToolDescriptionStatus
modelsmodels_listList all Models in the active project⏳ Todo
modelsmodels_readRead a Model YAML by name⏳ Todo
modelsmodels_generate_ddlForward-engineer CREATE/ALTER TABLE from a Model⏳ Todo
modelsmodels_apply_to_dbExecute generated DDL against the database (with two-step confirmation)⏳ Todo
modelsmodels_updateUpdate an existing Model (opt-in, two-step confirmation)⏳ Todo
modelsmodels_patch_nodeGranular edit of a single Model YAML node⏳ Todo
modelsmodels_deleteDelete a Model (opt-in, two-step confirmation with reference impact)⏳ Todo
viewsviews_listList all Views⏳ Todo
viewsviews_readRead a View YAML⏳ Todo
viewsviews_controllersDiscovery — list creatable view controller types⏳ Todo
viewsviews_updateUpdate an existing View (opt-in)⏳ Todo
viewsviews_deleteDelete a View (opt-in, with reference check)⏳ Todo
view_gridview_grid_createScaffold a GridPanel view from a Model⏳ Todo
view_listview_list_createScaffold a List view from a Model⏳ Todo (future)
view_grouping_listview_grouping_list_createScaffold a GroupingList view⏳ Todo (future)
view_chartview_chart_createScaffold a ChartPanel view (bar/line/pie/doughnut)⏳ Todo (future)
view_calendarview_calendar_createScaffold a CalendarPanel view⏳ Todo (future)
view_googlemapview_googlemap_createScaffold a GoogleMap view⏳ Todo (future)
view_template_dataview_template_data_createScaffold a TemplateDataPanel view⏳ Todo (future)
layoutslayouts_list / read / update / deleteLayout CRUD⏳ Todo
configconfig_readRead Config.yaml (sensitive fields auto-sanitized)⏳ Todo
configconfig_updateUpdate Config.yaml (opt-in)⏳ Todo
configconfig_patch_nodeGranular edit⏳ Todo
validatevalidate_allRun all validators (Config + Models + Views + Layouts)⏳ Todo (Phase 3)
validatevalidate_config / models / views / layoutsTargeted validation⏳ Todo
localelocale_list_languagesList .po files in Resources/locale/⏳ Todo
localelocale_read_poRead a .po file⏳ Todo
localelocale_update_filesRun Update Locale Files headlessly: extract translatable strings from YAML metadata + Delphi sources, merge with existing .po files preserving translations⏳ Todo (Phase 3)
dbdb_list_connectionsList connections defined in Config.yaml⏳ Todo
dbdb_testTest a connection⏳ Todo
dbdb_introspectSnapshot DB schema⏳ Todo
dbdb_list_tablesList tables of a connection⏳ Todo
dbdb_describe_tableDetailed table info (columns, PK, FK, indexes)⏳ Todo
menumenu_generate_main_menuGenerate Views/MainMenu.yaml from existing Models with sensible folder grouping (the placeholder folder shipped by the Basic template is meant to be filled by this tool)⏳ Todo
resourcesresources_list / read / refreshManage Home/Resources/ files⏳ Todo

Safety: write operations are opt-in

By default MCPKittoX.exe exposes read tools only. Update operations require --allow-update on the command line; delete operations require --allow-delete. Delete tools further follow a two-step preview→confirm pattern: a first call with confirm: false returns the impact (would_delete, references_count, would_break: [...]); a second call with confirm: true actually executes, only if the preview is still in cache for the session.

Workspace sandboxing (--workspace=PATH) prevents path traversal outside an allowed root.

CLI flags

MCPKittoX.exe [options]

Transport:
  --stdio                 STDIO transport (default — for Claude Desktop, Codex)
  --http                  Indy HTTP transport (planned)
  --port=PORT             HTTP port (default 4000, ignored in --stdio)
  --bind=ADDRESS          HTTP bind address (default 127.0.0.1)

Project:
  --project=PATH          Project to open at startup (optional)
  --workspace=PATH        Sandbox root — projects must live underneath

Security:
  --api-key=KEY           API key required for HTTP transport
  --readonly              Disable all write tools (creates / updates / deletes)
  --allow-update          Enable *_update tools (off by default)
  --allow-delete          Enable *_delete tools (off by default)

Diagnostics:
  --log-file=PATH         Logify file destination
  --log-level=LEVEL       debug | info | warn | error (default info)
  --version               Print version and capabilities, exit

License status

When the server starts, the OnGuard license check runs. The result is:

  • printed to stderr as a one-line banner (visible when running interactively):
    [LICENSE] (Trial version. Expiration days: 30)
    [LICENSE] Software registered to "Carlo Barazzetta".
    [LICENSE] Unregistered version! You must acquire license from "support@ethea.it"
  • exposed in the JSON-RPC meta_version response under license_status (so an agent can read it and warn the user when expiration is approaching).

If the license is invalid, every tool method throws an EKXLicenseError that propagates through the JSON-RPC envelope as a structured error:

json
{"error":{"code":-32603,"message":"Unregistered version! You must acquire license from \"support@ethea.it\""},"id":2,"jsonrpc":"2.0"}

The server still answers initialize and tools/list so the client can show the tool catalog — but no tool can be invoked successfully until KIDEx is registered.

See also

Released under Apache License, Version 2.0.