🤖

サポートサイトの記事を検索・閲覧できるMCPサーバーを作った

に公開

はじめに

こんにちは。hidechaeです。普段はGoを書いています。

Anthropic社のAIアシスタント「Claude」のデスクトップアプリケーション版では、MCPサーバー(Model Control Protocol)という仕組みを使って、外部のデータソースにアクセスする機能が提供されています。この機能を使うと、Claudeに特定のデータソースの情報を参照させることができます。

弊社ではZendeskを使ってサポートサイトを公開しています。クライアント向けのページなのでエンジニアとしてはサポートサイトを見る機会は少なかったのですが、ここ数年でページ数が増えて情報が溜まってきているのでもったいないなと感じていました。Claudeからこの情報にアクセスすることで活用できると便利だと思い、Zendeskのヘルプセンターの記事を検索したり、特定の記事の詳細を取得したりできるMCPサーバーを作成しました。

MCPサーバーとは

MCPサーバーは、Claudeがローカル環境や外部サービスと連携するためのプロトコルに準じたサーバです。これにより、AIアシスタントが特定のデータソースにアクセスしたり、特定のアクションを実行したりすることが可能になります。

Claude Desktopでは、設定ファイルにMCPサーバーの情報を追加することで、Claudeから直接これらのサーバーを利用できるようになります。

MCPサーバーの実装は以下のドキュメントが詳しいです。

https://modelcontextprotocol.io/quickstart/server#node

Zendesk Help Center MCP Server

今回作成したものは、以下に公開しています。

https://github.com/hidechae/zendesk-help-center-mcp-server

今回作成したMCPサーバーには、以下の2つの主要機能があります:

  1. 記事検索(searchArticles): Zendeskヘルプセンター内の記事をキーワードで検索できます
  2. 記事詳細取得(getArticle): 特定の記事IDに基づいて、記事の詳細情報を取得できます

これらの機能により、Claudeに「製品Xの使い方について教えて」と質問すると、Claudeが自動的にZendeskヘルプセンターから関連情報を検索し、回答に活用できるようになります。

Claude Desktopでの使用方法

このMCPサーバーを利用するには、以下が必要です:

  • Zendeskアカウント(API アクセス権限付き)
  • Zendesk API トークン

このMCPサーバーはnpxコマンドで直接実行できるため、インストールやビルドの手順は不要です。Claude Desktopの設定ファイルの mcpServers セクションに以下の設定を追加するだけで利用できます:

{
  "mcpServers": {
    "zendeskHelpCenter": {
      "command": "npx",
      "args": ["-y", "github:hidechae/zendesk-help-center-mcp-server"],
      "env": {
        "ZENDESK_SUBDOMAIN": "your-subdomain",
        "ZENDESK_EMAIL": "your-email@example.com",
        "ZENDESK_API_TOKEN": "your-api-token"
      }
    }
  }
}

この設定を追加した後、Claude内でZendeskヘルプセンターのツールを使用できるようになります。Claudeが自動的にnpxコマンドを実行し、MCPサーバーを起動します。

使用例

記事の検索

Claudeに以下のように質問することで、Zendeskヘルプセンターの記事を検索できます:

製品Xの設定方法について、ヘルプセンターから情報を検索してください。

特定の記事の詳細取得

特定の記事IDがわかっている場合、以下のように質問することで詳細情報を取得できます:

ヘルプセンターの記事ID 12345の内容を教えてください。

技術的な詳細

このMCPサーバーは、Node.jsで実装されており、Zendeskの公式APIを使用してヘルプセンターの記事にアクセスしています。サーバーは標準入出力を通じてClaudeと通信し、JSONベースのMCPプロトコルに従ってデータをやり取りします。

https://developer.zendesk.com/api-reference/help_center/help-center-api/introduction/

工夫した点

レスポンスサイズの最適化

私はClaudeの有料プランを使っていたので問題なく動いたのですが、CSの担当者にも試してもらったところ、エラーで正常に動きませんでした。

エラーの詳細が分からなくて困ったのですが、おそらくレスポンスが大きいことによるトークン制限に引っかかってるのだろうと思い、レスポンスサイズを小さくするための工夫を行いました。

  1. 検索結果からbodyを除外: 検索APIのレスポンスにも記事本文が含まれていたので、Claudeに渡すレスポンスからは除外し、必要な場合はgetArticleを使って個別に取得する二段階アプローチを採用しました。

  2. 必要なフィールドのみに制限: 検索結果と記事詳細の両方で、id、url、title、作成日時、更新日時などの基本情報のみに絞り込み、不要なメタデータを除外しました。

  3. HTML本文のクリーニング: getArticleで取得する記事本文についても、不要なHTML属性(style、id、classなど)や余分なタグを除去し、空のタグや連続した空白行なども整理しました。

これらの最適化により、APIレスポンスのサイズが大幅に削減され、Claudeの無料プランでもトークン上限に達することなく利用できるようになりました。

応答ガイドラインの設定

技術的な最適化だけでなく、Claudeの使い方にも工夫を加えました。ツールを確実に利用してもらうため、Claudeの応答ガイドラインに以下のような設定を追加しました。

STAFF START(スタッフスタート)について聞かれたときは、日本語でZendesk Help Centerの情報を検索し、ヒットした記事に基づいて回答し、情報ソースとなったページのURLも教えて下さい。

このようなガイドラインを設定することで、特定のトピックについて聞かれた場合に確実にZendeskを参照してくれるようになり、また情報ソースとして記事のURLも提示してくれるようになりました。これにより、ユーザーは回答の信頼性を確認できるだけでなく、必要に応じて元の記事を直接参照することも可能になりました。

まとめ

Zendesk Help Center MCP Serverを使用することで、Claude DesktopからZendeskヘルプセンターの情報に簡単にアクセスできるようになります。これにより、社内ナレッジベースの情報をAIアシスタントの回答に活用することができ、より正確で文脈に沿った回答を得ることができます。

実際、仕様確認が必要なとき非常に楽になりました。一部の人にしか試してもらっていませんが、良さそうなら利用範囲を広げていければと思います。特に新人のサポートとしてとても良いんじゃないかと思います。

また、ナレッジベースはZendeskだけでなく、ConfluenceやJiraにドキュメントがあるので参照範囲を増やし、Claudeをベテラン社員のような存在にできるといいなと思っています。

株式会社バニッシュ・スタンダード

Discussion