<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Athulya R</title>
    <description>The latest articles on DEV Community by Athulya R (@athulya_r).</description>
    <link>https://dev.to/athulya_r</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3626462%2F2c59f927-606d-4f2d-be54-c6620aa83ed7.jpg</url>
      <title>DEV Community: Athulya R</title>
      <link>https://dev.to/athulya_r</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/athulya_r"/>
    <language>en</language>
    <item>
      <title>Build a Review Storm Analyzer with ToolJet MCP and Jev</title>
      <dc:creator>Athulya R</dc:creator>
      <pubDate>Tue, 13 Oct 2026 12:03:00 +0000</pubDate>
      <link>https://dev.to/tooljet/build-a-review-storm-analyzer-with-tooljet-mcp-and-jev-13aa</link>
      <guid>https://dev.to/tooljet/build-a-review-storm-analyzer-with-tooljet-mcp-and-jev-13aa</guid>
      <description>&lt;h2&gt;
  
  
  What Is a Review Storm Analyzer?
&lt;/h2&gt;

&lt;p&gt;A shared spreadsheet that only one person knows how to work stops scaling the week a launch floods your team with customer reviews. Build a review storm analyzer with ToolJet MCP and &lt;a href="https://docs.tooljet.ai/docs/marketplace/plugins/marketplace-plugin-typesafe/" rel="noopener noreferrer"&gt;Jev&lt;/a&gt;, TypeSafe's decision model, and one prompt gives you a governed app. Jev reads each review and returns sentiment, topic, urgency and a supporting sentence, and a person decides the final label. The result is a one-page brief with a headline, topic tiles, a filterable feed and an urgent follow-up list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Freview-storm-analyzer-app-full.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Freview-storm-analyzer-app-full.png" title="Review Storm Analyzer built with ToolJet MCP and Jev" alt="Review Storm Analyzer full app screen built with ToolJet MCP and Jev, showing the insights headline, topic tiles, review feed, reviews by topic and urgent follow-ups" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Review Storm Analyzer after a full run: 100 of 100 reviews labelled by Jev in 00:06.4 of Jev time, with product quality the loudest theme and 38 reviews flagged for follow-up&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Freview-storm-analyzer-app-run.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Freview-storm-analyzer-app-run.png" title="Review Storm Analyzer recorded run" alt="The recorded 100-review run at 1.5 times speed: the processed counter climbs to 100 while the Jev timer stops at 00:06.4" width="720" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The recorded run at 1.5 times speed: the counter climbs to 100, the Jev timer stops at 00:06.4 and a review opens in the detail panel&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How To Triage A Review Flood
&lt;/h2&gt;

&lt;p&gt;Triage a review flood by labelling every review, grouping the loudest themes and surfacing urgent follow-ups. &lt;a href="https://tooljet.com/mcp" rel="noopener noreferrer"&gt;ToolJet MCP&lt;/a&gt; lets a coding agent build that as a working app inside ToolJet, with the page, queries and data model connected.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Load:&lt;/strong&gt; a RunJS query sends the batch to Jev through 12 parallel workers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Label:&lt;/strong&gt; Jev returns sentiment, topic, an urgent flag (urgency probability of 50% or higher) and the sentence that supports the label.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review:&lt;/strong&gt; the brief updates as results arrive. Analysts correct a label with a reason, and product managers add follow-up notes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Set Up ToolJet MCP and the TypeSafe Datasource
&lt;/h2&gt;

&lt;p&gt;Connect your coding agent with the &lt;a href="https://docs.tooljet.ai/docs/build-with-ai/mcp/overview/" rel="noopener noreferrer"&gt;ToolJet MCP overview&lt;/a&gt; and the &lt;a href="https://github.com/ToolJet/tooljet-mcp" rel="noopener noreferrer"&gt;ToolJet MCP repository&lt;/a&gt;. Then add the &lt;a href="https://docs.tooljet.ai/docs/marketplace/plugins/marketplace-plugin-typesafe/" rel="noopener noreferrer"&gt;TypeSafe datasource&lt;/a&gt; to the workspace and name it typesafe, the name the build prompt uses. At build time the agent creates the app. At run time the app asks Jev typed questions through that datasource.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Was The Prompt Consolidated?
&lt;/h2&gt;

&lt;p&gt;The build took several passes, and the requirements are now consolidated into one prompt. You can use that prompt from the start and reproduce the same review brief in one shot.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Build a one-page ToolJet app called Review Storm Analyzer for a product team after a launch. Use the existing PostgreSQL datasource (postgresql_fleet) with tables rs_batches, rs_reviews, rs_synthetic_labels, rs_runs, rs_analysis, rs_corrections and rs_followups, seeded with 100 fictional reviews. Use the existing typesafe datasource (Jev) to return sentiment, topic, an urgent flag and a supporting sentence for each review. Show a headline, three topic tiles, Analyze batch with Pause and Resume, a processed counter and Jev-time timer, filters, a review feed, reviews by topic, urgent follow-ups and a detail panel for corrections and notes. Run 12 Jev workers in parallel and save results in batches with one bulk insert. Create groups Review Storm - Analysts, Product Managers and Viewers: only Analysts run Jev and save corrections, Product Managers add notes, Viewers only view.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How Does ToolJet MCP Build It?
&lt;/h2&gt;

&lt;p&gt;The agent inspected the workspace, created seven PostgreSQL tables, seeded 100 synthetic reviews, then wired the queries, the RunJS analysis, the page and the permissions. It first used stand-in labels, then switched to live Jev through the typesafe datasource.&lt;/p&gt;

&lt;p&gt;The first full run took 22.9 seconds, and Jev was not the slow part: 12 Jev calls in parallel finished in about 1.1 seconds, while each Postgres query took about 700 ms and queued. One bulk insert and rendering from memory cut the run to 8.8 seconds. The recorded run finished in 00:06.4 of Jev time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Uses Review Triage, And Who Can Open It?
&lt;/h2&gt;

&lt;p&gt;Product teams at consumer hardware brands, marketplace sellers and software teams after a release can use the same layout for any burst of text feedback. Analysts run Jev and save corrections, Product Managers add follow-up notes, and Viewers can only view. A viewer calling a write query got a 401 refusal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Role-Based Access Control in ToolJet
&lt;/h2&gt;

&lt;p&gt;ToolJet applies role-based access control at two levels. Platform permissions decide who can reach a workspace resource, and app permissions decide which pages, queries and components each group can open and run. The server enforces both. See the &lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/access-control/" rel="noopener noreferrer"&gt;access control docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Ftooljet-rbac-access-flow.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Ftooljet-rbac-access-flow.png" title="Role-based access control in ToolJet" alt="Role-based access control in ToolJet: roles and groups, app-level page, query and component permissions, and server-side rules" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ToolJet role-based access control: roles and groups, app permissions and server-side rules&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise Features for Your Review Analysis App
&lt;/h2&gt;

&lt;p&gt;Review data is customer feedback, so ToolJet also offers &lt;a href="https://docs.tooljet.com/docs/user-management/sso/saml/setup/" rel="noopener noreferrer"&gt;SAML SSO&lt;/a&gt;, &lt;a href="https://docs.tooljet.com/docs/security/audit-logs/" rel="noopener noreferrer"&gt;audit logs&lt;/a&gt;, &lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/overview/" rel="noopener noreferrer"&gt;Git Sync&lt;/a&gt; and &lt;a href="https://docs.tooljet.com/docs/setup/docker/" rel="noopener noreferrer"&gt;Docker self-hosting&lt;/a&gt; for teams that need them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;A review storm becomes a one-page brief when Jev labels and a person decides. On the recorded run, Jev labelled 100 reviews in 00:06.4, with 38 flagged for follow-up. All reviews are synthetic, and the app has not been tested with real analyst logins. Build it yourself on &lt;a href="https://tooljet.com/create-account?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=mcp-tutorials&amp;amp;utm_content=review-storm-analyzer-app" rel="noopener noreferrer"&gt;ToolJet Cloud&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try ToolJet MCP
&lt;/h2&gt;

&lt;p&gt;Build a review storm analyzer with ToolJet MCP, then request a &lt;a href="https://tooljet.com/schedule-demo?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=mcp-tutorials&amp;amp;utm_content=review-storm-analyzer-app" rel="noopener noreferrer"&gt;ToolJet demo&lt;/a&gt; for your launch-week feedback flow. Start free on &lt;a href="https://tooljet.com/create-account?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=mcp-tutorials&amp;amp;utm_content=review-storm-analyzer-app" rel="noopener noreferrer"&gt;ToolJet Cloud&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What does ToolJet MCP leave you with after generation?
&lt;/h3&gt;

&lt;p&gt;A structured ToolJet app, not a code bundle: data, queries, page logic and permissions stay together.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does Jev return for each review?
&lt;/h3&gt;

&lt;p&gt;Sentiment, topic, an urgent flag, a confidence for each answer and a supporting excerpt. Jev only suggests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I recreate the Review Storm Analyzer from the prompt?
&lt;/h3&gt;

&lt;p&gt;Yes. Add the typesafe datasource, connect your agent to ToolJet MCP and paste the prompt above.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use my own reviews?
&lt;/h3&gt;

&lt;p&gt;Yes. Point the review queries at your own PostgreSQL table.&lt;/p&gt;

&lt;h3&gt;
  
  
  How fast is the Jev analysis?
&lt;/h3&gt;

&lt;p&gt;On the recorded run, Jev labelled 100 reviews in 00:06.4 of Jev time, helped by one bulk insert for saves.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who can correct a label or add a note?
&lt;/h3&gt;

&lt;p&gt;Analysts correct labels with a reason and product managers add notes. Viewers can only view.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Jev decide on its own?
&lt;/h3&gt;

&lt;p&gt;No. Jev suggests a label and a person decides. A corrected label overrides Jev in every count.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Build a Support Ticket Sorter App with ToolJet MCP and Jev</title>
      <dc:creator>Athulya R</dc:creator>
      <pubDate>Mon, 12 Oct 2026 12:05:00 +0000</pubDate>
      <link>https://dev.to/tooljet/build-a-support-ticket-sorter-app-with-tooljet-mcp-and-jev-637</link>
      <guid>https://dev.to/tooljet/build-a-support-ticket-sorter-app-with-tooljet-mcp-and-jev-637</guid>
      <description>&lt;h2&gt;
  
  
  What Is a Support Ticket Sorter?
&lt;/h2&gt;

&lt;p&gt;Support teams need a support ticket sorter when an inbox nobody can triage in time buries urgent messages. Build a support ticket sorter with ToolJet MCP and &lt;a href="https://docs.tooljet.ai/docs/marketplace/plugins/marketplace-plugin-typesafe/" rel="noopener noreferrer"&gt;Jev&lt;/a&gt;, TypeSafe's decision model, and 100 synthetic tickets turn into a reviewable queue. Jev returns topic, urgency, clarity, escalation guidance, confidence and a short reason for each record while a person decides what to do next. An agent generated the app, and the result is a structured ToolJet application with data, queries and interface together that the team keeps running.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsupport-ticket-sorter-app-detail.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsupport-ticket-sorter-app-detail.png" title="Support Ticket Sorter built with ToolJet MCP: Ticket detail panel: the customer's original message next to Jev's structured result, with team, priority and note controls for the agent" alt="Ticket detail panel (build a support ticket sorter with ToolJet MCP)" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ticket detail panel: the customer's original message next to Jev's structured result, with team, priority and note controls for the agent&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsupport-ticket-sorter-app-detail-2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsupport-ticket-sorter-app-detail-2.gif" title="Support Ticket Sorter built with ToolJet MCP: The whole 100-ticket sort at 10 times speed on the recorded run: the processed counter climbs to 100 and the Jev timer stops at 00:07.3, then the queue tabs and table fill in" alt="The whole 100-ticket sort at 10 times speed on the recorded run (build a support ticket sorter with ToolJet MCP)" width="760" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The whole 100-ticket sort at 10 times speed on the recorded run: the processed counter climbs to 100 and the Jev timer stops at 00:07.3, then the queue tabs and table fill in&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do You Sort Support Tickets Quickly?
&lt;/h2&gt;

&lt;p&gt;Sort support tickets by reading each message, classifying topic and urgency, routing unclear cases to human review, and letting a reviewer save the final decision. A coding agent can build that as a working app with &lt;a href="https://tooljet.com/mcp" rel="noopener noreferrer"&gt;ToolJet MCP&lt;/a&gt;, so the queue, detail panel and saved edits land inside ToolJet.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Gather a batch of support messages&lt;/li&gt;
&lt;li&gt;Classify each ticket by topic and urgency&lt;/li&gt;
&lt;li&gt;Route unclear items into human review&lt;/li&gt;
&lt;li&gt;Let a reviewer edit team, priority and notes&lt;/li&gt;
&lt;li&gt;Save the final triage decision back to the queue&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How Does Jev Sort Tickets Into Queues?
&lt;/h2&gt;

&lt;p&gt;On screen, the sorter is a dense console with a top bar, queue tabs, filters, a ticket table and a detail panel on the right. The main action is Sort, which fills the queue from the batch and lets a reviewer switch between All, Untriaged, Respond now, Standard and Needs human review. Clicking a row opens the original message and Jev's result side by side, and the reviewer can change team or priority, add a note and save. Jev returns topic, urgency, clarity, whether escalation is suggested, confidence and a short reason, with confidence shown as a percentage and clarity used as a score for routing. A live processed counter and a Jev-time timer follow completed, saved decisions so the reviewer can see how the run is moving. The original message stays visible, so the edit is about the triage, not the text.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sorts 100 synthetic tickets into reviewable queue tabs&lt;/li&gt;
&lt;li&gt;Shows Jev's topic, urgency, clarity and escalation suggestion beside the source message&lt;/li&gt;
&lt;li&gt;Lets the reviewer change team or priority, add a note and save&lt;/li&gt;
&lt;li&gt;Tracks saved decisions with a live processed counter and Jev-time timer&lt;/li&gt;
&lt;li&gt;Routes unclear items into human review from the queue rules&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Set Up ToolJet MCP and the TypeSafe Datasource
&lt;/h2&gt;

&lt;p&gt;ToolJet MCP connects your coding agent to your ToolJet workspace, so the agent can create the tables, queries and components for you. Set it up with the &lt;a href="https://docs.tooljet.ai/docs/build-with-ai/mcp/overview/" rel="noopener noreferrer"&gt;ToolJet MCP overview&lt;/a&gt; and the &lt;a href="https://github.com/ToolJet/tooljet-mcp" rel="noopener noreferrer"&gt;ToolJet MCP repository&lt;/a&gt;. TypeSafe is a decision-model platform: its datasource lets a ToolJet app ask Jev typed questions and get structured answers, such as a choice, a score or a yes/no with a confidence. Add the &lt;a href="https://docs.tooljet.ai/docs/marketplace/plugins/marketplace-plugin-typesafe/" rel="noopener noreferrer"&gt;TypeSafe datasource&lt;/a&gt; to the workspace and name it typesafe, which is the name the build prompt refers to.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;At build time:&lt;/strong&gt; ToolJet MCP lets the agent create the app in your workspace.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;At run time:&lt;/strong&gt; the app calls Jev, TypeSafe's decision model, through the typesafe datasource and shows its typed answers next to the record.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Prompt Built The Support Sorter?
&lt;/h2&gt;

&lt;p&gt;The build reached this shape through several passes. The requirements are consolidated here so you can reproduce the same app in one shot.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Build a polished internal app called Support Ticket Sorter in ToolJet. Keep it to one page with a dense, clean console look, a pale grey canvas, a navy top bar and teal action buttons. Use native components only, with no animation, gradients or KPI cards, and hide the page header and navigation. Use existing PostgreSQL, not ToolJet DB, and create four tables: &lt;code&gt;stk_tickets&lt;/code&gt;, &lt;code&gt;stk_triage&lt;/code&gt;, &lt;code&gt;stk_notes&lt;/code&gt; and &lt;code&gt;stk_runs&lt;/code&gt;. Seed 100 fictional SaaS support tickets, all synthetic, across billing, login, bug, feature request and account access issues, with varied length, urgency and clarity. Use the existing TypeSafe datasource through Jev for triage. For each ticket, ask Jev for topic, urgency, clarity, whether escalation is suggested, confidence and a short reason grounded in the message. Derive the assigned team from topic with a visible routing rule, and route unclear items into human review when topic is unclear, topic confidence drops under 60 percent, or clarity is 1 or lower. Keep Jev's own values alongside any agent override. Build a navy bar with the product name, a live processed counter, a Jev-time timer, Sort, Resume, Reset and a progress bar. Add queue tabs for All, Untriaged, Respond now, Standard and Needs human review, plus filters for topic, urgency, team and review status. Show a dense ticket table and a right-side detail panel with the original message, Jev's structured result, notes, and team, priority and note inputs with Save. Support pause and resume, show the real processed count and time on completion, and never send a reply, issue a refund or change an account automatically. Run the sort with 12 parallel workers, keep results in memory, save them to PostgreSQL in bulk every 50 tickets plus one at the end, reload the board after each bulk save, and close the run and reload the board together at the end. Declare every query parameter in each query's parameters list. Create groups Support Sorter - Agents, Support Sorter - Leads and Support Sorter - Viewers with app view access. Only Agents and admins can run the sort, Jev, save and note queries, Reset is admin-only, and Leads and Viewers are read-only. Gate the UI buttons on the current user's groups.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How Does ToolJet MCP Create The Queue?
&lt;/h2&gt;

&lt;p&gt;ToolJet MCP works through the whole application, from the data model and queries to the component tree and the wiring between them, so the result lands inside ToolJet as a structured app instead of a codebase you have to assemble yourself. Enterprise app building does not stop at the interface, and the runtime carries data connections, workflows, permissions, deployment and ongoing change where supported, which matters when the queue keeps changing. You can still move from AI generation to visual editing and then to code when a case needs it, and the &lt;a href="https://docs.tooljet.com/docs/build-with-ai/mcp/overview/" rel="noopener noreferrer"&gt;ToolJet MCP documentation&lt;/a&gt; shows the pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Was The Undefined Run Id Fixed?
&lt;/h2&gt;

&lt;p&gt;The first Sort click stopped before the queue filled, and the detail panel stayed blank. The run id was undefined because query parameters were not declared in each query's options, so parameter interpolation resolved to an empty string. Declaring them everywhere fixed the run and the panel.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Did ToolJet MCP Generate?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pages&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PostgreSQL tables&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queries&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Components&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code files to maintain&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair cycles&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Who Uses Support Operations Queues?
&lt;/h2&gt;

&lt;p&gt;Any team that handles a steady flow of inbound customer messages can use this pattern: SaaS and software support, e-commerce and marketplace service desks, fintech and banking support, telecoms and utilities, and IT or HR helpdesks. The same inbox-to-queue layout fits other review queues where an AI suggestion helps a person decide, such as feedback triage or internal request routing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Can Access The Support Sorter?
&lt;/h2&gt;

&lt;p&gt;The app uses three ToolJet groups. Support Sorter - Agents (and workspace admins) can start and resume the sort, run Jev, change team or priority and save notes. Support Sorter - Leads and Support Sorter - Viewers can view everything but cannot write. Reset is admin-only. These rules are enforced on the queries themselves, so a blocked user gets a server-side refusal, not just a hidden button. The groups currently have no members.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automating Processes with ToolJet Workflows and Sub-Workflows
&lt;/h2&gt;

&lt;p&gt;A Support Ticket Sorter app often needs work to happen behind the scenes, and ToolJet Workflows automate it with a visual, node-based editor that apps, webhooks and schedules can trigger. Notifications, multi-system updates and approvals run on the server instead of in someone's browser.&lt;/p&gt;

&lt;p&gt;When an agent saves a ticket into Needs human review, you can hand that handoff to a workflow so leads get an alert without leaving the queue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Ftooljet-usp-workflows-flow-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Ftooljet-usp-workflows-flow-1.png" title="Automating Processes with ToolJet Workflows and Sub-Workflows" alt="Three cards: trigger a workflow from an app, webhook or schedule, run nodes, and add server-side code" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Automating Processes with ToolJet Workflows and Sub-Workflows&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow Triggers: Apps, Webhooks and Schedules
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/workflows/triggers/app/" rel="noopener noreferrer"&gt;Triggering workflows from an app&lt;/a&gt;:&lt;/strong&gt; add a Run Workflow query in the query panel, pass parameters and attach it to an event handler such as a button click or form submit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/workflows/triggers/webhook/" rel="noopener noreferrer"&gt;Webhook triggers&lt;/a&gt;:&lt;/strong&gt; start a workflow when an external system sends an HTTP request, with a separate endpoint URL for each environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/workflows/triggers/scheduler/" rel="noopener noreferrer"&gt;Scheduled workflows&lt;/a&gt;:&lt;/strong&gt; run on intervals or cron expressions in a chosen timezone, available from the Team plan.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Sub-Workflows, Logic and Code Nodes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/workflows/nodes/wf/" rel="noopener noreferrer"&gt;Workflow node for sub-workflows&lt;/a&gt;:&lt;/strong&gt; call one workflow from another and pass parameters, so shared steps such as logging or notifications live in one reusable child workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logic nodes:&lt;/strong&gt; branch with If-Else and iterate with Loop nodes, as outlined in the &lt;a href="https://docs.tooljet.com/docs/workflows/overview/" rel="noopener noreferrer"&gt;ToolJet Workflows overview&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/workflows/nodes/ds/" rel="noopener noreferrer"&gt;Data source nodes&lt;/a&gt;:&lt;/strong&gt; read and write databases, REST or GraphQL APIs and SaaS tools inside the flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/workflows/nodes/logic/js/" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt; and &lt;a href="https://docs.tooljet.com/docs/workflows/nodes/logic/py/" rel="noopener noreferrer"&gt;Python&lt;/a&gt; nodes:&lt;/strong&gt; transform data and apply business logic in server-side code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/workflows/versions-env/environments/" rel="noopener noreferrer"&gt;Workflow environments&lt;/a&gt;:&lt;/strong&gt; build and test in Development and Staging before running in Production, on the Enterprise plan.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Workflows let the Support Ticket Sorter app hand off slow or multi-step work, such as alerts or updates to other systems, to a reusable automation that any app in the workspace can call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise Features for Your Support Ticket Sorter
&lt;/h2&gt;

&lt;p&gt;Support tickets, notes, and reviewer overrides can carry customer context and internal decisions. ToolJet covers that governance at the platform layer, so you configure it once instead of rebuilding it in every app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSO and SCIM:&lt;/strong&gt; sign in with &lt;a href="https://docs.tooljet.com/docs/user-management/sso/saml/setup/" rel="noopener noreferrer"&gt;SAML&lt;/a&gt;, OIDC or LDAP, and provision users automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role-based access control:&lt;/strong&gt; scope &lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/access-control/" rel="noopener noreferrer"&gt;permissions&lt;/a&gt; to the app, the data source, and each query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs:&lt;/strong&gt; track every login, edit, and approval decision for &lt;a href="https://docs.tooljet.com/docs/security/audit-logs/" rel="noopener noreferrer"&gt;compliance&lt;/a&gt; review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Air-gapped deployment:&lt;/strong&gt; self-host on &lt;a href="https://docs.tooljet.com/docs/setup/docker/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; or Kubernetes so your data stays in your network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiplayer editing:&lt;/strong&gt; several builders work on the same app, with versioning and &lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/overview/" rel="noopener noreferrer"&gt;Git sync&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ToolJet AI inside your own deployment:&lt;/strong&gt; run the AI features in your tenancy rather than a shared service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could add a notification layer with ToolJet Workflows. For example, when a ticket moves into Needs human review, a workflow could post the ticket summary in Slack, email the lead through Gmail, and write the handoff note back to &lt;code&gt;stk_notes&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;This support ticket sorter shows how 100 synthetic messages become a reviewable queue with live counts, queue tabs, filters, a detail panel and saved triage edits. Jev reads each ticket, returns topic, urgency, clarity, escalation guidance and a reason, and the agent keeps control of the final decision. Using ToolJet MCP for a support ticket sorter turns manual triage into a structured app that stays editable after the first run. That gives you one place for the queue, the notes and the overrides, inside ToolJet, instead of scattering the work across messages and spreadsheets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try ToolJet MCP
&lt;/h2&gt;

&lt;p&gt;Build a support ticket sorter with ToolJet MCP, then request a &lt;a href="https://tooljet.com/schedule-demo?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=mcp-tutorials&amp;amp;utm_content=support-ticket-sorter-app" rel="noopener noreferrer"&gt;ToolJet demo&lt;/a&gt; for your queue. Start free on [ToolJet Cloud].&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What does ToolJet MCP do for Support Ticket Sorter?
&lt;/h3&gt;

&lt;p&gt;ToolJet MCP turns the sorting requirements into a working ToolJet app with the queue, detail panel, queries and save flow already wired together. In Support Ticket Sorter, the reviewer works from one queue instead of separate scripts and inbox steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does Jev return for each ticket in Support Ticket Sorter?
&lt;/h3&gt;

&lt;p&gt;Jev returns topic, urgency, clarity, whether escalation is suggested, confidence and a short reason for each ticket. The reviewer sees those fields next to the original message and can change team or priority before saving.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Jev connected live in Support Ticket Sorter, and does it decide on its own?
&lt;/h3&gt;

&lt;p&gt;Yes. Jev runs live through the TypeSafe datasource and suggests the triage result, but a person keeps the final decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I recreate Support Ticket Sorter from the prompt?
&lt;/h3&gt;

&lt;p&gt;Yes. The consolidated prompt is enough to rebuild the same queue, detail panel and save flow in one run. You can use the same structure with your own ticket data once the app is in place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need to write code after generation for Support Ticket Sorter?
&lt;/h3&gt;

&lt;p&gt;No. You can adjust the queue, filters, team routing and saved fields in the visual editor, and use code only where the app needs custom logic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I connect Support Ticket Sorter to an existing support database?
&lt;/h3&gt;

&lt;p&gt;Yes. The pattern works with PostgreSQL data already in use, and this build keeps the synthetic tickets in PostgreSQL rather than in a separate local store.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens after the agent finishes Support Ticket Sorter, and can several people keep working on it?
&lt;/h3&gt;

&lt;p&gt;The result is a structured ToolJet application, not a loose code dump. Agents, leads and viewers can keep working from the same app with different access as the queue changes.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>mcp</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Build a Hiring Inbox Sorter App with ToolJet MCP and Jev</title>
      <dc:creator>Athulya R</dc:creator>
      <pubDate>Fri, 09 Oct 2026 12:24:03 +0000</pubDate>
      <link>https://dev.to/tooljet/build-a-hiring-inbox-sorter-app-with-tooljet-mcp-and-jev-3a2a</link>
      <guid>https://dev.to/tooljet/build-a-hiring-inbox-sorter-app-with-tooljet-mcp-and-jev-3a2a</guid>
      <description>&lt;h2&gt;
  
  
  What Is a Hiring Inbox Sorter?
&lt;/h2&gt;

&lt;p&gt;A shared spreadsheet only one person knows how to work slows recruiter triage. Build a hiring inbox sorter with ToolJet MCP and &lt;a href="https://docs.tooljet.ai/docs/marketplace/plugins/marketplace-plugin-typesafe/" rel="noopener noreferrer"&gt;Jev&lt;/a&gt;, TypeSafe's decision model, so each application gets a suggested lane while a recruiter decides. The result is a structured ToolJet application with data, queries, and interface together, and the team keeps its candidate review workflow moving. By the end, you have a searchable PostgreSQL hiring queue, manual review notes, and a visible three-point rubric for the open Data Engineer role.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fhiring-inbox-sorter-app-detail-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fhiring-inbox-sorter-app-detail-1.png" title="Hiring Inbox Sorter built with ToolJet MCP: Candidate detail panel: the applicant's own words next to Jev's reading of each must-have skill, with the triage label and review note for the recruiter" alt="Candidate detail panel (build a hiring inbox sorter with ToolJet MCP)" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Candidate detail panel: the applicant's own words next to Jev's reading of each must-have skill, with the triage label and review note for the recruiter&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fhiring-inbox-sorter-app-detail-2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fhiring-inbox-sorter-app-detail-2.gif" title="Hiring Inbox Sorter built with ToolJet MCP: The whole 1000-application sort at 10 times speed: the processed counter climbs to 1000 while the Jev timer reaches 00:48" alt="The whole 1000-application sort at 10 times speed (build a hiring inbox sorter with ToolJet MCP)" width="600" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The whole 1000-application sort at 10 times speed: the processed counter climbs to 1000 while the Jev timer reaches 00:48&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do You Triage a Recruiting Inbox?
&lt;/h2&gt;

&lt;p&gt;Score applications against a visible rubric, route weak fits to human review, and keep every recruiter note on one board for the hiring team. A coding agent can build this as a working app with &lt;a href="https://tooljet.com/mcp" rel="noopener noreferrer"&gt;ToolJet MCP&lt;/a&gt;, wiring the queue, scoring, and review flow together.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List the open role and visible rubric&lt;/li&gt;
&lt;li&gt;Load each application from the inbox&lt;/li&gt;
&lt;li&gt;Score skill evidence and completeness&lt;/li&gt;
&lt;li&gt;Route weak or mixed results to human review&lt;/li&gt;
&lt;li&gt;Save recruiter notes and label changes&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How Do the Queue and Jev Work?
&lt;/h2&gt;

&lt;p&gt;The screen centers on an inbox of applications, a visible rubric, and a detail panel that opens on selection. Pressing Sort batch sends the queue through Jev, and each card lands with Strong evidence, Needs human review, or Does not meet listed criteria, plus per-skill evidence, confidence, and a short reason. The selected card shows the three skill checks beside the recruiter override controls, so the reviewer compares evidence before changing the label. The live counter and Jev-time timer track completed decisions, while search narrows the queue by name, reference, or job title. Pause, resume, label changes, and review notes keep the recruiter in control, and every application stays reachable after it moves into a lane.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Three triage lanes for strong evidence, human review, and does not meet listed criteria&lt;/li&gt;
&lt;li&gt;Per-application evidence, confidence, and short reasons from Jev&lt;/li&gt;
&lt;li&gt;Live processed count and Jev-time timer tied to completed decisions&lt;/li&gt;
&lt;li&gt;Search, pause, resume, label edits, and review notes on one screen&lt;/li&gt;
&lt;li&gt;Existing PostgreSQL tables for roles, criteria, applications, batches, decisions, and reviews&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Set Up ToolJet MCP and the TypeSafe Datasource
&lt;/h2&gt;

&lt;p&gt;ToolJet MCP connects your coding agent to your ToolJet workspace, so the agent can create the tables, queries and components for you. Set it up with the &lt;a href="https://docs.tooljet.ai/docs/build-with-ai/mcp/overview/" rel="noopener noreferrer"&gt;ToolJet MCP overview&lt;/a&gt; and the &lt;a href="https://github.com/ToolJet/tooljet-mcp" rel="noopener noreferrer"&gt;ToolJet MCP repository&lt;/a&gt;. TypeSafe is a decision-model platform: its datasource lets a ToolJet app ask Jev typed questions and get structured answers, such as a choice, a score or a yes/no with a confidence. Add the &lt;a href="https://docs.tooljet.ai/docs/marketplace/plugins/marketplace-plugin-typesafe/" rel="noopener noreferrer"&gt;TypeSafe datasource&lt;/a&gt; to the workspace and name it typesafe, which is the name the build prompt refers to.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;At build time:&lt;/strong&gt; ToolJet MCP lets the agent create the app in your workspace.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;At run time:&lt;/strong&gt; the app calls Jev, TypeSafe's decision model, through the typesafe datasource and shows its typed answers next to the record.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Is the Single Prompt Here?
&lt;/h2&gt;

&lt;p&gt;The build took several passes, and the requirements are now consolidated into one prompt that could have been used from the start. You can reproduce the same recruiter queue in a single run without piecing the spec together.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Build a one-page recruiter app called Hiring Inbox Sorter in ToolJet. Use only native components with a lean, dense, bigger-font editorial look, dark ink canvas, warm-white cards, electric-lime progress accent, large readable timer and counter. Hide the page header and navigation.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use the existing PostgreSQL datasource, &lt;code&gt;postgresql_fleet&lt;/code&gt;, not ToolJet DB. Create &lt;code&gt;his_roles&lt;/code&gt;, &lt;code&gt;his_criteria&lt;/code&gt;, &lt;code&gt;his_applications&lt;/code&gt;, &lt;code&gt;his_batches&lt;/code&gt;, &lt;code&gt;his_decisions&lt;/code&gt;, and &lt;code&gt;his_reviews&lt;/code&gt;. Seed one fictional Data Engineer role with three must-have skills, plus experience and completeness criteria, and 1000 fictional applications flagged synthetic.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use the existing TypeSafe datasource, Jev. For each application, ask Jev for a lane suggestion, per-skill evidence, confidence, and a short reason. Judge only skill evidence, relevant experience, and completeness. Never use names, photos, age, gender, ethnicity, disability, school prestige, or other proxy attributes. Route to Needs human review when confidence is under 60%, when Jev says strong but a skill is not Clear, or when criteria are not met and the application is incomplete. Label those routing rules in the UI.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Show the job title, a visible three-point rubric, an unsorted inbox, a prominent Sort batch button, a live processed/total counter, a Jev-time timer based on completed decisions, three result lanes with compact evidence cards, a search box, and a candidate detail panel where the recruiter can change the triage label and save a review note. Support pause and resume. Show a completed state with the real processed count and Jev time. Never auto-reject or advance a candidate.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Performance: send 5 applications to Jev in each call, one state holding applications A1 to A5, five question slots per application, calls in parallel from RunJS, keep results in memory and on screen as Jev answers, save them in one bulk insert at the end, refresh the board on a short coalesced tick, and render only the newest 12 cards per lane while sorting, 50 when idle. The timer shows Jev time only, from first Jev call sent to last Jev answer, not setup, save, or finish queries.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Access: create groups Hiring - Recruiters, Hiring - Hiring Managers, and Hiring - Viewers. Only Recruiters and admins can run the batch and override queries. Hiring Managers can also save notes. Viewers can only view.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How Does MCP Build the App?
&lt;/h2&gt;

&lt;p&gt;ToolJet MCP takes the requirements and builds the data model, pages, components, queries, and wiring as one structured ToolJet application that the team can keep editing inside ToolJet after generation and review later when requirements change. That matters because the runtime carries data connectivity, workflows, permissions, deployment, and ongoing change where supported, instead of handing you a codebase to operate yourself as requirements change over time. From there, you can move from generation to visual edits to code when a case needs it, with the &lt;a href="https://docs.tooljet.com/docs/build-with-ai/mcp/overview/" rel="noopener noreferrer"&gt;ToolJet MCP documentation&lt;/a&gt; close by for implementation detail as needed in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Did the Lanes Look Stuck?
&lt;/h2&gt;

&lt;p&gt;The lanes looked stuck because the browser redrew all four columns after each decision, so answers queued behind the redraws. Jev was returning quickly, and the fix was to batch the updates, keep results on screen as they arrived, and save them once at the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Data Tables Power the Queue?
&lt;/h2&gt;

&lt;p&gt;The app ended up with six tables in three groups. &lt;code&gt;his_roles&lt;/code&gt; and &lt;code&gt;his_criteria&lt;/code&gt; define the role and visible rubric, &lt;code&gt;his_applications&lt;/code&gt;, &lt;code&gt;his_batches&lt;/code&gt;, and &lt;code&gt;his_decisions&lt;/code&gt; run the queue, and &lt;code&gt;his_reviews&lt;/code&gt; stores recruiter overrides and notes. That split keeps the inbox, the batch state, and the review trail separate while the recruiter works, and it keeps the visible rubric close to the candidate list and the review table close to the override action and the saved note.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Components&lt;/th&gt;
&lt;th&gt;What they cover&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Command center&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;Rubric, inbox, Sort batch, live counter and timer, three Jev lanes, search and candidate detail&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What Did ToolJet MCP Generate?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pages&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PostgreSQL tables&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queries&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Components&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code files to maintain&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair cycles&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Which Recruiting Teams Use This Flow?
&lt;/h2&gt;

&lt;p&gt;Any team that screens a high volume of applications against fixed, job-related criteria can use this pattern: in-house talent teams, staffing and recruitment agencies, shared-services HR in logistics, finance and healthcare, and campus or seasonal hiring programs. The same inbox-to-queue layout also fits other review queues where an AI suggestion helps a person decide, such as vendor onboarding or grant applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Can Access the Recruiter Queue?
&lt;/h2&gt;

&lt;p&gt;The app uses three ToolJet groups. Hiring - Recruiters (and workspace admins) can start, pause and finish batches, run Jev, change labels and save notes. Hiring - Hiring Managers can view everything and save review notes. Hiring - Viewers can only view. These rules are enforced on the queries themselves, so a blocked user gets a server-side refusal, not just a hidden button. The groups currently have no members.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generating Apps from a Prompt with ToolJet AI
&lt;/h2&gt;

&lt;p&gt;A Hiring Inbox Sorter app can also start from a single description: ToolJet AI, built into the product, generates a working app from a natural-language prompt, which the team then refines in the visual App Builder. It gives non-developers a fast way to create and change apps in the browser.&lt;/p&gt;

&lt;p&gt;That matters when recruiters want the queue shaped from a prompt, then refined by a hiring manager later inside ToolJet without rebuilding the flow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Ftooljet-usp-ai-builder-flow-5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Ftooljet-usp-ai-builder-flow-5.png" title="Generating Apps from a Prompt with ToolJet AI" alt="Three cards showing how to build with AI in ToolJet: describe the app in the AI chat, go deeper with queries, code and modules, and pick credits, your own key or an AI server" width="800" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Generating Apps from a Prompt with ToolJet AI&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  From Prompt to Working App
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/build-with-ai/generate-applications/" rel="noopener noreferrer"&gt;AI app generation&lt;/a&gt;:&lt;/strong&gt; describe the business app on the ToolJet home page and ToolJet builds it directly, opening the App Builder with UI components, queries and data bindings already configured.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edit with a prompt:&lt;/strong&gt; update components and queries in any new or existing app, and @mention a specific component or query to target it exactly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate modules:&lt;/strong&gt; create reusable modules from a prompt inside the Module Builder.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Queries, Code and AI Model Options
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/build-with-ai/generate-queries/" rel="noopener noreferrer"&gt;AI query generation&lt;/a&gt;:&lt;/strong&gt; create fully configured queries, write JavaScript and Python snippets, and auto-sort a crowded query panel into folders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/build-with-ai/ai-credits/" rel="noopener noreferrer"&gt;AI credits&lt;/a&gt;:&lt;/strong&gt; each AI operation consumes credits based on its complexity, and monthly credits are used before add-on credits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/setup/tooljet-ai/bring-your-own-key/" rel="noopener noreferrer"&gt;Bring your own LLM key&lt;/a&gt;:&lt;/strong&gt; on the Enterprise plan, authenticate AI requests with your own provider key and pay the provider directly instead of using ToolJet AI credits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/setup/tooljet-ai/tj-ai-enterprise/" rel="noopener noreferrer"&gt;ToolJet AI Enterprise&lt;/a&gt;:&lt;/strong&gt; self-hosted Enterprise customers run the AI server inside their own environment, so no AI data is sent to ToolJet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ToolJet AI is one of the &lt;a href="https://docs.tooljet.com/docs/build-with-ai/overview/" rel="noopener noreferrer"&gt;two ways to build with AI in ToolJet&lt;/a&gt;: the in-product chat, or ToolJet MCP from coding agents such as Claude Code. Both can create and modify apps, so the Hiring Inbox Sorter app can be refined later by prompt from the browser as well as from a developer's editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise Features for Your Hiring Inbox Sorter
&lt;/h2&gt;

&lt;p&gt;A hiring inbox stores applicant records, review notes, and role criteria. ToolJet covers that governance at the platform layer, so you configure it once instead of rebuilding it in every app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSO and SCIM:&lt;/strong&gt; sign in with &lt;a href="https://docs.tooljet.com/docs/user-management/sso/saml/setup/" rel="noopener noreferrer"&gt;SAML&lt;/a&gt;, OIDC or LDAP, and provision users automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role-based access control:&lt;/strong&gt; scope &lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/access-control/" rel="noopener noreferrer"&gt;permissions&lt;/a&gt; to the app, the data source, and each query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs:&lt;/strong&gt; track every login, edit, and approval decision for &lt;a href="https://docs.tooljet.com/docs/security/audit-logs/" rel="noopener noreferrer"&gt;compliance&lt;/a&gt; review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Air-gapped deployment:&lt;/strong&gt; self-host on &lt;a href="https://docs.tooljet.com/docs/setup/docker/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; or Kubernetes so your data stays in your network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiplayer editing:&lt;/strong&gt; several builders work on the same app, with versioning and &lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/overview/" rel="noopener noreferrer"&gt;Git sync&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ToolJet AI inside your own deployment:&lt;/strong&gt; run the AI features in your tenancy rather than a shared service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could add a notification layer with ToolJet Workflows. For example, a batch complete trigger could post a Slack message, email the hiring manager through Gmail, and write the result back to &lt;code&gt;his_reviews&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;This build shows how a Hiring Inbox Sorter built with ToolJet MCP turns a crowded application stream into one reviewable queue. Jev reads each synthetic application against the visible rubric, returns lane suggestions with evidence, and leaves the recruiter in control of labels and notes. The app keeps the role, rubric, decisions, and review trail in separate tables, so the queue stays inspectable instead of buried in cells. The live counter, timer, search, and permissioned actions make the screen useful as a working hiring process, not a static mockup for the team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try ToolJet MCP
&lt;/h2&gt;

&lt;p&gt;Build a hiring inbox sorter with ToolJet MCP for your own queue, then request a &lt;a href="https://tooljet.com/schedule-demo?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=mcp-tutorials&amp;amp;utm_content=hiring-inbox-sorter-app" rel="noopener noreferrer"&gt;ToolJet demo&lt;/a&gt;. Start free on [ToolJet Cloud].&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is ToolJet MCP in the Hiring Inbox Sorter workflow?
&lt;/h3&gt;

&lt;p&gt;ToolJet MCP is the path that turns the prompt into a structured ToolJet application. Use the prompt, the existing PostgreSQL datasource, and the TypeSafe datasource to reproduce the same recruiter queue, rubric, search, and review flow in one pass.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does the Hiring Inbox Sorter do for recruiters?
&lt;/h3&gt;

&lt;p&gt;The Hiring Inbox Sorter turns a crowded application inbox into a reviewable queue. Recruiters sort applications into Strong evidence, Needs human review, or Does not meet listed criteria, then inspect evidence, change labels, and save notes.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does Jev return for each application?
&lt;/h3&gt;

&lt;p&gt;Jev returns a lane suggestion, per-skill evidence marked Clear, Partial, or Missing, confidence, and a short reason for each application. That output sits on the card so the recruiter can compare evidence before choosing a label.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Jev connected live and does it decide on its own?
&lt;/h3&gt;

&lt;p&gt;No. Jev reads each application during sorting and suggests a lane, but the recruiter keeps the label and can save a review note. Mixed or low-confidence cases route to human review instead of being auto-handled.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can you use existing PostgreSQL tables for the queue?
&lt;/h3&gt;

&lt;p&gt;Yes. This build reads and writes the queue from an existing PostgreSQL datasource, so the role, rubric, applications, batches, decisions, and reviews stay in one place. That keeps the hiring data inside the team’s current database.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens to the app after Jev finishes?
&lt;/h3&gt;

&lt;p&gt;It stays a structured ToolJet application, with the data model, queries, and UI running on the platform runtime. You can keep editing it visually and add code where a case needs it, instead of unpacking a codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can several people work on the same app at once?
&lt;/h3&gt;

&lt;p&gt;Yes. Recruiters, Hiring Managers, and Viewers can share the same app with different access rules for sorting, notes, and read-only review. That keeps one queue for the team while each role gets the actions it needs.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>software</category>
      <category>llm</category>
    </item>
    <item>
      <title>Build a Multilingual Service Desk with ToolJet MCP and Jev</title>
      <dc:creator>Athulya R</dc:creator>
      <pubDate>Thu, 08 Oct 2026 12:10:00 +0000</pubDate>
      <link>https://dev.to/tooljet/build-a-multilingual-service-desk-with-tooljet-mcp-and-jev-54l1</link>
      <guid>https://dev.to/tooljet/build-a-multilingual-service-desk-with-tooljet-mcp-and-jev-54l1</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Hotel shared-services teams need a multilingual service desk that turns voice complaints and requests into readable work for agents in Lisbon. This build shows how you build a multilingual service desk with ToolJet MCP for that job, and an agent generated this as a structured ToolJet application, with data, queries and interface together, that the team keeps running. By the end, you see how transcripts, translations, glossary checks and queue routing sit in one workflow for English and Portuguese agents. You also see how voice signals guide triage and how back-translation keeps replies readable for the sender. That matters when the same request arrives in several languages and still needs one clear queue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fmultilingual-service-desk-app-queue-5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fmultilingual-service-desk-app-queue-5.png" title="Multilingual Service Desk built with ToolJet MCP: Incoming queue: tickets sorted by urgency with voice signals and translation confidence, and a sectioned preview with Jev triage, the highlighted translation and the original audio." alt="Incoming queue (build a multilingual service desk with ToolJet MCP)" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Incoming queue: tickets sorted by urgency with voice signals and translation confidence, and a sectioned preview with Jev triage, the highlighted translation and the original audio.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fmultilingual-service-desk-app-queue-2-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fmultilingual-service-desk-app-queue-2-3.png" title="Multilingual Service Desk built with ToolJet MCP: Ticket workspace: list on the left, original and English translation side by side with uncertain spans and glossary mangles highlighted, plus the reply, back-translation and Jev check boxes." alt="Ticket workspace (build a multilingual service desk with ToolJet MCP)" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ticket workspace: list on the left, original and English translation side by side with uncertain spans and glossary mangles highlighted, plus the reply, back-translation and Jev check boxes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fmultilingual-service-desk-app-queue-3-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fmultilingual-service-desk-app-queue-3-3.png" title="Multilingual Service Desk built with ToolJet MCP: Insights &amp;amp; glossary: donut by language, treemap by property, dot chart by issue type, translations to audit and the editable glossary." alt="Insights &amp;amp; glossary (build a multilingual service desk with ToolJet MCP)" width="799" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Insights &amp;amp; glossary: donut by language, treemap by property, dot chart by issue type, translations to audit and the editable glossary.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Triage Voice Requests
&lt;/h2&gt;

&lt;p&gt;Convert voice complaints and requests into triaged tickets by transcribing the audio, translating it into English, flagging uncertain spans and glossary terms, then routing each item by queue and urgency. A coding agent can build this as a working app by running the prompt through &lt;a href="https://tooljet.com/mcp" rel="noopener noreferrer"&gt;ToolJet MCP&lt;/a&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Capture the voice message and language&lt;/li&gt;
&lt;li&gt;Transcribe the audio and translate it&lt;/li&gt;
&lt;li&gt;Flag uncertain spans and glossary mismatches&lt;/li&gt;
&lt;li&gt;Route the ticket by queue and urgency&lt;/li&gt;
&lt;li&gt;Draft the reply and check meaning&lt;/li&gt;
&lt;li&gt;Release the response after review&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How the Queue and Jev Work
&lt;/h2&gt;

&lt;p&gt;The ticket screen is a queue on the left and a conversation workspace on the right, so you move from triage to reply without leaving the record. &lt;a href="https://docs.tooljet.ai/docs/marketplace/plugins/marketplace-plugin-typesafe/" rel="noopener noreferrer"&gt;Jev&lt;/a&gt;, TypeSafe's decision model. It reads the current ticket state through the TypeSafe datasource, weighs measured voice signals as cues rather than emotion labels, and returns queue, urgency, escalate, language, meaning match, glossary kept and tone. Urgency and tone are scored, meaning match is treated as a percentage, and the ticket card separately shows translation confidence. The original audio stays playable, uncertain translation spans are highlighted in amber, and glossary mangles are marked in coral. You also see the English reply, the back-translation and the check section together before Send unlocks, while leads can reassign and reviewers can add audit notes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Voice messages land with transcript, translation and playable audio&lt;/li&gt;
&lt;li&gt;Uncertain spans and glossary mangles are highlighted in the ticket view&lt;/li&gt;
&lt;li&gt;Jev returns queue, urgency, escalate, language, meaning match, glossary kept and tone&lt;/li&gt;
&lt;li&gt;Send stays locked until meaning and glossary checks pass&lt;/li&gt;
&lt;li&gt;Role-aware views let agents, leads and reviewers share one desk&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Set Up ToolJet MCP and the TypeSafe Datasource
&lt;/h2&gt;

&lt;p&gt;ToolJet MCP connects your coding agent to your ToolJet workspace, so the agent can create the tables, queries and components for you. Set it up with the &lt;a href="https://docs.tooljet.ai/docs/build-with-ai/mcp/overview/" rel="noopener noreferrer"&gt;ToolJet MCP overview&lt;/a&gt; and the &lt;a href="https://github.com/ToolJet/tooljet-mcp" rel="noopener noreferrer"&gt;ToolJet MCP repository&lt;/a&gt;. Then add the &lt;a href="https://docs.tooljet.ai/docs/marketplace/plugins/marketplace-plugin-typesafe/" rel="noopener noreferrer"&gt;TypeSafe datasource&lt;/a&gt; to the workspace and name it typesafe, which is the name the build prompt refers to.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;At build time:&lt;/strong&gt; ToolJet MCP lets the agent create the app in your workspace.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;At run time:&lt;/strong&gt; the app calls Jev, TypeSafe's decision model, through the typesafe datasource and shows its typed answers next to the record.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why the Prompt Is Condensed
&lt;/h2&gt;

&lt;p&gt;The build took several passes, and the requirements are now consolidated into one prompt that could have been used from the start. You can reproduce the same app in a single shot from the prompt below, without reconstructing the iterations yourself.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Build a polished internal app called Multilingual Service Desk in ToolJet for a hotel group shared-services team in Lisbon working in English and Portuguese.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Keep it to 3 pages: Incoming Queue, showing open tickets with role, scope, counts of uncertain translations and glossary issues, filters, urgency sorting, preview, audio and triage actions; Ticket, showing the conversation, translation highlights, reply fields, the Jev check section, and Send locked until meaning reaches 70 percent and glossary terms are kept; Insights and Glossary, showing language and property visuals, a translations-to-audit list, and an editable glossary.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use 4 ToolJet DB tables: &lt;code&gt;msd_tickets&lt;/code&gt;, &lt;code&gt;msd_replies&lt;/code&gt;, &lt;code&gt;msd_glossary&lt;/code&gt; and &lt;code&gt;msd_audits&lt;/code&gt;. Seed the voice tickets, and keep transcripts, translations and voice measurements as upstream outputs.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For triage, ask for queue, urgency, escalate and language. For reply checks, ask for meaning match, glossary terms kept and tone, and store score outputs as plus 1.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create groups for Agents, Team Leads and Quality Reviewers. Agents see assigned tickets, leads and reviewers see every language, and workspace admins count as both.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How MCP Builds the Full App
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://docs.tooljet.com/docs/build-with-ai/mcp/overview/" rel="noopener noreferrer"&gt;ToolJet MCP documentation&lt;/a&gt; explains the build pattern, and ToolJet MCP works through the whole application, not just the screen, so the data model, pages, components, queries and wiring land together as one structured ToolJet application rather than a codebase to operate yourself. Enterprise app building does not stop at the interface, because data connectivity, workflows, permissions and ongoing change still sit on the runtime where supported, and the path stays open from AI generation to visual editing to code when a case needs it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pixel Height Issue We Fixed
&lt;/h2&gt;

&lt;p&gt;The first pass made every button and input look collapsed because the layout used grid rows where the design expected pixel heights. Switching those measurements to pixels restored the intended spacing and let the page render normally across the workspace.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Data Tables Power the Desk
&lt;/h2&gt;

&lt;p&gt;The app ended up with four tables. &lt;code&gt;msd_tickets&lt;/code&gt; stores each voice message with its transcript, English translation, uncertainty flags, voice signals, triage fields and status, &lt;code&gt;msd_replies&lt;/code&gt; stores sent replies with back-translations and the reply check result, &lt;code&gt;msd_glossary&lt;/code&gt; stores protected property terms, and &lt;code&gt;msd_audits&lt;/code&gt; stores reviewer verdicts and notes.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Components&lt;/th&gt;
&lt;th&gt;What they cover&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Incoming queue&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Urgency-sorted voice tickets with filters and a preview of triage, translation and audio.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ticket&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;Read, listen, reply, check the back-translation with Jev, reassign and audit.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Insights &amp;amp; glossary&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Volumes by language, property and issue type, translations to audit and the glossary.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What the Results Table Shows
&lt;/h2&gt;

&lt;p&gt;The results table captures the page render checks, the Jev triage save, the reply check and send test, and the glossary highlighting verification.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pages&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ToolJet DB tables&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queries&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Components&lt;/td&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code files to maintain&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair cycles&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fmultilingual-service-desk-app-components-inspector-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fmultilingual-service-desk-app-components-inspector-3.png" title="Multilingual Service Desk built with ToolJet MCP: components" alt="Multilingual Service Desk component tree generated by ToolJet MCP" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The components ToolJet MCP created, in the ToolJet inspector&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Uses the Service Desk
&lt;/h2&gt;

&lt;p&gt;Hotel groups and serviced-apartment operators running a central support desk, and any multi-site business (retail chains, facilities management, airlines' ground operations) where frontline staff report issues by voice in many languages and a central team must triage and answer them reliably.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Can Access the Workspace
&lt;/h2&gt;

&lt;p&gt;Three custom groups were created: Service Desk - Agents, Team Leads and Quality Reviewers. Agents see only tickets assigned to them; Team Leads see every language and can reassign tickets and edit the glossary; Quality Reviewers see every ticket and can log audit verdicts against the original. Workspace admins act as both lead and reviewer. These rules are applied in the app's views and controls, not as server-side query permissions, and the groups have no members yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Customising ToolJet Apps: Branding, Themes, Modules and Custom Code
&lt;/h2&gt;

&lt;p&gt;A Multilingual Service Desk app should look like your company's own tool and handle logic no standard component covers, and ToolJet supports both: white-label branding and app themes for the look, and modules, custom components and JavaScript or Python code for behaviour.&lt;/p&gt;

&lt;p&gt;The terracotta ticket layout and signal chips could become a reusable module for other shared-services teams that want the same branded desk across properties.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Ftooljet-usp-personalisation-flow-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Ftooljet-usp-personalisation-flow-3.png" title="Customising ToolJet Apps: Branding, Themes, Modules and Custom Code" alt="The same app window in four steps: a standard ToolJet app, then white-labelled and themed in your colours, then built from reusable modules, then extended with custom React, RunJS and RunPy code" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Customising ToolJet Apps: Branding, Themes, Modules and Custom Code&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Branding, App Themes and Reusable Modules
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/tj-setup/org-branding/white-labeling/" rel="noopener noreferrer"&gt;White labelling&lt;/a&gt;:&lt;/strong&gt; replace the logo, favicon, page title and login page so ToolJet appears as your own product.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/app-builder/custom-theme/" rel="noopener noreferrer"&gt;App themes&lt;/a&gt;:&lt;/strong&gt; define themes once per workspace and apply them across apps; editing a theme updates every app that uses it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/app-builder/modules/overview/" rel="noopener noreferrer"&gt;Modules&lt;/a&gt;:&lt;/strong&gt; bundle components, queries and logic into reusable blocks with inputs and outputs, and updates reflect in every app that uses the module.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Custom Components, Component Libraries and Code
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/widgets/custom-component/" rel="noopener noreferrer"&gt;Custom Component&lt;/a&gt;:&lt;/strong&gt; write a React component inside an app, pass it data and let it trigger queries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/app-builder/custom-component-library/overview/" rel="noopener noreferrer"&gt;Custom Component Libraries&lt;/a&gt;:&lt;/strong&gt; developers write React components locally, declare properties, events and actions with &lt;code&gt;@tooljet/custom-component-sdk&lt;/code&gt;, and publish with &lt;code&gt;@tooljet/cli&lt;/code&gt; using &lt;code&gt;tooljet library init&lt;/code&gt;, &lt;code&gt;dev&lt;/code&gt; and &lt;code&gt;publish&lt;/code&gt;. Each publish is an immutable library version, builders drag components from the Custom tab and pin a version per app, and admins can delete libraries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/data-sources/run-js/" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt; and &lt;a href="https://docs.tooljet.com/docs/data-sources/run-py/" rel="noopener noreferrer"&gt;Python&lt;/a&gt; code:&lt;/strong&gt; run custom logic in RunJS and RunPy queries, adding &lt;a href="https://docs.tooljet.com/docs/app-builder/import-libraries/runjs/" rel="noopener noreferrer"&gt;external JavaScript libraries&lt;/a&gt; or &lt;a href="https://docs.tooljet.com/docs/app-builder/import-libraries/runpy/" rel="noopener noreferrer"&gt;Python packages through micropip&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This lets the Multilingual Service Desk app match your brand today and grow with your own components tomorrow. White labelling, app themes and modules are available from the Team plan on the &lt;a href="https://www.tooljet.com/pricing" rel="noopener noreferrer"&gt;ToolJet pricing page&lt;/a&gt;, and Custom Component Libraries are a paid-plan feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise Features for Your Multilingual Service Desk
&lt;/h2&gt;

&lt;p&gt;A multilingual service desk handles voice messages, translations and audit notes from guests and staff. ToolJet covers that governance at the platform layer, so you configure it once instead of rebuilding it in every app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSO and SCIM:&lt;/strong&gt; sign in with &lt;a href="https://docs.tooljet.com/docs/user-management/sso/saml/setup/" rel="noopener noreferrer"&gt;SAML&lt;/a&gt;, OIDC or LDAP, and provision users automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role-based access control:&lt;/strong&gt; scope &lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/access-control/" rel="noopener noreferrer"&gt;permissions&lt;/a&gt; to the app, the data source, and each query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs:&lt;/strong&gt; track every login, edit, and approval decision for &lt;a href="https://docs.tooljet.com/docs/security/audit-logs/" rel="noopener noreferrer"&gt;compliance&lt;/a&gt; review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Air-gapped deployment:&lt;/strong&gt; self-host on &lt;a href="https://docs.tooljet.com/docs/setup/docker/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; or Kubernetes so your data stays in your network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiplayer editing:&lt;/strong&gt; several builders work on the same app, with versioning and &lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/overview/" rel="noopener noreferrer"&gt;Git sync&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ToolJet AI inside your own deployment:&lt;/strong&gt; run the AI features in your tenancy rather than a shared service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could add a notification layer with ToolJet Workflows. For example, a workflow could fire when a ticket is escalated, post a Slack message to the lead, send a Gmail message to the support inbox, and write the decision back to &lt;code&gt;msd_audits&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;This multilingual service desk shows how a hotel support team turns voice complaints and requests into one readable queue, keeps the original audio close, and uses translation flags, glossary checks and reply review to reduce back-and-forth. Jev adds triage and reply checking without pulling the agent away from the ticket, so the workflow stays centered on the conversation. The result is a structured ToolJet application that the team can keep editing as properties, terms and queues change. If you need a multilingual service desk from one prompt and want the result to stay editable, this pattern is worth copying.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try ToolJet MCP
&lt;/h2&gt;

&lt;p&gt;Build a multilingual service desk with ToolJet MCP, then request a &lt;a href="https://tooljet.com/schedule-demo" rel="noopener noreferrer"&gt;ToolJet demo&lt;/a&gt; for your hotel support data.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is ToolJet MCP for a multilingual service desk?
&lt;/h3&gt;

&lt;p&gt;ToolJet MCP turns the prompt into a structured ToolJet application. It gives you a live multilingual service desk, with the data connections, workflows, and access control needed for the build.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Jev decide ticket routing by itself?
&lt;/h3&gt;

&lt;p&gt;No. Jev runs through the existing TypeSafe datasource on the current ticket state, and the agent still reviews the queue, urgency, and reply check before Send unlocks.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does Jev return for each ticket?
&lt;/h3&gt;

&lt;p&gt;Jev returns queue, urgency, escalate, and language for each ticket. It also returns meaning match, glossary kept, and tone for the reply check, with translation confidence and voice cues shown beside those results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I reproduce a multilingual service desk from the prompt?
&lt;/h3&gt;

&lt;p&gt;Yes. Use the prompt as the single build spec, and ToolJet MCP turns it into the queue, ticket, and insights pages in one pass.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need to write code for Multilingual Service Desk?
&lt;/h3&gt;

&lt;p&gt;No. You can build the desk from the generated pages and then adjust the layout, queries, and checks in the editor when the process changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can several people use the same service desk at once?
&lt;/h3&gt;

&lt;p&gt;Yes. Agents, team leads, and quality reviewers work from role-aware views against the same ticket data, so each group sees the tickets and audit trail it needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use existing ToolJet DB tables and the TypeSafe datasource?
&lt;/h3&gt;

&lt;p&gt;Yes. The desk reads tickets, replies, glossary entries, and audits from ToolJet DB, and it uses the TypeSafe datasource for triage and reply checks.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>llm</category>
    </item>
    <item>
      <title>Build a Live Incident Room App with ToolJet MCP and Jev</title>
      <dc:creator>Athulya R</dc:creator>
      <pubDate>Wed, 07 Oct 2026 13:03:32 +0000</pubDate>
      <link>https://dev.to/tooljet/build-a-live-incident-room-app-with-tooljet-mcp-and-jev-3l67</link>
      <guid>https://dev.to/tooljet/build-a-live-incident-room-app-with-tooljet-mcp-and-jev-3l67</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Payments on-call teams need a live incident room that keeps triage, commander decisions, and review metrics in one place. Build a live incident room with ToolJet MCP when you want a two-page app for card-processing incidents, and Jev, TypeSafe's decision model, returns severity, blast radius, customer impact, page-leadership probability, and likely cause for each open record while a person decides. In this build, an agent generated the app and the result is a structured ToolJet application, data, queries, and interface together, that the team keeps running. By the end, you can reproduce the war room, review page, and commander flow from the prompt in this article.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Flive-incident-room-app-war-room-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Flive-incident-room-app-war-room-3.png" title="Live Incident Room built with ToolJet MCP: The War room: open incidents sorted by Jev's severity, the selected incident with its timer, metrics and Jev triage card, and the live timeline with the Slack preview." alt="Build a live incident room with ToolJet MCP, the finished application: The War room: open incidents sorted by Jev's severity, the selected incident with its timer, metrics and Jev triage card, and the live timeline with the Slack preview." width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The War room: open incidents sorted by Jev's severity, the selected incident with its timer, metrics and Jev triage card, and the live timeline with the Slack preview.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Flive-incident-room-app-war-room-2-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Flive-incident-room-app-war-room-2-2.png" title="Live Incident Room built with ToolJet MCP: The Review page: Jev versus commander agreement, MTTA to MTTR by severity, override rate by likely cause, and every incident from the last 7 days." alt="Build a live incident room with ToolJet MCP, the finished application: The Review page: Jev versus commander agreement, MTTA to MTTR by severity, override rate by likely cause, and every incident from the last 7 days." width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Review page: Jev versus commander agreement, MTTA to MTTR by severity, override rate by likely cause, and every incident from the last 7 days.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How Jev and the War Room Work
&lt;/h2&gt;

&lt;p&gt;The War room page puts the open incident list on one side, the selected incident in the centre, and the live timeline plus staged Slack preview on the other side. You click a row, inspect the first three alerts, review the AI triage card, compare the suggested severity with the commander override, add a note, change status, and post updates without leaving the record. The layout keeps the command decision on the same screen as the timeline, so the commander sees current state and discussion history together. Jev returns severity, blast radius, customer impact, page-leadership probability, and likely cause, and the card shows confidence for each choice, the customer-impact score on a 1 to 5 scale, and the page-leadership probability as a percentage. The Review page summarizes agreement, overrides, MTTA, MTTR, and the last 7 days of incidents.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic triage for open incidents through the TypeSafe datasource&lt;/li&gt;
&lt;li&gt;Commander severity confirmation and override&lt;/li&gt;
&lt;li&gt;Live timeline updates and staged Slack posts&lt;/li&gt;
&lt;li&gt;Review metrics for agreement, MTTA, and MTTR&lt;/li&gt;
&lt;li&gt;Role-based write paths for commanders, engineers, and viewers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Set Up ToolJet MCP and the TypeSafe Datasource
&lt;/h2&gt;

&lt;p&gt;ToolJet MCP connects your coding agent to your ToolJet workspace, so the agent can create the tables, queries and components for you. Set it up with the &lt;a href="https://docs.tooljet.ai/docs/build-with-ai/mcp/overview/" rel="noopener noreferrer"&gt;ToolJet MCP overview&lt;/a&gt; and the &lt;a href="https://github.com/ToolJet/tooljet-mcp" rel="noopener noreferrer"&gt;ToolJet MCP repository&lt;/a&gt;. Then add the &lt;a href="https://docs.tooljet.ai/docs/marketplace/plugins/marketplace-plugin-typesafe/" rel="noopener noreferrer"&gt;TypeSafe datasource&lt;/a&gt; to the workspace and name it typesafe, which is the name the build prompt refers to.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;At build time:&lt;/strong&gt; ToolJet MCP lets the agent create the app in your workspace.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;At run time:&lt;/strong&gt; the app calls Jev, TypeSafe's decision model, through the typesafe datasource and shows its typed answers next to the record.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Prompt That Recreates The Build
&lt;/h2&gt;

&lt;p&gt;The real build took several passes, and the requirements are consolidated into one prompt that could have been used from the start. You can use the prompt in this article to reproduce the same two-page incident room in one shot.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Build a two-page Live Incident Room in ToolJet for the on-call and SRE team at a payments company that handles card processing for fintechs across the EU and UK. Use Jev through the TypeSafe datasource for every triage step. For each open incident, ask for severity, blast radius, customer impact, page-leadership probability, and likely cause, then cache the result on the incident and show the confidence, the customer-impact score, and the page-leadership probability in the UI. The War room page should show the open incident list, incident detail, the first three alerts, the triage card, commander severity controls, a note field, status controls, a live timeline, and a staged Slack preview. Confirming a decision writes the commander record and logs it to the timeline. Changing status updates the record and re-runs triage. The Review page should show agreement, overrides, incidents in 7 days, MTTA, MTTR, a dumbbell chart by severity, a bubble-lollipop chart by likely cause, and a searchable downloadable table of recent incidents.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How MCP Builds The Full App
&lt;/h2&gt;

&lt;p&gt;ToolJet MCP works through the whole application, not the screen, so the incident data model, the pages, the component tree, the queries, and the wiring between them land as one structured ToolJet application. The generated app sits on a runtime that carries data connectivity, workflows, permissions, deployment, and ongoing change where supported, instead of leaving the team with a codebase to assemble and operate separately. The path stays open, so you can move from AI generation to visual editing and then to code where a case needs it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fixing The Customer Impact Scale
&lt;/h2&gt;

&lt;p&gt;The customer-impact card showed the wrong scale, so the number looked lower than the triage meant. Jev returned the score as a 0-based legend index, not a 0 to 1 value, and the display now adds 1 before it is shown.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tables Behind The Incident Room
&lt;/h2&gt;

&lt;p&gt;The app ended up with three tables. &lt;code&gt;ir_incidents&lt;/code&gt; stores the incident feed and cached AI triage, &lt;code&gt;ir_decisions&lt;/code&gt; records commander severity decisions, and &lt;code&gt;ir_timeline&lt;/code&gt; keeps the timestamped updates and staged Slack posts.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Components&lt;/th&gt;
&lt;th&gt;What they cover&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;War room&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Open incidents sorted by Jev's severity, the selected incident with Jev's triage card, and the live timeline.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Jev versus commander agreement, MTTA to MTTR by severity, override rate by likely cause and a 7-day table.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What Got Generated
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pages&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ToolJet DB tables&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queries&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Components&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code files to maintain&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair cycles&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Flive-incident-room-app-components-inspector-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Flive-incident-room-app-components-inspector-2.png" title="Live Incident Room built with ToolJet MCP: components" alt="Live Incident Room component tree generated by ToolJet MCP" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The components ToolJet MCP created, in the ToolJet inspector&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Payments SRE and On Call Teams
&lt;/h2&gt;

&lt;p&gt;Payments processors, fintech platforms, card issuers and acquirers, and any SaaS team running an on-call rotation can use this pattern. It fits wherever severity is argued about in a noisy chat channel and the team needs an AI first opinion, a clear commander decision and a record of how often the two agree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Commander Engineer and Viewer Access
&lt;/h2&gt;

&lt;p&gt;Three workspace groups control what each person can do. Incident Room - Commanders (and workspace admins) can confirm or override severity, change incident status and post the Slack update. These write queries are restricted to them on the server. Incident Room - Engineers can add timeline updates only. Support and leadership in Incident Room - Viewers can open both pages and read everything, but every action control is disabled for them. AI triage runs for every viewer so the board is always current.&lt;/p&gt;

&lt;h2&gt;
  
  
  SOC 2 Type II and GDPR Compliance in ToolJet
&lt;/h2&gt;

&lt;p&gt;A Live Incident Room app usually has to pass a security review before rollout, and ToolJet supports that review with regular SOC 2 Type II audits, GDPR compliance and documented data protection controls. Reviewers can check the platform against standards they already use instead of starting from scratch.&lt;/p&gt;

&lt;p&gt;For an incident room like this, security, legal, and auditors care about how incident notes and decisions map to review records. That is the path this section addresses for payments teams.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Ftooljet-usp-compliance-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Ftooljet-usp-compliance-2.png" title="SOC 2 Type II and GDPR Compliance in ToolJet" alt="Two cards: ToolJet SOC 2 Type II and GDPR compliance, and data protection controls such as TLS, encryption and audit logs" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;SOC 2 Type II and GDPR Compliance in ToolJet&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Audited Standards: SOC 2 Type II and GDPR
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/security/compliance/" rel="noopener noreferrer"&gt;SOC 2 Type II audits&lt;/a&gt;:&lt;/strong&gt; ToolJet undergoes regular SOC 2 Type II audits to validate its security, availability and confidentiality standards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GDPR compliance:&lt;/strong&gt; ToolJet states that it fully complies with the General Data Protection Regulation and follows a GDPR-compliant data deletion policy, removing personal data on request or at the end of the retention period.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trust center:&lt;/strong&gt; ToolJet points reviewers to trust.tooljet.com for the latest security documentation and compliance certifications.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Data Protection Controls Behind the Audits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Encryption in transit and at rest:&lt;/strong&gt; traffic between users and ToolJet servers uses TLS, and sensitive stored data is encrypted at rest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/security/constants/" rel="noopener noreferrer"&gt;Encrypted workspace secrets&lt;/a&gt;:&lt;/strong&gt; constants and secrets are encrypted before storage, and secrets resolve on the server so they never reach the browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/security/audit-logs/" rel="noopener noreferrer"&gt;Audit logs for reviews&lt;/a&gt;:&lt;/strong&gt; record user, app and data query activity with who, what, when and IP address.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/security/compliance/cjis/" rel="noopener noreferrer"&gt;CJIS configuration guidance&lt;/a&gt;:&lt;/strong&gt; criminal justice agencies get a guide to configuring a self-hosted deployment for CJIS Security Policy controls. There is no CJIS certification for platforms, so compliance remains the agency's responsibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the Live Incident Room app, this gives security and legal reviewers audited evidence plus concrete controls to check, and teams with stricter data rules can pair it with &lt;a href="https://docs.tooljet.com/docs/setup/" rel="noopener noreferrer"&gt;self-hosted deployment&lt;/a&gt; to keep data on their own infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise Features for Your Incident Room
&lt;/h2&gt;

&lt;p&gt;An incident room handles severity decisions, timeline updates, and commander notes. ToolJet covers that governance at the platform layer, so you configure it once instead of rebuilding it in every app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSO and SCIM:&lt;/strong&gt; sign in with &lt;a href="https://docs.tooljet.com/docs/user-management/sso/saml/setup/" rel="noopener noreferrer"&gt;SAML&lt;/a&gt;, OIDC or LDAP, and provision users automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role-based access control:&lt;/strong&gt; scope &lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/access-control/" rel="noopener noreferrer"&gt;permissions&lt;/a&gt; to the app, the data source, and each query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs:&lt;/strong&gt; track every login, edit, and approval decision for &lt;a href="https://docs.tooljet.com/docs/security/audit-logs/" rel="noopener noreferrer"&gt;compliance&lt;/a&gt; review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Air-gapped deployment:&lt;/strong&gt; self-host on &lt;a href="https://docs.tooljet.com/docs/setup/docker/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; or Kubernetes so your data stays in your network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiplayer editing:&lt;/strong&gt; several builders work on the same app, with versioning and &lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/overview/" rel="noopener noreferrer"&gt;Git sync&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ToolJet AI inside your own deployment:&lt;/strong&gt; run the AI features in your tenancy rather than a shared service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could add a notification layer with ToolJet Workflows. For example, a workflow could fire when a commander posts an override, send a Slack message to the incident channel, email leadership through Gmail, and write the decision back to &lt;code&gt;ir_decisions&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;This build shows a two-page incident room that keeps the on-call flow in one place: open incidents, Jev triage, commander decisions, timeline updates, and a review page for agreement and recovery metrics. The team gets a shared view of each card-processing incident, plus a record of what the commander confirmed or overrode, so response stays tied to the same data that drives the list. If you are building a live incident room with ToolJet MCP, the useful part is not the screen alone, it is the editable ToolJet application behind it, ready for the next change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try ToolJet MCP
&lt;/h2&gt;

&lt;p&gt;Build a live incident room with ToolJet MCP for your own alerts, then request a &lt;a href="https://tooljet.com/schedule-demo" rel="noopener noreferrer"&gt;ToolJet demo&lt;/a&gt; for your incident data.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What does ToolJet MCP do in this app?
&lt;/h3&gt;

&lt;p&gt;ToolJet MCP turns the prompt into a working incident room inside ToolJet. It lands the data model, pages, queries, and interactions as one app that the on-call team can keep using and changing.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does Jev return for each incident?
&lt;/h3&gt;

&lt;p&gt;Severity, blast radius, customer impact, page-leadership probability, and likely cause. The triage card also shows confidence for each choice, and the customer-impact score is displayed on the scale used by the model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Jev connected live and does it decide on its own?
&lt;/h3&gt;

&lt;p&gt;No. Jev triages the current incident record through the TypeSafe datasource, and the incident commander still confirms or overrides the final severity. The model suggests, the person decides.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use my own incident source with this pattern?
&lt;/h3&gt;

&lt;p&gt;Yes. The build uses ToolJet DB as the incident feed stand-in, so you can map the same shape onto the source your team already uses. The prompt in this article is enough to reproduce the two-page app shape.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need to write code for the incident room?
&lt;/h3&gt;

&lt;p&gt;No. The generated app already includes the war room flow, the review page, and the commander actions, so you can stay in the visual builder unless a custom rule needs code. Jev and the database queries run the triage and decision flow.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens to the app after the agent finishes?
&lt;/h3&gt;

&lt;p&gt;A structured ToolJet application keeps running inside the runtime. The runtime keeps the data connections, queries, permissions, and workflow paths together, so the team edits the same app as requirements change.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can several people work on the same incident room at once?
&lt;/h3&gt;

&lt;p&gt;Yes. The app is set up with commander, engineer, and viewer groups, so multiple people can work in the same incident room with different write access and the same shared record of updates.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Build a Patient Flow Board With ToolJet MCP for bed managers</title>
      <dc:creator>Athulya R</dc:creator>
      <pubDate>Wed, 07 Oct 2026 13:01:52 +0000</pubDate>
      <link>https://dev.to/tooljet/build-a-patient-flow-board-with-tooljet-mcp-for-bed-managers-269j</link>
      <guid>https://dev.to/tooljet/build-a-patient-flow-board-with-tooljet-mcp-for-bed-managers-269j</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;A patient flow board gives hospital bed managers a live view of admissions, ward occupancy, discharges, and delays. A morning printout can quickly become outdated, making it harder to track changes across a busy hospital. In this tutorial, you’ll learn how to build a live patient flow board with ToolJet MCP for a 600-bed teaching hospital. The board brings key patient flow data into one operational view, including admissions, bed occupancy, discharge queues, and delay trends. You’ll also see how an AI agent can generate the ToolJet application, including the data, queries, and interface. By the end, you’ll have a practical operations board for monitoring patient flow and supporting day-to-day bed management.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fpatient-flow-board-app-overview-7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fpatient-flow-board-app-overview-7.png" title="Patient Flow Board built with ToolJet MCP: The live overview: headline tiles, admissions and discharges by hour, the 8-hour occupancy projection with both scenarios, wards ranked by risk, and waits by department with the assumptions panel." alt="The live overview (build a patient flow board with ToolJet MCP)" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The live overview: headline tiles, admissions and discharges by hour, the 8-hour occupancy projection with both scenarios, wards ranked by risk, and waits by department with the assumptions panel.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fpatient-flow-board-app-overview-2-4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fpatient-flow-board-app-overview-2-4.png" title="Patient Flow Board built with ToolJet MCP: The discharge queue grouped by delay reason, ranked by hours waited, with one owner and target per group and the patients behind each group below." alt="The discharge queue grouped by delay reason, ranked by hours waited (build a patient flow board with ToolJet MCP)" width="800" height="808"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The discharge queue grouped by delay reason, ranked by hours waited, with one owner and target per group and the patients behind each group below.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fpatient-flow-board-app-overview-3-4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fpatient-flow-board-app-overview-3-4.png" title="Patient Flow Board built with ToolJet MCP: Weekly trends: delay hours by reason over eight weeks, which bottleneck is growing, and weekly admissions, discharges and occupancy." alt="Weekly trends (build a patient flow board with ToolJet MCP)" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Weekly trends: delay hours by reason over eight weeks, which bottleneck is growing, and weekly admissions, discharges and occupancy.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fpatient-flow-board-app-overview-4-4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fpatient-flow-board-app-overview-4-4.png" title="Patient Flow Board built with ToolJet MCP: Assigning a delay group to an owner with a target time, with the group's patient count, hours waited and usual team shown first." alt="Assigning a delay group to an owner with a target time (build a patient flow board with ToolJet MCP)" width="800" height="808"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Assigning a delay group to an owner with a target time, with the group's patient count, hours waited and usual team shown first.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to manage hospital patient flow
&lt;/h2&gt;

&lt;p&gt;Track patient flow by combining admissions, discharges, ward occupancy, queue reasons, and delay trends in one live board for the bed office. A coding agent can build that as a working app with &lt;a href="https://tooljet.com/mcp" rel="noopener noreferrer"&gt;ToolJet MCP&lt;/a&gt; instead of a manual handoff, inside ToolJet.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Gather the live ward census and movement feed&lt;/li&gt;
&lt;li&gt;Group discharge reasons across the queue&lt;/li&gt;
&lt;li&gt;Calculate occupancy, waits, and the eight-hour projection&lt;/li&gt;
&lt;li&gt;Rank the queue by total delay hours&lt;/li&gt;
&lt;li&gt;Review weekly delay trends and adjust priorities&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What the live flow board shows
&lt;/h2&gt;

&lt;p&gt;The live page opens on a compact wall display with ward tiles, hourly flow, a projection panel, and department waits in the same view. The screen keeps the same dense hierarchy across all three pages, so the operator never has to hunt for the next decision. A manager scans for wards at capacity, checks the two occupancy scenarios, and uses the risk flags to find the wards under the most pressure. The discharge queue page groups medically ready patients by reason, then lets a manager open one group to see patient counts, longest wait, owner, target, and note entry. The weekly trends page shifts the focus to reason-level delay hours, so the executive team can read the current bottleneck against the recent average.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hourly admissions and discharges on the live overview&lt;/li&gt;
&lt;li&gt;Ward occupancy against capacity with an eight-hour projection&lt;/li&gt;
&lt;li&gt;Discharge queue grouped by delay reason with owner assignment&lt;/li&gt;
&lt;li&gt;Weekly delay trends by reason with recent average comparison&lt;/li&gt;
&lt;li&gt;Role-based writes for bed managers and department heads&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Build a Patient Flow Board With ToolJet MCP From the Prompt
&lt;/h2&gt;

&lt;p&gt;Want to build it yourself? Start with the &lt;a href="https://github.com/ToolJet/mcp-v2" rel="noopener noreferrer"&gt;ToolJet MCP repository&lt;/a&gt; for setup instructions, supported agents, and everything you need to follow along.&lt;/p&gt;

&lt;h2&gt;
  
  
  How one prompt defines the board
&lt;/h2&gt;

&lt;p&gt;The real build took several passes before the structure settled and the screen shape became clear. The requirements are consolidated into one prompt here, so you can reproduce the same patient flow board in a single shot without reworking the specification.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Build a live patient flow board called Patient Flow Board in ToolJet for the bed management office of a 600-bed teaching hospital in Manchester.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Keep it to 3 pages: Live overview, showing admissions and discharges by hour, ward occupancy against capacity, an eight-hour occupancy projection, and waiting times by department; Discharge queue, showing medically ready patients grouped by delay reason, hours waited, owner, target time, note, and the current write controls; Weekly trends, showing delay hours by reason over the last 8 weeks, the current week marked incomplete, and weekly admissions, discharges, and occupancy.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use only ToolJet native components.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use PostgreSQL for the operational feed, with wards and capacity, current census, patient movements, expected admissions, department waits, discharge queue, delay history, daily occupancy, and the seed date. Use ToolJet DB for the team-edited records, per-patient delay reason, owner and note, one active owner and target time per delay reason group, and an audit log of every change.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Model discharge delay by reason rather than by ward. Seed synthetic data only, with pseudonymous patient references and no names.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bed managers can assign groups and update patients, department heads can update patients, and executives are read-only. Enforce writes in the queries. Refresh automatically every 5 minutes. The board is purely operational and must not give clinical advice about individual patients.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How ToolJet MCP assembles the app
&lt;/h2&gt;

&lt;p&gt;ToolJet MCP works through the whole application, from the data model and queries to the pages, components and wiring, and creates a structured ToolJet application inside ToolJet rather than handing back a codebase for you to assemble yourself or export into another build flow. The result sits on a runtime that can carry data connectivity, workflows, permissions, deployment and ongoing change where supported, while still letting you move from AI generation to visual editing and code where a case needs it, all in the same builder. If you want the build pattern, start with the &lt;a href="https://docs.tooljet.com/docs/build-with-ai/mcp/overview/" rel="noopener noreferrer"&gt;ToolJet MCP documentation&lt;/a&gt; for a closer guide.&lt;/p&gt;

&lt;h2&gt;
  
  
  What caused the repeated admissions bug
&lt;/h2&gt;

&lt;p&gt;The first weekly check showed the same admissions total every day, so the trend chart looked flat and wrong. The cause was a random filter that PostgreSQL evaluated once per ward instead of once per generated day. Reworking the seed logic fixed the pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  What tables power the operational feed
&lt;/h2&gt;

&lt;p&gt;The app ended up with thirteen tables in three groups. The live feed uses &lt;code&gt;pf_wards&lt;/code&gt;, &lt;code&gt;pf_ward_census&lt;/code&gt;, &lt;code&gt;pf_patient_movements&lt;/code&gt;, &lt;code&gt;pf_expected_admissions&lt;/code&gt;, &lt;code&gt;pf_dept_waits&lt;/code&gt;, &lt;code&gt;pf_discharge_queue&lt;/code&gt;, &lt;code&gt;pf_delay_history&lt;/code&gt;, &lt;code&gt;pf_occupancy_daily&lt;/code&gt;, and &lt;code&gt;pf_meta&lt;/code&gt;, the team edits live in &lt;code&gt;pf_delay_assign&lt;/code&gt; and &lt;code&gt;pf_group_assign&lt;/code&gt;, and &lt;code&gt;pf_reasons&lt;/code&gt; keeps the delay categories stable. That separation keeps the queue, the weekly trends, and the editable notes tied to one operational model, and it keeps the synthetic feed distinct from the changes the team makes during the shift.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Components&lt;/th&gt;
&lt;th&gt;What they cover&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Live overview&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Discharge queue&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weekly trends&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What Got Generated
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pages&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ToolJet DB + PostgreSQL tables&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queries&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Components&lt;/td&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code files to maintain&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair cycles&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fpatient-flow-board-app-components-inspector-4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fpatient-flow-board-app-components-inspector-4.png" title="Patient Flow Board built with ToolJet MCP: components" alt="Patient Flow Board component tree generated by ToolJet MCP" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The components ToolJet MCP created, in the ToolJet inspector&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who uses it in hospital operations
&lt;/h2&gt;

&lt;p&gt;Hospitals and NHS trusts are the obvious fit: bed management, patient flow and discharge teams that need a live view instead of a morning printout. The same pattern works anywhere a queue of ready-to-move items is held up by different external teams and the question is who has to act: step-down and community care providers, hospices, mental health services, and outside healthcare, logistics hubs waiting on customs or carriers, or service desks where tickets wait on other departments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who can view and edit the board
&lt;/h2&gt;

&lt;p&gt;As built, access comes from three ToolJet workspace groups. Patient Flow - Bed Managers can assign a delay reason group to an owner with a target time and update any patient's reason, owner and note. Patient Flow - Department Heads can update patients but cannot assign groups. Patient Flow - Executives can open every page but change nothing. ToolJet query permissions enforce this on the write queries, and the Assign and Update buttons are disabled for anyone outside the allowed groups. Workspace admins can also edit. The groups were created without members, so the team adds its own people.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audit Logs and OpenTelemetry Observability in ToolJet
&lt;/h2&gt;

&lt;p&gt;A Patient Flow Board app that changes real records needs a trail of who did what, and ToolJet provides audit logs for user activity plus OpenTelemetry metrics for platform health. Security teams get evidence for reviews, and platform teams watch performance in the monitoring tools they already run.&lt;/p&gt;

&lt;p&gt;When bed managers change a delay reason or owner, the audit trail shows who did it and when. Query metrics and logs help the team see how those writes and reads behave.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Ftooljet-usp-observability-flow-4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Ftooljet-usp-observability-flow-4.png" title="Audit Logs and OpenTelemetry Observability in ToolJet" alt="Three cards: record audit log events, review them with filters, and monitor query metrics with OpenTelemetry" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Audit Logs and OpenTelemetry Observability in ToolJet&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Audit Logs: Who Did What, When and Where
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/security/audit-logs/" rel="noopener noreferrer"&gt;ToolJet audit logs&lt;/a&gt;:&lt;/strong&gt; record who performed each action, what it was, when and where it happened, including IP address, across user, app and data query events. Filter by user, app or resource over a date range of up to 30 days.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retention control:&lt;/strong&gt; logs are kept for 90 days by default, and admins can change the period with the &lt;code&gt;AUDIT_LOGS_RETENTION_PERIOD&lt;/code&gt; environment variable or keep logs indefinitely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/security/audit-logs/setup-rsyslog/" rel="noopener noreferrer"&gt;Audit log files with rsyslog&lt;/a&gt;:&lt;/strong&gt; write audit logs to daily rotated log files on the server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/security/audit-logs/stream-audit-to-datadog/" rel="noopener noreferrer"&gt;Streaming audit logs to Datadog&lt;/a&gt;:&lt;/strong&gt; ship those files through a Datadog Agent for centralised search, security monitoring and long-term retention.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  OpenTelemetry Metrics for Apps and the Platform
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/tj-setup/observability/observability-otel/" rel="noopener noreferrer"&gt;OpenTelemetry observability&lt;/a&gt;:&lt;/strong&gt; export app metrics such as query executions, duration, failures and success rates, labelled by app, query and environment, alongside HTTP, database and Node.js runtime metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Any OTEL-compatible tool:&lt;/strong&gt; send traces and metrics to &lt;a href="https://docs.tooljet.com/docs/tj-setup/observability/datadog/" rel="noopener noreferrer"&gt;Datadog through a Datadog Agent&lt;/a&gt;, New Relic, Grafana or another OpenTelemetry backend.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, audit logs and metrics show both who changed the Patient Flow Board app's data and how its queries perform in production. Audit logs are included from the Team plan, and the &lt;a href="https://www.tooljet.com/pricing" rel="noopener noreferrer"&gt;ToolJet pricing page&lt;/a&gt; lists unlimited audit log retention on Enterprise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise Features for Your Patient Flow Board
&lt;/h2&gt;

&lt;p&gt;This board handles patient references, delay reasons, and handover notes. ToolJet covers that governance at the platform layer, so you configure it once instead of rebuilding it in every app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSO and SCIM:&lt;/strong&gt; sign in with &lt;a href="https://docs.tooljet.com/docs/user-management/sso/saml/setup/" rel="noopener noreferrer"&gt;SAML&lt;/a&gt;, OIDC or LDAP, and provision users automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role-based access control:&lt;/strong&gt; scope &lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/access-control/" rel="noopener noreferrer"&gt;permissions&lt;/a&gt; to the app, the data source, and each query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs:&lt;/strong&gt; track every login, edit, and approval decision for &lt;a href="https://docs.tooljet.com/docs/security/audit-logs/" rel="noopener noreferrer"&gt;compliance&lt;/a&gt; review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Air-gapped deployment:&lt;/strong&gt; self-host on &lt;a href="https://docs.tooljet.com/docs/setup/docker/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; or Kubernetes so your data stays in your network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiplayer editing:&lt;/strong&gt; several builders work on the same app, with versioning and &lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/overview/" rel="noopener noreferrer"&gt;Git sync&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ToolJet AI inside your own deployment:&lt;/strong&gt; run the AI features in your tenancy rather than a shared service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could add a notification layer with ToolJet Workflows. For example, a workflow could fire when a group owner is assigned, post a Slack message to the ward team, email the department head through Gmail, and write the decision back to &lt;code&gt;pf_group_assign&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;This article shows a patient flow board that turns a stale morning printout into a live operational view for the bed office. You get hourly admissions and discharges, ward occupancy against capacity, an eight-hour projection, a grouped discharge queue, and weekly delay trends, all backed by editable data and role-based write paths. The build also shows how an agent-generated ToolJet application stays editable after the initial generation, so the team can keep working in the same structured app as ward pressure changes. For a hospital operations team, that is the point of build a patient flow board with ToolJet MCP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try ToolJet MCP
&lt;/h2&gt;

&lt;p&gt;Build your own patient flow board with ToolJet MCP for ward operations, then request a &lt;a href="https://tooljet.com/schedule-demo" rel="noopener noreferrer"&gt;ToolJet demo&lt;/a&gt; to map it to your hospital data.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is ToolJet MCP for patient flow?
&lt;/h3&gt;

&lt;p&gt;ToolJet MCP lets a coding agent turn patient flow requirements into a ToolJet application. The result is a structured board with pages, data, and edits that stay connected in one place, ready for the bed team to keep using.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does the Patient Flow Board show?
&lt;/h3&gt;

&lt;p&gt;It shows hourly admissions and discharges, ward occupancy against capacity, an eight-hour projection, department waits, a reason-grouped discharge queue, and weekly delay trends. The display stays operational, not clinical, so the bed team reads flow instead of advice.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do you reproduce the Patient Flow Board?
&lt;/h3&gt;

&lt;p&gt;Start with the prompt and the same operational tables. ToolJet MCP turns that specification into the pages, data links, and write rules in one build, so the team sees the same structure each time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can the Patient Flow Board use PostgreSQL and ToolJet DB?
&lt;/h3&gt;

&lt;p&gt;Yes. PostgreSQL can hold the live operational feed, while ToolJet DB can hold the edits, owners, target times, and audit rows the team changes during the day. That split keeps reads and writes separate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do you need code to build the Patient Flow Board?
&lt;/h3&gt;

&lt;p&gt;No. The main pages, data wiring, and write rules can come from the prompt, and code is only for a specific transform or interaction when you need it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens after ToolJet MCP finishes?
&lt;/h3&gt;

&lt;p&gt;The result is a structured ToolJet application, not a throwaway screen. The runtime carries data connections, workflows, permissions, deployment, and ongoing change where supported, so the team keeps working in the same app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can several people work on the Patient Flow Board at once?
&lt;/h3&gt;

&lt;p&gt;Yes. Bed managers, department heads, and executives can share the same app with role-based writes, so each group sees the same live picture while only allowed roles change data. That keeps the picture consistent across the team.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Build an SME Loan Underwriting App with ToolJet MCP and Jev</title>
      <dc:creator>Athulya R</dc:creator>
      <pubDate>Mon, 05 Oct 2026 12:10:00 +0000</pubDate>
      <link>https://dev.to/tooljet/build-an-sme-loan-underwriting-app-with-tooljet-mcp-and-jev-4n6k</link>
      <guid>https://dev.to/tooljet/build-an-sme-loan-underwriting-app-with-tooljet-mcp-and-jev-4n6k</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Credit teams at banks need a loan underwriting app that keeps pending cases, financial ratios, and supporting documents in one place. With ToolJet MCP, you can build an SME loan underwriting app with a clean queue, financial ratios, and document-backed review. In this walkthrough, we will use TypeSafe’s Jev to return risk bands, an affordability score, a refer-to-credit-committee signal, a fraud signal, and a main concern for each application while the underwriter decides. The agent generated result is a structured ToolJet application, with data, queries, and interface together, that the team keeps running. That gives you one place to compare the model’s view with the final decision instead of tracking the case across separate screens.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsme-loan-underwriting-app-pipeline-8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsme-loan-underwriting-app-pipeline-8.png" title="SME Loan Underwriting built with ToolJet MCP: The Pipeline page lists loan applications waiting for a decision, with Jev's risk band on each row." alt="Build an SME loan underwriting app with ToolJet MCP, the finished application: The Pipeline page lists loan applications waiting for a decision, with Jev's risk band on each row." width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Pipeline page lists loan applications waiting for a decision, with Jev's risk band on each row.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsme-loan-underwriting-app-pipeline-2-6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsme-loan-underwriting-app-pipeline-2-6.png" title="SME Loan Underwriting built with ToolJet MCP: The Underwrite page shows the financial ratios, Jev's assessment, supporting documents and the decision form." alt="Build an SME loan underwriting app with ToolJet MCP, the finished application: The Underwrite page shows the financial ratios, Jev's assessment, supporting documents and the decision form." width="799" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Underwrite page shows the financial ratios, Jev's assessment, supporting documents and the decision form.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsme-loan-underwriting-app-pipeline-3-6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsme-loan-underwriting-app-pipeline-3-6.png" title="SME Loan Underwriting built with ToolJet MCP: The Portfolio review page compares Jev's risk band with the underwriter's final band and shows approvals by sector." alt="Build an SME loan underwriting app with ToolJet MCP, the finished application: The Portfolio review page compares Jev's risk band with the underwriter's final band and shows approvals by sector." width="799" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Portfolio review page compares Jev's risk band with the underwriter's final band and shows approvals by sector.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How The Pipeline Page And Jev Work
&lt;/h2&gt;

&lt;p&gt;The Pipeline page is the working queue, where you filter pending cases by sector, band, amount, and waiting time, then open a row into the underwriting screen. The underwrite page opens from the row action and keeps the decision flow on the same record. The flow keeps the underwriter on the case without jumping between records. The review page pairs ratios, Jev's assessment, and linked documents with a decision form, so the underwriter checks evidence, sets a final band, and records a reason before saving. The supporting PDFs stay in reach on the same screen, so the reviewer moves from ratios to documents without leaving the case. The Portfolio review page compares Jev's band with the final band and shows approvals by sector. Jev returns risk_band, affordability, refer_to_credit_committee, fraud_signal, and main_concern, with confidence on the choices, affordability as a score, and the refer and fraud outputs as percentages.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Queue pending applications with filters for sector, AI band, amount, and waiting time&lt;/li&gt;
&lt;li&gt;Review financial ratios, Jev's assessment, and linked S3 documents on one screen&lt;/li&gt;
&lt;li&gt;Record a final decision with a required reason, then route threshold cases to the Credit Committee&lt;/li&gt;
&lt;li&gt;Compare Jev's band with the underwriter's band and track approvals by sector&lt;/li&gt;
&lt;li&gt;Keep mutable decisions and cached assessments separate in ToolJet DB&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Set Up ToolJet MCP and the TypeSafe Datasource
&lt;/h2&gt;

&lt;p&gt;ToolJet MCP connects your coding agent to your ToolJet workspace, so the agent can create the tables, queries and components for you. Set it up with the &lt;a href="https://docs.tooljet.ai/docs/build-with-ai/mcp/overview/" rel="noopener noreferrer"&gt;ToolJet MCP overview&lt;/a&gt; and the &lt;a href="https://github.com/ToolJet/tooljet-mcp" rel="noopener noreferrer"&gt;ToolJet MCP repository&lt;/a&gt;. Then add the &lt;a href="https://docs.tooljet.ai/docs/marketplace/plugins/marketplace-plugin-typesafe/" rel="noopener noreferrer"&gt;TypeSafe datasource&lt;/a&gt; to the workspace and name it typesafe, which is the name the build prompt refers to.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;At build time:&lt;/strong&gt; ToolJet MCP lets the agent create the app in your workspace.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;At run time:&lt;/strong&gt; the app calls Jev, TypeSafe's decision model, through the typesafe datasource and shows its typed answers next to the record.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why The Prompt Was Consolidated
&lt;/h2&gt;

&lt;p&gt;The real build took several passes, and the requirements are consolidated here into one prompt you could have used from the start. That gives you a single spec to reproduce the underwriting app in one run.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Build a polished internal app called SME Loan Underwriting in ToolJet. Use only ToolJet native components, with HTML blocks only for composed read-only summaries.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Keep it to three pages. Pipeline shows applications waiting for a decision with amount, term, DSCR, Jev's band and refer score, days waiting, filters, and an underwrite action. When Pipeline loads, backfill an assessment for any pending application that does not yet have one. Underwrite shows the selected application, financial ratios, Jev's assessment, supporting PDFs from S3, and a decision form. Underwrite stays off the menu and opens from the row action. Portfolio review compares Jev's band with the underwriter's final band and shows approvals by sector.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use a dense, clean layout with the custom Oat &amp;amp; Olive Credit theme, restrained colour use, compact rows, and clear hierarchy.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use &lt;code&gt;la_applications&lt;/code&gt;, &lt;code&gt;la_financials&lt;/code&gt;, &lt;code&gt;la_directors&lt;/code&gt;, &lt;code&gt;lu_decisions&lt;/code&gt;, and &lt;code&gt;lu_ai_assessments&lt;/code&gt;. Keep &lt;code&gt;lu_ai_assessments&lt;/code&gt; as the cached AI result table, unique per application, and derive the working assessment from Jev through the TypeSafe datasource with the evaluate operation. Ask for risk band, affordability, refer to credit committee, fraud signal, and main concern. Show each choice with confidence and probability bars, the score, and the 0 to 1 values as percentages.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Jev recommends and the underwriter decides. Require a reason before saving. Route any application above one hundred and fifty thousand pounds or with refer above sixty percent to the Credit Committee save path, otherwise to the underwriter save path. After saving, mark the application decided and return to the pipeline. Add groups for underwriters, the Credit Committee, relationship managers, and risk, and keep relationship managers on their own applicants through a server-side filter.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How MCP Builds The Full App
&lt;/h2&gt;

&lt;p&gt;ToolJet MCP works through the whole application structure, so the data model, pages, components, queries, and wiring land as one structured ToolJet application. That matters because data connectivity, workflows, permissions, deployment, and ongoing change sit with the runtime where supported, instead of leaving you with a codebase to operate yourself and a generated app to keep editing in the same workspace. The path stays open, so AI generation can be followed by visual editing and code where a case needs it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Sector Chart Labels We Fixed
&lt;/h2&gt;

&lt;p&gt;The approved-by-sector chart clipped the pound labels on the right edge, so the values looked cut off. The chart container was holding the labels too tightly, and widening the available space fixed the display for the bar chart.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tables Behind The Loan App
&lt;/h2&gt;

&lt;p&gt;The app ended up with five tables. &lt;code&gt;la_applications&lt;/code&gt; stores application records, &lt;code&gt;la_financials&lt;/code&gt; holds the ratios and figures behind each case, &lt;code&gt;la_directors&lt;/code&gt; keeps the linked directors, &lt;code&gt;lu_decisions&lt;/code&gt; stores final decisions, and &lt;code&gt;lu_ai_assessments&lt;/code&gt; caches Jev's assessment for each application.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Components&lt;/th&gt;
&lt;th&gt;What they cover&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pipeline&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Four KPI tiles, four filters and the table of pending applications with Jev's risk band.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Underwrite&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;Case header, financial ratios, Jev's assessment, S3 documents and the decision form.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Portfolio review&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Four KPI tiles, three charts and the decision log.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What Got Generated
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pages&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ToolJet DB + PostgreSQL tables&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queries&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Components&lt;/td&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code files to maintain&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair cycles&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsme-loan-underwriting-app-components-inspector-6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsme-loan-underwriting-app-components-inspector-6.png" title="SME Loan Underwriting built with ToolJet MCP: components" alt="SME Loan Underwriting component tree generated by ToolJet MCP" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The components ToolJet MCP created, in the ToolJet inspector&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Industries That Run This
&lt;/h2&gt;

&lt;p&gt;Banks, challenger banks and non-bank lenders that underwrite small and medium business loans, including credit teams, credit committees and risk teams in commercial lending and asset finance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Can Use The Loan App
&lt;/h2&gt;

&lt;p&gt;Four groups were created: Lending - Underwriters, Lending - Credit Committee, Lending - Relationship Managers and Lending - Risk. Underwriters, the Credit Committee and admins can save decisions, only the Credit Committee and admins can run the committee save, and Underwriters, Credit Committee, Risk and admins can open Portfolio review. Relationship Managers see only their own applicants. The groups have no members yet and the rules were not tested by signing in as a group member.&lt;/p&gt;

&lt;h2&gt;
  
  
  Development, Staging and Production Environments in ToolJet
&lt;/h2&gt;

&lt;p&gt;An SME Loan Underwriting app should never be tested against live data, and ToolJet separates each app into Development, Staging and Production environments with their own data source settings and constants. Builders change the app safely while end users keep working on the released version.&lt;/p&gt;

&lt;p&gt;Because the credit team tests underwriting changes against staging data before production, separate environments help keep the banking workflow steady. Server-side secrets stay scoped per environment, so credentials do not need to move through the app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Ftooljet-usp-environments-6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Ftooljet-usp-environments-6.png" title="Development, Staging and Production Environments in ToolJet" alt="Flow: a ToolJet app is promoted from Development to Staging to Production, and each environment uses its own data source, constants and secrets; secrets are masked, encrypted at rest and managed by admins only" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Development, Staging and Production Environments in ToolJet&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-Environment App Lifecycle and Version History
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/development-lifecycle/environment/self-hosted/multi-environment/" rel="noopener noreferrer"&gt;Multi-environment setup&lt;/a&gt;:&lt;/strong&gt; build in Development, promote to Staging where apps and queries cannot be edited, then promote to Production and release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-environment data sources:&lt;/strong&gt; point each environment at a different database or API, and ToolJet uses the right one automatically for the target environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment access:&lt;/strong&gt; admins choose which environments each group or role can open, combined with the app's Edit or View permission.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/development-lifecycle/release/version-control/" rel="noopener noreferrer"&gt;Version history&lt;/a&gt;:&lt;/strong&gt; drafts hold work in progress, and saved versions are fixed checkpoints you can promote, release or &lt;a href="https://docs.tooljet.com/docs/development-lifecycle/release/release-rollback/" rel="noopener noreferrer"&gt;roll back to&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Workspace Constants and Secret Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/security/constants/" rel="noopener noreferrer"&gt;Workspace constants&lt;/a&gt;:&lt;/strong&gt; store reusable values such as API URLs once per workspace, with a different value per environment. All constants and secrets are encrypted before they are stored.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secret constants:&lt;/strong&gt; keep API keys and database credentials masked in the interface and resolved on the server, so they never reach the browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/app-builder/custom-code/constants-secrets/" rel="noopener noreferrer"&gt;Referencing constants and secrets in apps&lt;/a&gt;:&lt;/strong&gt; builders use them by name in queries and data sources, while only admins can create, edit or delete them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps the SME Loan Underwriting app's test data, credentials and releases cleanly separated as the team grows. Multi-environment support is available from the Team plan on the &lt;a href="https://www.tooljet.com/pricing" rel="noopener noreferrer"&gt;ToolJet pricing page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise Features for Your Loan Underwriting App
&lt;/h2&gt;

&lt;p&gt;A loan underwriting app handles applicant financials, director details, and decision reasons. ToolJet covers that governance at the platform layer, so you configure it once instead of rebuilding it in every app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSO and SCIM:&lt;/strong&gt; sign in with &lt;a href="https://docs.tooljet.com/docs/user-management/sso/saml/setup/" rel="noopener noreferrer"&gt;SAML&lt;/a&gt;, OIDC or LDAP, and provision users automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role-based access control:&lt;/strong&gt; scope &lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/access-control/" rel="noopener noreferrer"&gt;permissions&lt;/a&gt; to the app, the data source, and each query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs:&lt;/strong&gt; track every login, edit, and approval decision for &lt;a href="https://docs.tooljet.com/docs/security/audit-logs/" rel="noopener noreferrer"&gt;compliance&lt;/a&gt; review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Air-gapped deployment:&lt;/strong&gt; self-host on &lt;a href="https://docs.tooljet.com/docs/setup/docker/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; or Kubernetes so your data stays in your network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiplayer editing:&lt;/strong&gt; several builders work on the same app, with versioning and &lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/overview/" rel="noopener noreferrer"&gt;Git sync&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ToolJet AI inside your own deployment:&lt;/strong&gt; run the AI features in your tenancy rather than a shared service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could add a notification layer with ToolJet Workflows. For example, a workflow could fire when a decision is saved, post a Slack message to the manager, send a Gmail message to the applicant owner, and write back to &lt;code&gt;lu_decisions&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;This SME loan underwriting app shows how a credit team can move from queue review to final decision inside ToolJet without splitting the data, the checks, and the screens. You get a pending pipeline, an underwriting view with ratios and documents, and a portfolio review that compares Jev with the underwriter's band. The build matters because the team keeps one editable app for applications, assessments, and decisions instead of copying the same case across separate places. The prompt in this article captures the working flow clearly enough to reproduce the structure and keep it adaptable as underwriting policy changes. That is the practical value of the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try ToolJet MCP
&lt;/h2&gt;

&lt;p&gt;Build your SME loan underwriting flow with ToolJet MCP, then request a &lt;a href="https://tooljet.com/schedule-demo" rel="noopener noreferrer"&gt;ToolJet demo&lt;/a&gt; for your own credit data.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is ToolJet MCP?
&lt;/h3&gt;

&lt;p&gt;ToolJet MCP is the build path that turns a prompt into a structured ToolJet application. In this app, that means the queue, review screen, portfolio view, data connections, and decision rules land together instead of as a codebase you assemble yourself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Jev connected live and does it decide on its own?
&lt;/h3&gt;

&lt;p&gt;No. Jev, TypeSafe's decision model, scores each application and suggests a result, while the underwriter makes the final decision. The review screen still holds the ratios, documents, and reason field for the human decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does Jev return for each application?
&lt;/h3&gt;

&lt;p&gt;Jev returns a risk band, an affordability score, a refer-to-credit-committee value, a fraud signal, and a main concern for each application. The app also shows confidence on the choice outputs and percentages on the signal outputs.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I reproduce the app from the prompt and existing data sources?
&lt;/h3&gt;

&lt;p&gt;Use the prompt in this article as the build spec, then map the app to PostgreSQL for applications and financials, ToolJet DB for decisions and cached assessments, and S3 for the supporting PDFs. That keeps the data sources separate while the app still reads like one underwriting flow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I edit the app after generation?
&lt;/h3&gt;

&lt;p&gt;Yes. The app stays editable in ToolJet, so you can adjust the structure, filters, and layout after generation without starting over. Code only becomes relevant when a specific case needs it, not for the normal review flow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can several people work on the same app?
&lt;/h3&gt;

&lt;p&gt;Yes. The same underwriting app can serve underwriters, the Credit Committee, Risk, and Relationship Managers at the same time through groups and page access. That keeps each role on the screens it should use, and the permission model stays inside the app.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens to the app after the agent finishes?
&lt;/h3&gt;

&lt;p&gt;It stays a ToolJet application on the runtime, so data connections, workflows, access control, auditing, and lifecycle management stay with the app where supported. That gives you a build you keep editing instead of a codebase to operate separately, and deployment stays on the platform layer where supported.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>llm</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Build a Security Questionnaire App With ToolJet MCP</title>
      <dc:creator>Athulya R</dc:creator>
      <pubDate>Thu, 01 Oct 2026 12:17:27 +0000</pubDate>
      <link>https://dev.to/tooljet/build-a-security-questionnaire-app-with-tooljet-mcp-2nlo</link>
      <guid>https://dev.to/tooljet/build-a-security-questionnaire-app-with-tooljet-mcp-2nlo</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Every enterprise deal brings a long security questionnaire, and most security and sales engineering teams still answer it from scratch. This tutorial shows how to build a security questionnaire app with ToolJet MCP for a B2B software company in Dublin. The app keeps an approved answer library with owners and review dates, matches each question in an uploaded questionnaire to the closest approved answer, and exports the completed pack as a PDF filled into the customer's own form. An AI agent generated it as a structured ToolJet application, with data, queries and interface together, so the team can keep editing it as the process changes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsqd-pack-builder-v2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsqd-pack-builder-v2.png" title="Security questionnaire pack builder in ToolJet showing reused, tailored and new answer counts" alt="Security questionnaire pack builder in ToolJet showing reused, tailored and new answer counts" width="800" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The pack builder for a Northwind Bank questionnaire: 21 reused, 1 tailored and 3 new answers, 100 percent complete, with the pack register below.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsqd-answer-library-v2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsqd-answer-library-v2.png" title="Approved answer library with owners, review dates and stale flags" alt="Approved answer library with owners, review dates and stale flags" width="800" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The answer library with owners, review dates and stale flags, filtered by category and review status.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsqd-submissions-v2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsqd-submissions-v2.png" title="Library submissions waiting for compliance lead approval" alt="Library submissions waiting for compliance lead approval" width="800" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Library submissions from pack work, waiting for the compliance lead to approve or reject.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Answer Library and Pack Builder Work
&lt;/h2&gt;

&lt;p&gt;The first page is a working answer library with filters for category and review status, a stale flag on older entries, and an editor that opens the selected answer with its review cycle and history. The second page is the pack builder, where you enter the customer and deal, upload a questionnaire, and match each question to the closest approved answer. Unmatched questions stay visible at the top, each match shows a confidence score, and the sales engineer can accept the suggestion, swap in another library answer, tailor the wording for that pack, or submit a new answer for review. A summary strip tracks reused, tailored, new, and unmatched work, then the finished pack downloads as a PDF filled into the customer's own form.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Searchable approved answer library with category and review status filters&lt;/li&gt;
&lt;li&gt;Stale flags, owner fields, and review dates on each answer&lt;/li&gt;
&lt;li&gt;Questionnaire upload, parsing, and matching with confidence scores&lt;/li&gt;
&lt;li&gt;Pack-level tailoring, new-answer submission, and review handoff&lt;/li&gt;
&lt;li&gt;Filled PDF export plus a pack register and activity log&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started With ToolJet MCP
&lt;/h2&gt;

&lt;p&gt;Want to build it yourself? Start with the &lt;a href="https://github.com/ToolJet/mcp-v2" rel="noopener noreferrer"&gt;ToolJet MCP repository&lt;/a&gt; for setup instructions, supported agents, and everything you need to follow along.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Consolidated Prompt to Rebuild the App
&lt;/h2&gt;

&lt;p&gt;The build took several passes before the shape settled. The requirements are consolidated into one prompt here, so you can reproduce the same app in a single shot.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Build a polished internal app called Security Questionnaire Desk in ToolJet.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Keep it to two pages: Answer Library, showing approved answers with search, category and review status filters, a stale flag, and an editor with history; and Pack Builder, where a sales engineer uploads a customer's questionnaire, matches each question to the closest approved answer with a confidence score, groups unmatched questions at the top, and downloads a filled PDF.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use a muted Nordic palette, calm and restrained, with dense two-column working areas, compact rows, clear hierarchy, and status colours only where they help.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use PostgreSQL for the approved answer library, answer history, roles, library submissions, and pack items. Use ToolJet DB for the pack register and the pack activity log.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The compliance lead is the only person who can approve, change, or re-approve a library answer, and that rule should be enforced in the database. Sales engineers can build packs and tailor wording for one customer without changing the master answer.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How ToolJet MCP Builds the Questionnaire App
&lt;/h2&gt;

&lt;p&gt;ToolJet MCP takes the questionnaire requirements and works through the whole application, so the data model, pages, components, queries, and wiring land as one structured ToolJet application inside ToolJet, not as a loose bundle you assemble later. Enterprise app building does not end at the interface, because data connectivity, workflows, permissions, deployment, and ongoing change are the rest of the job, and the generated app sits on a runtime that carries those where supported rather than handing you a codebase to operate yourself. The path stays open, so you can move from AI generation to visual editing and code when a specific rule or pack behaviour needs it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The File Upload Issue We Fixed
&lt;/h2&gt;

&lt;p&gt;The upload step looked broken because the file picker refused every questionnaire file. The picker had been limited to image/*, so PDFs never reached the parser. Switching the control to PDF, XLSX, and CSV fixed the flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  PostgreSQL and ToolJet DB Tables Behind the App
&lt;/h2&gt;

&lt;p&gt;The app ended up with seven tables. &lt;code&gt;cqa_answers&lt;/code&gt; stores the approved answer library with the owner and last reviewed date, &lt;code&gt;cqa_answer_history&lt;/code&gt; records each change, &lt;code&gt;cqa_roles&lt;/code&gt; maps the compliance lead and sales engineer roles, &lt;code&gt;cqa_submissions&lt;/code&gt; holds new answers waiting for review, &lt;code&gt;cqa_pack_items&lt;/code&gt; stores each questionnaire item and its match, and &lt;code&gt;cqa_packs&lt;/code&gt; plus &lt;code&gt;cqa_pack_log&lt;/code&gt; live in ToolJet DB for the pack register and activity trail.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Components&lt;/th&gt;
&lt;th&gt;What they cover&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Answer library&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;Answer table, filters, answer editor with history, submissions review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pack builder&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;Upload, matching table, answer panel, summary, pack register&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What ToolJet MCP Generated
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pages&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ToolJet DB + PostgreSQL tables&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queries&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Components&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code files to maintain&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair cycles&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final validation&lt;/td&gt;
&lt;td&gt;0 errors&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsecurity-questionnaire-desk-app-components-inspector.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F10%2Fsecurity-questionnaire-desk-app-components-inspector.png" title="Security Questionnaire Desk built with ToolJet MCP: components" alt="Security Questionnaire Desk component tree generated by ToolJet MCP" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The components ToolJet MCP created, in the ToolJet inspector&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Industries That Answer Security Questionnaires
&lt;/h2&gt;

&lt;p&gt;Any B2B software or services company that sells to regulated buyers runs this process: SaaS vendors answering bank and insurer due diligence, managed service providers handling NIS2 and DORA supplier reviews, health tech companies answering hospital procurement, and fintechs filling out partner bank onboarding forms. The common thread is a small security team answering the same questions for many deals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roles and Access in the Built App
&lt;/h2&gt;

&lt;p&gt;Two roles, stored in PostgreSQL. The compliance lead is the only person who can create, change, re-approve or approve answers in the library, and the database functions refuse those writes from anyone else. Sales engineers can search the library, build packs, swap or tailor wording inside a pack and submit new answers for review, but tailored wording stays in the pack and never changes the master answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  ToolJet Database: Built-In PostgreSQL Storage for Full-Stack Apps
&lt;/h2&gt;

&lt;p&gt;A Security Questionnaire Desk app needs somewhere to keep its records, and ToolJet Database gives it a built-in, PostgreSQL-backed database with no separate server to provision or connect. Builders can create tables, relate them and query them from the same platform where the app is built.&lt;/p&gt;

&lt;p&gt;The pack register and activity log live in ToolJet DB, while the answer library stays in PostgreSQL, so the team keeps the working records inside the same app without a separate database server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2For6idfxbz6ts2rifqfks.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2For6idfxbz6ts2rifqfks.png" alt="Flow: create ToolJet Database tables in the database editor, query them from the app in GUI or SQL mode with no connection setup, and run them on ToolJet Cloud or your own PostgreSQL" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ToolJet Database: Built-In PostgreSQL Storage for Full-Stack Apps&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tables, Data Types and Relationships
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/tooljet-db/tooljet-database/" rel="noopener noreferrer"&gt;ToolJet Database overview&lt;/a&gt;:&lt;/strong&gt; keep tables in a secure database that is only accessible within your ToolJet organization, on both ToolJet Cloud and self-hosted deployments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/tooljet-db/database-editor/" rel="noopener noreferrer"&gt;Database editor&lt;/a&gt;:&lt;/strong&gt; create tables and edit, search, filter and sort rows in a spreadsheet-like interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/tooljet-db/data-types/" rel="noopener noreferrer"&gt;Supported data types&lt;/a&gt;:&lt;/strong&gt; serial, varchar, int, bigint, float, boolean, date with time and jsonb columns, with an automatic serial id primary key on every new table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/tooljet-db/constraints/foreign-key/" rel="noopener noreferrer"&gt;Foreign keys&lt;/a&gt;:&lt;/strong&gt; link tables and choose what happens to a row when the referenced row is updated or deleted, keeping referential integrity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Querying ToolJet Database from Apps
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/tooljet-db/querying-tooljet-db/" rel="noopener noreferrer"&gt;GUI and SQL queries&lt;/a&gt;:&lt;/strong&gt; list, filter, sort, aggregate and group rows in GUI mode, or write SQL directly in the SQL editor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works like any data source:&lt;/strong&gt; ToolJet Database queries bind to components and events the same way as other data sources, without connection setup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/setup/env-vars/" rel="noopener noreferrer"&gt;Self-hosted configuration&lt;/a&gt;:&lt;/strong&gt; on your own deployment, ToolJet Database runs on a PostgreSQL database you configure and is exposed to the app through PostgREST.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema export:&lt;/strong&gt; export table schemas to a JSON file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This lets the Security Questionnaire Desk app go full stack in one platform, with data, logic and UI together, while external databases can still be connected later. Table limits vary by plan on the &lt;a href="https://www.tooljet.com/pricing" rel="noopener noreferrer"&gt;ToolJet pricing page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise Features for Your Security Questionnaire App
&lt;/h2&gt;

&lt;p&gt;A security questionnaire app handles approved answers, customer details, and review notes. ToolJet covers that governance at the platform layer, so you configure it once instead of rebuilding it in every app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSO and SCIM:&lt;/strong&gt; sign in with &lt;a href="https://docs.tooljet.com/docs/user-management/sso/saml/setup/" rel="noopener noreferrer"&gt;SAML&lt;/a&gt;, OIDC or LDAP, and provision users automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role-based access control:&lt;/strong&gt; scope &lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/access-control/" rel="noopener noreferrer"&gt;permissions&lt;/a&gt; to the app, the data source, and each query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs:&lt;/strong&gt; track every login, edit, and approval decision for &lt;a href="https://docs.tooljet.com/docs/security/audit-logs/" rel="noopener noreferrer"&gt;compliance&lt;/a&gt; review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Air-gapped deployment:&lt;/strong&gt; self-host on &lt;a href="https://docs.tooljet.com/docs/setup/docker/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; or Kubernetes so your data stays in your network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiplayer editing:&lt;/strong&gt; several builders work on the same app, with versioning and &lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/overview/" rel="noopener noreferrer"&gt;Git sync&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ToolJet AI inside your own deployment:&lt;/strong&gt; run the AI features in your tenancy rather than a shared service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could add a notification layer with ToolJet Workflows. For example, a workflow could fire when a new answer is submitted, post a Slack message to the compliance lead, send a Gmail message to the sales engineer, and write the review note back to &lt;code&gt;cqa_submissions&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;This build gives security and sales engineering teams one place to maintain approved answers, compare uploaded questionnaires against that library, and export a filled PDF for the customer form. The result is a repeatable flow for sales engineering and compliance, instead of rewriting the same material for each deal. ToolJet MCP turns the requirements into a real, editable ToolJet application, so the team can keep adjusting the library, matching behavior, and pack output as the process changes. That is the useful part of the build, because the app stays alive after the first pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try ToolJet MCP
&lt;/h2&gt;

&lt;p&gt;Build your own security questionnaire desk with ToolJet MCP, then request a &lt;a href="https://tooljet.com/schedule-demo" rel="noopener noreferrer"&gt;ToolJet demo&lt;/a&gt; for your answer library and pack flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is ToolJet MCP in this build?
&lt;/h3&gt;

&lt;p&gt;ToolJet MCP takes the questionnaire requirements and turns them into a structured app inside ToolJet. For this desk, the library, pack builder, matching logic, and PDF output live together instead of becoming a loose codebase you have to assemble elsewhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does the answer library page show?
&lt;/h3&gt;

&lt;p&gt;It shows the approved answer set with search, category filters, review status, and a stale flag for items past their review cycle. Opening a row reveals the answer text, owner, review interval, keywords, and change history in one editor.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do you reproduce the build from the prompt?
&lt;/h3&gt;

&lt;p&gt;Use the prompt in this article as the full specification and build the two pages, tables, and matching rules in one pass. The consolidated prompt captures the page layout, review flow, and PDF output so you do not have to reconstruct the shape from notes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do you need to write code for questionnaire matching?
&lt;/h3&gt;

&lt;p&gt;You do not need to handwrite the whole app. The screens come from visual components, while parsing uploaded files, scoring matches, and filling the exported PDF use code where the workflow needs logic in this build.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens to the app after the agent finishes?
&lt;/h3&gt;

&lt;p&gt;The generated app stays as a structured ToolJet application, not a one-off code dump. The runtime carries the data connections, workflows, permissions, deployment, and ongoing change where supported, so you keep editing the same app as the process changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can the app use PostgreSQL and ToolJet DB together?
&lt;/h3&gt;

&lt;p&gt;Yes. The answer library, history, roles, submissions, and pack items live in PostgreSQL, while the pack register and activity log sit in ToolJet DB, which keeps operational state separate from the review content for the team.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can several teammates work on the same app at once?
&lt;/h3&gt;

&lt;p&gt;Yes. ToolJet supports multiplayer editing, so several builders can work on the same app, with versioning and Git sync. In daily use, the compliance lead maintains the master answers while sales engineers build packs from them.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Build a Bank vs ERP Reconciliation App with ToolJet MCP and Jev</title>
      <dc:creator>Athulya R</dc:creator>
      <pubDate>Wed, 30 Sep 2026 12:04:25 +0000</pubDate>
      <link>https://dev.to/tooljet/build-a-bank-vs-erp-reconciliation-app-with-tooljet-mcp-and-jev-23m</link>
      <guid>https://dev.to/tooljet/build-a-bank-vs-erp-reconciliation-app-with-tooljet-mcp-and-jev-23m</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The Reconciliation Workbench is a two-page ToolJet app for the finance operations team, built by a coding agent through &lt;a href="https://docs.tooljet.ai/docs/build-with-ai/mcp/overview/" rel="noopener noreferrer"&gt;ToolJet MCP&lt;/a&gt;. Bank lines and ERP entries sit in PostgreSQL, analyst decisions sit in ToolJet DB, and Jev, TypeSafe's model, triages each break at runtime through the &lt;code&gt;typesafe&lt;/code&gt; datasource. The analyst accepts or overrides Jev's suggestion, so nothing clears automatically. By the end you will see the Break queue, the Close summary, the triage flow and the data model behind them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Freconciliation-workbench-app-queue.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Freconciliation-workbench-app-queue.png" title="Reconciliation Workbench built with ToolJet MCP: The Break queue page lists unmatched bank versus ERP breaks, with Jev's triage result beside the selected break." alt="Build a reconciliation app with ToolJet MCP, the finished application: The Break queue page lists unmatched bank versus ERP breaks, with Jev's triage result beside the selected break." width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Break queue page lists unmatched bank versus ERP breaks, with Jev's triage result beside the selected break.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Freconciliation-workbench-app-queue-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Freconciliation-workbench-app-queue-2.png" title="Reconciliation Workbench built with ToolJet MCP: The Close summary page shows unexplained value by break type, ageing and the Agreed or Overridden decision log." alt="Build a reconciliation app with ToolJet MCP, the finished application: The Close summary page shows unexplained value by break type, ageing and the Agreed or Overridden decision log." width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Close summary page shows unexplained value by break type, ageing and the Agreed or Overridden decision log.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Break Queue and Jev Triage Work
&lt;/h2&gt;

&lt;p&gt;The home page centers a dense break queue with filters and a KPI strip. Opening a row shows the bank line beside the ERP entry. Triage with TypeSafe asks Jev, through the &lt;a href="https://docs.tooljet.ai/docs/marketplace/plugins/marketplace-plugin-typesafe/" rel="noopener noreferrer"&gt;TypeSafe datasource&lt;/a&gt;, three typed questions: &lt;code&gt;reason&lt;/code&gt; (a choice), &lt;code&gt;severity&lt;/code&gt; (a Low, Medium or High score) and &lt;code&gt;auto_clear&lt;/code&gt; (yes/no, meaning Jev suggests the break could clear without a journal). &lt;code&gt;auto_clear&lt;/code&gt; is only a suggestion: the app does not clear or post any financial record automatically. The panel shows the cause with its confidence, plus the tokens used per call. Jev's output is a suggestion. The analyst leaves the cause blank to keep it, or picks another cause, which is saved as an override with a resolution and note. The Close summary then shows unexplained value by break type, an ageing chart, the agreement KPI and a decision log marking each decision Agreed or Overridden.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Break queue with filters, KPIs, and side-by-side break detail&lt;/li&gt;
&lt;li&gt;Jev triage with cause, confidence, severity and auto-clear (live &lt;code&gt;typesafe&lt;/code&gt; datasource call)&lt;/li&gt;
&lt;li&gt;Accept or override the suggested cause and save the analyst note&lt;/li&gt;
&lt;li&gt;Close summary with unexplained value, ageing, and decision log&lt;/li&gt;
&lt;li&gt;PostgreSQL for bank and ERP data, ToolJet DB for decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Set Up ToolJet MCP and the TypeSafe Datasource
&lt;/h2&gt;

&lt;p&gt;Want to build it yourself? Read the  overview and use the &lt;a href="https://github.com/ToolJet/tooljet-mcp" rel="noopener noreferrer"&gt;ToolJet MCP repository&lt;/a&gt; for setup and supported agents. You also need a TypeSafe datasource in the workspace; the &lt;a href="https://docs.tooljet.ai/docs/marketplace/plugins/marketplace-plugin-typesafe/" rel="noopener noreferrer"&gt;TypeSafe datasource guide&lt;/a&gt; covers its setup and API key options.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Consolidated Build Prompt
&lt;/h2&gt;

&lt;p&gt;The build took several passes before the shape settled. The requirements are consolidated here into one prompt that could have been used from the start, so you can reproduce the app in a single shot.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Build a 2-page bank-versus-ERP reconciliation app in ToolJet for the finance operations team at Fjell &amp;amp; Fura AB, covering three accounts. Use only ToolJet native components on a muted Nordic, hygge-inspired theme (functional beauty, restrained elegance, natural materials, soft neutrals, cozy minimalism). Keep it enterprise grade, information dense with little whitespace, and with slightly larger font sizes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Data: use PostgreSQL (datasource postgresql_fleet) for both sides. The bank feed stands in for Snowflake, which is not connected, so label it 'Snowflake stand-in'. Create rw_meta, rw_ledger and rw_bank_txns plus a view rw_v_recon that full-outer-joins bank and ERP on invoice reference and account and shifts dates by the days since seeding. Seed synthetic data only. Use ToolJet DB table rw_decisions for the AI cause, severity and auto-clear result plus the analyst's cause, resolution and note.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Triage: use the existing typesafe datasource (TypeSafe AI, Jev model) with the evaluate operation. Send the break as state and ask three typed questions: reason (choice: timing, FX difference, bank fee, duplicate, missing entry, keying error), severity (score: Low, Medium, High) and auto_clear (yes/no). Show the returned confidence and the input and output tokens used.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Page 1, Break queue (home): a KPI strip, filters and the list of breaks. Selecting a break shows the bank line beside the ERP entry and a Triage with TypeSafe button. The analyst can accept the suggested cause (leave the cause dropdown blank to keep it) or pick a different one, which is saved as an override, with a resolution and note.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Page 2, Close summary: unexplained value by break type, an ageing chart, an agreement KPI and a decision log marking each decision Agreed or Overridden.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How ToolJet MCP Built the Workbench
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.tooljet.ai/docs/build-with-ai/mcp/overview/" rel="noopener noreferrer"&gt;ToolJet MCP&lt;/a&gt; connects the coding agent to the ToolJet workspace, so the pages, components, queries and the wiring between them land as one structured ToolJet application. It is a build-time tool: Jev did not build the app and only runs inside it, through the &lt;code&gt;typesafe&lt;/code&gt; datasource. The path stays open, so you can move from generation to visual editing and then into code when a case needs it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cause Override Issue We Fixed
&lt;/h2&gt;

&lt;p&gt;After you chose an override, the cause dropdown jumped back to Jev's suggested value, so the analyst's pick did not stick. A reactive default was resetting the dropdown. Removing it fixed the problem. A blank dropdown now means "keep Jev's cause" and shows the placeholder &lt;code&gt;Keep: [AI cause]&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tables and View Behind the Reconciliation Workbench
&lt;/h2&gt;

&lt;p&gt;The app uses four tables and one view across two datasources. In PostgreSQL, &lt;code&gt;rw_meta&lt;/code&gt; stores reconciliation metadata and account settings, &lt;code&gt;rw_ledger&lt;/code&gt; holds ERP entries, &lt;code&gt;rw_bank_txns&lt;/code&gt; holds bank transactions (the Snowflake stand-in), and the view &lt;code&gt;rw_v_recon&lt;/code&gt; joins the two into the break list. In ToolJet DB, &lt;code&gt;rw_decisions&lt;/code&gt; stores Jev's output and the analyst's decisions. All data is synthetic.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Components&lt;/th&gt;
&lt;th&gt;What they cover&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Break queue&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;KPI strip, filters, break list, bank and ERP detail, triage and decision controls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Close summary&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;KPIs, unexplained value and ageing charts, decision log&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What the Build Produced
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pages&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tables&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Views&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queries&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Components&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair cycles&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Freconciliation-workbench-app-components-inspector.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Freconciliation-workbench-app-components-inspector.png" title="Reconciliation Workbench built with ToolJet MCP: components" alt="Reconciliation Workbench component tree generated by ToolJet MCP" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The components ToolJet MCP created, in the ToolJet inspector&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Industries That Run This
&lt;/h2&gt;

&lt;p&gt;Finance and accounting operations teams that reconcile bank statements against an ERP ledger, including shared service centres, treasury and month-end close teams in financial services, retail and logistics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Gets Access To The Built App
&lt;/h2&gt;

&lt;p&gt;The app is built for finance analysts. No group-based permission rules were configured in this build, so access follows the workspace's app access settings. Restricting who can save decisions is something to confirm before production use.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitSync, Version Control and CI/CD Releases in ToolJet
&lt;/h2&gt;

&lt;p&gt;A Reconciliation Workbench app keeps changing after launch, and ToolJet gives it a real software lifecycle: saved versions you can release and roll back, GitSync to a Git repository, and an API that drives releases from CI/CD pipelines.&lt;/p&gt;

&lt;p&gt;When the finance team changes a rule in the reconciliation view, GitSync moves that edit from draft to release with a clear review path. If the change misbehaves, rollback returns the app to the last safe version before analysts lose trust in the queue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Ftooljet-usp-gitsync.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Ftooljet-usp-gitsync.png" title="GitSync, Version Control and CI/CD Releases in ToolJet" alt="Two cards: ToolJet GitSync connection, push and pull options, and the draft, saved version, release and rollback lifecycle" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;GitSync, Version Control and CI/CD Releases in ToolJet&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Git Version Control with GitSync
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/overview/" rel="noopener noreferrer"&gt;GitSync overview&lt;/a&gt;:&lt;/strong&gt; sync workspace apps with a Git repository for backups, a versioned history and moving apps between development, staging and production instances, using cloud or self-hosted Git providers and a custom branch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/connect-to-git-repo/connection-method/" rel="noopener noreferrer"&gt;Git connection methods&lt;/a&gt;:&lt;/strong&gt; connect GitHub or GitLab over HTTPS, or any Git provider such as Gitea over SSH.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/push/" rel="noopener noreferrer"&gt;Pushing changes to Git&lt;/a&gt;:&lt;/strong&gt; commit with a message from the GitSync button, with automatic commits on app rename, version updates and environment promotion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/pull/" rel="noopener noreferrer"&gt;Pulling changes from Git&lt;/a&gt;:&lt;/strong&gt; import the latest commit to restore a backup or pick up another developer's work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Releases, Rollback and CI/CD Automation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/development-lifecycle/release/version-control/" rel="noopener noreferrer"&gt;Version control&lt;/a&gt;:&lt;/strong&gt; edit in a draft, then save a fixed version that can be promoted, released or used for rollback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/development-lifecycle/release/release-rollback/" rel="noopener noreferrer"&gt;Release and rollback&lt;/a&gt;:&lt;/strong&gt; release a saved version to end users from Production, and restore a previous stable version instantly while the app URL stays the same.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/api/gitsync-api/" rel="noopener noreferrer"&gt;GitSync API for CI/CD&lt;/a&gt;:&lt;/strong&gt; push versions, create apps from Git, promote to the next environment and set the live release from Jenkins, GitHub Actions or GitLab CI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This lets the Reconciliation Workbench app ship changes through review and recover quickly from a bad release. Version control starts on the Pro plan and GitSync on the Team plan, while the GitSync API is a self-hosted feature of the &lt;a href="https://www.tooljet.com/pricing" rel="noopener noreferrer"&gt;ToolJet Enterprise plan&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise Features for Your Bank Reconciliation App
&lt;/h2&gt;

&lt;p&gt;A reconciliation workbench handles bank transactions, ERP ledger entries, and analyst decisions. ToolJet covers that governance at the platform layer, so you configure it once instead of rebuilding it in every app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSO and SCIM:&lt;/strong&gt; sign in with &lt;a href="https://docs.tooljet.com/docs/user-management/sso/saml/setup/" rel="noopener noreferrer"&gt;SAML&lt;/a&gt;, OIDC or LDAP, and provision users automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role-based access control:&lt;/strong&gt; scope &lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/access-control/" rel="noopener noreferrer"&gt;permissions&lt;/a&gt; to the app, the data source, and each query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs:&lt;/strong&gt; track every login, edit, and approval decision for &lt;a href="https://docs.tooljet.com/docs/security/audit-logs/" rel="noopener noreferrer"&gt;compliance&lt;/a&gt; review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Air-gapped deployment:&lt;/strong&gt; self-host on &lt;a href="https://docs.tooljet.com/docs/setup/docker/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; or Kubernetes so your data stays in your network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiplayer editing:&lt;/strong&gt; several builders work on the same app, with versioning and &lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/overview/" rel="noopener noreferrer"&gt;Git sync&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ToolJet AI inside your own deployment:&lt;/strong&gt; run the AI features in your tenancy rather than a shared service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could add a notification layer with ToolJet Workflows. For example, a workflow could fire when a break is overridden, post to the manager in Slack, email the analyst through Gmail, and write the decision back to &lt;code&gt;rw_decisions&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;The Reconciliation Workbench shows how ToolJet MCP can turn a finance review process into a structured application with a clear decision trail. The break queue keeps the bank and ERP lines side by side, Jev's triage suggests a cause the analyst can accept or override, and the close summary turns saved decisions into a readable view. The bank feed is a PostgreSQL stand-in for Snowflake and the data is synthetic. Because the output is a real ToolJet application, the team can keep changing the workbench as reconciliation rules change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try ToolJet MCP
&lt;/h2&gt;

&lt;p&gt;Build a reconciliation app with ToolJet MCP for your own finance data, then request a &lt;a href="https://tooljet.com/schedule-demo" rel="noopener noreferrer"&gt;ToolJet demo&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What does ToolJet MCP do for a reconciliation workbench?
&lt;/h3&gt;

&lt;p&gt;ToolJet MCP connects a coding agent to the ToolJet workspace so it can create the break queue, detail pane, triage flow and summary page. Here the result is a working reconciliation workbench for Fjell &amp;amp; Fura AB, using synthetic data.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does this app show for each break?
&lt;/h3&gt;

&lt;p&gt;The bank line beside the ERP entry, plus Jev's suggested cause with confidence, a severity score and an auto-clear yes/no. The analyst accepts the suggestion or overrides it, and the decision is saved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Jev connected live, and does it clear breaks automatically?
&lt;/h3&gt;

&lt;p&gt;Jev runs live through the &lt;code&gt;typesafe&lt;/code&gt; datasource during triage. Its output, including &lt;code&gt;auto_clear&lt;/code&gt;, is a suggestion only. The analyst decides and saves, and the app does not clear or post any financial record automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do you reproduce this reconciliation app?
&lt;/h3&gt;

&lt;p&gt;Use the prompt in this article with ToolJet MCP and a &lt;code&gt;typesafe&lt;/code&gt; datasource in the workspace. It describes the pages, the &lt;code&gt;rw_&lt;/code&gt; tables and view, the &lt;code&gt;rw_decisions&lt;/code&gt; table and the three triage questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do you need to write code to build it?
&lt;/h3&gt;

&lt;p&gt;The agent built the workbench through ToolJet MCP without hand-writing the app. You can still move into code or visual editing when a case needs it.&lt;/p&gt;

&lt;h3&gt;
  
  
  How is the agreement KPI calculated?
&lt;/h3&gt;

&lt;p&gt;It is the share of saved decisions where the analyst kept Jev's cause. In testing it read 75%, which was 3 of 4 demo decisions.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Build a Supplier Product Import App with ToolJet MCP</title>
      <dc:creator>Athulya R</dc:creator>
      <pubDate>Tue, 29 Sep 2026 12:10:37 +0000</pubDate>
      <link>https://dev.to/tooljet/build-a-supplier-product-import-app-with-tooljet-mcp-51f3</link>
      <guid>https://dev.to/tooljet/build-a-supplier-product-import-app-with-tooljet-mcp-51f3</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In this walkthrough, you'll learn how to build a supplier spreadsheet import workflow with ToolJet MCP for a wholesale operations team in Manchester. The app maps supplier data to product fields, validates changes, stages updates for review, and gives authorized users a controlled path to commit them. Instead of manually cleaning spreadsheets or maintaining a separate code workflow, the team can manage data, queries, validation, and review in one ToolJet application. You'll also see how the agent-generated app handles the complete import workflow from file upload to final approval.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fpg-1-1-1024x515.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fpg-1-1-1024x515.png" title="Supplier Product Import built with ToolJet MCP: Review changes: counts for new, changed, unchanged and rejected rows, and every changed field with current and incoming value and the percentage move" alt="Build a supplier product import app with ToolJet MCP, the finished application: Review changes: counts for new, changed, unchanged and rejected rows, and every changed field with current and incoming value and the percentage move" width="799" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Review changes: counts for new, changed, unchanged and rejected rows, and every changed field with current and incoming value and the percentage move&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fpage-2-1024x491.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fpage-2-1024x491.png" title="Supplier Product Import built with ToolJet MCP: Map columns: the supplier's saved mapping pre-fills each column, beside a mapping check of which of our fields are covered" alt="Mapping supplier CSV columns to product database fields" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Map columns: the supplier's saved mapping pre-fills each column, beside a mapping check of which of our fields are covered&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fpage-3-1024x491.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fpage-3-1024x491.png" title="Supplier Product Import built with ToolJet MCP: Cannot import: only the failing rows in an editable grid, with the problem cell highlighted and a re-check for just those rows" alt="Validation preview showing staged product updates" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cannot import: only the failing rows in an editable grid, with the problem cell highlighted and a re-check for just those rows&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fpage-4-1024x490.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fpage-4-1024x490.png" title="Supplier Product Import built with ToolJet MCP: Confirm: what will be written to the product master, the largest price moves, and a steward-only commit behind a review tick" alt="Final approval screen for committing product changes" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Confirm: what will be written to the product master, the largest price moves, and a steward-only commit behind a review tick&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What We're Building
&lt;/h2&gt;

&lt;p&gt;The screen is a four-step workspace with a file summary beside the current step and a history pane underneath. Upload accepts .xlsx, .xls, or .csv files, shows the chosen supplier, and keeps the original row numbers ready for review. Map lines up file columns against internal fields with labels that show whether a mapping is saved, detected, or changed. Review splits the result into product changes, new products, and rejected rows, then lets you edit only the bad cells and re-check them. Confirm shows the final import summary and keeps commit locked until the review tick is set. The reviewer can trace each rejected row back to the source file.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Drop in .xlsx, .xls, or .csv files and keep the original row numbers for review&lt;/li&gt;
&lt;li&gt;Reuse a supplier's saved mapping and flag Saved, Detected, or Changed values in the mapper&lt;/li&gt;
&lt;li&gt;Preview added products, field-by-field changes, and rejected rows before anything is written&lt;/li&gt;
&lt;li&gt;Fix failed rows in place, then re-check only the corrected records&lt;/li&gt;
&lt;li&gt;Restrict commit and mapping-save actions to data stewards while keeping past imports visible&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Build a Supplier Product Import App with ToolJet MCP
&lt;/h2&gt;

&lt;p&gt;Want to build it yourself? Start with the &lt;a href="https://github.com/ToolJet/mcp-v2" rel="noopener noreferrer"&gt;ToolJet MCP repository&lt;/a&gt; for setup instructions, supported agents, and everything you need to follow along.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Consolidated ToolJet MCP Build Prompt
&lt;/h2&gt;

&lt;p&gt;The build took several passes across layout, data, and validation before the app settled into one flow. The requirements are now consolidated into the prompt below, so you can reproduce the same importer in a single shot.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Build a single-page supplier product import app in ToolJet for the operations team of a Manchester wholesale distributor.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Keep it as one dense workspace with four steps: Upload, Map, Review, Confirm, plus an import history pane. Upload accepts supplier spreadsheets and shows the selected supplier and file summary. Map aligns incoming columns to internal fields and makes saved mappings visible. Review previews added products, field-by-field changes, and rejected rows, and lets users fix bad cells in place before re-checking only those rows. Confirm shows what will be written and requires the reviewer acknowledgement before commit.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use a Nordic Steel Blue visual style: cool greys, slate headers, restrained blue accents, compact rows, strong hierarchy, and status colours only where they help.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use PostgreSQL for the product master and history, and ToolJet DB for suppliers, saved mappings, and import field definitions. Model imports so the preview and past runs come from stored records, not mutable status fields.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Only data stewards can save mappings or commit an import. Every commit must re-check that role, reject stale previews, and record adds, changed fields, and rejected rows in the history.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How ToolJet MCP Builds the Import App
&lt;/h2&gt;

&lt;p&gt;ToolJet MCP works through the whole application, not just the visible page: the data model, queries, components, and wiring between them land as one structured ToolJet application. Enterprise app building does not end at the interface, because data connectivity, permissions, deployment, and ongoing change are part of the job, and the generated app sits on a runtime that carries those where supported instead of handing you a codebase to operate yourself. The path stays open: AI generation, then visual editing, then code when a case needs it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Mapping Validation Issue We Fixed
&lt;/h2&gt;

&lt;p&gt;Changing a column mapping did not immediately refresh the mapping check, so the review step could still look valid after two columns pointed at the same field. The cause was the check not rerunning on dropdown edits, and the fix made the warning update as soon as the mapping changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supplier Product Import Data Model
&lt;/h2&gt;

&lt;p&gt;The app ended up with 8 tables in two groups. The PostgreSQL group covers &lt;code&gt;spi_products&lt;/code&gt;, &lt;code&gt;spi_categories&lt;/code&gt;, &lt;code&gt;spi_app_roles&lt;/code&gt;, &lt;code&gt;spi_import_runs&lt;/code&gt;, and &lt;code&gt;spi_import_changes&lt;/code&gt;, while the ToolJet DB group covers &lt;code&gt;spi_suppliers&lt;/code&gt;, &lt;code&gt;spi_saved_mappings&lt;/code&gt;, and &lt;code&gt;spi_fields&lt;/code&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Components&lt;/th&gt;
&lt;th&gt;What they cover&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Home&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What ToolJet MCP Generated
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pages&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ToolJet DB + PostgreSQL tables&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queries&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Components&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code files to maintain&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair cycles&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final validation&lt;/td&gt;
&lt;td&gt;0 errors&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fsupplier-product-import-app-components-inspector-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fsupplier-product-import-app-components-inspector-1.png" title="Supplier Product Import built with ToolJet MCP: components" alt="Supplier Product Import component tree generated by ToolJet MCP" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The components ToolJet MCP created, in the ToolJet inspector&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Can Use This Supplier Import App
&lt;/h2&gt;

&lt;p&gt;Wholesale and distribution businesses, cash-and-carry and foodservice suppliers, retail buying and merchandising teams, and any operations or master-data team that receives product, price or catalogue updates from many suppliers as spreadsheets and needs them checked before they reach the product master.&lt;/p&gt;

&lt;h2&gt;
  
  
  Control Access with Roles and Permission
&lt;/h2&gt;

&lt;p&gt;As built, roles come from the signed-in user's email in a PostgreSQL roles table. Two data stewards can commit an import and save a supplier's mapping; ToolJet query permissions restrict the commit and mapping-save queries to those two users, and the commit function in the database checks the steward role again before writing anything. Everyone else with access to the app can upload a file, correct the mapping, see the full preview, fix rejected rows and browse the import history, but cannot commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add SSO and SCIM for Enterprise Access
&lt;/h2&gt;

&lt;p&gt;A Supplier Product Import app should use the company login your team already has, and ToolJet supports single sign-on (SSO) through SAML, OpenID Connect (OIDC) and LDAP, plus SCIM 2.0 for automated user provisioning. People sign in with their identity provider account, and access follows your directory instead of a separate password list.&lt;/p&gt;

&lt;p&gt;When a steward joins or leaves the operations team, directory changes can flow into the same access controls that protect this importer. SSO and SCIM keep their access aligned with the company directory without separate hand edits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Ftooljet-usp-sso-flow.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Ftooljet-usp-sso-flow.png" title="Single Sign-On and SCIM User Provisioning in ToolJet" alt="Flowchart: staff sign in through their identity provider (Okta, Entra ID, Google, Auth0) to ToolJet via SAML, OIDC with multiple providers, or LDAP, with groups mapped to access. SCIM 2.0 creates, updates and archives users as they join, change role or leave" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Single Sign-On and SCIM User Provisioning in ToolJet&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Supported SSO Protocols (SAML, OIDC and LDAP)
&lt;/h3&gt;

&lt;p&gt;Workspace admins turn each method on under Workspace settings &amp;gt; Workspace login, as described in the &lt;a href="https://docs.tooljet.com/docs/user-management/sso/overview/" rel="noopener noreferrer"&gt;ToolJet SSO overview&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/user-management/sso/saml/setup/" rel="noopener noreferrer"&gt;SAML single sign-on&lt;/a&gt;:&lt;/strong&gt; connect providers such as Okta, Active Directory Federation Services, Auth0 or Azure AD by pasting your identity provider metadata, with optional group sync from a group attribute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/user-management/sso/oidc/setup/" rel="noopener noreferrer"&gt;OpenID Connect&lt;/a&gt;:&lt;/strong&gt; use Azure AD, Google or Okta with the Authorization Code or Authorization Code with PKCE grant, configured per workspace or for the whole instance. On the Enterprise plan you can set up &lt;a href="https://docs.tooljet.com/docs/user-management/sso/oidc/setup/" rel="noopener noreferrer"&gt;multiple OIDC providers&lt;/a&gt; side by side, and users pick theirs on the sign-in page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/user-management/sso/ldap/" rel="noopener noreferrer"&gt;LDAP authentication&lt;/a&gt;:&lt;/strong&gt; sign users in against your directory server using Base DN search, CN or UPN usernames, optional SSL certificates and group sync on every login.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Automated Provisioning with SCIM 2.0
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/api/scim/" rel="noopener noreferrer"&gt;SCIM user and group provisioning&lt;/a&gt;:&lt;/strong&gt; connect Okta, Azure AD, OneLogin or another identity provider to create users when they join, update names, emails and role mappings in real time, and archive users as soon as access is revoked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server-side setup:&lt;/strong&gt; SCIM is switched on with environment variables on your ToolJet deployment and accepts Bearer token or Basic authentication.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With SSO and SCIM in place, onboarding and offboarding for the Supplier Product Import app happen in your identity provider rather than by hand. SAML, OIDC and LDAP are available from the Team plan, and SCIM provisioning is part of the &lt;a href="https://www.tooljet.com/pricing" rel="noopener noreferrer"&gt;ToolJet Enterprise plan&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise Features for Your Supplier Import App
&lt;/h2&gt;

&lt;p&gt;A supplier product import app handles price files, product master data, and steward approvals. ToolJet covers that governance at the platform layer, so you configure it once instead of rebuilding it in every app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSO and SCIM:&lt;/strong&gt; sign in with &lt;a href="https://docs.tooljet.com/docs/user-management/sso/saml/setup/" rel="noopener noreferrer"&gt;SAML&lt;/a&gt;, OIDC or LDAP, and provision users automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role-based access control:&lt;/strong&gt; scope &lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/access-control/" rel="noopener noreferrer"&gt;permissions&lt;/a&gt; to the app, the data source, and each query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs:&lt;/strong&gt; track every login, edit, and approval decision for &lt;a href="https://docs.tooljet.com/docs/security/audit-logs/" rel="noopener noreferrer"&gt;compliance&lt;/a&gt; review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Air-gapped deployment:&lt;/strong&gt; self-host on &lt;a href="https://docs.tooljet.com/docs/setup/docker/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; or Kubernetes so your data stays in your network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiplayer editing:&lt;/strong&gt; several builders work on the same app, with versioning and &lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/overview/" rel="noopener noreferrer"&gt;Git sync&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ToolJet AI inside your own deployment:&lt;/strong&gt; run the AI features in your tenancy rather than a shared service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could add it with ToolJet Workflows. For example, a workflow could fire when an import is committed, post a Slack message to the operations channel, send a Gmail message to the steward, and write the decision back to &lt;code&gt;spi_import_runs&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;A supplier product import app can turn a manual spreadsheet process into a controlled workflow for mapping, validation, review, and approval. This ToolJet MCP build takes supplier files from upload to staged product changes, lets users correct rejected rows, and restricts final commits to authorized data stewards. The result is a working ToolJet application with the database tables, queries, components, permissions, and import history needed to support the workflow. For wholesale, distribution, retail, and master-data teams, the same pattern can be adapted to existing product databases and supplier processes. ToolJet MCP provides the starting point, while the resulting app remains editable as requirements change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try ToolJet MCP
&lt;/h2&gt;

&lt;p&gt;Build a supplier product import app with ToolJet MCP for your catalog files, then request a &lt;a href="https://tooljet.com/schedule-demo" rel="noopener noreferrer"&gt;ToolJet demo&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What does ToolJet MCP do in this build?
&lt;/h3&gt;

&lt;p&gt;ToolJet MCP is the bridge that lets an agent turn the prompt in this article into a real ToolJet application. It threads the tables, queries, and page wiring into one result, so the importer arrives as a connected app rather than disconnected pieces.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does the supplier product import app do?
&lt;/h3&gt;

&lt;p&gt;It loads supplier spreadsheets, maps incoming columns to your fields, previews added rows, changed fields, and rejects, and lets a steward commit only after review. It also keeps supplier mappings and import history so the next file starts from known rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I reproduce this importer from the prompt in this article?
&lt;/h3&gt;

&lt;p&gt;Yes. The consolidated prompt in this article is written so you can start from a single specification and recreate the same importer in one pass. The walkthrough shows the finished shape, so the prompt has a clear target.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need to write code for the parsing and validation?
&lt;/h3&gt;

&lt;p&gt;Not for the main flow. Native ToolJet components handle the workspace, while custom code only appears where parsing, cleanup, or validation needs it. That keeps the import logic inside the app instead of scattered across separate files.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens to the app after the agent finishes?
&lt;/h3&gt;

&lt;p&gt;The agent leaves you with a ToolJet application that stays in the workspace, and the runtime continues to handle the data connections, permissions, and change management the app needs where supported. You keep editing the same app instead of starting over from a codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use my own PostgreSQL data and saved mappings?
&lt;/h3&gt;

&lt;p&gt;Yes. This build uses PostgreSQL for the product master and import history, and ToolJet DB for supplier and mapping configuration. The same pattern fits your own catalog when those records already live in a database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can several people work on the same importer?
&lt;/h3&gt;

&lt;p&gt;Yes, the app can be shared with different access levels, and steward-only actions stay restricted. That lets one person test mappings while another reviews imports without crossing the commit boundary, and the shared history keeps handoff simple.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Build a Contract Obligations Review App with ToolJet MCP</title>
      <dc:creator>Athulya R</dc:creator>
      <pubDate>Mon, 28 Sep 2026 11:14:55 +0000</pubDate>
      <link>https://dev.to/tooljet/build-a-contract-obligations-review-app-with-tooljet-mcp-ema</link>
      <guid>https://dev.to/tooljet/build-a-contract-obligations-review-app-with-tooljet-mcp-ema</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Here is how to build a contract obligations review app with ToolJet MCP for the legal operations team at a Singapore property group. The app keeps each contract PDF beside the obligations extracted from it, and it tracks clauses, act-by deadlines, comments and the approval record in one place. An agent generated it as a structured ToolJet application, with its data, queries and interface kept together, so the team runs and edits a real app instead of maintaining a code drop. This article walks through the screens, the tables and the build, and gives you the consolidated prompt so you can reproduce it in one shot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fcontract-obligations-review.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fcontract-obligations-review.png" title="Contract Obligations Review built with ToolJet MCP: Review: the executed lease beside the obligations extracted from it, each with an owner, last day to act and notice window, plus comments and the approval record" alt="Build a contract obligations review app with ToolJet MCP, the finished application: Review: the executed lease beside the obligations extracted from it, each with an owner, last day to act and notice window, plus comments and the approval record" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Review: the executed lease beside the obligations extracted from it, each with an owner, last day to act and notice window, plus comments and the approval record&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fcontract-obligations-review-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fcontract-obligations-review-2.png" title="Contract Obligations Review built with ToolJet MCP: Obligations calendar: open obligations by last day to act, flags for items inside their notice window, a month view and commitments per owner" alt="Build a contract obligations review app with ToolJet MCP, the finished application: Obligations calendar: open obligations by last day to act, flags for items inside their notice window, a month view and commitments per owner" width="799" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Obligations calendar: open obligations by last day to act, flags for items inside their notice window, a month view and commitments per owner&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fcontract-obligations-review-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fcontract-obligations-review-3.png" title="Contract Obligations Review built with ToolJet MCP: Contract register: every contract with its counterparty, business owner, status, expiry and next act-by date" alt="Build a contract obligations review app with ToolJet MCP, the finished application: Contract register: every contract with its counterparty, business owner, status, expiry and next act-by date" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Contract register: every contract with its counterparty, business owner, status, expiry and next act-by date&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fcontract-obligations-review-4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fcontract-obligations-review-4.png" title="Contract Obligations Review built with ToolJet MCP: Add obligation: clause, PDF page, category, owner, deadline, notice period, recurrence and status for a new obligation" alt="Build a contract obligations review app with ToolJet MCP, the finished application: Add obligation: clause, PDF page, category, owner, deadline, notice period, recurrence and status for a new obligation" width="799" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Add obligation: clause, PDF page, category, owner, deadline, notice period, recurrence and status for a new obligation&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What We're Building
&lt;/h2&gt;

&lt;p&gt;The Review page keeps the contract PDF on one side and the obligations table on the other, so clause text and extracted duties stay in view together. Clicking a row jumps the PDF to the source clause and highlights that passage. A comment panel follows the selected obligation, and the approval timeline sits under the review panel so decision history remains visible while the contract is open. The calendar page groups action dates by owner, and the register page gives search, type, status, and property filters for the wider portfolio.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PDF beside obligations with clause-level jump and highlight&lt;/li&gt;
&lt;li&gt;Per-obligation comments with an append-only approval timeline&lt;/li&gt;
&lt;li&gt;Calendar grouped by business owner with act-by dates&lt;/li&gt;
&lt;li&gt;Searchable contract register with type, status, and property filters&lt;/li&gt;
&lt;li&gt;Role-aware review flow for legal reviewers, owners, and General Counsel&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Build a Contract Obligations Review App with ToolJet MCP Follow-Along
&lt;/h2&gt;

&lt;p&gt;Want to build it yourself? Start with the &lt;a href="https://github.com/ToolJet/mcp-v2" rel="noopener noreferrer"&gt;ToolJet MCP repository&lt;/a&gt; for setup instructions, supported agents, and everything you need to follow along.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Consolidated Build Prompt
&lt;/h2&gt;

&lt;p&gt;The build took several passes to settle the screens, data model, and review flow. The requirements are consolidated into one prompt that could have been used from the start, so you can reproduce the app in a single shot.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Build a 3-page Contract Obligations Review app in ToolJet for the legal operations team of a Singapore commercial property group that manages several hundred lease and vendor agreements.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use top navigation and native ToolJet components where they fit. Make the interface feel like a quiet institutional legal portal on a Swiss grid, with light and dark mode, a pale background, dark slate text, subtle borders, deep navy accents, no shadows, no rounded corners, dense two-column layouts, compact type, bold table headers, and uppercase monospace clause tags.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Store the app in ToolJet DB using six &lt;code&gt;clr_&lt;/code&gt; tables: &lt;code&gt;clr_people&lt;/code&gt;, &lt;code&gt;clr_contracts&lt;/code&gt;, &lt;code&gt;clr_documents&lt;/code&gt;, &lt;code&gt;clr_obligations&lt;/code&gt;, &lt;code&gt;clr_obl_comments&lt;/code&gt;, and &lt;code&gt;clr_approval_log&lt;/code&gt;. Seed a realistic fictional Singapore portfolio of about 14 leases and vendor contracts with around 80 obligations, some with 90-day notice periods.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Use the signed-in user's email to determine role. Legal reviewers can add and edit obligations, comment, and submit a contract to General Counsel. Business owners see only the contracts and obligations they own. Only General Counsel can approve, and a contract becomes Active only on approval. Restrict write queries server-side to the right users, with decision queries limited to General Counsel.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Review page shows the contract PDF beside a table of obligations. Clicking an obligation jumps the PDF to the source clause and highlights it. When no real PDF exists, generate one from clause text. Each obligation has its own comment thread. Add and edit obligations in a modal. Under the obligations, show approval history as a timeline. The history is append-only and records every submission, review note, and decision with name, role, and timestamp. General Counsel can approve or request changes. Approval freezes current obligations as a numbered version. Any later add or edit is logged as an amendment against that version and tagged on the row.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Obligations calendar shows the last day to act, which is deadline minus notice days. Show a month calendar and an agenda grouped by business owner, with per-owner summaries. Mark overdue items, items inside their notice window, and items due within 30 days. Filter by owner, time horizon, and whether to show only items needing action or only notice obligations.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Contract register is a searchable table of visible contracts, filterable by type, status, and property. Show the ref, counterparty, business owner, status, expiry, and next act-by date, with a button that opens the contract on the Review page.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How ToolJet MCP Builds the App
&lt;/h2&gt;

&lt;p&gt;ToolJet MCP works through the whole application, not the screen: the data model, queries, component tree, and wiring between them land as one structured ToolJet application. Enterprise app building does not end at the interface, data connectivity, workflows, permissions, deployment, and ongoing change are the rest of the job, and the generated app sits on a runtime that carries those where supported instead of handing the team a codebase to operate themselves. The path stays open, so AI generation, then visual editing, then code when a clause jump or frozen version rule needs it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The One Thing That Broke
&lt;/h2&gt;

&lt;p&gt;The Review page first showed "No contract" even though the contract picker and obligations list had loaded. The PDF viewer was bound to an object literal that ToolJet resolved to an empty object, so the pane had no document data until the binding was corrected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Created
&lt;/h2&gt;

&lt;p&gt;The app ended up with six tables. &lt;code&gt;clr_people&lt;/code&gt; stores the people and roles, &lt;code&gt;clr_contracts&lt;/code&gt; tracks each agreement and its current state, &lt;code&gt;clr_documents&lt;/code&gt; holds clause text and the optional PDF link, &lt;code&gt;clr_obligations&lt;/code&gt; captures each duty, &lt;code&gt;clr_obl_comments&lt;/code&gt; stores reviewer comments, and &lt;code&gt;clr_approval_log&lt;/code&gt; keeps the append-only approval history and frozen approved versions.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Components&lt;/th&gt;
&lt;th&gt;What they cover&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Review&lt;/td&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;td&gt;contract picker and actions, PDF viewer with clause highlight, obligations table, per-obligation comments, approval timeline, add/edit obligation and approval-step modals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Obligations calendar&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;owner, horizon and show filters, legend, month calendar, owner-grouped agenda and per-owner summary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contract register&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;type, status and property filters and a searchable contract table with next act-by dates and a Review button&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What Got Generated
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pages&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ToolJet DB tables&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queries&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Components&lt;/td&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code files to maintain&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair cycles&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Industries That Run This
&lt;/h2&gt;

&lt;p&gt;Commercial and retail property groups, REITs and landlords, facilities management firms, and any legal operations or contract management team tracking lease and vendor obligations, such as renewal options, notice periods, reporting duties and payment milestones, across hundreds of agreements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Gets Access To The Built App
&lt;/h2&gt;

&lt;p&gt;As built, roles come from the signed-in user's email in the app's own people table. Legal reviewers and General Counsel see every contract, add and edit obligations, comment on them and submit contracts for approval. Only General Counsel can approve or request changes. Business owners see only the contracts and obligations they own. The write queries are restricted server-side to named users: the legal queries to the General Counsel and one legal reviewer, and the approval decision queries to the General Counsel alone. Three workspace groups (Legal Reviewers, General Counsel and Business Owners) were created but have no members yet. In production, add members to those groups and move the query permissions onto them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-Hosting ToolJet: Open Source, On-Premise and Air-Gapped Deployment
&lt;/h2&gt;

&lt;p&gt;A Contract Obligations Review app often works with data that cannot leave your network, and ToolJet lets you run the whole platform on infrastructure you control instead of a vendor cloud. Both the community edition and the enterprise edition can be deployed on-premise, and air-gapped deployment is available for environments with no internet access.&lt;/p&gt;

&lt;p&gt;Lease terms, counterparty details, and approval history sit inside a legal operations app, so keeping the runtime on company infrastructure gives security and IT reviewers a cleaner control boundary.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Ftooljet-usp-self-hosting.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Ftooljet-usp-self-hosting.png" title="Self-Hosting ToolJet: Open Source, On-Premise and Air-Gapped Deployment" alt="Two cards: ToolJet self-hosting targets (Docker, Kubernetes, clouds) and isolation options: AGPL, on-premise, air-gapped" width="799" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Self-Hosting ToolJet: Open Source, On-Premise and Air-Gapped Deployment&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployment Options: Docker, Kubernetes and Major Clouds
&lt;/h3&gt;

&lt;p&gt;ToolJet's &lt;a href="https://docs.tooljet.com/docs/setup/" rel="noopener noreferrer"&gt;self-hosting setup guides&lt;/a&gt; cover the common ways to run it in your own environment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/setup/docker/" rel="noopener noreferrer"&gt;Docker Compose deployment&lt;/a&gt;:&lt;/strong&gt; run ToolJet on a single server, with optional Terraform scripts to provision a VM on AWS, Azure or GCP first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/setup/kubernetes/" rel="noopener noreferrer"&gt;Kubernetes deployment&lt;/a&gt;:&lt;/strong&gt; run ToolJet on your own cluster, with dedicated guides for EKS, GKE, AKS, Helm and OpenShift.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your own PostgreSQL:&lt;/strong&gt; ToolJet stores app definitions, encrypted data source credentials and user authentication data in a PostgreSQL database that you manage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Open Source Core and Air-Gapped Enterprise Deployments
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ToolJet/ToolJet" rel="noopener noreferrer"&gt;Open source community edition on GitHub&lt;/a&gt;:&lt;/strong&gt; the ToolJet repository is released under the GNU Affero General Public License v3.0 (AGPL), so your team can inspect the code and self-host the community edition.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://tooljet.com/feature/built-in-security" rel="noopener noreferrer"&gt;Air-gapped deployment&lt;/a&gt;:&lt;/strong&gt; run ToolJet in fully isolated environments without external network access, listed on the &lt;a href="https://www.tooljet.com/pricing" rel="noopener noreferrer"&gt;ToolJet Enterprise plan&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/setup/tooljet-ai/tj-ai-enterprise/" rel="noopener noreferrer"&gt;ToolJet AI Enterprise&lt;/a&gt;:&lt;/strong&gt; deploy the AI server image inside your own environment so AI requests are processed on your servers, which suits private-cloud and air-gapped setups.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Self-hosting keeps the Contract Obligations Review app, its data and its credentials inside the network and security boundary your team already governs, and a self-hosted community edition can be upgraded to the enterprise edition when you need enterprise features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise Features for Your Contract Obligations Review App
&lt;/h2&gt;

&lt;p&gt;A contract review app holds lease terms, counterparty details, and approval history. ToolJet covers that governance at the platform layer, so you configure it once instead of rebuilding it in every app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSO and SCIM:&lt;/strong&gt; sign in with &lt;a href="https://docs.tooljet.com/docs/user-management/sso/saml/setup/" rel="noopener noreferrer"&gt;SAML&lt;/a&gt;, OIDC or LDAP, and provision users automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role-based access control:&lt;/strong&gt; scope &lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/access-control/" rel="noopener noreferrer"&gt;permissions&lt;/a&gt; to the app, the data source, and each query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs:&lt;/strong&gt; track every login, edit, and approval decision for &lt;a href="https://docs.tooljet.com/docs/security/audit-logs/" rel="noopener noreferrer"&gt;compliance&lt;/a&gt; review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Air-gapped deployment:&lt;/strong&gt; self-host on &lt;a href="https://docs.tooljet.com/docs/setup/docker/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; or Kubernetes so your data stays in your network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiplayer editing:&lt;/strong&gt; several builders work on the same app, with versioning and &lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/overview/" rel="noopener noreferrer"&gt;Git sync&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ToolJet AI inside your own deployment:&lt;/strong&gt; run the AI features in your tenancy rather than a shared service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ToolJet Workflows adds the notification layer. One workflow fires when a contract is submitted to General Counsel, posts the review request in Slack, emails the business owner through Gmail, and writes the decision back to &lt;code&gt;clr_approval_log&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;This build shows a legal operations app that keeps the contract PDF, obligation list, comments, and approval trail in one record while the register and calendar handle the wider portfolio. That matters because the generated result is a real ToolJet application, so the team keeps editing the same app instead of taking ownership of a codebase. The useful trade-off is the handoff between visual editing and deeper code when a clause jump or version rule needs it. The runtime carries the data and workflow pieces where supported, and that keeps the app editable as contracts and review rules change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try ToolJet MCP
&lt;/h2&gt;

&lt;p&gt;Use your own contract data to build a contract obligations review app with ToolJet MCP, then request a &lt;a href="https://tooljet.com/schedule-demo" rel="noopener noreferrer"&gt;ToolJet demo&lt;/a&gt; to map your review process.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is ToolJet MCP for this app?
&lt;/h3&gt;

&lt;p&gt;ToolJet MCP is the build path that lets an agent create a ToolJet application from a written specification. For this app, the result keeps the PDF, obligations, comments, and approval history tied to the same contract record, so the review stays inside one workspace.&lt;/p&gt;

&lt;h3&gt;
  
  
  What makes this app useful for legal operations?
&lt;/h3&gt;

&lt;p&gt;The app keeps the PDF and the extracted obligations side by side, so a reviewer can move from clause text to a comment without changing context. The calendar and register add deadline tracking, owner filtering, and portfolio search in the same workspace.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I reproduce the app from the prompt in this article?
&lt;/h3&gt;

&lt;p&gt;Yes. The prompt in this article consolidates the full specification into one run, so you can recreate the app without rebuilding the requirements piece by piece. That gives you a single starting point you can reuse in your own build session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need to write code to change the app?
&lt;/h3&gt;

&lt;p&gt;Not for the common changes. You can edit the layout, tables, filters, and review flow visually, then drop into code when a clause jump or approval rule needs it. That keeps the quick edits in the interface and the deeper logic in the right place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I connect the app to existing contract data?
&lt;/h3&gt;

&lt;p&gt;This build uses ToolJet DB. The same shape can map to an existing source if the contract, document, obligation, comment, and approval records line up cleanly, so you can bring your own records without changing the app structure.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens after the agent finishes?
&lt;/h3&gt;

&lt;p&gt;You keep a real ToolJet application, not a code dump. The runtime keeps the data connections, workflow pieces, and role rules available where supported, so later changes update the app instead of restarting the build from scratch or rewriting the review flow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can several people work on the same app?
&lt;/h3&gt;

&lt;p&gt;Yes. One person can adjust the review screen while another tunes the calendar or register, and the shared app structure keeps the contract record and approval trail aligned. That lets different people work in the same app without splitting the record.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>automation</category>
    </item>
    <item>
      <title>Build Inventory and Pricing Command Centre with ToolJet MCP</title>
      <dc:creator>Athulya R</dc:creator>
      <pubDate>Fri, 25 Sep 2026 12:05:16 +0000</pubDate>
      <link>https://dev.to/tooljet/build-inventory-and-pricing-command-centre-with-tooljet-mcp-1p34</link>
      <guid>https://dev.to/tooljet/build-inventory-and-pricing-command-centre-with-tooljet-mcp-1p34</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Here is how to construct an inventory and pricing command centre with ToolJet MCP for the merchandising team that keeps channel prices, stock risk and approvals in one place. Step by step, discover how to build an inventory and pricing command centre with ToolJet MCP for the merchandising group while coordinating repricing, alerts and purchase requests. Below, you will explore how to build an inventory and pricing command centre with ToolJet MCP for the merchandising team that manages pricing changes, stock shortages and product history. An agent generates the app, and what comes out is a structured ToolJet application, with data, queries and interface kept together for the team to run. The article shows the screen, the tables and the control flow so you can reproduce the result from the prompt in this article.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fmerch-command-centre-catalogue-5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fmerch-command-centre-catalogue-5.png" title="Merch Command Centre built with ToolJet MCP: Catalogue: price, units this week and margin per channel, stock, cover versus lead time and the last price change" alt="Build an inventory and pricing command centre with ToolJet MCP, the finished application: Catalogue: price, units this week and margin per channel, stock, cover versus lead time and the last price change" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Catalogue: price, units this week and margin per channel, stock, cover versus lead time and the last price change&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fmerch-command-centre-catalogue-2-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fmerch-command-centre-catalogue-2-2.png" title="Merch Command Centre built with ToolJet MCP: Alerts: stock-outs ranked by revenue lost over the lead time, pending price approvals and below-margin listings" alt="Build an inventory and pricing command centre with ToolJet MCP, the finished application: Alerts: stock-outs ranked by revenue lost over the lead time, pending price approvals and below-margin listings" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Alerts: stock-outs ranked by revenue lost over the lead time, pending price approvals and below-margin listings&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fmerch-command-centre-catalogue-3-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fmerch-command-centre-catalogue-3-2.png" title="Merch Command Centre built with ToolJet MCP: Product: price history by channel, stock projection, channel prices and the price-change trail" alt="Build an inventory and pricing command centre with ToolJet MCP, the finished application: Product: price history by channel, stock projection, channel prices and the price-change trail" width="799" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Product: price history by channel, stock projection, channel prices and the price-change trail&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fmerch-command-centre-catalogue-4-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fmerch-command-centre-catalogue-4-2.png" title="Merch Command Centre built with ToolJet MCP: Draft purchase request: quantity worked out from sell-through, lead time, case pack and MOQ, with the supplier email ready to review" alt="Build an inventory and pricing command centre with ToolJet MCP, the finished application: Draft purchase request: quantity worked out from sell-through, lead time, case pack and MOQ, with the supplier email ready to review" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Draft purchase request: quantity worked out from sell-through, lead time, case pack and MOQ, with the supplier email ready to review&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What We're Building
&lt;/h2&gt;

&lt;p&gt;The Catalogue page uses one dense row per product, so you scan price, sell-through, margin and stock context without opening extra screens. Reprice opens a modal that shows the live band, floor price and weekly impact, then asks for a reason before the change lands. Alerts orders stock-out risk by revenue at risk over supplier lead time, then surfaces a Draft PR action that calculates quantity and drafts the supplier note. The hidden product view keeps the deeper trail for a single SKU, including the price-change log and linked requests. The layout stays compact, muted and built for repeated review.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dense product rows with channel pricing and stock context in one scan&lt;/li&gt;
&lt;li&gt;A repricing modal with live band, floor price, margin preview and required reason&lt;/li&gt;
&lt;li&gt;Ranked stock-out alerts that turn into drafted purchase requests&lt;/li&gt;
&lt;li&gt;A hidden product view for price trails, stock movement and linked requests&lt;/li&gt;
&lt;li&gt;Role-based access for merchandisers, category heads and finance&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Build an Inventory and Pricing Command Centre with ToolJet MCP for Merchandising Teams
&lt;/h2&gt;

&lt;p&gt;Want to build it yourself? Start with the &lt;a href="https://github.com/ToolJet/mcp-v2" rel="noopener noreferrer"&gt;ToolJet MCP repository&lt;/a&gt; for setup instructions, supported agents, and everything you need to follow along.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Consolidated Build Prompt
&lt;/h2&gt;

&lt;p&gt;The real build took several passes. The requirements are consolidated here into one prompt that could have been used from the start, so you can reproduce the app in a single shot.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Build a 3-page inventory and pricing command centre in ToolJet for the merchandising team of a consumer electronics brand selling through its own store, Amazon and two regional marketplaces. Use ToolJet DB tables prefixed mcc_: channels with fee percentages, categories with a minimum margin and a price band percentage, suppliers with lead time, MOQ and case pack, products with unit cost, stock on hand and reserved, channel prices with a stored band low and high, weekly sales per channel, weekly stock history, a price-change audit table, purchase requests and app roles. Seed about 20 realistic SKUs in USD.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Catalogue (home): one dense row per product with, for each channel, the price, units sold this week and margin after fees; stock on hand, reserved, available, cover versus supplier lead time, and the last price change. A Reprice row action opens a modal previewing the band, floor price, new margin and weekly margin impact, with a required one-line reason. Inside the band the price applies immediately; outside it is saved as pending for the category head. Every change writes old price, new price, who and why to the audit table.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Alerts: stock-out risks ranked by revenue lost over the lead time, not days of cover, each with a Draft PR action that works out the quantity (sell-through times lead time plus 28 days, minus available, rounded to whole cases, at least MOQ) and drafts the supplier email for a person to send. List listings below their category margin floor, and a pending-approval queue with margin impact where category heads approve or reject.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Product (hidden): price history by channel, stock history with a projection, channel prices, purchase requests and the price-change trail.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Roles: merchandisers change prices within the band, category heads approve out-of-band changes, finance sees everything and changes nothing. Enforce the band server-side, restrict every write query to the right groups and use a dense, muted Nordic design with native components.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How ToolJet MCP Builds the App
&lt;/h2&gt;

&lt;p&gt;The agent works through the whole application, not the screen: the data model, the queries, the component tree and the wiring between them all land as one structured ToolJet application. Enterprise app building does not end at the interface, data connectivity, workflows, permissions, deployment and ongoing change are the rest of the job, and the generated app sits on a runtime that carries those where supported instead of handing the team a codebase to operate themselves. The path stays open: AI generation, then visual editing, then code where a case needs it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The One Thing That Broke
&lt;/h2&gt;

&lt;p&gt;The first catalogue and alerts tables clipped on a laptop because the combined columns were wider than the canvas. Tightening the row density and simplifying the table layout fixed the fit, and the app rendered cleanly after that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Created
&lt;/h2&gt;

&lt;p&gt;The app ended up with ten tables in three groups. &lt;code&gt;mcc_products&lt;/code&gt;, &lt;code&gt;mcc_channel_prices&lt;/code&gt;, &lt;code&gt;mcc_categories&lt;/code&gt;, &lt;code&gt;mcc_channels&lt;/code&gt; and &lt;code&gt;mcc_suppliers&lt;/code&gt; hold the merchandising reference data, &lt;code&gt;mcc_sales_weekly&lt;/code&gt; and &lt;code&gt;mcc_stock_history&lt;/code&gt; capture demand and stock movement, and &lt;code&gt;mcc_price_changes&lt;/code&gt;, &lt;code&gt;mcc_purchase_requests&lt;/code&gt; and &lt;code&gt;mcc_app_roles&lt;/code&gt; track change history, requests and access.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Components&lt;/th&gt;
&lt;th&gt;What they cover&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Catalogue&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;dense product table and the reprice modal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alerts&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;stock-out ranking, approvals queue, low-margin list and the PR modal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;price and stock history, channel prices and the audit trail&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What Got Generated
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pages&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ToolJet DB tables&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queries&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Components&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code files to maintain&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repair cycles&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final validation&lt;/td&gt;
&lt;td&gt;0 errors&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Industries That Run This
&lt;/h2&gt;

&lt;p&gt;Consumer electronics and appliance brands, direct-to-consumer retailers selling on Amazon and regional marketplaces, fashion and footwear merchandising teams, home goods and personal care brands, and any omnichannel seller that prices the same catalogue differently per channel while buying stock from suppliers with long lead times.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Gets Access To The Built App
&lt;/h2&gt;

&lt;p&gt;As built, three workspace groups gate the writes. Merch - Merchandisers and Merch - Category Heads can change prices and draft purchase requests; only Merch - Category Heads can approve or reject out-of-band changes; Merch - Finance and everyone else can open every page but no write query runs for them. The price band is also enforced on the server by the write query itself. The groups were created empty, so people still have to be added to them, and the app's role table only drives what the interface enables.&lt;/p&gt;

&lt;h2&gt;
  
  
  Role-Based Access Control in ToolJet
&lt;/h2&gt;

&lt;p&gt;A Merch Command Centre app is only ready for a real team when every person can see and change exactly what their job needs, and nothing more. ToolJet handles this with role-based access control (RBAC) at two levels: platform-level permissions decide who can reach a workspace resource at all, and app-level permissions decide what each user can open, run and see inside one app. Both are enforced by the ToolJet server, not by hiding controls in the browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Ftooljet-rbac-permission-layers-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Ftooljet-rbac-permission-layers-2.png" title="Role-based access control in ToolJet" alt="Role-based access control in ToolJet: platform-level roles, custom groups and access rules, and app-level page, query and component permissions" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ToolJet role-based access control: platform-level and app-level permission layers&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  App-Level Permissions: Pages, Queries and Components
&lt;/h3&gt;

&lt;p&gt;Inside the app builder, ToolJet &lt;a href="https://docs.tooljet.com/docs/app-builder/dynamic-access-rule/overview/" rel="noopener noreferrer"&gt;dynamic access rules&lt;/a&gt; restrict individual parts of an app to chosen users or groups, so one app can serve several roles without a copy per team.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/app-builder/dynamic-access-rule/page-level/" rel="noopener noreferrer"&gt;Page permissions&lt;/a&gt;:&lt;/strong&gt; decide who can open a page, such as an approvals queue or an admin screen, while everyone else keeps the pages they need.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/app-builder/dynamic-access-rule/query-level/" rel="noopener noreferrer"&gt;Query permissions&lt;/a&gt;:&lt;/strong&gt; decide who can run a query. This is the layer that protects the data: a read-only user cannot trigger a write query even if they find the button.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/app-builder/dynamic-access-rule/component-level/" rel="noopener noreferrer"&gt;Component permissions&lt;/a&gt;:&lt;/strong&gt; decide who sees and uses a component such as a button, form or modal, so a viewer gets a clean screen instead of controls they cannot use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/app-builder/dynamic-access-rule/row-level-security/" rel="noopener noreferrer"&gt;Row-level security&lt;/a&gt;:&lt;/strong&gt; filters which records each user gets back from a query, so a manager sees their own region and not the whole table.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fmerch-command-centre-app-app-level-permissions-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fmerch-command-centre-app-app-level-permissions-2.png" title="Merch Command Centre app-level permissions" alt="Merch Command Centre app-level permissions in ToolJet: Query permissions in the builder: the five write queries are locked to the merchandiser and category head groups" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Query permissions in the builder: the five write queries are locked to the merchandiser and category head groups&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Platform-Level Permissions: Roles, Custom Groups and Access Rules
&lt;/h3&gt;

&lt;p&gt;At the workspace level, ToolJet decides who can reach an app, a data source or a workflow before any app-level rule applies.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/user-roles/" rel="noopener noreferrer"&gt;User roles&lt;/a&gt;:&lt;/strong&gt; every member has a base role, Admin, Builder or End user, which sets what they can do in the workspace.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/custom-groups/" rel="noopener noreferrer"&gt;Custom groups&lt;/a&gt;:&lt;/strong&gt; group people by team, such as finance or regional managers, and grant permissions once to the group instead of person by person.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/access-control/" rel="noopener noreferrer"&gt;Granular access rules&lt;/a&gt;:&lt;/strong&gt; for each group, choose which apps it can edit or only view, whether an app is hidden from the dashboard and which environments it can open, which data sources it can configure or build with, and which workflows, modules and folders it can reach.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workspace permissions:&lt;/strong&gt; group-level switches for creating and deleting apps, managing workspace constants, working with ToolJet Database and organising folders.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fmerch-command-centre-app-platform-level-permissions-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.tooljet.com%2Fwp-content%2Fuploads%2F2026%2F09%2Fmerch-command-centre-app-platform-level-permissions-2.png" title="Merch Command Centre platform-level permissions" alt="Merch Command Centre platform-level permissions in ToolJet: Custom groups in workspace settings, each with granular view access to the Merch Command Centre app" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Custom groups in workspace settings, each with granular view access to the Merch Command Centre app&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Together, the two layers let one Merch Command Centre app go live for the whole team: platform permissions decide who gets in, and app permissions decide what each role can do once inside. ToolJet MCP can apply these rules while it builds, so access control ships with the first version of the app instead of arriving as a retrofit. Dynamic access rules are part of the &lt;a href="https://docs.tooljet.com/docs/app-builder/dynamic-access-rule/overview/" rel="noopener noreferrer"&gt;ToolJet Enterprise plan&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise Features for Your Inventory and Pricing Command Centre
&lt;/h2&gt;

&lt;p&gt;A merchandising app handles product costs, price-change history, and supplier lead times. ToolJet covers that governance at the platform layer, so you configure it once instead of rebuilding it in every app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSO and SCIM:&lt;/strong&gt; sign in with &lt;a href="https://docs.tooljet.com/docs/user-management/sso/saml/setup/" rel="noopener noreferrer"&gt;SAML&lt;/a&gt;, OIDC or LDAP, and provision users automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role-based access control:&lt;/strong&gt; scope &lt;a href="https://docs.tooljet.com/docs/user-management/role-based-access/access-control/" rel="noopener noreferrer"&gt;permissions&lt;/a&gt; to the app, the data source, and each query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs:&lt;/strong&gt; track every login, edit, and approval decision for &lt;a href="https://docs.tooljet.com/docs/security/audit-logs/" rel="noopener noreferrer"&gt;compliance&lt;/a&gt; review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Air-gapped deployment:&lt;/strong&gt; self-host on &lt;a href="https://docs.tooljet.com/docs/setup/docker/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; or Kubernetes so your data stays in your network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiplayer editing:&lt;/strong&gt; several builders work on the same app, with versioning and &lt;a href="https://docs.tooljet.com/docs/development-lifecycle/gitsync/overview/" rel="noopener noreferrer"&gt;Git sync&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ToolJet AI inside your own deployment:&lt;/strong&gt; run the AI features in your tenancy rather than a shared service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ToolJet Workflows adds the notification layer. One workflow fires when a category head approves an out-of-band price change, posts a Slack message with the SKU and new price, emails the merchandiser through Gmail, and writes the decision back to &lt;code&gt;mcc_price_changes&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;This build shows that an agent can assemble a working merchandising application, not just a layout, by tying product rows, repricing, stock risk and purchase request drafts into one app. The structured ToolJet application matters because the output stays inside a runtime you continue to edit, instead of becoming a codebase you now have to own end to end. Visual edits cover most changes, code handles the sharper rules, and the data, workflow and access layers stay in step as the app changes over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try ToolJet MCP
&lt;/h2&gt;

&lt;p&gt;Build your own merchandising command centre with ToolJet MCP, then request a &lt;a href="https://tooljet.com/schedule-demo" rel="noopener noreferrer"&gt;ToolJet demo&lt;/a&gt; for your product and stock data.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What does the ToolJet agent build path do?
&lt;/h3&gt;

&lt;p&gt;It turns a written requirement into a working app inside ToolJet, with pages, queries, data tables and access rules connected as one system. In this build, that means merchandising data, repricing logic and stock alerts live together in one application.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does the catalogue page show in Merch Command Centre?
&lt;/h3&gt;

&lt;p&gt;The catalogue page gives you one row per product with channel pricing, units sold, margin and stock context in a single scan. From that row, you open repricing, see the live band and reason field, and write a change to the audit trail.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use my own merchandising data for this app?
&lt;/h3&gt;

&lt;p&gt;Yes. The app is shaped around product, channel price, sales, stock, supplier, request and role records, so your own data can fit if the same business fields exist. The prompt in this article gives the same structure the build expects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need to write code for this app?
&lt;/h3&gt;

&lt;p&gt;You do not need code for the core flow. The visual app covers the tables, screens and approvals, and you only drop into code when a calculation or rule needs a tighter expression.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens to the app after the agent finishes?
&lt;/h3&gt;

&lt;p&gt;The agent leaves you with a structured ToolJet application, not a screen mockup or a code drop. ToolJet keeps the app on its runtime, so the data, queries, workflows and access rules stay attached as the requirements change.&lt;/p&gt;

&lt;h3&gt;
  
  
  How is this different from starting with generated code?
&lt;/h3&gt;

&lt;p&gt;A generated codebase hands you files first and integration work later. This build starts with the app structure already in place, so the business rules, data tables and approvals are connected from the start.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can several people work on the same app at once?
&lt;/h3&gt;

&lt;p&gt;Yes. Role-based access lets merchandisers, category heads and finance users share the same application without sharing the same write paths. In this build, price edits and approvals follow different permissions, so each group sees the actions it owns.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
