CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
ブログ一覧

MCP(Model Context Protocol)実践ガイド — Claude をカスタムツールで拡張する

MCPModel Context ProtocolClaude APIツール拡張

MCP とは何か?

Model Context Protocol(MCP) は、Anthropic が策定したオープン標準で、AI モデルと外部ツール・データソースをシームレスに連携させるためのプロトコルです。USB-C が様々なデバイスを統一的に接続するように、MCP は Claude と外部世界をつなぐ標準インターフェースを提供します。

MCP を使うことで、Claude は以下のようなことが可能になります:

  • ローカルファイルシステムの読み書き
  • データベースへのクエリ実行
  • 外部 API の呼び出し
  • カスタムビジネスロジックの実行

MCP の基本アーキテクチャ

MCP は クライアント・サーバー型アーキテクチャ を採用しています。

Claude(MCP クライアント)
         ↕ MCP プロトコル(JSON-RPC over stdio/SSE)
MCP サーバー(カスタムツール群)

主な概念は以下の3つです:

Tools(ツール): Claude が呼び出せる関数。例えば read_filequery_databasesend_email など。

Resources(リソース): Claude が参照できるデータ。ファイル、データベースのレコード、API レスポンスなど。

Prompts(プロンプト): 再利用可能なプロンプトテンプレート。特定のタスクに最適化されたプロンプトを提供します。

最初の MCP サーバーを作る

TypeScript で簡単な MCP サーバーを作ってみましょう。ここでは「現在時刻を返す」シンプルなツールを実装します。

1. プロジェクトのセットアップ

mkdir my-mcp-server
cd my-mcp-server
npm init -y
npm install @modelcontextprotocol/sdk
npm install -D typescript @types/node

2. サーバーの実装

// src/index.ts
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
  CallToolRequestSchema,
  ListToolsRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";
 
const server = new Server(
  {
    name: "my-mcp-server",
    version: "1.0.0",
  },
  {
    capabilities: {
      tools: {},
    },
  }
);
 
// 利用可能なツール一覧を返す
server.setRequestHandler(ListToolsRequestSchema, async () => {
  return {
    tools: [
      {
        name: "get_current_time",
        description: "現在の日時を返します",
        inputSchema: {
          type: "object",
          properties: {
            timezone: {
              type: "string",
              description: "タイムゾーン(例: Asia/Tokyo)",
            },
          },
        },
      },
    ],
  };
});
 
// ツールの実行ハンドラー
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  if (request.params.name === "get_current_time") {
    const timezone =
      (request.params.arguments?.timezone as string) || "Asia/Tokyo";
    const now = new Date().toLocaleString("ja-JP", { timeZone: timezone });
 
    return {
      content: [
        {
          type: "text",
          text: `現在時刻(${timezone}): ${now}`,
        },
      ],
    };
  }
 
  throw new Error(`Unknown tool: ${request.params.name}`);
});
 
// サーバーの起動
const transport = new StdioServerTransport();
await server.connect(transport);

3. Claude Desktop への接続

~/Library/Application Support/Claude/claude_desktop_config.json に以下を追加します:

{
  "mcpServers": {
    "my-mcp-server": {
      "command": "node",
      "args": ["/path/to/my-mcp-server/dist/index.js"]
    }
  }
}

Claude Desktop を再起動すると、Claude の会話の中でこのツールが利用できるようになります。

実践的なユースケース

ケース1:社内データベース連携

// PostgreSQL に接続してデータを取得するツール
{
  name: "query_sales_data",
  description: "売上データをクエリします",
  inputSchema: {
    type: "object",
    properties: {
      start_date: { type: "string", description: "開始日(YYYY-MM-DD)" },
      end_date: { type: "string", description: "終了日(YYYY-MM-DD)" },
    },
    required: ["start_date", "end_date"],
  },
}

このツールを使うと、「先月の売上データを分析して」という自然言語の指示だけで、Claude が自動的にデータベースをクエリして分析結果を返してくれます。

ケース2:ファイル操作の自動化

// プロジェクトディレクトリ内のファイルを読み書きするツール
{
  name: "write_report",
  description: "分析レポートをファイルに保存します",
  inputSchema: {
    type: "object",
    properties: {
      filename: { type: "string" },
      content: { type: "string" },
    },
    required: ["filename", "content"],
  },
}

ケース3:外部サービス連携

Slack、Notion、GitHub などの外部 API と連携するツールを作ることで、Claude が直接これらのサービスを操作できるようになります。

// GitHub Issue を作成するツール
{
  name: "create_github_issue",
  description: "GitHub にイシューを作成します",
  inputSchema: {
    type: "object",
    properties: {
      repo: { type: "string", description: "リポジトリ名(owner/repo)" },
      title: { type: "string", description: "イシューのタイトル" },
      body: { type: "string", description: "イシューの本文" },
    },
    required: ["repo", "title"],
  },
}

MCP を使う際のベストプラクティス

ツールの粒度を適切に保つ: ひとつのツールに多くの機能を詰め込まず、単一責任の原則に従って設計しましょう。

エラーハンドリングを丁寧に: Claude はエラーメッセージを見て次のアクションを決定します。エラーの原因と推奨される対処法を明確に伝えましょう。

セキュリティに注意: MCP サーバーが外部 API キーや機密情報を扱う場合、環境変数を使って管理し、ハードコーディングは避けましょう。

ツールの説明を丁寧に書く: Claude はツールの description を読んで使うべきか判断します。日本語で明確に記述すると、より精度高くツールを活用してもらえます。

まとめ

MCP は Claude の可能性を大きく広げるエコシステムです。社内ツールとの連携、データベースのクエリ、外部サービスの操作など、あらゆる用途に応用できます。

Anthropic は MCP をオープン標準として公開しており、公式リポジトリ には多数のサンプルやコミュニティ製サーバーも公開されています。ぜひ自分のユースケースに合わせた MCP サーバーを作り、Claude との連携を深めてみてください。