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に関しては以下記事参照ください。
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ストアがあって、選択するだけでセットアップできるようなのですが、Roo Codeはまだこれからみたいなので、今は自分で手書きで設定する必要があります。
設定方法は複数ありますが、おすすめなのはDockerです。公式のMCPサーバだと、PCにDocker環境さえセットアップされていたら、設定を書くだけで、勝手にDockerイメージをダウンロードしてセットアップしてくれます。
Docker環境のセットアップに関しては以下記事を参照ください。
今回は、brave-searchとfetchとgithubという3つのMCPサーバをインストールしてみます。この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サーバを使ってみる
実際にMCPサーバの威力を体感してみましょう。以下のようなプロンプトをClineに入力します。
BraveSearchでおすすめのMCP Serverを探して、リスト化して書き出して
すると、なんということでしょう。bravesearchで検索、検索したサイトをfetchでコンテンツ取得、githubでの検索と、複数のMCPサーバーを駆使して、レポートを作成してくれました。
実際にLLMが作成したレポートは以下です。そのままコピペしています。もはやジェネリックDeep Researchですね。
作成したMCPサーバのレポート
おすすめMCP Serverリスト
Model Context Protocol (MCP)は、AIモデルが外部ツールやデータソースと安全に対話するためのオープンプロトコルです。このリストでは、特に有用で人気のあるMCP Serverをカテゴリ別に紹介します。
目次
- 公式リファレンス実装サーバー
- ファイルシステムとバージョン管理
- データベースとストレージ
- 検索とウェブ関連
- コミュニケーションとノート取り
- AI・ML関連サービス
- 開発ツールと自動化
- その他の特殊用途サーバー
- MCP関連ツールとリソース
公式リファレンス実装サーバー
これらは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サーバ
使ってみたらとりあえず列挙していきます。
Slack
READMEの通りに設定すればできました。MCPサーバはDockerでセットアップしました。
Botを作ってSlackサーバに追加して、xxxチャンネルにxxxと投稿してとか言えば、投稿してくれます。
YouTube
以下の記事が参考になりました。
Macの場合はHomebrewでyt-dlp
を以下コマンドでインストールします。
$ brew install yt-dlp
あとはcline_mcp_setttings.json
に以下を書き込むだけです。
{
"mcpServers": {
"youtube": {
"command": "npx",
"args": [
"-y",
"@anaisbetts/mcp-youtube"
]
}
}
}
Notion
以下のページに詳しくセットアップ方法が記載されています。
MCPサーバのセットアップ方法は以下です。
$ git clone https://github.com/suekou/mcp-notion-server.git
$ cd mcp-notion-server/notion
$ npm install
$ npm run build
$ npm link
Notionの設定は以下のとおりです。
- NotionのIntegrationsのページでIntegrationを作成してAPI Keyを取得
- 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まで指定する必要があります)。
MCPサーバを作る:Git/GitHub MCP サーバー
既存のMCPサーバーは多くの機能を提供していますが、特定のニーズに合わせて独自のMCPサーバーを作成することもできます。今回は、GitとGitHubの操作を統合したMCPサーバーを作成してみました。
なぜ独自のGit/GitHub MCPサーバーを作ったのか
GitとGitHubのMCPサーバーは既にそれぞれ存在していましたが、現状、Pull Requestを作成して、レビューするといった流れをスムーズに実現できなかったので、ローカルのGitリポジトリの操作と、GitHubのAPIを組み合わせて使用できるMCPサーバーを作ってみました。
といいつつ、実際は自分の理解のための練習という位置づけがほとんどです。機能的には以下となります。
- ファイルのステージング、コミット、プッシュなどの基本的なGit操作
- GitHubのPull Request作成とレビュー機能
- PRテンプレートの自動入力機能
今までは、長ったらしい.clinerules
とGitHub 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したものに追加しています。
自作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
まとめ
Model Context Protocol(MCP)について、概要に加えて、使い方と作り方を簡単に紹介しました。実際に作ってみて、MCPが少しだけ理解できたような気がします。
実際、Clineにいろいろなことをやらせたりしているのですが、やりたいことに応じて.clinerules
を書き換えたり、リポジトリを用意したりするのも手間ですし、機能同士を組み合わせるみたいなことができないので、MCPを使って手軽に機能拡張できるのは、なかなか良いなと感じました。
MCP自体が、デファクトになっていくかはまだわからないですが、このようにLLMの機能をUSBのように手軽に追加したり削除したりする仕組み自体は必要になるんだろうなと実感していますし、今だとそのような世界観を実現するのはMCPがかなり有力そうだなと思いました。
引き続き、MCPを試したり作ってみたいなと思います。
関連記事
参考リンク
変更履歴
- 2025/03/24 YouTube, NotionのMCPサーバの接続に関して追記
Discussion