- MCPサーバーを作れば、OpenClawからDB・API・外部サービスに直接アクセス可能になる
- Node.js / Python SDKで開発でき、OpenClawへの登録はJSON設定1行で完了
- 読み取り専用と書き込み可能ツールの権限分離でセキュリティを確保
「OpenClawから自社のデータベースを直接クエリしたい」「外部APIをAIエージェントから呼び出せるようにしたい」「スキルとMCPサーバー、どちらを開発すべきかわからない」
MCP(Model Context Protocol)サーバーを開発することで、OpenClawのAIエージェントから外部のデータソースやサービスにリアルタイムでアクセスできるようになります。データベースクエリ、API呼び出し、社内ツール操作など、AIの活用範囲が大幅に広がります。
この記事では、OpenClaw完全攻略シリーズEp.30として、MCPサーバーの開発から本番デプロイまでを実践的に解説します。
- MCPの基本概念とOpenClawでの役割
- MCPサーバーの開発環境セットアップ
- DB接続・API統合・社内ツール連携の実装例
- セキュリティ設計とデプロイ方法
MCP(Model Context Protocol)とは?OpenClawでの役割

MCPの基本概念とアーキテクチャ
MCP(Model Context Protocol)は、AIモデルと外部データソース・ツールを接続するための標準プロトコルです。Anthropicが2024年に提唱し、現在はオープンスタンダードとして多くのAIツールが採用しています。
MCPの基本アーキテクチャは以下のとおりです:
┌──────────────┐ MCP Protocol ┌──────────────┐
│ MCP Client │ ←───────────────────→ │ MCP Server │
│ (OpenClaw) │ JSON-RPC over │ │
│ │ stdio / HTTP │ ┌─────────┐ │
│ AI Agent │ │ │ Tools │ │
│ ↕ │ │ │ Resources│ │
│ User │ │ │ Prompts │ │
└──────────────┘ └──┴─────────┴─┘
↕
┌──────────────┐
│ External │
│ Services │
│ (DB/API/SaaS)│
└──────────────┘
MCPサーバーが提供する3つの機能:
| 機能 | 説明 | 例 |
|---|---|---|
| Tools | AIが呼び出せる関数 | DBクエリ実行、API呼出、ファイル操作 |
| Resources | AIが参照できるデータ | テーブルスキーマ、APIドキュメント |
| Prompts | 定型のプロンプトテンプレート | SQLクエリ生成用テンプレート |
MCP仕様の詳細はModel Context Protocol公式サイトで確認できます。
OpenClawスキルとMCPサーバーの使い分け
OpenClawには「スキル」と「MCPサーバー」の2つの拡張方法があります:
| 項目 | スキル | MCPサーバー |
|---|---|---|
| 実装言語 | Markdown + スクリプト | Node.js / Python |
| 通信方式 | CLIツール呼び出し | JSON-RPC(stdio / HTTP) |
| リアルタイム性 | バッチ処理向き | リアルタイム通信可能 |
| 適用場面 | 定型タスクの自動化 | 外部サービスとの動的連携 |
| セットアップ | ファイル配置のみ | サーバープロセスの起動が必要 |
使い分けの基準: 外部サービスとのリアルタイム通信が必要ならMCPサーバー、定型的なCLIタスクの自動化ならスキルが適しています。
OpenClawスキル開発ガイドでスキルの開発方法を解説しています。
MCPサーバーの開発環境セットアップ
Node.js / Python SDKのインストール
MCPサーバーの開発には公式SDKを使用します:
# Node.js SDK
npm init -y
npm install @modelcontextprotocol/sdk
# Python SDK
pip install mcp
OpenClawへのMCPサーバー登録方法
開発したMCPサーバーは、OpenClawの設定ファイルに登録します:
// ~/.openclaw/openclaw.json
{
"mcpServers": {
"my-db-server": {
"command": "node",
"args": ["./mcp-servers/db-server/index.js"],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost/mydb"
}
}
}
}
登録後、OpenClawを再起動すると自動的にMCPサーバーが起動し、AIエージェントからツールが利用可能になります。
ローカル開発とデバッグの手順
# MCP Inspector(デバッグツール)の起動
npx @modelcontextprotocol/inspector ./mcp-servers/db-server/index.js
# ブラウザで http://localhost:5173 にアクセスして動作確認
MCP Inspectorを使うと、ツールの呼び出しやレスポンスをGUIで確認できます。
実践①:データベース接続MCPサーバーの構築
PostgreSQL / MySQL への安全な接続
データベースに接続するMCPサーバーの基本実装:
// mcp-servers/db-server/index.js
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import pg from "pg";
const server = new McpServer({
name: "database-server",
version: "1.0.0",
});
const pool = new pg.Pool({
connectionString: process.env.DATABASE_URL,
});
// クエリ実行ツール
server.tool(
"query",
"データベースにSQLクエリを実行する(SELECT文のみ)",
{ sql: { type: "string", description: "実行するSQL(SELECT文)" } },
async ({ sql }) => {
// SELECTのみ許可(安全対策)
if (!sql.trim().toUpperCase().startsWith("SELECT")) {
return { content: [{ type: "text", text: "エラー: SELECT文のみ実行可能です" }] };
}
const result = await pool.query(sql);
return { content: [{ type: "text", text: JSON.stringify(result.rows, null, 2) }] };
}
);
const transport = new StdioServerTransport();
await server.connect(transport);
クエリ実行とスキーマ情報の提供
スキーマ情報をResourceとして公開することで、AIが適切なSQLを生成できます:
// テーブルスキーマをResourceとして公開
server.resource(
"schema://tables",
"データベースのテーブル一覧とスキーマ情報",
async () => {
const result = await pool.query(`
SELECT table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'public'
ORDER BY table_name, ordinal_position
`);
return { contents: [{ uri: "schema://tables", text: JSON.stringify(result.rows) }] };
}
);
実践②:外部API統合MCPサーバーの構築
REST API / GraphQL のラッピング
外部APIをMCPサーバーでラッピングする例:
server.tool(
"search_weather",
"指定都市の天気予報を取得する",
{ city: { type: "string", description: "都市名(英語)" } },
async ({ city }) => {
const response = await fetch(
`https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${process.env.WEATHER_API_KEY}&units=metric&lang=ja`
);
const data = await response.json();
return {
content: [{ type: "text", text: `${data.name}: ${data.weather[0].description}, ${data.main.temp}°C` }]
};
}
);
認証・レート制限の実装
外部APIとの連携では、認証とレート制限の実装が重要です:
// シンプルなレート制限の実装
const rateLimiter = new Map();
function checkRateLimit(toolName, maxPerMinute = 10) {
const now = Date.now();
const calls = rateLimiter.get(toolName) || [];
const recentCalls = calls.filter(t => now - t < 60000);
if (recentCalls.length >= maxPerMinute) {
throw new Error(`Rate limit exceeded: ${toolName}`);
}
recentCalls.push(now);
rateLimiter.set(toolName, recentCalls);
}
実践③:社内ツール連携MCPサーバー
Notion / Slack / Google Workspace連携
社内ツールとの連携例(Notion):
server.tool(
"create_notion_page",
"Notionにページを作成する",
{
title: { type: "string", description: "ページタイトル" },
content: { type: "string", description: "ページ本文(Markdown)" },
databaseId: { type: "string", description: "追加先のデータベースID" }
},
async ({ title, content, databaseId }) => {
const response = await notion.pages.create({
parent: { database_id: databaseId },
properties: { Name: { title: [{ text: { content: title } }] } },
children: markdownToBlocks(content),
});
return { content: [{ type: "text", text: `ページ作成完了: ${response.url}` }] };
}
);
カスタムツールの公開
OpenClawカスタムツールで、カスタムツール開発のベストプラクティスも紹介しています。
セキュリティとパーミッション設計
読み取り専用 vs 書き込み可能ツール
MCPサーバーのセキュリティ設計で最も重要なのは権限の分離です:
| レベル | 操作 | 例 | リスク |
|---|---|---|---|
| 読み取り | データの参照のみ | SELECT文、API GETリクエスト | 低 |
| 書き込み | データの変更・作成 | INSERT/UPDATE、API POSTリクエスト | 中 |
| 削除 | データの削除 | DELETE文、リソース削除 | 高 |
| 管理 | 設定変更・スキーマ変更 | DDL、権限変更 | 非常に高 |
推奨: デフォルトでは読み取り専用ツールのみ公開し、書き込みツールは明示的な設定で有効化する設計にしましょう。
APIキーの安全な管理
// MCPサーバーにAPIキーを渡す安全な方法
{
"mcpServers": {
"my-api-server": {
"command": "node",
"args": ["./mcp-servers/api-server/index.js"],
"env": {
"API_KEY": "${secrets.MY_API_KEY}"
}
}
}
}
OpenClaw Webhook/API連携でも、セキュアなAPI連携方法を解説しています。
本番デプロイとモニタリング
本番環境へのデプロイ方法:
# Docker化してデプロイ
docker build -t mcp-db-server .
docker run -d --name mcp-db-server \
-e DATABASE_URL=$DATABASE_URL \
mcp-db-server
# systemdサービスとして登録
sudo systemctl enable mcp-db-server
sudo systemctl start mcp-db-server
モニタリングのポイント:
- ヘルスチェック — MCPサーバーの死活監視
- レスポンスタイム — ツール実行の応答時間
- エラー率 — ツール実行の失敗率
- トークン使用量 — AIとの通信に消費されるトークン
OpenClaw入門ガイドでも、全体的なアーキテクチャを紹介しています。
まとめ|MCPサーバーでOpenClawの可能性を拡張しよう
MCPサーバー開発により、OpenClawのAIエージェントの能力を外部のデータソースやサービスにまで拡張できます。
この記事のポイントをおさらい:
- MCPサーバーはAIと外部サービスをリアルタイムに接続する標準プロトコル
- Node.js / Python SDKで簡単に開発でき、OpenClawへの登録はJSON設定1行
- DB接続・API統合・社内ツール連携など、幅広い活用パターンがある
- 読み取り/書き込みの権限分離で安全なツール公開が可能
- 本番デプロイはDockerまたはsystemdで管理
MCPサーバーは一度作れば、OpenClawだけでなくClaude DesktopやCursorなど、MCP対応の他のAIツールからも利用可能です。投資対効果の高い開発になるでしょう。
🛠️ AIツール開発の案件を探すなら
SES BASEでAIエージェント・MCP開発関連の案件をチェック!