get_weatherは、MS-Agentがサーバー接続名とツール名を組み合わせた後に表示される識別子です。areaとtarget_dateは事前にハードコードされた呼び出しパラメータではなく、Qwen3-4Bが「杭州明日」に基づいて生成した構造化パラメータです。関連する登録結果は以下の図に示されています。
天気MCPがパラメータを受信すると、「杭州」を「杭州、浙江、中国」として解析し、現地のタイムゾーンに基づいてtomorrowを2026年9月7日に変換し、以下を返します:
{
"requested_area": "杭州",
"resolved_area": "杭州,浙江,中国",
"date": "2026-09-07",
"timezone": "Asia/Shanghai",
"weather_code": 51,
"weather": "小毛毛雨",
"temperature_max_c": 29.0,
"temperature_min_c": 21.6,
"precipitation_probability_max_percent": 31,
"wind_speed_max_kmh": 13.0,
"data_source": "Open-Meteo"
}
Qwen3-4Bはこの結果に基づいて自然言語の回答を生成し、実際に一致した地域、日付、気象状況、最高気温と最低気温、降水確率、最大風速を列挙します。これで「問題を理解する→ツールを選択する→パラメータを生成する→ツールを実行する→結果を処理する」の呼び出しチェーンが完了します。
ホスティングと設定の後、まずサービスに直接接続し、ツールリストを確認します。以下のテスト例ではhttps://example.comを使用します。
async def direct_fetch_check():
async with streamable_http_client(MCP_SERVER_URL) as streams:
read_stream, write_stream, _ = streams
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
tools = await session.list_tools()
print("サーバーから返されたツール:", [tool.name for tool in tools.tools])
result = await session.call_tool(
"fetch",
arguments={
"url": "https://example.com",
"max_length": 1000,
"start_index": 0,
"raw": False,
},
)
if result.isError:
raise RuntimeError(str(result.content)
for block in result.content:
if getattr(block, "type", None) == "text":
print(block.text)
await direct_fetch_check()
実際の実行では、サーバーはfetchツールを公開し、対象Webページの本文スニペットとリンクを返します。これにより、魔搭ホスティングサービス、Streamable HTTP接続、Webスクレイピングツール自体がすべて動作することが確認されます。
ログイン ディスカッションに参加
直接呼び出しが成功した後、事前に設定したQwen3-4Bを再利用し、モデルにツールを選択させます。
MCPの権限管理は「このサーバーに接続できるかどうか」というレベルにとどまるべきではなく、現在のユーザーがどのリソースにアクセスできるか、モデルがどのツールを呼び出せるか、各呼び出しが外部システムにどのような影響を与えるかという3つの問題を明確にすることがより重要です。したがって、アクセス制御はHost、MCPサーバーからバックエンドビジネスシステムまで階層的に実装する必要があり、常に最小権限の原則に従うべきです。
MCPはモデルにコンテンツ生成だけでなく、ファイル読み取り、データベースクエリ、ネットワークサービス呼び出し、さらには外部システムの修正も可能にします。したがって、通常のチャットモデルよりも複雑なセキュリティリスクをもたらします。最も典型的なのはPromptインジェクションです:外部コンテンツに悪意のある指示が隠されており、モデルがファイル、ネットワーク、メッセージングツールを呼び続けさせ、危険なシステム間操作チェーンを形成します。
MCPは、外部ツールやデータソースが多数あり、これらの能力を異なるモデルやAgentで再利用したい場合、現在のタスクに基づいてモデルが動的にどのツールを呼び出すかを決定したい場合により適しています。
この章のすべての実験データとコードは以下で確認できます:
https://modelscope.cn/gallery/liucong/fae5791c-a024-412f-97c3-5fb93fee708e