現役のITエンジニアが、 システム開発の現場で求められる知識を発信
記事検索

MCPサーバーを活用する【前編:自作編】

生成AI関連

はじめに

生成AIを業務に取り入れたいというご相談は増えていますが、「AIに社内ツールのデータを見せたいのに、どう渡せばいいかわからない」という声もよく耳にします。
現状、AIは標準では次のような操作ができない場合が多いです。

  • 社内ツール(例:進捗管理ツール・チェックシステム)のデータ取得
  • ローカルに保存されたExcelファイルやWordファイルを直接読む

例えばGitHub Copilotも、VS Code上の一部形式のファイルしか内容を認識できません。
しかし実務では、「AIに渡したいのに、渡しにくいデータ」がとても多いのが現実です。
そこで登場するのがMCP(Model Context Protocol)サーバーです。

本記事では、「MCPサーバーを活用する」シリーズの前編として、MCPサーバーをPythonで自作します。
後編では、このサーバーを GitHub Copilot(VS Code)から実際に呼び出すデモを掲載します。

MCPとは何か

MCP(Model Context Protocol)は、AIモデルが外部のツール・サービス・データソースと標準化された方法で連携できるようにするためのプロトコルです。
MCPが導入されることで、

  • AIがツールを呼び出す方法
  • ツールがどのような形式で応答するか
  • AIがどうコンテキストとして取り込むか

といった流れが共通化され、AIと外部システムの連携がシンプルかつ拡張しやすくなるというのが大きな特徴です。

MCPサーバーとは

Nano Banana Proで生成

MCPサーバーを“自作”するメリット

MCP対応ツールやサンプル実装は世の中に多数ありますが、それでも“自作する”メリットは大きいと感じています。

自社の用途に合わせて柔軟に設計できる

扱うデータは企業ごとに異なり、ほしい機能も業務によって違います。
自作であれば、

  • 必要な機能だけを最小構成で実装できる
  • 不要な機能を最初から省ける
  • 拡張したい部分を自社都合で増やせる

というメリットがあり、自社の業務フローに適したMCPサーバーを構築できます。

挙動が明確で、運用しやすい

どのファイルを読み込み、どの情報をAIへ渡すか、不要な副作用やブラックボックス化を避けることができます。
外部に公開されているMCPサーバーのコードは便利な反面、

  • どの権限を持っているか
  • どこにアクセスするのか
  • 外部通信があるか

が読み取りづらい場合があります。

自作であれば、会社に合ったセキュリティに考慮したMCPサーバーを作成することが可能です。

  • データソースに対して必要最低限な処理だけを“ホワイトボックス”な状態で組み込める
  • データはローカルPCまたは自社環境内のサーバーでのみ処理し、外部には送信しない
  • 不必要なデータをカットし、必要最低限な結果だけをAIに渡す
  • 社内リソースへのアクセスを「読み取り専用」とし、データが破壊/改変されることを避ける

今回作ったMCPサーバー

今回は例として、「任意のExcelファイルの内容を読み取れるMCPサーバー」を実装します。
後編で GitHub Copilot から呼び出し、実際にローカルファイルを読み取らせてみます。

本MCPサーバーを導入することで、AIが本来アクセスできないExcel資料を安全な形で参照できるようになり、要約・整理・レビューといった業務を効率化できます。
※ 今回は必要最低限の機能のみを実装しています

実装コード

main.py

import openpyxl
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("excel-mcp-server")


@mcp.tool(description="Excelファイル内のシート名を一覧表示します。")
def excel_list_sheets(file_path: str) -> str:
    """指定したExcelファイルに含まれる全シート名を改行区切りで返す"""
    wb = openpyxl.load_workbook(file_path, data_only=True)
    return "\n".join(wb.sheetnames)


@mcp.tool(description="Excelシートの内容を読み取り、CSV形式の文字列で返します。")
def excel_read_sheet(file_path: str, sheet_name: str | None = None) -> str:
    """
    指定したExcelファイルのシート内容をCSV形式で返す。
    sheet_name が None の場合は最初のシートを読み取る。
    """
    wb = openpyxl.load_workbook(file_path, data_only=True)

    target_sheet = sheet_name or wb.sheetnames[0]
    sheet = wb[target_sheet]

    cells_2d = sheet[sheet.dimensions]

    lines = []
    for row in cells_2d:
        values = ["" if cell.value is None else str(cell.value) for cell in row]
        lines.append(",".join(values))

    return "\n".join(lines)


if __name__ == "__main__":
    mcp.run()

このように、たった数十行でMCPサーバーを作成することが出来ます。

作成したMCPサーバーの概要

今回作成したMCPサーバーは、ExcelファイルをAIが扱える形に変換するための「最低限のツール」です。
MCPサーバーとして提供している機能は大きく次の2つです。

どちらの機能も「読み取り専用」に限定しており、Excelファイルの内容を変更することはありません。
AIに渡す情報も必要最小限に絞っているため、安全性とシンプルさを両立した構成になっています。

1. Excelに含まれるシート名の一覧取得

ファイル内にどのシートが存在するかを、AIから確認できるようにしています。
これにより、AIが「どのシートを読み取るべきか」を判断することが可能になります。

2. 指定したシートの内容をCSV形式で返す

Excelのセル情報を2次元で取得し、AIが扱える形(CSV)に変換して返します。
AIはExcelのバイナリ形式を直接理解できないため、MCPサーバー側で読み取りと整形を行う役割を担います。

まとめ

本記事では、MCPサーバーを自作するメリットと、その最小構成の実装例を紹介しました。
ポイントは、

  • 自社の用途に合わせて柔軟に作れる
  • 必要な範囲だけアクセスさせられる
  • 挙動を自分たちで完全に把握しやすい
  • まずは小さく始められる

という点です。

後編では、今回実装したMCPサーバーをGitHub Copilot(VS Code)から実際に呼び出し、ExcelをAIに読ませて活用するデモを紹介します。
生成AIが業務資料を扱えるようになると、日々のレビュー・要約・整理の負担が大きく軽減されます。

ぜひ後編も合わせてご覧ください。

生成AI活用支援サービスのご紹介

Tech Funでは、お客様のフェーズに合わせ、生成AI活用に向けた支援を3つのパックでご提供しています。

  1. 無料診断パック:業務・プロセスの現状を無料で診断し、生成AI活用の可能性をレポートします。
  2. 検証(PoC)パック:診断で有効性が確認された業務を対象に、プロトタイプ構築を支援します。
  3. コンサルティングサービス:生成AI導入戦略の策定から運用体制構築までを包括的に支援します。

生成AIに限らず、Web・業務システム開発やインフラ設計など、技術領域を問わずご相談を承っています。「何から始めれば良いか分からない」という段階でも構いませんので、ぜひお気軽にお問い合わせください。

執筆・編集

Tech Fun Magazine R&Dチーム
Tech Funの生成AI研究に携わるエンジニアが、最新のAIモデル動向やプロンプト設計、実業務への応用手法など、生成AIに特化した知見を執筆・編集しています。
モデル評価や業務シナリオに応じたAI活用設計など、日々のR&D活動で得られる実践的なノウハウをわかりやすく紹介します。

ARTICLE
生成AI関連記事一覧

生成AI関連

小さく始める生成AI活用

生成AI関連

MCPサーバーを活用する【前編:自作編】

記事一覧を見る