📝 TL;DR(要約)
この記事では、MCPサーバーで複数の処理を順次実行する方法を実践的に解説します。
(4.2 実行の流れ以外はBob IDEで実施した作業を元にBobに執筆してもらいました!)
この記事で分かること
- MCPサーバーで複数処理を一括実行する方法
- Bob IDEのLLMが自律的に処理順序を判断する仕組み
- 実際に動くコードとその使い方
実装のポイント
- ✅ ツールの説明文(description)に実行順序を記載
- ✅ Bob IDEが説明文を読んで自動的に順序を判断
動作環境
- Bob IDE(VS Code拡張機能)
- Node.js 18以上
- TypeScript
所要時間
- セットアップ: 約15分
- 動作確認: 約5分
1. MCPサーバーで複数処理を一括実行する方法
1.1 MCPサーバーとは
Model Context Protocol (MCP) は、AIアシスタント(Bob IDE等)と外部ツールを接続するための標準プロトコルです。Anthropic社が開発し、AIアシスタントが外部のツールやデータにアクセスできるようにします。
1.2 複数処理を一括実行する仕組み
MCPサーバーで複数の処理を順次実行するには、ツールの説明文に実行順序を記載します。
{
name: "check_environment",
description: "【ステップ5】デプロイの最初のステップ。実行環境を確認します。" +
"このツールは必ず最初に実行してください。"
}
Bob IDEのLLMがこの説明文を読んで、自動的に適切な順序でツールを呼び出します。
1.3 今回実装する5つのツール
| ステップ | ツール名 | 説明 |
|---|---|---|
| 5 | check_environment |
実行環境の確認 |
| 6 | select_pattern |
黄金パターンの選択 |
| 7 | generate_iac |
IaCコードの生成 |
| 8 | commit_to_git |
Gitリポジトリへの登録 |
| 9 | deploy_iac |
デプロイの実行 |
1.4 なぜこの方法が優れているのか
- ✅ エラー時に対話的に対応できる: 各ステップでエラーが発生した場合、Bob IDEが原因を分析して対処方法を提示
- ✅ 各ツールが独立しているため拡張しやすい: 新しいツールを追加するだけで機能を拡張可能
- ✅ Bob IDEの判断に任せるため柔軟: 状況に応じてツールの実行順序を変更可能
2. 実装手順(コピペで動く)
2.1 プロジェクトの作成
mkdir auto-deploy-mcp-server
cd auto-deploy-mcp-server
npm init -y
2.2 必要なパッケージのインストール
npm install @modelcontextprotocol/sdk zod
npm install -D typescript @types/node
2.3 TypeScript設定(tsconfig.json)
{
"compilerOptions": {
"target": "ES2022",
"module": "Node16",
"moduleResolution": "Node16",
"outDir": "./build",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"declaration": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "build"]
}
2.4 package.jsonの設定
{
"name": "auto-deploy-mcp-server",
"version": "1.0.0",
"description": "MCP server for auto-deployment workflow",
"type": "module",
"main": "build/index.js",
"scripts": {
"build": "tsc && chmod +x build/index.js",
"watch": "tsc --watch",
"start": "node build/index.js"
},
"keywords": ["mcp", "auto-deploy"],
"author": "",
"license": "ISC",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.0.4",
"zod": "^3.24.1"
},
"devDependencies": {
"@types/node": "^22.19.8",
"typescript": "^5.9.3"
}
}
2.5 MCPサーバーの実装(src/index.ts)
#!/usr/bin/env node
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
CallToolRequestSchema,
ListToolsRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";
// MCPサーバーの作成
const server = new Server(
{
name: "auto-deploy-mcp-server",
version: "1.0.0",
},
{
capabilities: {
tools: {},
},
}
);
// ツールのリストを返すハンドラー
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "check_environment",
description:
"【ステップ5】デプロイの最初のステップ。実行環境を確認します。" +
"このツールは必ず最初に実行してください。" +
"環境情報を取得し、次のselect_patternツールで使用します。",
inputSchema: {
type: "object",
properties: {
cloud_provider: {
type: "string",
enum: ["aws", "azure", "gcp"],
description: "クラウドプロバイダー",
},
},
required: ["cloud_provider"],
},
},
{
name: "select_pattern",
description:
"【ステップ6】check_environmentの後に実行。" +
"要件定義書と環境情報から最適な黄金パターンを選択します。" +
"選択したパターンは次のgenerate_iacツールで使用します。",
inputSchema: {
type: "object",
properties: {
requirements: {
type: "string",
description: "要件定義書の内容",
},
environment_info: {
type: "object",
description: "check_environmentから取得した環境情報",
},
},
required: ["requirements", "environment_info"],
},
},
{
name: "generate_iac",
description:
"【ステップ7】select_patternの後に実行。" +
"選択されたパターンに基づいてIaCコードを生成します。" +
"生成したコードは次のcommit_to_gitツールで使用します。",
inputSchema: {
type: "object",
properties: {
pattern_name: {
type: "string",
description: "選択されたパターン名",
},
},
required: ["pattern_name"],
},
},
{
name: "commit_to_git",
description:
"【ステップ8】generate_iacの後に実行。" +
"生成されたIaCコードをGitリポジトリに登録します。" +
"登録後、次のdeploy_iacツールでデプロイを実行します。",
inputSchema: {
type: "object",
properties: {
repository_url: {
type: "string",
description: "GitリポジトリのURL",
},
files: {
type: "array",
items: { type: "object" },
description: "登録するファイルのリスト",
},
},
required: ["repository_url", "files"],
},
},
{
name: "deploy_iac",
description:
"【ステップ9】commit_to_gitの後に実行。最終ステップ。" +
"IaCコードを実行環境にデプロイします。",
inputSchema: {
type: "object",
properties: {
working_directory: {
type: "string",
description: "作業ディレクトリ",
},
},
required: ["working_directory"],
},
},
],
};
});
// ツール実行のハンドラー
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
console.error(`[MCP Server] Tool called: ${name}`);
console.error(`[MCP Server] Arguments: ${JSON.stringify(args, null, 2)}`);
switch (name) {
case "check_environment": {
const cloud_provider = (args as any).cloud_provider;
return {
content: [
{
type: "text",
text: JSON.stringify(
{
tool_called: "check_environment",
message: `check_environment ツールが呼び出されました`,
cloud_provider: cloud_provider,
environment: {
provider: cloud_provider,
region: "ap-northeast-1",
available_services: ["EC2", "RDS", "S3"],
credentials_valid: true,
},
},
null,
2
),
},
],
};
}
case "select_pattern": {
return {
content: [
{
type: "text",
text: JSON.stringify(
{
tool_called: "select_pattern",
message: `select_pattern ツールが呼び出されました`,
selected_pattern: {
name: "web-app-basic",
description: "基本的なWebアプリケーションパターン",
confidence_score: 0.95,
reasoning: "Node.js + Express構成に最適なパターンです",
},
},
null,
2
),
},
],
};
}
case "generate_iac": {
const pattern_name = (args as any).pattern_name;
return {
content: [
{
type: "text",
text: JSON.stringify(
{
tool_called: "generate_iac",
message: `generate_iac ツールが呼び出されました`,
pattern_name: pattern_name,
generated_files: [
{ path: "main.tf", content: "# Terraform code here" },
{ path: "variables.tf", content: "# Variables here" },
],
},
null,
2
),
},
],
};
}
case "commit_to_git": {
const repository_url = (args as any).repository_url;
return {
content: [
{
type: "text",
text: JSON.stringify(
{
tool_called: "commit_to_git",
message: `commit_to_git ツールが呼び出されました`,
repository_url: repository_url,
commit_sha: "abc123def456",
pr_url: "https://github.com/user/repo/pull/123",
},
null,
2
),
},
],
};
}
case "deploy_iac": {
const working_directory = (args as any).working_directory;
return {
content: [
{
type: "text",
text: JSON.stringify(
{
tool_called: "deploy_iac",
message: `deploy_iac ツールが呼び出されました`,
working_directory: working_directory,
status: "success",
deployment_id: "deploy-12345",
resources_created: ["EC2 Instance", "RDS Database", "S3 Bucket"],
},
null,
2
),
},
],
};
}
default:
throw new Error(`Unknown tool: ${name}`);
}
});
// サーバー起動
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("Auto-deploy MCP server running on stdio");
}
main().catch((error) => {
console.error("Server error:", error);
process.exit(1);
});
2.6 ビルド
npm run build
3. Bob IDEへの登録方法
3.1 Bob IDEのインストール
VS Codeの拡張機能としてBob IDEをインストールします。
- 拡張機能ID:
ibm.bob-code
3.2 MCP設定ファイルの場所
OSごとに設定ファイルの場所が異なります:
-
macOS:
~/Library/Application Support/IBM Bob/User/globalStorage/ibm.bob-code/settings/mcp_settings.json -
Windows:
%APPDATA%\IBM Bob\User\globalStorage\ibm.bob-code\settings\mcp_settings.json -
Linux:
~/.config/IBM Bob/User/globalStorage/ibm.bob-code/settings/mcp_settings.json
3.3 MCP設定ファイルの編集
設定ファイルに以下の内容を追加します:
{
"mcpServers": {
"auto-deploy-test": {
"command": "node",
"args": [
"/path/to/auto-deploy-mcp-server/build/index.js"
],
"disabled": false,
"alwaysAllow": []
}
}
}
重要: /path/to/auto-deploy-mcp-serverは、実際のプロジェクトの絶対パスに置き換えてください。
3.4 Bob IDEの再起動
VS Codeを再起動して、Bob IDEがMCPサーバーを認識するようにします。
- Command Palette (Cmd+Shift+P / Ctrl+Shift+P) > "Reload Window"
3.5 動作確認
Bob IDEのチャットで以下のように質問します:
利用可能なMCPツールを教えて
5つのツールが表示されることを確認してください:
- check_environment
- select_pattern
- generate_iac
- commit_to_git
- deploy_iac
4. 実際の使用例
4.1 基本的な使い方
Bob IDEのチャットを開いて、以下のように指示します:
AWSにWebアプリケーションをデプロイしてください。
要件定義書の内容は「Node.js + Express構成のWebアプリケーション」です。
リポジトリURLは「https://github.com/user/repo」です。
4.2 実行の流れ
ステップ1: check_environment実行
Bob IDEが自動的に最初のツールを選択します。
ステップ2: select_pattern実行
要件に基づいてパターンを選択します。
ステップ3: generate_iac実行
Terraformコードを生成します。
{
"tool_called": "generate_iac",
"pattern_name": "web-app-basic",
"generated_files": [
{ "path": "main.tf", "content": "# Terraform code here" },
{ "path": "variables.tf", "content": "# Variables here" }
]
}
ステップ4: commit_to_git実行
Gitリポジトリに登録します。
ステップ5: deploy_iac実行
Terraformでデプロイします。
完了報告
以下のようにタスク完了報告とともに結果が表示されます。
4.3 実行フロー図
5. 参考資料
5.1 公式ドキュメント
- MCP公式ドキュメント: https://modelcontextprotocol.io/
- Bob IDE公式サイト: https://www.ibm.com/products/watsonx-code-assistant
- MCP SDK (TypeScript): https://github.com/modelcontextprotocol/typescript-sdk
5.2 関連記事
5.3 コミュニティ
- MCP Discord: https://discord.gg/modelcontextprotocol
- Bob IDE フォーラム: https://community.ibm.com/
まとめ
この記事では、MCPサーバーで複数の処理を順次実行する方法を実践的に解説しました。
ポイント
- ✅ ツールの説明文に実行順序を記載することで、Bob IDEが自動的に判断
- ✅ 各ツールが独立しているため、拡張や保守が容易
- ✅ エラー時に対話的に対応できるため、柔軟な運用が可能
次のステップ
- 実際のクラウドAPIと連携してみる
- エラーハンドリングを強化する
- 新しいツールを追加して機能を拡張する
ぜひ、この記事を参考にMCPサーバーを試してみてください!





