xaf-logic-explainer
XAF Logic Explainer
Bringen Sie Ihrem KI-Coding-Agenten bei, was Ihre XAF-Anwendung tatsächlich tut.
Richten Sie es auf ein XAF-Modul. Es liest Ihre Entitäten, Controller, Aktionen, Geschäftsregeln, Navigation und Model-Editor-Anpassungen direkt aus dem Quellcode – und übergibt das Ergebnis an jeden Agenten, mit dem Sie codieren.
Warum es das gibt
DevExpress hat hervorragende Arbeit geleistet, um KI-Agenten mit XAF vertraut zu machen. Zwei Komponenten existieren bereits, und dies ist die dritte:
Lehrt den Agenten… | Werkzeug |
Wie XAF allgemein funktioniert | |
Was die offizielle Dokumentation sagt | |
Was IHRE Anwendung tut | XAF Logic Explainer ← Sie sind hier |
Ein Agent, der jede Seite der XAF-Dokumentation gelesen hat, weiß immer noch nicht, dass Ihre
Invoice-Summe aus ihren Positionen berechnet wird, dass ApproveController sich weigert,
ausgeführt zu werden, wenn der Zeitraum abgeschlossen ist, oder dass drei Spalten im Model-Editor
ausgeblendet wurden und in keiner C#-Datei vorkommen. Er wird alle drei selbstbewusst erfinden.
Diese Lücke ist nicht durch besseres Prompting zu schließen. Sie ist durch Extraktion zu schließen.
Diese Werkzeuge ergänzen sich. Installieren Sie die DevExpress-Fähigkeiten für Framework-Wissen, verwenden Sie den Docs MCP für die offizielle Referenz, und dieses hier für Ihre eigene Codebasis. Keines ersetzt die anderen.
Related MCP server: mcp-digger
Was es extrahiert
Alles unten wird als Syntax gelesen, mit Roslyn. Ihr Projekt muss nie kompilieren, und dieses Werkzeug verlinkt nie gegen DevExpress-Assemblys:
Entitäten — Eigenschaften, Typen, Assoziationen und die XAF-Attribute, die ihnen Bedeutung verleihen (
[Association],[Aggregated],[RuleRequiredField],[Appearance],[ModelDefault], …). XPO und EF Core, automatisch erkannt aus Ihrenusing-Anweisungen.Controller und Aktionen —
SimpleAction,PopupWindowShowAction,SingleChoiceAction, ihre Zielkriterien und der Handler-Code, der bei ihrer Ausführung läuft.Geschäftsregeln — Validierungsattribute und Code-Regeln, mit den angehängten Bedingungen.
Modul-Setup —
ModuleUpdater-Seed-Daten und was bei der ersten Ausführung erstellt wird.Navigation — die Gruppen und Elemente, die Ihre Benutzer tatsächlich sehen.
Model-Editor (
.xafml) — die Anpassungen, die nur in XML existieren und für jeden, der Ihr C# liest, unsichtbar sind. Modul- und Plattformdateien werden so zusammengeführt, wie XAF sie zusammenführt.Benutzerdefinierte Eigenschafts- und Listeneditoren — einschließlich des JavaScripts, ohne das sie nicht funktionieren, und integrierte Editoren, die zur Laufzeit über
View.CustomizeViewItemControl<T>()neu konfiguriert werden. Diese leben im Plattformprojekt neben dem Modul, sodass sie niemandem begegnen, der die Geschäftsobjekte liest.Versionierte Migrationen — die
CurrentDBVersion < new Version(…)-Blöcke in Ihrem Updater. Jeder wird höchstens einmal pro Datenbank ausgeführt und ist die einzige Erklärung für Daten, die der aktuelle Code nicht erklären kann.Jeder Bildschirm und was darauf geladen wird — siehe unten.
Dies sind die Gründe, warum ein Agent, der jede Geschäftsklasse gelesen hat, immer noch selbstbewusst falsch über die Anwendung liegen kann:
Was läuft, wenn Sie diesen Bildschirm öffnen
Nichts in einem XAF-Repository beantwortet das, und beide Hälften fehlen aus unterschiedlichen Gründen.
Die Bildschirme selbst sind in keiner Datei. XAF generiert eine Listen-, eine Detail- und eine
Lookup-Ansicht für jede Geschäftsklasse, plus eine Listenansicht für jede Sammlung, und der
Model-Editor speichert nur diejenigen, die jemand geändert hat. Ein Grep nach
Patient_Prescriptions_ListView in Ihrem Quellcode findet nichts – und das ist kein Beweis dafür,
dass sie fehlt.
Welche Controller dort laufen, wird zur Laufzeit entschieden, durch vier Bedingungen, die XAF UND-verknüpft: Verschachtelung, Ansichtstyp, Objekttyp und Ansichts-ID. Jede ist uneingeschränkt, wenn nicht gesetzt, sodass ein Controller, der keine davon setzt, auf jeden Ihrer Bildschirme geladen wird.
Dies liest alle vier, so wie ViewController.IsFitToView sie auswertet, gegen ein
Ansichtsinventar, das aus den eigenen ID-Generatoren des Frameworks erstellt wurde – und zeichnet
auf, warum jeder gematcht hat, damit die Antwort überprüft werden kann, anstatt ihr zu
vertrauen:
Zwei Schichten, getrennt gehalten. Was Ihr Team geschrieben hat, erhält die volle Behandlung; was XAF bereitstellt, wird hinter einer Zeile verborgen, weil es eine Menge davon gibt und es nicht Ihres ist, es zu ändern. Mit einem Ground-Truth-Katalog wird es auch benannt – beschränkt auf die Module, die Sie tatsächlich registrieren, sodass ein WinForms-Controller niemals auf einem Blazor-Bildschirm erscheint.
Was es nicht behaupten wird: Ein hier aufgeführter Controller kann sich trotzdem durch
Active["Grund"] selbst abschalten, was von den Daten und dem Benutzer abhängt. Dies ist, was
XAF auf einen Bildschirm lädt, nicht was zwangsläufig etwas tun wird – und alles, was es nicht
aus dem Quellcode lesen konnte, wird separat aufgeführt, mit dem Grund, anstatt stillschweigend als
„läuft überall“ behandelt zu werden.
Schnellstart
dotnet tool install -g XafLogicExplainer.Cli
xaflogic agents --project "C:\MySolution\MyApp.Module"Das schreibt AGENTS.md, CLAUDE.md und .github/copilot-instructions.md in Ihr
Projektmappenverzeichnis. Kein Konto, kein API-Schlüssel, kein Server. Ihr Agent versteht die
Anwendung bei seiner nächsten Frage.
Was es schreibt, und warum es in zwei Teile geteilt ist
AGENTS.md wird jeder Anfrage eines Agenten im Repository vorangestellt, sodass seine Kosten
für immer bezahlt werden. 70 KB Entitätsdetails dort abzuladen, würde die eigentliche Frage
verdrängen. Daher ist die Ausgabe gestaffelt:
| ~11 KB | Immer geladen: Grundregeln, vollständige Bestandsverzeichnisse, Konventionen, Rezepte |
| ~70 KB | Bei Bedarf geöffnet: vollständige Eigenschaften, Handler-Code, Regelmeldungen, |
Der wertvollste Teil ist der kleinste. AGENTS.md beginnt mit Grundregeln – dass diese
Anwendung XPO verwendet und niemals EF Core, dass die Bestandsverzeichnisse vollständig sind,
also alles, was fehlt, tatsächlich nicht existiert, und dass sich einiges Verhalten im
Model-Editor und nicht in C# befindet. Diese wenigen Absätze stoppen den Großteil der
selbstbewussten Erfindungen, die Agenten über unbekannte XAF-Codebasen produzieren.
Vorhandene Dateien werden niemals überschrieben: generierter Text lebt zwischen Markierungen, alles, was Sie von Hand geschrieben haben, bleibt erhalten, und eine Neugenerierung ist byteidentisch, wenn sich nichts geändert hat.
Oder lassen Sie den Agenten direkt Fragen stellen
Generierte Dateien sind eine Momentaufnahme. Der MCP-Server ist eine Live-Verbindung – der Agent befragt Ihre Anwendung, während Sie daran arbeiten, und kann nicht veralten.
/plugin marketplace add peopleworks/XAFLogicExplainer
/plugin install xaf-logic-explainer@peopleworks-xafDas installiert eine Fähigkeit und einen MCP-Server in einem Schritt. Für jeden anderen MCP-Client führen Sie ihn entweder direkt von NuGet aus, ohne Installation:
{
"mcpServers": {
"xaf": { "command": "dnx", "args": ["XafLogicExplainer.Mcp", "--yes"] }
}
}…oder zeigen Sie auf die CLI, wenn Sie sie bereits haben:
{ "mcpServers": { "xaf": { "command": "xaflogic", "args": ["mcp"] } } }Gestartet aus einem Projektmappenverzeichnis findet er das XAF-Modul von selbst, sodass keine der beiden Formen einen Pfad benötigt.
Tool | Antworten |
| Was diese Anwendung ist und die vollständige Liste aller darin enthaltenen Elemente |
| Wo ein Feld, Konzept oder Geschäftsbegriff definiert ist |
| Jede Eigenschaft, Beziehung, Regel und Berechnung zu einer Entität |
| Was eine Aktion bewirkt – einschließlich des C#, das beim Auslösen ausgeführt wird |
| Was die Anwendung validiert, berechnet, ausblendet und deaktiviert |
| Model-Editor-Anpassungen, die in keiner C#-Datei existieren |
| Benutzerdefinierte Editoren, das benötigte JavaScript und zur Laufzeit geänderte integrierte Editoren |
| Was einmalig gegen eine Live-Datenbank ausgeführt wurde, und der Kommentar, der erklärt, warum |
| Alles, was auf einen Bildschirm geladen wird – welche Controller aktiviert werden und warum |
| Quellen erneut lesen (Änderungen werden automatisch erkannt) |
Fragen Sie nach etwas, das nicht vorhanden ist, und die Antwort ist die nützliche:
Es gibt keine Entität namens 'PurchaseOrder' in dieser Anwendung. Dies ist die vollständige Liste von 19 Entitäten, aus dem gesamten Quellbaum extrahiert: … Wenn der Benutzer erwartet, dass 'PurchaseOrder' existiert, wurde sie noch nicht erstellt.
Kombinieren Sie es mit den offiziellen DevExpress-Fähigkeiten. /plugin install dx-xaf@DevExpress-agent-skills
lehrt, wie XAF funktioniert; dieses lehrt, was Ihre Anwendung tut. Ein Agent, der nur das erste hat, wird
korrektes XAF gegen Entitäten schreiben, die Sie nicht haben.
Das gleiche Wissen, für eine Person
Ein Agent liest AGENTS.md oder fragt den MCP-Server ab. Jemand, der gerade eine zehn Jahre alte
XAF-Anwendung geerbt hat, benötigt die gleichen Fakten, aber ganz anders angeordnet:
xaflogic explain --project "C:\MySolution\MyApp.Module" --openEine HTML-Datei. Kein Server, kein Build-Schritt, keine Netzwerkanfrage – sie öffnet sich aus einem E-Mail-Anhang auf einem Rechner ohne Internet, was genau so Übergaben tatsächlich stattfinden.
Sie zeichnet eine Karte Ihres Domänenmodells aus den Assoziationsattributen, die über Ihre Codebasis verstreut sind. Die meisten Teams haben ihres noch nie gesehen: Es existiert nur im Kopf einer Person, genau das Wissen, das verschwindet, wenn diese Person geht.

Echtes Ergebnis aus der Beispielanwendung dieses Repositorys. Fahren Sie mit der Maus über eine Entität, und alles, was sie nicht berührt, verblasst; lila bedeutet, dass das Löschen des Elternteils das Kind löscht.
Daneben: jede Entität und was jede Eigenschaft ist, jede Aktion mit dem ausgeführten Code, Validierung mit der Nachricht, die der Benutzer tatsächlich sehen wird, und die Model-Editor-Einstellungen, die in keiner C#-Datei erscheinen.
Und ein Index jedes Kriterienausdrucks in der Anwendung – ein Dialekt, der weder SQL noch C# ist, gesammelt aus Attributen, die über die Quelle verteilt und sonst nirgends zusammengeführt werden:
Probieren Sie es an der Beispielanwendung aus, ohne Ihren eigenen Code zu berühren:
xaflogic explain --project tests/XafLogicExplainer.Tests/Fixtures/DemoSolution/PharmacyDemo.Module --openOptional: Heben Sie Ihren Code von DevExpress ab
Die Extraktion liest Ihre Quelle, ohne etwas über das Framework zu wissen, gegen das sie geschrieben ist,
was eine Frage unbeantwortet lässt: Ist DeleteObjectsViewController etwas, das Ihr Team geschrieben hat,
oder etwas, das DevExpress ausliefert? Ohne Antwort präsentiert die generierte Dokumentation Framework-Verhalten
und Ihre eigene Logik als dasselbe.
Wenn Sie eine DevExpress-Lizenz haben:
xaflogic catalog buildDas liest Ihre eigene Installation und zeichnet auf, was XAF selbst bereitstellt – Attribute, Controller, Modell-Schnittstellen und Module, mit den offiziellen Zusammenfassungen und Dokumentationslinks, die DevExpress ausliefert. Bei DevExpress 26.1 sind das etwa 850 Framework-Typen.
Wenn Sie auch die DevExpress-Quellcode-Komponente installiert haben, zeichnet es auf, wo jeder
Framework-Controller aktiviert wird – die vier Bedingungen, die XAF prüft, bevor er ausgeführt wird.
Das kann nicht aus den Assemblies gelesen werden: vier von fünf integrierten Controllern setzen ihr
Ziel innerhalb eines Konstruktors. Übergeben Sie --dx-sources <Components/Sources>, wenn diese
nicht neben Ihren Assemblies liegen.
Die Extraktion erkennt dies dann automatisch und kann Dinge sagen, die sie sonst nicht könnte:
„
ArchiveControllererweitert den integriertenDeleteObjectsViewController“ – Sie ändern, wie das Löschen anwendungsweit funktioniert, und fügen keine Funktion daneben hinzu.„
[AuditedByFinance]ist kein XAF- oder .NET-Attribut“ – Ihr Team hat es erfunden, daher lebt seine Bedeutung in dieser Codebasis und in keiner Dokumentation.„32 Framework-Controller werden ebenfalls auf diesen Bildschirm geladen“ – benannt, mit der Funktion jedes einzelnen und auf die Module beschränkt, die Ihre Anwendung tatsächlich registriert, sodass ein WinForms-Controller nie auf einem Blazor-Bildschirm erscheint.
Der Katalog wird nach ~/.xaflogic/catalog/ geschrieben, niemals in Ihr Repository: er wird aus
lizenzierter Software abgeleitet. Alles funktioniert auch ohne ihn – er verbessert nur die Ausgabe. Siehe
NOTICE.md.
Befehle
Befehl | Was er tut |
| Schreibt |
| Als MCP-Server ausführen, damit Agenten die App live abfragen können |
| Schreibt eine eigenständige HTML-Seite, die die App einer Person erklärt |
| Erstellt den DevExpress-Grundwahrheitskatalog ( |
| Liest das Projekt, schreibt lokal Markdown + JSON |
| Vergleicht mit der vorherigen Extraktion und meldet, was sich geändert hat |
| Zeigt den Änderungserkennungs-Hash und ob eine Neu-Extraktion nötig ist |
| Extrahiert bei Dateiänderung neu, mit Entprellung |
| Extrahiert und veröffentlicht auf ein entferntes Ziel |
| Stellt Fragen zum extrahierten Projekt |
| Setzt Standardwerte in |
| Verwaltet mehrere XAF-Projekte; die meisten Befehle akzeptieren |
Die Dokumentation wird in Englisch oder Spanisch generiert (--lang en|es).
Nützliche Flags: --orm auto|xpo|efcore, --lang en|es, --enrich (KI-generierte
Geschäftslogik-Zusammenfassungen pro Controller und Aktion), --force, --all.
--enrich benötigt ein Modell, und jedes davon reicht aus – ein Schlüssel in der Befehlszeile gewinnt,
dann die Umgebung, dann ein PeopleWorks Copilot-Konto, falls Sie eines haben:
xaflogic extract --enrich --api-key sk-... # or any OpenAI-compatible endpoint:
xaflogic extract --enrich --api-key ... --ai-base-url http://localhost:11434/v1 --ai-model qwen2.5-coder
export OPENAI_API_KEY=sk-... # picked up with no configuration at all
export ANTHROPIC_API_KEY=sk-ant-...Alles andere in diesem Tool läuft ohne Schlüssel, ohne Konto und ohne Netzwerk.
Die Extraktion ist inkrementell – ein SHA-256 über Ihre .cs- und .xafml-Dateien bedeutet, dass
ein unverändertes Projekt ein No-Op ist. Es gibt eine MSBuild .targets-Datei, falls Sie möchten,
dass sie beim Build ausgeführt wird.
Status
v0.14.0. Die Extraktions-Engine ist der ausgereifte Teil: Sie läuft in Produktion gegen echte XAF-Anwendungen. Die agentenorientierte Oberfläche ist das, was jetzt gerade, im offenen Umfeld, entsteht.
✅ | Roslyn-Extraktion – Entitäten, Controller, Regeln, Updater, Navigation, |
✅ | XPO und EF Core, automatisch erkannt |
✅ | Benutzerdefinierte Eigenschafts- und Listen-Editoren, deren Client-Assets und zur Laufzeit neu konfigurierte integrierte Editoren |
✅ | Versionierte Datenmigrationen – was mit Datenbanken geschah, die nicht frisch waren |
✅ | Inkrementelle Änderungserkennung, Diff-Berichte, Multi-Projekt, Watch-Modus |
✅ | KI-Anreicherung von Controllern und Aktionen ( |
✅ | Blazor-In-App-Hilfspanel |
✅ |
|
✅ |
|
✅ | Erweiterbare Veröffentlichungsziele ( |
✅ | MCP-Server – 10 Tools, live gegen Ihre Quelle |
✅ | Installierbares Claude Code Plugin mit Skill und MCP-Server |
✅ | 345 Tests über synthetische XPO- und EF-Core-Fixtures – kein DevExpress nötig |
✅ | DevExpress-Grundwahrheitskatalog, lokal von Lizenznehmern generiert |
PeopleWorks Copilot, in dem dieses Tool aufgewachsen ist, ist jetzt einer von mehreren Empfängern, statt das Ziel, um das alles herum gebaut wurde. Die wichtigsten Ausgaben benötigen überhaupt keinen Server.
Die lange Version
Warum ein Drittel des Verhaltens einer XAF-Anwendung außerhalb ihrer Geschäftsklassen lebt, die vier Orte, an denen es sich versteckt, und wie die extrahierte Ausgabe tatsächlich aussieht:
Ihr Coding-Agent kennt XAF. Er hat Ihre Anwendung noch nie gesehen.
Tu agente de código sabe XAF. Nunca ha visto tu aplicación. — en español
Jeder ist in seiner eigenen Sprache geschrieben, nicht aus der anderen übersetzt. Quellen in
docs/Blog/.
Repository-Struktur
src/
XafLogicExplainer.Core Roslyn extraction engine — no DevExpress reference
XafLogicExplainer.Mcp MCP server (ModelContextProtocol 2.1)
XafLogicExplainer.Cli the `xaflogic` command
XafLogicExplainer.CopilotSync PeopleWorks Copilot target + AI enrichment
XafLogicExplainer.DescriptionAnnotator generates missing [Description] attributes
XafLogicExplainer.Blazor in-app help panel for XAF Blazor apps
plugins/
xaf-logic-explainer the installable Claude Code pluginErstellt auf .NET 10.
Nur XafLogicExplainer.Blazor referenziert DevExpress-Pakete; es benötigt den DevExpress NuGet-Feed
und eine Lizenz zum Bauen. Alles andere baut überall, weshalb CI es kostenlos verifizieren kann.
Mitwirken
Der wertvollste Beitrag ist, uns zu sagen, was der Extraktor übersehen hat. XAF ist riesig, jede Codebasis verwendet einen anderen Ausschnitt davon, und kein einzelnes Projekt übt das gesamte Framework aus. Es gibt eine Extraktionslücken-Vorlage genau dafür: Zeigen Sie das XAF-Muster, das Ihr Projekt verwendet, und was das Tool nicht gesehen hat.
Siehe CONTRIBUTING.md. Fehlerberichte, Dokumentation und Übersetzungen sind gleichermaßen willkommen.
Lizenz
MIT. Siehe NOTICE.md für die Beziehung zu DevExpress.
Ein unabhängiges Community-Projekt – nicht verbunden mit, unterstützt von oder gefördert durch Developer Express Inc. Es enthält keinen DevExpress-Quellcode und benötigt keine DevExpress-Lizenz zum Bauen oder Ausführen. DevExpress, XAF und eXpressApp Framework sind Warenzeichen von Developer Express Inc.
Erstellt von Pedro Hernández (PeopleWorks), Microsoft MVP für .NET — für die DevExpress- und XAF-Community.
Available Tools
12 toolsxaf_controllerA
Full detail of one controller: which views it applies to, every action it defines with the actual C# that runs when the action fires, and its helper methods. Use when asked what a button or command actually does.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Controller class name, e.g. 'ApproveInvoiceController'. Case-insensitive. | |
| project | No | Project name, when several are configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full burden. It describes the output contents (views, actions, C# code, helper methods) but does not explicitly state that it is read-only or non-destructive, nor does it mention any side effects or limitations. It is informative but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences), front-loaded with the core purpose, and every sentence adds value. There is no redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema or annotations, the description carries the load of explaining what is returned. It does so by listing the key content areas (views, actions with C# code, helper methods). It could be slightly more detailed about response format, but it is adequate for an agent to know what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters (name and project) with 100% coverage. The tool description adds little beyond implying that 'name' identifies the controller. Baseline of 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource (one controller) and exactly what it returns: views, actions with actual C# code, and helper methods. It distinguishes itself from siblings like xaf_search and xaf_overview by focusing on deep controller internals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit use case: 'Use when asked what a button or command actually does.' This gives clear context for when to use the tool, though it does not mention alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xaf_editorsA
Custom property and list editors this application defines, and built-in editors its controllers reconfigure at run time. IMPORTANT — a property rendered by one of these does NOT show the control its type implies, and the business class says nothing about it. Check this before describing or changing how anything appears on screen.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name, when several are configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It prominently discloses a non-obvious behavioral trait: properties rendered by these editors do not show the control their type implies, and the business class gives no indication. This adds valuable context beyond a simple resource listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first defines the scope of editors, and the second delivers an important caveat in caps. Every sentence earns its place, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple optional parameter and the absence of an output schema and annotations, the description covers the key behavioral trap and defines what types of editors are included. It could explicitly state what the tool returns (e.g., a list of editor names or settings), but the critical warning makes it sufficiently complete for likely use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the sole optional 'project' parameter with a clear description, so the baseline is 3. The tool description adds no additional context about how this parameter affects results, but it does not need to because the schema already covers it completely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's focus on custom property/list editors and reconfigured built-in editors, which distinguishes it from siblings like xaf_controller and xaf_model. However, it lacks an explicit action verb such as 'list' or 'get', relying on the resource name to imply the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance to consult this tool before describing or changing UI appearance, and highlights a critical caveat about misleading assumptions. It does not mention alternative tools or when not to use it, so it stops short of offering full decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xaf_entityA
Full detail of one business entity: every property with its type and attributes, relationships to other entities, validation rules, appearance rules, and calculated property expressions. Use before writing or changing any code that touches an entity.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Entity class name, e.g. 'Invoice'. Case-insensitive. | |
| project | No | Project name, when several are configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of indicating the tool's behavior. It discloses the full detail returned and implicitly signals a read-only operation via 'Use before writing or changing'. However, it does not explicitly state side effects or permissions, though likely unnecessary for this context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with a clear definition of what the tool does, followed by a concise usage directive. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description thoroughly enumerates the return content and provides a clear usage context. It is sufficient for an agent to know when and how to use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage, including type and description for each parameter. The description adds no additional parameter-level guidance, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns full detail of a single business entity, enumerating the categories of information included. This is specific and distinguishes it from sibling tools like xaf_search or xaf_overview, which likely provide broader or partial views.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance to use this tool before writing or changing code that touches an entity, which establishes a clear 'when to use' context. However, it does not explicitly name alternative tools or state when not to use it, so it falls short of full differentiation guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xaf_migrationsA
Updater blocks that ran once when an existing database was upgraded past a version, and never again. Use when asked why a column contains what it contains, where legacy data came from, or what changed between releases — the code running today cannot explain any of that, and reasoning from it produces a plausible wrong answer.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name, when several are configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It clearly states these blocks ran once and never again, establishing a read-only historical nature, and the caution about current code adds interpretive context. It does not mention output format, but that is less critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first defines the resource, the second provides usage guidance. The wording is slightly dense but efficient, with no wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and no output schema, the description adequately covers purpose, usage, and behavioral context. It does not describe return values, but the use cases make clear the tool returns historical migration information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'project' is already fully described in the schema (100% coverage), and the description adds no additional parameter-level details. This matches the baseline of 3 when the schema handles the semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as updater blocks that ran once during database upgrades, which clearly distinguishes it from sibling tools about current code. It lacks an explicit verb like 'list' or 'show', but the noun phrase and usage guidance communicate its role as a historical reference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: when asked about column origins, legacy data provenance, or changes between releases. It also warns against reasoning from current code because it produces plausible wrong answers, effectively guiding the agent away from inappropriate alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xaf_modelB
Model Editor (.xafml) customizations: captions, list and detail view settings, columns, filters and application options. IMPORTANT — this behavior exists only in XML and cannot be inferred from the C# at all, so check it before concluding how a screen behaves.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name, when several are configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose that behavior is XML-defined and cannot be inferred from C#—a valuable insight. However, it doesn't state whether the tool reads or writes, what side effects occur, or what output to expect. This ambiguity is significant for a tool with 'customizations' in its scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first lists the tool's scope compactly, the second provides a crucial caveat. It is front-loaded with the domain and keeps the warning high-priority. No wasted words or redundant structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This tool operates in a complex domain (XAF model customization) with no output schema and no annotations. The description tells you what the tool covers but not what it returns, whether it mutates state, or how it relates to the many sibling tools. The XML caveat is helpful but insufficient for confident use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'project' is already fully described in the schema ('Project name, when several are configured.'). Since schema coverage is 100%, the description adds no new semantic value, and the baseline of 3 applies. No extra usage details are given for the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (Model Editor .xafml customizations) and enumerates specific content areas (captions, list/detail views, columns, filters, app options). However, the verb is implicit ('customizations' rather than 'get' or 'edit'), so it doesn't crisply state the action. It does distinguish itself from sibling tools by focusing on .xafml model behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'IMPORTANT' statement gives a clear directive: check this tool before concluding how a screen behaves because behavior exists in XML, not C#. This implies when to use it, but it doesn't explicitly name alternatives or exclusions. Still, the usage context is strong enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xaf_overviewA
What this XAF application is and everything it contains: ORM, module setup, and the COMPLETE list of entities, controllers, actions and navigation groups. Call this first when asked anything about the application as a whole. The lists are exhaustive: if something is not in them, it does not exist in this application.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name, when several are configured. Omit for the default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It does disclose a key behavioral trait—that the lists are exhaustive and authoritative—which is valuable. However, it does not mention other behavioral aspects such as performance implications, response format, or whether it reads from a cache or scans files, leaving some transparency gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The first sentence encapsulates the tool's content, and the second provides usage and behavioral guidance. There is no redundant or filler text, making it well-structured and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an overview tool with no output schema, the description provides a solid sense of what the response will contain (complete lists of key components). It stops short of detailing the exact result format or organization, but the content scope is clear enough for the agent to infer what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single 'project' parameter with a clear description, so schema coverage is 100%. The tool description adds no additional parameter semantics, so it does not go beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as an overview of the entire XAF application, listing ORM, module setup, and exhaustive enumerations of entities, controllers, actions, and navigation groups. It distinguishes itself from sibling tools by emphasizing it is the complete index and should be called first for whole-app questions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Call this first when asked anything about the application as a whole', giving a direct usage trigger. It also implies the tool serves as a definitive existence check ('if something is not in them, it does not exist'), which guides when to rely on its results versus diving into specific sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xaf_refreshA
Discard cached analysis and re-read the source on the next query. The server already detects file changes automatically, so this is only needed if you believe the cached view is wrong.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name, or omit to refresh all configured projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden. It discloses the cache-discarding behavior, the deferred effect ('on the next query'), and the caveat about automatic file change detection. It omits details about side effects or permissions, but for a cache refresh tool, the description is fairly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: first states the action, second gives the usage condition. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Low complexity (one optional param, no output schema). The description tells what happens, when to use it, and why it exists. Fully adequate for an AI agent to decide and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description covers 100% of the single parameter, giving the project name and its optionality. The tool description does not add parameter-specific meaning, but the baseline of 3 applies since schema already documents the parameter well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear action ('Discard cached analysis and re-read the source') on a specific resource (the analysis cache). This clearly distinguishes it from sibling xaf_* tools, which focus on searching, overviews, entities, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use: 'only needed if you believe the cached view is wrong,' and provides context that the server auto-detects changes, implying regular use is unnecessary. This is direct when-to-use guidance with an implicit alternative (do nothing).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xaf_reportsA
Reports the application registers in source: what each is over, the filter and expressions in its layout, and the parameters dialog it opens with. Use when asked what a report shows, why its numbers differ from a screen's, or before writing a new one. Says explicitly when the list is a lower bound because users can also design reports at run time.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name, when several are configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It adds a key limitation: 'Says explicitly when the list is a lower bound because users can also design reports at run time.' This is extra behavioral context beyond the raw purpose. It does not mention side effects or auth, but the tool is clearly read-only in nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no wasted words. Purpose is front-loaded, usage is provided, and the limitation is appended concisely. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description covers what the tool returns, when to use it, and a caveat about completeness. Nothing essential is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter, so the schema already documents the 'project' parameter. The description adds no additional parameter-specific guidance, matching the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Reports the application registers in source' and details what it covers (what each report is over, filter/expressions, parameters dialog). This clearly distinguishes it from sibling tools like xaf_search or xaf_entity, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use when asked what a report shows, why its numbers differ from a screen's, or before writing a new one.' However, it does not mention when not to use it or name alternative tools, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xaf_rulesA
The business rules the application enforces: validation rules with their messages and conditions, conditional appearance rules, and calculated properties. Use when asked what the system requires, forbids, or computes. Optionally narrowed to one entity.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | No | Restrict to one entity. Omit for every rule in the application. | |
| project | No | Project name, when several are configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It details what the tool returns (validation rules with messages, conditions, appearance rules, calculated properties) and implies a read-only query. It does not explicitly state side effects or return format, but the level of detail is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only three sentences and every sentence serves a distinct purpose: defining the resource, specifying when to use it, and explaining parameter narrowing. It is front-loaded with the most important information and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, the description adequately captures content, usage, and parameter filtering. It does not mention empty responses or error handling, but that is not critical for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both parameters fully described in the input schema. The description adds a small reiteration for 'entity' ('narrowed to one entity') but does not need to compensate for any schema gaps, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it returns the business rules the application enforces, specifically enumerating validation rules with messages and conditions, conditional appearance rules, and calculated properties. This goes beyond a generic resource name and effectively distinguishes the tool from sibling tools like xaf_model or xaf_entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use when asked what the system requires, forbids, or computes,' providing a clear when-to-use directive. It also notes optional narrowing by entity, which adds practical usage guidance beyond the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xaf_searchA
Search the whole application for a term: entity and property names, controllers, actions, validation messages, criteria expressions and seed data. Use when you know roughly what you are looking for but not where it lives — for example a field name mentioned by the user, or a business concept like 'discount'. Returns what matched and where.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Optional filter: entity, property, controller, action, rule, or seed. | |
| query | Yes | Text to look for. Case-insensitive, matches substrings. | |
| project | No | Project name, when several are configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses what is searched (entity names, validation messages, etc.), that it is case-insensitive, and that it returns what matched and where. It does not state side effects or permissions, but as a search tool, the read-only nature is implied and adequately covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each earning its place. Front-loaded with the verb 'Search', followed by scope and usage context, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a simple search tool. It covers purpose, usage, and return behavior, and no output schema means it needn't explain return structure beyond what is stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for each parameter. The tool description reinforces the 'kind' parameter by listing examples (entity, property, controller, etc.) and gives a concrete query example, but it adds minimal new information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Search the whole application for a term' which clearly states the verb and scope. It enumerates specific resource types (entity, property, controllers, actions, etc.), distinguishing it from sibling tools like xaf_entity or xaf_controller.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use when you know roughly what you are looking for but not where it lives' and provides an example. It gives clear context but does not mention exclusions or alternative tools, falling short of a fully explicit when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xaf_viewA
What is loaded when a screen opens: every controller XAF activates on that view, why each one matches, and which of their actions appear. Call with no view to list the application's screens. IMPORTANT — most views exist in no file at all; XAF generates them from the business classes, so neither the C# nor the .xafml can be read to find them. Use before changing a controller, adding an action, or answering what a screen does.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | View id, e.g. 'Order_ListView'. Omit to list every view. Case-insensitive. | |
| project | No | Project name, when several are configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It discloses the critical fact that most views are generated from business classes and not present in C# or .xafml files, preventing the agent from mistakenly reading files. It also reveals that omitting the view returns a screen list, a behavioral trait not visible from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences that front-load the core definition, then add an important caveat, then provide usage context. Every sentence contributes new information with no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema and no annotations, the description gives a complete picture: what data the tool returns (controllers, actions, match reasons), how to invoke it (with or without a view), a critical gotcha about generated views, and concrete use cases. This is sufficient for an agent to correctly select and call the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents both parameters (view, project) with 100% coverage, including default null and case-insensitivity. The description reinforces the view parameter's behavior by explaining the effect of omitting it (list all screens) but adds no new meaning for the project parameter. This meets the baseline for high schema coverage without major additional semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as showing what controllers and actions are loaded for a screen, with a specific resource (view) and detailed output (why each matches, which actions appear). It also explains the no-view invocation to list all application screens, distinguishing it from sibling tools like xaf_controller or xaf_model. This goes beyond a vague verb to explain the exact output scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit use cases: 'Use before changing a controller, adding an action, or answering what a screen does.' It also explains the no-view pattern to list screens. However, it does not name alternative tools or specify when not to use it, so it's strong but not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xaf_walkthroughA
Trace one business process end to end: what runs, in what order, which entities it touches and which rules govern them, every step citing file and line. Start from an action, a controller method, a controller or an entity. Use this when asked HOW something works — 'how does approval work', 'what happens when I press this' — rather than what exists. Calls the trace could not follow are reported explicitly, so an empty list of them means the path really is complete.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | Where to start: an action, a controller method, a controller or an entity. | |
| depth | No | How many hops to follow. Three covers an ordinary XAF process. | |
| project | No | Project name, when several are configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes the full burden of behavioral disclosure. It successfully discloses a important limitation: calls the trace cannot follow are reported explicitly, and an empty list has a meaningful interpretation. It does not explicitly state whether the tool is side-effect free, but the read-only affordance of a trace is strongly implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three dense sentences with no filler. It opens with a concise definition of the tool, then quickly gives usage criteria, and ends with an important nuance about the completeness of the path.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex exploration/walkthrough tool with no output schema and no annotations, the description covers the needed invocation context: starting points, scope, traversal boundaries, citation by file and line, and interpretation of missing-boundary results. It gives enough structure for an agent to know both when and how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all three parameters with descriptions, so schema coverage is 100%; the baseline is 3. The description only reinforces the required 'from' parameter's valid starting points without adding behavior or details about 'depth' or 'project' beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action—'Trace e one business process end to end'—and specifies what the trace covers: what runs, execution order, touched entities, and governing rules. The phrase 'rather than what exists' distills the tool from sibling existence/search tools, so selected against and invocation are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this path 'when asked HOW something works' and gives concrete examples like 'how does approval work' and 'what happens when I press this'. It also contrasts it with what-exists questions, giving an explicit when-to-use and when-not-to-use distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.16.0- Added
xaf_reports
1 tool update
v0.15.0- Added
xaf_walkthrough
1 tool update
v0.12.1- Added
xaf_view
9 tool updates
v1.0.0- First observed
xaf_controller - First observed
xaf_editors - First observed
xaf_entity - First observed
xaf_migrations - First observed
xaf_model - First observed
xaf_overview - First observed
xaf_refresh - First observed
xaf_rules - First observed
xaf_search
TDQS
Scored across 12 tools
Each tool targets a distinct source of truth (overview, entity, view, controller, model, editors, rules, reports, migrations, search, trace). A couple of adjacent tools (xaf_entity vs xaf_rules, xaf_view vs xaf_model) cover overlapping facts, but the use-case guidance clearly separates them.
All tools share a uniform `xaf_` prefix followed by a short, descriptive noun/verb, so the family is instantly recognizable. `xaf_refresh` is the only imperatively named tool, but this is a deliberate and predictable exception for a cache-control function.
Twelve tools is within the ideal range and each tool addresses a distinct aspect of explaining an XAF application. The count feels intentional rather than padded; there is no obvious redundancy or token-for-count inflation.
The surface covers static structure (overview, entities, views, model, editors), dynamic behavior (controllers, walkthrough, rules), historical data (migrations), and search/reporting (search, reports), plus a cache refresh for correctness. No essential operation for the stated explainer purpose is missing.
Maintenance
Related MCP Connectors
Give your AI agent a persistent map of your project's structure, dependencies, and bugs.
AI Agent with Architectural Memory. Impact analysis (free), tests and code from the graph (pro).
Code intelligence platform for AI agents. 20 tools for architecture, security & impact analysis.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables AI-assisted X++ development for Dynamics 365 Finance and Operations by pre-indexing the entire codebase and providing 54 specialized tools for metadata lookup, code generation, and best practice validation.20174 npm157MIT
- AlicenseAqualityDmaintenanceCode context for AI coding agents. Progressive, on-demand access to your internal .NET / NuGet package source — agents browse, search, and read private C# libraries autonomously, with zero workspace pollution.233 npmMIT
- AlicenseAqualityCmaintenanceExtracts deterministic architecture maps from codebases for AI agents, enabling queries about blast radius, routes, security findings, and production readiness without sending code anywhere.6MIT
- AlicenseNot gradedqualityAmaintenanceProvides AI coding agents with ground truth about a Rails app via 45 read-only tools covering schema, models, routes, controllers, views, jobs, and conventions, working over MCP or CLI and functioning even when the app cannot boot.163MIT