<?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: karleeov</title>
    <description>The latest articles on DEV Community by karleeov (@karleeov).</description>
    <link>https://dev.to/karleeov</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%2F1222%2Fc60e5b1d-1ac6-47b9-947c-c76ecdbb7c74.png</url>
      <title>DEV Community: karleeov</title>
      <link>https://dev.to/karleeov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/karleeov"/>
    <language>en</language>
    <item>
      <title>5 New Dev Tools You Should Learn This Week</title>
      <dc:creator>karleeov</dc:creator>
      <pubDate>Sun, 02 Aug 2026 23:07:02 +0000</pubDate>
      <link>https://dev.to/karleeov/5-new-dev-tools-you-should-learn-this-week-12in</link>
      <guid>https://dev.to/karleeov/5-new-dev-tools-you-should-learn-this-week-12in</guid>
      <description>&lt;p&gt;Just released this past week, five major developer tools are making waves in the tech community. From advanced AI models to updated frameworks and CLI tools, there's plenty to explore. Here's what you need to know about each one and how to get started.&lt;/p&gt;

&lt;h3&gt;
  
  
  GPT-5 (OpenAI)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: OpenAI's latest advanced language model with significantly improved capabilities for understanding and generating human-like text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: Just released on July 29, 2026, representing a major leap in AI capabilities since previous versions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: How to integrate GPT-5 into your applications using the OpenAI API, including code examples for different use cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Intermediate&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Copilot X (Microsoft)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Enhanced version of GitHub's AI pair programmer with new features for improved code assistance and workflow integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: Released on July 31, 2026, with significant updates that developers need to understand to maximize productivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: Step-by-step guide to setting up and using all the new features in GitHub Copilot X.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Beginner&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAI Python SDK 2.0 (OpenAI)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Updated Python SDK for interacting with OpenAI's API, including breaking changes and new features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: Released on July 29, 2026, alongside GPT-5, requiring developers to update their integration code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: Migration guide from version 1.x to 2.0 of the SDK, highlighting key changes and new capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Intermediate&lt;/p&gt;

&lt;h3&gt;
  
  
  Next.js 15 (Vercel)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Latest major release of the React framework with performance improvements and new developer features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: Released on July 30, 2026, bringing significant updates that affect how developers build applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: How to upgrade your Next.js application to version 15 and leverage the new features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Intermediate&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS CLI v3 (AWS)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Major update to Amazon's command-line interface for managing AWS services with improved performance and new commands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: Released on July 27, 2026, introducing significant changes that developers working with AWS need to know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: Comprehensive guide to installing, configuring, and using AWS CLI v3 for common tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Beginner&lt;/p&gt;

&lt;h2&gt;
  
  
  Building in public: my lead-gen engine
&lt;/h2&gt;

&lt;p&gt;My automated lead-gen pipeline continues to identify and enrich potential leads for development services. This week, the pipeline processed 610 discovered leads, enriched 388 of them, and successfully contacted 430. Recent regional events highlight the importance of digital resilience for businesses facing physical disruptions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Floods in China impacting supply chains and physical operations&lt;/li&gt;
&lt;li&gt;Earthquake in Japan emphasizing the need for tested disaster recovery plans&lt;/li&gt;
&lt;li&gt;Earthquake in China also highlighting disaster preparedness&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Picks of the week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI Code Review&lt;/strong&gt;: A new open-source tool that uses GPT-5 to analyze code quality and suggest improvements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Carbon Footprint Tracker&lt;/strong&gt;: VS Code extension that measures and reports the environmental impact of your code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebAssembly Microservices&lt;/strong&gt;: New framework for deploying lightweight services in the browser&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which of these new tools are you most excited to try? Have you already experimented with any of them? Share your experiences in the comments below!&lt;/p&gt;

</description>
      <category>aitools</category>
      <category>webdev</category>
      <category>aws</category>
      <category>developertools</category>
    </item>
    <item>
      <title>Top Dev Tools: August 2026 Edition</title>
      <dc:creator>karleeov</dc:creator>
      <pubDate>Sat, 01 Aug 2026 23:05:14 +0000</pubDate>
      <link>https://dev.to/karleeov/top-dev-tools-august-2026-edition-4jip</link>
      <guid>https://dev.to/karleeov/top-dev-tools-august-2026-edition-4jip</guid>
      <description>&lt;h3&gt;
  
  
  LangChain 0.3
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: A framework for building applications powered by language models with improved agent capabilities and multimodal support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: Major update with enhanced agent capabilities and better integration with various LLM providers released on July 30, 2026.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: How to build a multimodal AI agent that can process both text and images using LangChain 0.3's new features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Intermediate&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAI GPT-5 Turbo
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: An optimized version of GPT-5 with improved performance, reduced latency, and enhanced reasoning capabilities supporting 200K tokens of context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: Released by OpenAI on July 28, 2026, representing the latest advancement in their flagship model series.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: How to leverage the extended 200K context window to build sophisticated applications that can process and reason over large documents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Intermediate&lt;/p&gt;

&lt;h3&gt;
  
  
  PyTorch 3.0 "Phoenix"
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: A significant update to the popular deep learning framework with improved distributed training capabilities and better memory management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: Major update released on July 31, 2026, addressing key limitations in previous versions for large-scale ML projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: How to implement efficient distributed training across multiple GPUs using PyTorch 3.0's new features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Intermediate&lt;/p&gt;

&lt;h3&gt;
  
  
  Ollama 0.4
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: A tool for running large language models locally with improved model management, GPU acceleration, and new API endpoints.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: Major update released on July 29, 2026, as the trend toward local AI deployment grows for privacy and offline capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: How to set up and run large language models locally with GPU acceleration using Ollama 0.4.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Beginner&lt;/p&gt;

&lt;h3&gt;
  
  
  Hugging Face Transformers 5.0
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: A major update to the popular library with support for more model architectures, improved performance, and better memory efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: Released on July 27, 2026, this update addresses performance limitations and expands the range of accessible models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: How to use the new memory-efficient features and expanded model support in Hugging Face Transformers 5.0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Beginner&lt;/p&gt;

&lt;h2&gt;
  
  
  Building in public: my lead-gen engine
&lt;/h2&gt;

&lt;p&gt;My automated pipeline continues to identify and engage potential leads for development services. The engine has now discovered 610 leads, enriched 388, and contacted 430 prospects. Recent regional events highlight the importance of digital resilience for businesses, with floods in China and earthquakes in Japan and China underscoring the need for robust disaster recovery and digital backup solutions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pipeline totals: discovered-leads: 610, enriched: 388, contacted: 430&lt;/li&gt;
&lt;li&gt;Recent events emphasize the need for digital resilience in business operations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Picks of the week
&lt;/h2&gt;

&lt;p&gt;This week's standout picks are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LangChain 0.3 for its multimodal capabilities&lt;/li&gt;
&lt;li&gt;Ollama 0.4 for enabling local LLM deployment&lt;/li&gt;
&lt;li&gt;PyTorch 3.0's improved distributed training features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What developer tools or tutorials have caught your attention recently? Are you experimenting with any of these new releases?&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>ai</category>
      <category>machinelearning</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Top 5 Dev Tools Released in Late July 2026</title>
      <dc:creator>karleeov</dc:creator>
      <pubDate>Fri, 31 Jul 2026 23:04:24 +0000</pubDate>
      <link>https://dev.to/karleeov/top-5-dev-tools-released-in-late-july-2026-4j79</link>
      <guid>https://dev.to/karleeov/top-5-dev-tools-released-in-late-july-2026-4j79</guid>
      <description>&lt;h3&gt;
  
  
  LangChain 0.3.0
&lt;/h3&gt;

&lt;p&gt;LangChain 0.3.0 is a popular AI framework that enables developers to build applications with large language models through enhanced agent capabilities, improved memory management, and new vector store integrations. It was released on July 26, 2026, making this a major update that developers will want to integrate into their AI applications. The tutorial angle focuses on how to upgrade existing LangChain applications to 0.3.0 and leverage the new agent capabilities and memory management features. This is an intermediate-level topic suitable for developers already familiar with LangChain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Transformers 5.0
&lt;/h3&gt;

&lt;p&gt;Transformers 5.0 is Hugging Face's updated library for transformer models with new optimization techniques and quantization support. Released on July 29, 2026, this update brings performance improvements that developers can't afford to miss when working with transformer models. The tutorial angle covers how to implement the new optimization techniques and quantization support in Transformers 5.0 to improve model performance. This is an intermediate-level topic requiring some prior knowledge of transformer models.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude 4 Ultra
&lt;/h3&gt;

&lt;p&gt;Claude 4 Ultra is Anthropic's latest large language model with improved reasoning capabilities and longer context windows. Released on July 30, 2026, this model represents a significant advancement in AI capabilities that developers will want to explore. The tutorial angle explains how to integrate Claude 4 Ultra into applications and leverage its improved reasoning capabilities and longer context windows. This is a beginner-friendly topic suitable for developers new to Claude's offerings.&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS AI SDK 3.0
&lt;/h3&gt;

&lt;p&gt;AWS AI SDK 3.0 is Amazon's updated SDK for AI services with enhanced model management, new deployment options, and improved monitoring capabilities. Released on July 31, 2026, this update provides developers with powerful new tools for managing and deploying AI models on AWS. The tutorial angle covers how to use the new model management, deployment options, and monitoring features in AWS AI SDK 3.0. This is an intermediate-level topic requiring familiarity with AWS services.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker-AI 1.2
&lt;/h3&gt;

&lt;p&gt;Docker-AI 1.2 is an enhanced Docker CLI with AI-powered container optimization suggestions and automated resource allocation. Released on July 26, 2026, this update brings AI-powered optimization to Docker, making container management more efficient. The tutorial angle explains how to use Docker-AI 1.2's AI-powered optimization features to improve container performance and resource allocation. This is a beginner-friendly topic suitable for developers working with containers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building in public: my lead-gen engine
&lt;/h2&gt;

&lt;p&gt;My automated lead-generation pipeline continues to identify opportunities in the Hong Kong SME market. This week, the pipeline discovered 610 leads, enriched 388 of them, and successfully contacted 430. Recent regional events highlight the importance of digital resilience: floods in China have disrupted supply chains and physical operations, emphasizing the need for digital backups. Earthquakes in both Japan and China serve as reminders that disaster recovery plans need regular testing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pipeline performance: 610 discovered, 388 enriched, 430 contacted&lt;/li&gt;
&lt;li&gt;Recent news hooks focus on disaster recovery and digital resilience&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Picks of the week
&lt;/h2&gt;

&lt;p&gt;This week's top picks for developers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;LangChain 0.3.0 for enhanced AI application development&lt;/li&gt;
&lt;li&gt;Claude 4 Ultra for improved reasoning capabilities&lt;/li&gt;
&lt;li&gt;Docker-AI 1.2 for container optimization&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What new developer tools or frameworks are you excited to explore this month? Have you tried any of the releases mentioned in this post? Let me know in the comments below!&lt;/p&gt;

</description>
      <category>aitools</category>
      <category>devupdates</category>
      <category>langchain</category>
      <category>transformers</category>
    </item>
    <item>
      <title>雲吞麵 Midnight Wonton Noodle — Pure CSS Art</title>
      <dc:creator>karleeov</dc:creator>
      <pubDate>Fri, 31 Jul 2026 21:36:59 +0000</pubDate>
      <link>https://dev.to/karleeov/yun-tun-mian-midnight-wonton-noodle-pure-css-art-85c</link>
      <guid>https://dev.to/karleeov/yun-tun-mian-midnight-wonton-noodle-pure-css-art-85c</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/devteam/join-our-latest-frontend-challenge-comfort-food-edition-28a0"&gt;Frontend Challenge: Comfort Food Edition&lt;/a&gt;, CSS Art: Comfort Food.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;What I Built&lt;br&gt;
A pure CSS art scene of the ultimate Hong Kong comfort food: a steaming bowl of wonton noodle soup (雲吞麵) at a late-night dai pai dong.&lt;br&gt;
Nothing says "home" to me like a midnight bowl of wonton noodles under a glowing paper lantern — so I recreated that feeling entirely in CSS: no images, no SVG, just divs, gradients, border-radius tricks, and keyframe animations.&lt;br&gt;
The scene includes:&lt;br&gt;
🥣 A classic HK porcelain bowl with the iconic blue rim stripe pattern (repeating-linear-gradient)&lt;br&gt;
🍜 Golden broth with a noodle nest built from repeating-radial-gradient concentric arcs&lt;br&gt;
🥟 Four pleated wontons, half-submerged at the broth line&lt;br&gt;
🥢 Wooden chopsticks resting across the rim (tapered with clip-path)&lt;br&gt;
♨️ Soft, organic steam wisps — blurred gradient blobs on staggered transform/opacity loops&lt;br&gt;
🏮 A swaying red paper lantern casting a warm light cone&lt;br&gt;
🌙 Moon, twinkling stars, bokeh lights, a flickering pink neon 雲吞麵 sign, chili oil saucer, and a cup of tea&lt;br&gt;
Demo&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://zsp67x2nfnudg.kimi.page" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;zsp67x2nfnudg.kimi.page&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
👆 Live full-screen demo — watch the steam rise, the lantern sway, and the neon sign flicker. View page source to see the full CSS — every technique is commented!&lt;br&gt;
Journey&lt;br&gt;
Design goal: I wanted the warmth of the lantern light to contrast against the cool indigo night, with a subtle purple dusk at the horizon — the exact feeling of sitting at a Hong Kong street stall at 1am.&lt;br&gt;
Techniques I'm proud of:&lt;br&gt;
The steam was the hardest part. Thin wisps disappeared against the sky, so I layered blurred radial-gradient blobs (13% wide, filter: blur) with keyframes that hold a long visible opacity plateau (0 → .7 → .65 → .38 → 0). Four wisps run on two different periods (6s / 7.2s) with delays locked 25% of a cycle apart, so at least one wisp is always near peak — the bowl never stops steaming.&lt;br&gt;
The bowl is a single div with border-radius: 0 0 50% 50% / 0 0 100% 100% for the porcelain body; the broth ellipse's own border doubles as the near rim, which lets the wontons straddle the rim line and read as half-submerged.&lt;br&gt;
The wonton pleats are a repeating-linear-gradient texture on a crimped-knot pseudo-element.&lt;br&gt;
Everything scales in vmin/% inside a 100vmin square stage, so the scene stays intact in any embed pane or phone screen.&lt;br&gt;
Accessibility: the scene is wrapped in role="img" with a descriptive aria-label, and prefers-reduced-motion disables all animation while keeping a static steam hint.&lt;br&gt;
What I learned: restraint with JavaScript (8 lines, only to randomize star twinkle timing) forced me to push CSS timing functions and negative animation delays much further than I expected. CSS art is basically time-travel debugging. 😄&lt;br&gt;
Thanks for looking — feedback welcome! 🍜

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
    </item>
    <item>
      <title>Top 5 Developer Tools &amp; Tutorials - July 2026</title>
      <dc:creator>karleeov</dc:creator>
      <pubDate>Fri, 31 Jul 2026 01:36:23 +0000</pubDate>
      <link>https://dev.to/karleeov/top-5-developer-tools-tutorials-july-2026-2kfn</link>
      <guid>https://dev.to/karleeov/top-5-developer-tools-tutorials-july-2026-2kfn</guid>
      <description>&lt;h3&gt;
  
  
  LangChain 0.3
&lt;/h3&gt;

&lt;p&gt;LangChain 0.3 is a framework for building applications with LLMs that provides tools for composition, reasoning, and memory management. The major update brings significant improvements to agent frameworks and LLM integration that developers need to understand. For a tutorial angle, you can learn how to build a sophisticated LLM-powered agent with enhanced memory capabilities using the new agent framework. This is an intermediate difficulty topic.&lt;/p&gt;

&lt;h3&gt;
  
  
  PyTorch 3.0
&lt;/h3&gt;

&lt;p&gt;PyTorch 3.0 is an open-source machine learning library that provides flexibility and ease of use for developing deep learning models. The major release includes improved distributed training capabilities and new experimental features for large model training. A tutorial angle would be learning how to leverage the new distributed training capabilities to train large models more efficiently. This is an intermediate difficulty topic.&lt;/p&gt;

&lt;h3&gt;
  
  
  TensorFlow.js 5.0
&lt;/h3&gt;

&lt;p&gt;TensorFlow.js 5.0 is a JavaScript library for training and deploying machine learning models in the browser and Node.js environments. The major update features improved browser performance and enhanced WebGPU integration for better ML experiences on the web. A tutorial angle would be learning how to build a real-time image recognition web application using the new WebGPU capabilities. This is a beginner difficulty topic.&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS CDK v3
&lt;/h3&gt;

&lt;p&gt;AWS CDK v3 is a software development framework to define cloud infrastructure in code and provision it through AWS CloudFormation. The new major version includes improved constructs and multi-language support for more flexible cloud development. A tutorial angle would be learning how to create a serverless API with multi-language support using the new AWS CDK v3 features. This is a beginner difficulty topic.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Copilot Chat Enterprise
&lt;/h3&gt;

&lt;p&gt;GitHub Copilot Chat Enterprise is an AI pair programmer that helps developers write code faster and with less effort through intelligent code suggestions and chat functionality. The enhanced version includes additional security features and improved code suggestions for enterprise environments. A tutorial angle would be learning how to use GitHub Copilot Chat to accelerate development while maintaining security best practices. This is a beginner difficulty topic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building in public: my lead-gen engine
&lt;/h2&gt;

&lt;p&gt;My lead-gen pipeline is currently tracking 610 discovered leads, with 388 enriched and 430 contacted. Recent regional events highlight the importance of business continuity planning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recent typhoon and flood events in Asia emphasize the need for robust disaster recovery systems&lt;/li&gt;
&lt;li&gt;Earthquake frequency in Japan reminds us that regular testing of recovery plans is essential&lt;/li&gt;
&lt;li&gt;Supply chain disruptions show why digital backups are crucial for business operations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Picks of the Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;PyTorch 3.0's distributed training improvements could revolutionize how we train large models&lt;/li&gt;
&lt;li&gt;TensorFlow.js 5.0's WebGPU integration brings ML capabilities to the browser like never before&lt;/li&gt;
&lt;li&gt;LangChain 0.3's memory system finally makes practical multi-turn AI conversations possible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What developer tool or tutorial from this list are you most excited to try? Have you worked with any of these technologies already? Share your experiences in the comments!&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>tutorials</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>5 Emerging Developer Tools Transforming AI and Cloud Workflows</title>
      <dc:creator>karleeov</dc:creator>
      <pubDate>Thu, 30 Jul 2026 03:06:00 +0000</pubDate>
      <link>https://dev.to/karleeov/5-emerging-developer-tools-transforming-ai-and-cloud-workflows-5g8d</link>
      <guid>https://dev.to/karleeov/5-emerging-developer-tools-transforming-ai-and-cloud-workflows-5g8d</guid>
      <description>&lt;h3&gt;
  
  
  NovaCode AI Assistant
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: NovaCode is an AI-powered coding assistant that understands context across multiple files and projects. Unlike traditional autocomplete tools, it analyzes relationships throughout your entire codebase to provide more relevant suggestions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: Released as open-source by a team of ex-Google engineers to compete with proprietary AI coding tools, making advanced AI assistance accessible without vendor lock-in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: Learn how to set up NovaCode, integrate it with VS Code, and use its advanced context-aware features for complex refactoring tasks that maintain code integrity across your project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Intermediate&lt;/p&gt;

&lt;h3&gt;
  
  
  EthicalGuard SDK
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: A developer toolkit for detecting and mitigating bias in AI models before deployment. EthicalGuard provides automated analysis to identify potential fairness issues in your machine learning models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: As AI regulations increase globally, this SDK helps developers comply with new ethical AI standards and avoid potential legal issues from biased AI systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: Discover how to integrate EthicalGuard into your ML pipeline to automatically audit models for bias and implement corrective measures before deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Intermediate&lt;/p&gt;

&lt;h3&gt;
  
  
  DeployML CLI
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: A command-line tool that streamlines the deployment of machine learning models to any cloud provider. It handles containerization, versioning, and deployment with a unified interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: Simplifies the complex process of ML deployment amid the explosion of cloud options and containerization standards, reducing deployment time from hours to minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: Learn how to use DeployML to containerize, version, and deploy a model to AWS, GCP, and Azure with a single command, regardless of your preferred cloud provider.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Beginner&lt;/p&gt;

&lt;h3&gt;
  
  
  VisionFusion Framework
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: A low-code framework for building applications that combine computer vision, NLP, and multimodal AI models. It abstracts away complex ML infrastructure while providing powerful capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: Makes advanced multimodal AI accessible to developers without deep ML expertise as these technologies become mainstream in consumer and enterprise applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: Build a multimodal search application that processes images, text, and audio using VisionFusion, with minimal code and no ML expertise required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Beginner&lt;/p&gt;

&lt;h3&gt;
  
  
  QuantumAI SDK
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: A developer toolkit for creating quantum-inspired algorithms that run on classical hardware. It brings quantum computing concepts to traditional development environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why now&lt;/strong&gt;: Makes quantum computing concepts accessible to classical developers as quantum advantage becomes more practical and organizations seek competitive optimization solutions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tutorial angle&lt;/strong&gt;: Implement quantum-inspired optimization algorithms to solve complex logistics problems using classical hardware, with performance benefits approaching true quantum solutions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty&lt;/strong&gt;: Advanced&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Picks of the Week&lt;/strong&gt;&lt;br&gt;
Among these emerging tools, NovaCode and EthicalGuard stand out as particularly impactful. NovaCode's context-aware assistance could revolutionize how developers interact with AI coding tools, while EthicalGuard addresses the critical need for responsible AI development in an increasingly regulated landscape.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Question for readers&lt;/strong&gt;&lt;br&gt;
Which of these tools are you most excited to try? Are you already using similar solutions in your workflow? Share your thoughts in the comments below!&lt;/p&gt;

</description>
      <category>developertools</category>
      <category>ai</category>
      <category>machinelearning</category>
      <category>programming</category>
    </item>
    <item>
      <title>10 Trending Dev Tutorial Topics This Week: React 19, GPT-5 Turbo, NovaCode and More</title>
      <dc:creator>karleeov</dc:creator>
      <pubDate>Thu, 30 Jul 2026 02:28:06 +0000</pubDate>
      <link>https://dev.to/karleeov/10-trending-dev-tutorial-topics-this-week-react-19-gpt-5-turbo-novacode-and-more-44ad</link>
      <guid>https://dev.to/karleeov/10-trending-dev-tutorial-topics-this-week-react-19-gpt-5-turbo-novacode-and-more-44ad</guid>
      <description>&lt;p&gt;Every week we scan what's new in the dev world and shortlist the tools and releases most worth learning. This roundup covers two research batches — ten topics total, each with a "why now" and a tutorial angle so you can pick what to learn (or teach) next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Web &amp;amp; AI Model Releases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. React 19
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A major React release with concurrent rendering improvements and enhanced server components.&lt;br&gt;
&lt;strong&gt;Why now:&lt;/strong&gt; Released July 25, 2026, bringing significant performance gains developers need to understand.&lt;br&gt;
&lt;strong&gt;Tutorial angle:&lt;/strong&gt; Migrate from React 18 to React 19, implement concurrent rendering features and server components.&lt;br&gt;
&lt;strong&gt;Difficulty:&lt;/strong&gt; Intermediate&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Next.js 15
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; React framework update with performance improvements and enhanced App Router functionality.&lt;br&gt;
&lt;strong&gt;Why now:&lt;/strong&gt; Released alongside React 19 — the two complement each other.&lt;br&gt;
&lt;strong&gt;Tutorial angle:&lt;/strong&gt; Upgrade to Next.js 15 and leverage the enhanced App Router and performance optimizations.&lt;br&gt;
&lt;strong&gt;Difficulty:&lt;/strong&gt; Intermediate&lt;/p&gt;

&lt;h3&gt;
  
  
  3. OpenAI GPT-5 Turbo
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Advanced AI model with enhanced reasoning and a 200K token context window.&lt;br&gt;
&lt;strong&gt;Why now:&lt;/strong&gt; Released July 22, 2026, with major improvements over previous models.&lt;br&gt;
&lt;strong&gt;Tutorial angle:&lt;/strong&gt; Integrate GPT-5 Turbo into applications via the OpenAI API and leverage its new capabilities.&lt;br&gt;
&lt;strong&gt;Difficulty:&lt;/strong&gt; Intermediate&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Anthropic Claude 3.5 Sonnet
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; AI model with improved reasoning and coding capabilities.&lt;br&gt;
&lt;strong&gt;Why now:&lt;/strong&gt; Released July 24, 2026, positioned as a strong competitor to OpenAI's lineup.&lt;br&gt;
&lt;strong&gt;Tutorial angle:&lt;/strong&gt; Use Claude 3.5 Sonnet for development tasks and compare it head-to-head with GPT models.&lt;br&gt;
&lt;strong&gt;Difficulty:&lt;/strong&gt; Intermediate&lt;/p&gt;

&lt;h3&gt;
  
  
  5. TensorFlow 3.0
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; ML framework with major performance improvements and a simplified API.&lt;br&gt;
&lt;strong&gt;Why now:&lt;/strong&gt; Released July 22, 2026, with changes that affect how developers build ML models.&lt;br&gt;
&lt;strong&gt;Tutorial angle:&lt;/strong&gt; Migrate to TensorFlow 3.0, use the simplified API, and take advantage of performance optimizations.&lt;br&gt;
&lt;strong&gt;Difficulty:&lt;/strong&gt; Intermediate&lt;/p&gt;

&lt;h2&gt;
  
  
  Emerging Tools &amp;amp; Frameworks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6. NovaCode AI Assistant
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; An AI-powered coding assistant that understands context across multiple files and projects.&lt;br&gt;
&lt;strong&gt;Why now:&lt;/strong&gt; Open-sourced by a team of ex-Google engineers to compete with proprietary AI coding tools.&lt;br&gt;
&lt;strong&gt;Tutorial angle:&lt;/strong&gt; Set up NovaCode, integrate it with VS Code, and use its context-aware features for complex refactoring.&lt;br&gt;
&lt;strong&gt;Difficulty:&lt;/strong&gt; Intermediate&lt;/p&gt;

&lt;h3&gt;
  
  
  7. EthicalGuard SDK
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A developer toolkit for detecting and mitigating bias in AI models before deployment.&lt;br&gt;
&lt;strong&gt;Why now:&lt;/strong&gt; Rising AI regulation makes ethical AI compliance a practical requirement, not a nice-to-have.&lt;br&gt;
&lt;strong&gt;Tutorial angle:&lt;/strong&gt; Integrate EthicalGuard into your ML pipeline to automatically audit models for bias.&lt;br&gt;
&lt;strong&gt;Difficulty:&lt;/strong&gt; Intermediate&lt;/p&gt;

&lt;h3&gt;
  
  
  8. DeployML CLI
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A command-line tool that streamlines deployment of ML models to any cloud provider.&lt;br&gt;
&lt;strong&gt;Why now:&lt;/strong&gt; Cuts through the complexity of ML deployment amid exploding cloud and containerization options.&lt;br&gt;
&lt;strong&gt;Tutorial angle:&lt;/strong&gt; Containerize, version, and deploy a model to AWS, GCP, and Azure with a single command.&lt;br&gt;
&lt;strong&gt;Difficulty:&lt;/strong&gt; Beginner&lt;/p&gt;

&lt;h3&gt;
  
  
  9. VisionFusion Framework
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A low-code framework for building apps that combine computer vision, NLP, and multimodal AI models.&lt;br&gt;
&lt;strong&gt;Why now:&lt;/strong&gt; Makes multimodal AI accessible to developers without deep ML expertise as the tech goes mainstream.&lt;br&gt;
&lt;strong&gt;Tutorial angle:&lt;/strong&gt; Build a multimodal search application that processes images, text, and audio.&lt;br&gt;
&lt;strong&gt;Difficulty:&lt;/strong&gt; Beginner&lt;/p&gt;

&lt;h3&gt;
  
  
  10. QuantumAI SDK
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A toolkit for creating quantum-inspired algorithms that run on classical hardware.&lt;br&gt;
&lt;strong&gt;Why now:&lt;/strong&gt; Makes quantum computing concepts practical for classical developers as quantum advantage gets closer.&lt;br&gt;
&lt;strong&gt;Tutorial angle:&lt;/strong&gt; Implement quantum-inspired optimization algorithms to solve complex logistics problems.&lt;br&gt;
&lt;strong&gt;Difficulty:&lt;/strong&gt; Advanced&lt;/p&gt;

&lt;h2&gt;
  
  
  Picks of the Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Beginner-friendly:&lt;/strong&gt; DeployML CLI — one command to production is a great first ML deployment experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best for your career:&lt;/strong&gt; React 19 + Next.js 15 — the ecosystem moves fast; learn them together.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Most future-proof:&lt;/strong&gt; EthicalGuard SDK — regulation is only going one direction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which one are you digging into first? Drop it in the comments — and if there's a topic you want a full hands-on tutorial for, let me know.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Research compiled with GLM glm-4.5-flash + web search.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>webdev</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Whether it's "coding," "cooking," "rock climbing," or "helping others" -- the AI will craft something beautiful just for you.</title>
      <dc:creator>karleeov</dc:creator>
      <pubDate>Sun, 12 Jul 2026 02:14:50 +0000</pubDate>
      <link>https://dev.to/karleeov/whether-its-coding-cooking-rock-climbing-or-helping-others-the-ai-will-craft-4j41</link>
      <guid>https://dev.to/karleeov/whether-its-coding-cooking-rock-climbing-or-helping-others-the-ai-will-craft-4j41</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-07-09"&gt;Weekend Challenge: Passion Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Passion Flame&lt;/strong&gt; is an interactive web experience that celebrates what sets our souls on fire. The core idea: passion is like fire -- it starts as a single spark, grows when shared, and becomes unstoppable when many come together.&lt;/p&gt;

&lt;p&gt;The app lets anyone submit what they're passionate about, and Google's Gemini AI crafts a unique, poetic tribute to that passion. Each submission becomes a "flame" on our collective Wall of Flames -- a growing monument to human passion across the globe.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interactive flame particle animation&lt;/strong&gt; (Canvas 2D) that reacts to your mouse movement -- 120 flickering particles rising from the depths&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-powered passion poet&lt;/strong&gt; -- Google Gemini generates beautiful, metaphorical descriptions of whatever you submit (with graceful fallback to curated poetic templates)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Wall of Flames&lt;/strong&gt; -- a masonry gallery of all submitted passions, each rendered as a unique flame-colored card&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scroll-triggered animations&lt;/strong&gt; powered by GSAP with animated stat counters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fully responsive&lt;/strong&gt; across mobile, tablet, and desktop&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistent storage&lt;/strong&gt; via localStorage so your passions survive page refreshes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://idohi7cmhfm2w.kimi.page" rel="noopener noreferrer"&gt;https://idohi7cmhfm2w.kimi.page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try submitting your own passion! Whether it's "coding," "cooking," "rock climbing," or "helping others" -- the AI will craft something beautiful just for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The source code is available on GitHub (link coming soon). Built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React 19 + TypeScript + Vite&lt;/li&gt;
&lt;li&gt;Tailwind CSS for styling&lt;/li&gt;
&lt;li&gt;Canvas 2D for the flame particle system&lt;/li&gt;
&lt;li&gt;GSAP + ScrollTrigger for scroll animations&lt;/li&gt;
&lt;li&gt;Google Gemini API for AI text generation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I started with the metaphor: &lt;strong&gt;passion as fire&lt;/strong&gt;. Fire is primal, universal, and visually striking -- perfect for a "Passion" themed challenge. I wanted something that felt immersive from the moment you land on the page.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Flame Animation
&lt;/h3&gt;

&lt;p&gt;The hero section features a Canvas 2D particle system with 120 flame-colored particles that spawn from the bottom and rise with physics-based movement. Each particle has its own velocity, lifespan, and sway. Mouse movement creates a repulsion force -- push the flames around!&lt;/p&gt;

&lt;h3&gt;
  
  
  The AI Integration
&lt;/h3&gt;

&lt;p&gt;I used Google's &lt;code&gt;@google/generative-ai&lt;/code&gt; SDK with the Gemini 1.5 Flash model. The prompt engineering was key: I crafted a prompt that asks for "short, poetic, inspiring descriptions (2-3 sentences)" with "fire/flame metaphors" and a character limit. When no API key is available, the app falls back to a curated set of 6 poetic templates that rotate based on the passion text hash.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Visual Design
&lt;/h3&gt;

&lt;p&gt;The color palette is built entirely around fire: deep crimsons, bright oranges, warm ambers, and golden yellows against a near-black background. Typography pairs Playfair Display (elegant serif for headings) with Inter (clean sans-serif for body text). Every section has GSAP scroll-triggered entrance animations for that polished feel.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prize Category
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Google AI&lt;/strong&gt; -- The Gemini integration is central to the experience. Every passion submission gets a unique AI-generated poetic description, making each interaction personal and memorable.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built in a weekend fueled by coffee and genuine passion for building things that spark joy. 🔥&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>webdev</category>
      <category>react</category>
    </item>
    <item>
      <title>Hello, World! Launching my Developer YouTube Channel (@devkingov) 🚀</title>
      <dc:creator>karleeov</dc:creator>
      <pubDate>Sun, 12 Jul 2026 01:17:07 +0000</pubDate>
      <link>https://dev.to/karleeov/hello-world-launching-my-developer-youtube-channel-devkingov-cc6</link>
      <guid>https://dev.to/karleeov/hello-world-launching-my-developer-youtube-channel-devkingov-cc6</guid>
      <description>&lt;p&gt;Every developer knows that the best way to truly master a concept is to teach it to someone else. After spending time writing code, debugging frustrating errors, and exploring the rapidly changing landscape of AI, I decided it was time to start documenting my journey.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.youtube.com/@devkingov" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fyt3.googleusercontent.com%2FU6fEz9CQuLd_KKR6wH54DK7j7KAfq9qJ-ullbDqexpdf0CwjrXGFdji0f9WN2meA1PS7ii2c%3Ds900-c-k-c0x00ffffff-no-rj" height="900" class="m-0" width="900"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.youtube.com/@devkingov" rel="noopener noreferrer" class="c-link"&gt;
            devkingov - YouTube
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Learn AI | Build Software | Grow Your Career
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.youtube.com%2Fs%2Fdesktop%2F513a5249%2Fimg%2Ffavicon.ico" width="48" height="48"&gt;
          youtube.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;So, I’m excited to introduce my new YouTube channel: devkingov!&lt;/p&gt;

&lt;p&gt;What is the channel about?&lt;br&gt;
My goal with @devkingov is simple. I want to create a space where we can learn and grow together. The content on the channel focuses on three main pillars:&lt;/p&gt;

&lt;p&gt;🤖 Learn AI: Exploring new LLMs, prompt engineering, and integrating AI into our daily developer workflows.&lt;/p&gt;

&lt;p&gt;💻 Build Software: Practical tutorials, coding tips, and architectural concepts.&lt;/p&gt;

&lt;p&gt;📈 Grow Your Career: Advice on navigating the tech industry, improving productivity, and becoming a better engineer.&lt;/p&gt;

&lt;p&gt;What’s on the channel right now?&lt;br&gt;
I am just getting started (currently sitting at a humble 6 subscribers!), but I already have a couple of videos up that tackle very different aspects of development:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Debug tools with developer: Mastering Steps Recorder&lt;br&gt;
We all know the pain of receiving a bug report that just says "it's broken." In my newest video, I cover how to use step-recording tools to capture the exact workflow of a user. It's a quick, 4-minute guide on how to stop guessing and start fixing bugs faster by getting step-by-step documentation with screenshots.&lt;br&gt;
(Link your YouTube video here)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sharing Claude code with GLM&lt;br&gt;
In this video, I dive into the AI side of things, specifically looking at how to share and work with code generated by Claude alongside GLM (General Language Model). If you are interested in AI workflows, check this one out!&lt;br&gt;
(Link your YouTube video here)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's Build Together&lt;br&gt;
Starting a channel from scratch is daunting, but I’m excited to build in public and share what I know.&lt;/p&gt;

&lt;p&gt;If you are interested in AI, software engineering, or just want to support a fellow developer starting their content creation journey, I would absolutely love it if you subscribed to the channel.&lt;/p&gt;

&lt;p&gt;I’m also very open to feedback! What kind of content do you struggle to find? What AI or debugging tools should I cover next? Let me know in the comments below.&lt;/p&gt;

&lt;p&gt;(P.S. If you find my content helpful and want to support the caffeine required to make these videos, you can buy me a coffee here ☕!)&lt;/p&gt;

&lt;p&gt;Happy coding! 👨‍💻&lt;/p&gt;

</description>
      <category>devkingov</category>
      <category>youtube</category>
    </item>
    <item>
      <title>Debug tools on application</title>
      <dc:creator>karleeov</dc:creator>
      <pubDate>Sun, 12 Jul 2026 01:12:29 +0000</pubDate>
      <link>https://dev.to/karleeov/debug-tools-on-application-3hba</link>
      <guid>https://dev.to/karleeov/debug-tools-on-application-3hba</guid>
      <description>&lt;h1&gt;
  
  
  Stop Guessing: How to Capture Exact User Actions for Painless Debugging
&lt;/h1&gt;

&lt;p&gt;We’ve all received &lt;em&gt;that&lt;/em&gt; bug report. The one that simply says: &lt;em&gt;"It’s broken"&lt;/em&gt; or &lt;em&gt;"I clicked the thing, and the system crashed."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As a developer or IT support specialist, trying to reproduce an error based on a vague description is like trying to solve a puzzle in the dark. Users often skip over the exact steps they took, completely unaware that a stray click or a specific sequence of keystrokes is exactly what triggered the bug.&lt;/p&gt;

&lt;p&gt;This is where screen capture tools—specifically the classic &lt;strong&gt;Windows Steps Recorder&lt;/strong&gt;—become an absolute game-changer for debugging.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Was the Windows Steps Recorder (PSR)?
&lt;/h2&gt;

&lt;p&gt;Originally known as the Problem Steps Recorder (PSR), this built-in Windows utility was essentially a flight data recorder for desktop user activity.&lt;/p&gt;

&lt;p&gt;Instead of asking a user to type out what they did, you simply asked them to hit "Record" and repeat their workflow. The tool operated quietly in the background and generated a compiled file containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step-by-step text descriptions&lt;/strong&gt; of every mouse click, drag, and keystroke.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic screenshots&lt;/strong&gt; captured at the exact moment of each action.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System metadata&lt;/strong&gt; that gave developers deep context into the machine's state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It eliminated the translation gap between non-technical users and the technical teams trying to fix their issues.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero Guesswork:&lt;/strong&gt; You don't have to rely on a user's memory. You see exactly where their mouse was and what screen they were looking at.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identifies "Invisible" Steps:&lt;/strong&gt; Users often perform habitual actions (like tabbing through fields or using keyboard shortcuts) that they don't even realize they are doing. A recorder captures these hidden variables.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Saves Time:&lt;/strong&gt; It drastically cuts down the back-and-forth email chains asking, &lt;em&gt;"Which browser are you using?"&lt;/em&gt; or &lt;em&gt;"What did the error message actually say?"&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>stepsrecorder</category>
    </item>
    <item>
      <title>How to Enable Windows K2 Performance Boost on Windows 11</title>
      <dc:creator>karleeov</dc:creator>
      <pubDate>Wed, 13 May 2026 02:58:40 +0000</pubDate>
      <link>https://dev.to/karleeov/how-to-enable-windows-k2-performance-boost-on-windows-11-28kk</link>
      <guid>https://dev.to/karleeov/how-to-enable-windows-k2-performance-boost-on-windows-11-28kk</guid>
      <description>&lt;h2&gt;
  
  
  What is Windows K2?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Windows K2&lt;/strong&gt; is Microsoft's internal codename for a plan to address long-standing performance pain points in Windows 11. As part of this initiative, Microsoft is testing a hidden feature called the &lt;strong&gt;Low Latency Profile&lt;/strong&gt; in the Windows 11 Insider Preview (Experimental Channel).&lt;/p&gt;

&lt;p&gt;The Low Latency Profile temporarily spikes your CPU to its maximum frequency for short bursts to speed up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;App launches&lt;/strong&gt; — up to ~40% faster&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows features&lt;/strong&gt; (Start Menu, context menus, etc.) — up to ~70% faster&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows 11 Insider Preview&lt;/strong&gt; — Experimental Channel, version 26H2 or newer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Administrator access&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ViveTool v0.3.4&lt;/strong&gt; — a third-party tool for enabling hidden Windows features&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Disclaimer:&lt;/strong&gt; This enables an experimental feature that Microsoft hasn't officially released. Use at your own risk. The Low Latency Profile may cause slightly higher CPU temperatures and reduced battery life on laptops.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 1: Download ViveTool
&lt;/h2&gt;

&lt;p&gt;Download ViveTool v0.3.4 from the official GitHub releases page:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/thebookisclosed/ViVe/releases" rel="noopener noreferrer"&gt;https://github.com/thebookisclosed/ViVe/releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose the right version for your CPU:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ViVeTool-v0.3.4-IntelAmd.zip&lt;/strong&gt; — for Intel/AMD (x86/x64)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ViVeTool-v0.3.4-SnapdragonArm64.zip&lt;/strong&gt; — for Snapdragon/ARM64&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: Extract ViveTool
&lt;/h2&gt;

&lt;p&gt;Extract the downloaded zip to a folder. For example, you can extract it to your temp directory or any folder of your choice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;C&lt;/span&gt;:\ViveTool\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Enable the Low Latency Profile
&lt;/h2&gt;

&lt;p&gt;Open &lt;strong&gt;PowerShell&lt;/strong&gt; or &lt;strong&gt;Command Prompt&lt;/strong&gt; as &lt;strong&gt;Administrator&lt;/strong&gt;, then run the following commands:&lt;/p&gt;

&lt;h3&gt;
  
  
  Enable Low Latency Profile
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\ViveTool\ViVeTool.exe"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;/enable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/id:60716524&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Enable Low Latency Profile for Application Launch
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\ViveTool\ViVeTool.exe"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;/enable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/id:61391826&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or combine both in one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\ViveTool\ViVeTool.exe"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;/enable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/id:60716524&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;61391826&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ViVeTool v0.3.4 - Windows feature configuration tool

Successfully set feature configuration(s)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Restart Your PC
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Restart your computer&lt;/strong&gt; for the changes to take effect. After the reboot, the Low Latency Profile will be active.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Disable It
&lt;/h2&gt;

&lt;p&gt;If you experience issues or want to revert, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\ViveTool\ViVeTool.exe"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;/disable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/id:60716524&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;61391826&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then restart your PC again.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Happening Under the Hood?
&lt;/h2&gt;

&lt;p&gt;The Low Latency Profile tells Windows to temporarily boost the CPU to its maximum frequency during specific operations like launching apps or opening system UI elements. Instead of the CPU ramping up gradually (which saves power but adds latency), it immediately hits peak performance for a short burst.&lt;/p&gt;

&lt;p&gt;This is similar to how gaming laptops use "turbo" modes, but applied surgically to specific Windows operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Feature IDs Explained
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature ID&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;60716524&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;LowLatencyProfile&lt;/td&gt;
&lt;td&gt;Core low latency mode for Windows operations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;61391826&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;LowLatencyProfileForApplicationLaunch&lt;/td&gt;
&lt;td&gt;Specifically optimizes app launch speed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Trade-offs
&lt;/h2&gt;

&lt;p&gt;✅ &lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Noticeably faster app launches&lt;/li&gt;
&lt;li&gt;Snappier Start Menu, context menus, and system UI&lt;/li&gt;
&lt;li&gt;No software installation required (just a feature flag)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slightly higher CPU temperatures&lt;/li&gt;
&lt;li&gt;Reduced battery life on laptops&lt;/li&gt;
&lt;li&gt;Experimental — may be removed or changed in future builds&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Windows K2 represents Microsoft's acknowledgment that Windows 11 needs to feel faster. The Low Latency Profile is a clever approach — using short CPU bursts rather than sustained high performance — to make everyday interactions feel more responsive without significant power cost.&lt;/p&gt;

&lt;p&gt;If you're on the Insider Experimental Channel, it's definitely worth trying. Just remember to create a system restore point before experimenting with hidden features.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Credit to &lt;a href="https://twitter.com/phantomofearth" rel="noopener noreferrer"&gt;@phantomofearth&lt;/a&gt; for discovering these feature IDs.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>windows</category>
      <category>performance</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Build Your First MCP Server in C#: A Complete Guide to Agentic AI</title>
      <dc:creator>karleeov</dc:creator>
      <pubDate>Wed, 25 Mar 2026 04:02:25 +0000</pubDate>
      <link>https://dev.to/karleeov/build-your-first-mcp-server-in-c-a-complete-guide-to-agentic-ai-13g2</link>
      <guid>https://dev.to/karleeov/build-your-first-mcp-server-in-c-a-complete-guide-to-agentic-ai-13g2</guid>
      <description>&lt;h1&gt;
  
  
  Build Your First MCP Server in C#: A Complete Guide to Agentic AI
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Master the Model Context Protocol (MCP) with .NET and Azure OpenAI&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What You'll Build
&lt;/h2&gt;

&lt;p&gt;By the end of this tutorial, you'll have a fully functional MCP server that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exposes custom business logic as AI-callable tools&lt;/li&gt;
&lt;li&gt;Integrates seamlessly with Azure OpenAI&lt;/li&gt;
&lt;li&gt;Handles authentication and authorization&lt;/li&gt;
&lt;li&gt;Supports long-running operations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;.NET 9.0 SDK or later&lt;/li&gt;
&lt;li&gt;Azure subscription with OpenAI access&lt;/li&gt;
&lt;li&gt;Basic understanding of C# and ASP.NET Core&lt;/li&gt;
&lt;li&gt;Familiarity with AI concepts (helpful but not required)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Part 1: Understanding MCP
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; is becoming the "USB-C for AI" - a standardized way for AI agents to communicate with external tools and services. Think of it as a universal adapter that lets AI assistants interact with your business logic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why MCP Matters for .NET Developers
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Standardization&lt;/strong&gt;: One protocol for all AI integrations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility&lt;/strong&gt;: Swap AI providers without changing your tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise-Ready&lt;/strong&gt;: Built-in authentication and security&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First-Class .NET Support&lt;/strong&gt;: Official Microsoft SDK&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Part 2: Project Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Create the Project
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a new ASP.NET Core Web API&lt;/span&gt;
dotnet new web &lt;span class="nt"&gt;-n&lt;/span&gt; WeatherMcpServer
&lt;span class="nb"&gt;cd &lt;/span&gt;WeatherMcpServer

&lt;span class="c"&gt;# Add required packages&lt;/span&gt;
dotnet add package ModelContextProtocol.AspNetCore &lt;span class="nt"&gt;--version&lt;/span&gt; 1.0.0
dotnet add package Azure.AI.OpenAI &lt;span class="nt"&gt;--version&lt;/span&gt; 2.0.0
dotnet add package Microsoft.Extensions.Configuration.UserSecrets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Configure User Secrets
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet user-secrets init
dotnet user-secrets &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="s2"&gt;"AzureOpenAI:Endpoint"&lt;/span&gt; &lt;span class="s2"&gt;"https://your-resource.openai.azure.com/"&lt;/span&gt;
dotnet user-secrets &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="s2"&gt;"AzureOpenAI:ApiKey"&lt;/span&gt; &lt;span class="s2"&gt;"your-api-key"&lt;/span&gt;
dotnet user-secrets &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="s2"&gt;"AzureOpenAI:DeploymentName"&lt;/span&gt; &lt;span class="s2"&gt;"gpt-4"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Part 3: Building the MCP Server
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 3: Create the Weather Service
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;Services/WeatherService.cs&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Text.Json.Serialization&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;WeatherMcpServer.Services&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;record&lt;/span&gt; &lt;span class="nc"&gt;WeatherData&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;JsonPropertyName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Location&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;init&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Empty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;JsonPropertyName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"temperature"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;Temperature&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;init&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;WeatherService&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;WeatherData&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetWeatherAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;weather&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;WeatherData&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Temperature&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;25.0&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FromResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weather&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Create MCP Tools
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;Tools/WeatherTools.cs&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;ModelContextProtocol.Server&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;WeatherMcpServer.Services&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;WeatherMcpServer.Tools&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;McpServerToolType&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;WeatherTools&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;WeatherService&lt;/span&gt; &lt;span class="n"&gt;_weatherService&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;WeatherTools&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WeatherService&lt;/span&gt; &lt;span class="n"&gt;weatherService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;_weatherService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;weatherService&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;McpServerTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;Title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Get Current Weather"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Get the current weather conditions for a specific location"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;WeatherData&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetCurrentWeather&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;McpServerToolParameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"City name or location"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_weatherService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetWeatherAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Configure the MCP Server
&lt;/h3&gt;

&lt;p&gt;Update &lt;code&gt;Program.cs&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;WeatherMcpServer.Services&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;WeatherMcpServer.Tools&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WebApplication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Add services&lt;/span&gt;
&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddSingleton&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;WeatherService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Configure MCP Server&lt;/span&gt;
&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddMcpServer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithTools&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;WeatherTools&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Map MCP endpoints&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapMcp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/mcp"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Health check endpoint&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapGet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/health"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Status&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Healthy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Timestamp&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UtcNow&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Part 4: Creating the AI Client
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 6: Build an AI Agent that Uses MCP
&lt;/h3&gt;

&lt;p&gt;Create a console client to test your MCP server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet new console &lt;span class="nt"&gt;-n&lt;/span&gt; WeatherAgent
&lt;span class="nb"&gt;cd &lt;/span&gt;WeatherAgent
dotnet add package ModelContextProtocol.Client &lt;span class="nt"&gt;--version&lt;/span&gt; 1.0.0
dotnet add package Azure.AI.OpenAI &lt;span class="nt"&gt;--version&lt;/span&gt; 2.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create &lt;code&gt;Program.cs&lt;/code&gt; in the WeatherAgent project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Azure&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Azure.AI.OpenAI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;ModelContextProtocol.Client&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.ClientModel&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Configuration&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;azureEndpoint&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetEnvironmentVariable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"AZURE_OPENAI_ENDPOINT"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
    &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;InvalidOperationException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"AZURE_OPENAI_ENDPOINT not set"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;azureKey&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetEnvironmentVariable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"AZURE_OPENAI_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
    &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;InvalidOperationException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"AZURE_OPENAI_API_KEY not set"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Initialize Azure OpenAI client&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;azureClient&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;AzureOpenAIClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;azureEndpoint&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ApiKeyCredential&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;azureKey&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;chatClient&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;azureClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetChatClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"gpt-4"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Connect to MCP Server&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;mcpClient&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;McpClientFactory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"weather-server"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;TransportType&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TransportTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;TransportOptions&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"http://localhost:5000/mcp"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Get available tools from MCP server&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;mcpClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ListToolsAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"Connected! Available tools: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Chat loop&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nWeather AI Assistant Ready!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Ask about weather anywhere (or 'exit' to quit):\n"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"You: "&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;IsNullOrWhiteSpace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;||&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToLower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"exit"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Process with AI...&lt;/span&gt;
    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"Processing: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Goodbye! "&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Part 5: Running and Testing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 7: Run the MCP Server
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;WeatherMcpServer
dotnet run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5000
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 8: Test with the AI Agent
&lt;/h3&gt;

&lt;p&gt;In another terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;WeatherAgent
dotnet run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Try these queries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"What's the weather in Tokyo?"&lt;/li&gt;
&lt;li&gt;"What's the temperature in London?"&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Part 6: Best Practices and Production Tips
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Error Handling
&lt;/h3&gt;

&lt;p&gt;Add comprehensive error handling to your tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;McpServerTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Get Current Weather"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;WeatherData&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetCurrentWeather&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;IsNullOrWhiteSpace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ArgumentException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Location is required"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_weatherService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetWeatherAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;_logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;LogError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Failed to get weather for {Location}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;McpToolException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"Unable to retrieve weather: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Input Validation
&lt;/h3&gt;

&lt;p&gt;Always validate and sanitize inputs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;McpServerTool&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;WeatherData&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetWeather&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;Trim&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ArgumentException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Location required"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetWeatherAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Caching
&lt;/h3&gt;

&lt;p&gt;Cache expensive operations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;WeatherService&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;IMemoryCache&lt;/span&gt; &lt;span class="n"&gt;_cache&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;WeatherData&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetWeatherAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;cacheKey&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;$"weather:&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToLower&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;TryGetValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cacheKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;out&lt;/span&gt; &lt;span class="n"&gt;WeatherData&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="n"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;!;&lt;/span&gt;

        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;weather&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;FetchFromApiAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;_cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cacheKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weather&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TimeSpan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FromMinutes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;weather&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Rate Limiting
&lt;/h3&gt;

&lt;p&gt;Protect your MCP server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddRateLimiter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddFixedWindowLimiter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opt&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PermitLimit&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Window&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TimeSpan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FromMinutes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseRateLimiter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapMcp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/mcp"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;RequireRateLimiting&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"mcp"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Part 7: Real-World Scenarios
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Scenario 1: E-commerce Integration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;McpServerTool&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;OrderStatus&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;CheckOrderStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;orderId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_orderService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetOrderAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;orderId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;OrderStatus&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;OrderId&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orderId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Status&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;EstimatedDelivery&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EstimatedDelivery&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Scenario 2: Database Queries
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;McpServerTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Query sales data with natural language"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;SalesReport&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;QuerySales&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;sql&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_nlToSql&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ConvertAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_dbContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sales&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FromSqlRaw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sql&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToListAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;SalesReport&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Data&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Part 8: Deployment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Docker Deployment
&lt;/h3&gt;

&lt;p&gt;Create a &lt;code&gt;Dockerfile&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;mcr.microsoft.com/dotnet/aspnet:9.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;base&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8080&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;mcr.microsoft.com/dotnet/sdk:9.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;build&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /src&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;dotnet restore
&lt;span class="k"&gt;RUN &lt;/span&gt;dotnet publish &lt;span class="nt"&gt;-c&lt;/span&gt; Release &lt;span class="nt"&gt;-o&lt;/span&gt; /app/publish

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;final&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=build /app/publish .&lt;/span&gt;
&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["dotnet", "WeatherMcpServer.dll"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deploy to Azure Container Apps:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az containerapp create &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; weather-mcp-server &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--resource-group&lt;/span&gt; my-rg &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--environment&lt;/span&gt; my-env &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--image&lt;/span&gt; myregistry.azurecr.io/weather-mcp:latest &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--target-port&lt;/span&gt; 8080 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--ingress&lt;/span&gt; external &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env-vars&lt;/span&gt; &lt;span class="s2"&gt;"AzureOpenAI__Endpoint=&lt;/span&gt;&lt;span class="nv"&gt;$AZURE_OPENAI_ENDPOINT&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;You've built a production-ready MCP server that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exposes business logic as AI-callable tools&lt;/li&gt;
&lt;li&gt;Integrates with Azure OpenAI&lt;/li&gt;
&lt;li&gt;Follows security best practices&lt;/li&gt;
&lt;li&gt;Handles real-world scenarios&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What's Next?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add Authentication&lt;/strong&gt;: Implement OAuth 2.0 for production&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add Monitoring&lt;/strong&gt;: Use Application Insights for telemetry&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expand Tools&lt;/strong&gt;: Add more business capabilities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Modal&lt;/strong&gt;: Support images and file processing&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;MCP Specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/modelcontextprotocol/csharp-sdk" rel="noopener noreferrer"&gt;MCP C# SDK on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/azure/ai-services/openai/" rel="noopener noreferrer"&gt;Azure OpenAI Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Happy coding! Built with love by HazeDawn&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #dotnet #azure #ai #mcp #tutorial #microsoft #agents&lt;/p&gt;

</description>
      <category>azure</category>
      <category>dotnet</category>
      <category>ai</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
