🤖

社内の開発者向けMCPサーバのモノレポを構築した

に公開

はじめに

anyのエンジニアの荒川です。最近はClaude Codeを使った開発がますます楽しくなってきて、ついにMax 20xユーザになりました🎉

みなさんも開発中に、「この機能の仕様どうなっていたっけ?」や「このテーブルの構造どうなってたっけ?」と思うことがありますよね。Claude CodeやCursorのMCP経由で聞けるようにすると便利そうだと思い立ち、社内専用のMCPサーバを構築したので紹介します!

qast-knowledge-mcp - 社内ナレッジの検索・活用

概要

まず弊社の提供するQastは、社内のナレッジを蓄積・共有するためのツールです。今回の主題とは逸れるため詳細なサービス紹介は控えますが、開発者にとって馴染みの深いツールでイメージしてもらうとしたらNotionやConfluenceのようなものだと考えていただけたらよいと思います。

エンジニアのメンバーは、日々の業務でQastに蓄積されたナレッジを活用しています。qast-knowledge-mcpは、Qastのナレッジに任意のMCPクライアントからアクセスすることを可能としたものです。

実際の使用例

例えばQastに下記のようなナレッジが蓄積されていたりします。こちらはGitHubのPRのコメントでラベルを設定すると便利というTipsのような記事になっています。

実際のQastの画面

このMCPを設定することで下記のようにナレッジを引き出すことができます。

> qast で shield.io について調べて

すると、以下のような結果が得られます🎉

Claude Codeの画面キャプチャ

開発中に必要な社内ナレッジを素早く検索・参照できるようになりました。もちろんWeb UIからも検索できるのですが、Claude Codeのようなツールから直接読みに行けることで、Qastにナレッジを貯める楽しみが増えました。

主な機能

MCPサーバの実装は下記のようなToolsを二つ提供しています。

  1. search_documentation - キーワードによるドキュメント検索

    • シンプルなキーワード検索(文章ではなく単語で検索)
    • 検索結果からIDを取得し、詳細な内容の読み取りが可能
  2. read_documentation - ドキュメントの全文読み取り

    • 検索結果で取得したIDを使用して、ドキュメントの詳細情報を取得
    • タイトル、本文、作成者情報などを返却

下記のように定義して各Toolを登録し、QastのAPIから値を取得します。

this.server.registerTool(
  "read_documentation",
  {
    title: "Read Documentation",
    description:
      "...",
    inputSchema: {
      id: z
        .string()
        .describe(
          "...",
        ),
      postType: z
        .enum(["Memo", "Question"])
        .describe("...
    outputSchema: {
      title: z.string(),
      content: z.string(),
      url: z.string(),
    },
  },
...

mysql-research-mcp - データベーススキーマの探索

概要

既存のデータベースを使った開発では、テーブル構造やカラム定義、リレーションシップを理解することが不可欠です。しかし、MySQLクライアントを開いてSHOW TABLESDESCRIBEコマンドを実行する作業は、特に複数のテーブルを調査する際には時間がかかりますよね。mysql-research-mcpは、データベースのスキーマ情報を効率的に探索し、開発者が必要とする情報を即座に提供します。

実際の使用例

「userテーブルについて調べたい」という場合:

> userテーブルについて調べて

Claude Codeの画面キャプチャ

このようにMCPクライアントから取得することができます。実際はローカルのMySQLコンテナに接続して、テーブルの情報を取得し、結果を返却しています。

主な機能

同様に、MCPサーバの実装は下記のようなToolsを二つ提供しています。

  1. list_tables - データベース内の全テーブル一覧を取得

    • テーブル名、エンジン、文字セット、コメント
    • プライマリキー、ユニークキー、外部キー情報
  2. describe_tables - 特定テーブルの詳細スキーマ情報を取得

    • カラムの詳細情報(型、NULL可否、デフォルト値、コメント)
    • プライマリキー、ユニークキー、外部キー制約の詳細
    • インデックス情報

こちらについては、shibayu36さんのGoによる実装を参考にさせていただき、そちらをTypeScriptに移植した実装になっています。

パッケージ構成について

これらのMCPサーバーは、pnpm workspacesを使用したモノレポ構成で開発されています。

packagesディレクトリ配下に、qast-knowledge-mcpmysql-research-mcpの2つのサーバーが配置されています。各MCPサーバーは独立したパッケージとして管理され、以下のコマンドで簡単にセットアップできます。

pnpm install
pnpm run build

モノレポ化自体は、MCPサーバとは関係ありませんが、MCPサーバをまとめて管理するという意味では、 AWS LabsのMCPプロジェクトを参考にしています。これで「MCPサーバを作りたい!」と思い立った時に、packages配下に新しいサーバを追加するだけで、すぐに開発や実装を始めることができます。

biome.jsonの設定や、ビルド周りで疲弊したくないですからね。プロジェクト標準に合わせておきたいですね。

デバッグについて

開発においてはMCP Inspectorを利用することで、MCPサーバのデバッグが非常に便利だったので紹介します。現時点ではstdio経由のみをサポートしているため、ややデバッグが難しいのですが、AnthropicのMCP Inspectorを利用することで、MCPサーバのリクエストやレスポンスを可視化できます。RESTFulクライアントのように利用できるかつ、スキーマ構造の不備なども確認できるため、非常に便利です。

詳細については下記を参考にすることをお勧めします。
https://github.com/modelcontextprotocol/inspector

まとめ

開発者体験向上の取り組みの一つとして、社内専用のMCPサーバを構築しました。これにより、日々の開発業務が少しでも楽になればと思っています。皆さんも、日々の業務で感じる「面倒だな」と思う作業があれば、MCPサーバーとして実装することで、自分だけでなくチーム全体の生産性向上に貢献できるかもしれません。ぜひ!

参考

  • mysql-schema-explorer-mcp - mysql-research-mcpの参考実装とさせていただきました。ありがとうございました。
any株式会社

Discussion