{"id":1401,"date":"2026-08-22T18:00:00","date_gmt":"2026-08-22T17:00:00","guid":{"rendered":"https:\/\/wade.one\/blog\/?p=1401"},"modified":"2026-08-22T18:00:00","modified_gmt":"2026-08-22T17:00:00","slug":"dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird","status":"publish","type":"post","link":"https:\/\/wade.one\/blog\/2026\/08\/22\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\/","title":{"rendered":".NET&#8217;s MCP C# SDK 2.0 Makes Web Deployment Less Weird"},"content":{"rendered":"<p>Running an MCP server over the web should feel like running an ordinary web service. The first generation of the protocol made that harder by tying useful interactions to sessions and initialisation state. Version 2.0 of the official C# SDK moves the .NET implementation towards infrastructure that already knows how to scale.<\/p>\n<p>Microsoft&#8217;s <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-v20-of-the-official-mcp-csharp-sdk\/\">MCP C# SDK 2.0 announcement<\/a> implements the 28 July 2026 protocol with stateless-first HTTP, standardised headers, and multi round-trip requests for interactive tools. That means requests can be routed through normal load balancers without sticky sessions while a tool can still ask for more information when the workflow needs it.<\/p>\n<p>The useful part is that this is not a flag-day migration. The SDK remains compatible with older clients and servers, and it supports modern ASP.NET Core while reaching back to .NET Framework. There is one area to check carefully: the redesigned Tasks feature is not API- or protocol-compatible with the experimental task implementation from the earlier specification.<\/p>\n<p>For a new service, I would use the stateless path and let the web platform do what it already does well. For an existing deployment, I would upgrade the SDK, run conformance and integration tests against the clients actually in use, and isolate any experimental Tasks work. A protocol becoming less special to operate is a good sign that it is growing up.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The official MCP C# SDK 2.0 adopts stateless HTTP while keeping older clients and servers working during migration.<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[13],"tags":[226,225,160,127],"class_list":["post-1401","post","type-post","status-publish","format-standard","hentry","category-programming","tag-aspnet-core","tag-c-sharp","tag-dotnet","tag-mcp"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>.NET&#039;s MCP C# SDK 2.0 Makes Web Deployment Less Weird - wade.one<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wade.one\/blog\/2026\/08\/22\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\".NET&#039;s MCP C# SDK 2.0 Makes Web Deployment Less Weird - wade.one\" \/>\n<meta property=\"og:description\" content=\"The official MCP C# SDK 2.0 adopts stateless HTTP while keeping older clients and servers working during migration.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wade.one\/blog\/2026\/08\/22\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\/\" \/>\n<meta property=\"og:site_name\" content=\"wade.one\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-22T17:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/Wade-Logo-cropped.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1518\" \/>\n\t<meta property=\"og:image:height\" content=\"1506\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@wadewomersley\" \/>\n<meta name=\"twitter:site\" content=\"@wadewomersley\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/22\\\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/22\\\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\".NET&#8217;s MCP C# SDK 2.0 Makes Web Deployment Less Weird\",\"datePublished\":\"2026-08-22T17:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/22\\\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\\\/\"},\"wordCount\":231,\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"keywords\":[\"aspnet-core\",\"c-sharp\",\"dotnet\",\"mcp\"],\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/22\\\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\\\/\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/22\\\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\\\/\",\"name\":\".NET's MCP C# SDK 2.0 Makes Web Deployment Less Weird - wade.one\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-22T17:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/22\\\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/22\\\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/22\\\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wade.one\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\".NET&#8217;s MCP C# SDK 2.0 Makes Web Deployment Less Weird\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/\",\"name\":\"wade.one\",\"description\":\"wade womersley - york based software engineer\",\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wade.one\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\",\"name\":\"Wade Womersley\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"contentUrl\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"width\":202,\"height\":200,\"caption\":\"Wade Womersley\"},\"logo\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":".NET's MCP C# SDK 2.0 Makes Web Deployment Less Weird - wade.one","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wade.one\/blog\/2026\/08\/22\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\/","og_locale":"en_GB","og_type":"article","og_title":".NET's MCP C# SDK 2.0 Makes Web Deployment Less Weird - wade.one","og_description":"The official MCP C# SDK 2.0 adopts stateless HTTP while keeping older clients and servers working during migration.","og_url":"https:\/\/wade.one\/blog\/2026\/08\/22\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\/","og_site_name":"wade.one","article_published_time":"2026-08-22T17:00:00+00:00","og_image":[{"width":1518,"height":1506,"url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/Wade-Logo-cropped.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_creator":"@wadewomersley","twitter_site":"@wadewomersley","twitter_misc":{"Estimated reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wade.one\/blog\/2026\/08\/22\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\/#article","isPartOf":{"@id":"https:\/\/wade.one\/blog\/2026\/08\/22\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\/"},"author":{"name":"","@id":""},"headline":".NET&#8217;s MCP C# SDK 2.0 Makes Web Deployment Less Weird","datePublished":"2026-08-22T17:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/wade.one\/blog\/2026\/08\/22\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\/"},"wordCount":231,"publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"keywords":["aspnet-core","c-sharp","dotnet","mcp"],"articleSection":["Programming"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/wade.one\/blog\/2026\/08\/22\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\/","url":"https:\/\/wade.one\/blog\/2026\/08\/22\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\/","name":".NET's MCP C# SDK 2.0 Makes Web Deployment Less Weird - wade.one","isPartOf":{"@id":"https:\/\/wade.one\/blog\/#website"},"datePublished":"2026-08-22T17:00:00+00:00","breadcrumb":{"@id":"https:\/\/wade.one\/blog\/2026\/08\/22\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wade.one\/blog\/2026\/08\/22\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wade.one\/blog\/2026\/08\/22\/dotnets-mcp-c-sharp-sdk-2-0-makes-web-deployment-less-weird\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wade.one\/blog\/"},{"@type":"ListItem","position":2,"name":".NET&#8217;s MCP C# SDK 2.0 Makes Web Deployment Less Weird"}]},{"@type":"WebSite","@id":"https:\/\/wade.one\/blog\/#website","url":"https:\/\/wade.one\/blog\/","name":"wade.one","description":"wade womersley - york based software engineer","publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wade.one\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3","name":"Wade Womersley","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","contentUrl":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","width":202,"height":200,"caption":"Wade Womersley"},"logo":{"@id":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png"}}]}},"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":1394,"url":"https:\/\/wade.one\/blog\/2026\/08\/15\/mcp-going-stateless-is-the-boring-fix-it-needed\/","url_meta":{"origin":1401,"position":0},"title":"MCP Going Stateless Is the Boring Fix It Needed","author":"","date":"August 15, 2026","format":false,"excerpt":"MCP's stateless core removes deployment plumbing that should never have been the interesting part of an agent tool.","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1247,"url":"https:\/\/wade.one\/blog\/2026\/05\/01\/docker-mcp-shows-why-agent-tools-need-boring-infrastructure\/","url_meta":{"origin":1401,"position":1},"title":"Docker MCP Shows Why Agent Tools Need Boring Infrastructure","author":"","date":"May 1, 2026","format":false,"excerpt":"The more agents use real tools, the more they need boring infrastructure: isolation, versioning, profiles, credentials, and repeatable setup.","rel":"","context":"In &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/wade.one\/blog\/category\/ai\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1306,"url":"https:\/\/wade.one\/blog\/2026\/05\/18\/dotnet-10-is-the-c-sharp-upgrade-that-matters\/","url_meta":{"origin":1401,"position":2},"title":".NET 10 Is the C# Upgrade That Matters","author":"","date":"May 18, 2026","format":false,"excerpt":".NET 10 matters for C# teams because it is an LTS release, not just because it brings another round of language and tooling features.","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":629,"url":"https:\/\/wade.one\/blog\/2012\/10\/15\/using-amazon-ec2-with-c-net\/","url_meta":{"origin":1401,"position":3},"title":"Using Amazon EC2 with C# .net","author":"Wade","date":"October 15, 2012","format":false,"excerpt":"Amazon's EC2 platform has a very in-depth console which allows you to do a lot, but what if you want to automate some of the processes or handling servers? I've been working with EC2 a lot recently and automating server starting\/stopping based on parameters of the system we use here\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1399,"url":"https:\/\/wade.one\/blog\/2026\/08\/20\/android-17-lock-free-messagequeue-is-a-real-compatibility-check\/","url_meta":{"origin":1401,"position":4},"title":"Android 17&#8217;s Lock-Free MessageQueue Is a Real Compatibility Check","author":"Wade","date":"August 20, 2026","format":false,"excerpt":"Android 17 improves MessageQueue performance, but apps reflecting into private internals need testing before targeting SDK 37.","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1329,"url":"https:\/\/wade.one\/blog\/2026\/06\/02\/github-copilot-coding-agent-needs-workflow-rules-not-just-access\/","url_meta":{"origin":1401,"position":5},"title":"GitHub Copilot Coding Agent Needs Workflow Rules, Not Just Access","author":"Wade","date":"June 2, 2026","format":false,"excerpt":"GitHub Copilot's coding agent is useful, but I would want explicit workflow rules around permissions, networking, and review before giving it real access.","rel":"","context":"In &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/wade.one\/blog\/category\/ai\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1401","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/comments?post=1401"}],"version-history":[{"count":1,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1401\/revisions"}],"predecessor-version":[{"id":1422,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1401\/revisions\/1422"}],"wp:attachment":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/media?parent=1401"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/categories?post=1401"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/tags?post=1401"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}