<?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: Renato Marinho</title>
    <description>The latest articles on DEV Community by Renato Marinho (@renato_marinho).</description>
    <link>https://dev.to/renato_marinho</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%2F2813362%2Fd2e79a59-7332-4297-b05d-7252876f6e5d.png</url>
      <title>DEV Community: Renato Marinho</title>
      <link>https://dev.to/renato_marinho</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/renato_marinho"/>
    <language>en</language>
    <item>
      <title>Stop letting your AI guess: The case for deterministic Regex in MCP</title>
      <dc:creator>Renato Marinho</dc:creator>
      <pubDate>Thu, 06 Aug 2026 00:48:07 +0000</pubDate>
      <link>https://dev.to/renato_marinho/stop-letting-your-ai-guess-the-case-for-deterministic-regex-in-mcp-5m0</link>
      <guid>https://dev.to/renato_marinho/stop-letting-your-ai-guess-the-case-for-deterministic-regex-in-mcp-5m0</guid>
      <description>&lt;p&gt;If you've ever asked an LLM to extract a list of emails from a massive support ticket transcript, you've already lost the battle of accuracy.&lt;/p&gt;

&lt;p&gt;You might get lucky once. You might even get 90% of them right. But as any engineer who has shipped production code knows, that remaining 10% is where your system breaks. LLMs are probabilistic engines; they predict the next most likely token based on patterns learned during training. They don't actually 'see' the boundaries of a string with mathematical certainty. They might miss an email address because it was preceded by a weird non-standard character, or worse, they might hallucinate a perfectly formatted—but completely fake—phone number just because it fits the statistical pattern of what a phone number should look like.&lt;/p&gt;

&lt;p&gt;When you're building agentic workflows with MCP (Model Context Protocol), this isn't just an annoying bug. It's a fundamental reliability failure.&lt;/p&gt;

&lt;p&gt;I've been watching the evolution of AI tools since before pull requests were standard on GitHub, and I've seen many 'solutions' that are really just clever ways to mask technical debt. The Regex Toolkit MCP is different because it doesn't try to make the LLM smarter at parsing; it removes the need for the LLM to parse in the first place. It brings 40-year-old deterministic logic into the modern agentic stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Hallucination Gap
&lt;/h3&gt;

&lt;p&gt;The core problem is what I call the 'hallucination gap.' When an LLM summarizes a document, it's doing great work on semantic understanding. But when you ask it to perform extraction via pattern matching, you are asking it to act as a state machine without giving it the actual state machine logic. It's approximating.&lt;/p&gt;

&lt;p&gt;The Regex Toolkit MCP closes this gap by providing three specific tools that operate on hard rules:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;extract_pattern&lt;/strong&gt;: Instead of asking Claude to 'find all URLs,' you trigger a tool that runs a regex engine across the text block. The result isn't a probabilistic guess; it is an array of every unique match found by the pattern. If there are 50 URLs in a messy blob of text, this tool finds exactly 50. No more, no less.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;validate_pattern&lt;/strong&gt;: This is critical for upstream security and data integrity. Before you pass a string from an agent to your internal CRM or a database, you can use this tool to verify it matches the expected format of a URL or email. It prevents the injection of malanking strings that could lead to downstream failures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;mask_sensitive_data&lt;/strong&gt;: This is perhaps the most important tool for anyone working in regulated industries (GDPR, HIPAA, etc.). It allows you to redact PII—emails, phones, and URLs—by replacing them with &lt;code&gt;[RECDATACTED]&lt;/code&gt; tags.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Architecture of Privacy
&lt;/h3&gt;

&lt;p&gt;There's a common misconception that using an MCP server means sending all your data through a third-party proxy. If you're building production-grade agents, this is a dealbreaker. You cannot send unmasked PII to an LLM provider and call it 'secure.'&lt;/p&gt;

&lt;p&gt;What many people miss when they look at the documentation for the Regex Toolkit is how the &lt;code&gt;mask_sensitive_data&lt;/code&gt; tool actually executes. It doesn't send your text blob to a central server for processing. The execution happens entirely within a local V8 sandbox on your machine or within your infrastructure.&lt;/p&gt;

&lt;p&gt;The logic is simple: the agent identifies that sensitive data might be present, calls the tool, and the regex engine running in that isolated context redacts the strings &lt;em&gt;before&lt;/em&gt; any further context is sent to the LLM provider. It acts as a local firewall for your prompts. This architecture ensures that by the time Anthropic or OpenAI sees your prompt, the sensitive identifiers are already gone.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-World Utility: Beyond the Hype
&lt;/h3&gt;

&lt;p&gt;I don't care about 'magic' tools; I care about tools that solve specific, repeatable failures. Here is how this actually looks in a workflow:&lt;/p&gt;

&lt;p&gt;You have an agent processing incoming logs or customer communications.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 1&lt;/strong&gt;: The agent uses &lt;code&gt;extract_pattern&lt;/code&gt; to pull all contact details from the raw text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 2&lt;/strong&gt;: It uses &lt;code&gt;validate_pattern&lt;/code&gt; to ensure those extracted strings aren't malformed junk that would break your database schema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 3&lt;/strong&gt;: Before writing a summary of this interaction into a public-facing dashboard or an unsecure log, it runs &lt;code&gt;mask_sensitive_data&lt;/code&gt; to scrub the identifiers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You haven't just automated a task; you've implemented a deterministic validation and sanitation pipeline.&lt;/p&gt;

&lt;p&gt;If you want to implement this in your current setup—whether you're using Claude Desktop, Cursor, or a custom implementation via our MCPFusion framework—you can find the configuration here: &lt;a href="https://vinkius.com/mcp/regex-toolkit" rel="noopener noreferrer"&gt;https://vinkius.com/mcp/regex-toolkit&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;We are moving into an era where AI agents will have much more agency over our systems. As they get more access to our APIs, CRMs, and databases, the danger of probabilistic error increases exponentially. We can't rely on 'good enough' parsing when we're dealing with infrastructure.&lt;/p&gt;

&lt;p&gt;Stop asking your models to be better at regex. Give them a real regex engine instead.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MCPs are the music of AI Agents. We built the catalog. Discover &lt;a href="https://vinkius.com" rel="noopener noreferrer"&gt;Vinkius MCP Catalog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>regex</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why you can't trust LLMs with financial math (and how MCP fixes it)</title>
      <dc:creator>Renato Marinho</dc:creator>
      <pubDate>Wed, 05 Aug 2026 06:58:23 +0000</pubDate>
      <link>https://dev.to/renato_marinho/why-you-cant-trust-llms-with-financial-math-and-how-mcp-fixes-it-538g</link>
      <guid>https://dev.to/renato_marinho/why-you-cant-trust-llms-with-financial-math-and-how-mcp-fixes-it-538g</guid>
      <description>&lt;p&gt;LLMs are incredible at writing prose, debugging logic, and summarizing messy documentation. They are fundamentally garbage at calculating compound interest or amortizing a loan.&lt;/p&gt;

&lt;p&gt;If you have ever asked an agent to calculate a 360-month SAC amortization schedule, you've likely seen it present a perfectly formatted table that is mathematically impossible. The LLM isn't lying to you—it’s just doing what it was trained to do: predict the next most likely token. In a financial context, 'probable' tokens are often wrong.&lt;/p&gt;

&lt;p&gt;When we talk about building production-grade AI agents, the gap between probabilistic reasoning and deterministic execution is where business logic goes to die. You cannot build a fintech application or an automated accounting agent on vibes. You need exactitude.&lt;/p&gt;

&lt;p&gt;This is why I built the Finance Toolkit MCP server. It’s not about teaching the LLM how to do math; it's about giving the LLM access to a deterministic engine that literally cannot hallucinate the result.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Architecture of Certainty
&lt;/h3&gt;

&lt;p&gt;When an agent uses the Finance Toolkit, it isn't 'thinking' through the formula. It is delegating the execution to a V8 JavaScript engine. This moves the computation from the transformer's attention mechanism to the IEEE 754 standard floating-point arithmetic that we’ve relied on in software engineering for decades.&lt;/p&gt;

&lt;p&gt;By using an MCP (Model Context Protocol) server, we bridge this gap. The LLM identifies that a financial calculation is required, selects the appropriate tool—like &lt;code&gt;calculate_amortization&lt;/code&gt; or &lt;code&gt;calculate_compound_interest&lt;/code&gt;—and passes the parameters. The heavy lifting happens in an isolated execution context where variables like interest rates and periods are processed with absolute precision.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solving the Context Window Bloat Problem
&lt;/h3&gt;

&lt;p&gt;One thing you won't find in a standard documentation scrape is how we handle large datasets within a tool response.&lt;/p&gt;

&lt;p&gt;A common mistake when building tools for AI agents is returning too much data. If you ask an MCP server to return a full 360-month amortization table as a raw JSON array, you are committing two architectural sins: you're bloating the context window with redundant information, and you're driving up your API costs.&lt;/p&gt;

&lt;p&gt;An LLM doesn't need to see every single monthly installment of a 30-year mortgage to understand the financial impact. It needs the critical data points that drive decision-making.&lt;/p&gt;

&lt;p&gt;That’s why our &lt;code&gt;calculate_amortization&lt;/code&gt; tool implements what I call 'Smart Summaries.' Instead of dumping hundreds of lines of JSON into Claude or Cursor, the tool returns a condensed summary: the first installment, the last installment, and the total interest paid. It provides exactly enough signal to allow the agent to perform comparative analysis (like comparing SAC vs PRICE models) without the noise that leads to context distraction.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Toolset in Practice
&lt;/h3&gt;

&lt;p&gt;The toolkit is intentionally scoped. I didn't want a bloated 'everything-calculator.' I wanted specific, high-precision primitives:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Amortization (SAC &amp;amp; PRICE):&lt;/strong&gt; You can prompt an agent to compare two different loan structures. Because the tool handles both French (PRICE) and Constant Amortization (SAC) models, the agent can execute parallel calls and instantly generate a comparative report on total interest cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compound Interest:&lt;/strong&gt; Whether it's daily, monthly, or annual frequency, the &lt;code&gt;calculate_compound_interest&lt;/code&gt; tool ensures that exponential growth is calculated using exact precision rather than LLM approximations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ROI &amp;amp; Profitability:&lt;/strong&gt; The &lt;code&gt;calculate_roi&lt;/code&gt; tool allows agents to process marketing spend or investment performance with zero margin for error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple Interest:&lt;/strong&gt; For straightforward duration-based calculations where the complexity of compounding isn't required.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Security and Privacy by Design
&lt;/h3&gt;

&lt;p&gt;When you give an AI agent access to financial tools, there is a natural friction point regarding security. If you are calculating proprietary loan rates or sensitive investment projections, you don't want that data being processed in a way that leaves your infrastructure exposed.&lt;/p&gt;

&lt;p&gt;The Finance Toolkit runs within the V8 sandbox architecture provided by our framework. Every execution is isolated. More importantly, because this is an MCP server, the actual computation happens locally or within your controlled environment. The sensitive inputs—the principals, the rates, the terms—don't need to be part of a training set; they are just parameters in a tool call.&lt;/p&gt;

&lt;p&gt;If you're building agents that need to handle real-world financial modeling, stop trying to prompt-engineer your way out of math errors. Use a deterministic tool.&lt;/p&gt;

&lt;p&gt;You can find the toolkit here: &lt;a href="https://vinkius.com/mcp/finance-toolkit" rel="noopener noreferrer"&gt;https://vinkius.com/mcp/finance-toolkit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Precision isn't optional when money is involved.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MCPs are the music of AI Agents. We built the catalog. Discover &lt;a href="https://vinkius.com" rel="noopener noreferrer"&gt;Vinkius MCP Catalog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>programming</category>
      <category>finance</category>
    </item>
    <item>
      <title>Bridging the Skill Gap: Connecting Degreed to AI Agents via MCP</title>
      <dc:creator>Renato Marinho</dc:creator>
      <pubDate>Wed, 05 Aug 2026 00:50:06 +0000</pubDate>
      <link>https://dev.to/renato_marinho/bridging-the-skill-gap-connecting-degreed-to-ai-agents-via-mcp-3775</link>
      <guid>https://dev.to/renato_marinho/bridging-the-skill-gap-connecting-degreed-to-ai-agents-via-mcp-3775</guid>
      <description>&lt;p&gt;I've spent a significant portion of my career looking at dashboards that nobody uses.&lt;/p&gt;

&lt;p&gt;Whether it was old-school CRM reports in 2005 or modern Learning Experience Platforms (LXP) today, the problem is always the same: the data is there, but it's trapped behind a UI. You have all this metadata about what your engineers know, what courses they've completed, and where your talent gaps are, but finding that information requires manual clicking, filtering, and exporting to CSVs just to ask a simple question like "Who on my team is ready for a Node.js migration?"&lt;/p&gt;

&lt;p&gt;The Model Context Protocol (MCP) changes this by turning those static UI silos into an actionable toolset for AI agents. I recently spent some time digging into the Degreed MCP implementation on Vinkius, and it's a clear example of how we move from "chatting with a bot" to "orchestrating an intelligent workforce registry."&lt;/p&gt;

&lt;h3&gt;
  
  
  The Setup: Beyond Simple Search
&lt;/h3&gt;

&lt;p&gt;When people think about integrating an LXP like Degreed into an AI workflow, they usually only think about one thing: searching for content. And yes, the &lt;code&gt;search_learning_catalog&lt;/code&gt; tool is there to do exactly that. You can ask your agent to find 'Data Science with Python' courses, and it will return a ranked list of materials based on titles and skill tags.&lt;/p&gt;

&lt;p&gt;But if you only use an MCP for searching, you're missing 80% of the value. The real engineering utility lies in the correlation between content, users, and skills.&lt;/p&gt;

&lt;p&gt;An agent with access to this specific Degreed integration doesn't just act as a librarian; it acts as a talent analyst. Because the toolset includes &lt;code&gt;list_defined_skills&lt;/code&gt; and &lt;code&gt;get_user_profile&lt;/code&gt;, you can build complex reasoning loops.&lt;/p&gt;

&lt;p&gt;Imagine this workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Query:&lt;/strong&gt; "We are starting a new project in Go. Do we have enough internal expertise?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 1 (Discovery):&lt;/strong&gt; The agent calls &lt;code&gt;list_defined_skills&lt;/code&gt; to see how 'Go' or 'Golang' is represented in the company taxonomy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 2 (Mapping):&lt;/strong&gt; It then iterates through users via &lt;code&gt;get_user_profile&lt;/code&gt; or searches for specific skill ratings within the organization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 3 (Gap Analysis):&lt;/strong&gt; Once it identifies a lack of proficiency, it automatically calls &lt;code&gt;search_learning_catalog&lt;/code&gt; to suggest an immediate learning path for the team.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This isn't just automation; it's turning unstructured learning behavior into structured organizational intelligence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deconstructing the Toolset
&lt;/h3&gt;

&lt;p&gt;To understand how to build these agents, you have to look at what the tools actually expose. The Degreed MCP breaks down into three distinct layers:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. The Catalog Layer (&lt;code&gt;search_learning_catalog&lt;/code&gt;, &lt;code&gt;get_content_details&lt;/code&gt;, &lt;code&gt;list_learning_content&lt;/code&gt;)
&lt;/h4&gt;

&lt;p&gt;This is your entry point. It handles retrieval of metadata—titles, providers, and durations. If you're building an agent to assist L&amp;amp;D managers, this is where they will spend most of their time. The ability to resolve detailed descriptions through &lt;code&gt;get_content_details&lt;/code&gt; allows the LLM to actually understand the &lt;em&gt;substance&lt;/em&gt; of a course before recommending it.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. The Identity &amp;amp; Skill Layer (&lt;code&gt;list_degreed_users&lt;/code&gt;, &lt;code&gt;get_user_profile&lt;/code&gt;, &lt;code&gt;list_defined_skills&lt;/code&gt;)
&lt;/h4&gt;

&lt;p&gt;This is where the 'intelligence' happens. By exposing user metadata including professional titles and organizational affiliations, the agent can perform demographic-based skill analysis. You aren't just looking for a person who knows React; you are looking for a Senior Engineer in the London office who has reached 'Proficient' level via specific pathways.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. The Observability Layer (&lt;code&gt;list_active_learners&lt;/code&gt;, &lt;code&gt;list_user_completions&lt;/code&gt;, &lt;code&gt;list_learning_plans&lt;/code&gt;)
&lt;/h4&gt;

&lt;p&gt;This is arguably the most critical part for leadership. It allows an agent to monitor progress. You can ask, "Which team members have completed their security training this quarter?" via &lt;code&gt;list_user_completions&lt;/code&gt;. This turns competence tracking from a periodic manual audit into a real-time stream of data available via natural language.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Reality Check: Constraints and Security
&lt;/h3&gt;

&lt;p&gt;I’ve always been a proponent of being honest about what a tool &lt;em&gt;can't&lt;/em&gt; do. If you try to use this MCP to automate the administrative side of talent management, you're going to hit a wall.&lt;/p&gt;

&lt;p&gt;Currently, this integration is focused on discovery and monitoring. You cannot use the agent to assign new courses or modify user profiles; those actions still happen within the Degraw dashboard or mobile app. The agent is an observer and a researcher, not a writer of the system's state.&lt;/p&gt;

&lt;p&gt;From a security perspective, which I know is often where these integrations fall apart in production: this requires OAuth 2.0. You'll need your Degreed Client ID and Client Secret. When setting this up on Vinkius, the connection is handled through secure tokens, but you are still responsible for managing those credentials within your environment.&lt;/p&gt;

&lt;p&gt;If you want to see how this looks in a production-grade setup—specifically regarding how we handle the isolated V8 sandboxing and the governance policies that prevent things like SSRF when an agent is querying external APIs—you can check out the implementation here: &lt;a href="https://vinkius.com/mcp/degreed" rel="noopener noreferrer"&gt;https://vinkius.com/mcp/degreed&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this matters for the next generation of AI agents
&lt;/h3&gt;

&lt;p&gt;We are moving away from LLMs that just 'know things' to agents that 'do things' with our proprietary data. The bottleneck has never been the model's reasoning; it has always been the friction of connecting that reasoning to a reliable, authenticated source of truth.&lt;/p&gt;

&lt;p&gt;When you can bridge an agent directly to your company's learning taxonomy, you aren't just building a chatbot. You are building a layer of organizational memory that can respond to change in real-time.&lt;/p&gt;

&lt;p&gt;If you're working on L&amp;amp;D automation or talent intelligence, this is the starting point.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MCPs are the music of AI Agents. We built the catalog. Discover &lt;a href="https://vinkius.com" rel="noopener noreferrer"&gt;Vinkius MCP Catalog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>productivity</category>
      <category>automation</category>
    </item>
    <item>
      <title>Beyond Scraping: Operationalizing Aviation Intelligence with MCP</title>
      <dc:creator>Renato Marinho</dc:creator>
      <pubDate>Tue, 04 Aug 2026 03:05:18 +0000</pubDate>
      <link>https://dev.to/renato_marinho/beyond-scraping-operationalizing-aviation-intelligence-with-mcp-24ep</link>
      <guid>https://dev.to/renato_marinho/beyond-scraping-operationalizing-aviation-intelligence-with-mcp-24ep</guid>
      <description>&lt;p&gt;If you are trying to build an AI agent that actually understands aviation, stop looking at scrapers and start looking at toolsets.&lt;/p&gt;

&lt;p&gt;I have seen developers spend weeks trying to fine-tune models or write complex regex parsers just to extract meaningful data from NOTAMs (Notices to Air Missions) or Jeppesen aerodrome feeds. It is a waste of time. The problem isn't the LLM's ability to read; it is the lack of structured, real-time state within the context window. You cannot hallucinate an active runway closure in Frankfurt and expect your maintenance agent to be useful.&lt;/p&gt;

&lt;p&gt;The Boeing Developer Tools (BDT) MCP server changes this by providing a direct link between natural language reasoning and high-fidelity aviation datasets. It's not just about 'knowing' facts; it is about giving an agent the ability to query the actual state of global airspace, aircraft specifications, and supply chain availability.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem with Unstructured Aviation Data
&lt;/h3&gt;

&lt;p&gt;Aviation data is notoriously fragmented. You have physical metadata in Jeppesen files, real-time flight tracking in radar feeds, and critical safety alerts (NOTAMs) scattered across various government portals. When you use a standard LLM without an MCP interface, the model relies on its training data—which is effectively historical fiction by the time it reaches your prompt.&lt;/p&gt;

&lt;p&gt;An agent needs to be able to execute specific, deterministic queries. If I ask: "Check if there are any critical airspace restrictions at KJFK right now," a standard LLable response is useless if it's based on six-month-old training data. Through this MCP implementation, the agent calls &lt;code&gt;search_notams&lt;/code&gt; for the KJFK scope and retrieves active, live notices like &lt;strong&gt;TWY A BTN TWY A1 AND TWY A2 CLSD&lt;/strong&gt;. Now, the agent has &lt;em&gt;current&lt;/em&gt; operational awareness.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deconstructing the Toolset
&lt;/h3&gt;

&lt;p&gt;The BDT server is organized into three primary functional layers: Flight Intelligence, Infrastructure/Aerodromes, and Supply Chain Engineering.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Flight Intelligence &amp;amp; Real-time Monitoring
&lt;/h4&gt;

&lt;p&gt;This layer is about the 'now.' Tools like &lt;code&gt;get_flight_events&lt;/code&gt; and &lt;code&gt;get_runway_monitor&lt;/code&gt; allow an agent to transition from high-level planning to active monitoring. An engineer can ask an agent to track a specific flight's status or, more impressively, monitor runway congestion at a major hub using &lt;code&gt;get_runway_monitor&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you are building automation for ground operations, the ability to query &lt;code&gt;get_taxi_time&lt;/code&gt; for an ICAO code like EDDF (Frankfurt) provides the deterministic data needed to calculate delays. The agent isn't guessing; it is reading real-time taxiing metrics.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Aerodrome &amp;amp; Infrastructure Metadata
&lt;/h4&gt;

&lt;p&gt;This is where the integration with Jeppesen data becomes critical. Using &lt;code&gt;get_aerodrome_details&lt;/code&gt; and &lt;code&gt;search_runways&lt;/code&gt;, an agent can pull physical metadata, coordinates, and ground operation constraints for almost any airport worldwide.&lt;/p&gt;

&lt;p&gt;This is massive for logistics agents. If you are planning a flight path or cargo movement, your agent can autonomously verify runway dimensions and parameters via the &lt;code&gt;search_runways&lt;/code&gt; tool to ensure compatibility with specific aircraft types.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Aircraft Specs &amp;amp; Supply Chain Engineering
&lt;/h4&gt;

&lt;p&gt;This is perhaps the most powerful use case for maintenance and engineering workflows. The server provides &lt;code&gt;get_aircraft_specs&lt;/code&gt; for deep dives into Boeing model families (like the 787 Dreamliner) and, crucially, connects to the global supply chain via &lt;code&gt;search_boeing_parts&lt;/code&gt; and &lt;code&gt;check_part_availability&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Imagine an agent-driven maintenance workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The agent identifies a structural requirement for a specific Boeing model using &lt;code&gt;get_aircraft_specs&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;It then checks the global inventory to see if that part is in stock using &lt;code&gt;search_boeing_parts&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Finally, it verifies the price and availability via &lt;code&gt;check_part_availability&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You have just automated a multi-step procurement research task that used to take an engineer thirty minutes of manual searching.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Engineering Reality: Composition is Key
&lt;/h3&gt;

&lt;p&gt;The real value isn's in any single tool, but in the &lt;em&gt;composition&lt;/em&gt; of these tools. This is what separates a simple API wrapper from a true operational agent.&lt;/p&gt;

&lt;p&gt;A developer can build a reasoning chain that looks like this:&lt;br&gt;
"Analyze current runway congestion at LHR, check for any active NOTAMs affecting heavy aircraft, and if there are no restrictions, verify if the necessary replacement parts for our A350-equivalent Boeing model are available in the regional warehouse."&lt;/p&gt;

&lt;p&gt;To execute this, the agent must navigate through &lt;code&gt;get_runway_monitor&lt;/code&gt; $\rightarrow$ &lt;code&gt;search_notams&lt;/code&gt; $&lt;br&gt;
$\rightarrow$ &lt;code&gt;get_aircraft_specs&lt;/code&gt; $\cdot$ $\rightarrow$ &lt;code&gt;check_part_availability&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The MCP protocol handles the heavy lifting of tool discovery and execution, allowing you to focus on the logic of the chain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security and Production Grade Execution
&lt;/h3&gt;

&lt;p&gt;When you give an AI agent access to sensitive aviation data or supply chain inventories, you cannot treat security as a secondary concern. You can't just run arbitrary code in your local environment and hope for the best.&lt;/p&gt;

&lt;p&gt;This is why we built these servers on top of Vinkius using our MCPFusion framework. Every execution happens within an isolated V8 sandbox. We have implemented eight distinct governance policies, including DLP (Data Loss Prevention), SSRF prevention to stop agents from probing internal networks, and HMAC audit chains so every single tool call is traceable back to a specific session.&lt;/p&gt;

&lt;p&gt;When you are dealing with Boeing's global supply chain or critical flight intelligence, 'close enough' security is an invitation for disaster.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Implement This in Your Workflow
&lt;/h3&gt;

&lt;p&gt;Setting this up does not require building custom middleware or complex OAuth flows that break every time a provider updates their API. We have stripped the friction out of it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Subscribe to the Boeing Developer Tools server at &lt;a href="https://vinkius.com/mcp/boeing-developer-tools" rel="noopener noreferrer"&gt;https://vinkius.com/mcp/boeing-developer-tools&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Grab your connection token.&lt;/li&gt;
&lt;li&gt;Paste it into your MCP-compatible client (Claude, Cursor, etc.).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. You are now running production-grade aviation intelligence through your LLM.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;The era of 'chatbot as a wrapper' is ending. We are moving into the era of 'Agent as an Operator.' If you want to build something that actually interacts with the physical world—whether that is aircraft maintenance, flight logistics, or global supply chains—you need tools that provide real-time, structured state. This BDT server is one of those building blocks.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MCPs are the music of AI Agents. We built the catalog. Discover &lt;a href="https://vinkius.com" rel="noopener noreferrer"&gt;Vinkius MCP Catalog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>aviation</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Stop writing MCP tool descriptions like a human is reading them</title>
      <dc:creator>Renato Marinho</dc:creator>
      <pubDate>Mon, 03 Aug 2026 00:38:07 +0000</pubDate>
      <link>https://dev.to/renato_marinho/stop-writing-mcp-tool-descriptions-like-a-human-is-reading-them-1p2k</link>
      <guid>https://dev.to/renato_marinho/stop-writing-mcp-tool-descriptions-like-a-human-is-reading-them-1p2k</guid>
      <description>&lt;p&gt;I've spent the last few years watching developers build incredible MCP servers, only to watch them fall apart in production because of something fundamentally stupid: bad instructions.&lt;/p&gt;

&lt;p&gt;You build a sophisticated integration—maybe it connects to a legacy CRM or a complex billing API. You handle the auth, you manage the sandboxing via V8, you've got your TypeScript types perfectly mapped. Then, at the finish line, you write a tool description that sounds 'nice.' Something like: "This tool allows you to fetch user information from our database and will return the details as a string."&lt;/p&gt;

&lt;p&gt;And then, when you drop it into Claude Desktop or Cursor, the agent starts hallucinating. It tries to pass &lt;code&gt;user_id&lt;/code&gt; when you named the parameter &lt;code&gt;userId&lt;/code&gt;. It forgets that the output is a string because you didn't explicitly state the return type in an actionable way. It gets lost in the 'fluff.'&lt;/p&gt;

&lt;p&gt;The problem isn't your LLM. The problem is that you are writing for humans, but these tools are being consumed by agents. Agents don't need politeness; they need semantic density.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Semantic Density Problem
&lt;/h3&gt;

&lt;p&gt;When we talk about function calling in the MCP ecosystem, we aren't just talking about APIs. We are talking about a new kind of Instruction Set Architecture (ISA) where the 'instructions' are written in natural language but executed via high-precision logic.&lt;/p&gt;

&lt;p&gt;In this context, every extra word in your tool description is essentially noise that increases the probability of a parsing error or a reasoning failure. If an agent has to navigate through three sentences of 'context' before it hits an imperative verb, you are wasting its context window and increasing its cognitive load. This is where semantic density comes in.&lt;/p&gt;

&lt;p&gt;Semantic density is the ratio of actionable information to total text length. A high-density description uses imperative verbs and provides clear return types, minimizing linguistic noise that can distract an LLM during function calling.&lt;/p&gt;

&lt;p&gt;I recently started using a specific tool to audit my own server definitions: the &lt;a href="https://vinkius.com/mcp/tool-description-semantic-density-scorer" rel="noopener noreferrer"&gt;Tool Description Semantic Density Scorer&lt;/a&gt;. It doesn't just 'feel' like your descriptions are good; it actually measures their structural integrity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Analyzing Verb Density and Actionable Commands
&lt;/h3&gt;

&lt;p&gt;The first thing the scorer looks at is &lt;code&gt;calculate_verb_encensity&lt;/code&gt;. This sounds academic, but in practice, it's about identifying whether your tool description is actually an instruction or just a paragraph of prose.&lt;/p&gt;

&lt;p&gt;An effective MCP tool should be anchored by imperative, action-oriented verbs: &lt;code&gt;retrieve&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;fetch&lt;/code&gt;, &lt;code&gt;calculate&lt;/code&gt;. If I see descriptions that use passive voice or descriptive fluff like "is designed to help you...", the density ratio drops. A high-density string, like "Retrieve the record and then update it," has a much higher concentration of actionable commands relative to its length (roughly 0.28 in our tests). This tells the agent exactly what the operation entails without the need for secondary reasoning.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Silent Killer: Naming Uniformity
&lt;/h3&gt;

&lt;p&gt;There is another way MCP tool calls fail that is almost impossible to catch during a standard unit test: naming inconsistency across parameter lists.&lt;/p&gt;

&lt;p&gt;You might have one parameter as &lt;code&gt;user_id&lt;/code&gt; (snake_case) and another as &lt;code&gt;userAge&lt;/code&gt; (camelCase). To a human, it's trivial. To an LLM attempting to construct a valid JSON object for a function call, it’s a massive red flag that leads to downstream parsing failures in the integration layer.&lt;/p&gt;

&lt;p&gt;The Scorer uses &lt;code&gt;analyze_naming_uniformity&lt;/code&gt; to audit these parameter lists. It checks for casing consistency (e.g., &lt;code&gt;camelCase&lt;/code&gt; vs. &lt;code&gt;snake_case&lt;/code&gt;) and returns a uniformity score. If your tool definition has even one deviant parameter, it flags it. This is critical when you're building complex tools that rely on consistent patterns across multiple function calls.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Aggregator: Evaluating Total Clarity
&lt;/h3&gt;

&lt;p&gt;The real meat of this process is the &lt;code&gt;evaluate_description_clarity&lt;/code&gt; tool. It acts as a primary aggregator. It doesn't just look at verbs or names in isolation; it computes a weighted clarity score by integrating:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verb density (Is there enough action?).&lt;/li&gt;
&lt;li&gt;Naming uniformity (Is the syntax predictable?).&lt;/li&gt;
&lt;li&gt;Explicit return-type definitions (Does it say 'returns a string' or 'returns an object'?).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can literally run your text through this and get a definitive grade on how reliable that tool will be in an automated environment like Windsurf or Claude Desktop.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why This Matters for Production
&lt;/h3&gt;

&lt;p&gt;If you are just playing around with MCP in a local sandbox, maybe it doesn't matter. But if you are building production-grade tools—the kind we build at Vinkius that handle real business logic and sensitive data—you cannot afford ambiguity.&lt;/p&gt;

&lt;p&gt;When an agent has access to your tools, its ability to perform is directly bounded by the precision of your definitions. If your descriptions are 'fluffy,' you're essentially handing a broken manual to a highly skilled worker and wondering why they can't follow instructions.&lt;/p&gt;

&lt;p&gt;You should be linting your tool definitions with the same rigor that you lint your TypeScript code. Check for casing, check for verb density, and ensure return types are explicit. If you don't, you aren't building an agentic tool; you're just hoping for the best.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MCPs are the music of AI Agents. We built the catalog. Discover &lt;a href="https://vinkius.com" rel="noopener noreferrer"&gt;Vinkius MCP Catalog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>Stop Leaking Secrets into your LLM Context Windows</title>
      <dc:creator>Renato Marinho</dc:creator>
      <pubDate>Sun, 02 Aug 2026 11:21:21 +0000</pubDate>
      <link>https://dev.to/renato_marinho/stop-leaking-secrets-into-your-llm-context-windows-5dm5</link>
      <guid>https://dev.to/renato_marinho/stop-leaking-secrets-into-your-llm-context-windows-5dm5</guid>
      <description>&lt;p&gt;I've seen it happen more than once in production logs: an AI agent, given access to a database or a third-party API via MCP, returns a payload that includes not just the requested data, but also a session token, an AWS secret, or an obscure API key. It feels like a minor oversight until you realize that this high-entropy string is now sitting in your LLM provider's logs, potentially part of a training set, and visible to anyone with access to your chat history.&lt;/p&gt;

&lt;p&gt;The problem isn't just about the data itself; it's about how we handle tool outputs. When we build MCP servers, our instinct is to be helpful—we return everything necessary for the LLM to complete its task. But as soon as you give an agent 'read' access to a system, you are effectively opening a window into that system's sensitive metadata.&lt;/p&gt;

&lt;p&gt;You can try to solve this with regex. You could write patterns for SSNs, emails, or common API key formats like Stripe or AWS. This works for deterministic data, and tools like the PII Redaction Deterministic Scrubber handle that well enough. But secrets are fundamentally different. They don't follow a fixed schema. A developer might rotate an auth token to a format you didn't account for in your regex library yesterday.&lt;/p&gt;

&lt;p&gt;This is where we have to move from deterministic pattern matching to probabilistic detection. We need to look at the randomness of the string itself.&lt;/p&gt;

&lt;p&gt;I recently started working with the Tool Output Entropy Sanitizer, an MCP server specifically designed to catch these high-entropy segments before they ever hit the LLM context window. It doesn't care what the secret &lt;em&gt;looks&lt;/em&gt; like; it cares how much information density is packed into a specific segment of text.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Logic: Shannon Entropy as a Security Primitive
&lt;/h3&gt;

&lt;p&gt;The core engine here uses Shannon entropy calculation. If you aren't familiar, entropy in this context measures the unpredictability or randomness within a string. A standard English sentence has relatively low entropy because certain characters and patterns (like 'the', 'and', spaces) appear with predictable frequency. An API key or a base64-encoded secret is almost pure noise; its character distribution is highly uniform, driving the entropy score up.&lt;/p&gt;

&lt;p&gt;The server operates on a threshold of 4.5. When it scans text, it uses a sliding-window analysis to identify segments that exceed this limit. It's not just checking the whole string at once—that would be useless if you had a long, low-entropy email followed by one high-entropy key. By sliding a window across the input, it can pinpoint exactly where the randomness spikes.&lt;/p&gt;

&lt;p&gt;If you use the &lt;code&gt;sanitize_text_output&lt;/code&gt; tool, it returns the sanitized text and metadata about what was redacted. One detail that engineers usually appreciate is how it handles the redaction itself: instead of just deleting the characters—which destroys the structural context for the LLM—it replaces segments with a structured pattern like &lt;code&gt;[REDACTED_HIGH_ENTROPY:length]&lt;/code&gt;. This tells the agent, "Something was here, and it was this long," allowing the model to maintain its reasoning about the surrounding text without actually seeing the sensitive payload.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Implementation Constraints
&lt;/h3&gt;

&lt;p&gt;When you're building production-grade toolsets, you have to deal with edge cases. You can't just set an infinite window size. If your window is too small, you miss the pattern; if it's too large, you create massive latency and potentially include low-entropy noise that triggers false positives.&lt;/p&gt;

&lt;p&gt;The server enforces strict operational bounds: any proposed window size must be between 16 and 64 characters. You can use the &lt;code&gt;verify_window_bounds&lt;/code&gt; tool to audit your configurations before deployment. This isn't just about preventing errors; it's about ensuring predictable performance in an agentic loop where latency spikes can break the entire orchestration layer.&lt;/p&gt;

&lt;p&gt;If you need to audit a specific substring without modifying its contents—perhaps during a debugging session or for auditing purposes—the &lt;code&gt;evaluate_segment_entropy&lt;/code&gt; tool allows you to get the entropy score and high-entropy flag directly. This is useful when you're trying to fine-tune your threshold settings.&lt;/p&gt;

&lt;p&gt;You can find the full implementation of this server at: &lt;a href="https://vinkius.com/mcp/tool-output-entropy-sanitizer" rel="noopener noreferrer"&gt;https://vinkius.com/mcp/tool-output-entropy-sanitizer&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrating into a Secure Pipeline
&lt;/h3&gt;

&lt;p&gt;Security in MCP shouldn't be an afterthought or a single wall; it should be a series of checks. If I'm building an agentic workflow that touches sensitive CRM data, my pipeline looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic Scrubbing&lt;/strong&gt;: Use regex-based tools to strip known patterns (emails, IBANs).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entropy Sanitization&lt;/strong&gt;: Run the output through the Entropy Sanitizer to catch the 'unknown unknowns'—the high-density strings that escaped step one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Governance &amp;amp; Sandboxing&lt;/strong&gt;: Ensure the execution context itself is isolated. This is why at Vinkius, we run every MCP in isolated V8 sandboxes with specific policies like DLP and SSRF prevention built into the execution context.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal isn't to make the LLM "blind," but to make it "context-aware without being credential-exposed."&lt;/p&gt;

&lt;h3&gt;
  
  
  Why This Matters for the Future of Agents
&lt;/h3&gt;

&lt;p&gt;As we move toward more autonomous agents—agents that can trigger actions in Salesforce, GitHub, or WhatsApp Business—the surface area for accidental data leakage grows exponentially. We are moving away from simple 'chat' and into 'action.' Every tool call is a potential leak vector.&lt;/p&gt;

&lt;p&gt;If you're still relying on manual oversight or basic regex, you're leaving too much to chance. Implementing a layer of entropy-based detection allows your agents to be powerful without being liabilities. It turns the problem from "How do I prevent my agent from seeing secrets?" into "How do I mathematically define what a secret looks like?"&lt;/p&gt;

&lt;p&gt;It is a harder problem than regex, but it's the only way to scale security at the same rate we are scaling agent capability.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MCPs are the music of AI Agents. We built the catalog. Discover &lt;a href="https://vinkius.com" rel="noopener noreferrer"&gt;Vinkius MCP Catalog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>security</category>
      <category>ai</category>
      <category>devops</category>
    </item>
    <item>
      <title>Beyond Chatbots: Using ToolJet MCP to Turn AI Agents into Operations Engineers</title>
      <dc:creator>Renato Marinho</dc:creator>
      <pubDate>Sun, 02 Aug 2026 07:37:27 +0000</pubDate>
      <link>https://dev.to/renato_marinho/beyond-chatbots-using-tooljet-mcp-to-turn-ai-agents-into-operations-engineers-hb2</link>
      <guid>https://dev.to/renato_marinho/beyond-chatbots-using-tooljet-mcp-to-turn-ai-agents-into-operations-engineers-hb2</guid>
      <description>&lt;p&gt;I've spent enough time in production environments to know that most 'AI integrations' are actually just glorified copy-paste loops. You see a great piece of data in your dashboard, you manually export it as JSON, and then you paste it into Claude asking for a summary. It works for a demo, but it's fundamentally broken for real engineering work.&lt;/p&gt;

&lt;p&gt;The real shift—the one that actually changes how we run systems—isn't about better LLMs. It's about the Model Context Protocol (MCP). When an agent can actually reach into your stack, query your databases, and trigger a workflow without me acting as the human middleware, that's when things get interesting.&lt;/p&gt;

&lt;p&gt;I was recently looking at how we could bridge the gap between low-code environments like ToolJet and these emerging MCP-compatible clients (Cursor, Claude Desktop, etc.). If you use ToolJet, you already have your business logic in one place. The problem is that traditionally, that logic is trapped behind a UI designed for humans.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem with 'Read-Only' Agents
&lt;/h3&gt;

&lt;p&gt;You see this everywhere: an MCP server that only lets you read data. Sure, it's great if I want to ask, "How many pending orders do we have?" But as an engineer, my job isn't just monitoring; it's responding. If the agent finds a critical error in a ToolJet entry, and the only way to fix it is for me to manually navigate through three layers of ToolJet menus to click 'Retry,' then I haven't actually automated anything. I've just moved the bottleneck.&lt;/p&gt;

&lt;p&gt;When we built the ToolJet MCP server for Vinkius, we focused on the transition from discovery to execution. It isn't enough to &lt;code&gt;list_tables&lt;/code&gt;. You need the ability to act.&lt;/p&gt;

&lt;h3&gt;
  
  
  Breaking Down the Toolset
&lt;/h3&gt;

&lt;p&gt;If you look at what this specific implementation provides, there are four primitives that define the agent's capability.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. The Discovery Phase: &lt;code&gt;list_tables&lt;/code&gt; and &lt;code&gt;query_table&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;An LLM is useless if it doesn't know the schema. The &lt;code&gt;list_tables&lt;/code&gt; tool is the first thing an agent calls. It inspects your ToolJet Database workspace to build a mental map of what data actually exists.&lt;/p&gt;

&lt;p&gt;Once the structure is known, we move to &lt;code&gt;query_table&lt;/code&gt;. This isn't just a simple key-value lookup. Because it supports SQL SELECT statements, you can perform joins and complex filtering via natural language. If I tell Cursor, "Find all customers from Brazil who haven't placed an order in 30 days," the agent constructs the SQL, executes it against the ToolJet database, and gives me the result. No manual exports required.&lt;/p&gt;

&lt;h4&gt;
  
  
  /2. The Write Phase: &lt;code&gt;insert_row&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;This is where we move away from 'Chatbot' territory and into 'Agentic' territory. If an agent identifies a pattern—say, it sees a surge in failed login attempts in your logs—it shouldn't just report it. It should be able to log that event or create a support ticket directly by using &lt;code&gt;insert_row&lt;/code&gt;. This bridges the gap between observation and record-keeping.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. The Execution Phase: &lt;code&gt;trigger_workflow&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;This is, in my opinion, the most important tool in this set. ToolJet is powerful because of its workflow engine—the ability to chain webhooks, run scripts, and interact with third-party APIs (Slack, SendGrid, etc.).&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;trigger_workflow&lt;/code&gt; tool allows an AI agent to hit a webhook with a custom JSON payload. This turns the agent into an orchestrator. I can tell the agent: "We have a high-priority order in table X; trigger the fulfillment workflow for it." The agent doesn't need to know how the fulfillment works—it just knows that by calling this tool, it has initiated a complex business process.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Security Elephant in the Room
&lt;/h3&gt;

&lt;p&gt;You can't talk about giving AI agents SQL access without addressing security. If you give an LLM a &lt;code&gt;query_table&lt;/code&gt; tool, what stops it from trying to run something destructive?&lt;/p&gt;

&lt;p&gt;In a production-grade setup, you cannot rely on 'hope' as a strategy. This is exactly why I built Vinkius with isolated V8 sandboxes and strict governance policies. When running MCP servers that interact with sensitive databases like ToolJet, you need audit chains (HMAC) and the ability to kill an execution context immediately if it violates DLP (Data Loss Prevention) rules. \mcp-driven automation is a massive surface area increase for your infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to actually use it
&lt;/h3&gt;

&lt;p&gt;I've always been against high-friction setups. If you have to configure OAuth callbacks and manage complex environment variables, nobody is going to use it in their daily workflow.&lt;/p&gt;

&lt;p&gt;The setup I recommend (and what we've implemented for the ToolJet server) follows a three-step pattern:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Subscribe to the server via Vinkius.&lt;/li&gt;
&lt;li&gt;Grab your connection token.&lt;/li&gt;
&lt;li&gt;Paste it into your Claude or Cursor config.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. You shouldn't need a DevOps degree to connect your database to your IDE.&lt;/p&gt;

&lt;p&gt;You can find the canonical configuration and documentation for this specific server here: &lt;a href="https://vinkius.com/mcp/tooljet" rel="noopener noreferrer"&gt;https://vinkius.com/mcp/tooljet&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;We are moving toward a world where the 'UI' is increasingly becoming a secondary interface, used primarily for configuration and high-level oversight, while the primary 'interface' for handling routine operational tasks becomes the agentic toolset.&lt;/p&gt;

&lt;p&gt;If you are still manually querying your databases to answer simple questions or triggering workflows by clicking buttons in a dashboard, you're leaving efficiency on the table. The tools are here. The protocol is stable. It's time to stop talking about AI and start actually connecting it to your data.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MCPs are the music of AI Agents. We built the catalog. Discover &lt;a href="https://vinkius.com" rel="noopener noreferrer"&gt;Vinkius MCP Catalog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>tooljet</category>
      <category>automation</category>
      <category>ai</category>
    </item>
    <item>
      <title>The telemetry gap: Bringing Volvo's Connected API into the MCP ecosystem</title>
      <dc:creator>Renato Marinho</dc:creator>
      <pubDate>Sat, 01 Aug 2026 00:30:00 +0000</pubDate>
      <link>https://dev.to/renato_marinho/the-telemetry-gap-bringing-volvos-connected-api-into-the-mcp-ecosystem-4bla</link>
      <guid>https://dev.to/renato_marinho/the-telemetry-gap-bringing-volvos-connected-api-into-the-mcp-ecosystem-4bla</guid>
      <description>&lt;p&gt;I was looking at my agent's toolset yesterday and realized something unsettling. It wasn't just searching through my local repo or querying a Postgres instance to find an edge case. It was checking if the windows in my Volvo were closed.&lt;/p&gt;

&lt;p&gt;We talk a lot about LLMs writing code, but we don't talk enough about the moment where 'context' shifts from digital files to physical state. When you bridge the gap between an agent and hardware via the Model Context Protocol (MCP), you aren't just giving it new data; you are extending its agency into the physical world.&lt;/p&gt;

&lt;p&gt;The recent release of the Volvo Cars Connected MCP server is a perfect, albeit high-stakes, example of this shift. It isn't some novelty wrapper for checking your car's mileage. When you map tools like &lt;code&gt;get_battery_status&lt;/code&gt;, &lt;code&gt;get_doors_status&lt;/code&gt;, and &lt;code&gt;get_tires_status&lt;/code&gt; to an agentic workflow, you are fundamentally changing how we interact with IoT infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  The technical reality of the implementation
&lt;/h3&gt;

&lt;p&gt;You can find the specific server configuration here: &lt;a href="https://vinkimius.com/mcp/volvo-cars-connected" rel="noopener noreferrer"&gt;https://vinkimius.com/mcp/volvo-cars-connected&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking at the toolset, it's quite surgical. It doesn't try to be a 'car controller' in some vague sense. Instead, it exposes raw telemetry through clearly defined functions. If you are building an automated fleet monitoring system or just a personal assistant that actually understands your morning commute, the utility is there.&lt;/p&gt;

&lt;p&gt;For instance, the &lt;code&gt;get_battery_status&lt;/code&gt; and &lt;code&gt;get_fuel_status&lt;/code&gt; tools allow an agent to perform logic-based reasoning. An agent doesn't just see "78% battery"; it can cross-reference that with a weather API or your calendar to warn you: "You have a long trip scheduled for tomorrow, and your charge is too low for the predicted cold temperatures."&lt;/p&gt;

&lt;p&gt;Then there are the more granular status checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_doors_status&lt;/code&gt; &amp;amp; &lt;code&gt;get_windows_status&lt;/code&gt;: Real-time verification of vehicle security.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_tires_status&lt;/code&gt;: Monitoring pressure to prevent maintenance neglect.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_vehicle_statistics&lt;/code&gt;: Deep dives into trip meter data and usage patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The beauty here is that the agent handles the polling logic. You don't write a cron job and an alert system; you write a prompt, and the protocol manages the interface with the VCC API.&lt;/p&gt;

&lt;h3&gt;
  
  
  The friction: Auth, OAuth, and why developers quit
&lt;/h3&gt;

&lt;p&gt;Here is where most MCP implementations fail in production. If I want to use this server, I need my Volvo Access Token (via Volvo ID OAuth) and a VCC API Key.&lt;/p&gt;

&lt;p&gt;The moment a developer—or an end-user—is faced with "Configure your OAuth callback" or "Navigate to the developer portal to create an app," half of them are gone. I've seen this repeatedly while building GitScrum and later MCPFusion. The technical barrier isn't the code; it's the authentication dance.&lt;/p&gt;

&lt;p&gt;In a production-grade environment, you can't have agents blindly trying to refresh tokens that expired three weeks ago. This is why we built Vinkius the way we did. We focused on removing this friction by treating the connection as a subscription rather than an integration project. You grab a token, paste it into Claude or Cursor, and you are operational. The complexity of managing the underlying OAuth flow should be invisible to the person trying to automate their car's maintenance.&lt;/p&gt;

&lt;h3&gt;
  
  
  The security elephant in the room
&lt;/h3&gt;

&lt;p&gt;We need to address the "scary fast" aspect that I see popping up in recent Dev.to discussions. When you give an agent access to &lt;code&gt;get_doors_status&lt;/code&gt; or any tool that interacts with a vehicle's state, you are creating a new attack surface.&lt;/p&gt;

&lt;p&gt;If your MCP server has high-privilege access to hardware, what happens when the LLM hallucinates? What happens if a prompt injection trick convinces the agent that it needs to check all doors—and then somehow triggers an unlock command (if such a tool were exposed)?&lt;/p&gt;

&lt;p&gt;This is exactly why I built MCPFusion with strict governance. Every execution context in our V8 sandboxes runs under eight specific policies, including HMAC audit chains and kill switches. When you are dealing with physical assets like Volvo vehicles, security cannot be an afterthought or something you "fix in the next sprint." You need DLP (Data Loss Prevention) and SSRF prevention baked into the protocol layer itself. If you don't have a way to audit exactly what tool was called and why, you shouldn't be connecting agents to anything with a VIN.&lt;/p&gt;

&lt;h3&gt;
  
  
  The path forward
&lt;/h3&gt;

&lt;p&gt;The implications for fleet management are massive. Imagine an agent that monitors &lt;code&gt;get_odometer&lt;/code&gt; across fifty vehicles via the Geotab or Cartrack MCP servers (both available in our catalog) and automatically generates maintenance tickets in Jira when a threshold is met. That isn't science fiction; it's just structured telemetry being fed into a reasoning engine.&lt;/p&gt;

&lt;p&gt;The gap between "this API exists" and "I can actually use this reliably in my agentic workflow" is where the real engineering work is happening right now. Whether it's Volvo, Tesla, or GM, the goal is to make hardware as programmable as a function call.&lt;/p&gt;

&lt;p&gt;If you want to see how the tools are structured or test the connectivity yourself, check out the documentation here: &lt;a href="https://vinkius.com/mcp/volvo-cars-connected" rel="noopener noreferrer"&gt;https://vinkius.com/mcp/volvo-cars-connected&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MCPs are the music of AI Agents. We built the catalog. Discover &lt;a href="https://vinkius.com" rel="noopener noreferrer"&gt;Vinkius MCP Catalog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>iot</category>
      <category>automation</category>
    </item>
    <item>
      <title>Stop manually monitoring SERPs: Using MCP to turn your AI into an SEO architect</title>
      <dc:creator>Renato Marinho</dc:creator>
      <pubDate>Fri, 31 Jul 2026 11:09:43 +0000</pubDate>
      <link>https://dev.to/renato_marinho/stop-manually-monitoring-serps-using-mcp-to-turn-your-ai-into-an-seo-architect-5co9</link>
      <guid>https://dev.to/renato_marinho/stop-manually-monitoring-serps-using-mcp-to-turn-your-ai-into-an-seo-architect-5co9</guid>
      <description>&lt;p&gt;I've spent enough time staring at decaying CSV exports to know that the traditional SEO workflow is fundamentally broken. You export a keyword list, you run it through some spreadsheet logic, you check for drops, and by the time you've identified a problem, the damage to your organic visibility is already done. It's reactive, it's manual, and frankly, it's a waste of engineering—and marketing—brainpower.&lt;/p&gt;

&lt;p&gt;With the Model Context Protocol (MCP) emerging as the standard for connecting LLMs to real-world data, we are moving away from 'chatting with a bot' toward 'orchestrating an agent.' I recently started working with the Raven Tools MCP server on Vinkius, and it changed how I think about SEO monitoring. It isn't just about having access to your ranking data; it's about handing the keys of that data to an agent that can actually act on it.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Orchestration Gap
&lt;/h3&gt;

&lt;p&gt;Most people use AI as a writing tool or a code summarizer. But if you connect an MCP server like Raven Tools to Claude or Cursor, the LLM stops being a passive recipient of text and starts becoming an active participant in your SEO pipeline.&lt;/p&gt;

&lt;p&gt;When I look at the tools available through this specific implementation—things like &lt;code&gt;get_rank&lt;/code&gt;, &lt;code&gt;list_keywords&lt;/code&gt;, and &lt;code&gt;get_site_audit&lt;/code&gt;—I don't see individual API endpoints. I see building blocks for a self-correcting loop.&lt;/p&gt;

&lt;p&gt;A typical manual workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log into Raven Tools dashboard.&lt;/li&gt;
&lt;li&gt;Export keyword rankings.&lt;/li&gt;
&lt;li&gt;Manually check if any high-priority terms dropped.&lt;/li&gt;
&lt;li&gt;If they did, manually navigate to the site audit section and look for technical issues.&lt;/li&gt;
&lt;li&gt;Start fixing things based on what you found.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The MCP workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You ask your agent: "Check my keywords for any significant rank drops this week."&lt;/li&gt;
&lt;li&gt;The agent uses &lt;code&gt;list_keywords&lt;/code&gt; to pull the current state.&lt;/li&gt;
&lt;li&gt;The agent compares that against its own recent context or memory of previous checks.&lt;/li&gt;
&lt;li&gt;Upon identifying a drop, the agent proactively runs &lt;code&gt;get_site_audit&lt;/code&gt; on the affected domain.&lt;/li&gt;
&lt;li&gt;You receive a single, actionable summary: "Keyword X dropped 5 spots; I've checked the audit and found 10 technical issues, including 5 broken links."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You have skipped four manual steps and transitioned directly to resolution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Beyond Simple Queries: Building Workflows
&lt;/h3&gt;

&lt;p&gt;If you only skim the documentation for an MCP server, you might think it's just a way to ask questions about your data. That misses the point entirely. The real power lies in how tools like &lt;code&gt;add_competitor&lt;/code&gt; or &lt;code&gt;remove_keyword&lt;/code&gt; allow the agent to maintain the state of your SEO strategy.&lt;/p&gt;

&lt;p&gt;Consider a scenario where you are managing multiple client domains. You can use Cursor with this MCP server connected to manage your entire portfolio from your IDE. If you're working on a technical update for a project, you don't need to switch tabs. You stay in your development environment. You can ask the agent to &lt;code&gt;get_project&lt;/code&gt; info while you are literally refactoring the code that powers that site.&lt;/p&gt;

&lt;p&gt;The ability to programmatically query and monitor website audit results (&lt;code&gt;get_site_audit&lt;/code&gt;) allows for a level of continuous integration for SEO. Just as we use CI/CD to prevent broken code from hitting production, we can now use agentic workflows to prevent technical SEO regressions from hitting the SERPs.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Infrastructure Side: Security and Friction
&lt;/h3&gt;

&lt;p&gt;I've seen too many 'cool' MCP implementations die because they require a developer to spend three hours configuring OAuth callbacks or managing local environment variables. It’s a friction killer. If it takes more than three steps to get an agent talking to a tool, no one is going to use it in production.&lt;/p&gt;

&lt;p&gt;This is why we built Vinkius the way we did. Every server on our platform—including &lt;a href="https://vinkius.com/mcp/raven-tools" rel="noopener noreferrer"&gt;Raven Tools&lt;/a&gt;—is designed for immediate utility. You subscribe, grab a token, and paste it into your client (Claude, Cursor, etc.). That's it.&lt;/p&gt;

&lt;p&gt;But simplicity cannot come at the cost of security. When you give an AI agent access to marketing tools that hold your keyword portfolios and site health data, you are expanding your attack surface. Every execution context in our system runs within isolated V8 sandboxes. We implement eight distinct governance policies per execution—including SSRF prevention and HMAC audit chains. If an agent tries to use the &lt;code&gt;get_site_audit&lt;/code&gt; tool to scrape something it shouldn't, or if a malicious prompt attempts to exploit the connection, the kill switches are there. When you're granting 'agency' to a model, security isn't optional; it's the foundation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;The era of 'checking dashboards' is ending. The era of 'instructing agents' is here. Whether you are an SEO specialist looking for automation or a developer trying to integrate high-fidelity marketing data into custom internal tools, the bridge is now open via MCP.&lt;/p&gt;

&lt;p&gt;Stop treating your SEO data as a static archive and start treating it as an actionable context for your AI agents.&lt;/p&gt;

&lt;p&gt;You can find the full Raven Tools server implementation here: &lt;a href="https://vinkcius.com/mcp/raven-tools" rel="noopener noreferrer"&gt;https://vinkcius.com/mcp/raven-tools&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MCPs are the music of AI Agents. We built the catalog. Discover &lt;a href="https://vinkius.com" rel="noopener noreferrer"&gt;Vinkius MCP Catalog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>seo</category>
      <category>automation</category>
      <category>ai</category>
    </item>
    <item>
      <title>Stop Guessing If Your Agents Are Actually Learning From Their Mistakes</title>
      <dc:creator>Renato Marinho</dc:creator>
      <pubDate>Fri, 31 Jul 2026 03:20:01 +0000</pubDate>
      <link>https://dev.to/renato_marinho/stop-guessing-if-your-agents-are-actually-learning-from-their-mistakes-3g6m</link>
      <guid>https://dev.to/renato_marinho/stop-guessing-if-your-agents-are-actually-learning-from-their-mistakes-3g6m</guid>
      <description>&lt;p&gt;Watching an autonomous agent run through a loop of tasks is like watching a black box try to solve a puzzle in another room. You can see the final result, but the middle part—the reasoning, the failures, and that pivotal moment where it realizes its plan was garbage—is buried in thousands of lines of unstructured logs.&lt;/p&gt;

&lt;p&gt;If you've ever deployed an agentic workflow only to check back an hour later and find it has been stuck in a high-latency loop of 'I made a mistake... let me try again' for forty minutes, you know the pain. You didn't have failure; you had expensive, silent repetition.&lt;/p&gt;

&lt;p&gt;The problem with current LLM observability is that we focus too much on the input and output (the traces) and not enough on the internal state transitions of the agent itself. We need to quantify how often an agent is actually self-correcting versus just spinning its wheels.&lt;/p&gt;

&lt;p&gt;I recently started working with a specific tool designed for this exact visibility gap: the &lt;a href="https://vinkius.com/mcp/agent-self-reflection-scanner" rel="noopener noreferrer"&gt;Agent Self-Reflection &amp;amp; Sentiment Scanner&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Observability Gap in Agentic Loops
&lt;/h3&gt;

&lt;p&gt;When we talk about 'agents,' we're usually talking about a loop: Observe, Think, Act, Repeat. In a perfect world, the 'Think' step includes self-correction. If an action fails (e.g., a 403 error from an API), the agent should reflect on that failure and adjust its next move.&lt;/p&gt;

&lt;p&gt;But how do you measure if your agent is actually getting better during a session? How do you distinguish between an agent that is 'Proceeding' with confidence and one that is in a state of constant 'Correction'?&lt;/p&gt;

&lt;p&gt;You can't just look at the final success/fail status. You need to parse the execution logs for deterministic markers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Deterministic Matching Wins Over LLM-Based Analysis
&lt;/h3&gt;

&lt;p&gt;The temptation here would be to pipe your agent logs into another, even larger LLM and ask, 'Is this agent struggling?'&lt;/p&gt;

&lt;p&gt;Don't do that. It’s redundant, it’s slow, and if you're running high-volume loops, the cost will kill your margin. You've already paid for the primary reasoning engine; don't pay twice to audit its logs.&lt;/p&gt;

&lt;p&gt;The Agent Self-Reflection &amp;amp; Sentiment Scanner takes a more pragmatic, engineer-centric approach. It uses exact character-for-character comparison to identify predefined error recognition phrases and success markers within your execution logs.&lt;/p&gt;

&lt;p&gt;It looks for strings like 'I made a mistake' or 'Let me try again' (the error/correction indicators) and matches them against markers like 'The task is complete' (the success indicator). By doing this, it can calculate a self-correction frequency rate per execution loop. This gives you a hard metric: if your correction rate spikes above a certain threshold, your agent isn't 'thinking'; it's looping.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Toolset: Sentiment and Reflection
&lt;/h3&gt;

&lt;p&gt;The MCP server exposes two primary tools that allow you to turn raw text into actionable telemetry:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;analyze_sentiment&lt;/code&gt;&lt;/strong&gt;: This isn't just about whether the log is "happy" or "sad." In an agent context, it’s about detecting frustration or drift in the execution tone. If the sentiment of your logs starts trending towards negative during a complex task, you have a signal that your tool-calling logic might be failing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;detect_reflection&lt;/code&gt;&lt;/strong&gt;: This is where we look for internal thought processes. It identifies instances where the agent expresses internal thoughts or feelings—the "reasoning" part of the loop that often gets lost in standard API traces.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By combining these, you can determine if an agent's current state is 'Correcting' or 'Proceeding'. This allows you to build much more sophisticated monitoring dashboards. Imagine a Grafana board where one panel shows your Agent Success Rate and another shows the "Self-Correction Frequency" in real-time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementation Reality
&lt;/h3&gt;

&lt;p&gt;You can pass raw log text from any agent execution loop into these tools. It doesn't care if you are using LangChain, CrewAI, or a custom implementation you wrote last week. If there is a log, there is an opportunity for analysis.&lt;/p&gt;

&lt;p&gt;If you are building production-grade systems where agents have access to sensitive data—like Salesforce CRM or WhatsApp Business—you cannot afford to let them run unchecked in the dark. You need these kill switches and monitoring layers built into your infrastructure from day one.&lt;/p&gt;

&lt;p&gt;At Vinkius, we build all our MCP servers inside isolated V8 sandboxes with strict governance policies (DLP, SSRG prevention, etc.) because security can't be an afterthought when you give an agent write access to your ecosystem. This scanner is no different; it’s built for high-reliability environments where the goal isn't just 'making it work,' but making it observable and safe.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;If you are tired of looking at a wall of text in your terminal and wondering why an agent has been running for 15 minutes, start treating your logs as data. Use tools that allow you to quantify the cognitive load and error rate of your agents.&lt;/p&gt;

&lt;p&gt;The difference between a prototype and production-grade AI is observability.&lt;/p&gt;

&lt;p&gt;You can find the full implementation details and grab a connection token here: &lt;a href="https://vinkius.com/mcp/agent-self-reflection-sentiment-scanner" rel="noopener noreferrer"&gt;https://vinkius.com/mcp/agent-self-reflection-sentiment-scanner&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MCPs are the music of AI Agents. We built the catalog. Discover &lt;a href="https://vinkius.com" rel="noopener noreferrer"&gt;Vinkius MCP Catalog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>observability</category>
      <category>agents</category>
    </item>
    <item>
      <title>Stop letting your AI agents hallucinate test failures</title>
      <dc:creator>Renato Marinho</dc:creator>
      <pubDate>Thu, 30 Jul 2026 02:06:15 +0000</pubDate>
      <link>https://dev.to/renato_marinho/stop-letting-your-ai-agents-hallucinate-test-failures-22h8</link>
      <guid>https://dev.to/renato_marinho/stop-letting-your-ai-agents-hallucinate-test-failures-22h8</guid>
      <description>&lt;p&gt;I've seen enough CI pipelines die in an infinite loop of 'fix, retry, fail' to last a lifetime.&lt;/p&gt;

&lt;p&gt;You know the pattern. An agent-driven QA process runs a suite. A Vitest assertion fails. The LLM looks at the error log, reads the code, and makes an executive decision: 'The logic is flawed; let me refactor this function.' It pushes a change. The pipeline runs again. It fails again with the exact same error—or worse, a slightly different one that breaks something else.&lt;/p&gt;

&lt;p&gt;You''re not looking at a debugging problem anymore; you're looking at an agentic deadlock.&lt;/p&gt;

&lt;p&gt;The fundamental issue isn't that LLMs are 'stupid.' It's actually more subtle: they are too confident in their own unverified reasoning. When you tell an agent to 'check the logs,' it doesn't actually perform a step-by-step arithmetic trace of the logic. It performs a high-level semantic scan, matches patterns that look like common bugs, and then reports back with total certainty.&lt;/p&gt;

&lt;p&gt;If the test author wrote &lt;code&gt;expected: 108&lt;/code&gt; instead of &lt;code&gt;expected: 100&lt;/code&gt;, the agent won't tell you the test is wrong. It will 'fix' your business logic to match a broken assertion. This is how 'coverage theater' turns into actual production regressions.&lt;/p&gt;

&lt;p&gt;This is why I built &lt;a href="https://vinkius.com/mcp/qa-arbiter" rel="noopener noreferrer"&gt;QA Arbiter&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem: Assertion Confusion and the Loop of Death
&lt;/h3&gt;

&lt;p&gt;In a multi-agent pipeline—where one agent writes tests (QA) and another fixes code (Dev)—the cost of a single wrong diagnosis is massive. If the QA agent identifies an &lt;code&gt;ENGINE_DEFIT&lt;/code&gt; when it's actually a &lt;code&gt;TEST_ERROR&lt;/code&gt;, the Dev agent wastes cycles refactoring perfectly functional code. The developer loses trust in the automation, and suddenly your 'autonomous pipeline' becomes just another source of noise in Slack.&lt;/p&gt;

&lt;p&gt;I call this 'Assertion Confusion.' It’s common in cases like tax calculations or time-zone handling (the classic midnight crossover bug). An agent sees a failure, assumes there is a math error in the code, and implements a fix that actually changes the domain logic to satisfy an incorrect test expectation.&lt;/p&gt;

&lt;p&gt;Without a way to force the agent to prove its work, you are just automating chaos.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution: Decision Pivots
&lt;/h3&gt;

&lt;p&gt;QA Arbiter doesn't run your tests. It doesn't compute values. If it did, I would have just written a Python script and called it a day. Instead, QA Arbiter acts as a reasoning enforcer using the &lt;strong&gt;Decision Pivot&lt;/strong&gt; pattern.&lt;/p&gt;

&lt;p&gt;When an agent encounters a failure, it is required to call &lt;code&gt;diagnose_test_failure&lt;/code&gt;. This isn't an optional suggestion; the tool structure forces the agent into a deterministic workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Trace:&lt;/strong&gt; The agent must explicitly document every intermediate calculation and branch taken using the exact test inputs.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Compare (Received):&lt;/strong&gt; It compares what Vitest actually received against that trace.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Compare (Expected):&lt;/strong&gt; It compares what the test &lt;em&gt;asserts&lt;/em&gt; should happen against that same trace.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Commit:&lt;/strong&gt; The agent must populate two boolean pivots: &lt;code&gt;receivedMatchesTrace&lt;/code&gt; and &lt;code&gt;expectedMatchesTrace&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The magic is in the verdict logic. There are no 'maybe's.'&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If &lt;code&gt;Received == Trace&lt;/code&gt; AND &lt;code&gt;Expected != Trace&lt;/code&gt;, it is a &lt;strong&gt;TEST_ERROR&lt;/strong&gt;. The code is fine; your test is garbage. Fix the assertion, not the function.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;Received != Trace&lt;/code&gt; AND &lt;code&gt;Expected == Trace&lt;/code&gt;, it is an &lt;strong&gt;ENGINE_DEFECT&lt;/strong&gt;. The trace proves the code failed to meet the requirement. Submit a PR.&lt;/li&gt;
&lt;li&gt;If both are wrong? Well, you have a mess on your hands.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tool validates logical consistency. If an agent tries to claim there is an &lt;code&gt;ENGINE_DEFECT&lt;/code&gt; but its own trace shows that the received value matches the calculation, the tool rejects the call. It forces the agent to re-examine the gap in its reasoning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why This Matters for Production AI
&lt;/h3&gt;

&lt;p&gt;If you are building production-grade MCP integrations via Vinkius, you know that 'instruction following' is a suggestion, but 'tool execution' is an obligation.&lt;/p&gt;

&lt;p&gt;We built QA Arbiter to prevent the specific type of regression that happens when developers trust agentic summaries too much. By using structured diagnostics, we move away from the LLM saying "I think this is the bug" and toward the LLM saying "Here is the mathematical trace that proves the engine failed at step 3."&lt;/p&gt;

&lt;p&gt;This eliminates the 'flaky test' tolerance that plagues modern CI. Instead of ignoring a failure because it 'might be flaky,' the agent can actually diagnose if the environment is polluted or if there's a race condition by tracing state changes through the tool call.&lt;/p&gt;

&lt;p&gt;If you are tired of your agents pushing 'fixes' that only serve to satisfy broken tests, you need to stop giving them instructions and start giving them constraints.&lt;/p&gt;

&lt;p&gt;Check out the full implementation here: &lt;a href="https://vinkius.com/mcp/qa-arbiter" rel="noopener noreferrer"&gt;https://vinkius.com/mcp/qa-arbiter&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MCPs are the music of AI Agents. We built the catalog. Discover &lt;a href="https://vinkius.com" rel="noopener noreferrer"&gt;Vinkius MCP Catalog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>testing</category>
      <category>devops</category>
    </item>
    <item>
      <title>Stop writing glue code for telephony APIs</title>
      <dc:creator>Renato Marinho</dc:creator>
      <pubDate>Thu, 30 Jul 2026 00:16:07 +0000</pubDate>
      <link>https://dev.to/renato_marinho/stop-writing-glue-code-for-telephony-apis-30cl</link>
      <guid>https://dev.to/renato_marinho/stop-writing-glue-code-for-telephony-apis-30cl</guid>
      <description>&lt;p&gt;I've spent enough time in the trenches of software engineering to know that there is nothing more soul-crushing than writing 'glue code.' You know exactly what I mean—the thousands of lines of boilerplate, error handling, and webhook listeners required just to make two services talk to each other.&lt;/p&gt;

&lt;p&gt;When Bland AI first arrived on the scene, it was essentially another API you had to integrate. You'd write a Node script, handle the async nature of outbound calls, manage your credentials in environment variables, and then spend weeks building a dashboard just so you could see what happened during a call. It worked, but it wasn't intelligent.&lt;/p&gt;

&lt;p&gt;The shift we are seeing right now with the Model Context Protocol (MCP) changes the fundamental architecture of integration. We are moving from 'integration as an engineering task' to 'integration as a capability.' Instead of writing code to bridge Bland AI and your application, you provide an MCP server that gives your LLM—whether it's Claude or Cursor—direct access to those telephony tools.&lt;/p&gt;

&lt;p&gt;I recently started using the &lt;a href="https://vinkius.com/mcp/bland-ai-alternative" rel="noopener noreferrer"&gt;Bland AI MCP server&lt;/a&gt; via Vinkius, and the difference in how I can orchestrate workflows is night and day. This isn't about just 'making a call.' It's about giving an agentic loop control over a communication channel.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Architecture of Voice Orchestration
&lt;/h3&gt;

&lt;p&gt;When you look at traditional API integrations for something like Bland AI, you focus on the request/response cycle. You send a payload to trigger a call, and then you wait for a webhook to notify your backend that the call is finished.&lt;/p&gt;

&lt;p&gt;With this MCP server, the mental model shifts. You aren't managing webhooks; you are managing tools. The toolset provided here—including &lt;code&gt;send_phone_call&lt;/code&gt;, &lt;code&gt;create_voice_agent&lt;/code&gt;, and &lt;code&gt;list_recent_calls&lt;/code&gt;—allows an LLM to act as a telephony engineer.&lt;/p&gt;

&lt;p&gt;Here is what happens when you actually use it in Cursor or Claude:&lt;/p&gt;

&lt;p&gt;You don't just say "Make a call." You can instruct the agent, "Look at my recent calls from yesterday, find any where the transcript shows the customer was unhappy, and then initiate an outbound follow-up call to them using our 'Support Maya' persona."&lt;/p&gt;

&lt;p&gt;The LLM performs a sequence of discrete tool operations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It calls &lt;code&gt;list_recent_scalls&lt;/code&gt; to scan the history.&lt;/li&gt;
&lt;li&gt;It iterates through the results, calling &lt;code&gt;get_call_details&lt;/code&gt; for each specific ID to pull the transcript.&lt;/li&gt;
&lt;li&gt;It uses its own reasoning capabilities to parse that text for sentiment (no custom Python script needed).&lt;/li&gt;
&lt;li&gt;It calls &lt;code&gt;send_phone_call&lt;/code&gt; with a pre-configured agent configuration.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nobody who is just skimming the documentation sees the real power here. The magic isn't in the outbound call; it's in the closed-loop feedback system between &lt;code&gt;analyze_call_transcript&lt;/code&gt; and &lt;code&gt;create_voice_agent&lt;/code&gt;. You are effectively enabling the LLM to manage its own verbal personas based on historical performance data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Managing Persona State
&lt;/h3&gt;

&lt;p&gt;A common mistake when building AI agents is treating them as stateless entities. In telephony, this is a disaster. If your agent calls a customer using a generic voice and then forgets who it is during a follow-up, the illusion of human-like interaction breaks instantly.&lt;/p&gt;

&lt;p&gt;The Bland AI MCP server allows you to manage these personas programmatically via &lt;code&gt;create_voice_agent&lt;/code&gt; and &lt;code&gt;update_agent_config&lt;/code&gt;. You can treat your agent's personality as code. I’ve seen workflows where an LLM analyzes a particularly successful high-fidelity call, extracts the specific prompt instructions that led to the successful outcome, and then uses the MCP tool to update its own persistent voice agents in Bland AI.&lt;/p&gt;

&lt;p&gt;You are essentially version-controlling your brand voice through natural language.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Security Reality Check
&lt;/h3&gt;

&lt;p&gt;Now, I have to be the senior engineer here for a second. Giving an LLM access to a telephony API is fundamentally dangerous if you don't have proper guardrails. If you give an agent &lt;code&gt;send_phone_call&lt;/code&gt; capabilities without oversight, one hallucination could result in thousands of dollars in automated outbound calls to random numbers.&lt;/p&gt;

&lt;p&gt;This is why I built Vinkius the way it is. When we deploy these MCP servers, they don't just run with raw access to your API keys. Every execution context runs within an isolated V8 sandbox. We implement eight distinct governance policies—including SSRF prevention and HMAC audit chains. When you are giving an agent access to something as sensitive as a communication channel, security cannot be an afterthought or something you 'fix in the next sprint.' You need kill switches and hard boundaries on what those tools can do.&lt;/p&gt;

&lt;p&gt;If you're running these MCP servers locally for experimentation, that's fine. But if you are moving this into a production workflow—where your agent is interacting with real customers via Bland AI—you need to ensure the infrastructure can prevent an LLM from being tricked into 'looping' calls or accessing unauthorized phone numbers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Practical Implementation: The Workflow
&lt;/h3&gt;

&lt;p&gt;If you want to try this, the setup is intentionally boring. I hate friction. You subscribe, grab your connection token, and paste it into Claude or Cursor. That’s it.&lt;/p&gt;

&lt;p&gt;I've been testing a pattern recently where I use the &lt;code&gt;analyze_call_transcript&lt;/code&gt; tool alongside &lt;code&gt;list_available_voices&lt;/code&gt;. The workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Discovery&lt;/strong&gt;: Use &lt;code&gt;list_available_voices&lt;/code&gt; to see what new high-fidelity voices are available in the Bland AI ecosystem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persona Creation&lt;/strong&gt;: Use &lt;code&gt;create_voice_agent&lt;/code&gt; to instantiate a persona that matches the tone of your latest marketing campaign.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution&lt;/strong&gt;: Trigger outbound calls via &lt;code&gt;send_phone_call&lt;/code&gt; using those specific voice IDs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit&lt;/strong&gt;: Periodly run an agentic task that calls &lt;code&gt;list_recent_calls&lt;/code&gt;, fetches transcripts, and writes a summary report back to my local Markdown files.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It transforms the role of the developer from someone who 'builds integrations' to someone who 'designs capabilities.' You are no longer writing logic to handle API failures; you are designing the high-level instructions that allow an intelligent agent to navigate those APIs for you.&lt;/p&gt;

&lt;p&gt;If you're tired of the boilerplate and want to see what happens when you actually give your LLM a phone line, check out the server here: &lt;a href="https://vinkius.com/mcp/bland-ai-alternative" rel="noopener noreferrer"&gt;https://vinkius.com/mcp/bland-ai-alternative&lt;/a&gt;. It’s production-grade, sandboxed, and ready to use.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MCPs are the music of AI Agents. We built the catalog. Discover &lt;a href="https://vinkius.com" rel="noopener noreferrer"&gt;Vinkius MCP Catalog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>programming</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
