0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

uvxのMCPサーバーがPydantic 2.14で起動しない原因と対処

0
Posted at

📝 この記事は forge.workstyle.tech に掲載した記事の転載です。

SQLiteやHacker NewsのMCPサーバーをuvxで起動していました。
再起動後、ImportError: cannot import name 'eval_type_backport'が出て起動しなくなりました。
原因は、古いmcp<1.10とPydantic 2.14の組み合わせです。

先に結論

uvxで起動する古いmcp<1.10のMCPサーバーは、Pydantic 2.14でImportError: cannot import name 'eval_type_backport'が出て起動しません。--with "pydantic<2.14"を加えてPydanticを2.14未満に固定し、再接続後にサーバーごとのinitialize応答を確認します。

なぜPydantic 2.14でImportErrorが出るのか

対象のサーバーは、古いmcpの系列にあたるmcp<1.10に固定されていました。mcp<1.10は、mcpの1.10未満を使う指定です。この系列は、Pydanticというパッケージの内部関数eval_type_backportを読み込みます。ところが、Pydantic 2.14ではその関数がなくなりました。

そのためサーバーが関数を読み込もうとしても見つからず、ImportErrorになります。エラーが出たSQLiteとHacker Newsの設定は、どちらもuvxで起動していました。

回避策は、古いmcpに加えてPydanticも2.14未満に固定することです。設定に次の指定を加えます。

--with "mcp<1.10" --with "pydantic<2.14"

今回追加するのはpydantic<2.14です。mcp<1.10は古いサーバーとの互換性を保つため、記録上すでに使われていた指定です。

uvxの引数にPydantic 2.14未満の指定を加える

設定画面などでコマンドと引数を分けている場合は、uvxの引数に--withとパッケージ指定を追加します。SQLiteサーバーなら、たとえば次の形です。

command: uvx
args: ["--with", "mcp<1.10", "--with", "pydantic<2.14", "mcp-server-sqlite", "--db-path", "<SQLiteのDBパス>"]

<SQLiteのDBパス>は、すでに使っているデータベースの場所に置き換えてください。起動引数では--db-pathの後ろにその値を渡します。

Hacker Newsサーバーにも同じ固定を付けます。起動するパッケージ名はmcp-hnです。

command: uvx
args: ["--with", "mcp<1.10", "--with", "pydantic<2.14", "mcp-hn"]

すでに--with "mcp<1.10"があるなら、その指定は残したまま、--with "pydantic<2.14"を追加します。設定全体を見て、Pydanticの固定が二重に入っていないか確認してください。

再接続後にMCPサーバーのinitialize応答を確認する

設定を保存したら、対象のMCPサーバーを再接続します。接続済みの表示だけでは、接続の初期化要求であるinitializeまで通ったか分かりません。クライアント側でその応答を確認します。

SQLiteとHacker Newsを個別に確認してください。両方を使っている場合、片方の初期化が通っても、もう片方の修正が成功したとは限りません。エラーが消え、どちらも初期化に応答すれば、起動時のImportErrorを回避できています。

手元に取り込み済みの依存関係だけで確認する場合は、uvx --offlineを使う方法もあります。記録では、オフラインでもSQLiteとHacker Newsの両方がMCPの初期化に応答することを確認しました。パッケージが手元に取り込まれていない環境では、この方法をそのまま使えるとは限りません。

どの既存設定にPydanticの指定を加えるか

古い設定には、mcp<1.10だけを固定しているものがありました。その場合はPydanticの指定を足します。一方、利用者が自分でPydanticのバージョンを指定している設定では、その値を変えません。

修正対象は、uvxで起動していて、--with mcp<1.10があり、Pydanticの指定がまだない設定です。この条件に合うサーバーだけに追加します。別の起動コマンドや、すでにPydanticを指定している設定には、同じ変更を機械的に加えないでください。

今回のエラーは、サーバーの起動コマンドそのものより、依存パッケージ間の互換性に関係していました。eval_type_backportが見つからないときは、古いmcpを使っていないか確認します。該当する場合はPydanticを2.14未満に固定し、サーバーごとにinitializeの応答を確かめます。

まとめ

  • uvxで起動し、mcp<1.10が指定された設定を確認する
  • Pydanticの指定がない対象設定に--with "pydantic<2.14"を加える
  • サーバーを再接続する
  • SQLiteとHacker Newsそれぞれのinitialize応答を確認する
  • 必要ならuvx --offlineで手元の依存関係を使って確認する

元記事: https://forge.workstyle.tech/blog/pydantic-214-breaks-old-mcp-servers/?utm_source=qiita&utm_medium=crosspost&utm_campaign=pydantic-214-breaks-old-mcp-servers

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?