Claude Code SKILL vs MCP server|役割・使い分け・判断フロー 2026
結論を 1 行で
外部システム(DB / API / SaaS)に繋ぐなら MCP server。ローカルで完結する手順を自動化するなら Skill。 境界は「プロセス間通信が必要か」と「複数 AI ツールで共有したいか」で決まる。
これは Claude Code 公式 docs (Skills) と Claude Code 公式 docs (MCP) を読み比べると明確に出てくる役割分担で、迷ったら下のフローチャートで即決できる。
この記事の前提
- 環境: Claude Code v2.x、Skills は Agent Skills オープン標準、MCP は Model Context Protocol 標準
- 読者の状況: SKILL も MCP server も触ったことはあるが、新規タスクが来た時にどっちで作るか即答できない
- 筆者の検証環境: monorepo に Skill 10 本超 + MCP server 12 本超を併用運用中(次節で実例提示)
この記事でわかること:
- SKILL と MCP の役割の違いを公式定義ベースで 1 行で言える
- 新規タスクが来た時の 5 分岐判断フロー
- ローカル文脈 / 外部 I/O / 再利用範囲 / 起動コストでの選び方
- 両方を組み合わせる時の境界設計
- monorepo に最初に置くべき Skill 3 + MCP 3 の最小構成
読者のよくある詰まり
- SKILL も MCP も「Claude を拡張する」と書いてあって、結局どっちが何のためか分からない
- 公式 docs を読んだが、選択基準が散在していてフローに落ちない
- 同じ機能を SKILL と MCP のどっちで作っても動く気がして、選んだ後に「やっぱり逆だった」と感じる
- ローカル処理を MCP で作ってプロセス起動コストに後悔する / 外部接続を SKILL で書こうとして詰まる
これらは全部「公式の役割定義をフレーズで押さえれば消える」モヤモヤだ。
それぞれの役割(公式定義)
Skill とは
"Skills extend what Claude can do. Create a
SKILL.mdfile with instructions, and Claude adds it to its toolkit. Claude uses skills when relevant, or you can invoke one directly with/skill-name."
つまり Skill は 「Claude が読んで実行する手順書」。マークダウンに instructions を書くだけで、Claude が文脈に応じて自動で呼び出すか、ユーザーが /skill-name で明示的に呼び出す。
公式の用途定義:
"Create a skill when you keep pasting the same playbook, checklist, or multi-step procedure into chat..."
要は 「同じプレイブック / チェックリスト / 多段手順を毎回 paste している」状態を解消する ための機能。
配置場所と起動方式:
| 配置 | パス | 起動 |
|---|---|---|
| Personal | ~/.claude/skills/<name>/SKILL.md | 全プロジェクトで使える |
| Project | .claude/skills/<name>/SKILL.md | そのリポ専用 |
| Plugin | <plugin>/skills/<name>/SKILL.md | プラグイン経由 |
| Enterprise | managed settings 経由 | 組織全体 |
frontmatter の description が 「Claude が起動するか判断するためのトリガー文」。disable-model-invocation: true で手動起動限定にできる。
MCP server とは
"Claude Code can connect to hundreds of external tools and data sources through the [Model Context Protocol (MCP)], an open source standard for AI-tool integrations. MCP servers give Claude Code access to your tools, databases, and APIs."
つまり MCP server は 「外部システムに接続するためのプロトコル付きプロセス」。Claude Code が起動時に立ち上げて、Tools / Resources / Prompts を JSON-RPC で呼び出す。
公式の用途定義:
"Connect a server when you find yourself copying data into chat from another tool, like an issue tracker or a monitoring dashboard."
要は 「別ツールからデータをコピペしている」状態を解消する ための機能。
接続方式は 3 種類:
| 方式 | 用途 | 推奨度 |
|---|---|---|
| HTTP | クラウドサービス(Notion / Linear / Stripe 等) | 推奨 |
| SSE | 一部の旧サービス | deprecated |
| stdio | ローカルプロセス(自作 / DB 接続等) | ローカル限定で |
claude mcp add --transport http <name> <url> 等で登録する。
4 軸比較表
| 軸 | Skill | MCP server |
|---|---|---|
| 何を提供するか | 手順書(Claude が読んで自分で実行) | 関数・データソース(Claude が JSON-RPC で呼ぶ) |
| 実行方式 | コンテキストに content を読み込む | 別プロセスとして起動、stdin/stdout or HTTP で通信 |
| 主用途 | ローカル文脈・ファイル操作・定型作業手順 | 外部システム接続(DB / API / SaaS) |
| 必要な実装 | マークダウン 1 枚(プログラミング不要) | TypeScript / Python(MCP SDK) |
| 追加コスト | 起動コストほぼゼロ | プロセス起動 + 通信オーバーヘッド |
| 再利用範囲 | Agent Skills 標準(他 AI ツール対応進行中) | MCP 標準(Cursor / Claude Desktop 等で共通) |
判断フロー(5 分岐)
新規タスクが来たら、以下を上から順に判定する:
1. 外部システム(DB / API / SaaS)への接続が必要か?
→ YES → MCP server
→ NO → 2 へ
2. ローカルファイル / シェル / コンテキスト判断のみで完結するか?
→ YES → Skill
→ NO → 3 へ
3. 同じ機能を Cursor や Claude Desktop でも使いたいか?
→ YES → MCP server(プロトコル標準で共通利用)
→ NO → 4 へ
4. 起動が高頻度か?(1 セッションで何度も呼ばれる)
→ YES → Skill(プロセス起動コストなし)
→ NO → 5 へ
5. 文脈で自動起動 / 明示起動 のどちらか?
→ 文脈で自動 → Skill(description で trigger)
→ 明示的に → Skill(disable-model-invocation: true で /command 化)
ほとんどのタスクは 1 か 2 で確定 する。3-5 は境界ケース。
3 軸での適性
判断フローを別の切り口でまとめると、3 軸で見ると分かりやすい:
外部 I/O が必要か
- 必要 → MCP(プロセス分離 + プロトコル経由が安全)
- 不要 → Skill(コンテキスト内で完結)
再利用範囲
- Claude Code 単独 → Skill(手軽)
- 複数 AI ツール共通 → MCP server(標準プロトコルで再利用)
起動コスト
- 高頻度呼び出し → Skill(in-context、起動コストなし)
- 重い・低頻度 → MCP(プロセス分離が安全)
5 ユースケースで判定
| ユースケース | 結論 | 理由 |
|---|---|---|
| 「コミット前に lint を通す」を毎回自動化 | Skill | ローカルファイル + シェルで完結 |
| Notion からタスク一覧を取得 | MCP server (notion) | 外部 SaaS 接続 |
| 「PR レビュー時に CHANGELOG を更新」 | Skill | git + ファイル操作で完結 |
| Supabase DB から user の購入履歴を取得 | MCP server (supabase) | 外部 DB 接続 |
| 記事 mdx の frontmatter を 5 軸チェック | Skill | ローカルファイル + ロジックで完結 |
公式 docs のユースケース例も同じパターン:
- Skill 例(公式): code 説明、deploy、commit、 explain-code、codebase-visualizer
- MCP 例(公式): JIRA から issue 取得、Sentry のデータ分析、PostgreSQL クエリ、Figma デザイン取得、Gmail 下書き作成
「ローカルで完結する手順」と「外部システム接続」の境界が、両方の例から一貫して読み取れる。
両方を組み合わせるパターン
実運用で一番強いのは Skill が MCP server の Tool を呼ぶ 構成。Skill が「手順書」、MCP server が「外部システム接続」と完全に役割分担する。
---
name: pr-review-with-linear
description: TRIGGER when reviewing a PR. Fetches diff via GitHub MCP,
posts review comments to the related Linear issue.
---
1. Use the GitHub MCP `get_pull_request_diff` tool to fetch the PR diff
2. Analyze the diff against our coding standards (this file's checklist)
3. Use the Linear MCP `create_comment` tool to post findings to the
related Linear issue (issue ID is in PR description)
Skill が手順書として「読んで判断するロジック」を担い、MCP server が「外部 API へのアクセス」を担う。境界が綺麗。
ケーススタディ: monorepo の Skill / MCP 一覧
筆者の monorepo(Next.js + Supabase + Stripe + Claude Code 個人開発)で実際に使い分けている例。
Skill 側(ローカル完結・運用ルール系):
masatoman-article-rules— ブログ記事執筆前のターゲット / ゲイン / タイトル 3 軸チェックx-post-rules— X 投稿前の主顧客訴求 + 禁止語 grepsync-strategy— モノレポの戦略ファイル同期maintenance— モノレポ整合性監査(plans / memory / scheduled-tasks 等 6 領域)update-config—settings.json編集claude-hud:setup— statusline 設定
MCP server 側(外部システム接続系):
- Supabase MCP — 各サブプロの DB 操作(list_tables, execute_sql, apply_migration, get_logs)
- Stripe MCP — 決済データ確認
- Vercel MCP — デプロイ状態確認、ログ取得
- Cloudflare MCP — KV / R2 / D1 の設定
- Slack MCP — 通知投稿
- Gmail / Calendar / Drive MCP — Google サービス
- Playwright MCP — note.com 自動投稿(ブラウザ操作)
- Figma MCP — デザイン取得
- Canva MCP — サムネイル生成
パターンは明確:ローカルロジック / チェックリスト / 運用ルール → Skill、外部 SaaS / DB / API → MCP。境界は判断フローの 1〜2 で完全に決まっている。
ハマりどころ 3 つ
1. ローカル完結の処理を MCP で作って起動コストを払う
ローカルで完結する単発チェックを MCP で実装すると、毎回プロセス起動の遅延が乗る。Skill ならコンテキストに content を読み込むだけでオーバーヘッドゼロ。「とりあえず TypeScript で書きたいから MCP」は逆効果になりやすい。
2. 全 AI ツール共通で使いたいのに Skill で作る
他のツール(Cursor / Claude Desktop 等)でも同じ機能が欲しい場合は、MCP server なら Model Context Protocol 標準で共通利用できる。Skill は Agent Skills 標準準拠だが、現時点で他ツール対応はまだ進行中。再利用範囲を最初に決めると後で書き直しを避けられる。
3. description が曖昧で Skill が自動起動しない
公式:
"the description helps Claude decide when to load it automatically"
description に trigger phrase を明示しないと、Claude は「いつ呼ぶべきか」を判断できない。例:「TRIGGER when the user asks to commit changes...」のように 「いつ呼ぶか」を頭出し すると自動起動の精度が上がる。description と when_to_use の合算が 1,536 文字でカットされるので、要点を前に置く。
個人開発モノレポ向けの最小構成
最初に置くべきセット:
Skill 3 件(ローカル完結):
- commit checker — コミット前の lint + テスト + コミットメッセージ規約チェック
- deploy preflight — デプロイ前の環境変数 + secret + マイグレーション確認
- doc updater — 機能追加時の README / CHANGELOG 更新フロー
MCP server 3 件(外部接続):
- GitHub MCP — issue / PR / Actions の操作
- DB MCP(Supabase / Postgres など利用中のもの)— スキーマ確認 / クエリ実行 / マイグレーション
- メイン SaaS MCP(Notion / Linear / Stripe 等、自分のワークフローのハブ)
これだけで「定型作業の自動化」と「外部接続の即時アクセス」の 8 割をカバーできる。後は必要に応じて追加。最初から大量に作らないこと(公式:「Skill descriptions are loaded into context」、多すぎると context budget を圧迫する)。
今日やること(3 つ以内)
- 可視化: 自分が「定型作業」と「外部接続」のどちらで時間を使っているかを 1 日メモする
- 定型作業 1 つを Skill 化: 一番頻度の高い定型作業をマークダウン 1 枚で書く
- 外部接続 1 つを MCP 接続:
claude mcp addで一番使う SaaS を 1 つ繋ぐ
関連記事
Claude Code完全ガイド2026
料金・使い方・他ツールとの使い分けを実運用者が解説
AGENTS.md vs CLAUDE.md|Claude Code 設定ファイルの違いと使い分け 2026
同 Cluster C1:設定ファイルの判断軸ガイド
【第1回】Claude Code Skills 入門
Skill 自作の最初の 1 本を 15 分で作る実装ガイド
【第2回】Claude Code MCP サーバー構築ガイド
MCP server をゼロから作る実用コード全公開
【第6回】Skill × MCP の統合 SaaS 開発フロー
Skill と MCP を組み合わせた個人開発の SaaS 構築パイプライン
Claude Crew Lab Free — 毎月の実験記録をメールで
Claude Code × 個人開発のリアルな事故・発見・SaaS アイデアを毎月第1月曜にお届け。登録で「収益化チェックリスト 15 項目」を無料プレゼント。
個人開発の実験ログを月1回、無料で
失敗 / 実数字 / 仮説 / 次に試すこと。売れた話だけでなく売れなかった理由も共有します。
まとめ
- Skill = ローカル完結の手順書(マークダウン 1 枚、起動コストなし)
- MCP server = 外部システム接続(プロセス + プロトコル、再利用性高い)
- 判断フローは「外部 I/O が必要か」「複数ツール共有か」「起動頻度はどうか」の 3 軸で即決
- 両方使う時は Skill が手順書、MCP が外部接続 の役割分担が綺麗
- 最小構成は Skill 3 件 + MCP 3 件、後は必要に応じて追加
SKILL と MCP の境界がフレーズで押さえられると、新規タスクが来たときの「どっちで作るか」の意思決定が秒で済むようになる。次は Skill の本質を一段深く理解する フェーズに進める。
Stripe ペイウォール完全ガイド — 個人開発で最初の 1 売上を作るプレイブック
Skill と MCP で開発を加速したら、次は最初の 1 売上を出す段階へ。Stripe 自前ペイウォールの実装テンプレを全公開。
この記事が役に立ったらシェア