長時間タスクの進捗を送信する
完了率の更新をクライアントへストリーミングします。
「長時間タスクの進捗を送信する」はCoddyKit上の無料MCP Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはMCP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 MCP Academyコースには全4レッスンが含まれています。
進捗が重要な理由
ツールの処理に数秒や数分かかる場合、クライアントはただ待ち続けるべきではありません。MCPを使うと、サーバーは進捗を更新して、ユーザーに処理が進んでいることを示せます。
進捗トークン
クライアントは、リクエストにprogressTokenを付けてオプトインします。このトークンがなければ、サーバーは更新の送信を省略します。
コンテキストオブジェクトにアクセスする
Python SDKでは、ツールがContextオブジェクトを受け取ります。これは、進捗を含め、呼び出しの途中でクライアントに応答するための手段です。
from mcp.server.fastmcp import Context
@mcp.tool()
async def crunch(n: int, ctx: Context) -> str:
return "done"report_progressを呼び出す
更新を送信するには、ctx.report_progressを呼び出します。呼び出すたびに、処理がどこまで進んだかをクライアントに伝えます。
await ctx.report_progress(progress=3, total=10)進捗と合計値
total引数はゴールを表します。クライアントは進捗をtotalで割り、ユーザーに完了率のバーを表示できます。
await ctx.report_progress(progress=5, total=10) # 50%ループ内で更新する
報告する自然な場所は、処理のループ内です。各チャンクの処理が終わるたびに更新を1回送信すれば、バーが着実に進みます。
for i, item in enumerate(items):
process(item)
await ctx.report_progress(i + 1, len(items))合計値なしの進捗
最初に合計値が分からない場合もあります。その場合は省略でき、クライアントは正確なバーの代わりに不確定なスピナーを表示します。
await ctx.report_progress(progress=42) # total unknownオプションのメッセージを追加する
多くのSDKバージョンでは、進捗の呼び出しに短いメッセージを付けられます。「ファイルをインデックス化しています」のようなメッセージにより、ユーザーに分かりやすい状況を伝えられます。
await ctx.report_progress(2, 5, message="Fetching pages")これは通知です
進捗はJSON-RPCの通知として送信されるため、応答はなく、処理をブロックすることもありません。更新を送信しながら、ツールは処理を続けられます。
更新頻度を適切に保つ
数千件もの小さな更新をクライアントに送り続けないでください。意味のある段階で報告し、ストリームを有用かつ軽量に保ちます。
進捗と結果
進捗通知は、ツールの戻り値とは別のものです。処理中は更新をストリーム送信し、最後に最終結果を返します。
await ctx.report_progress(10, 10)
return "index built"確認問題
進捗報告がどのように開始されるか、理解度を確認しましょう。
まとめ:進捗
ctx.report_progressをprogressとtotalとともに呼び出し、ループ内で更新し、クライアントにリアルタイムのバーを表示させる方法を学びました。よくできました!
よくある質問
「長時間タスクの進捗を送信する」レッスンは無料ですか?
はい。「長時間タスクの進捗を送信する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、MCP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 MCP Academyコースには全4レッスンが含まれています。
「長時間タスクの進捗を送信する」で何を学びますか?
完了率の更新をクライアントへストリーミングします。 ブラウザで直接実行するハンズオンコードでMCP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
MCP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのMCP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「長時間タスクの進捗を送信する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このMCP Academyレッスンでコードを書いて実行できますか?
はい。すべてのMCP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 長時間タスクの進捗を送信する
- キャンセルリクエストを処理する
- クライアントへの構造化ログ
- 実行時にログレベルを設定する