🔥

Claude Codeでesa MCPを使ってみた

に公開

はじめに

こんにちは。株式会社つみき 「Filmarks(フィルマークス)」インフラチームの久松(@karia2nd)です。

つみきでは技術ドキュメントの共有ツールとしてesaを活用しています。つみきの社内esaには開発チーム内のミーティングの議事録、技術的な調査結果やアイデアなど、さまざまなドキュメントが存在します。現在の総記事件数は2000件を突破しており、日々増加しています。

そんなesaの公式から、待望のローカルMCPサーバーが公開されました!MCPサーバーは、ChatGPTやClaudeのような生成AIと外部ツールを接続するための役割を果たします。これにより生成AIで検索やファイル操作などが可能になります。

今回はこのesa ローカルMCPサーバーをClaude Codeに設定して使ってみました。設定方法についての記事を社内esaに書こうと思ったのですが、せっかくなのでZennに公開したいと思います。

設定

Claude CodeへのMCPの追加は、 claude mcp add コマンドで行います。公式ドキュメントによると、このコマンドの構文は以下の通りです。

claude mcp add <name> <command> [args...]

nameには、MCPの名前を指定します。今回はesa MCPを追加するので esa としました。

commandには、MCPの実行コマンドを指定します。esa MCPの場合は npx @esaio/esa-mcp-server となりますが、npxコマンドはフルパスで指定したほうが良いようです。 which npx コマンドでパスを調べてみましょう。

which npx 
/home/karia/.local/share/mise/installs/node/22.20.0/bin/npx

私はNode.jsをmise経由でインストールしているためこのようなパスになります。これで先ほどの npx コマンドを置き換えます。

--scope user を付けることでホームディレクトリにある .claude.json に設定が保存され、同じマシン内なら他のプロジェクトでもMCPを利用できるようになります。付けない場合は単一のプロジェクト内でのみ利用可能になります。この辺りは状況に応じて設定すると良いかと思います。

--env オプションでMCPが利用する環境変数を設定できます。これを利用してesaのパーソナルアクセストークン(PAT)を渡します。esa公式のReleaseNotesを確認して発行してください。私はread権限のみを持つPATを発行しました。なおこの方法で環境変数を設定した場合、.claude.json にPATが平文で保存されるため、セキュリティには注意してください。

最終的なコマンドは以下のようになります。

claude mcp add esa \
  --scope user \
  --env ESA_ACCESS_TOKEN=your_access_token \
  -- /home/karia/.local/share/mise/installs/node/22.20.0/bin/npx @esaio/esa-mcp-server

削除するときは claude mcp remove esa で削除できます。

実際に使ってみる

claude コマンドでClaude Codeを起動したあと、 /mcp と入力すれば、esa MCPに接続できていることが確認できます。

あとは実際にClaude Codeから使ってみるだけです。試しに質問してみましょう。

esaでhisamatsuというIDの人物は何件記事を書いている?

すると以下のようにMCPの利用許可を求めるダイアログが出ます。内容を確認して許可してあげましょう。

途中で謎の試行錯誤をしていますが、最終的には正しい件数を回答してくれました。

> esaでhisamatsuというIDの人物は何件記事を書いている? 

● esaでhisamatsuさんの記事数を確認します。まず利用可能なチームを確認してから検索します。
  ⎿  {                                                                                                            
       "teams": [
         {
     … +12 lines (ctrl+o to expand)

● esa - esa_search_posts (MCP)(teamName: "xxxx", query: "user:hisamatsu", perPage: 1)
  ⎿  [                                                                                                            
       {
         "url": "https://xxxx.esa.io/posts/1234",
     … +34 lines (ctrl+o to expand)

● 検索結果から、total_countが表示されていないので、より詳細な情報を取得します。

● esa - esa_search_posts (MCP)(teamName: "xxxx", query: "user:hisamatsu", perPage: 100)
  ⎿  Error: MCP tool "esa_search_posts" response (80179 tokens) exceeds maximum allowed tokens (25000). Please use 
     pagination, filtering, or limit parameters to reduce the response size.

● レスポンスが大きすぎるため、まずは1件だけ取得して総件数を確認します。
  ⎿  {                                                                                                            
       "url": "https://docs.esa.io/posts/104",
       "wip": "Shipped",
     … +63 lines (ctrl+o to expand)

● esa APIのレスポンスには総件数情報が含まれていないようなので、GitHub
  APIを使ってメンバー情報から投稿数を確認します。

● esa - esa_get_team_members (MCP)(teamName: "xxxx", perPage: 100)
  ⎿  {                                                                                                            
       "members": [
         {
     … +301 lines (ctrl+o to expand)

● hisamatsuさんは636件の記事を書いています。

おわりに

esa MCPを利用することで、esaの記事をClaude Codeから簡単に検索できるようになりました。

esaを使っている開発メンバーからの声として「記事がどこにあるのかわかりにくい」と言われるのですが、MCPを使えばClaude Codeが代わりに探してくれるので、いちいち検索する手間が省けて便利です。esaを使っている組織の方はぜひ試してみてください!

つみきではesaと生成AIを使いこなすエンジニアを募集しています!

Filmarks Engineering Blog

Discussion