はじめに
MCP(Model Context Protocol、モデルコンテキストプロトコル)は、AI モデルと外部ツールやデータソース間の通信方式を定義するオープンスタンダードです。OpenClaw は MCP を深く統合しており、AI アシスタントが MCP Server を通じてファイルシステム、データベース、API などの外部リソースとやり取りできるようになっています。
本チュートリアルでは、概念から出発して、OpenClaw における MCP の設定と使用方法を習得していただきます。
MCP とは
コア概念
MCP が解決する核心的な課題は、AI モデルが安全かつ標準化された方法で外部ツールを使用できるようにすることです。
ユーザーメッセージ → OpenClaw → AI モデル → ツールが必要 → MCP Client → MCP Server → 操作実行
↓
ユーザーへの返答 ← OpenClaw ← AI モデル ← 結果取得 ← MCP Client ← MCP Server
MCP の3つのコア機能
| 機能 | 説明 | 例 |
|---|---|---|
| Tools | 呼び出し可能な関数/ツール | ファイル読み書き、HTTPリクエスト送信、データベースクエリ |
| Resources | アクセス可能なデータリソース | ファイルコンテンツ、データベーステーブル、APIエンドポイント |
| Prompts | 事前定義のプロンプトテンプレート | コードレビューテンプレート、要約テンプレート |
MCP Server のタイプ
MCP Server には2つの実行方式があります:
- Stdio(標準入出力):子プロセスとして実行し、stdin/stdout で通信
- SSE(Server-Sent Events):HTTP サービスとして実行し、HTTP で通信
OpenClaw での MCP Server 設定
基本設定構造
~/.config/openclaw/openclaw.json5 で MCP を設定します:
{
mcp: {
servers: {
// 各 MCP Server には一意の名前がある
"server-name": {
// Stdio モードの設定
command: "npx",
args: ["-y", "@package/mcp-server"],
env: {
// 環境変数
API_KEY: "your-key"
}
},
// または SSE モードの設定
"remote-server": {
url: "http://localhost:3001/sse",
headers: {
"Authorization": "Bearer your-token"
}
}
}
}
}
複数 Server の共存
複数の MCP Server を同時に設定できます:
{
mcp: {
servers: {
"filesystem": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-filesystem",
"--allow-read", "--allow-write", "/home/user/documents"]
},
"database": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-sqlite",
"--db-path", "/home/user/data/app.db"]
},
"http-fetch": {
command: "npx",
args: ["-y", "@openclaw-mcp/http-fetch"]
},
"github": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-github"],
env: {
GITHUB_PERSONAL_ACCESS_TOKEN: "ghp_xxxxx"
}
}
}
}
}
よく使われる MCP Server の詳細
1. ファイルシステム MCP Server
AI がローカルファイルを読み書きできるようにします。ドキュメント管理やデータ保存などのシナリオに適しています。
{
mcp: {
servers: {
"filesystem": {
command: "npx",
args: [
"-y",
"@modelcontextprotocol/server-filesystem",
"--allow-read", // 読み取り許可
"--allow-write", // 書き込み許可
"/home/user/docs" // ディレクトリ範囲を限定
]
}
}
}
}
提供されるツール:
| ツール名 | 機能 | パラメータ |
|---|---|---|
read_file |
ファイルの内容を読み取り | path |
write_file |
ファイルに書き込み | path, content |
list_directory |
ディレクトリの内容を一覧表示 | path |
create_directory |
ディレクトリの作成 | path |
move_file |
ファイルの移動/名前変更 | source, destination |
search_files |
ファイルの検索 | path, pattern |
セキュリティ上の注意:パスパラメータでアクセス可能なディレクトリ範囲を必ず制限し、ファイルシステム全体へのアクセス権限を与えないようにしてください。
2. SQLite データベース MCP Server
AI が SQLite データベースを検索・操作できるようにします。
{
mcp: {
servers: {
"sqlite": {
command: "npx",
args: [
"-y",
"@modelcontextprotocol/server-sqlite",
"--db-path", "/home/user/data/myapp.db"
]
}
}
}
}
提供されるツール:
| ツール名 | 機能 |
|---|---|
read_query |
SELECT クエリの実行 |
write_query |
INSERT/UPDATE/DELETE の実行 |
create_table |
新しいテーブルの作成 |
list_tables |
すべてのテーブルを一覧表示 |
describe_table |
テーブル構造の確認 |
使用例——ユーザーがチャットで「先週の売上データを調べて」と言うと、AI は自動的に MCP ツールを通じて SQL クエリを実行し、結果を返します。
3. HTTP Fetch MCP Server
AI が HTTP リクエストを発行し、任意の REST API を呼び出せるようにします。
{
mcp: {
servers: {
"http-fetch": {
command: "npx",
args: ["-y", "@openclaw-mcp/http-fetch"],
env: {
// オプション:デフォルトのリクエストヘッダーを設定
DEFAULT_HEADERS: '{"User-Agent": "OpenClaw/1.0"}'
}
}
}
}
}
提供されるツール:
| ツール名 | 機能 |
|---|---|
http_get |
GET リクエストの発行 |
http_post |
POST リクエストの発行 |
http_put |
PUT リクエストの発行 |
http_delete |
DELETE リクエストの発行 |
4. GitHub MCP Server
GitHub リポジトリとやり取りし、Issue、PR、コードなどを確認します。
{
mcp: {
servers: {
"github": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-github"],
env: {
GITHUB_PERSONAL_ACCESS_TOKEN: "ghp_xxxxx"
}
}
}
}
}
提供されるツール:
| ツール名 | 機能 |
|---|---|
search_repositories |
リポジトリの検索 |
get_file_contents |
ファイルコンテンツの取得 |
list_issues |
Issue の一覧表示 |
create_issue |
Issue の作成 |
list_pull_requests |
PR の一覧表示 |
create_pull_request |
PR の作成 |
5. PostgreSQL MCP Server
PostgreSQL データベースに接続します:
{
mcp: {
servers: {
"postgres": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-postgres"],
env: {
DATABASE_URL: "postgresql://user:pass@localhost:5432/mydb"
}
}
}
}
}
MCP と Skill の連携
MCP Server は Skill に外部世界とやり取りする能力を提供します。SKILL.md で必要な MCP ツールを宣言します:
---
name: my-skill
mcp_tools:
- filesystem # ファイルシステムツールを使用
- http_fetch # HTTP リクエストツールを使用
- sqlite # データベースツールを使用
---
AI は Skill 実行時に、必要に応じて対応する MCP ツールを自動的に呼び出します。
実際のフロー例
ユーザーが送信:「先週の注文データを CSV ファイルにエクスポートして」
- AI はタスクに
sqliteとfilesystemの2つの MCP Server が必要であることを認識 sqlite.read_queryを呼び出して先週の注文データを検索- 検索結果を CSV フォーマットに整形
filesystem.write_fileを呼び出して CSV ファイルを保存- ファイルパスをユーザーに返却
カスタム MCP Server
既存の MCP Server がニーズを満たさない場合、独自のものを開発できます。
最小限の例(Node.js)
// my-mcp-server.js
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new Server({
name: "my-custom-server",
version: "1.0.0"
}, {
capabilities: {
tools: {}
}
});
// ツールの登録
server.setRequestHandler("tools/list", async () => ({
tools: [{
name: "greet",
description: "Generate a greeting message",
inputSchema: {
type: "object",
properties: {
name: { type: "string", description: "Name to greet" }
},
required: ["name"]
}
}]
}));
// ツール呼び出しの処理
server.setRequestHandler("tools/call", async (request) => {
if (request.params.name === "greet") {
const name = request.params.arguments.name;
return {
content: [{ type: "text", text: `Hello, ${name}!` }]
};
}
});
// サーバーの起動
const transport = new StdioServerTransport();
await server.connect(transport);
OpenClaw での設定:
{
mcp: {
servers: {
"my-custom": {
command: "node",
args: ["/path/to/my-mcp-server.js"]
}
}
}
}
MCP Server のデバッグ
MCP ツール一覧の確認
# ロード済みのすべての MCP ツールを確認
openclaw doctor
出力には、接続済みのすべての MCP Server とそれぞれが提供するツールが一覧表示されます。
MCP デバッグログの有効化
# MCP 通信の詳細を確認
openclaw logs --level debug
ログには MCP ツール呼び出しのリクエストとレスポンスが表示されます:
[DEBUG] MCP tool call: filesystem.read_file({path: "/home/user/notes.txt"})
[DEBUG] MCP tool result: {content: [{type: "text", text: "file contents..."}]}
MCP Server の独立テスト
MCP Inspector ツールを使用して MCP Server を独立にテストできます:
npx @modelcontextprotocol/inspector npx -y @modelcontextprotocol/server-filesystem --allow-read /tmp
これにより Web インターフェースが開き、MCP ツールを直接呼び出してテストできます。
セキュリティのベストプラクティス
最小権限の原則
{
mcp: {
servers: {
"filesystem": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-filesystem",
"--allow-read", // 読み取りのみ
"/home/user/public-docs" // ディレクトリを限定
]
// 注意:--allow-write は追加しない
}
}
}
}
API キーのセキュリティ
設定ファイルに API キーをハードコーディングせず、環境変数を使用してください:
{
mcp: {
servers: {
"github": {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-github"],
env: {
// システム環境変数を参照
GITHUB_PERSONAL_ACCESS_TOKEN: "${GITHUB_TOKEN}"
}
}
}
}
}
次にシステムで環境変数を設定します:
export GITHUB_TOKEN="ghp_xxxxx"
ネットワーク分離
リモート MCP Server(SSE モード)の場合、以下を推奨します:
- HTTPS 接続の使用
- 認証 Token の設定
- アクセス可能な IP 範囲の制限
よくある質問
MCP Server が起動しない
# npx が正常に実行できるか確認
npx -y @modelcontextprotocol/server-filesystem --help
# Node.js のバージョンを確認
node --version # 22+ が必要
ツール呼び出しがタイムアウトする
一部の MCP ツール(HTTP リクエストなど)はネットワークの問題でタイムアウトする場合があります。設定でタイムアウト時間を設定できます:
{
mcp: {
// グローバルタイムアウト設定(ミリ秒)
timeout: 30000,
servers: {
"http-fetch": {
command: "npx",
args: ["-y", "@openclaw-mcp/http-fetch"],
// この Server 個別のタイムアウトを設定
timeout: 60000
}
}
}
}
AI が期待したツールを呼び出さない
Skill で mcp_tools が正しく宣言されていること、MCP Server 名が設定と一致していることを確認してください。デバッグログでツールが正しくロードされているか確認してください。
まとめ
MCP は OpenClaw の能力拡張の基盤です。さまざまな MCP Server を設定することで、AI アシスタントにファイルシステムへのアクセス、データベースのクエリ、API の呼び出し、GitHub の操作など、ほぼすべての外部リソースを利用させることができます。MCP の動作原理と設定方法を理解することで、より強力な Skill と自動化ワークフローの構築が可能になります。