MCP エンドポイント
概要
このプロジェクトを可能にしたオープンソースの貢献に対して、XiaoZhi AI Chatbot に特別な感謝を表します。
MCP(Model Context Protocol) は、リモート制御、計算、メール操作、知識検索などを可能にすることで AI の機能を拡張する強力なフレームワークです。
MCP により、サーバーは明確に定義されたプロトコルを通じて言語モデルに呼び出し可能なツールを公開できます。これらのツールにより、モデルはデータベースのクエリ、API の呼び出し、複雑な計算の実行など、外部システムとの相互作用が可能になります。各ツールは名前によって一意に識別され、その機能を定義するメタデータによって記述されます。
MCP エンドポイント は、ローカル MCP サービスと Xiaozhi AI モデル間のブリッジとして機能します。音声対応デバイスやその他の端末がこれらの外部機能をシームレスに活用するためのインターフェースを提供します。
MCP エンドポイントの取得
-
SenseCraft AI Platform にアクセスします
-
コントロールパネルにアクセスするには、ページ右上の Watcher Agent をクリックします。

- エージェント設定を開きます

MCP SettingとGet MCP Endpointをクリックします

- エンドポイントアドレスと接続ステータスを取得します

事前提供 MCP サービスの選択
以下の4つの MCP サービスから選択できます。
設定を保存してデバイスを再起動すると、選択したサービスが自動的に有効になります。
× をクリックしてサービスを削除できます

MCP の例
このプロジェクトを可能にしたオープンソースの貢献に対して、XiaoZhi AI Chatbot に特別な感謝を表します。
以下のコードは MCP Example Code Github から取得できます
MCP サーバーコードの例
# server.py
from mcp.server.fastmcp import FastMCP
import logging
logger = logging.getLogger('test_mcp')
import math
import random
# Create an MCP server
mcp = FastMCP("Calculator")
# Add an addition tool
@mcp.tool()
def calculator(python_expression: str) -> dict:
"""For mathamatical calculation, always use this tool to calculate the result of a python expression. `math` and `random` are available."""
result = eval(python_expression)
logger.info(f"Calculating formula: {python_expression}, result: {result}")
return {"success": True, "result": result}
# Start the server
if __name__ == "__main__":
mcp.run(transport="stdio")
コードの説明
以下は MCP サーバーの例の主要部分の詳細な説明です:
-
@mcp.tool(): 以下の関数を AI モデルによってリモートで呼び出し可能な MCP ツールとして登録します。 -
def calculator(python_expression: str) -> dict: モデルから数式を受け取るツールを定義します。 -
result = eval(python_expression): Python の eval() を使用して式を評価します。上記でインポートされているため、math や random などのライブラリを使用できます。 -
mcp.run(transport="stdio"): サーバーを開始します。stdio トランスポートにより、Watcher Agent や MCP クライアントとの通信が可能になります。
実行結果
export MCP_ENDPOINT=<mcp_endpoint_address_get_from_your_agent_configuration>
python mcp_pipe.py calculator.py
2025-05-16 09:07:09,009 - MCP_PIPE - INFO - Connecting to WebSocket server...
2025-05-16 09:07:09,096 - MCP_PIPE - INFO - Successfully connected to WebSocket server
2025-05-16 09:07:09,097 - MCP_PIPE - INFO - Started test.py process
Processing request of type ListToolsRequest
Processing request of type CallToolRequest
Calculating formula: 3.14159 * (8 / 2) ** 2, result: 50.26544
Processing request of type CallToolRequest
Calculating formula: math.comb(10, 3), result: 120
MCP エンドポイントのステータス

- Connection Status: MCP 接続が正常に動作しているかどうかを表示します。
- Refresh icon: MCP 接続ステータスを更新します。
- Enabled Services: Watcher が使用できるすべての MCP サービスをリストします。
- Endpoint Address: MCP エンドポイントアドレス(公式技術サポートが必要な場合を除き、他の人と共有しないでください)
会話ログ


注意事項
1. MCP でのツールとパラメータの命名
ツールとそのパラメータの名前は、大規模モデルがその目的を理解できるよう明確でなければなりません。 可能な限り略語の使用を避け、ツールの機能といつ使用すべきかを説明するコメントを提供してください。
例えば、calculator という名前のツールはモデルにそれが計算機であることを知らせ、python_expression パラメータはモデルが Python 式を入力すべきことを示します。
bing_search ツールを作成する場合、パラメータ名は keywords にすべきです。
2. 関数の docstring ガイダンス
docstring("""...""" を使用)は、モデルにツールをいつ使用するかを指導します。
また、式で math や random ライブラリの関数を使用できることも言及できます。
これら2つのライブラリは既にサンプルコードでインポートされています。
3. 印刷ではなくログ記録
この MCP サーバーの例では標準入出力がデータ送信に使用されているため、print を使用して情報を出力することはできません。
代わりにデバッグとログ記録には logger を使用してください。
4. 戻り値
MCP の戻り値は通常文字列または JSON です。この例では、計算結果は result という名前の JSON フィールドで返されます。
戻り値の長さは通常制限されており、IoT デバイスコマンドと同様に、通常 1024 バイト以内です。
5. ツールリストの制限
MCP ツールリストには上限があります。
後で設定ページに表示され、トークン数に基づいて計算されます。
注意:ツールが多すぎるとデバイスのスケジューリング効率に影響する可能性があります。
6. 接続制限
各 MCP エンドポイントには同時接続数の上限があります。
注意:この制限を超えたり、同時接続が多すぎたりすると、デバイスのパフォーマンスが低下する可能性があります。