Skip to content

xpp-graft 1.2.0

Choose a tag to compare

@willowdev-code willowdev-code released this 06 Oct 14:45
· 7 commits to main since this release

X++ (Dynamics 365 F&O) code index served to AI assistants over MCP.

Install

Download xpp-graft-1.2.0.zip, unzip it and run in a regular (non-admin) PowerShell:

powershell -ExecutionPolicy Bypass -File .\xpp-graft\install.ps1 -Languages en-US,pl

Self-contained build - no .NET required on the target machine. See the README for all options.

Upgrading from 1.1

Run install.ps1 from the new package (or build.ps1 -Deploy from source) and restart Claude. Custom models are
re-parsed once at the next start (about a minute); the standard tier is re-indexed once in the background
(up to about an hour on slow disks, resumable) - xpp_status shows the progress. The index grows to about 1 GB.

Added

  • Usage statistics: every MCP call is logged locally (%LOCALAPPDATA%\xpp-graft\usage); xppgraft stats shows
    tokens, time and empty answers per tool, the largest and slowest calls and the latest empty answers.
    xppgraft config --usage-log false switches it off.
  • Several lookups in one call: xpp_find and xpp_object take names separated by ;; xpp_method takes
    method="a;b" or objectName="Obj.method;Obj2::method".
  • Method fragments: xpp_method with match (regex) and/or lines returns only those lines with context,
    numbered with file lines; the signature and variable declarations are always included, skipped parts are marked.
    Long methods returned in full carry a hint about it.
  • Callers inside Microsoft code: the standard tier now stores call references (calls, new, intrinsics) —
    xpp_callers lists them after custom code; standard=false leaves them out. About +300 MB of index;
    xppgraft config --standard-code false keeps the old dictionary-only standard tier.
  • Chained calls: Table::find(x).method(), a.b().c(), new T().m() and var x = A::b() are typed from method
    return types — in xpp_callers, xpp_refs (with member) and xpp_callees.
  • New tools:
    • xpp_scaffold — CoC wrapper (exact signature, default values removed, warnings for private / final /
      non-wrappable methods), table / form / data source / control / field event handlers with parameters learned from
      existing handlers, delegate subscribers, pre/post handlers; class names follow the pattern found in your models.
    • xpp_build_errors — errors and warnings from BuildModelResult.xml mapped to XML file lines, flags files changed
      after the build.
    • xpp_security — menu item / form → privileges (granted access) → duties → roles, and privilege / duty / role views.
    • xpp_join — shortest relation path between two tables as a ready X++ join.
    • xpp_entity — data entity overview (public names, staging, data source tree with joins, field mapping, keys)
      or the entities that use a table.
    • xpp_changed — objects changed on disk since a time, per model.
  • Matching CLI commands: scaffold, build-errors, security, join, entity, changed, stats;
    method --match/--lines/--context, callers --standard false.
  • xUnit test project (tests/XppGraft.Tests) with neutral sample AOT XML; runs in Visual Studio Test Explorer or
    with dotnet test.
  • Visual Studio launch profiles for the new commands.

Changed

  • Analyzer upgrades re-parse custom models once at start-up and re-index the standard tier once in the background,
    package by package (an interrupted run resumes) — no manual rebuild after updating.
  • Parser: data entity keys, query / entity data source joins (on Field=DataSource.Field) and data source tree,
    privilege entry point grants (grant=Read,Update,…).
  • Tool descriptions no longer contain installation-specific examples.
  • The release package also ships CHANGELOG.md and LICENSE; build.ps1 -Test runs the tests before building.
  • The WAL file is trimmed after checkpoints (journal_size_limit), so a large rebuild does not leave it at peak size.

Released under the MIT License.