{"id":98034,"date":"2025-08-06T08:00:00","date_gmt":"2025-08-06T15:00:00","guid":{"rendered":""},"modified":"2025-08-05T09:02:03","modified_gmt":"2025-08-05T16:02:03","slug":"introducing-wassette-webassembly-based-tools-for-ai-agents","status":"publish","type":"post","link":"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/","title":{"rendered":"Introducing Wassette: WebAssembly-based tools for AI agents"},"content":{"rendered":"\n<p>The Azure Core Upstream team is happy to introduce Wassette: a&nbsp;security-oriented&nbsp;runtime that&nbsp;runs&nbsp;WebAssembly&nbsp;Components&nbsp;via Model Context Protocol (MCP). Wassette allows agents to autonomously fetch <a href=\"https:\/\/component-model.bytecodealliance.org\/design\/why-component-model.html\" target=\"_blank\">WebAssembly (Wasm) Components<\/a>&nbsp;from&nbsp;<a href=\"https:\/\/opensource.microsoft.com\/blog\/2024\/09\/25\/distributing-webassembly-components-using-oci-registries\/\" target=\"_blank\">Open Container Initiative (OCI) registries<\/a>&nbsp;and execute them as needed. It\u2019s built on the <a href=\"https:\/\/wasmtime.dev\" target=\"_blank\" rel=\"noreferrer noopener\">Wasmtime runtime<\/a>, offering secure sandboxing on par with modern browser engines. To enhance security, Wassette includes a fine-grained, deny-by-default permission system, allowing interactive control over access to system resources.<\/p>\n\n\n\n<p>Wassette acts as a bridge between Wasm Components and the&nbsp;<a href=\"https:\/\/modelcontextprotocol.io\/\" target=\"_blank\">Model Context Protocol<\/a>. It knows how to interpret a Wasm Component\u2019s <a href=\"https:\/\/github.com\/WebAssembly\/component-model\/blob\/main\/design\/mvp\/WIT.md\" target=\"_blank\" rel=\"noreferrer noopener\">typed library interfaces<\/a> and expose them as MCP tools. Wassette is written in Rust and installable as a standalone binary with zero runtime dependencies. Getting started with Wassette is quick, easy, and works with any AI agent that supports MCP.<\/p>\n\n\n<div class=\"wp-block-msxcm-cta-block\" data-moray data-bi-an=\"CTA Block\">\n\t<div class=\"card d-block mx-ng mx-md-0\">\n\t\t<div class=\"row no-gutters material-color-brand-light bg-fabric-white\">\n\n\t\t\t\t\t\t\t<div class=\"col-md-4\">\n\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/01\/CLO25-Security-Lifestyle-Getty-1084167628-1024x683.jpg\" class=\"card-img img-object-cover\" alt=\"Computer programmer working with male colleague in office\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/01\/CLO25-Security-Lifestyle-Getty-1084167628-1024x683.jpg 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/01\/CLO25-Security-Lifestyle-Getty-1084167628-388x259.jpg 388w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/01\/CLO25-Security-Lifestyle-Getty-1084167628-768x513.jpg 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/01\/CLO25-Security-Lifestyle-Getty-1084167628-1536x1025.jpg 1536w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/01\/CLO25-Security-Lifestyle-Getty-1084167628-2048x1367.jpg 2048w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/01\/CLO25-Security-Lifestyle-Getty-1084167628-450x300.jpg 450w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/01\/CLO25-Security-Lifestyle-Getty-1084167628-650x434.jpg 650w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t<div class=\"d-flex col-md\">\n\t\t\t\t<div class=\"card-body align-self-center p-4 p-md-5\">\n\t\t\t\t\t\n\t\t\t\t\t<h2>Wassette on GitHub<\/h2>\n\n\t\t\t\t\t<div class=\"mb-3\">\n\t\t\t\t\t\t<p>Open source AI sandboxing tool for MCP workloads.<\/p>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"link-group\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/github.com\/microsoft\/wassette\" class=\"btn btn-link text-decoration-none p-0\" target=\"_blank\">\n\t\t\t\t\t\t\t\t<span>Learn more<\/span>\n\t\t\t\t\t\t\t\t<span class=\"glyph-append glyph-append-chevron-right glyph-append-xsmall\"><\/span>\n\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<p>\n  In this post we\u2019ll discuss <a id=\"post-98034-_Int_eHuHVs0V\"><\/a>Wassette\u2019s design, show you how to get started with a basic Wasm Component in GitHub Copilot in VS Code, and how to run a more complicated component that uses the permission system. <a id=\"post-98034-OLE_LINK1\"><\/a>If you have&nbsp;<a href=\"https:\/\/code.visualstudio.com\/download\" target=\"_blank\">VS Code<\/a>&nbsp;with&nbsp;<a href=\"https:\/\/code.visualstudio.com\/docs\/copilot\/overview\" target=\"_blank\">GitHub Copilot<\/a>&nbsp;installed, you can follow along and in just a few minutes you will have run your first Wasm Component-based tool.\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"why-webassembly-components\">Why WebAssembly Components?<\/h2>\n\n\n\n<p>\n  At the most basic level, the goal of an AI agent is to successfully complete any computer-based task you hand it, with minimal human intervention. To make this a reality, agents need more than to be able to complete tasks using the tools they already have installed; they must also be able to identify which tools they are missing and learn how to get them. We can think of this as teaching agents how to go on supply runs: recognizing what is needed and figuring out how to get it.\n<\/p>\n\n\n\n<p>\n  To do this, agents need to be able to autonomously find, vet, and install tools\u2014and this needs to happen&nbsp;<em>securely<\/em>&nbsp;and&nbsp;<em>transparently<\/em>, prompting users for consent at key moments. When interacting with cloud-based services, it makes sense if the tools themselves are hosted in the cloud or by that service. But to run third-party tools locally, they must be strongly isolated using a security sandbox, with tight controls on which resources are shared.\n<\/p>\n\n\n\n<p>\n  Wasm Components are perfect for this. Components provide workload isolation on par with modern browser engines, which is made possible by a deny-by-default&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Capability-based_security\" target=\"_blank\">capability system<\/a>. Components can also be cryptographically signed using tools like&nbsp;<a href=\"https:\/\/github.com\/notaryproject\/notation\" target=\"_blank\">Notation<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/github.com\/sigstore\/cosign\" target=\"_blank\">Cosign<\/a>. And we can execute Components in&nbsp;<a href=\"https:\/\/wasmtime.dev\/\" target=\"_blank\">Wasmtime<\/a>: a WebAssembly runtime which prioritizes&nbsp;<a href=\"https:\/\/bytecodealliance.org\/articles\/security-and-correctness-in-wasmtime\" target=\"_blank\">security and correctness<\/a>, and is conveniently available as a&nbsp;<a href=\"https:\/\/docs.rs\/wasmtime\/34.0.1\/wasmtime\/\" target=\"_blank\">Rust library<\/a>.\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"getting-started-with-wassette\">Getting started with Wassette<\/h2>\n\n\n\n<p>Let\u2019s set up Wassette on your machine. To follow along, make sure you have&nbsp;<a href=\"https:\/\/code.visualstudio.com\/download\" target=\"_blank\" rel=\"noreferrer noopener\">VS Code<\/a>&nbsp;with&nbsp;<a href=\"https:\/\/code.visualstudio.com\/docs\/copilot\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub Copilot<\/a>&nbsp;installed. Go ahead and do that first if you haven\u2019t already. Next, let\u2019s fetch the latest Wassette release and install it locally by running the following one-liner:<\/p>\n\n\n\n<p><code>$ curl -fsSL https:\/\/raw.githubusercontent.com\/microsoft\/wassette\/main\/install.sh | bash <\/code><\/p>\n\n\n\n<p>If the install path isn\u2019t already included in your system\u2019s path, you may be prompted to add it to your shell profile and reload your shell. To confirm that Wassette has been installed correctly, run the Wassette command in your terminal. <\/p>\n\n\n\n<p>\n  We\u2019re now ready to teach GitHub Copilot in VS Code how to use Wassette. We can do this from the command line using the code command:\n<\/p>\n\n\n\n<p><code>$ code --add-mcp '{\"name\":\"Wassette\",\"command\":\"wassette\",\"args\":[\"serve\",\"--stdio\"]}' <\/code><\/p>\n\n\n\n<p>\n  And with that, Copilot is now ready to use Wassette! Now that we are set up, let\u2019s go ahead and open a VS Code instance and navigate to the Copilot panel. In Copilot, we can enter Agent Mode by pressing&nbsp;Command+Shift+I&nbsp;or&nbsp;Ctrl+Shift+I, or by toggling it from the bottom left of the prompt window:\n<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/a-screenshot-of-a-chat-ai-generated-content-may-b.webp\" alt=\"Screenshot of GitHub Copilot chat interface in VS Code showing the Agent Mode toggle and chat input area.\" class=\"wp-image-98037 webp-format\" srcset=\"\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/a-screenshot-of-a-chat-ai-generated-content-may-b.webp\"><\/figure>\n\n\n\n<p>\n  You can confirm that Wassette has been loaded into VS Code by clicking the tool icon in the bottom-right corner of the chat window. If everything has gone well, Wassette will show up in the list of tools.\n<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-2.webp\" alt=\"Screenshot of GitHub Copilot chat interface showing the tools list with Wassette listed as an available MCP tool.\" class=\"wp-image-98038 webp-format\" srcset=\"\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-2.webp\"><\/figure>\n\n\n\n<p><strong>Tip<\/strong>: If it doesn\u2019t show up in your tools list after installation, try reloading GitHub Copilot\u2019s tools by clicking the reload button in the bottom right corner.<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-3.webp\" alt=\"Screenshot of VS Code interface showing the reload button in the bottom right corner of the chat window for refreshing GitHub Copilot tools.\" class=\"wp-image-98039 webp-format\" srcset=\"\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-3.webp\"><\/figure>\n\n\n\n<p>\n  With Wassette set up, we\u2019re ready to load our first tool. By default, GitHub Copilot can only tell the current date, but not the current time. Let&#8217;s teach Copilot how to do that by loading a time component from GitHub\u2019s package registry:\n<\/p>\n\n\n\n<p><code>Please load the time component from oci:\/\/ghcr.io\/yoshuawuyts\/time:latest<\/code><\/p>\n\n\n\n<p>\n  Before Copilot installs anything using Wassette, it will first ask us to confirm it\u2019s going to load the right component:\n<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-4.webp\" alt=\"Screenshot of GitHub Copilot confirmation dialog asking user permission before loading the time component from the OCI registry.\" class=\"wp-image-98040 webp-format\" srcset=\"\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-4.webp\"><\/figure>\n\n\n\n<p>\n  If the path looks good, we can press \u201ccontinue\u201d and the component should be installed in just a few seconds.\n<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-5.webp\" alt=\"Screenshot showing successful installation confirmation message after the time component has been loaded into Wassette.\" class=\"wp-image-98041 webp-format\" srcset=\"\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-5.webp\"><\/figure>\n\n\n\n<p>Now that we\u2019ve installed our component, we\u2019re ready to run it. Let\u2019s ask Copilot what the current time is: <\/p>\n\n\n\n<p><code>\"What is the current time?\" <\/code><\/p>\n\n\n\n<p>\n  This will prompt GitHub Copilot to call Wassette, which has the time server installed:\n<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-6.webp\" alt=\"Screenshot of GitHub Copilot response showing the current time after successfully calling the installed time component through Wassette.\" class=\"wp-image-98042 webp-format\" srcset=\"\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-6.webp\"><\/figure>\n\n\n\n<p>And just like that, we\u2019ve added a new capability to Copilot using a WebAssembly Component.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"capability-based-security-for-every-tool\">Capability-based security for every tool<\/h2>\n\n\n\n<p>\n  To protect users from faulty or potentially malicious tools, Wassette relies on the Wasmtime security sandbox. This sandbox applies the principle of least privilege: Components loaded in Wasmtime can\u2019t access system resources without explicit access permissions. This makes sure that, for example, the handy grammar plugin we installed doesn&#8217;t attempt to exfiltrate our server\u2019s SSH keys behind our backs.\n<\/p>\n\n\n\n<p>\n  To get a sense of how this works, let\u2019s load a Wasm Component that will make network requests for us on our behalf. By default, GitHub Copilot ships with its own fetch tool. To guarantee it will use the one we\u2019re providing it, let\u2019s start by disabling the built-in fetch and browser tools from the drop-down:\n<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/a-screenshot-of-a-computer-ai-generated-content-m.webp\" alt=\"Screenshot of VS Code interface showing the tools dropdown menu with built-in fetch and browser tools that can be disabled.\" class=\"wp-image-98043 webp-format\" srcset=\"\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/a-screenshot-of-a-computer-ai-generated-content-m.webp\"><\/figure>\n\n\n\n<p>\n  Once we\u2019ve pressed \u201cOK\u201d, we\u2019re ready to continue. With the built-in network tools disabled, let\u2019s re-teach GitHub Copilot how to make HTTP requests by loading our own tool, using the following prompt:\n<\/p>\n\n\n\n<p><code>Please load the fetch component from oci:\/\/ghcr.io\/yoshuawuyts\/fetch:latest <\/code><\/p>\n\n\n\n<p>\n  Just like with the time server, Copilot will ask us to confirm it\u2019s found the right tool before continuing:\n<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-8.webp\" alt=\"Screenshot of GitHub Copilot confirmation dialog asking user permission before loading the fetch component from the OCI registry.\" class=\"wp-image-98044 webp-format\" srcset=\"\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-8.webp\"><\/figure>\n\n\n\n<p>\n  Once we\u2019ve pressed \u201cContinue\u201d and the component is installed, we\u2019re ready to make our first HTTP request. Before we do this, we\u2019d like to learn more about storing components in OCI registries\u2014let\u2019s ask GitHub Copilot to give us a summary of a blog post on this topic:\n<\/p>\n\n\n\n<p><code>Please provide a concise summary of <a href=\"https:\/\/opensource.microsoft.com\/blog\/2024\/09\/25\/distributing-webassembly-components-using-oci-registries\/\">https:\/\/opensource.microsoft.com\/blog\/2024\/09\/25\/distributing-webassembly-components-using-oci-registries\/<\/a><\/code><\/p>\n\n\n\n<p>\n  Components in Wassette are not allowed to access arbitrary domains for security reasons. The first thing GitHub Copilot will do is ask us to grant the component permission to make requests to \u201copensource.microsoft.com\u201d, since that\u2019s the domain of the post.\n<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-9.webp\" alt=\"Screenshot of Wassette permission request dialog asking user to grant the fetch component access to opensource.microsoft.com domain.\" class=\"wp-image-98045 webp-format\" srcset=\"\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-9.webp\"><\/figure>\n\n\n\n<p>\n  Once we\u2019ve granted our fetch component the right permissions, GitHub Copilot is ready to use it to make the request. \n<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-10.webp\" alt=\"Screenshot of GitHub Copilot confirming it will proceed with the HTTP request after receiving permission to access the specified domain.\" class=\"wp-image-98046 webp-format\" srcset=\"\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-10.webp\"><\/figure>\n\n\n\n<p>\n  Once we press \u201cContinue\u201d, the fetch component will get the content, and Copilot will summarize the article for us:\n<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-11.webp\" alt=\"Screenshot of GitHub Copilot providing a concise summary of the blog post about distributing WebAssembly components using OCI registries.\" class=\"wp-image-98047 webp-format\" srcset=\"\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2025\/08\/word-image-98034-11.webp\"><\/figure>\n\n\n\n<p>\n  Congratulations! You\u2019ve just loaded your second Wasm Component and used capability-based security to manage its network permissions. With Wassette, even if a faulty or malicious third-party tool is accidentally loaded and gains access to sensitive data, it would still be difficult for a potential attacker to extract that data.\n<\/p>\n\n\n\n<p>\n  If you try to recreate this exact flow yourself, be aware that different models may produce different outcomes. Sometimes agents will need a little nudge or hint to fix the permission errors. We\u2019re working to make this more consistent in Wassette by providing better error messages. But until then, be aware you may need to sprinkle in the occasional: \u201cplease fix the permission errors.\u201d\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"next-stop-smarter-tool-discovery\">Next stop: Smarter tool discovery<\/h2>\n\n\n\n<p>There is more to Wassette than we can reasonably cover in a single post. For example: Wassette does not just run locally\u2014it can also be used to host Wasm Component-based MCP tools over the network. We\u2019re&nbsp;also working on tools&nbsp;that make porting existing&nbsp;applications&nbsp;to&nbsp;Wasm&nbsp;Components easy, removing the biggest barrier&nbsp;to adoption.&nbsp;We\u2019ll&nbsp;be sharing more on both soon.<\/p>\n\n\n\n<p>We believe that if an agent is missing the tools it needs to complete a task, it should be able to autonomously find those tools and load them. We&#8217;ve shown that while Wassette can get us really close to making that a reality, it\u2019s not quite all the way there yet. The last part we\u2019re missing to realize this vision is to teach Wassette how to find&nbsp;Wasm&nbsp;Components&nbsp;in&nbsp;OCI registries.<\/p>\n\n\n\n<p>You can learn more about <a href=\"https:\/\/github.com\/microsoft\/wassette\">Wassette on GitHub<\/a>. We have detailed installation instructions for various conversational agents, including <a href=\"https:\/\/github.com\/microsoft\/wassette\/blob\/main\/docs\/mcp-clients.md#visual-studio-code\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub Copilot in VS Code<\/a>, <a href=\"https:\/\/github.com\/microsoft\/wassette\/blob\/main\/docs\/mcp-clients.md#claude-code\" target=\"_blank\" rel=\"noreferrer noopener\">Claude Code<\/a>, <a href=\"https:\/\/github.com\/microsoft\/wassette\/blob\/main\/docs\/mcp-clients.md#cursor\" target=\"_blank\" rel=\"noreferrer noopener\">Cursor<\/a>, and <a href=\"https:\/\/github.com\/microsoft\/wassette\/blob\/main\/docs\/mcp-clients.md#gemini-cli\" target=\"_blank\" rel=\"noreferrer noopener\">Gemini CLI<\/a>. To start building your own components, check out our examples for <a href=\"https:\/\/github.com\/microsoft\/wassette\/tree\/main\/examples\/eval-py\" target=\"_blank\" rel=\"noreferrer noopener\">Python<\/a>, <a href=\"https:\/\/github.com\/microsoft\/wassette\/tree\/main\/examples\/get-weather-js\" target=\"_blank\" rel=\"noreferrer noopener\">JavaScript<\/a>, <a href=\"https:\/\/github.com\/microsoft\/wassette\/tree\/main\/examples\/filesystem-rs\" target=\"_blank\" rel=\"noreferrer noopener\">Rust<\/a>, and <a href=\"https:\/\/github.com\/microsoft\/wassette\/tree\/main\/examples\/gomodule-go\" target=\"_blank\" rel=\"noreferrer noopener\">Go<\/a>. And if you\u2019d like to talk to us, join the Wassette channel on the <a href=\"https:\/\/discord.gg\/microsoft-open-source\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft Open Source Discord<\/a>. We look forward to seeing what you build with Wassette.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wassette empowers AI agents to securely fetch and run Wasm tools, enabling dynamic, permission-controlled capabilities with zero dependencies.<\/p>\n","protected":false},"author":6191,"featured_media":95491,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"msxcm_post_with_no_image":false,"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"post_tag":[400],"content-type":[340],"topic":[2252],"programming-languages":[],"coauthors":[2590],"class_list":["post-98034","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-vs-code","content-type-tutorials-and-demos","topic-tools","review-flag-1593580362-584","review-flag-1593580428-734","review-flag-1593580419-521","review-flag-1593580771-946","review-flag-disab-1706240532-905","review-flag-new-1593580248-669"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Introducing Wassette: WebAssembly-based tools for AI agents | Microsoft Open Source Blog<\/title>\n<meta name=\"description\" content=\"Wassette is a secure, open-source Model Context Protocol server that leverages WebAssembly to provide a trusted execution environment for untrusted tools.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing Wassette: WebAssembly-based tools for AI agents | Microsoft Open Source Blog\" \/>\n<meta property=\"og:description\" content=\"Wassette is a secure, open-source Model Context Protocol server that leverages WebAssembly to provide a trusted execution environment for untrusted tools.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Open Source Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-06T15:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SUR22_Laptop4_COMMR_HigherEd_Contextual_192_RGB.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1170\" \/>\n\t<meta property=\"og:image:height\" content=\"640\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Yosh Wuyts\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:site\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Yosh Wuyts\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 min read\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/\"},\"author\":[{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/author\/yosh-wuyts\/\",\"@type\":\"Person\",\"@name\":\"Yosh Wuyts\"}],\"headline\":\"Introducing Wassette: WebAssembly-based tools for AI agents\",\"datePublished\":\"2025-08-06T15:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/\"},\"wordCount\":1521,\"publisher\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SUR22_Laptop4_COMMR_HigherEd_Contextual_192_RGB.webp\",\"keywords\":[\"VS Code\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/\",\"name\":\"Introducing Wassette: WebAssembly-based tools for AI agents | Microsoft Open Source Blog\",\"isPartOf\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SUR22_Laptop4_COMMR_HigherEd_Contextual_192_RGB.webp\",\"datePublished\":\"2025-08-06T15:00:00+00:00\",\"description\":\"Wassette is a secure, open-source Model Context Protocol server that leverages WebAssembly to provide a trusted execution environment for untrusted tools.\",\"breadcrumb\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/#primaryimage\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SUR22_Laptop4_COMMR_HigherEd_Contextual_192_RGB.webp\",\"contentUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SUR22_Laptop4_COMMR_HigherEd_Contextual_192_RGB.webp\",\"width\":1170,\"height\":640,\"caption\":\"Three people collaborating in an office on laptops.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/opensource.microsoft.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing Wassette: WebAssembly-based tools for AI agents\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#website\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/\",\"name\":\"Microsoft Open Source Blog\",\"description\":\"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability\",\"publisher\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\",\"name\":\"Microsoft Open Source Blog\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"contentUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"width\":259,\"height\":194,\"caption\":\"Microsoft Open Source Blog\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/OpenAtMicrosoft\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Introducing Wassette: WebAssembly-based tools for AI agents | Microsoft Open Source Blog","description":"Wassette is a secure, open-source Model Context Protocol server that leverages WebAssembly to provide a trusted execution environment for untrusted tools.","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:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/","og_locale":"en_US","og_type":"article","og_title":"Introducing Wassette: WebAssembly-based tools for AI agents | Microsoft Open Source Blog","og_description":"Wassette is a secure, open-source Model Context Protocol server that leverages WebAssembly to provide a trusted execution environment for untrusted tools.","og_url":"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/","og_site_name":"Microsoft Open Source Blog","article_published_time":"2025-08-06T15:00:00+00:00","og_image":[{"width":1170,"height":640,"url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SUR22_Laptop4_COMMR_HigherEd_Contextual_192_RGB.png","type":"image\/png"}],"author":"Yosh Wuyts","twitter_card":"summary_large_image","twitter_creator":"@OpenAtMicrosoft","twitter_site":"@OpenAtMicrosoft","twitter_misc":{"Written by":"Yosh Wuyts","Est. reading time":"6 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/#article","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/"},"author":[{"@id":"https:\/\/opensource.microsoft.com\/blog\/author\/yosh-wuyts\/","@type":"Person","@name":"Yosh Wuyts"}],"headline":"Introducing Wassette: WebAssembly-based tools for AI agents","datePublished":"2025-08-06T15:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/"},"wordCount":1521,"publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SUR22_Laptop4_COMMR_HigherEd_Contextual_192_RGB.webp","keywords":["VS Code"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/","url":"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/","name":"Introducing Wassette: WebAssembly-based tools for AI agents | Microsoft Open Source Blog","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/#primaryimage"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SUR22_Laptop4_COMMR_HigherEd_Contextual_192_RGB.webp","datePublished":"2025-08-06T15:00:00+00:00","description":"Wassette is a secure, open-source Model Context Protocol server that leverages WebAssembly to provide a trusted execution environment for untrusted tools.","breadcrumb":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/#primaryimage","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SUR22_Laptop4_COMMR_HigherEd_Contextual_192_RGB.webp","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SUR22_Laptop4_COMMR_HigherEd_Contextual_192_RGB.webp","width":1170,"height":640,"caption":"Three people collaborating in an office on laptops."},{"@type":"BreadcrumbList","@id":"https:\/\/opensource.microsoft.com\/blog\/2025\/08\/06\/introducing-wassette-webassembly-based-tools-for-ai-agents\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/opensource.microsoft.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing Wassette: WebAssembly-based tools for AI agents"}]},{"@type":"WebSite","@id":"https:\/\/opensource.microsoft.com\/blog\/#website","url":"https:\/\/opensource.microsoft.com\/blog\/","name":"Microsoft Open Source Blog","description":"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability","publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/opensource.microsoft.com\/blog\/#organization","name":"Microsoft Open Source Blog","url":"https:\/\/opensource.microsoft.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","width":259,"height":194,"caption":"Microsoft Open Source Blog"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/OpenAtMicrosoft"]}]}},"msxcm_display_generated_audio":false,"msxcm_animated_featured_image":null,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Open Source Blog","distributor_original_site_url":"https:\/\/opensource.microsoft.com\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/98034","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/users\/6191"}],"replies":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/comments?post=98034"}],"version-history":[{"count":19,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/98034\/revisions"}],"predecessor-version":[{"id":98068,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/98034\/revisions\/98068"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media\/95491"}],"wp:attachment":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media?parent=98034"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/post_tag?post=98034"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/content-type?post=98034"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/topic?post=98034"},{"taxonomy":"programming-languages","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/programming-languages?post=98034"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/coauthors?post=98034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}