Repository navigation
xpp-graft 1.2.0
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,plSelf-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 statsshows
tokens, time and empty answers per tool, the largest and slowest calls and the latest empty answers.
xppgraft config --usage-log falseswitches it off. - Several lookups in one call:
xpp_findandxpp_objecttake names separated by;;xpp_methodtakes
method="a;b"orobjectName="Obj.method;Obj2::method". - Method fragments:
xpp_methodwithmatch(regex) and/orlinesreturns 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_callerslists them after custom code;standard=falseleaves them out. About +300 MB of index;
xppgraft config --standard-code falsekeeps the old dictionary-only standard tier. - Chained calls:
Table::find(x).method(),a.b().c(),new T().m()andvar x = A::b()are typed from method
return types — inxpp_callers,xpp_refs(withmember) andxpp_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 fromBuildModelResult.xmlmapped 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
withdotnet 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.mdandLICENSE;build.ps1 -Testruns 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.