Statical Prism for AL gives you and your AI agent deep code insight into Microsoft Dynamics 365 Business Central. It reads your whole solution, including the apps you only have as packages, and turns it into one code graph. You use it to understand and review code, and your agent uses it for the questions a text search cannot answer.
MCP server for your AI agent
GitHub Copilot, Claude Code or any other MCP-capable agent can query the same code graph you browse.
Total solution overview
Module details and dependency graph, table relations graph and more.
Extensive code graph
Run powerful code queries on your workspace-as-a-graph — leave no stone unturned.
Semantic search
Find usages, find system function usages, semantic filtering, and much more.
Rich code browsing experience
Extended object view with inlined extensions, semantic code coloring, Visual Studio Code integration, etc.
Read more on https://stati-cal.com/PrismForAL.
History:
5.0.1:
- ID-3568 Feature Prism's MCP server appears in VS Code automatically, without editing mcp.json
- ID-3582 Feature Prism for AL Connector extension tells Copilot in VS Code to use Prism's MCP tools for AL questions
- ID-3573 Bugfix Opening a workspace fails when an installed app contains a report extension and ships without source
- ID-3574 Bugfix Opening a workspace fails with a redundant dependency error when the package cache holds a newer app version from earlier in the session
- ID-3575 Bugfix One object that cannot be indexed aborts the entire workspace load
- ID-3629 Bugfix Symbols load from the wrong package versions when a multi-root workspace sets a relative al.packageCachePath
- ID-3579 Bugfix Choosing a package cache path in Settings fails with an internal error about shlwapi.dll
- ID-3597 Bugfix Object pills, procedure extension markers and namespace expand buttons never appear or stay disabled
- ID-3580 Bugfix MSIX installation fails on Windows 10 and Windows Server
- ID-3569 Bugfix MCP Server page: Configuration advice for Visual Studio Code was incorrect for .code-workspace files
- ID-3566 Bugfix Copy buttons are cut off in the Show mcp.json popup on a maximized window at 200% display scaling
5.0:
- ID-2734 Feature Agentic Prism (MCP)
- ID-3498 Feature Major MCP server changes since Preview: outline, source-read, find-references and reachability-set tools, stdio support, and one vocabulary across all 26 tools
- ID-3092 Feature Improved procedural flow graph window
- ID-3057 Feature Improved module graph page
- ID-3058 Feature Improved table relations explorer
- ID-3009 Feature Symbol search dialog
- ID-3159 Feature Show AL source when included in .app file
- ID-3193 Feature Show inherited procedures on an interface that extends another interface
- ID-3492 Feature BC29: Support for interface methods that carry a default implementation
- ID-3500 Feature BC29: Support for TestHandlerContext and DataSourceContext data types
- ID-2907 Feature Open from BC: Online download via published Statical Prism BC app without need for tenant's admin consent
- ID-2894 Feature Optimize loading of very large workspaces
- ID-2934 Feature Optimize code graph index memory consumption for full graph
- ID-2832 Feature Optimize procedural graph model
- ID-3000 Feature Share package cache between UI and PrismCmd
- ID-3511 Feature List and clear cached AL packages from PrismCmd
- ID-3515 Feature Deleting cached packages shows no progress, and a blocked deletion does not identify the program holding the package
- ID-3378 Feature Install a licence key and show the licence status from the command line
- ID-3017 Feature Topological sort: objects
- ID-2606 Feature Detect and warn about nested modules
- ID-3218 Feature Find Usages: Support for XmlPort `textelement` and `textattribute`
- ID-3125 Feature Mark flowfields in Outline with a green `f`
- ID-2929 Feature Cascading AL settings visualization (user, workspace, module)
- ID-2948 Feature TransferFields filter for mapping state
- ID-2954 Feature Solution overview: Ctrl+C copies module publisher, name and version to the clipboard for the selected module
- ID-3034 Feature Search field for recent items
- ID-2969 Feature Discovery page search field
- ID-2968 Feature Package cache page search field
- ID-2970 Feature Launch settings section
- ID-2972 Feature DirectoryAppProps.json workspace metadata
- ID-2971 Feature DirectoryAppProps.json metadata tracing where each value comes from
- ID-2941 Feature PrismPath is now strict about requiring a namespace when navigating to objects in a namespace
- ID-3038 Feature Allow opening workspace with dependency that is missing a dependency constraint (Workspace resolver threw on dependencies without a version constraint)
- ID-3202 Bugfix Code graph build aborts on Business Central's SOA Setup page
- ID-3081 Bugfix Module resolution fails when the setting al.packageCachePath in .code-workspace files use relative paths
- ID-3089 Bugfix Multi-root `.code-workspace` with ancestor folder entry causes `DuplicateModuleId`
- ID-3090 Bugfix A path in a .code-workspace file must be ignored, if the path does not contain an app.json file directly
- ID-2981 Bugfix Objects not shown when symbol files are downloaded with "Download symbols from global sources"
- ID-2992 Bugfix Setting to enable software rendering (UCEERR_RENDERTHREADFAILURE (0x88980406) mitigation experiment)
- ID-3192 Bugfix Code graph reverses interface inheritance: IFoo extends IBar, not IBar extends IFoo
- ID-3112 Bugfix Procedure does not resolve in (IFoo as IBar).MyProcedure
- ID-3204 Bugfix References are not resolved when "is" or "as" is combined with a boolean operator
- ID-3497 Bugfix SubPageLink field does not resolve when the sub-page's SourceTable needs a using directive from its own file
- ID-3122 Bugfix Subscribers of InternalEvents not found
- ID-3113 Bugfix Extended view for extended interfaces is wrong
- ID-3200 Bugfix Parse error: `fileuploadaction` nested in a page action `group(...)`
- ID-3024 Bugfix RIMD analysis: Record methods GetBySystemId, IsEmpty and Next should classify as Read
- ID-2976 Bugfix Prism Path cannot navigate to object with '.' char in name
- ID-3155 Bugfix Free text search does not trim whitespace in the search expression, silently dropping matches
- ID-3016 Bugfix Server should not drop connection untimely
- ID-3491 Bugfix Opening an interface briefly freezes the window while inherited procedures load
- ID-3531 Bugfix The page a window opens on is not marked in the navigation pane, and clicking it rebuilds the page
- ID-3502 Bugfix Open from BC: Connect button stays disabled after entering the download folder
- ID-3096 Bugfix In result tree views (e.g. flows), non-existing object id are presented as 'ValueNone'
- ID-3053 Bugfix Double-click on selected item does not re-navigate in field search, procedure search and usages window
- ID-2987 Bugfix Wipe package cache always shows error label
- ID-2977 Bugfix Indentation of Clear(record) was sometimes wrong
- ID-2906 Bugfix Some menu items are blank in the dependency view context menu for object details
4.5:
- ID-2920 Feature BC28: Support for analysisview elements in pages
- ID-2930 Bugfix Procedural flow visualization: Some join transitions were not displayed
- ID-2927 Bugfix Namespace explorer: Double-click did not find any object pairs as evidence
4.4:
- ID-1170 Feature Show system fields: SystemId, SystemRowVersion and audit fields System{Created|Modified}{By|At}
- ID-2884 Feature Find usages of system fields
- ID-2908 Feature Separate colours for parameter and return identifiers
- ID-2918 Feature Dotted underlining of parameters/variables of type temporary record
- ID-2917 Feature Open namespaces page in separate window
- ID-2913 Feature Manual refresh button after graph availability changes (avoid disrupting user flow)
- ID-2912 Feature Module dependency graph images should be saved with in higher resolution
- ID-2900 Feature Show bookmark in object header
- ID-2891 Feature Recent navigation: Remember last code line navigation
- ID-2879 Bugfix Fields in calls to LoadField related methods are not resolved
- ID-2887 Bugfix RIMD overview: Tables are not ordered; should be ordered by object id
- ID-2899 Bugfix Toggle object bookmark context menu item does not work on object header
- ID-2890 Bugfix Recent navigation state: restoring on re-open sometimes fails
- ID-2881 Bugfix Recent item Open from BC creates a open folder recent item
- ID-2880 Bugfix Recent item Open from BC always opens the workspace without re-download
- ID-2915 Bugfix Some windows related to a workspace do not close when the workspace closes
- ID-2911 Bugfix Filter icon sometimes indicates filter is excluding items when it isn't
- ID-2641 Bugfix Scroll left when navigating in code
- ID-2901 Bugfix PrismCmd: Error message when using open without a "goto file" parameter
4.3:
- ID-2794 Feature BC27: Support for Directory.App.Props.json
- ID-2836 Feature BC27: Support for ReadyToRun app manifest package structure
- ID-2844 Feature Open from BC: Provide in-app guidance on Azure error code AADST90099 (application authorization required for customer tenant)
- ID-0822 Feature Resolution and tooltips of option values
- ID-2820 Feature Open from BC: Support for COSMO Alpaca
- ID-2823 Feature BC27: Treat new table Truncate method as a delete(false) in RIMD analysis
- ID-2850 Feature BC27: Support for MaskType property
- ID-2818 Feature Outline: Trigger filter switch should toggle both triggers and trigger events
- ID-2852 Bugfix Features page error following click on Learn-link
- ID-2846 Bugfix Generate event subscriber code generates invalid code for option typed parameters
- ID-2841 Bugfix Find built-in function usages: Error in header text
- ID-2848 Bugfix Regression: Open Dependencies in new Window does nothing
- ID-2848 Bugfix Regression: Open Dependencies in new Window does nothing
- ID-2839 Bugfix Objects panel filter icon does not reset
- ID-2825 Bugfix Free text search: skipped lines not always marked as such
4.2:
- ID-2556 Feature Immediate insights: Reachable from user actions interfaces in the procedural flow-graph (visual graph)
- ID-2766 Feature Open event subscriber source generator directly from the context menu of database and page event triggers
- ID-2779 Feature Find Inbound Actions (Find Inbound Procedural Flow with filter)
- ID-2717 Feature Open from BC cloud solution, simplify GUI
- ID-2770 Feature Open from BC: Clear credentials
- ID-2767 Feature Open from BC: Add link to troubleshooting page
- ID-2706 Feature Add button to synchronize object index with current object
- ID-2799 Feature View/Show workspace menu with toggles for toolbar, objects and outline panels
- ID-2796 Feature Improved button and search box layout in workspace window
- ID-2748 Feature Quick copy event subscriber code with default settings
- ID-2739 Feature [Experimental] Search boxes: match when search characters occur in correct order (like in Visual Studio Code's command field)
- ID-2721 Feature Optional case-sensitive free text search
- ID-2679 Feature Add CompilationUnit to tooltips also when object not in workspace
- ID-2789 Feature Error notifications: Link to session log
- ID-2786 Feature Immediate insights: UserAction (user actions can reach declaration) and EventPublisher (declaration reaches event publishers)
- ID-2781 Feature Show an interface icon before methods defined in
- ID-2774 Feature Persist outline settings
- ID-2773 Feature Remove field index padding to save horizontal space (improves usability when enabled in outline on small screens)
- ID-2758 Feature New setting to control if object numbers are shown or not
- ID-2776 Bugfix Open from BC failed authorization on customer's tenant
- ID-2812 Bugfix Cannot start graph server when module of last navigation is absent
- ID-2805 Bugfix Mouse back navigation triggers page navigation instead of object navigation
- ID-2798 Bugfix Parse error when CalcFormula or TableRelation has a filter like this: filter(MyEnum::ValueA ..)
- ID-2787 Bugfix Graph server failed to start on BC14
- ID-2769 Bugfix Namespaces: remove false-positive namespace usages for the global namespace (the usage details window showed an empty table anyway)
- ID-2768 Bugfix Sorting by column was mistakenly removed from object index settings in 4.0.0
- ID-2709 Bugfix Name resolution fails for some enum values in non-atomic table relation filter expressions
- ID-2613 Bugfix Resolution in const condition expressions
4.1:
- ID-2416 Feature Namespace explorer
- ID-2752 Feature Namespaces tab for selected module in solution view, showing namespaces declared in the module
- ID-2729 Feature Save flow results to Excel file (was: copy flow results to clipboard)
- ID-2715 Feature Move expand/collapse and filter panel buttons closer to search results (usages, flows, free-text search)
- ID-2736 Bugfix Open from BC: Error connecting to OData services on businesscentral.dynamics.com - Unauthorized
- ID-2760 Bugfix Open from BC: Failed to download System app from sandbox
- ID-2747 Bugfix Syntax error in generated event subscriber code (missing quotes around object name)
- ID-2745 Bugfix Fixes to resolution of objects names when ObsoleteState is Moved
- ID-2740 Bugfix NullReferenceException when opening a workspace with "Search package cache" checked
4.0:
- ID-2364 Feature Fluent Theme (Dark and Light modes)
- ID-2467 Feature Open from BC
- ID-1692 Feature Event subscriber source generator
- ID-2499 Feature From Prism, open object from symbol file in Visual Studio Code as .dal file
- ID-2630 Feature Show static analysis for database trigger events
- ID-2682 Feature Show object bookmark in object index and provide filter options
- ID-2681 Feature Show object ObsoleteState in object index and provide filter options
- ID-2680 Feature Show object history mark in object index and provide filter options
- ID-2622 Feature Show object numbers in declaration tooltips (use it to disambiguate search results)
- ID-2670 Feature BC26 (runtime 15): More app metadata
- ID-2648 Feature BC26 (runtime 15): Support for fields moved between extensions - take field obsoletion into account
- ID-2619 Feature BC26 (runtime 15): Multiline text literals
- ID-2719 Feature BC26 (runtime 15): Support for 'continue' keyword in loops
- ID-2733 Feature BC26 (runtime 15): Support for data types HttpRequestType, TestHttpRequestMessage and TestHttpResponseMessage
- ID-2732 Feature BC26 (runtime 15): Support for TestHttpRequestPolicy property
- ID-2657 Feature Memory settings for graph loading
- ID-871 Feature Find Field Usages: Categorize function call with field as actual parameter as an Assign if formal parameter is by reference (VAR)
- ID-2609 Feature All options (Options expander) in the control panel should have a corresponding setting
- ID-2645 Feature Support for properties ClearActions, ClearLayout and ClearViews
- ID-2635 Feature Merge triggers in report extensions for data items
- ID-2713 Feature Object outline should have expand/collapse buttons like object index
- ID-2685 Feature Focus on search fields in Field Search, Procedure Search and Event Publisher Search
- ID-2622 Feature Show object numbers in declaration tooltips (use it to disambiguate search results)
- ID-2615 Bugfix Graph server fails to start on some machines
- ID-2701 Bugfix UnsatisfiableVersionConstraintException: Unexpected unsatisfiable new version constraint for already resolved module with module ref Application
- ID-2700 Bugfix TransferFields mapping wrongly shows merge/extension symbol when target is missing
- ID-2697 Bugfix On-prem usages report requires the full graph and should warn about it
- ID-2678 Bugfix Parse error on Enum value range in CalcFormula filter
- ID-2677 Bugfix Regression: Prism for AL Connector blocks while opening workspace
- ID-2624 Bugfix Free text search does not (always) navigate to actual result
- ID-2598 Bugfix Graph translation error when On{Before|After}Validate triggers are added in field modifications of an unresolved field
- ID-2673 Bugfix Free text search result order: Unnatural order for match in header
- ID-2668 Bugfix Regression: When workspace is opened from Visual Studio Code with "View in Prism for AL", "Start action" setting must be ignored
- ID-2666 Bugfix Object index "Go to module" context menu item does nothing (internal?)
- ID-2655 Bugfix When graph loading finishes, object reloading should not trigger page change
- ID-2604 Bugfix Conditional compilation symbols are ignored, when not at line start
- ID-2599 Bugfix Graceful handling of unexpected graph server process exit during graph server startup
- ID-2631 Bugfix Static analysis fails when initiated from declarations in extensions
- ID-2616 Bugfix Wrong indentation when code contains TAB characters
- ID-2592 Bugfix RecentItems shortcut keys are out of order
- ID-2718 Bugfix Error opening workspace: Null reference error when parsing invalid XLIFF files
- ID-2701 Bugfix UnsatisfiableVersionConstraintException: Unexpected unsatisfiable new version constraint for already resolved module with module ref Application
- ID-2700 Bugfix TransferFields mapping wrongly shows merge/extension symbol when target is missing
- ID-2697 Bugfix On-prem usages report requires the full graph and should warn about it
- ID-2678 Bugfix Parse error on Enum value range in CalcFormula filter
- ID-2677 Bugfix Regression: Prism for AL connector, navigateTo blocks while opening workspace
- ID-2624 Bugfix Free text search does not (always) navigate to actual result
- ID-2598 Bugfix Graph translation error when On{Before|After}Validate triggers are added in field modifications of an unresolved field
- ID-2730 Bugfix Properties Subtype and ObsoleteState must be case insensitive like other properties
3.1.0:
- ID-2544 Feature Show inbound flow-graph
- ID-2580 Feature Procedural flow-graph visualization enabled for database and page event triggers
- ID-2548 Feature Prism Path (custom URI scheme for specifying declaration links)
- ID-1689 Feature Find usages tree view
- ID-2566 Feature BC25 (runtime 14): SymbolReference.json omits zero valued attributes, e.g. "Kind" for control and action areas
- ID-2547 Feature Free text search tree view
- ID-2538 Feature Moved 'extends' and 'customizes' from object header to first group in object view
- ID-2537 Feature Moved namespace and usings further down in object view
- ID-2564 Feature File | Explorer menu: Order items by name
- ID-2516 Feature RIMD overview window should show original declaration
- ID-2533 Feature BC25 (runtime 14): Support for conditional expressions (condition ? ifTrue : ifFalse)
- ID-2532 Feature BC25 (runtime 14): Support for new PageStyle type
- ID-2529 Feature BC25 (runtime 14): Code graph flow logic for Query.SaveAsJson
- ID-2521 Feature BC25 (runtime 14): Support for .alpackages subfolders
- ID-2513 Feature BC25 (runtime 14): Support for new OptimizeForTextSearch property
- ID-2502 Feature BC25 (runtime 14): Support for ProfileExtensions
- ID-2496 Feature BC25 (runtime 14): Support for <interface> as <interface> expressions
- ID-2495 Feature BC25 (runtime 14): Support for <interface> is <interface> expressions
- ID-2494 Feature BC25 (runtime 14): Support for interface extending interfaces
- ID-2468 Feature BC25 (runtime 14): Resolution of 'this'
- ID-2582 Bugfix Find inbound flow to enum value fails with message "Unexpected empty tree context" when referred from table relation filter expression
- ID-2579 Bugfix Inbound and outbound flow to/from OnValidate trigger in extension object failed
- ID-2569 Bugfix Fixed resolution of objects that have ObsoleteState Moved or Removed
- ID-2546 Bugfix Parse error when AllowedFileExtensions property has multiple comma-separated values
- ID-2545 Bugfix Tooltips sometimes lack information
- ID-2541 Bugfix Prism cache optimization script uses wrong path
- ID-2531 Bugfix Parse error when ColumnSpan property value is negative
- ID-2530 Bugfix Graph loading - name resolution error when codeunit has TableNo property and record function is implicitly scoped
- ID-2525 Bugfix Setting "Confirm Closing Workspace" does not work when closing the control panel window
- ID-2515 Bugfix Setting "Confirm Closing Workspace" should also apply when reloading a workspace
- ID-2487 Bugfix Procedural graph Commit node does not have a tooltip
3.0.0:
- ID-2465 Feature Procedural graph visualization (outgoing procedural flows)
- ID-2469 Feature Immediate insights: RIMD analysis for procedure and triggers in object
- ID-2471 Feature RIMD overview for a procedure/trigger
- ID-2478 Feature Reachable RIMDing procedures, triggers and dispatch nodes
- ID-2102 Feature Immediate insights: Commit analysis for procedure and triggers in object
- ID-2479 Feature Reachable commiting procedures and triggers
- ID-2477 Feature Build compact or full graph
- ID-2461 Feature Generate graph on startup
- ID-2506 Feature Graph views can be saved to a PNG image file
- ID-2505 Feature Graph views are touch sensitive (pan and zoom in module relations, table relations and procedural graph)
- ID-1020 Feature TransferFields mapping should include extended fields
- ID-2501 Feature Solution overview export to Excel
- ID-2498 Feature Module graph - export as image (png/jpg/svg)
- ID-2486 Feature BC25 (runtime 14): Parsing support for properties FileUploadAction and FileUploadRowAction
- ID-2462 Feature Flows from and Flows to: Enable also when compact graph is available
- ID-2455 Feature Show TransferFields Mapping (context menu item)
- ID-2452 Feature Unresolved modules should have tabs in row details
- ID-2451 Feature Show related module discoveries for resolved modules
- ID-2450 Feature Show related module discoveries for unresolved modules
- ID-2428 Feature Workspace troubleshooting (reproduce workspace without .al code)
- ID-2363 Feature Search procedure and event publishers: Find all when search field is empty
- ID-2497 Bugfix Graph loading: Name Resolution - The given key was not present in the dictionary
- ID-2460 Bugfix Runtime package not detected
- ID-2436 Bugfix Do not crash when feature metrics file is corrupted; transactionally save feature metrics file
- ID-2435 Bugfix Cannot open .code-workspace when al.packageCachePath is not found on disk
- ID-2427 Bugfix Error opening workspace (UnsatisfiableVersionConstraintException)