🦭

MCPサーバーのTool名のハイフン`-`とアンダースコア`_`でハマった話

に公開

はじめに

最近、界隈で話題になっている MCP(Model Context Protocol)サーバーに興味を持って実装を始めたのですが、Cursorから動かそうとしたときにはまったことを共有します。

結論

なんてことはないです。
tool名にはハイフン-を使わず、アンダースコア_を使いましょう、っていう知ってる人には至極当たり前の話…たぶん

問題

自作のMCPサーバーでcount-charsというtoolを実装しました。

count-chars

それをCursorから呼び出してもらうのですが、何度やってもハイフンがアンダースコアになったcount_charsを呼んでしまい、Tool count_chars not foundというエラーが出て呼び出しに失敗する、という事象に悩まされました。

実行

エラー

Cursor Setting の MCP を見てみると、Toolsに、count_charsと表示されています。

tool読み込み

Tool名の実装を、ハイフン-からアンダースコア_に変えたら解決した

結局、Tool名の実装をハイフン-からアンダースコア_に変えることで、呼び出し時のTool名と実装してるTool名を一致させたら、エラーなく実行できるようになりました。

色々調べてみたところ、そもそもJavascriptには、変数名でハイフン-が使えないという制限があるようです。(地味に知らなかった…)可能性として、Typescript SDKか、もしくはCursor内部の処理系で、-_ に自動変換されているのではないか、という結論に至っています。

(Javascriptのライブラリでも、内部的にハイフン-をアンダースコア_に変換するようになってるものが多いらしい…知らんかった…)

そうして出来上がったMCPサーバー:Japanese Text Analyzer

日本語テキストの形態素解析を行えるMCPサーバーです。
文字数をカウントしたり、品詞の割合を計算したりできます。
例えば、「小学校低学年でもわかりやすい文章」って指示して生成された文章が本当に指示通りになっているかをチェックしたいときに活躍すると思います。

https://github.com/Mistizz/mcp-JapaneseTextAnalyzer

まとめ

MCPのTool名は、アンダースコア_で!
同じようにハマっている人の一助になれば幸いです。

GitHubで編集を提案

Discussion