1. はじめに: サーバーって何だろう?
皆さん、こんにちは!「手を動かして学ぶ!MCPステップバイステップ実践ガイド for Beginners」の第2回へようこそ!
前回のVol.1では、このシリーズの旅の目的であるMCP(Model Context Protocol)がどんなものか、その概要をお話ししましたね。そして、旅の相棒となるプログラミング言語Pythonと、作業場となる開発環境の準備を一緒に行いました。もし、まだVol.1を読んでいない方や、環境準備が済んでいない方は、ぜひ先にそちらをチェックしてみてください。準備万端で今回の冒険に臨みましょう!
さて、今回のテーマは 「サーバー」 です。 「サーバー」という言葉、聞いたことはあるけれど、なんだか難しそう…と感じる方もいるかもしれません。でも、大丈夫!このシリーズでは、サーバーを「お客さん(リクエスト)を待っているお店の窓口」のような、もっと身近なものとして捉えていきます。
今回のVol.2では、まず「サーバーって、一体どんな役割をしているの?」という基本的なところから解説し、その後、Pythonを使って、本当に簡単な「MCPサーバー」の原型を、皆さんの手で実際に作って動かしてみるところまでをゴールにします。
サーバーと聞くと、大きな機械室にあるような巨大なコンピューターを想像するかもしれませんが、今回私たちが作るのは、皆さんのパソコンの中で動く、小さな小さなサーバープログラムです。でも、この小さな一歩が、MCPやウェブの仕組みを理解する上で、とても大きな経験になるはずです。
それでは、ワクワクするサーバー作りの冒険に、一緒に出発しましょう!
2. MCPにおける「サーバー」ってどんな役割? ~情報提供のプロフェッショナル~
まずは、「サーバー」という言葉の基本的な意味から押さえていきましょう。
サーバーとクライアント:お店とお客さんの関係
コンピューターの世界で「サーバー (Server)」とは、一般的に 「サービスを提供する側」のコンピューターやプログラムのことを指します。一方、そのサービスを「利用する側(要求する側)」を「クライアント (Client)」 と呼びます。
この関係は、身近な例で言うと、レストランの「お店(サーバー)」と「お客さん(クライアント)」の関係に似ています。
- お客さん(クライアント): レストランに来て、「ハンバーグをください」と注文(リクエスト)します。
- お店(サーバー): お客さんの注文(リクエスト)を受け付け、キッチンでハンバーグを調理し、出来上がった料理(レスポンス)をお客さんに提供します。
インターネットの世界でも、このサーバーとクライアントの関係はあらゆるところで見られます。
-
ウェブサイトの閲覧:
- あなたのパソコンのウェブブラウザ(例:Google Chrome、Safariなど)が クライアント です。
- あなたが見たいウェブサイトのデータ(HTMLファイル、画像など)を持っているコンピューターが ウェブサーバー です。
- ブラウザが「このウェブページを見せてください」とウェブサーバーにリクエストを送り、ウェブサーバーがそのページのデータをレスポンスとして返すことで、あなたはウェブサイトを見ることができます。
-
メールの送受信:
- あなたのメールソフト(例:Outlook、Gmailアプリなど)が クライアント です。
- メールの送受信を管理しているコンピューターが メールサーバー です。
- メールソフトが「新しいメールはありますか?」とメールサーバーにリクエストを送り、メールサーバーが新着メールをレスポンスとして返したり、「このメールを送ってください」とリクエストしてメールを送信したりします。
このように、サーバーはクライアントからの「お願い(リクエスト)」を常に待ち受けていて、そのお願いに応じた「サービス(レスポンス)」を提供する、いわば「情報提供のプロフェッショナル」なのです。
MCPサーバーのお仕事:モデルとコンテキストの情報窓口
では、MCP(Model Context Protocol)の世界におけるサーバーは、どんな役割を担うのでしょうか?
Vol.1で、MCPは「様々なモデル(モノやコト)が、自分たちの状況(コンテキスト)を伝え合ったり、操作し合ったりするための共通のルール」だとお話ししましたね。
このMCPの世界で、MCPサーバー は、特定の「モデル」に関する情報や、そのモデルの「コンテキスト(現在の状況)」を保持し、管理する役割を担います。そして、クライアント(例えば、他のシステムやユーザーインターフェースなど)からの問い合わせや操作要求に応えるのです。
例えば、スマートホームの例で考えてみましょう。
- MCPサーバー: リビングの「エアコン」(モデル)の状態を管理している。現在の設定温度、運転モード、風量といったコンテキスト情報を持っている。
- クライアント: あなたが使うスマートフォンのアプリ。
この場合、以下のようなやり取りが考えられます。
-
クライアント(スマホアプリ)
MCPサーバーに「エアコンの現在の設定温度を教えてください」とリクエストを送る。 -
MCPサーバー
持っている情報を確認し、「現在の設定温度は25度です」とレスポンスを返す。 -
クライアント(スマホアプリ)
MCPサーバーに「エアコンの設定温度を23度に変更してください」とリクエストを送る。 -
MCPサーバー
エアコンの設定温度を実際に変更(あるいは変更するよう指示を出し)、成功したら「設定温度を23度に変更しました」とレスポンスを返す。
このように、MCPサーバーは、モデルとコンテキストに関する「情報窓口」となり、クライアントからの様々なリクエストに対応するのです。
リクエストとレスポンス:コミュニケーションの基本
サーバーとクライアントの間で行われるこの「お願い(リクエスト)」と「応答(レスポンス)」のやり取りは、MCPに限らず、ネットワークを通じたコミュニケーションの基本です。
- リクエスト (Request): クライアントがサーバーに対して行う要求。「この情報が欲しい」「この操作をしてほしい」など。
- レスポンス (Response): リクエストに対してサーバーがクライアントに返す応答。「はい、この情報です」「操作が完了しました」「エラーが発生しました」など。
どのような情報を、どのような形式でリクエストに含めるのか、そしてサーバーはどのような形式でレスポンスを返すのか、といった細かいルールは、使用するプロトコル(約束事)によって定められています。MCPも、このリクエストとレスポンスの具体的な形式や手順を定めたプロトコルの一つなのです。
今回私たちが作るのは、このMCPサーバーの、本当に最初の、そして最もシンプルな形です。特定の「URL(インターネット上の住所のようなもの)」にお客さん(クライアント)がアクセスしてきたら、決まったメッセージを返すだけの、小さな「窓口」を作ってみましょう。
3. Flask(フラスク)ライブラリを使ってみよう! ~Pythonで手軽にサーバーを作る魔法の道具~
さて、MCPサーバーの役割がなんとなくイメージできたところで、次はそのサーバーを実際に作るための「道具」についてお話しします。このシリーズでは、Pythonの 「Flask(フラスク)」 というライブラリを使って、MCPサーバーを構築していきます。
ライブラリのおさらいと「Webフレームワーク」という新しい仲間
Vol.1で、Pythonには「ライブラリ」という便利なプログラム部品がたくさんあるとお話ししましたね。ライブラリは、よく使う機能があらかじめまとめられたもので、料理で言えば便利な調味料セットや調理器具のようなものです。
今回紹介するFlaskも、Pythonのライブラリの一種ですが、特に「サーバープログラム」のようなウェブ上で動作するアプリケーションを作るのを助けてくれる種類のライブラリで、これらを総称して 「Webフレームワーク (Web Framework)」 と呼びます。
Webフレームワークは、ウェブアプリケーションを作る上での「骨組み」や「共通して必要になる機能(例えば、リクエストの受け取り方、URLの処理の仕方、クライアントへの応答の仕方など)」を提供してくれます。これを使うことで、開発者は車輪の再発明(既に誰かが作ったものと同じものをまた一から作ること)をせずに済み、アプリケーション固有のロジック(本当に作りたい機能)の開発に集中できるのです。
例えるなら、家を建てる時に、土地の造成や基礎工事、柱や壁の基本的な構造があらかじめキットとして用意されていて、自分は内装や家具の配置に専念できる、といったイメージです。
Flaskってどんなもの?シンプルで強力な味方
PythonのWebフレームワークには、いくつか有名なものがあります。例えば、大規模で多機能なウェブサイトを作るのによく使われる「Django(ジャンゴ)」もその一つです。しかし、このシリーズでは 「Flask(フラスク)」 を選びました。その理由は以下の通りです。
- シンプルで軽量: Flaskは「マイクロフレームワーク」とも呼ばれ、非常にシンプルで、コアとなる機能は最小限に抑えられています。そのため、学習を始める際のハードルが低く、初心者の方でも比較的早く基本的な使い方を理解しやすいのが特徴です。
- 始めやすい: 小さなプログラムであれば、本当に数行のコードでウェブサーバーを動かすことができます。これは、最初に「動いた!」という成功体験を得る上で非常に重要です。
- 柔軟性が高い: 基本はシンプルですが、必要に応じて様々な「拡張機能(Flask専用の追加ライブラリのようなもの)」を組み込むことで、より複雑な機能も実現できます。必要なものだけを選んで使えるので、無駄がありません。
- APIサーバー構築に適している: 今回私たちが作ろうとしているMCPサーバーは、主にプログラム(クライアント)からのリクエストに応じてデータをやり取りする「APIサーバー(Application Programming Interface Server)」の一種です。Flaskは、このようなAPIサーバーを構築するのにも非常に適しています。
例えるなら、Djangoがフルコース料理を作るための豪華なキッチンセットだとすれば、Flaskは手軽に美味しい一品料理を作るための、コンパクトで使い勝手の良い調理器具セット、といったところでしょうか。
Flaskをインストールしよう!冒険の新しい装備を手に入れる
それでは、この便利なFlaskを私たちの開発環境にインストールしましょう。 Vol.1で準備したPythonの仮想環境を使います。まだ仮想環境を有効化していない場合は、まず有効化してくださいね。
1. 仮想環境の有効化(おさらい)
コマンドプロンプト(Windows)またはターミナル(macOS/Linux)を開き、Vol.1で作成したプロジェクトフォルダ(例:mcp_beginner_guide
)に移動します。そして、以下のコマンドで仮想環境(例:mcp_env
)を有効化します。
# Windowsの場合 (コマンドプロンプト)
mcp_env\Scripts\activate
# macOS/Linuxの場合
source mcp_env/bin/activate
コマンドプロンプトやターミナルの行頭に (mcp_env
) のように仮想環境名が表示されればOKです。
2. Flaskのインストール
仮想環境が有効になっている状態で、以下のコマンドを実行します。
pip install Flask
pip
とは、Pythonのパッケージ(ライブラリやフレームワークなど、他の人が作って公開している便利なプログラム部品のことです)をインストールしたり管理したりするための公式ツールです。「Pip Installs Packages」の略とも言われています。
pip install Flask
は、「pipさん、Flaskというパッケージをインターネットから探してきて、この仮想環境にインストールしてください」というお願いのコマンドです。
コマンドを実行すると、Flaskのダウンロードとインストールが自動的に行われます。特にエラーメッセージが表示されず、最後に「Successfully installed Flask-x.x.x ...」(x.x.xはバージョン番号)のようなメッセージが出れば、インストールは成功です!
これで、Flaskという強力な武器を手に入れることができました。いよいよ、これを使って初めてのサーバーを作ってみましょう!
4. 初めてのMCPサーバーをPythonとFlaskで作ってみよう! ~最小限のコードで動かす体験~
お待たせしました!いよいよ、PythonとFlaskを使って、私たちの手で初めてのMCPサーバー(の原型)を作成し、実際に動かしてみる時間です。
ここでは、本当に最小限のコードで、「サーバーがリクエストを受け付けて応答を返す」という基本的な動きを体験することを目標にします。
準備運動:作業フォルダと仮想環境の確認
まず、Vol.1で作成したプロジェクトフォルダ(例:mcp_beginner_guide
)をVS Codeで開いてください。 そして、VS Codeのターミナル(メニューの「ターミナル」 > 「新しいターミナル」で開けます)で、仮想環境(例:mcp_env
)が有効になっていることを確認しましょう。行頭に (mcp_env
) と表示されていればOKです。もし表示されていなければ、前述の有効化コマンドを実行してください。
次に、このプロジェクトフォルダの中に、サーバープログラムのコードを書くための新しいファイルを作成します。 VS Codeのファイルエクスプローラー(画面左側のファイルアイコン)で mcp_beginner_guide
フォルダを右クリックし、「新しいファイル」を選択して、ファイル名を app.py
としましょう。.py
は、Pythonのプログラムファイルであることを示す拡張子です。これで、コーディングの準備は万端です!
いよいよコーディング!初めてのサーバープログラム
作成した app.py
ファイルに、以下のPythonコードを打ち込んで(またはコピー&ペーストして)みてください。一行一行、間違えないように慎重に。
from flask import Flask
# Flaskアプリケーションのインスタンスを作成
app = Flask(__name__)
# ルートURL ('/') にアクセスがあった場合に実行される関数を定義
@app.route('/')
def hello_mcp_server():
return "Hello, MCP Server from Flask!"
# このスクリプトが直接実行された場合にのみ、開発サーバーを起動
if __name__ == '__main__':
app.run(debug=True)
たったこれだけのコードです! これが、私たちの最初のMCPサーバー(の卵)になります。 「これだけで本当にサーバーが動くの?」と不思議に思うかもしれませんが、Flaskの魔法があれば大丈夫です。
コードの解説:魔法の呪文を解き明かす
それでは、この短いコードが何をしているのか、一行ずつ見ていきましょう。
-
from flask import Flask
これは、「flask
というライブラリの中から、Flask
という名前の設計図(専門用語ではクラスと言います)を使えるように準備してください」という意味です。Flask
クラスが、ウェブサーバーの基本的な機能を提供してくれる、まさにFlaskの中心部品です。 -
app = Flask(__name__)
ここで、先ほど準備したFlask
クラス(設計図)を使って、実際に動くアプリケーションの本体(専門用語ではインスタンスまたはオブジェクトと言います)を作成しています。app
という名前の箱(変数)に、その本体を入れているイメージです。カッコの中の__name__
(アンダースコア2つ、name、アンダースコア2つ)は、Pythonが自動的に設定する特別な変数で、このファイルがどのように実行されているかを示します。今は「Flaskアプリを作るときのお決まりの書き方」 くらいの知識で大丈夫です (詳しくは後ほど「コードの意味をもう少し詳しく見てみよう」で触れます)。 -
@app.route('/')
これがFlaskの面白いところの一つで、「デコレータ (Decorator)」 と呼ばれるものです。@
で始まるこの行は、そのすぐ下に書かれている関数(ここではhello_mcp_server()
)に特別な意味付けをします。@app.route('/')
は、「もし、ウェブブラウザなどから、このサーバーのルートURL(例えばhttp://なんとか.com/
の/
の部分)にアクセスがあったら、すぐ下のhello_mcp_server()
という関数を実行してくださいね」という指示をFlaskに伝えています。まるで、レストランの案内係が「このテーブル(/
)のお客様は、こちらの担当者(hello_mcp_server()
)が対応します」と割り当てるようなイメージです。 -
def hello_mcp_server():
これはPythonの関数の定義です。def
は「define(定義する)」の略で、hello_mcp_server
という名前の関数(一連の処理のまとまり)を作っています。この関数が、先ほどの@app.route('/')
によって指定されたURLにアクセスがあったときに呼び出され、実行される処理内容を書く場所になります。 -
return "Hello, MCP Server from Flask!"
hello_mcp_server()
関数が実行された結果、何をクライアントに返すか(レスポンスするか)を指定しています。ここでは、"Hello, MCP Server from Flask!"
という文字列を返しています。この文字列が、後でブラウザの画面に表示されることになります。 -
if __name__ == '__main__':
これもPythonのお決まりの書き方の一つです。このapp.py
ファイルが、他のプログラムから部品として呼び出される(インポートされる)のではなく、直接「実行」された場合にのみ、このif
文の中の処理を実行しなさい、という意味です。なぜこんな書き方をするのかは少し難しい話になるので、今は「Pythonスクリプトを直接実行するときのお約束」と覚えておけば大丈夫です。(これも後ほど少し詳しく触れます)。 -
app.run(debug=True)
これが、実際にFlaskのウェブサーバーを起動する命令です。app
(先ほど作ったFlaskアプリケーションの本体)に対して、「さあ、動き始めて、リクエストを待ち受けてください!」と指示しています。カッコの中のdebug=True
は、デバッグモードを有効にするという設定です。デバッグモードを有効にすると、- もしプログラムにエラーがあった場合、ブラウザ上に詳しいエラー情報が表示されるので、問題解決の手がかりになります。
- プログラムのコードを変更して保存すると、サーバーが自動的に再起動してくれるので、開発がスムーズに進みます。 開発中は非常に便利ですが、実際にインターネットに公開する本番環境では、セキュリティ上の理由から
debug=False
(または指定なし)にするのが一般的です。
どうでしょう? 一つ一つの意味が分かると、なんだか魔法の呪文も少し身近に感じられませんか?
サーバーを起動!私たちの窓口を開こう
それでは、いよいよこの app.py
ファイルを実行して、サーバーを起動してみましょう!
VS Codeのターミナル(仮想環境が有効になっていることを確認してください)で、app.py
ファイルがあるディレクトリ(mcp_beginner_guide
フォルダのはずです)にいることを確認し、以下のコマンドを入力してEnterキーを押します。
python app.py
(macOSやLinuxで python3
を使っている方は python3 app.py
としてください。)
コマンドを実行すると、ターミナルに何行かメッセージが表示され、その中に以下のような行が見つかるはずです(ポート番号などが少し違う場合もあります)。
* Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
このメッセージが表示されたら、あなたのパソコンの中で、Flaskのウェブサーバーが無事に起動し、クライアントからのリクエストを待ち受けている状態になりました! 注目してほしいのは * Running on http://127.0.0.1:5000
の部分です。
-
http://
: ウェブサイトにアクセスするときのプロトコル(通信ルール)ですね。 -
127.0.0.1
: これは、ネットワーク上で「自分自身のコンピューター」を指す特別なIPアドレス(インターネット上の住所のようなもの)です。「localhost(ローカルホスト)」という名前でも同じ意味になります。 -
:5000
: これは ポート番号 です。IPアドレスが「建物の住所」だとすれば、ポート番号は「その建物の中の特定の窓口や部屋番号」のようなものです。一つのコンピューター上では、たくさんのサーバープログラムが同時に動いている可能性があるので、どのプログラムへのリクエストなのかを区別するためにポート番号が使われます。Flaskのデフォルト(特に指定しない場合)の開発サーバーは、この5000番ポートを使います。
つまり、「あなたのパソコンの5000番窓口で、リクエストをお待ちしていますよ!」という状態になったわけです。
ブラウザからアクセス!お客さんになってみよう
サーバーが起動したら、次はお客さん(クライアント)の役になって、このサーバーにアクセスしてみましょう。 一番簡単なクライアントは、皆さんが普段使っているウェブブラウザです。
新しいウェブブラウザのウィンドウかタブを開き、アドレスバーに、先ほどターミナルに表示されたアドレス
http://127.0.0.1:5000/
を正確に入力して、Enterキーを押してみてください。
どうでしょうか? ブラウザの画面に、
Hello, MCP Server from Flask!
と表示されましたか?
もし表示されたら、大成功です! あなたがPythonとFlaskで作った初めてのサーバーが、ブラウザからのリクエストを受け付け、ちゃんと応答を返してくれた証拠です。
このとき、サーバーを起動したターミナルの方も見てみてください。ブラウザからアクセスがあると、以下のようなログ(記録)が1行追加されているはずです。
127.0.0.1 - - [日付と時刻] "GET / HTTP/1.1" 200 -
これは、「127.0.0.1
(あなたのブラウザ)から、ルートURL(/
)に対してGETリクエスト(情報をください、という種類のリクエスト)があり、サーバーはステータスコード200(成功しました、という意味)で応答しましたよ」という記録です。ちゃんとサーバーがお仕事をしたことが分かりますね。
サーバーを停止する時は?
サーバーが動いている間は、そのターミナルはリクエストを待ち受けるために専有されています。サーバーを停止したい場合は、サーバーが起動しているターミナルウィンドウを選択した状態で、キーボードの Ctrlキーを押しながらCキー を押してください(Ctrl + C)。
すると、サーバーが停止し、ターミナルのプロンプト(入力待ちの状態)が元に戻ります。
おめでとうございます! これで、あなたは自分の手でウェブサーバーを起動し、それにアクセスするという、プログラマーとしての大きな一歩を踏み出しました。
5. コードの意味をもう少し詳しく見てみよう ~おまじないと約束事~
先ほど、最小限のサーバーコードの各行を簡単に解説しましたが、もう少しだけ詳しく見ておきたい「おまじない」や「約束事」について補足します。すぐに全てを理解できなくても大丈夫ですが、知っておくと後々役立つかもしれません。
Flask(__name__)
の __name__
って、実は大事なんです。
app = Flask(__name__)
の __name__
ですが、これはPythonの組み込み変数で、現在のモジュール(Pythonのファイルのこと)の名前が自動的に入ります。
もし、この app.py
ファイルを直接実行した場合、 __name__
の値は "__main__"
(文字列のダブルメイン) になります。一方、もし他のPythonファイルからこの app.py
が部品としてインポートされた場合、 __name__
の値はファイル名である "app"
になります。"__main__"
の部分が少し難しいかもしれませんが、このまま、もう少し読み進めていただくことで、理解できるようになります。
Flaskは、この __name__
の値を使って、アプリケーションのルートパス(基準となる場所)や、テンプレートファイル(HTMLなどを置く場所、今回は使いません)や静的ファイル(画像などを置く場所、これも今回は使いません)を探す場所を決定します。そのため、通常は Flask(__name__)
と書くのが慣習となっています。
@app.route('/')
:URLと関数を結びつける魔法の飾り(デコレータ)
@app.route('/')
のような書き方を デコレータ と呼びます。デコレータは、既存の関数に新しい機能を追加したり、関数の振る舞いを変更したりするための、Pythonのちょっと高度な機能です。@
マークが目印です。
Flaskでは、このデコレータを使って、「どのURLパスへのリクエストを、どの関数で処理するか」という対応付け(これを ルーティング と言います)を非常に簡潔に記述できます。
@app.route('/')
は、「app
というFlaskアプリケーションにおいて、ルートパス / へのリクエストは、このデコレータの直下にある関数(ここでは hello_mcp_server
)に処理を任せますよ」と宣言しているのです。
もし、別のURL、例えば /info
というパスへのアクセスを処理したい場合は、新しく関数を作り、その関数の上に @app.route('/info')
というデコレータを付ければOKです。
Python
# ... (app = Flask(__name__) の下に追加するイメージ)
@app.route('/info')
def show_info():
return "This is an information page."
このように、デコレータを使うことで、URLと処理内容の結びつきがコード上で非常に分かりやすくなります。
if __name__ == '__main__':
:スクリプト実行のお約束
if __name__ == '__main__':
のブロックは、Pythonスクリプトが「直接実行された」場合にのみ、その中のコード(ここでは app.run(debug=True)
)を実行するための定型的な書き方です。
なぜこれが必要かというと、Pythonのファイルは、
- スクリプトとして直接実行される場合
- 他のPythonファイルから部品(モジュール)としてインポートされて使われる場合の2通りの使われ方があるからです。
app.run()
はサーバーを起動する命令なので、このファイルが部品としてインポートされたときに勝手にサーバーが起動してしまうと困りますよね。__name__
変数の値は、直接実行されたときは"__main__"
になり、インポートされたときはそのモジュール名(ファイル名)になります。そのため、if __name__ == '__main__':
という条件を付けることで、「このファイルがメインプログラムとして直接実行された時だけ、サーバーを起動してくださいね」という意味になるのです。
これはFlaskに限らず、多くのPythonスクリプトで使われる一般的なイディオム(慣用句)です。
ルーティング:リクエストを正しい処理へ導く交通整理
先ほど少し触れましたが、@app.route()
を使って、特定のURLパスと、そのパスへのリクエストを処理するPython関数を結びつけることを ルーティング (Routing) と呼びます。ウェブサーバーは、クライアントから送られてくるリクエストのURLを見て、「このURLなら、あの関数に処理をお願いしよう」というように、適切な処理担当へとリクエストを振り分ける、いわば交通整理係のような役割を担っています。
Flaskでは、このルーティングの定義が非常に簡単に行えるのが大きな特徴の一つです。 今回の例では、ルートパス / へのリクエストは hello_mcp_server
関数が担当するようにルーティングを設定しました。
今後、MCPサーバーとして様々な機能(モデル情報の提供、コンテキストの更新など)を追加していく際には、それぞれに対応するURLパスと処理関数を、このルーティングの仕組みを使って定義していくことになります。
6. まとめと次回予告: 小さな一歩、大きな感動!
さて、今回のVol.2では、以下の内容について一緒に学んできました。
- サーバーの基本的な役割: クライアントからのリクエストを受け付け、レスポンスを返す「情報提供のプロフェッショナル」であること。MCPサーバーはモデルやコンテキストの情報窓口となること。
- Flaskライブラリの導入: Pythonで手軽にウェブサーバーを構築するための強力な味方、Flaskをインストールしました。
- 最小限のサーバー作成と実行: ほんの数行のPythonコードで、実際にウェブサーバーを起動し、ブラウザからアクセスして「Hello, MCP Server from Flask!」というメッセージが表示されることを確認しました。
自分の手で書いたコードが、実際にサーバーとして動き出し、ブラウザからのリクエストに応答する様子を目の当たりにした時の感動は、プログラミング学習の大きなモチベーションになるのではないでしょうか。たとえ今は小さな一歩でも、これはMCPの世界、そしてウェブアプリケーション開発の世界への確かな一歩です。
ところで、今回サーバーにアクセスするのに使ったウェブブラウザも、実は「クライアント」の一種です。ブラウザは、指定されたURLの情報をサーバーにリクエストし、受け取った情報(今回は単純な文字列でしたが、通常はHTMLなど)を解釈して画面に表示する、という役割を担っています。
では、次回は何をするのでしょうか?今回作ったのは、リクエストを「待つ側」のサーバーでした。ということは…? そうです!次回Vol.3のテーマは、「サーバーに『お願い』!requestsで作るMCPクライアントの基本」 です。
次回は、今回作ったこの小さなサーバーに対して、「お願い」をする側、つまり「クライアント」のプログラムをPythonで作ってみます。ブラウザではなく、Pythonのプログラムから、私たちのMCPサーバーにアクセスし、応答を受け取る方法を学びます。そのために、「requests」という、これまた便利なPythonライブラリを使います。
サーバーとクライアント、両方を作って動かすことで、MCPの基本的な通信の流れがより深く理解できるようになるはずです。今回作った app.py
は、次回も使いますので、大切に保存しておいてくださいね。
それでは、今回も最後までお付き合いいただき、ありがとうございました!また次回の記事で、新たな冒険をご一緒できることを楽しみにしています。