2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MCPサーバーで複数処理を一括実行する方法 - Bob IDEで試す!

2
Last updated at Posted at 2026-02-06

IBM Bobを無料で始めてみましょう
30日間の無料トライアルでは、IBM Bobの利用に必要なクレジット”Bobコイン”を、40Bobコイン分ご利用いただけます。
お申し込みはこちらから行えます。
Bobコインの追加が必要な場合は、こちらから少額よりご購入いただけます。

📝 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が自動的に最初のツールを選択します。

実行結果:
image.png

ステップ2: select_pattern実行

要件に基づいてパターンを選択します。

実行結果:
image.png

ステップ3: generate_iac実行

Terraformコードを生成します。

実行結果:
image.png

{
  "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リポジトリに登録します。

実行結果:
image.png

ステップ5: deploy_iac実行

Terraformでデプロイします。

実行結果:
image.png

完了報告

以下のようにタスク完了報告とともに結果が表示されます。

実行結果:
image.png

4.3 実行フロー図


5. 参考資料

5.1 公式ドキュメント

5.2 関連記事

5.3 コミュニティ


まとめ

この記事では、MCPサーバーで複数の処理を順次実行する方法を実践的に解説しました。

ポイント

  1. ✅ ツールの説明文に実行順序を記載することで、Bob IDEが自動的に判断
  2. ✅ 各ツールが独立しているため、拡張や保守が容易
  3. ✅ エラー時に対話的に対応できるため、柔軟な運用が可能

次のステップ

  • 実際のクラウドAPIと連携してみる
  • エラーハンドリングを強化する
  • 新しいツールを追加して機能を拡張する

ぜひ、この記事を参考にMCPサーバーを試してみてください!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?