<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Devlog Archive]]></title><description><![CDATA[Devlog Archive]]></description><link>https://darshansahare.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 07 Nov 2026 10:34:18 GMT</lastBuildDate><atom:link href="https://darshansahare.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[NEXUS: Connecting Intelligence, Tools and Action]]></title><description><![CDATA[A look at how we built NEXUS, a personal productivity agent combining MCP, tool integrations and dual LLM architecture for reliable task execution]]></description><link>https://darshansahare.hashnode.dev/nexus-connecting-intelligence-tools-and-action</link><guid isPermaLink="true">https://darshansahare.hashnode.dev/nexus-connecting-intelligence-tools-and-action</guid><category><![CDATA[AI]]></category><category><![CDATA[Python]]></category><category><![CDATA[mcp]]></category><category><![CDATA[llm]]></category><category><![CDATA[Developer Tools]]></category><dc:creator><![CDATA[darshan]]></dc:creator><pubDate>Wed, 04 Nov 2026 06:20:06 GMT</pubDate><content:encoded><![CDATA[<h1>Introduction</h1>
<p>The idea behind NEXUS started with the curiosity. As a team, we wanted to explore the Model Context Protocol (MCP), a concept we had recently come across. Rather than limiting ourselves to reading about it or experimenting with random examples, we wanted to understand how it worked by building something around it. We needed a project that would give us a practical reason that everyone could use in their regular life.</p>
<p>That led us towards personal productivity.</p>
<p>We wanted to build somethinng that could do more than simply responding to questions. Most conversational AI experiences revolve around asking questions and getting answers. With NEXUS, our intention was to explore a different kind of interaction: a system that could understand what a user wants and carry out the appropriate task using connected tools. We also wanted it to retain useful information about the user, making interaction more useful over time.</p>
<p>The idea was to bring everyday productivity activities into one place. From managing to-do lists and reminders to using Whatsapp for timely notifications, we wanted NEXUS to be useful in situations student could actually relate to. For example, a student could recieve a reminder about their upcoming project deadline, along with relevant notes before scheduled time.</p>
<p>Building this experience also brought us to another engineering consideration that is, relibality. As, the system depends upon LLM to understand and process instructions, we explored a Dual-LLM architecture with primary model and a fallback model. It was intended to make NEXUS less dependent on single provider when a request fails.</p>
<p>Basically, NEXUS became a way for us to explore how AI models, tools connection and their workflow could work together to make everyday tasks easier.</p>
<h1>What NEXUS Actually Does</h1>
<p>So, at the end of the day, we wanted to build something genuinely useful. Something that could handle everyday tasks rather than just respond to questions.</p>
<p>We started by focusing on few things that people deal with regularly Managing tasks, keeping track of upcoming deadlines, remembering important things and staying updated without requiring to check multiple applications throughout the day.</p>
<h3>Managing Everyday Tasks</h3>
<p>One of the basic thing we wanted NEXUS to handle was tasks management. User could easily tell the assistant what they need to do, NEXUS couple help them manage those tasks through a connected To-Do system.</p>
<p>For example, instead of opening a separate application to add a task, a user could simply ask NEXUS to add an upcoming assignment or mark an existing task as completed or delete a task completely from list.</p>
<h3>Reminders and Notifications</h3>
<p>We also wanted NEXUS to help users keep track of things that they might forget.</p>
<p>Think of a student working on multiple assignments, preparing for exams and managing projects at the same time (side note: why does this feel so relatable?). It's easy to forget something important when everything is happening together.</p>
<p>We wanted NEXUS to make this a little easier by reminding users through timely WhatsApp notification.</p>
<h3>Interacting with External tools</h3>
<p>Another thing we wanted to explore was how an AI assistant could interact with tools outside its own environment.</p>
<p>For us, this was important part of our project because we didnt wanted NEXUS to be limited to generating just responses. We wanted it to be capable of interacting with external services and performing operations based on what the user requested.</p>
<p>This included working with files and directories, managing tasks and retrieving information through web search.</p>
<h3>Making Interactions More Contextual</h3>
<p>We also explored the idea of making interactions more meaningful overtime.</p>
<p>A useful assistant shouldnt necessarily treat every conversation as something completely new. Retaining useful information about users could help make future interactions more contextual and reduce the need to repeat the same details.</p>
<p>This was another part of what we wanted to explore while building NEXUS.</p>
<h3>Bringing Everything Together</h3>
<p>If we look at all features individually they seem simple, but bringing them together into one assistant was what made our project more interesting.</p>
<p>We werent trying to build another chatbot with long list of features. We wanted to understand how an AI model could work with different tools, coordinate their execution and turn users' requests into actions.</p>
<h1>Understanding the Architecture</h1>
<p>Now that we have covered what we wanted NEXUS to do, lets look at how we approached building it.</p>
<p>One of the things we realised early was that connecting an LLM to a few tools wouldnt be enough. We needed a way for different components to communicate with each other, handle requests and coordinate their operations.</p>
<p>To make that easier to understand, here's a high-level overview of different parts of NEXUS:</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae77d88d25d033184554553/ad76875a-6c3c-4de2-bcfa-1d4f4aeaacca.svg" alt="" width="442" height="1172" />

<p><em>This is a conceptual overview of the architecture, not a representation of the exact execution sequence for every request. The LLM provider act as a primary and fallback options, while the three MCP servers provide separate capabilities that NEXUS can use when required.</em></p>
<h3>NEXUS Architecture Overview</h3>
<p>Lets go through the main components one by one:</p>
<ol>
<li><strong>Application Layer</strong>:</li>
</ol>
<p>This is where interaction begins.</p>
<p>We used Streamlit to build the interface, providing a simple way for users to communicate with the assistant and submit their requests. Rather than requiring users to interact with individual tools or services directly, the interface brings these interactions into one place.</p>
<p>When a user submits a request, it moves into the NEXUS application, where the agent takes responsibility for coordinating the next steps.</p>
<ol start="2">
<li><strong>Agent and Orchestration Layer</strong>:</li>
</ol>
<p>At the centre of NEXUS is the agent responsible for coordinating the different components.</p>
<p>A user might ask NEXUS to create a task, search for something online or perform a file-related operation. This requests require different capabilities, so the application needs way to determine what should happen next.</p>
<p>So, agent and orchestration layer connects the language model's understanding of the request with the tools available through the MCP client.</p>
<p>Instead of implementing every operation directly inside the main application, we kept the responsibility separated. This makes overall system easier to organize and give individual component space to develop accordingly.</p>
<ol start="3">
<li><strong>Dual-LLM Architecture: Gemini and Groq</strong>:</li>
</ol>
<p>Another important part of the architecture is the use of two LLM providers.</p>
<p>We configured Google gemini as the primary model and Llama 3.3 70B hosted through Groq as the fallback model (side note: This is the part that I worked on).</p>
<p>The reason behind this was to add reliability. Depending entirely on a single provider can become a limitation when that provider fails in fetching.</p>
<p>The two models didnt process every request simultaneously. Gemini handles requests as the primary model, while Groq-hosted model serves as a fallback when required.</p>
<ol start="4">
<li><strong>MCP Client</strong>:</li>
</ol>
<p>The MCP client acts as the communication bridge between the NEXUS application and its MCP servers,</p>
<p>We chose to use the Model Context Protocol so that the application could communicate with different tools through a common interface.</p>
<p>In NEXUS, the MCP client connects with three specialized MCP servers, each responsible for different set of operations.</p>
<ol start="5">
<li><strong>MCP Servers</strong>:</li>
</ol>
<p>We separated the tool integrations into three MCP servers instead of combining everything into one. Each server focuses on a specific responsibility.</p>
<ul>
<li><strong>File System MCP Server</strong>: The File system MCP server handles operation through files and directories. It allows NEXUS to interact with files inside its designated workspace. This includes operations such as reading files, deleting files, writing files and managing related tasks.</li>
<li><strong>To-Do MCP Server</strong>: The To-Do MCP server is responsible for task management. We didnt wanted NEXUS to simply generate to-do lists. We wanted it to interact with actual task data. This server provides task-related capabilities such as creating tasks and marking them as completed and also deleting if required. We used SQLite to store and access task related information.</li>
<li><strong>Web Search MCP server</strong>: The Web Search MCP server provides NEXUS with access to web search capabilities. For this integration, we used DuckDuckGo to fetch relevant information from when a request is made for it.</li>
</ul>
<ol start="6">
<li><strong>Human-in-the-Loop</strong>:</li>
</ol>
<p>Giving full control to an assistant to perform operations? No! So, we added a extra layer through which users could review the actions made by the agent that includes modification of data.</p>
<p>We basically included a confirmation step before execution. This allows users to review the intended actions and decide whether to proceed. It may be a small part of architecture but it is important because automation should not take all the control away from the users.</p>
<h3>Brining the Architecture Together</h3>
<p>As we know that every component in NEXUS have their own responsibility.The Streamlit interface handles user interaction, the agent coordinates requests, the LLM layer provides reasoning and the MCP clients connects the application to its three specified servers.</p>
<p>Together, these components form <strong>NEXUS</strong>.</p>
<p>But, this bring us to another question: why did we use MCP to connect this tools? why not build custom integrations for all services?</p>
<p>To understand this, lets take a closer look at MCP and its role in NEXUS.</p>
<h1>Why Model Context Protocol (MCP)?</h1>
<p>While building NEXUS we wanted to explore how AI application could interact with external tools in a more structured way.</p>
<p>One way is by writting individual integration for every service and connect them directly to the main application. This works, but in future if we integrate more tools, managing them becomes a complicated task.</p>
<p>So, the other way is by using Model Context Protocol (MCP).</p>
<h3>What is MCP?</h3>
<p>The Model Context Protocol is a open protocol, which standardizes how application communicates with external tools and data sources (side note: Ask our team lead what MCP is and there's a good chance you will hear, "They are basically like lego blocks that you can attach to your application").</p>
<p>MCP follows a client-server architecture with three main concepts:</p>
<ul>
<li><strong>MCP Host</strong>: The application that provides the environment for interaction with AI models and MCP integrations.</li>
<li><strong>MCP Client</strong>: The component responsible for maintaining communication with an MCP Server.</li>
<li><strong>MCP Server</strong>: A service that provides capabilities such as tools or resources to the application.</li>
</ul>
<p>This components work together to make external capabilities accessible without requiring to build an integration directly into the main application.</p>
<h3>Why Did We Choose MCP for NEXUS?</h3>
<p>For us, the main reason was modularity.</p>
<p>NEXUS was intended to handle the different productivity related operations including file management, task management and web search. Building this integration directly into main application would be very difficult to manage.</p>
<p>MCP gave us a common way to connect these capabilities.</p>
<p>It also offered some practical advantages:</p>
<ul>
<li>New capabilities can be introduced through MCP servers without requiring to redesign the entire application.</li>
<li>The application can communicate with different servers using a common protocol.</li>
<li>Each MCP server handles a specific responsibility instead of placing all the loic inside the main application</li>
</ul>
<h3>How We Applied MCP in NEXUS?</h3>
<p>We didnt wanted to experiment with MCP through random examples, we wanted to understand how it would work in a real application.</p>
<p>We integrated three MCP servers into NEXUS:</p>
<ul>
<li>File System MCP Server for file and directory operations.</li>
<li>To-Do MCP Server for task management.</li>
<li>Web-Search MCP Server for fetching information through DuckDuckGo.</li>
</ul>
<p>Now each server provides different capabilities to the application which allowed us to keep integration modular while bringing their functions together through single application.</p>
<p>But connecting tools was one part we also needed to consider the intelligence behind the system, how it would interpret requests and what would happen if primary model becomes unavailable.</p>
<h1>Dual-LLM Architecture</h1>
<p>Since NEXUS relies on an LLM to interpret instructions and support its operations, we also had to consider what would happen if the model we depended on become unavailable.</p>
<p>We didnt wanted our application to to become unusable just because one model provider experienced an issue. This led us to explore a Dual-LLM architecture, where we could use a second model as a fallback when the primary model could not handle a request.</p>
<h3>Why Did We Need Two Models?</h3>
<p>When building an application around an external LLM API, the application becomes dependent on that provider's availability.</p>
<p>One failed API request and service might become unavailable or application might be unable to get a response.</p>
<p>We wanted to reduce this dependency on a single provider.</p>
<p>Instead of relying entirely on one model, we decided to integrate two different models which will increase the reliability and if one model fails, another model can take its place. Thats what we call fallback mechanism.</p>
<h3>Gemini as Our Primary Model</h3>
<p>For the primary LLM, we chose <strong>Google Gemini</strong>.</p>
<p>Gemini handled the main language model responsibilities with NEXUS. It was responsible for understanding user requests and supporting interaction of application with tools.</p>
<p>We used it as a default model because it formed the primary intelligence of our application.</p>
<h3>Groq-hosted Llama 3.3 70B as Our Fallback Model</h3>
<p>For the fallback, we integrated Llama 3.3 70B through Groq.</p>
<p>This gave us an alternative model that could be used, when our primary model failed.</p>
<p>One important thing is that we didnt wanted both models to work simultaneously. We wanted it to work in a primary-and-fallback arrangement. Keeping this arrangement in backend meant that we could continue the overall application workflow without making user manually choose between different models.</p>
<h3>How Does the Fallback Mechanism Work?</h3>
<p>The idea behind the implementation was to keep the model selection and fallback handling within the LLM layer itself.</p>
<p>Under normal conditions, NEXUS sends the request to Gemini. If the primary model fails, the fallback mechanism can use the Groq-hosted Llama 3.3 70B model instead.</p>
<p>The important part is that the fallback model is not another step that runs after every Gemini responses. It is an alternative used when the primary route cannot provide a successful response.</p>
<h1>Challenges &amp; Engineering Decisions</h1>
<p>Building NEXUS was not just about connecting an LLM to a few tools and making everything work together. As we started bringing different components into one application, we had to think about how would they interact and how to keep the system manageable.</p>
<p>Some decisions were straightforward but some required us to think a little differently about how we wanted to approach the project.</p>
<h3>Managing Multiple Components</h3>
<p>One of the thing we had to consider was how to organize the different components without making NEXUS unnecessarily complicated.</p>
<p>NEXUS involved an interface, agent, multiple LLM providers and MCP servers. Each component had its own responsibility and putting all the logic in one place would have made NEXUS harder to maintain.</p>
<h3>Keeping Tool Operations Under User Control</h3>
<p>Giving an AI assistant access to external tools also introduced another consideration, how much control should it have?</p>
<p>An AI assisatnt that can modify files or change tasks needs to be handled carefully.</p>
<p>We addressed this through Human-in-the-loop confirmation for sensitive changes. This allowed users to review an action before its execution.</p>
<h1>What We Learned</h1>
<p>Looking back at NEXUS, the most interesting part of building it was not simply getting an LLM to respond to user queries. It was understanding how different components could work together and turn this request into executable actions.</p>
<p>When we started exploring MCP, we werent entirely sure how we would fit this in a practical application. Building NEXUS gave us an opportunity to move beyond theory and work on real application with external tools.</p>
<p>Onw thing that stood out to us was keeping the system modular. Separating different responsibilities made it easier to understand how each component contributed to the application.</p>
<p>And ofcourse, working with two LLMs provider gave us a better understanding of why reliability needs to be considered with functionality.</p>
<h1>What's Next</h1>
<p>NEXUS is still an opportunity for us to learn and explore.</p>
<p>There are several directions in which we would like to take the project further. This includes expanding tool integration, refining overall user experience and making its execution more reliable.</p>
<p>We would also like to explore various way of making NEXUS useful in everyday productivity scenarios.</p>
<h1>Final Thought</h1>
<p>For us, NEXUS was more than an AI assistant. It was a practical way through which we explored MCP, experimented with Dual-LLM architecture and understand how LLM can work with external tools.</p>
<p>We started with curiosity about MCPs and that curiosity eventually turned into something we could build, test and learn from as a team.</p>
<p>And honestly, thats how one of the best projects are made. You start with idea, run into problems, make a few questionable decisions and gradually understand things that once seemed unfamiliar.</p>
<p>Thats what building NEXUS was for us.</p>
<p>So, thats it. See you in the next one.</p>
<p>Peace out :)</p>
<p>- darshan</p>
]]></content:encoded></item></channel></rss>