MCP連携ガイド
Model Context Protocol(MCP)でデータベース、クラウドサービス、内部ツールとAntigravityを直接接続するガイド。
MCPとは
Model Context Protocol(MCP)は、AIエージェントが外部のデータソースやツールに直接アクセスするためのオープンプロトコルです。従来は開発者が手動でデータをコピー&ペーストしてAIに渡す必要がありましたが、MCPを使えばエージェントが自律的にデータベースのスキーマを取得したり、APIを呼び出したりできます。
MCPの基本構造は以下の3要素で構成されます。
- MCP Host — Antigravityのようなアプリケーション。MCPサーバーに接続してツールを利用する側です。
- MCP Server — 特定のデータソースやサービスへのアクセスを提供するプロセス。PostgreSQL用、Firebase用など、サービスごとに専用のサーバーが存在します。
- MCP Client — HostとServerを仲介するプロトコル層。JSON-RPCベースの通信を行い、ツール呼び出し・リソース取得・プロンプト提供の3種類の機能を標準化しています。
MCPはAnthropicが2024年末に公開したオープン標準であり、Google AntigravityだけでなくClaude Code、Cursor、VS Codeなど多くのAIツールがサポートしています。一度設定すれば、どのホストからでも同じMCPサーバーを利用できます。
MCPの最大の利点は、手動コピペの排除です。例えばデータベースのテーブル構造を確認したい場合、従来はSQL Clientでスキーマを取得し、その結果をプロンプトに貼り付けていました。MCP経由であれば、エージェントが直接データベースに接続し、必要な情報を自分で取得します。
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ MCP Host │────▶│ MCP Server │────▶│ External │
│ (Antigravity)│◀────│ (ローカル/ │◀────│ Service │
│ │ │ リモート) │ │ (DB/API/CLI) │
└──────────────┘ └──────────────┘ └──────────────┘
│ │ │
│ JSON-RPC 2.0 │ Native Protocol │
│ (stdio/HTTP) │ (SQL/REST/gRPC) │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────┐
│ Data Flow: │
│ 1. ユーザー: 「テーブル構造を確認して」 │
│ 2. Host → Server: tools/call (query_schema) │
│ 3. Server → DB: SELECT * FROM information_schema │
│ 4. DB → Server → Host: スキーマ情報を返却 │
│ 5. エージェント: スキーマに基づいたコード生成 │
└─────────────────────────────────────────────────────────┘MCP設定方法
AntigravityでMCPサーバーを設定するには、主に3つの方法があります。
MCP Storeからのワンクリック導入
AntigravityにはMCP Storeが組み込まれており、Firebase、Power BI、Slack、GitHubなどの人気サービスはワンクリックで導入できます。
-
MCP Storeを開く
Agent panelの「...」メニュー → 「Browse MCP Store」を選択します。 -
サービスを検索・インストール
使いたいサービス(例: Firebase, PostgreSQL)を検索し、「Install」をクリックします。必要な認証情報の入力画面が自動表示されます。
MCP Storeで導入したサーバーは mcp_config.json に自動追記されます。手動で設定を微調整したい場合は、ファイルを直接編集してください。
GUIからの手動設定
-
Agent panelを開く
Antigravityのメイン画面でAgent panelを展開し、右上の「...」メニューをクリックします。 -
Manage MCP Serversを選択
ドロップダウンから「Manage MCP Servers」を選択すると、設定画面が開きます。 -
サーバーを追加
「Add Server」をクリックし、サーバー名、コマンド、引数を入力します。NPXで起動するサーバーの場合は、コマンドにnpx、引数にパッケージ名を指定します。 -
接続を確認
追加後、サーバーのステータスが「Connected」になることを確認します。ツール一覧が表示されれば正常です。
設定ファイルからの設定
プロジェクトルートに .mcp.json ファイルを作成して、MCPサーバーを宣言的に管理できます。チーム共有やバージョン管理に適した方法です。
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://user:pass@localhost:5432/mydb"
]
},
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/path/to/allowed/directory"
]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}.mcp.json をGitにコミットする場合は、パスワードや認証情報を直接記述せず、環境変数(${ENV_VAR} 形式)で参照してください。.env ファイルと組み合わせるのが安全です。
データベース接続
MCPの最も一般的なユースケースがデータベース接続です。エージェントがテーブルスキーマを自動取得し、SQLクエリの生成・実行まで行えます。
PostgreSQL
公式のPostgreSQL MCPサーバーを使用します。接続後、エージェントは自動的に全テーブルのスキーマ、カラム型、インデックス情報を取得できます。
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://dev_user:dev_pass@localhost:5432/app_dev"
]
}
}
}接続後にエージェントに使えるツール:
- query — SQLクエリの実行(SELECT, INSERT, UPDATE等)
- list_tables — 全テーブル一覧の取得
- describe_table — テーブルのカラム定義・型情報の取得
- list_indexes — インデックス情報の取得
MySQL
{
"mcpServers": {
"mysql": {
"command": "npx",
"args": [
"-y",
"@benborla29/mcp-server-mysql"
],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "dev_user",
"MYSQL_PASSWORD": "${MYSQL_DEV_PASSWORD}",
"MYSQL_DATABASE": "app_dev"
}
}
}
}SQLite
ローカル開発やプロトタイピングに最適なSQLite接続です。ファイルパスを指定するだけで即座に利用開始できます。
{
"mcpServers": {
"sqlite": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sqlite",
"./data/app.db"
]
}
}
}データベースMCPサーバーはデフォルトで読み書き両方の権限を持ちます。開発環境以外では必ず読み取り専用ユーザーで接続してください。詳細は「セキュリティ考慮」セクションを参照してください。
クラウドサービス連携
MCPを通じて主要なクラウドサービスと連携し、エージェントがクラウドリソースを直接操作できます。
Firebase / Firestore
Firebase MCPサーバーを使うと、Firestoreのドキュメント操作、Authentication情報の確認、Cloud Functionsのデプロイ状況確認などが可能です。
{
"mcpServers": {
"firebase": {
"command": "npx",
"args": [
"-y",
"firebase-mcp-server",
"--project", "my-project-id"
],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "${FIREBASE_SERVICE_ACCOUNT_PATH}"
}
}
}
}Google Cloud Platform
GCPのMCPサーバーはCloud Storage、BigQuery、Cloud Run等の主要サービスにアクセスできます。サービスアカウントのJSON鍵ファイルで認証します。
{
"mcpServers": {
"gcp": {
"command": "npx",
"args": [
"-y",
"@anthropic/mcp-server-gcp",
"--project", "my-gcp-project"
],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "${GCP_KEY_PATH}"
}
}
}
}利用可能な主要ツール:
- storage_list / storage_read — Cloud Storageのバケット操作
- bigquery_query — BigQueryへのSQL実行
- cloudrun_list — Cloud Runサービスの一覧取得
- logging_read — Cloud Loggingのログ取得
AWS
AWSのMCPサーバーはS3、DynamoDB、Lambda、CloudWatch等と連携します。IAMロールまたはアクセスキーで認証します。
{
"mcpServers": {
"aws": {
"command": "npx",
"args": [
"-y",
"@anthropic/mcp-server-aws",
"--region", "ap-northeast-1"
],
"env": {
"AWS_ACCESS_KEY_ID": "${AWS_ACCESS_KEY}",
"AWS_SECRET_ACCESS_KEY": "${AWS_SECRET_KEY}"
}
}
}
}クラウドサービスのMCPサーバーはコミュニティ製も多く、品質にばらつきがあります。公式またはAnthropicが認定したサーバーを優先的に選択し、事前にGitHubリポジトリのスター数やメンテナンス状況を確認してください。
カスタムMCPサーバー
社内ツールや独自APIに対応するMCPサーバーを自分で構築できます。MCP SDKを使えば、数十行のコードでサーバーを作成可能です。
TypeScriptでの構築例
以下は社内のプロジェクト管理ツールにアクセスするカスタムMCPサーバーの実装例です。
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "internal-project-api",
version: "1.0.0"
});
// ツールの定義: プロジェクト一覧取得
server.tool(
"list_projects",
"社内プロジェクト一覧を取得する",
{ status: z.enum(["active", "archived", "all"]).optional() },
async ({ status }) => {
const res = await fetch(
`https://internal-api.company.com/projects?status=${status || "active"}`,
{ headers: { "Authorization": `Bearer ${process.env.INTERNAL_API_TOKEN}` } }
);
const data = await res.json();
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
}
);
// ツールの定義: タスク作成
server.tool(
"create_task",
"プロジェクトに新しいタスクを作成する",
{
project_id: z.string(),
title: z.string(),
description: z.string().optional(),
assignee: z.string().optional(),
priority: z.enum(["low", "medium", "high", "critical"]).optional()
},
async ({ project_id, title, description, assignee, priority }) => {
const res = await fetch(
`https://internal-api.company.com/projects/${project_id}/tasks`,
{
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.INTERNAL_API_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({ title, description, assignee, priority })
}
);
const data = await res.json();
return { content: [{ type: "text", text: `Task created: ${data.id}` }] };
}
);
// サーバー起動
const transport = new StdioServerTransport();
await server.connect(transport);サーバーの登録
ビルド後、.mcp.json に追加します。
{
"mcpServers": {
"internal-projects": {
"command": "node",
"args": ["./mcp-servers/dist/mcp-server.js"],
"env": {
"INTERNAL_API_TOKEN": "${INTERNAL_API_TOKEN}"
}
}
}
}Pythonでの構築
Python SDKも利用可能です。FastMCPを使えばデコレータベースでシンプルに定義できます。
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("internal-inventory")
@mcp.tool()
def search_inventory(query: str, category: str = "all") -> str:
"""社内在庫システムで商品を検索する"""
# 社内APIへのリクエスト
results = internal_api.search(query=query, category=category)
return json.dumps(results, ensure_ascii=False, indent=2)
@mcp.tool()
def get_stock_level(product_id: str) -> str:
"""指定商品の在庫レベルを取得する"""
stock = internal_api.get_stock(product_id)
return f"Product {product_id}: {stock['quantity']} units ({stock['status']})"
mcp.run()カスタムMCPサーバーのツール説明文は、AIエージェントがツール選択の判断材料にします。具体的かつ正確な説明を書くことで、エージェントが適切なタイミングでツールを呼び出せるようになります。
根拠のあるコード生成
MCPの最も価値あるユースケースは、一次情報(公式ドキュメント、実際のDBスキーマ)を直接参照した根拠のあるコード生成です。
従来のAIコーディングでは、学習データに基づく「推測」でコードを生成していました。MCP経由で実際のデータソースを参照させることで、以下が実現できます。
- 正確なスキーマ定義 — DBに直接接続し、最新のテーブル構造からモデルコードを生成
- 最新APIの利用 — 公式ドキュメントを直接参照し、非推奨APIの使用を回避
- 環境固有の設定 — 実際のインフラ設定を読み取り、正確なデプロイ設定を生成
「このテーブルのCRUD APIを作って」と指示する前に、MCPでDBに接続しておくと、エージェントが実際のスキーマを参照して正確な型定義を生成します。推測に基づくコードと比べて、修正の手間が大幅に減ります。
セキュリティ考慮
MCPは非常に強力な機能ですが、外部リソースへのアクセスを伴うため、セキュリティには細心の注意が必要です。
読み取り専用アクセスの原則
本番環境のデータベースやクラウドサービスには、必ず読み取り専用の認証情報で接続してください。
-- 読み取り専用ユーザーの作成
CREATE USER mcp_readonly WITH PASSWORD 'secure_password';
GRANT CONNECT ON DATABASE app_prod TO mcp_readonly;
GRANT USAGE ON SCHEMA public TO mcp_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO mcp_readonly;環境分離
| 環境 | 推奨設定 | リスクレベル |
|---|---|---|
| ローカル開発 | 読み書き可(テストデータ) | 低 |
| ステージング | 読み取り専用 | 中 |
| 本番 | 読み取り専用 + 行レベルセキュリティ | 高 |
| 本番(書き込み) | 原則禁止。使う場合はApproval必須 | 最高 |
認証情報の管理
- .envファイル — 認証情報は
.envに記載し、.gitignoreに追加。.mcp.jsonからは${ENV_VAR}形式で参照する - シークレットマネージャー — 本番環境ではGCP Secret Manager、AWS Secrets Manager、HashiCorp Vault等を利用
- トークンの有効期限 — 長期有効なAPIキーよりも、短期トークン(OAuth 2.0)を優先する
- 最小権限の原則 — 必要最低限のスコープ・権限のみを付与する
ネットワーク制限
MCPサーバーが外部ネットワークにアクセスする場合、ファイアウォールルールやVPC設定で接続先を制限することを推奨します。特に社内APIに接続するカスタムMCPサーバーは、許可されたIPアドレスからのみアクセスできるようにしてください。
SSHトンネリングによるリモートDB接続
リモートのデータベースに安全に接続するには、SSHトンネルを使用します。MCPサーバーはローカルポートに接続し、SSH経由でリモートDBに到達します。
# ローカルの5433ポートをリモートDBの5432ポートに転送
ssh -L 5433:db-internal.example.com:5432 bastion@bastion.example.com -N -f
# .mcp.json ではローカルポートを指定
# "connectionString": "postgresql://mcp_readonly:pass@localhost:5433/app_prod"VPC内サービスへの接続
クラウド環境のVPC内にあるサービスへは、プロキシ経由で接続します。Google Cloud SQL Proxy、AWS RDS Proxyなどを利用することで、VPN不要で安全な接続が可能です。
# Cloud SQL Proxyを起動(バックグラウンド)
cloud-sql-proxy --port 5433 my-project:asia-northeast1:my-instance &
# MCPサーバーはlocalhost:5433に接続
# IAM認証により、パスワード管理が不要になるファイアウォール推奨設定
MCPサーバーのアウトバウンド通信を制限し、意図しない外部通信を防止します。
- 許可リスト方式 — MCPサーバーが通信する先のIPアドレス・ドメインを明示的に許可し、それ以外をブロック
- ポート制限 — 必要なポート(例: PostgreSQLの5432、MySQLの3306)のみ開放
- ログ記録 — MCPサーバーの通信ログを記録し、異常な接続パターンを検出できるようにする
MCPサーバーはプロンプトインジェクションの経路になり得ます。信頼できないデータソースからの応答をそのまま使用しないよう注意してください。特に、ユーザー入力が含まれるデータベースの値をエージェントが処理する際は、出力のサニタイズが重要です。
MCP接続のトラブルシューティングには、Antigravityの「MCP Inspector」が便利です。接続状態、利用可能なツール一覧、各ツールの入出力ログをリアルタイムで確認できます。問題が発生した場合は、まずInspectorでサーバーの応答を確認しましょう。