AI技術一覧に戻る

モデルコンテキストプロトコル(MCP)

MCPとは

モデルコンテキストプロトコル(Model Context Protocol、MCP)は、AIシステムやアプリケーションにおいて、モデルとコンテキスト情報の相互作用を標準化するためのフレームワークです。MCPは、特に大規模言語モデル(LLM)やその他のAIモデルが、一貫性のある方法でコンテキスト情報を処理、保持、共有するための仕組みを提供します。

MCPの目的

MCPの主な目的は以下の通りです:

MCPの主要コンポーネント

MCPは以下の主要コンポーネントで構成されています:

コンポーネント 説明
コンテキストコンテナ コンテキスト情報を格納する標準化された構造。会話履歴、ユーザープロファイル、システム状態などを含む
コンテキストマネージャー コンテキスト情報のライフサイクル管理を担当するコンポーネント
コンテキストプロセッサ コンテキスト情報の処理、変換、フィルタリングを行うコンポーネント
コンテキストストレージ コンテキスト情報の永続化と取得を担当するコンポーネント
コンテキストポリシー コンテキスト情報のアクセス制御、プライバシー、セキュリティに関するルールを定義

コンテキストの種類

MCPでは、以下のようなさまざまな種類のコンテキスト情報を扱います:

MCPの実装パターン

MCPを実装する際の一般的なパターンには以下のようなものがあります:

1. コンテキストインジェクション

モデルへの入力にコンテキスト情報を直接埋め込むパターンです。

function processUserInput(userInput, contextContainer) {
    // コンテキスト情報をプロンプトに埋め込む
    const prompt = `
システム: ${contextContainer.systemInstructions}
ユーザー履歴: ${contextContainer.userProfile}
前回の会話:
${contextContainer.conversationHistory}

ユーザー: ${userInput}
アシスタント:`;

    return model.generate(prompt);
}
    

2. コンテキストミドルウェア

リクエストとレスポンスの間にコンテキスト処理層を挿入するパターンです。

// コンテキストミドルウェアの例
class ContextMiddleware {
    constructor(contextManager) {
        this.contextManager = contextManager;
    }
    
    async process(request, next) {
        // リクエスト前のコンテキスト処理
        const context = await this.contextManager.getContext(request.userId);
        request.context = context;
        
        // モデル処理の実行
        const response = await next(request);
        
        // レスポンス後のコンテキスト更新
        await this.contextManager.updateContext(request.userId, {
            lastInteraction: new Date(),
            lastResponse: response.content
        });
        
        return response;
    }
}
    

3. コンテキストアウェアモデル

モデル自体がコンテキスト管理機能を内蔵しているパターンです。

class ContextAwareModel {
    constructor(baseModel, contextStore) {
        this.baseModel = baseModel;
        this.contextStore = contextStore;
    }
    
    async generate(input, userId) {
        // コンテキストの取得
        const userContext = await this.contextStore.getUserContext(userId);
        
        // コンテキストを考慮した生成
        const output = await this.baseModel.generate(input, userContext);
        
        // コンテキストの更新
        await this.contextStore.updateUserContext(userId, {
            lastQuery: input,
            lastResponse: output,
            interactionCount: userContext.interactionCount + 1
        });
        
        return output;
    }
}
    

MCPの実装例

会話履歴を管理するMCP実装

コンテキストコンテナの定義

class ConversationContext {
    constructor(maxHistoryLength = 10) {
        this.messages = [];
        this.maxHistoryLength = maxHistoryLength;
        this.metadata = {
            createdAt: new Date(),
            lastUpdated: new Date(),
            sessionId: generateUniqueId()
        };
    }
    
    addMessage(role, content) {
        this.messages.push({
            role,
            content,
            timestamp: new Date()
        });
        
        // 履歴の長さを制限
        if (this.messages.length > this.maxHistoryLength) {
            this.messages.shift();
        }
        
        this.metadata.lastUpdated = new Date();
    }
    
    getFormattedHistory() {
        return this.messages.map(msg => 
            `${msg.role}: ${msg.content}`
        ).join('\n');
    }
    
    clear() {
        this.messages = [];
        this.metadata.lastUpdated = new Date();
    }
}
        

コンテキストマネージャーの実装

class ContextManager {
    constructor() {
        this.contexts = new Map();
    }
    
    getOrCreateContext(userId) {
        if (!this.contexts.has(userId)) {
            this.contexts.set(userId, new ConversationContext());
        }
        return this.contexts.get(userId);
    }
    
    async processUserMessage(userId, userMessage) {
        const context = this.getOrCreateContext(userId);
        context.addMessage('user', userMessage);
        
        // モデルへの入力を準備
        const prompt = `以下は会話の履歴です:\n${context.getFormattedHistory()}\n\nアシスタント:`;
        
        // モデルからの応答を取得
        const response = await callModel(prompt);
        
        // 応答をコンテキストに追加
        context.addMessage('assistant', response);
        
        return response;
    }
}
        

MCPの利点

MCPを導入することで得られる主な利点は以下の通りです:

MCPの課題と考慮事項

MCPを実装する際に考慮すべき課題には以下のようなものがあります:

実装のベストプラクティス

MCPの応用例

MCPは以下のようなさまざまな応用例があります:

まとめ

モデルコンテキストプロトコル(MCP)は、AIシステムにおけるコンテキスト管理を標準化し、効率化するための重要なフレームワークです。適切に実装されたMCPは、AIシステムの一貫性、パーソナライゼーション、スケーラビリティを向上させ、より優れたユーザー体験を提供します。コンテキスト管理の複雑さを抽象化することで、開発者はビジネスロジックに集中でき、より高度なAIアプリケーションの開発が可能になります。