Deep code insight for Business Central. For you, and for your AI agent.
Prism for AL reads your whole solution, including the apps you only have as packages, and turns it into a code graph you can ask questions of. You use it to understand and review code. Your AI coding agent uses the same graph through Prism's MCP server.
Answers a text search cannot give
Which user actions can reach this procedure? Can it commit? Which tables does it write? Prism answers from control flow across every module, including events, interfaces and extensions, not from matching characters in files.
Rule-based, so you can trust it
Static analysis over a typed graph. The same question gives the same answer every time, with a path you can click through to the code. When Prism says a procedure can reach a Commit, the path is in the code, not in a probability.
Built for the human in the loop
The agent asks the graph. You see the same graph as flow diagrams, RIMD signatures and commit reach. Review what the agent did with the evidence in front of you, not with its summary of it.
Extensive code graph
Gain deep code insights and visualize procedural control flows: inbound and outbound flow graphs, event publishers and subscribers, triggers and properties.

MCP server for AI agents New
Give coding agents the same graph-based insight: flows, references, reachability and dependencies
Total solution overview
Module dependency graph, module overview, object index and more
Semantic search
Find usages, find built-in function usages, semantic filtering, and much more
Rich code browsing experience
Extended object view, semantic code coloring, Visual Studio Code integration, etc.
Agentic Prism: an MCP server for AI coding agents New
Your AI coding agent is good at AL and blind to your solution: the other apps, the events, the extensions, the packages you have no source for. Prism gives it the same whole-solution view you have, as tools it can call: what calls what, which page actions lead where, whether a procedure can commit and which tables it writes, which code reaches A and B but not C, where a symbol is used and how.
Prism does the graph work and hands the agent the answer, not the files. Straighter answers, fewer tokens. And every answer is a node in the graph Prism draws, so you can check it.
Compared with the AL Language extension's own MCP server
Microsoft ships an MCP server with the AL Language extension. It is good at what it does, and it does something different: it operates the toolchain. Prism explains the solution. Most teams will run both.
AL Language extension
Operates the toolchain
Build, compile and publish the app, download symbols, and read what the compiler says.
al_buildal_compileal_publishal_downloadsymbolsal_getdiagnosticsal_symbolrelations
Both
Find a symbol by name
al_symbolsearchfind_symbols
Prism for AL
Explains the solution
What the code reaches, what reaches it, and what it does to your data, across every module.
- Trace
find_flowsfind_shortest_pathfind_reachability_set
- Consequences
find_commitsfind_rimdfind_user_actions
- Structure
find_referencesfind_extensionssearch_object_outlineget_module_graph
Question by question
- Answers it
- Partly
- No
| What the agent needs | Prism for AL | AL Language extension | Text search |
|---|---|---|---|
| Operate the toolchain | |||
| Build, compile, publish, download symbols, read compiler diagnostics | NoUse Microsoft's | Yesal_build al_compile al_publish al_downloadsymbols al_getdiagnostics |
No |
| Find | |||
| An object or member by name | YesRegular expressions, every module including packages, paged | YesPartial match, at most 200 results | PartlyLiteral matches only |
| Every reference to a symbol, classified by how it is used | YesAssignment, transfer and parameter flags, as metrics, summary or tree. find_references |
NoIn the editor and the LSP server, not over MCP | PartlyMisses events, interfaces and property bindings |
| Trace | |||
| What calls this, transitively? What does it reach? | Yesfind_flows find_shortest_path |
PartlyOne hop only. al_symbolrelations |
No |
| Which page actions and reports lead to this code? | Yesfind_user_actions |
No | No |
| Can it reach a Commit? Which tables does it read, insert, modify, delete? | Yesfind_commits find_rimd |
No | No |
| Reaches A and B, but not C | YesEvaluated server-side. find_reachability_set |
No | No |
| Structure | |||
| An object with its extensions merged into one outline | Yessearch_object_outline find_extensions |
NoBase and extensions are separate symbols | No |
Dependencies you only have as .app packages |
YesSymbols always; source when the publisher includes it | PartlySymbol search; nothing structural beyond one hop | No |
| Module and namespace dependency graph | Yesget_module_graph find_namespace_dependencies |
PartlyDeclared app.json dependencies only |
No |
| Runs | Inside Prism, or headless with StaticalPrismCmd. HTTP or stdio |
Headless with altool. stdio or HTTP |
Everywhere |
Based on the AL Language extension 18.0 documentation and the standalone almcp server.
The extension also ships a call-graph command line, altool graph, which computes
reachability over source folders. It is not exposed to agents over MCP, does not read
.app packages, and does not model table operations or commits.
Writers
Who writes to Cust. Ledger Entry?
A question that takes a developer an afternoon with a text search, because a write is not a string:
it is a Modify, with or without triggers, reached through calls, events and interfaces.
Asked through Prism, it is one call. On the LearnPrism workspace behind every screenshot on this page (19 apps, 8,794 objects, Microsoft's Base Application among them) the answer is 29 procedures and triggers, in 149 ms. Behind them are 10,373 places that can lead to that write. The agent gets the 29 and never reads the rest.

Commit
Which of them can also commit?
The same question, and the code must also be able to reach a Commit. That is
the set a reviewer wants: a ledger write and a commit in one flow is how half a posting ends up in
the database.
22 procedures, in 186 ms. One of them is ProcessElectronicPayment in
codeunit CheckManagement. Its only reachable Commit sits in
RemoveCreditTransfers, one call down.

Payment Tolerance Management that modify and commit directly, and works outwards to
PostCust in Gen. Jnl.-Post Line at distance 17. Every row carries its Prism Path,
so you can open it in Prism.
User actions
Can a user get there?
For ProcessElectronicPayment: 3 ways in. Void Payments and
Transmit Payments on the Payment Journal, and the report Void/Transmit Elec. Pmnts.
From Void Payments to the commit: seven steps through procedures and triggers you can open.
The agent noticed on its own that the commit fires from a report's OnAfterGetRecord,
once per journal line.

Void Payments
to the commit, through the report's OnAfterGetRecord trigger.
Review
Review what the agent did
Every answer the agent gets is a node in the graph Prism draws. Open ProcessElectronicPayment
in Prism, and one strip of Immediate insights answers all three questions above: Commit
reachable, 3 user actions, 8 tables modified. Each button opens the query behind the number.
Same rules, drawn for a person. The agent's claim becomes a picture you can check, and the picture is built by the analysis that answered the agent.

More screenshots 3Fewer screenshots

RemoveCreditTransfers.
Find Shortest Path shows how it is reached.

Credit Transfer Entry
and Credit Transfer Register.

Payment Journal and one report. Three entry
points, all of them checkable.
Connect
Connect your agent in a few minutes
Connect over HTTP. Press Start on the MCP Server page, or run the server from the command line, and the agent connects to it. It works on a workspace that is already loaded, graph already built.
Start over stdio. With a stdio entry in the project's mcp.json, the agent starts the server itself whenever you open the folder or workspace. No window, nothing to start by hand; the index is built on each launch.
Works with any MCP-capable agent: GitHub Copilot in Visual Studio Code, Claude Code, Cursor. The tools read your AL source and .app packages, and never touch a database or a tenant.

Extensive code graph
Gain deep insights into syntax, references and control flow through calls to procedures and built-in functions, event publishers/subscribers, triggers and properties.
Flow visualization
Visualize control flows at procedure and trigger level
Use the Inbound flow-graph of a procedure or trigger to visualize the control flow paths that lead to the procedure or trigger getting called. This is Find usages on steroids.
Use the Outbound flow-graph of a procedure or trigger to visualize what happens when the procedure or trigger executes.

ProcessElectronicPayment.

ProcessElectronicPayment.
Publishers
Find event publishers that you can subscribe to
Customizing Business Central is all about finding the right events to subscribe to. Find where the existing business logic begins, then click the EventPublisher button to find event publishers that may be reached by the business logic. Use Find Shortest Path to help you understand under which circumstances the event publisher can be reached.


Commit
Can this procedure reach a commit?
When calling a procedure it is critical to know if it may reach an explicit Commit call as this
could break database integrity.

ProcessElectronicPayment can reach an explicit call of Commit.
Click the Commit button to see where the Commit gets called.

RemoveCreditTransfers calls Commit and is reachable from ProcessElectronicPayment.
Use Find Shortest Path on the RemoveCreditTransfers node to see how the procedure is reachable from ProcessElectronicPayment.
RIMD
How does a business process use tables?
Look at the Read, Insert, Modify, Delete (RIMD) signature of a procedure or trigger to get a deeper understanding of how it works and which database trigger events you can subscribe to.

ProcessElectronicPayment.
Click e.g. Delete to see which two tables data is deleted from.

Credit Transfer Entry and Credit Transfer Register: the two tables ProcessElectronicPayment deletes from. Click the buttons to add more RIMD operations. Use the context menu
on a table to view where the database operations take place.
User actions
Which user actions can lead to this procedure being called?
Backtrack control flow all the way back to user actions such as clicking a page action or running a report. Click the UserAction button to find which user actions potentially lead to the procedure or trigger being called.


Void/Transmit Elec. Pmnts.
Invoke Find Shortest Path to display a flow path from a user action
to the procedure.
Shortest path
Connect the dots
No matter if a flow result originates from an outbound search (example: reachable event publishers) or inbound flow (example: backtracking to user actions), Find Shortest Path shows you the shortest control flow path between a start and an end point. Click the steps to view the code, so you can identify branching and looping statements; this will help you understand under which circumstances the flow is possible.
- Show flow path from source to target node
- Steps are numbered
- Tree view provides context
- Click on a flow node to navigate in Prism
- Use expand/collapse buttons to get high-level overview
- Use filter to reduce amount of data

Total solution overview
Open solution
Flexible options for opening a solution
We include source code of dependencies when available, so you get the full solution overview.
When source code is not available for an app, we include symbol information from the .app file (most information apart from procedure and trigger bodies.)
- Open workspace: opens a Visual Studio Code
.code-workspacefile. - Open from BC: opens a solution from a running Business Central service.
- Open folder: opens a folder of Visual Studio Code projects or
.alsource files and packages (.app.) - Open package: opens a single package (
.appfile.)

Module overview
What is your solution made of?
The solution page provides a quick overview of which modules (apps) the solution consists of and how they are related.
- Modules: metadata from
app.json, number of objects per type - Dependencies: used by (inbound), usings (outbound), and navigation between them
- Translations: XLIFF file overview

Module graph
Tame the complexity and make sense of it all
Awareness and understanding of module dependencies is key. A picture says more than 1000 dependency declarations, so Prism generates a dependency graph for your solution.
- Visually traverse dependencies
- Propagated dependencies (e.g. Application)
- Modules with only symbols marked with asterisk (*)
- Flexible display options, e.g. version constraints

Translations
Translation files overview and insight
Read moreShow less
As a solution grows, it can become hard to figure out which XLIFF files apply to a module and in case of multiple translations of the same label, which translation wins. Prism for AL comes to the rescue.


Object index
Filter, group and order objects as you like
Quickly locate objects with flexible object filtering. By default, objects are grouped by module and object type and modules are sorted by 'topological order' induced by the module dependencies.

More screenshots 2Fewer screenshots

sales*setup), object number, object number ranges or combine with '|'.

Rich code browsing experience
Object view
Designed so you get insight quicker
Structured and colourful, packaged with information not available in the source code.

More screenshots 4Fewer screenshots




Extended view
Inlined extension elements provide a consolidated object view
In the "Extended" view, which is the default view, we inline all declarations from extended objects as if they were included in the base object. Elements "imported" like that are marked with a merge symbol in front of the element name. Click the symbol to navigate to the extension object.

Group Member Submissions before
VATReturnStatus.
More screenshots 1Fewer screenshots

Group Member Submissions
before base page's VATReturnStatus.
Semantic colouring
Turbo charged code reading speed
Read moreShow less
In general, developers spend a lot more time reading than writing code. This is especially true with AL, as Business Central's base application alone has around half a million lines of code. So code reading speed matters. And semantic code colouring helps.
- Field
- Variable (globals in italic)
- Parameter
- Return variable
- Built-in method
- Procedure
- Object and namespace (namespaces in italic)
- Data type
- Commit
- Delete
Variables, parameters and return variables holding a temporary record are underlined with a dotted line.

Dependencies
Tell me who your friends are and I will tell you who you are
Read moreShow less
Understand the purpose of an object better by looking at how it relates to other objects. Answer questions like "Which pages have a certain table as SourceTable?"
- Usings (outbound) and usages (inbound)
- Checkmark indicates existence of kind of dependency
- Find usages on each object dependency via context menu
- Follow the dependency chain with each row's Go button
- Search objects to reduce candidates

Outline
Find your way in the current object
Outlines the current object as a tree structure for overview and navigation purposes. Use wildcard filter to restrict to what you are looking for. Configure what you want to see, e.g. 'only extensions' if you want to see how a base object is extended.

More screenshots 1Fewer screenshots

Visual Studio Code
Browse and analyse in Prism, edit in Visual Studio Code
Seamless two-way integration between Prism for AL and Visual Studio Code gives you easy access to Prism functionality in your daily work. The integration from Prism to Visual Studio Code is enabled for any source object which is located in your Visual Studio Code workspace folder. Navigation from Visual Studio Code to Prism requires Prism for AL Connector.


Semantic search
Find usages
Find usages of anything from anywhere
Find usages of any declaration (object, procedure, field, key, control etc) in any module across your whole solution. Right-click any declaration to invoke. Prism finds usages even in symbol files (where available). Save time by using result filters to narrow down the number of results.

Built-in function usages
How did we get this data into the database?
Find Built-in Function Usages allows you to quickly answer questions like the one above.
Select which instance methods you search for. For table functions like
Insert, save time by narrowing the result to
non-temporary records.

More screenshots 2Fewer screenshots


Event search
Find events fit for your purpose
Read moreShow less
Developing in AL necessitates a lot of searching for appropriate integration and business events to subscribe to. Unless you are 100% familiar with an event, use Find usages on the event, so you understand exactly when and how the event is raised.

on*notification.

OnAfterNotificationSent: raised twice and subscribed once.
Table relations
Explore your data model visually
Understanding the data model is crucial for efficient AL development. With approximately 1500 tables in Microsoft's base application alone, presenting the full data model in one diagram is not an option. Instead, Prism for AL lets you explore the data model gradually.
- Right-click the start table
- Immediate in- and outbound table relations are shown
- Navigate to objects and table relation definitions
- Expand diagram by exploring in- and outbound relations

Try Prism for AL on your own code
Download it and press Get trial license key on its Home page. The license key reaches your inbox straight away, and the 14-day trial includes the MCP server.
Book a live demo
We take you through Prism for AL and answer your questions. Suggest a couple of times—we are pretty flexible.
7 usages of Prism for AL
Marije BrummelMarije Brummel's blog Performance troubleshooting for Business Central is impossible without the use of Prism for AL. It’s the fastest way to search across extensions for usages of fields and keys. I could not do my job without Prism for AL.
Suresh Kulla Prism for AL has significantly enhanced my efficiency over the past year by facilitating the identification of issues and the development of solutions.
Tine StaričMVP, Tech Adventures in Business Central Seriously, Visual Studio Code reference search is nothing compared to the powers of Prism for AL's code graph.
Jurica BogunovicTheta Prism for AL is irreplaceable. Best solution analyzer since … I guess since Prism for C/AL.
Filip CrombezNavitrans Prism for AL has some unique features to discover your full AL stack which is not possible with Visual Studio Code.
Džoka MitrovSwissSalary Everything I need for AL code analysis in one tool. And it’s blazing fast.
Filip CrombezNavitrans From within Prism for AL you can open the object in Visual Studio Code and the other way round! So I'm using Prism for AL as a base tool to explore and then do modifications in Visual Studio Code.
Pricing
Per named user per month, billed yearly. The size of your team sets the price for every user on the subscription.
Prices in DKK, EUR and USD- €37 1–4 users
- €32 5–19 users
- €27 20+ users
Ready to sign up?
If you would like to know more before you decide, then please visit our extensive documentation or the subscription FAQ. Also, feel free to contact us with any questions or suggestions you may have.
