📦

WASM対応のMCPサーバ、Wassetteとは

に公開

Wassette とは?

Wassetteは、WebAssembly (Wasm) を活用し、信頼できないツールに信頼できる実行環境を提供する、オープンソースのMCPサーバです。
WebAssemblyランタイムを組み込み、きめ細かなセキュリティポリシーを適用することで、Wassetteはホストシステムに悪影響を与えることなく、サードパーティ製のMCPツールを安全に実行できます。

MCPクライアントがMCPサーバ(Wassette)を使ってTool(Wasmコンポーネント)を呼び出す形ですね。

Github: https://github.com/microsoft/wassette/tree/main
Document: https://microsoft.github.io/wassette/latest/

Wassette の推しポイント

私が使ってみて、いくつかあるのですが2つに絞ってご紹介します

  1. ファイルシステム、ネットワーク、システムリソースに対するきめ細かな権限を明示的に設定できる
  2. ビジネスロジックに集中してTool開発ができる

きめ細やかな権限設定

Wassette のすべてのコンポーネントは、デフォルトでdenyされた権限を持つ安全なサンドボックス内で実行されます。
そのため以下のように権限を付与する必要があります。

Please grant storage read and write permissions to the weather-tool for fs://workspace/

上記はAgentに自然言語で、weather-toolのToolに対してファイルシステムの権限を与えてます。
各コンポーネントに独立した権限を与えられるのは安心です。
例えば、Toolが複数あったときに、全て同じ権限を与えていたら、機密情報を含むファイルにいつの間にかアクセスしてしまっていた、といったリスクを防ぐことができそうですね。

また、上記は自然言語で権限付与しましたが、

CLIや

# Read-only access to a directory
wassette permission grant storage weather-tool fs://workspace/ --access read

# Read and write access
wassette permission grant storage weather-tool fs://workspace/ --access read,write

# Access to a specific file
wassette permission grant storage weather-tool fs://config/app.yaml --access read

YAMLで管理もできます。運用保守的な観点ではすぐに権限を確認できて良いかもしれません。

policy.yaml
version: "1.0"
description: "Weather tool permissions"
permissions:
  storage:
    allow:
      - uri: "fs://workspace/**"
        access: ["read", "write"]
      - uri: "fs://config/app.yaml"
        access: ["read"]
  network:
    allow:
      - host: "api.weather.com"
      - host: "api.openweathermap.org"
  environment:
    allow:
      - key: "API_KEY"
      - key: "WEATHER_API_TOKEN"

ビジネスロジックに集中した開発

ビジネスロジックをWASMコンポーネントとして作ればすぐにToolとして使えるということです。

WASMコンポーネントとは、Wasmをマイクロサービスのようにモジュール化し、異なる言語でも組み合わせて使えるようにする、再利用可能なコンポーネントです。MCP固有のものではなく汎用的な仕組みです。
そのような再利用可能なコンポーネントを、WASMの恩恵を受けながらToolとして使えるというのは大きな魅力です。

WITでWasmコンポーネントのインターフェースを定義し、ロジックを書いてあげればWassetteからToolとして使うことができます!

以下の記事を読んでいただくとよりイメージが湧くかと思います。
https://zenn.dev/mi2valley/articles/0779e5d3b32f06

Discussion