Model Context Protocol（MCP）が2025年6月18日に改訂されました

Model Context Protocol（MCP）は、AIモデルとアプリケーション間の情報交換を標準化するプロトコルです。2025年6月18日に新しいバージョンがリリースされ、セキュリティ強化と利便性向上に焦点を当てたかなり大きな変更が行われました。

この記事では、前回の2025年3月26日版からの主要な変更点を、実際のTypeScriptスキーマの変更とともに解説します。

## 主要な変更点の概要

今回のアップデートでは以下の変更が実施されました。まずJSON-RPCバッチング機能が削除され、プロトコルが簡素化されました。また、構造化ツール出力やエリシテーション機能といった新機能が追加され、OAuth認証も大幅に強化されています。さらに、リソースリンク機能やHTTPプロトコルヘッダーの改善も含まれています。

## JSON-RPCバッチング機能の削除

最も注目すべき変更の一つが、JSON-RPCバッチング機能の完全削除です。TypeScriptスキーマを比較すると、以下の型定義が削除されていることがわかります。

```typescript
// 2025-03-26版では存在していた型定義（削除済み）
export type JSONRPCBatchRequest = (JSONRPCRequest | JSONRPCNotification)[];
export type JSONRPCBatchResponse = (JSONRPCResponse | JSONRPCError)[];
```

2025-06-18版では、`JSONRPCMessage`型から`JSONRPCBatchRequest`と`JSONRPCBatchResponse`が除外され、よりシンプルな構造になりました。これにより実装の複雑さが軽減され、デバッグも容易になります。

## 構造化ツール出力の新機能

ツールの実行結果において、従来のテキスト形式に加えて構造化された出力が可能になりました。この変更の重要性を理解するため、以前の実装と比較してみましょう。

**2025-03-26版（従来）：**
```typescript
export interface CallToolResult extends Result {
  content: (TextContent | ImageContent | AudioContent | EmbeddedResource)[];
  isError?: boolean;
}
```

主に使われていたのはテキストと画像でしょう。とても貧弱に感じていました。

**2025-06-18版（新版）：**
```typescript
export interface CallToolResult extends Result {
  // コンテンツ形式も拡張された
  content: ContentBlock[];
  
  // 新規追加：構造化された出力
  structuredContent?: { [key: string]: unknown };
  
  isError?: boolean;
}

// ツールの定義も拡張された
export interface Tool extends BaseMetadata {
  name: string;
  description?: string;
  inputSchema: {
    type: "object";
    properties?: { [key: string]: object };
    required?: string[];
  };
  
  // 新規追加：出力スキーマの定義
  outputSchema?: {
    type: "object";
    properties?: { [key: string]: object };
    required?: string[];
  };
  
  annotations?: ToolAnnotations;
  _meta?: { [key: string]: unknown };
}
```

この変更により、ツールは従来の非構造化テキストだけでなく、スキーマで定義された構造化データを返せるようになりました。例えば、データベース検索ツールが以下のような結果を返すことが可能です：

```typescript
// 従来：テキストのみ
{
  content: [{
    type: "text",
    text: "検索結果: ユーザー1(ID: 123, 名前: 田中太郎), ユーザー2(ID: 456, 名前: 佐藤花子)"
  }]
}

// 新版：構造化データ + テキスト
{
  content: [{
    type: "text", 
    text: "2件のユーザーが見つかりました"
  }],
  structuredContent: {
    users: [
      { id: 123, name: "田中太郎", email: "tanaka@example.com" },
      { id: 456, name: "佐藤花子", email: "sato@example.com" }
    ],
    total: 2
  }
}
```

この改善により、クライアント側でデータを直接処理したり、表形式で表示したりといった柔軟な活用が可能になりました。

::: note warn
反面、クライアント側は対応が必要になりますね
:::


## エリシテーション機能の導入

エリシテーション機能は、サーバーがユーザーとの対話中に追加情報を要求できる新しい仕組みです。TypeScriptスキーマには以下の新しい型定義が追加されました。

```typescript
export interface ElicitRequest extends Request {
  method: "elicitation/create";
  params: {
    message: string;
    requestedSchema: {
      type: "object";
      properties: {
        [key: string]: PrimitiveSchemaDefinition;
      };
      required?: string[];
    };
  };
}

export interface ElicitResult extends Result {
  action: "accept" | "decline" | "cancel";
  content?: { [key: string]: string | number | boolean };
}
```

この機能により、ツールの実行過程で不足している情報があった場合、サーバーがクライアントを通じてユーザーに直接質問できるようになります。より対話的で柔軟なAIアプリケーションの構築が可能です。

## OAuth認証の強化

セキュリティ面では、OAuth認証システムが大幅に強化されました。クライアント機能として新たに`elicitation`サポートが追加されています。

```typescript
export interface ClientCapabilities {
  experimental?: { [key: string]: object };
  roots?: {
    listChanged?: boolean;
  };
  sampling?: object;
  // 新規追加
  elicitation?: object;
}
```

また、RFC 8707で定義されるResource Indicatorsの実装が必須となり、悪意のあるサーバーが不正にアクセストークンを取得することを防ぐセキュリティ機能が強化されました。

## メタデータとタイトルフィールドの改善

ユーザーインターフェースの改善を目的として、新しいメタデータ構造が導入されました。

```typescript
export interface BaseMetadata {
  name: string;
  title?: string;
}

export interface Implementation extends BaseMetadata {
  version: string;
}
```

この変更により、プログラム識別子としての`name`と、人間が読みやすい表示名としての`title`が明確に分離されました。リソース、プロンプト、ツールなど多くのインターフェースでこの構造が採用されています。

## リソースリンク機能の追加

ツール実行結果に関連リソースへの参照を含めることができる新機能です。

```typescript
export interface ResourceLink extends Resource {
  type: "resource_link";
}

export type ContentBlock =
  | TextContent
  | ImageContent
  | AudioContent
  | ResourceLink  // 新規追加
  | EmbeddedResource;
```

この機能により、ツールの出力と関連情報への効率的なアクセスを同時に提供できるようになり、より包括的な情報体験を実現できます。

## その他の技術的改善

スキーマ全体で`_meta`フィールドの使用が拡張され、各インターフェースで統一的な拡張メタデータの付加が可能になりました。また、`Annotations`インターフェースに`lastModified`フィールドが追加され、リソースの最終更新時刻をISO 8601形式で記録できるようになりました。

補完機能では、`CompleteRequest`に`context`フィールドが追加され、以前に解決された変数を含めた補完リクエストが可能になり、より文脈を考慮した精度の高い補完機能を実現できます。

## 移行時の考慮事項

既存のMCP実装をアップデートする際は、いくつかの重要な点に注意が必要です。JSON-RPCバッチング機能を使用している場合は、個別のリクエストに分割する作業が必要になります。また、OAuth認証を使用している場合は、Resource Indicatorsの実装が必須となるため、認証フローの見直しが必要です。

新しい構造化ツール出力やエリシテーション機能を活用したい場合は、対応するインターフェースの実装を検討してください。これらの機能は後方互換性を保ちながら追加されているため、段階的な導入が可能です。

## まとめ

MCP 2025-06-18版では、プロトコルの簡素化とセキュリティ強化、そして実用性の向上がバランス良く実現されました。JSON-RPCバッチング機能の削除による実装の簡素化は、開発者にとって大きなメリットとなります。

同時に、構造化ツール出力やエリシテーション機能の追加により、より表現力豊かで対話的なAIアプリケーションの開発が可能になりました。OAuth認証の強化により、セキュリティ面でも大幅な改善が図られています。

これらの変更により、MCPはより安全で使いやすく、実用的なプロトコルへと進化しました。新規導入を検討している方は、これらの新機能を活用した設計を、既存実装をお持ちの方は段階的な移行を検討することをお勧めします。

詳細な変更履歴については、[GitHubの比較ページ](https://github.com/modelcontextprotocol/specification/compare/2025-03-26...2025-06-18)で確認できます。