AIToday
大規模言語モデルAIコーディングZenn AI/ML掲載日時: 2026年10月10日 10:00

MCPサーバーをTypeScriptで自作

LINEで送る
MCPサーバーをTypeScriptで自作

@modelcontextprotocol/sdkでTypeScript製MCPサーバーを作成、list_todosツールを登録、公式MCP Inspectorでテスト、claude mcp addコマンドでClaude Codeに追加。stdioサーバーでconsole.logを1行書くとプロトコルに混ざりクライアントが沈黙する点を指摘。

わからないところ、AIに聞けます

質問と回答はこのページに公開されます。

こういう要約が、毎朝あなたのメールに届きます。

背景と解説

実体験に基づいて書かれている。筆者は社内API連携用のMCPサーバーをすでに自作してClaude Codeに繋いだことがあり、最初につまずいたのは実装の難しさではなく、console.logを1行書いたことで起きた静かな失敗だったと述べている。この失敗の仕方はstdioサーバーの仕組みに由来する。プロセスのstdoutはJSON-RPCの通信路そのものなので、そこに別のものを書けば会話が壊れる。ログの逃げ道として推奨されるのが、stderrに出力されるconsole.errorだ。

最初に作るツールとして推奨されているのは、あえて小さなlist_todosだ。ディレクトリを走査して.ts、.tsx、.js、.pyファイル内のTODOとFIXMEコメントを探し、ファイルパスと行番号付きで返す。筆者は、こうしたささやかなツールにも意味があると論じる。チームがすでに気にかけている情報を、LLMが届く範囲に加えられるからだ。

stdoutの罠以外にも、実用的なつまずきがいくつか挙げられている。緩いinputSchema(Zodライブラリで書くツールの引数定義)はクライアントの引数生成を不安定にするため、スキーマは厳密にすべきだ。claude mcp addに渡すエントリポイントは絶対パスが最も安全で、サーバーがClaude Codeを起動したディレクトリに依存しなくなる。また、サーバーを止めずにClaude Codeを終了すると子プロセスが残ることがあるため、開発中はps aux | grep tsxで確認するよう勧めている。最後の助言は、最小構成のツール1つのサーバーから始め、claude mcp addで繋いでから拡張せよというものだ。

よくある質問
既存のMCPサーバーを使わず、自分で作る意味はどこにあるのか?
市販のMCPサーバーはSlackやGitHubなど汎用サービスが中心だ。社内APIや自作スクリプト、独自の集約ロジックは自分でサーバーを書いて包むしかない。
MCPサーバーを書くとき最も多いミスは何か?
デバッグにconsole.logを使うこと。stdioサーバーではstdoutがJSON-RPCの通信路そのものなので、その出力がプロトコルのメッセージを壊し、クライアントはパースエラーで沈黙する。代わりにconsole.error(stderr)へ出力するよう案内している。
Claude Codeに繋ぐ前にサーバーの動作を確認する方法は?
公式のMCP Inspectorをサーバーに対して実行する。ブラウザが開き、ツールのスキーマを確認したり、呼び出して戻り値を確かめたりできる。
LINEで送る

あなたの仕事に関係するAIニュースを、毎朝お届けします。

業界と使っているAIツールを選ぶと、仕事に関係するニュースが毎朝届きます。

登録無料・Googleアカウントなら30秒・いつでも解除できますAITodayについて →

AIに質問

この記事についてわからないことをAIに質問できます。AIはこの記事・AIToday の過去記事・Wikipedia を読み、出典を付けて答えます。Q&Aはこのページに公開され、他の読者も読めます。

質問と回答はこのページに公開されます。

関連記事

次の記事へMCPでAIアシスタントを企業データ接続