1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MCPツール開発で遭遇したクラッシュ問題と解決方法

Posted at

はじめに

Model Context Protocol (MCP) を使って Redmine 連携ツールを開発していたところ、予期せぬクライアントのクラッシュに遭遇しました。この記事では、遭遇した問題と具体的な解決方法を共有します。

この記事は MCPツールのdescription制約:Claudeクライアントのクラッシュを防ぐ実装戦略 をベースに、実装者向けにより実践的な内容として再構成したものです。

TL;DR

  • MCPツールの description に特定のパターンを含むとクラッシュする
  • 括弧やアンダースコアの使用を避ける
  • 説明は4行以内に収める
  • ユニオン型の代わりにハンドラーで型変換を行う

発生した問題

開発中のRedmine MCPサーバーで、以下のようなツール定義を行った際にクラッシュが発生しました:

{
  name: "list_time_entries",
  description: "List time tracking records (time_entries) from the database. Returns data in JSON format.",
  parameters: {
    type: ["number", "string"],
    // ... 他のパラメータ定義
  }
}

クラッシュの原因

クラッシュの原因特定には大変苦労しました。当初はツールの実装に問題があるのではないかと考え、コードの見直しを行いましたが原因は特定できませんでした。その後、説明文のパターンを変更しながらテストを繰り返すことで、以下の3点が原因であることが判明しました:

  1. 説明文での括弧の使用:説明文中に括弧を含めるとクラッシュが発生
  2. アンダースコアを含む技術用語:time_entries などの一般的な技術用語でもクラッシュの原因に
  3. パラメータでのユニオン型の使用:配列による型定義がクラッシュを引き起こす

この発見により、MCPの公式仕様には記載されていない、クライアント固有の制約が存在することが分かりました。これらの制約は文書化されていないため、実装時に注意が必要です。

解決方法

1. 説明文の改善

説明文は以下のようなパターンで記述します:

{
  name: "list_time_entries",
  description: "List time tracking records. JSON response format. Optional filtering by date range. Available since version 1.1",
  // ...
}

このように情報を分割して記述することで、括弧を使わずに必要な情報を伝えられます。

2. 技術用語の言い換え

一般的な技術用語でも、パラメータ名であっても、アンダースコアを含むものは別の表現に置き換える必要があります:

  • time_entriestime records // パラメータ名も変更が必要
  • custom_fieldscustom fields // よく使われる用語でも注意
  • issue_trackingissue management // 機能説明でも置き換えを忘れずに

予想以上に制約は厳密で、description内のあらゆる場所でアンダースコアの使用を避ける必要があります。パラメータ名を参照する場合も例外ではありません。

3. 型の処理

ユニオン型の代わりに、文字列として受け取ってハンドラーで変換する方法を採用します:

// Before
parameters: {
  type: ["number", "string"]
}

// After
parameters: {
  type: "string"
}

// ハンドラーでの処理
function handleParameter(value) {
  if (!isNaN(value)) {
    return Number(value);
  }
  return value;
}

実装のポイント

  1. 説明文は4行以内を目安に
  2. 括弧は使用しない
  3. アンダースコアを含む用語は言い換える
  4. 型の柔軟性はハンドラーで確保

今後の展望

MCPは2024年11月に公開された新しいプロトコルで、今後も実装パターンや制約に関する知見が蓄積されていくと考えられます。現在は以下の分野で特に発展が見られます:

  • 各言語のSDK整備
  • エンタープライズツールとの統合
  • プロトコルの拡張に関する議論

おわりに

MCPを使った開発では、公式の仕様だけでなく、実装時の制約にも注意が必要です。この記事で紹介した対応方法が、皆さんの開発の参考になれば幸いです。

参考資料

  • MCPの公式ドキュメント
  • Claude Desktop 開発者ガイド
1
1
0

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?