MCP tools
=========

`MCP <https://modelcontextprotocol.io>`_ モデルコンテキストプロトコルは、サーバーが呼び出し可能なツールセットをアドバタイズする標準の方法です。
``aidb.import_mcp_tools()``
は、外部MCPサーバーを登録し、アドバタイズするツールをインポートするため、エージェントはAIDB独自のネイティブツールおよびSQLツールとともにこれらを呼び出すことができます。

.. code:: sql

   SELECT aidb.import_mcp_tools(
       name        => weather,
       url         => https://weather.example.com/mcp,
       transport   => streamable_http,  -- optional; streamable_http or sse (see below). Default: streamable_http
       headers     => NULL,               -- optional; request headers to send, for example, an auth token. Mutually exclusive with headers_env. Default: NULL
       tool_filter => NULL,               -- optional; import only these tool names. Default: NULL (import everything the server advertises)
       headers_env => NULL                -- optional; env var holding the headers JSON instead of storing it. Mutually exclusive with headers. Default: NULL
   );

   SELECT aidb.create_agent(trip_planner, Help plan trips, checking weather when useful., my_gpt,
       tools => ARRAY[get_forecast]);  -- a tool the weather server advertised

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `name`,TEXT,Required,サーバー登録の一意の名前。
  `url`,TEXT,Required,サーバーのMCPエンドポイントURL。
  `transport`,TEXT,`'streamable_http'`,`'streamable_http'`または`'sse'` —現在`'streamable_http'`のみが完全にサポートされています。
  `headers`,JSONB,`NULL`,"送信する要求ヘッダーたとえば `{""Authorization"": ""Bearer ...""}` `headers_env`と相互排他的。"
  `tool_filter`,TEXT,`NULL`,これらのツール名のみをインポートします。サーバーがアドバタイズするすべてのインポートを省略します。
  `headers_env`,TEXT,`NULL`,ヘッダーJSONを保持する環境変数の名前。保存するのではなく、使用するたびに新しく読み取られます。 `headers`と相互排他的。

``import_mcp_tools`` は、何かを登録する前に\ ``tools/list``
エンドポイントを呼び出すことによりサーバーを検証します。到達不能であるか、\ ``tool_filter``
と一致するものをアドバタイズしない場合、何も保存されません。返されるツールはすぐにキャッシュされるため、別の更新後ではなく、すぐに\ ``aidb.tools``
に表示されます。

現在、\ ``streamable_http``
トランスポートデフォルトのみが実際にエンドツーエンドで動作します。
``sse`` は値として受け入れられますが、まだ完全には実装されていません。

MCPサーバーへの到達は、アウトバウンドネットワーク呼び出しであり、モデルプロバイダー呼び出しおよびHuggingFaceのダウンロードと同じ :ref:`aidb.egress_allowlist <Configuring AIDB>` 制限の対象となります。

認証
----

特定の要求ヘッダー最も一般的には\ ``Authorization``
ベアラートークンを必要とするサーバーに\ ``headers`` を渡します。

.. code:: sql

   SELECT aidb.import_mcp_tools(
       name    => internal_crm,
       url     => https://crm.internal.example.com/mcp,
       headers => {"Authorization": "Bearer sk-..."}::JSONB
   );

``headers`` は\ ``aidb.mcp_registry`` に保存されますが、 ``aidb_users``
にはその列への\ ``SELECT``
アクセスがありません。AIDB自身の内部呼び出し検証、リフレッシュ、またはサーバーのツールの呼び出しのみがそれを読み取ることができます。

!!!note
シークレットをテーブルにまったく保存したくないですか？代わりに\ ``headers_env``
を渡します。\ ``headers``
が取るのと同じ形状で、ヘッダーのJSONオブジェクトを保持する環境変数名前付けます呼び出しごとにPostgresプロセス自分の環境から新しく読み取られます。
``headers`` および\ ``headers_env`` は相互排他的です。変数の名前は、
:ref:`aidb.env_var_allowed_prefix <Configuring AIDB>`  デフォルトでは\ ``AIDB_``
で構成されたプレフィックスで始まる必要があります。これは、モデル資格情報に :ref:`credentials_env <Pipelines API reference>` で使用される同じメカニズムとGUCです。

インポートするツールのフィルタリング
------------------------------------

デフォルトでは、サーバーがアドバタイズするすべてのツールがインポートされます。
``tool_filter`` を渡して、特定のもののみを名前でインポートします。

.. code:: sql

   SELECT aidb.import_mcp_tools(
       name        => weather,
       url         => https://weather.example.com/mcp,
       tool_filter => ARRAY[get_forecast, get_alerts]
   );

ツールリストを最新の状態に保つ
------------------------------

AIDBは、すべてのクエリーでサーバーのツールリストを再取得しません。\ ``aidb.tools``
は、過去60分以内にキャッシュされたエントリのみを表示するため、
``SELECT`` にネットワーク副作用が発生することはありません。
``aidb.refresh_mcp_tools()``
を呼び出して、オンデマンドでキャッシュを再取得および更新しますたとえば、サーバーが新しいツールを追加した後。

.. code:: sql

   SELECT aidb.refresh_mcp_tools(weather);

現在キャッシュされているツールの数を返します\ ``tool_filter``
適用後サーバーの登録—その\ ``url`` 、\ ``transport`` 、\ ``headers``
、または\ ``tool_filter`` を再実行する\ ``import_mcp_tools``
同等の設定を介して変更することも、キャッシュを自動的に無効にします。

サーバーの削除
--------------

.. code:: sql

   SELECT aidb.delete_tool(weather);

MCPサーバーを削除すると、それに伴ってアドバタイズされたすべてのツールが削除されます。ツールの1つだけを個別に削除する方法はありません。
``tool_filter`` を使用して、代わりに公開されるツールをキュレートします。

MCPを介してAIDB独自のツールを公開する
-------------------------------------

``aidb.get_mcp_tools()`` は、 ``aidb.tools``
に現在あるすべてのツールネイティブ、
SQL、およびインポートされたMCPツールを同様に返し、MCP ``tools/list``
行項目として再形成します。他のシステムがMCP独自の記述子形式でAIDBのツールカタログを必要とする場合に役立ちます。

.. code:: sql

   SELECT * FROM aidb.get_mcp_tools();

これは、AIDBのツールカタログをMCPの記述子形状に変換するだけです。
AIDBは、外部MCPクライアントが接続し、ネットワーク経由でこれらのツールを実際に呼び出すことができる独自のMCPサーバーエンドポイントを実行しません。
