MCPはClaude CodeなどのAIに外の道具をつなぐ決まりです。AInformation編集部は定時の仕組み47本をClaude Codeで毎日動かしています。今回はファイル・DB・Webの3つのMCPを最新の2.1.314とAntigravityにつなぎました。MCPサーバーも1本作っています。
MCPの使い方は、つなぎたい道具をClaude Codeに1行で登録して承認してから頼むだけです。AInformation編集部は2026年10月30日に、ファイル・DB・Webの3つのMCPを練習用のフォルダでつなぎました。登録のコマンドは1本0.64〜0.75秒で終わり、3つとも答えを返しました。ただし公式のSQLiteのMCPは、そのままでは起動で落ちました。
AInformation編集部はふだんClaude Codeで作った定時の仕組みを47本毎日動かしています。この記事ではその使い方で、設定ファイルの中身と動いた画面と失敗した所を順に載せます。つないだのは練習用に作ったファイルとDBと自社の記事だけで、本物のデータや鍵はつないでいません。Claude Code自体の入れ方はClaude Codeの使い方の記事にまとめています。
- Claude CodeにMCPをつなぐコマンドと、できあがった.mcp.jsonの中身そのまま
- 公式のSQLiteのMCPは、10月の部品と組み合わさって起動で落ちた。1語足して直した
- 3つとも-pで動き、答えまでの中央値はファイル4.5秒・DB7.3秒・Web15.3秒だった
- AntigravityのMCP Storeに同じ3つは無く、設定ファイルに書いてつないだ
- MCPサーバーはPythonの30行で作れた。uv initから最初の答えまで38秒
- -pはプロジェクトのMCPを聞かずに起動する。人から受け取ったフォルダでは気をつける
GoogleでフォローするGoogle検索でAInformationの記事が出やすくなります
MCPとは?AIに外の道具をつなぐ共通の決まり
MCP(Model Context Protocol)は、AIのアプリと外の道具をつなぐための共通の決まりです。道具の側に「MCPサーバー」という小さなプログラムを立てると、Claude CodeでもAntigravityでも同じ道具を呼べます。

Claude Codeはもともとファイルを読んだりコマンドを動かしたりできます。MCPで足すのはDBに直接聞く・Webのページを読む・自分の会社の仕組みを呼ぶ、といった道具です。言葉の説明より、実際につないだ画面を見るほうが早いので次の章から順に見ます。
Claude CodeにMCPを3つつないだコマンド
つないだのは下の3つです。どれもMCPの公式が配っている見本のサーバーで、ファイルは練習用のメモ3つ・DBは注文120件の練習用の表にしました。
Claude Codeにつないだ3つのMCP(2026年10月30日)
| 名前 | 中身 | 道具の数 | 起こすもの |
|---|---|---|---|
| files | 公式のfilesystem | 14個 | npx(Node.js) |
| db | 公式のSQLite | 6個 | uvx(Python) |
| web | 公式のfetch | 1個 | uvx(Python) |
使った版はどれも新しいものです。Claude Codeの2.1.314は2026年10月30日に公開された版で、filesystemの2.1.0とfetchの2026.10.28は10月29日の朝(日本時間)に公開されたばかりでした。MCPの部品のmcp 2.3.0は10月3日に出ています。
登録はclaude mcp addで1つずつ足します。–scope projectを付けるとフォルダの中に.mcp.jsonというファイルができて、チームでも同じ設定を使えます。付けないと自分だけの設定になります。公式の文書にも「Local scope is the default.」とあります。
claude mcp add –scope project files — npx -y @modelcontextprotocol/server-filesystem /tmp/mcp-renshu/docs
最後のフォルダの中だけを読み書きできます。ほかのフォルダは見えません。
claude mcp add –scope project db — uvx –with “mcp<2” mcp-server-sqlite –db-path /tmp/mcp-renshu/renshu.db
–with “mcp<2″は2026年10月の時点で要りました(下の失敗の章)。
claude mcp add –scope project web — uvx mcp-server-fetch
URLを渡すとページを読んで文字にして返します。
名前のあとの–が大事です。–より後ろは、そのままMCPサーバーを起こすコマンドになります。公式の文書は「Everything after — is passed to the server untouched.」と書いています。–を忘れると「error: unknown option ‘-y’」で止まりました。
できあがった.mcp.jsonの中身(そのまま)
3つ足したあとのフォルダの.mcp.jsonが下です。手で書いても同じ形になります。
{
"mcpServers": {
"files": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/tmp/mcp-renshu/docs"
],
"env": {}
},
"web": {
"type": "stdio",
"command": "uvx",
"args": [
"mcp-server-fetch"
],
"env": {}
},
"db": {
"type": "stdio",
"command": "uvx",
"args": [
"--with",
"mcp<2",
"mcp-server-sqlite",
"--db-path",
"/tmp/mcp-renshu/renshu.db"
],
"env": {}
}
}
}
typeのstdioは、手元でプログラムを起こしてつなぐ形です。会社のサービスのように外のサーバーへつなぐときは、–transport httpでURLを渡します。envは鍵などを渡す欄で、今回は空です。.mcp.jsonをGitに入れるときは、ここに鍵を書かないようにします。
最初に起こすと承認の画面が出る
.mcp.jsonのあるフォルダでclaudeを起こすと、まずフォルダを信じるかの確認が出ます。既定の選び方は「No, exit」で、Yesを選ぶと次に3つのMCPを使うかの画面になりました。

3つ一緒のときは全部にチェックが付いた状態で出ました。後で1つだけ足したときは「Continue without using this MCP server」(使わない)が既定でした。選んだ結果は.claude/settings.local.jsonのenabledMcpjsonServersに書かれます。
ここで1回つまずきました。個人の設定を混ぜないよう–setting-sources projectで起こしたら、/mcpに組み込みのcomputer-useしか出ません。承認はlocalの設定に書かれるので、projectだけでは読まれなかったのです。–setting-sources project,localで起こすと3つとも出ました。

/mcpの画面では、つないだMCPと道具の数が並びます。dbは6個・filesは14個・webは1個でした。Enterで1つを開くと、道具の名前の一覧とつなぎ直す・止めるの操作が出ます。
3つのMCPを動かした結果と答えの速さ
頼み方はどれも同じ形にしました。「files の MCP の道具で docs の中のファイルを大きさつきで一覧にして」のように、使うMCPの名前を頼みの中に入れます。名前を入れずに「docsの会議メモを読んで」と頼んだ回は、MCPでなくClaude Codeの組み込みのReadで読まれました。ファイルを読むだけなら、Claude CodeではファイルのMCPは無くても困りません。

DBには月ごとの売上と件数を頼みました。Claude Codeは表の形を調べてからSELECTを流し、8月137,460円・9月119,390円・10月120,690円と答えました。DBを直に数えた値と同じです。続けて1行足すように頼むと、INSERTの文を見せて許可を聞いてきました。ここはNoで断りました。断ったあとも注文は120件のままでした。
許可の画面は道具ごとに出ます。読むだけのread_queryは「2. Yes, and don’t ask again」を選び、書き込みのwrite_queryは毎回聞く形のままにしました。こうすると読むのは速く・書くのは必ず人が見る、という分け方ができます。
同じ頼みを流して答えが出るまでの秒(Claude Codeは-pで3回ずつ)
| MCP | Claude Code(3回の幅) | Antigravity(許可の待ちを除く) | Antigravityの許可 |
|---|---|---|---|
| files | 4.3〜6.3秒 | 約12秒 | 1回 |
| db | 5.5〜15.9秒 | 約44秒 | 5回 |
| web | 8.5〜15.8秒 | 約30秒 | 3回 |
-pで同じ頼みを3回ずつ流すと、9回とも正しく答えました。WebのMCPが一番遅く、2回目と3回目は15秒台でした。fetchは1回に5,000字までしか返さないので、ページの頭の部分を読み直す手が増えたためです。
つなぐだけで重くならないかも確かめました。MCPを1つもつながずに1+1を聞いた回と3つつないだ回では、最初に送った量の差は278トークンでした。道具は使うときに探して読み込む形(tool search)なので、14個の道具の説明を毎回送ってはいません。遅いMCPがあるときの待ち時間はClaude Codeのエラーと上限の記事で測っています。
つなぐときに当たった失敗と直し方
一番時間を取ったのはSQLiteです。最初に/mcpを開くと、dbだけに✘が付いていました。

画面には「Run claude –debug to see error logs」としか出ません。同じコマンドを手で起こすと「AttributeError: ‘Server’ object has no attribute ‘list_resources’」で落ちていました。公式のSQLiteのMCPは2025年4月の2025.4.25で更新が止まり、今は見本の一覧で「archived」(保管だけ)の扱いです。uvxで起こすとMCPの部品の最新(2.3.0)を一緒に入れるので、古い書き方のサーバーが動かなくなっていました。
直し方は–with “mcp<2″を足して、部品を1系(1.30.0)に止めるだけです。足し直すと✔に変わり、道具6個が出ました。古い記事の設定を写すときは、この形の落ち方を疑うと早いです。
つなぐときに当たった失敗と直し方(AInformation編集部調べ)
| 出た表示 | 原因 | 直し方 |
|---|---|---|
| /mcpでdbに✘ failed | 公式のSQLiteが新しいmcp 2.xで落ちる | uvxに–with "mcp<2"を足す |
| ENOENT: Executable not found in $PATH: "uvx" | uvが入っていない | brew install uvで入れる |
| error: unknown option '-y' | claude mcp addで–を忘れた | サーバーのコマンドの前に–を置く |
| /mcpに組み込みしか出ない | 承認を読まない起こし方をした | –setting-sourcesにlocalも入れる |
| Content truncated | fetchが5,000字で切った | start_indexで続きを読ませる |
uvが入っていない状態も再現しました。uvxが見つからないとclaude mcp getに「ENOENT: Executable not found in $PATH: “uvx”」と出ます。PythonのMCPの多くはuvxで起こすので、先にbrew install uvで入れておきます。入れるのは8秒で済みました。
ファイルのMCP(2.1.0)は、配布の情報ではNode.js 24以上が要ると書かれています。手元はNode.js 18.20.8でしたが、警告も出ずに動きました。動かないときはNode.jsの版を上げてみます。

-pはプロジェクトのMCPを聞かずに起動する
自作のMCPを足した直後、まだ承認していない状態で-pを流しました。claude mcp listでは「Pending approval」と出ていたのに、-pではそのまま起動して答えまで返しました。
公式の文書にも「it loads project-scoped servers without asking」とあり、-pやAgent SDKでは承認の画面を出せないので聞かずに読み込みます。人から受け取ったフォルダで-pを流すと、中の.mcp.jsonに書かれたプログラムが起動します。知らないフォルダでは先に.mcp.jsonを読むか、–strict-mcp-configで使うMCPを自分で決めて起こします。
AInformation編集部の定時の仕組みも-pで動いているので、仕組みのフォルダには自分で書いた.mcp.jsonしか置いていません。
Antigravityにも同じ3つをつないだ
同じ3つをAntigravityの使い方の記事で紹介したAntigravity(2.27.0・Gemini 3.8 Flash)にもつなぎました。公式の文書では、設定のCustomizationsからAdd MCPを押してMCP Storeで選ぶ流れです。実際の画面ではCustomizationsにMarketplaceとInstalledのタブがあり、Installedの一番下のMCP Serversの+がストアの入口でした。
ストアには99件が並んでいましたが、filesystem・SQLite・fetchはどれもありませんでした。NotionやGoogleのサービスなど、外のサービスにつなぐものが中心です。そこで同じ欄のもう1つのボタン(Copy Config File Path)が指す設定ファイルに、Claude Codeと同じ中身を書きました。
{
"mcpServers": {
"files": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/tmp/mcp-renshu/docs"
]
},
"web": {
"command": "uvx",
"args": [
"mcp-server-fetch"
]
},
"db": {
"command": "uvx",
"args": [
"--with",
"mcp<2",
"mcp-server-sqlite",
"--db-path",
"/tmp/mcp-renshu/renshu.db"
]
}
}
}
違いは2つだけで、typeの行が要らず空のenvも消しました。置き場所は~/.gemini/config/mcp_config.jsonで、全部のプロジェクトに効きます。プロジェクトだけに効かせるなら、そのフォルダの.agents/mcp_config.jsonに書きます。

書き換えたあとは、開いたままの画面には出ませんでした。30秒以上待っても一覧は変わらず、アプリを起こし直すと3つが緑の点で並びました。道具の数はClaude Codeと同じ6個・14個・1個です。Finderから起こしたときと同じ短いPATHで起こしても、npxとuvxは見つかりました。

Antigravityは、MCPの道具を使うたびに5択の許可を出しました。今回だけ・この会話で・このプロジェクトで・ずっと・Noの5つです。DBでは表の一覧・表の形・SELECTの3回で、合わせて5回押しました。Claude Codeより押す回数は多めですが、どの道具に何を渡すかが毎回見えます。

失敗したときの見え方は大きく違いました。直す前のSQLiteの設定をわざと足すと、Antigravityは行の中にエラーの全文を赤で出しました。「Fix with Agent」のボタンも付いています。Claude Codeは✘とdebugの案内だけなので、原因を探すのはAntigravityのほうが早いです。

同じ3つをClaude Code(2.1.314)とAntigravity(2.27.0)につないだ違い
| 見るところ | Claude Code | Antigravity |
|---|---|---|
| 足し方 | claude mcp addか.mcp.json | mcp_config.jsonを手で書く |
| 置き場所 | フォルダの.mcp.jsonか~/.claude.json | ~/.gemini/config/mcp_config.json |
| ストア | 無い | MCP Storeに99件・今回の3つは無い |
| 書き換えたあと | 起こし直すと読む | 起こし直すまで一覧に出ない |
| 失敗の見え方 | ✘ failedと–debugの案内 | 行の中にエラーの全文 |
| 許可の選び方 | 3択 | 5択 |
MCPサーバーの作り方(Pythonで最小の手順)
MCPサーバーは自分でも作れます。AInformation編集部は、公式の手順どおりPythonとuvで道具を2つ持つサーバーを作りました。1つは文字数と原稿用紙の枚数を数える道具で、もう1つは2つの日付の間の平日を数える道具です。
uv init jisaku && cd jisaku && uv add “mcp[cli]”
MCPの部品2.3.0が入りました。キャッシュの無い状態でも1.5秒で終わりました。
2つ目にserver.pyを書きます。下が全文で、30行です。関数の上の@mcp.tool()が道具の印で、関数の説明の文(docstring)がそのままAIへの説明になります。
from datetime import date, timedelta
from mcp.server import MCPServer
mcp = MCPServer("jisaku")
@mcp.tool()
def count_chars(text: str) -> str:
"""日本語の文の文字数と、400字詰めの原稿用紙で何枚分かを数える"""
n = len(text)
no_space = len("".join(text.split()))
pages = -(-no_space // 400)
return f"文字数 {n}・空白を除くと {no_space}・原稿用紙 {pages}枚分"
@mcp.tool()
def business_days(start: str, end: str) -> str:
"""start から end まで(YYYY-MM-DD・両端を含む)の土日を除いた日数を数える"""
d, e = date.fromisoformat(start), date.fromisoformat(end)
n = 0
while d <= e:
if d.weekday() < 5:
n += 1
d += timedelta(days=1)
return f"{start}〜{end} の平日は {n}日"
if __name__ == "__main__":
mcp.run(transport="stdio")
claude mcp add –scope project jisaku — uv –directory /tmp/mcp-renshu/jisaku run server.py
–directoryには自分で作ったフォルダの場所を書きます。
uv initから、Claude Codeが自作の道具で「21」と答えるまで38秒でした。書いたのは上の30行だけです。
ここでも古い書き方に当たりました。ネットの記事に多いfrom mcp.server.fastmcp import FastMCPは、2.3.0では「This is mcp 2.x, where FastMCP was renamed to MCPServer」と出て動きません。今の書き方はfrom mcp.server import MCPServerです。古い書き方のまま使うなら、部品をmcp<2に止めます。

Claude Codeの画面で頼むと、自作の道具にも許可を聞いてきました。許可の画面には、server.pyに書いた日本語の説明がそのまま出ます。答えは11月の平日21日と22文字でした。Claude Codeは土日を除いただけで祝日は引いていないことにも自分で気づき、祝日も除くと19日だと書き添えました。
Claude Codeに作らせたら51.9秒だった
同じサーバーをClaude Codeに作らせる形も試しました。頼んだのは「土日と日本の祝日を除いた日数を返す道具を、uvで動く形で作って、動くか自分で確かめて」です。
答えまで51.9秒・15手でした。祝日の判定にjpholidayを足してMCPServerで書きました。最後はサーバーを起こし、自分で呼び出して確かめています。11月は19日で、振替休日がある5月1日〜7日は2日でした。どちらも正しい数です。
途中で、エラーの理由がAIに届かないことにも気づいて直していました。2.3.0では普通の例外の中身が隠れるので、ToolErrorで返す形に変えています。作るだけならClaude Codeに頼むほうが早いです。そのうえで、どの道具に何を許すかは自分で決めます。
MCPを安全に使うために決めたこと
MCPサーバーは手元でプログラムとして動きます。今回の測りでもfilesは決めたフォルダの中を読み書きでき、dbは書き込みの道具も持っていました。AInformation編集部が決めたことは次の4つです。
1つ目は、つなぐ先を小さくすることです。filesにはdocsだけを渡し、家のフォルダ全体は渡しません。2つ目は、書き込みの道具は毎回聞く形のままにすることです。3つ目は、鍵を.mcp.jsonに直に書かずGitに入れないことです。4つ目は、知らないフォルダで-pを流す前に.mcp.jsonを読むことです。
道具の出す量にも上限があります。公式の文書には「Claude Code displays a warning when MCP tool output exceeds 10,000 tokens and limits output to 25,000 tokens by default.」とあります。大きなファイルやページをまとめて読ませるときは、範囲を決めて頼みます。Claude Codeで打てるコマンドの一覧はClaude Codeのコマンド一覧に、ほかにできることはClaude Codeでできることにまとめています。
MCPでつないだ道具の使い方を手順として覚えさせるにはskillを使います。SKILL.mdの書き方と配り方はClaude Skillsの作り方の記事にまとめています。
MCPを使えるClaude Code・Codex CLI・Cursor・Antigravityを同じ課題で比べた結果はAIコーディングツールの比較表にまとめています。
MCPの道具を呼ぶ前に止めたり記録したりするには、PreToolUseのhookを使います。matcherの書き方と、rmを実際に止めた結果はClaude Codeのhooksの使い方の記事にまとめています。
まとめ
MCPの使い方は、claude mcp addで足して承認し名前を入れて頼むだけです。AInformation編集部は3つのMCPを2.1.314につなぎ、-pでは9回とも正しい答えが返りました。古い見本のSQLiteは部品の新しい版で落ちたので、–with “mcp<2″で直しました。Antigravityでは同じ中身を設定ファイルに書けばつながり、失敗の理由はAntigravityのほうが詳しく出ました。自作のサーバーは30行で、38秒で動きました。
よくある質問
- MCPとは何ですか?
- AIのアプリと外の道具をつなぐ共通の決まりです。道具の側にMCPサーバーを立てると、Claude CodeやAntigravityから同じ道具を呼べます。
- Claude CodeでMCPを追加するコマンドは?
- claude mcp add 名前 — 起こすコマンド、の形です。チームで共有するなら–scope projectを付けると.mcp.jsonに書かれます。
- .mcp.jsonはどこに置きますか?
- プロジェクトのフォルダの一番上です。自分だけの設定は~/.claude.jsonに入り、こちらは手で触らずclaude mcp addで足します。
- つないだMCPが動いているか確かめる方法は?
- 画面の中で/mcpを打つか、端末でclaude mcp listを打ちます。✔なら使えて、✘なら起動に失敗しています。
- /mcpで✘ failedと出ます。
- .mcp.jsonに書いたコマンドを端末で手で起こすと、落ちた理由の全文が見えます。AInformation編集部の例では、古いSQLiteのサーバーが新しい部品で落ちていました。
- MCPを足したのに使われません。
- 頼みの中にMCPの名前を入れます。ファイルを読むだけなら、Claude Codeは組み込みの道具を先に使います。
- AntigravityでMCPを追加するには?
- Customizationsの「Installed」の一番下にあるMCP Serversの+でストアから選びます。ストアに無いものは~/.gemini/config/mcp_config.jsonに書いて、アプリを起こし直します。
- MCPサーバーは何の言語で作れますか?
- 公式の部品はPythonとTypeScriptなどがあります。Pythonならuvとmcpの部品で、30行ほどの1ファイルから作れます。
- FastMCPがimportできません。
- mcpの部品の2系では、FastMCPはMCPServerに名前が変わりました。from mcp.server import MCPServerに書き換えるか、部品をmcp<2に止めます。
- MCPは安全ですか?
- つないだ道具は手元のプログラムとして動き、書き込みや外への通信もできます。渡すフォルダを小さくし、書き込みの許可は毎回見ます。知らない.mcp.jsonは中身を読んでから使います。
