# ルーツ

MCPにおけるルートの理解

ルートとは、MCPにおいてサーバーが動作できる境界を定義する概念です。ルートは、クライアントがサーバーに対して、関連するリソースとその場所を通知する方法を提供します。

## ルートとは？

ルートとは、クライアントがサーバーに対して注目すべき場所として提案するURIです。クライアントがサーバーに接続する際、サーバーが扱うべきルートを宣言します。主にファイルシステムのパスに使用されますが、ルートはHTTP URLを含む有効なURIであれば何でも構いません。

例えば、ルートは以下のようになります。

```plaintext
file:///home/user/projects/myapp
https://api.example.com/v1
```

## ルートを使用する理由？

ルートは、いくつかの重要な目的を果たします。

1. **ガイダンス**: サーバーに関連するリソースと場所を通知します。
2. **明確性**: ルートは、ワークスペースの一部であるリソースを明確にします。
3. **組織化**: 複数のルートを使用することで、異なるリソースを同時に扱うことができます。

## ルートの仕組み

クライアントがルートをサポートする場合：

1. 接続時に `roots` capability を宣言します。
2. サーバーに提案するルートのリストを提供します。
3. ルートが変更された場合にサーバーに通知します（サポートされている場合）。

ルートは情報提供であり、厳密に強制するものではありませんが、サーバーは以下を行う必要があります。

1. 提供されたルートを尊重します。
2. ルートURIを使用してリソースを特定し、アクセスします。
3. ルートの境界内での操作を優先します。

## 一般的なユースケース

ルートは、一般的に以下を定義するために使用されます。

- プロジェクトディレクトリ
- リポジトリの場所
- API endpoints
- コンフィギュレーションの場所
- リソースの境界

## ベストプラクティス

ルートを扱う際には：

1. 必要なリソースのみを提案します。
2. ルートに明確で説明的な名前を使用します。
3. ルートのアクセシビリティを監視します。
4. ルートの変更を適切に処理します。

## 例

以下は、典型的なMCPクライアントがルートを公開する方法です。

```json
{
  "roots": [
    {
      "uri": "file:///home/user/projects/frontend",
      "name": "Frontend Repository"
    },
    {
      "uri": "https://api.example.com/v1",
      "name": "API Endpoint"
    }
  ]
}
```

この構成は、サーバーがローカルリポジトリとAPI endpointの両方に焦点を当て、それらを論理的に分離することを提案しています。
