Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Quick Fix: My MCP Tools Were Showing as Write Tools in ChatGPT Dev Mode

2025年09月11日に「Dev.to」が公開したITニュース「Quick Fix: My MCP Tools Were Showing as Write Tools in ChatGPT Dev Mode」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

MCPサーバー構築時、ChatGPT開発モードで読み取り専用ツールが書き込み可能と誤認識された。これは、ツール定義にreadOnlyHintなどのアノテーションが不足していたため。これらを追加し、ツールは正しく読み取り専用として表示されるようになった。MCPサーバーでは適切なアノテーション設定が重要だ。

ITニュース解説

このニュースは、人気のあるAIチャットボットであるChatGPTの「開発者モード」を使用する際に発生した、ある特定の技術的な問題とその解決策について詳しく解説している。システムエンジニアを目指す初心者にとって、AIと外部システムを連携させる技術の一端を理解する上で非常に参考になるだろう。

まず、ChatGPTの開発者モードについて説明する。これは、ユーザーがChatGPTに特定の機能を追加し、AIが外部のサービスやデータと連携できるようにするための特別な環境である。通常、ChatGPTは学習済みの知識に基づいて応答するが、開発者モードを使うことで、ユーザーが独自に作成した「ツール」をAIに提供し、そのツールを使って特定の情報を取得したり、外部サービスを操作したりできるようになる。

ここで言う「ツール」とは、具体的には、AIが利用できるアプリケーションプログラミングインターフェース(API)のようなものであり、特定のタスクを実行するための機能群を指す。今回の記事で登場する「MCPサーバー」は、Model Context Protocolの略で、このようなツールをChatGPTのようなAIエージェントに提供するための仕組みを提供する。つまり、MCPサーバーを構築することで、AIはサーバーに定義されたツールを通じて、外部のデータや機能にアクセスできるようになるのだ。

筆者は、自身の開発している「dev.to MCPサーバー」をChatGPTの開発者モードで利用し始めたところ、奇妙な現象に気づいた。このサーバーは、プログラミング関連のブログ記事が投稿されるサイトであるdev.toから記事やユーザー情報を取得するなど、純粋に情報を「読み取る」ことだけを目的としたツールを提供している。しかし、ChatGPTの開発者モードでは、これらのツールが「書き込みツール」、つまりデータを変更したり作成したりする可能性のあるツールとして誤って表示されてしまったのである。

これは、システム開発において非常に重要な問題である。例えば、銀行口座の情報を「読み取る」だけのツールが、誤って「送金する」ツールとして表示されたら、ユーザーは大きな不安を感じるだろう。同様に、本来安全な読み取り専用ツールが書き込み可能と表示されることで、セキュリティ上の懸念や誤解を招く可能性がある。

この問題の原因は、ツールの定義方法にあった。筆者が使用していたMCPサーバーのツール定義には、そのツールが具体的にどのような操作を行うのか、AIに正確に伝えるための追加情報が不足していたのである。AIがツールを利用する際、そのツールの性質を理解するために、開発者は「アノテーション」と呼ばれる追加のメタデータ(付帯情報)を提供する必要がある。

解決策として、筆者は自身のMCPサーバーのすべてのツール定義に、二つの新しいアノテーションを追加した。それがreadOnlyHint: trueopenWorldHint: trueである。

readOnlyHint: trueというアノテーションは、その名の通り、「このツールは読み取り専用である」というヒントをAIに明確に伝える役割を果たす。trueを設定することで、ツールがデータを変更したり、新しいデータを作成したりする機能を持たず、既存の情報を取得することのみを目的としていることをAIが正しく認識できるようになる。これにより、ChatGPTの開発者モードでは、このツールが安全な「読み取り専用」として表示されるようになるのだ。

もう一つのopenWorldHint: trueというアノテーションは、「このツールは、一般的な情報や広く公開されているデータにアクセスする」というヒントをAIに与える。例えば、インターネット上の公開された記事や情報源を対象とするツールは、このopenWorldHintを持つことが適切である。これは、特定のプライベートな情報ではなく、誰でもアクセスできるような「オープンな世界」の情報を扱うツールであることをAIに示唆し、AIがその情報をどのように利用すべきか、その文脈を理解する助けとなる。

これらのアノテーションをツール定義に追加するプルリクエスト(GitHubでのコード変更提案)が作成され、適用された結果、ChatGPTの開発者モードにおける表示は期待通りに修正された。以前は書き込みツールと誤解されていたdev.toの各種ツールが、今では正しく「読み取り専用」として表示されている。これは、ツールの機能がUI上で正確に反映されるようになったことを意味し、ユーザーが安心してツールを利用できるようになったと言える。

この事例は、単に技術的なバグ修正にとどまらない、重要な教訓を含んでいる。それは、AIと連携するシステムを開発する際には、ツールの機能だけでなく、その性質意図をAIが正しく解釈できるよう、詳細なメタデータやヒントを提供することの重要性である。特に、ユーザーインターフェース(UI)上で表示される情報が、実際の機能と乖離していると、誤解や不安を生み、システムの信頼性を損なう可能性がある。

筆者が開発した「dev.to MCPサーバー」は、認証を必要とせずにdev.toの公開APIとやり取りできるリモートサーバーである。このサーバーは、具体的に以下のような「読み取り専用」の機能を提供している。get_articles(dev.toから記事を取得)、get_article(特定の記事を取得)、get_user(ユーザー情報を取得)、get_tags(人気のタグを取得)、get_comments(記事のコメントを取得)、search_articles(記事を検索する)。これらの機能はすべて情報を「読み取る」だけであり、記事を投稿したり、ユーザー情報を変更したりする機能は持っていない。だからこそ、これらのツールが「書き込みツール」として表示されることは、重大な誤解を招く可能性があったのである。

このニュースは、システムエンジニアを目指す初心者がAPI設計やAI連携システム開発において、単に機能を実装するだけでなく、その機能の安全性や意図を明示するための細やかな配慮が求められることを示している。アノテーションのようなメタデータは、人間だけでなく、AIがシステムを理解し、適切に動作するために不可欠な要素であり、今後のAI時代におけるソフトウェア開発の重要な側面の一つとなるだろう。

関連コンテンツ

関連IT用語