原文(日本語に翻訳)
MCPのバイナリコンテンツ処理を改善:PDF、Officeドキュメント、音声を返すツールが、生のbase64データを会話コンテキストに貼り付けるのではなく、正しいファイル拡張子でデコードされたバイナリをディスクに保存するようになりました。WebFetchも要約と並行してバイナリレスポンスをディスクに保存するようになりました。
原文(英語)
Improved MCP binary content handling: tools returning PDFs, Office documents, or audio now save decoded bytes to disk with the correct file extension instead of dumping raw base64 into the conversation context. WebFetch also saves binary responses alongside its summary.
概要
MCPツールからPDF、Word文書、Excel、PowerPoint、音声ファイルなどのバイナリデータが返された場合、従来は大量のbase64文字列が会話コンテキストに貼り付けられていました。今回の改善により、これらのバイナリデータは適切なファイル拡張子で自動的にディスクに保存されるようになりました。コンテキストウィンドウの節約とクリーンな会話体験を実現します。
変更前後の比較
変更前 - base64データがコンテキストに展開:
[MCPツール結果]
Content-Type: application/pdf
Data: JVBERi0xLjQKJeLjz9MKNSAwIG9iago8PAovVHlwZSAvUGFnZXMKL0tpZHMgWzYgMCBSXQovQ291bnQgMQo+PgplbmRvYmoK...
(延々と続くbase64文字列 - 数万文字になることも)変更後 - ファイルに保存してパスを提示:
[MCPツール結果]
ファイルを保存しました: /tmp/claude-mcp/report.pdf (2.3 MB)対応ファイル形式
- PDF (
.pdf) - Microsoft Word (
.docx) - Microsoft Excel (
.xlsx) - Microsoft PowerPoint (
.pptx) - 音声ファイル (
.mp3,.wav,.m4aなど) - WebFetchで取得したバイナリレスポンス全般
実践例
MCPツールでPDFレポートを取得する
javascript
// MCPサーバー側(ツール定義)
server.tool("get-monthly-report", async ({ month, year }) => {
const pdfBuffer = await generateReport(month, year);
return {
content: [{
type: "resource",
resource: {
uri: `report-${year}-${month}.pdf`,
mimeType: "application/pdf",
blob: pdfBuffer.toString("base64")
}
}]
};
});# Claude Code内での使用
"今月のレポートを取得してまとめを教えて"
→ Claudeがget-monthly-reportを呼び出し
→ PDFがディスクに保存され、Claudeがその内容を分析して回答WebFetchでPDFをダウンロードして分析
"このURLのPDFを読んで要約して: https://example.com/whitepaper.pdf"
→ WebFetchがPDFをダウンロード
→ ファイルとして保存 + テキスト要約を生成
→ Claudeが内容を分析して回答音声ファイルの処理
"MCPサーバーから会議の音声を取得して内容を転写して"
→ 音声ファイルがディスクに保存
→ Claudeが音声内容を処理(対応している場合)注意点
- 保存先は一時ディレクトリ(
/tmp/claude-mcp/等)が使われます - 大きなファイルの処理でもコンテキストウィンドウが圧迫されなくなります
- MCPサーバー側でバイナリデータをbase64エンコードして返す実装がそのまま機能します(変更不要)
- WebFetchが保存するファイルのパスは会話コンテキストに含まれるため、Claudeが内容を参照できます