🆙

Model Context Protocol (MCP) サーバを使ってみた・作ってみた

に公開

Model Context Protocol(MCP)は、AI(LLM)の能力を拡張するためのプロトコルです。このブログ記事では、以下について書きます。

  • MCPの概要
  • MCPを使ってみた
  • MCPを作ってみた

MCPとは何か?

Model Context Protocolは、AI(GPTやClaudeなどのLLM)が外部システムやAPIと通信するための標準化されたプロトコルでAnthropic社が定めたものです。MCPを使用することで、AIアシスタントは以下のようなことが可能になります:

  • インターネット上の情報にアクセスする
  • データベースを検索する
  • ファイルシステムを操作する
  • 外部APIを呼び出す
  • GitやGitHubなどの開発ツールを操作する

MCPの公式サイトの紹介文には以下のような概念図があります。


modelcontextprotocol.io introductionより引用

また以下のように「MCPはAIアプリケーションのUSB-Cみたいなものと考えてくれ(適当訳)」という表現もあります。

Think of MCP like a USB-C port for AI applications.

要はMCPを使って、いろいろな機能を手軽にLLMに追加したり、削除できるよということです。

MCPを使うとどういうメリットがあるかというと、長ったらしい.clinerulesや、特定の機能を使うための環境構築をブロックとして自由に組み込んだり、切り離したりできます。

Anthropic社が作ったプロトコルではありますが、オープンな規格なので、Claudeだけでなく、どんなLLMでも基本的には使うことができます。

私はCline(Roo Code)の環境でMCPを使ってみました。Clineに関しては以下記事参照ください。

https://zenn.dev/mkj/articles/cf8536923d9cd7

MCPを使ってみた

実際にMCPを使ってみます。公式のMCPサーバのGitHubリポジトリにずらっと、MCPサーバが並んでいます。MCPサーバはオープンな規格で誰でも作れるので、公式以外にも個人で作った野良MCPサーバもたくさんネット上にあります。

さまざまなMCPサーバがあって、セットアップ方法をみるとClaude Desktopについて書いてあったり、セットアップ方法もDockerやらuvやらnpmやら様々で、最初はそもそもClineで使えるのかも分からず困惑しました。

結論から書くと、Cline(Roo Code)で公式MCPサーバは手軽に使うことができます。

MCPサーバには、MCPサーバのセットアップとMCPクライアントのセットアップの2つが必要なのですが、Clineで公式MCPサーバを使うときには、(MCPサーバによりますが)MCPサーバのセットアップはほぼ自動化されています。

ClineでのMCPサーバの設定

Cline(Roo Code)の以下のMCPサーバ設定画面で「MCP設定を編集」を選択します。

するとcline_mcp_setttings.jsonが開くので、ここにMCPサーバの設定を書きます。本家のClineだと、MCPストアがあって、MCPを選択することで手軽にセットアップできるようなのですが、Roo Codeはまだこれからみたいなので、今は自分で手書きで設定する必要があります。

MCPサーバはMCPのルールに則っていれば、好きに作れてしまうので設定方法はMCP次第で無数にあるのですが、セットアップを手軽にしつつ、環境の競合を起きにくくするために、仮想環境を用いたものが便利ですし、推奨されていることが多いです。代表的なものはDocker、uv, npmを使ったものです。大体どれも必要になってくるので、環境をセットアップしておきましょう。

Docker環境のセットアップに関しては以下記事を参照ください。
https://zenn.dev/mkj/articles/33befbaf38c693

uvのセットアップ方法は以下記事を参照ください。
https://zenn.dev/karaage0703/articles/029b45ff78bc57

npmに関しては以下記事を参照ください。
https://zenn.dev/karaage0703/articles/ecf24124c1a535

おすすめなのはDockerを使用するものです。公式のMCPサーバだと、PCにDocker環境さえセットアップされていたら、設定を書くと記載したDockerコマンドを実行してDockerイメージをダウンロードしてセットアップしてくれます。

PythonベースのMCPの場合は、多くがuvでのセットアップを推奨しています。uvを使うと手軽に仮想環境に環境構築できるので良いと思います。

今回は、brave-searchとfetchとgithubという3つのMCPサーバをインストールしてみます。このMCPサーバの選定とセットアップに関しては以下記事を参考にさせていただきました(というかこの記事がほぼ全て)

https://zenn.dev/hiroga/articles/roo-code-deep-research-with-mcp

以下の設定をcline_mcp_setttings.jsonにコピペします。<BRAVE_API_KEY> <GITHUB_PERSONAL_ACCESS_TOKEN>は、それぞれのサービスに登録して取得してください。方法は、ChatGPTとかに聞いてください。無料で取得できます(Brave Searchはクレジットカード登録が必要です)。

{
  "mcpServers": {
    "brave-search": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "BRAVE_API_KEY",
        "mcp/brave-search"
      ],
      "env": {
        "BRAVE_API_KEY": "<BRAVE_API_KEY>"
      },
      "alwaysAllow": [
        "brave_web_search"
      ]
    },
    "fetch": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "mcp/fetch"
      ],
      "alwaysAllow": [
        "fetch"
      ]
    },
    "github": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "mcp/github"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<GITHUB_PERSONAL_ACCESS_TOKEN>"
      }
    }
  }
}

設定を追加すると、エラーがなければ、ClineのMCPサーバの設定画面に以下のようにMCPサーバの設定が追加され、サーバーのセットアップも自動でされます。

これで、MCPサーバとMCPクライアントの設定は完了です。自分の場合はそのまま使えましたが、念の為VS Codeエディタを再起動しておくとよいかもしれません。

設定がうまくいかないときは、MCPサーバのREADMEのURLをコピーして、Clineに以下のようにお願いすれば結構いい感じにしてくれます。

以下のMCPサーバをこのPCで使えるように設定してください。
@https://github.com/modelcontextprotocol/servers/xxxx
Dockerの MCP error -32000 エラーが出る場合

私の環境では、以下のようなエラーがでる場合がありました。

docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. See 'docker run --help'. MCP error -32000: Connection closed

Rancher Desktopのバージョンアップをすることで動くようになりました。1.16.0と1.18.2で動作することを確認しました。

なお、Clineにエラーを調べてもらうことで問題発見できました。

色々なMCPサーバを使ってみる

実際にMCPサーバの威力を体感してみましょう。以下のようなプロンプトをClineに入力します。

BraveSearchでおすすめのMCP Serverを探して、リスト化して書き出して

すると、なんということでしょう。bravesearchで検索、検索したサイトをfetchでコンテンツ取得、githubでの検索と、複数のMCPサーバーを駆使して、レポートを作成してくれました。

実際にLLMが作成したレポートは以下です。そのままコピペしています。もはやジェネリックDeep Researchですね。

作成したMCPサーバのレポート

おすすめMCP Serverリスト

Model Context Protocol (MCP)は、AIモデルが外部ツールやデータソースと安全に対話するためのオープンプロトコルです。このリストでは、特に有用で人気のあるMCP Serverをカテゴリ別に紹介します。

目次

公式リファレンス実装サーバー

これらはAnthropicによって開発された公式のリファレンス実装です。

  • Filesystem - ファイルシステムへの安全なアクセスを提供し、設定可能なアクセス制御機能を備えています
  • GitHub - リポジトリ管理、ファイル操作、GitHub API統合を提供
  • Brave Search - Brave検索APIを使用したウェブ検索と地域検索機能
  • Fetch - ウェブコンテンツの取得と変換機能
  • PostgreSQL - スキーマ検査機能を備えた読み取り専用データベースアクセス
  • SQLite - データベース操作とビジネスインテリジェンス機能
  • Memory - ナレッジグラフベースの永続的メモリシステム

ファイルシステムとバージョン管理

ファイルシステムやバージョン管理システムとの統合を提供するサーバー。

  • Git - Gitリポジトリの読み取り、検索、操作ツール
  • GitLab - GitLab APIを使用したプロジェクト管理
  • Google Drive - Google Driveのファイルアクセスと検索機能
  • Everything Search - Everything SDKを使用した高速Windowsファイル検索

データベースとストレージ

データベースやストレージシステムとの統合を提供するサーバー。

  • MongoDB - MongoDBデータベース用のMCPサーバー
  • MongoDB Lens - MongoDBデータベース用の機能豊富なMCPサーバー
  • MySQL - 設定可能なアクセス制御とスキーマ検査機能を備えたMySQLデータベース統合
  • BigQuery - スキーマ検査とクエリ機能を備えたBigQuery統合
  • Snowflake - 読み書き機能とインサイト追跡機能を備えたSnowflakeデータベース統合
  • Airtable - Airtableデータベースへの読み書きアクセス

検索とウェブ関連

検索エンジンやウェブ関連の機能を提供するサーバー。

  • Puppeteer - ブラウザ自動化とウェブスクレイピング
  • Kagi - Kagi検索API統合
  • Exa - Exa AI検索API
  • Playwright - Playwrightを使用したブラウザ自動化とウェブスクレイピング
  • Google Maps - 位置情報サービス、経路案内、場所の詳細情報

コミュニケーションとノート取り

コミュニケーションツールやノート取りアプリとの統合を提供するサーバー。

  • Slack - チャンネル管理とメッセージング機能
  • Obsidian - Obsidianとの統合、ファイル管理、検索、コンテンツ操作ツール
  • Notion - 個人のToDoリスト管理のためのNotion API統合
  • Apple Notes - Apple Notesとの対話
  • Sentry - Sentry.ioからの問題の取得と分析

AI・ML関連サービス

AI・ML関連サービスとの統合を提供するサーバー。

  • OpenAI - MCPプロトコルを使用してClaudeから直接OpenAIモデルにクエリを実行
  • Perplexity - Perplexityとの対話
  • HuggingFace Spaces - HuggingFace Spacesの使用、画像、音声、テキストなどをサポート
  • any-chat-completions-mcp - Perplexity、Groq、xAIなどのOpenAI SDK互換のChat Completions APIとのチャット

開発ツールと自動化

開発ツールや自動化機能を提供するサーバー。

  • Docker - Dockerコンテナ、docker compose、ログの実行と管理
  • Windows CLI - PowerShell、CMD、Git Bashシェルへの制御されたアクセスを可能にするWindowsシステム用の安全なコマンドライン対話
  • Windows Control - nut.jsを使用したマウス、キーボード、ウィンドウ管理、スクリーンキャプチャなどのWindowsシステム操作のプログラム制御
  • Kubernetes - Kubernetesクラスターへの接続とポッド、デプロイメント、サービスの管理
  • Make - MakeのシナリオをAIアシスタント用の呼び出し可能なツールに変換

その他の特殊用途サーバー

特定の用途に特化したサーバー。

  • Pandoc - Pandocを使用したシームレスな文書形式変換、Markdown、HTML、プレーンテキストをサポート、PDF、csv、docxなどの他の形式も開発中
  • Data Exploration - .csvベースのデータセットに対する自律的なデータ探索、最小限の労力で知的な洞察を提供
  • CoinCap - CoinCapの公開APIを通じてリアルタイムの暗号通貨市場データを提供するMCPサーバー
  • Apple Shortcuts - Apple Shortcutsとの統合
  • Vega-Lite - VegaLite形式とレンダラーを使用して取得したデータから視覚化を生成

MCP関連ツールとリソース

MCP Serverの管理や使用に役立つツールとリソース。

  • mcp-cli - MCP Serverのインスペクタ
  • mcp-client - MCP REST APIとCLIクライアント、OpenAI、Claude、Gemini、Ollamaなどをサポート
  • MCP-Bridge - 既存のOpenAI互換クライアントでMCPを使用するためのOpenAIミドルウェアプロキシ
  • MCP-Chatbot - ツールサーバーをOpenAI互換のLLM APIと統合するシンプルかつパワフルなCLIチャットボット
  • MCP-Connect - クラウドベースのAIサービスがHTTP/HTTPSリクエストを介してローカルのStdioベースのMCPサーバーにアクセスできるようにするクライアント
  • mcp-get - MCP Serverのインストールと管理のためのCLIツール

インストール方法

TypeScriptベースのサーバーはnpxで直接使用できます。例えば:

npx -y @modelcontextprotocol/server-memory

Pythonベースのサーバーはuvxまたはpipで使用できます:

# uvxを使用
uvx mcp-server-git

# pipを使用
pip install mcp-server-git
python -m mcp_server_git

Claude Desktopでの設定例

{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-memory"]
    },
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/files"]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
      }
    }
  }
}

参考リンク

使ってみたMCPサーバ

使ってみたらとりあえず列挙していきます。Dockerとuvとnpmがインストールされていることを前提としています。

設定ファイルはcline_mcp_setttings.jsonを想定していますが、Cursorなどの他のMCPクライアントでも同様の設定で動くと思います。

設定と使用例は上で紹介したので省略。

fetch

設定と使用例は上で紹介したので省略。

GitHub

設定と使用例は上で紹介したので省略。

Slack

Slackに投稿したり、チャンネルの内容を読んだりできます。

READMEの通りに設定すればできました。MCPサーバはDockerでセットアップしました。

Botを作ってSlackサーバに追加して、xxxチャンネルにxxxと投稿してとか言えば、投稿してくれます。

YouTube

YouTubeの情報を取得できます。設定は以下の記事が参考になりました。
https://zenn.dev/takna/articles/mcp-server-tutorial-03-youtube

Macの場合はHomebrewでyt-dlpを以下コマンドでインストールします。

$ brew install yt-dlp

あとは設定ファイルに以下を書き込むだけです。

{
  "mcpServers": {
    "youtube": {
      "command": "npx",
      "args": [
        "-y",
        "@anaisbetts/mcp-youtube"
      ]
    }
  }
}

Notion

NotionのAPIでできることは一通りできます。具体的には、読み書き検索等ができます。

あらかじめ、git cloneでNotion公式サーバのリポジトリをダウンロードしておきます。

Notionの設定は以下のとおりです。

  1. NotionのIntegrationsのページでIntegrationを作成してAPI Keyを取得
  2. MCPサーバでアクセスしたいページに、作成したIntegrationを接続

cline_mcp_setttings.jsonに以下を書き込みます。

{
  "mcpServers": {
    "notionApi": {
      "command": "npx",
      "args": ["-y", "@notionhq/notion-mcp-server"],
      "env": {
        "OPENAPI_MCP_HEADERS": "{\"Authorization\": \"Bearer ntn_****\", \"Notion-Version\": \"2022-06-28\" }"
      }
    }
  }
}

Bearer ntn_****ntn_****のところに、NotionのAPI Keyを書き込んでください。

公式じゃないMCPサーバのセットアップ方法

公式MCPが出た今、あまり必要なさそうですが、一応残しておきます。

以下のページに詳しくセットアップ方法が記載されています。
https://qiita.com/suekou/items/44c864583f5e3e6325d9

MCPサーバのセットアップ方法は以下です。

$ git clone https://github.com/suekou/mcp-notion-server.git
$ cd mcp-notion-server/notion
$ npm install
$ npm run build
$ npm link

Notionの設定は以下のとおりです。

  1. NotionのIntegrationsのページでIntegrationを作成してAPI Keyを取得
  2. MCPサーバでアクセスしたいページに、作成したIntegrationを接続

cline_mcp_setttings.jsonに以下を書き込みます。

{
  "mcpServers": {
    "notion": {
      "command": "node",
      "args": [
        "buildしたファイルのパス"
      ],
      "env": {
        "NOTION_API_TOKEN": "先程取得したトークン"
      }
    }
  }
}

buildしたファイルのパスはMCPサーバをおいた場所です。例えば"/Users/karaage/mcp-notion-server/notion"といった形で指定してください(mcp-notion-serverでなく、その下のnotionまで指定する必要があります)。

ArXiv MCP Server

uvさえインストールされていたら、特別な事前設定は不要です。cline_mcp_setttings.jsonに以下を書き込みます。

<file path>には論文を置く、ファイルの絶対パスを指定します。

{
  "mcpServers": {
    "arxiv-mcp-server": {
      "command": "uv",
      "args": [
        "tool",
        "run",
        "arxiv-mcp-server",
        "--storage-path", "<file path>"
      ]
    }
  }
}

論文を探したり、ダウンロードしたりできます。ダウンロードされた論文はMarkdown形式で保存されます。

MarkItDown-MCP

パワーポイントやPDFのファイルをMarkdownに変換できます。Microsoftが公式のMCPサーバを出しています。

公式だと、Dockerのセットアップ方法が書いてありますが、対象のファイルがあるパスをマウントしないと使えないのでuv toolでセットアップするのがよいでしょう。

設定ファイルに以下を書き込めばOKです。

{
  "mcpServers": {
    "markitdown": {
      "command": "uv",
      "args": [
        "tool",
        "run",
        "markitdown-mcp"
      ]
    }
  }
}

Playwright MCP

ブラウザを操作して色々できるソフトです。

以下設定を書くだけで手軽にセットアップできます。主にブラウザを使ってのソフトのテストなどの自動化に使います。

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}

FreeCAD MCP

FreeCADというCADソフトのMCPサーバーです。これによりAIモデリングができます。以下が作ってみた様子です。データは、3Dプリンタで出力もできました。

https://x.com/karaage0703/status/1911330720351719921

セットアップは以下記事とGitHubリポジトリのREADMEを参照すればOKです。

https://zenn.dev/firstautomation/articles/33e950c2409dba

上記からの変更点としては、Mac環境で試したのですが、FreeCADのインストールはHomebrewを使えればbrew install freecadが手軽です。

アドオン(Mod)のインストール場所ですが、READMEにはMacだと ~/Library/Application Support/FreeCAD/Mod/と記載されていましたが、私の環境では駄目で~/Library/Preferences/FreeCAD/Mod/以下にFreeCADMCPフォルダをコピーすることでセットアップできました。

cline_mcp_setttings.jsonには、README通り、以下を書き込めばOKです。

{
  "mcpServers": {
    "freecad": {
      "command": "uvx",
      "args": [
        "freecad-mcp"
      ]
    }
  }
}

BlenderMCP

無料3DCG制作ツールBlenderのMCPサーバです。

以下のように簡単に3DCGが作成できます。

https://x.com/karaage0703/status/1911784292566634943

以下のnpaka先生の記事が分かりやすいですので、設定は以下を参照ください。
https://note.com/npaka/n/n65db8cc404bd

Blenderのインストールは、MacでHomebrewが使えれば以下コマンドでOKです。

$ brew install blender

AbletonMCP

Ableton LiveというDTMアプリ(作曲・演奏アプリ)をコントロールできるMCPサーバです。自分がClineとMCPサーバを使って作ってみた曲です。

https://x.com/karaage0703/status/1911321421428711698

セットアップ方法は、Ableton Live側は、ソフトをインストールした後(私はひとまず30日の体験版で試しました)、GitHubリポジトリのREADMEに書いてあるとおり、Contents/App-Resources/MIDI Remote Scripts/AbletonMCP_Remote_ScriptをフォルダごとコピーすればOKです。Ableton Liveのフォルダは、私の場合は以下コマンドで開けました。

$ open /Applications/Ableton\ Live\ 12\ Trial.app/Contents/App-Resources/MIDI\ Remote\ Scripts

Cline側はcline_mcp_setttings.jsonにREADME通り、以下の通り記載すればOKです。

{
    "mcpServers": {
        "AbletonMCP": {
            "command": "uvx",
            "args": [
                "ableton-mcp"
            ]
        }
    }
}

以下記事が詳しく書いてあり参考になります。

https://zenn.dev/ryok/articles/ableton-mcp-intro

Spotify

git clone https://github.com/varunneal/spotify-mcpでダウンロードした後、cline_mcp_setttings.jsonに以下を書き込みます。

"spotify": {
    "command": "uv",
    "args": [
      "--directory",
      "/path/to/spotify_mcp",
      "run",
      "spotify-mcp"
    ],
    "env": {
      "SPOTIFY_CLIENT_ID": "YOUR_CLIENT_ID",
      "SPOTIFY_CLIENT_SECRET": "YOUR_CLIENT_SECRET",
      "SPOTIFY_REDIRECT_URI": "http://localhost:8888"
    }
  }

/path/to/spotify_mcpにはgit cloneしたspotify-mcpの絶対パスを直接記入します。

SpotifyのCLIENT IDとCLIENT SECRET IDの取得方法は以下記事が参考になりました。

https://zenn.dev/tteaoocl/articles/6cce2e7615c11c

リダイレクトURLは、かならず"http://localhost:8888"にしてください。"http://localhost:8888/"だとだめです。cline_mcp_setttings.jsonの設定と必ず同じにしてください(私はハマりました)。

file-search-mcp

ファイル検索ができるMCPです。以下記事を参考にセットアップします。

https://zenn.dev/kurogoma4d/articles/9580ea1674dec4

cline_mcp_setttings.jsonの例は以下です。

"file-search": {
    "command": "<リポジトリへのパス>/target/release/file-search-mcp",
    "args": [],
    "env": {}
}

Sequential Thinking MCP Server

段階的な思考ができるようになるMCPです。

以下コマンドでDockerイメージをPullしましょう。

$ docker pull mcp/sequentialthinking

あとは、cline_mcp_setttings.jsonを以下の通り設定しましょう。

{
  "mcpServers": {
    "sequentialthinking": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "mcp/sequentialthinking"
      ]
    }
  }
}

試してないけど面白そうなMCPサーバ

試したら追記します。

JLCPCB Parts MCP Server

JLCPCBのPCBA向けの、部品探しを補助するMCPサーバ。

JR東日本 遅延情報 MCPサーバー

便利そうです。Webサービスに普通に欲しいですね。

MCPサーバを作る:Git/GitHub MCP サーバー

既存のMCPサーバーは多くの機能を提供していますが、特定のニーズに合わせて独自のMCPサーバーを作成することもできます。今回は、GitとGitHubの操作を統合したMCPサーバーを作成してみました。

なぜ独自のGit/GitHub MCPサーバーを作ったのか

GitとGitHubのMCPサーバーは既にそれぞれ存在していましたが、現状、Pull Requestを作成して、レビューするといった流れをスムーズに実現できなかったので、ローカルのGitリポジトリの操作と、GitHubのAPIを組み合わせて使用できるMCPサーバーを作ってみました。

といいつつ、実際は自分の理解のための練習という位置づけがほとんどです。機能的には以下となります。

  1. ファイルのステージング、コミット、プッシュなどの基本的なGit操作
  2. GitHubのPull Request作成とレビュー機能
  3. PRテンプレートの自動入力機能

今までは、長ったらしい.clinerulesGitHub CLI(gh)により実現していましたが、このMCPサーバーを使えば、手軽にLLMを使ったgit操作、Pull Request作成、Pull Requestレビューが実現できます。

MCPサーバの作り方

おおよそ予想つくと思いますが、Clineに作ってもらいました。プロンプトは以下みたいな感じです。

以下のような`.clinerules`をMCPサーバー化したいです。お願いします。

### Git操作

- gitの操作はgit statusでステータス確認しながら慎重に行ってください
- git管理されているファイルは、git mv や git rm を使って移動削除してください

### Pull Request(PR)

#### PR作成時
- PRを要望されたら、gitコマンドで差分を確認したうえで、`gh pr` コマンドを使ってPRを作成してください
- PRのdescriptionは .github/pull_request_template.md を読み取ってフォーマットを合わせてください

#### PRレビュー時
以下の手順でファイルごとにコメントを付けてください:

1. チェックする観点は .github/pull_request_template.md を参照してください
2. PRの差分を確認:
   ```bash
   gh pr diff <PR番号>
   ```

3. ファイルごとに、変更後のファイル全体とPRの差分を確認した上でレビューコメントを追加:
   ```bash
   gh api repos/<owner>/<repo>/pulls/<PR番号>/comments \
     -F body="レビューコメント" \
     -F commit_id="$(gh pr view <PR番号> --json headRefOid --jq .headRefOid)" \
     -F path="対象ファイルのパス" \
     -F position=<diffの行番号>
   ```

   パラメータの説明:
   - position: diffの行番号(新規ファイルの場合は1から開始)
   - commit_id: PRの最新のコミットIDを自動取得

こんな無茶振りで作れるのか??と思ったのですが、ちゃんと作れました。ビックリです。といっても、まともに動くようにするのは、それなりに大変でした。そもそもNode.jsもJavascriptも全くわからないので。作る途中でLLMに聞きながら、なんとなく理解しながら作りました。それでもなんとか作れました。

作ったMCPサーバは以下となります。公式のMCPサーバのリポジトリをforkしたものに追加しています。

https://github.com/karaage0703/mcp-servers/tree/develop/src/git-github

自作MCPサーバのセットアップ方法

今回は公式のMCPサーバでないので、自分でMCPサーバからセットアップする必要があります。npmを使います。

MCPサーバのセットアップは以下の通りです。

# リポジトリのディレクトリに移動
git clone https://github.com/karaage0703/mcp-servers.git
cd mcp-servers/src/git-github

# 依存関係をインストール
npm install

# ビルド
npm run build

# グローバルにインストール
npm install -g .

クライアント(Cline)の設定はcline_mcp_setttings.jsonに以下の通り記載します。

{
  "mcpServers": {
    "git-github": {
      "command": "git-github",
      "env": {
        "GITHUB_TOKEN": "your-github-token-here"
      },
      "disabled": false,
      "alwaysAllow": []
    }
  }
}

これで、VS Codeエディタを再起動すれば使えるようになります。

自作MCPサーバ使用例

このMCPサーバーを使用すると、Clineは以下のようにGitとGitHubの操作を行うことができます:

ユーザー: リポジトリの状態を確認してください。

Claude: リポジトリの状態を確認します。

<use_mcp_tool>
<server_name>git-github</server_name>
<tool_name>git_status</tool_name>
<arguments>
{
  "path": "/path/to/your/repo"
}
</arguments>
</use_mcp_tool>

リポジトリの状態は以下の通りです:
- 変更されたファイル: src/index.ts
- 未追跡のファイル: docs/new-feature.md

変更をステージングに追加しますか?
ユーザー: はい、変更をステージングに追加し、コミットしてください。

Claude: 変更をステージングに追加します。

<use_mcp_tool>
<server_name>git-github</server_name>
<tool_name>git_add</tool_name>
<arguments>
{
  "path": "/path/to/your/repo",
  "files": ["."]
}
</arguments>
</use_mcp_tool>

変更がステージングに追加されました。次にコミットします。

<use_mcp_tool>
<server_name>git-github</server_name>
<tool_name>git_commit</tool_name>
<arguments>
{
  "path": "/path/to/your/repo",
  "message": "新機能の実装と既存コードの修正"
}
</arguments>
</use_mcp_tool>

コミットが完了しました。コミットハッシュ: a1b2c3d4e5f6...
ユーザー: Pull Requestを作成してください。

Claude: Pull Requestを作成します。まず、現在のブランチをリモートにプッシュします。

<use_mcp_tool>
<server_name>git-github</server_name>
<tool_name>git_push</tool_name>
<arguments>
{
  "path": "/path/to/your/repo",
  "branch": "feature/new-feature",
  "remote": "origin"
}
</arguments>
</use_mcp_tool>

ブランチがリモートにプッシュされました。次に、Pull Requestを作成します。

<use_mcp_tool>
<server_name>git-github</server_name>
<tool_name>github_create_pr</tool_name>
<arguments>
{
  "path": "/path/to/your/repo",
  "title": "新機能の追加",
  "body": "このPRでは新しい機能を追加しています。",
  "head": "feature/new-feature",
  "base": "main",
  "use_template": true,
  "auto_fill": true,
  "reason": "ユーザーからの要望に応えるため",
  "test_info": "ローカル環境でテスト済み"
}
</arguments>
</use_mcp_tool>

Pull Requestが作成されました。URL: https://github.com/username/repo/pull/123

最小限のMCPサーバー

理解を深めるために、最小限の構成でMCPサーバーを使ってみました(Python SDKを使用しています)。こちらもよろしければ参考にしてみてください。

https://zenn.dev/karaage0703/articles/bc369a11a82263

まとめ

Model Context Protocol(MCP)について、概要に加えて、使い方と作り方を簡単に紹介しました。実際に作ってみて、MCPが少しだけ理解できたような気がします。

実際、Clineにいろいろなことをやらせたりしているのですが、やりたいことに応じて.clinerulesを書き換えたり、リポジトリを用意したりするのも手間ですし、機能同士を組み合わせるみたいなことができないので、MCPを使って手軽に機能拡張できるのは、なかなか良いなと感じました。

MCP自体が、デファクトになっていくかはまだわからないですが、このようにLLMの機能をUSBのように手軽に追加したり削除したりする仕組み自体は必要になるんだろうなと実感していますし、今だとそのような世界観を実現するのはMCPがかなり有力そうだなと思いました。

引き続き、MCPを試したり作ってみたいなと思います。

関連記事

https://karaage.hatenadiary.jp/entry/2025/03/05/073000

参考リンク

https://modelcontextprotocol.io/introduction

https://zenn.dev/makumaaku/articles/85fc9e17f5bd5f

https://zenn.dev/h1deya/articles/mcp-introduction

https://www.ai-souken.com/article/claude-mcp-overview

https://zenn.dev/hiroga/articles/roo-code-deep-research-with-mcp

https://github.com/modelcontextprotocol/servers/tree/main/src/brave-search

https://zenn.dev/zenn_tkc/articles/7bef6a7a2d4b57

https://zenn.dev/heavenosk/articles/memory-bank-mcp-loader

https://qiita.com/moritalous/items/1591ab48f1ffda299719

https://norahsakal.com/blog/mcp-vs-api-model-context-protocol-explained/

https://speakerdeck.com/shuntaka/introduction-to-mcp

https://speakerdeck.com/minorun365/yasasiimcpru-men

https://azukiazusa.dev/blog/typescript-mcp-server/

https://note.com/wandb_jp/n/n1f174aeed14d

https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks

https://speakerdeck.com/hiyokose/github-mcp-serverwoshi-tute-pull-requestwozuo-ru-rebiyusuru

https://zenn.dev/kurogoma4d/articles/9580ea1674dec4

https://zenn.dev/sun_asterisk/articles/mcp_security_risk

変更履歴

  • 2025/04/15 最小限のMCPサーバについて追記
  • 2025/04/13 公式NotionMCPサーバについて記載・markitdown-mcpについて記載
  • 2025/04/06 参考リンク追記
  • 2025/03/24 YouTube, NotionのMCPサーバの接続に関して追記

Discussion