Repository navigation
Releases: willowdev-code/xpp-lens
Release list
xpp-lens 1.2.5
X++ (Dynamics 365 F&O) code index served to AI assistants over MCP.
Install
Download xpp-lens-1.2.5.zip, unzip it and run in a regular (non-admin) PowerShell:
powershell -ExecutionPolicy Bypass -File .\xpp-lens\install.ps1 -Languages en-US,plSelf-contained build - no .NET required on the target machine. Already installed? Close Claude and run
xpplens update --install (available from 1.2.2), or install.ps1 from this package - your settings and
index are kept.
Changes
Changed
- Updating no longer needs Claude to be closed. The installer does not stop running
xpplens.exeprocesses any
more: a file in use is renamed to*.old, so open sessions keep working on the old version and new sessions start
the new one; the next start of xpplens deletes the leftovers. At the end the installer offers to restart Claude
Desktop;xpplens update --install --restart-claude(install.ps1 -RestartClaude) does it without asking.
Claude Code processes in terminals are never stopped. xpp_grepaccepts several names separated by;inobjectNameandmodel, like the other tools. The answer
for standard code without a scope, or with too large a scope, points toxpp_refs/xpp_callersfor names.- The release package stores its paths with
/, as the ZIP format requires. - GitHub Actions:
actions/checkoutv7 andactions/setup-dotnetv6 (Node 24).
Fixed
- Command line options:
-installwas silently ignored (only--installwas known), soxpplens update -install
only checked for the update. Options now work with one or two dashes and as--name=value, may come before the
arguments, and an unknown option or a missing value stops with an error that lists the options of the command.
Released under the MIT License.
xpp-lens 1.2.4
X++ (Dynamics 365 F&O) code index served to AI assistants over MCP.
Install
Download xpp-lens-1.2.4.zip, unzip it and run in a regular (non-admin) PowerShell:
powershell -ExecutionPolicy Bypass -File .\xpp-lens\install.ps1 -Languages en-US,plSelf-contained build - no .NET required on the target machine. Already installed? Close Claude and run
xpplens update --install (available from 1.2.2), or install.ps1 from this package - your settings and
index are kept.
Changes
Added
xpp_build_errorsreads the result of a Visual Studio project build (BuildProjectResult.xml) next to that of the
model build. The header shows both build times and the time of the model DLL. Diagnostics of the newer build come
first and replace those of the model build for the same objects.xpp_build_errorslists the objects changed after the newest build, which are not compiled yet. After a project
build it also lists the objects changed between the model build and the project build, which are compiled only if
they are in the project. This answers "did my build take everything?" in one call.xpp_changed since=build(xpplens changed --since build): per package, the objects changed after its last build.
Changed
xpplens status/xpp_statusstart with the xpp-lens version (and an available update) and show the index tiers
and counts as tables. The console gets box-drawing frames; output redirected to a file or a pipe, or--ascii, gets
+-|frames;xpp_statusreturns Markdown tables. Numbers are grouped by thousands; long model lists come last.
Fixed
- After a project build,
xpp_build_errorsshowed the older model build as the latest result. Objects changed after
the build were marked only when they had a diagnostic; with a clean build they were not mentioned at all.
Released under the MIT License.
xpp-lens 1.2.3
X++ (Dynamics 365 F&O) code index served to AI assistants over MCP.
Install
Download xpp-lens-1.2.3.zip, unzip it and run in a regular (non-admin) PowerShell:
powershell -ExecutionPolicy Bypass -File .\xpp-lens\install.ps1 -Languages en-US,plSelf-contained build - no .NET required on the target machine. Already installed? Close Claude and run
xpplens update --install (available from 1.2.2), or install.ps1 from this package - your settings and
index are kept.
Changes
Fixed
xpp_build_errorspointed at wrong lines: the compiler numbers lines through the object's whole code (the
declaration without its closing brace, then every method in file order), not from the start of the method. Lines
are now translated that way and accepted only when they fall into the method the compiler named. Metadata
diagnostics (form designs, controls, form extensions) show the object's file and the element instead of a raw path.
Methods of form data sources and controls show where the method starts; their exact line is not mapped yet.
Released under the MIT License.
xpp-lens 1.2.2
X++ (Dynamics 365 F&O) code index served to AI assistants over MCP.
Install
Download xpp-lens-1.2.2.zip, unzip it and run in a regular (non-admin) PowerShell:
powershell -ExecutionPolicy Bypass -File .\xpp-lens\install.ps1 -Languages en-US,plSelf-contained build - no .NET required on the target machine. Already installed? Close Claude and run
xpplens update --install (available from 1.2.2), or install.ps1 from this package - your settings and
index are kept.
Changes
Added
xpplens updatechecks GitHub for a newer release;xpplens update --installdownloads it, verifies its SHA-256
digest and runs its installer, keeping settings and index.statusmentions an available update found by the
last check. This is the only network access of xpp-lens and happens only when the command is run.- Automated releases: pushing a tag
vX.Y.Zruns the tests, checks the tag against the project version, builds
the package and publishes the release with its notes taken from this file (release-notes.ps1). - Continuous integration: GitHub Actions builds the solution and runs the tests on Windows for every push and pull request.
SECURITY.mdand issue forms for bug reports and feature requests, which ask not to share customer code or data.
Changed
xpplens status/xpp_statusno longer count all references and labels (tens of seconds on a cold disk);
--counts/counts=trueshows them. A standard tier that is listed but not indexed is explained, with the
command that indexes it.xpplens build --std-onlyswitchesindexStandardon when an installation was made without the standard tier.- Running
install.ps1over an existing installation keeps its label languages andPackagesLocalDirectory
unless-Languages/-PackagesDirare given.
Fixed
- Taking over an xpp-graft installation could leave the index behind and build a new one from scratch. The index
files are now moved one by one byxpplens migrateand checked; when they cannot be moved (in use, or the new
folder already holds an index) the new configuration keeps using the old index where it is.
Released under the MIT License.
xpp-lens 1.2.1
X++ (Dynamics 365 F&O) code index served to AI assistants over MCP — formerly xpp-graft.
Install
Download xpp-lens-1.2.1.zip, unzip it and run in a regular (non-admin) PowerShell:
powershell -ExecutionPolicy Bypass -File .\xpp-lens\install.ps1 -Languages en-US,plSelf-contained build - no .NET required on the target machine. See the README for all options.
Upgrading from xpp-graft
Close Claude and run install.ps1 from this package (without -Languages, to keep your current languages). It takes
over C:\Tools\xpp-graft: settings, the index and the usage log move to %LOCALAPPDATA%\xpp-lens without a rebuild,
and the old MCP entry is replaced by xpp-lens. Delete C:\Tools\xpp-graft afterwards.
Changed
- Renamed from xpp-graft to xpp-lens, to avoid confusion with the unrelated
Graft project. Programxpplens.exe, MCP serverxpp-lens, configuration
xpplens.json, default foldersC:\Tools\xpp-lensand%LOCALAPPDATA%\xpp-lens, environment variables
XPPLENS_CONFIG/XPPLENS_VERBOSE/XPPLENS_TIMING/XPPLENS_USAGE. The MCP tool names (xpp_find, …)
are unchanged. install.ps1takes over an existing xpp-graft installation: settings (incl. label languages), the index and the
usage log move over without a rebuild, and the old MCP entries are removed. The old folder is left for you to delete.- Release packages are named after the version (
xpp-lens-1.2.1.zip) and carry no debug information.
All other features are as in 1.2.0 — see the 1.2.0 release.
An independent project, inspired by Graft. Released under the MIT License.
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.
xpp-graft 1.1.0
X++ (Dynamics 365 F&O) code index served to AI assistants over MCP.
Install
Download xpp-graft-1.1.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.
Highlights
- Three index tiers: custom models (full code references), Microsoft standard (dictionary), compiled-only packages (from
.xref,bin\*.mdand resource DLLs). xpp_statuslists packages that are on disk but not indexed.- Control and menu trees with
parent/depth/filterand full control paths; menu extensions show their target menu and position. - Literal underscore in name searches; dotted extension names (e.g.
*Staging.Contoso) found as objects. - Index follows the files on disk (watcher + rescan) - no git required, works with TFVC workspaces.
- Read-only index detection with live-parse fallback.
Released under the MIT License.