MCP (Model Context Protocol) とは?
Claudeを作ったAnthropicが発表し、現在はAgent開発のデファクトスタンダードになっています。
AIが外部のデータにアクセスするためには…
MCP 登場前
ツールごとに専用コードを書き、AIに直接組み込む必要がありました。
MCP 登場後
- すでにあるMCPサーバーを差し込むだけでAIに新しい能力を追加できます
- 自作する場合も決まったルールに沿って書けば大丈夫です
MCP サーバー
AIとMCPサーバーは直接通信せず、間のMCP clientが入ります
// VS Code / Cursorなどに内蔵されています
DB への問い合わせを例にした流れ:
- AI起動時、MCP clientが「利用可能なMCPサーバ一覧」をAIに渡します
- ユーザーが「DBから売上を取って」と依頼します
- AIがDB用MCPサーバーを呼ぶべきと判断し、SQLなどを生成します
- MCP clientがJSON形式でMCPサーバーに要求を送ります
- MCPサーバーが実DBに問い合わせ、結果を反対の順番でAIまで返します
- AIはその結果をもとにユーザーへ回答します
MCPのデメリット
- MCPが多すぎるとパフォーマンスが落ちる
- プロンプトが長くなるとAIが混乱し、適切なツールを選べなくなります
- 使ってほしいMCPをはっきりと指定するのが安全です
- セキュリティリスク
- 誰でもMCPを作れるため、悪意あるMCPの利用やMCPの応答データに命令を埋め込むプロンプトインジェクション攻撃のリスクがあります
- DB削除やプロンプトインジェクションなど、動作ミスの影響が大きいです
- 不安定で遅い
- 通信のオーバーヘッドでレスポンスが遅くなります
- 安定性を大事にするなら、直接コードで書いた方が速くて確実です
MCP サーバーを繋いでみる
mcp.json の基本構造
mcpServersの中にMCPサーバーを並べていく形です。
{
"servers": {
"MCP1": { },
"MCP2": { }
}
} 2つのMCPサーバーを.vscode/mcp.jsonに追加し、Copilot Agentから実際に呼び出してみます。
配置場所
- プロジェクト単位: リポジトリの一番上の
.vscode/mcp.jsonに書きます - ユーザー単位: VS Codeのユーザー設定で全体共有します
GitHub MCP
- プロジェクト直下に
.vscode/フォルダを作成します -
.vscode/mcp.jsonを新規作成し、以下の内容を貼り付けます{ "servers": { "github": { "type": "http", "url": "https://api.githubcopilot.com/mcp/" } } }❓MCPのコードはどこで確認できますか?ほとんどMCPのREADMEや手順書に書いています。
https://github.com/github/github-mcp-server#install-in-vs-code -
“github”上の起動ボタンを押します
-
許可を押します
- Webページが開いたら、
Continueを押します
-
Authorizeを押します
-
Authorize Visual-Stuio-Codeを押します
- 二段階認証で認証を行います
-
開くをおして認証を完了します
- 下記のプロンプトでテストしてみます
OOO リポジトリの XXX ブランチの最近のコミットリストをMCPで調べて。 `gh` コマンドは使用しないこと。必ずMCPツールを使用すること。 MCPでアクセスできない場合(権限エラーなど)は、その旨を明確に教えること。
Notion MCP
https://developers.notion.com/guides/mcp/get-started-with-mcp#vs-code-github-copilotを参考して、Notion MCPを追加します。
完成コード
{
"servers": {
"github": {
"type": "http",
"url": "https://api.githubcopilot.com/mcp/"
},
"notion": {
"type": "http",
"url": "https://mcp.notion.com/mcp"
}
}
}
- Notion MCPのコードを追加すると
起動ボタンが現れます。
-
許可を押します
-
開くを押して、認証を行います
-
開くを押して、VSCodeに戻れたら認証完了です ✨
MCP にすべての権限を与えてしまうと何でもできてしまうため、最小限の権限だけを付与しましょう。
例えば Notion MCP は今の状態だと、ページの追加・修正・削除など、すべての操作ができてしまいます。今回は読み取り権限のみを付与して使ってみましょう。
- Copilot のチャットウィンドウで
設定ボタンをクリックすると、AI の設定を編集できます。 - その中から
notion項目を探して、以下の権限だけにチェックを入れ、残りは外します。
-
notion-fetch -
notion-get-comments -
notion-get-teams -
notion-get-users -
notion-search
-
ハンズオン:MCPを使ってみよう!
GitHub MCP
- リポジトリのREADMEを取得します
プロンプト例
OOOリポジトリのREADMEを表示して // もしうまくいかなかったら… GitHub MCP を使って、<リポジトリURL>のREADMEを表示して
Notion MCP
- OOOページの内容をAIに要約してもらいます
プロンプト例
NotionのOOOページを3〜5行で要約して // もしうまくいかなかったら… Notion MCP を使って、以下のページの内容を3〜5行で要約して <NotionページURL>
その他 MCP
Slack MCP
Slack のメッセージ送受信・チャンネル検索・スレッド取得などを AI が直接操作できる MCP
Playwright MCP
プロンプトの指示だけで、AIがブラウザ操作を実行できるMCP
Figma MCP
デザインファイルのコンポーネント・レイヤー構造を AI が読み取り、コードの自動生成やスペック確認できるMCP
Skillsとは?
Claude Code (Anthropic) が提供していた機能で、2025年12月リリースの GitHub Copilot v1.108 から Agent Skills として正式対応しました。
今では複数の AI エージェントで共通利用できるオープン標準として広まりつつあります。
SKILL.md
---
name: blog-draft
description: NIFTY engineering ブログ向けの記事初稿を作成する。「ブログ書いて」など、技術記事の下書き依頼時に参照。
---
# NIFTY engineering ブログ 初稿作成ガイド
## トーン & マナー
- です・ます調で統一
- 一人称は「私」
- 絵文字は使わない
## 構成テンプレート
1. はじめに
2. 技術背景
3. 実装
4. まとめ - front matter: 「いつ読むか」を決めるラベル領域です。Copilot は各 SKILL.md の description だけをまず見渡し、マッチした Skill だけ本文を読み込みます
-
name: Skill の識別子 // フォルダ名と 必ず一致させる -
description: Skill を「いつ読むか」を決めるトリガー文
-
- 本文: description がマッチすると AI が全部読み込む内容になります。
copilot-instructions.md と SKILL.md の違い
| 項目 | copilot-instructions.md | SKILL.md |
|---|---|---|
| ロードのタイミング | 常に (グローバル) | 必要なときだけ |
| 役割 | プロジェクト共通の前提・ルール | 特定の作業に必要な知識 |
| 「いつ使うか」の決め方 | X (常に使われる) | ファイル先頭の description で決まる |
| 書く内容の例 | 言語・回答スタイル・大原則 | テスト戦略・PR 作成ルール・ブログ作法 |
ハンズオン:自作 Skillを作る
NIFTY engineering ブログ向けの初稿作成 Skill (blog-draft) を作ります。
-
SKILL.mdファイルを作成プロジェクト直下に
.github/skills/blog-draft/フォルダを作成し、その中にSKILL.mdを新規作成します。.github/ └── skills/ └── blog-draft/ └── SKILL.md💡Copilot チャットのUIでも作れます
設定 ⚙️ →
Skillsタブ → New スキル (Workspace) → .githubを選択することでSKILL.md作成できます。❗.vscodeではなく.githubの下です! - front matter を書く
作成した
SKILL.mdの一番上に、以下の YAML を貼り付けます。--- name: blog-draft description: NIFTY engineering ブログ向けの記事初稿を作成する。「ブログ書いて」など、技術記事の下書き依頼時に参照。 ---💡front matter のnameがフォルダ名と一致していないと、Skill として認識されません。.github/skills/blog-draft/フォルダ とname: blog-draftの組み合わせを再度確認してください。 - 本文を書く
front matterの下に、見出し・内容を追記します。
# NIFTY engineering ブログ 初稿作成ガイド ## トーン & マナー - です・ます調で統一する - 一人称は「私」 - 絵文字は使わない - 「〜だと思います」より「〜です」「〜になります」と断定する - 専門用語は初出時に1行で説明を添える ## 記事の構成 セクションは以下の順で並べ、見出しレベルは `#` を使う。 1. `はじめに` 2. `技術背景` 3. `# 実装 / ハンズオン` 4. `# まとめ` または `# おわりに` - 学んだことを3〜5項目の箇条書きで再掲
Skillを使ってみる
ハンズオン1で作った blog-draft Skill が、Copilot Agent から実際に発動されるかを確認します。
- Skill を Copilot に認識させる
新しい
SKILL.mdを追加した直後は、すでに開いている Copilot セッションには反映されないことがあります。新しいチャットで新しいセッションを開きます。 - Skill が登録されているか確認する
Copilot チャットの入力欄に
/skillsと入力し、ワークスペース Skillの一覧にblog-draftが出ているのかを確認します。
- トリガーで実際に発動させる
Copilot Chat を Agent モード に切り替えてから、次のプロンプトを送ってみます。
[ネタ]についてブログ書いて生成された下書きが、
SKILL.mdで指定したトーン・マナーと構成に沿っているかを確認します。また Copilot の応答にblog-draftSkill が参照された旨の表示が出ているかも合わせて確認します。
Skillsが発動しないときは
- ファイル位置が
.github/skills/<name>/SKILL.mdになっているか - front matter の
nameとフォルダ名が一致しているか -
descriptionが今回のトリガー(「ブログ書いて」など)と意味的にマッチしているか - 新しいチャットを開いたかまたは、
Developer: Reload Windowを実行したか - Copilot Chat が Agent モード になっているか //Ask モードでは Skill は発動しない
それでも発動しない場合は、Skill 名を明示して呼び出しましょう。
blog-draft Skill を使って、Agent Skillsについてのブログ初稿を書いて 