Skip to main content
Glama

MCPドキュメントプロセッサ

モデル コンテキスト プロトコル (MCP) を使用してビジネス ドキュメントを自動的に抽出、分析、ルーティングするインテリジェントなドキュメント処理システム。

プロジェクト概要

このプロジェクトでは、MCPを用いて実際のビジネス課題であるドキュメント処理ワークフローの自動化を解決する方法を示します。このシステムは以下のことが可能です。

  • 受信文書(請求書、契約書、メール)を分類する

  • MLモデルを使用して関連情報を抽出する

  • ドキュメントの種類に応じて処理し、処理パイプライン全体でコンテキストを維持し、REST API を通じて機能を公開します。

Related MCP server: MCP PDF Server

主要なMCPコンポーネント

  • コンテキスト オブジェクト: MCP の中心となるこれらのオブジェクト ( MCPContextで実装) は、処理ステップ間で情報を伝達し、ドキュメントの状態を維持します。

  • メモリ システム: プラグ可能なバックエンドを使用して、処理ステップ間のコンテキスト オブジェクトを保存します。

  • プロトコル: プロセッサとモデルの明確なインターフェースを定義し、モジュール性を保証します。

  • ルーター: コンテンツに基づいてドキュメントを専門のプロセッサにインテリジェントにルーティングします。

ビジネス価値

このソリューションは、次のようないくつかのビジネス上の課題に対処します。

  • 手作業の削減: 文書からのデータ抽出を自動化

  • 一貫性: ドキュメントの種類を問わず一貫した処理を保証します

  • 監査可能性: 処理履歴と信頼スコアを維持する

  • 拡張性: モジュール設計により、新しいドキュメントタイプを簡単に追加できます。

技術的なハイライト

  • 分類とエンティティ抽出にBERTベースのモデルを使用する

  • 文書要約のためのT5モデル

  • RESTインターフェース用のFastAPI

  • 簡単に拡張できるプラグ可能なアーキテクチャ

  • 包括的なログ記録とエラー処理

  • より良いユーザーエクスペリエンスを実現するReactベースのUI

概要

MCPドキュメントプロセッサは、請求書、契約書、電子メールなど、様々な種類のドキュメントを一貫性と自動化をもって処理するという、ビジネスにおける一般的な課題を解決するために設計されています。モデルコンテキストプロトコルフレームワークを活用し、システムの様々なコンポーネント間の情報フローを管理します。

主な特徴

  • 文書分類: 文書の種類を自動的に識別します

  • 情報抽出: 文書から重要な情報を抽出します

  • ドキュメントルーティング: 適切なプロセッサにドキュメントをルーティングします

  • コンテキスト管理: 処理パイプライン全体でコンテキストを維持します

  • APIインターフェース:他のシステムとの統合のためのRESTful APIを提供します

建築

このシステムは、以下を提供するモデル コンテキスト プロトコル (MCP) を中心に構築されています。

  1. コンテキストオブジェクト: 処理ステップ間で情報を伝達する

    # Example of MCPContext usage context = MCPContext( document_id=document_id, raw_text=text, metadata=metadata ) # Adding extracted data with confidence scores context.add_extracted_data("invoice_number", "INV-12345", confidence=0.95) # Tracking processing history context.add_to_history( processor_name="InvoiceProcessor", status="completed", details={"processing_time": "0.5s"} )
  2. メモリシステム: API呼び出し間のコンテキストオブジェクトを保存します

    # Storing context in memory memory.store(document_id, context) # Retrieving context from memory context = memory.retrieve(document_id)
  3. プロトコル: プロセッサとモデルのインターフェースを定義する

    # Processor protocol example class Processor(Protocol): @abstractmethod def process(self, context: MCPContext) -> MCPContext: """Process the document and update the context.""" pass @abstractmethod def can_handle(self, context: MCPContext) -> bool: """Determine if this processor can handle the given document.""" pass
  4. ルーター: 適切な専門プロセッサにドキュメントをルーティングします

    # Router usage example processor = processor_router.route(context) if processor: processed_context = processor.process(context)

MCPフロー図

Document Upload → MCPContext Creation → Memory Storage → Document Processing → Router Selection → Specialized Processor → Entity Extraction → Context Update → Memory Storage → API Response

MCP実装の詳細

このプロジェクトにおけるモデルコンテキストプロトコルの実装には、いくつかの重要な利点があります。

1. コンテキストの永続性を備えたステートフル処理

MCPContextクラスは、ドキュメント処理ライフサイクル全体にわたって状態を維持します。

# Context is created during document upload @router.post("/documents/upload") async def upload_document(file: UploadFile, memory: MemoryInterface): # Create a context context = MCPContext( document_id=document_id, raw_text=text, metadata=metadata ) # Store in memory for later retrieval memory.store(document_id, context)

2. プラガブルメモリシステム

メモリ システムはプラグ可能に設計されており、さまざまなストレージ バックエンドを可能にします。

# Factory function in memory.py def get_memory_store(memory_type: str = "in_memory", **kwargs) -> MemoryInterface: if memory_type == "in_memory": return InMemoryStorage(default_ttl=kwargs.get("ttl", 3600)) # Additional implementations can be added here

3. 信頼度の追跡

MCP は抽出されたすべてのデータの信頼スコアを追跡し、より適切な意思決定を可能にします。

# In entity_extractor.py entity_data = { "text": text[current_entity["start"]:current_entity["end"]], "start": current_entity["start"], "end": current_entity["end"], "confidence": avg_confidence }

4. 処理履歴

各処理ステップはコンテキストの履歴に記録され、監査可能性を実現します。

# In router.py context.add_to_history( processor_name=processor.__class__.__name__, status="completed" )

5. インテリジェントなドキュメントルーティング

ProcessorRouter 、各ドキュメントに適切なプロセッサを決定します。

# In router.py def route(self, context: MCPContext) -> Optional[Processor]: for processor in self.processors: if processor.can_handle(context): return processor return None

6. 拡張性

Processorプロトコルを実装すると、新しいドキュメント タイプを簡単に追加できます。

# Example of adding a new processor class NewDocumentProcessor(BaseProcessor): def can_handle(self, context: MCPContext) -> bool: # Logic to determine if this processor can handle the document pass def process(self, context: MCPContext) -> MCPContext: # Document processing logic pass

ドキュメントプロセッサ

システムには、さまざまなドキュメント タイプ専用のプロセッサが含まれています。

  • 請求書プロセッサ: ベンダー、顧客、明細項目、合計などを抽出します。

  • 契約プロセッサ: 当事者、重要な日付、条件などを抽出します。

  • 電子メール プロセッサ: 送信者、受信者、件名、本文などを抽出します。

機械学習モデル

さまざまなタスクに複数の ML モデルが使用されます。

  • 文書分類器: 文書タイプ分類のためのBERTベースのモデル

  • エンティティ抽出器: 重要な情報を抽出するための固有表現抽出モデル

  • サマライザー: 文書要約を生成するためのT5ベースのモデル

ユーザーインターフェース

MCP Document Processorには、ドキュメント処理システムを直感的に操作できるReactベースの最新ユーザーインターフェースが搭載されています。UIはMaterial-UIで構築されており、以下の機能を提供します。

UI機能

  • ダッシュボード: 処理されたドキュメントの概要、統計情報、ドキュメントの詳細へのクイックアクセス

  • ドキュメントのアップロード: 新しいドキュメントをアップロードするためのドラッグアンドドロップインターフェース

  • 文書処理:文書を処理するためのステップバイステップのワークフロー

  • ドキュメントビューア: 抽出された情報を含む処理済みドキュメントの詳細表示

  • 処理履歴: 監査可能性のためにすべての処理ステップをタイムラインで表示します

UIアーキテクチャ

フロントエンドは以下で構築されています:

  • React : ユーザーインターフェースコンポーネントの構築用

  • Material-UI : 一貫性のあるレスポンシブなデザイン

  • React Router : 異なるビュー間のナビゲーション用

  • Axios : バックエンドとのAPI通信用

  • Chart.js : ドキュメント統計のデータ視覚化

UI-バックエンド統合

フロントエンドは、次の主要なエンドポイントを使用して、RESTful API を介してバックエンドと通信します。

  • GET /api/documents : すべてのドキュメントを取得する

  • POST /api/documents/upload : 新しいドキュメントをアップロードする

  • POST /api/documents/{document_id}/process : ドキュメントを処理する

  • GET /api/documents/{document_id} : ドキュメントの詳細を取得する

  • DELETE /api/documents/{document_id} : ドキュメントを削除する

完全なシステムアーキテクチャ

MCP ドキュメント プロセッサは、フロントエンド、API レイヤー、処理コンポーネント、機械学習モデルを統合した階層型アーキテクチャに従います。

┌─────────────────────────────────────────────────────────────────────────┐ │ Frontend Layer │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │ │ │ Dashboard │ │ Upload │ │ Document Viewer │ │ │ └─────────────┘ └─────────────┘ └─────────────────────────┘ │ │ │ │ │ │ └──────────┼───────────────────┼─────────────────────────┼────────────────┘ │ │ │ │ │ │ ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ API Layer │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │ │ │ Document │ │ Document │ │ Document │ │ │ │ Upload API │ │ Process API │ │ Retrieval API │ │ │ └─────────────┘ └─────────────┘ └─────────────────────────┘ │ │ │ │ │ │ └──────────┼───────────────────┼─────────────────────────┼────────────────┘ │ │ │ │ │ │ ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ MCP Core Components │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │ │ │ MCPContext │◄────►│ Memory │◄────►│ Processor Router │ │ │ └─────────────┘ └─────────────┘ └─────────────────────────┘ │ │ │ │ │ └──────────┼────────────────────────────────────────────┼─────────────────┘ │ │ │ │ ▼ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ Document Processors │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │ │ │ Invoice │ │ Contract │ │ Email │ │ │ │ Processor │ │ Processor │ │ Processor │ │ │ └─────────────┘ └─────────────┘ └─────────────────────────┘ │ │ │ │ │ │ └──────────┼───────────────────┼─────────────────────────┼────────────────┘ │ │ │ │ │ │ ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ ML Models Layer │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │ │ │ Document │ │ Entity │ │ Summarizer │ │ │ │ Classifier │ │ Extractor │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────┘

完全なワークフロー

ドキュメント処理ワークフローには、システム コンポーネント全体にわたる複数のステップが含まれます。

  1. ドキュメントのアップロード:

    • ユーザーはUIを通じてドキュメントをアップロードします

    • フロントエンドはドキュメントをバックエンドAPIに送信します

    • バックエンドはドキュメントメタデータを持つMCPContextオブジェクトを作成します

    • コンテキストはメモリシステムに保存されます

  2. 文書分類:

    • ユーザーはUIを通じて処理を開始する

    • バックエンドはメモリからドキュメントのコンテキストを取得します

    • ドキュメント分類モデルはドキュメントの種類を決定します

    • コンテキストはドキュメントタイプ情報で更新されます

  3. 文書処理

    • プロセッサルータはドキュメントの種類に基づいて適切なプロセッサを選択します

    • 選択されたプロセッサ(請求書、契約書、または電子メール)がドキュメントを処理します

    • プロセッサはエンティティ抽出器を使用して重要な情報を識別する

    • 抽出されたデータは信頼スコアとともにコンテキストに追加されます

  4. 結果取得:

    • 更新されたコンテキストはメモリに保存されます

    • UIは処理された文書情報を取得して表示します

    • ユーザーは抽出されたデータ、信頼スコア、処理履歴を表示できます。

  5. 監査とレビュー

    • すべての処理手順はコンテキストの処理履歴に記録されます

    • UIは抽出されたデータの信頼スコアの視覚化を提供します

    • ユーザーは抽出された情報と一緒に文書のテキストを確認することができます

はじめる

前提条件

  • Python 3.8以上

  • Node.js 14+ と npm (フロントエンド用)

  • requirements.txt にリストされている依存関係

インストールとセットアップ

バックエンドのセットアップ

  1. リポジトリをクローンする

    git clone https://github.com/yourusername/mcp_document_processor.git cd mcp_document_processor
  2. 仮想環境を作成してアクティブ化する

    python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
  3. バックエンドの依存関係をインストールする

    pip install -r requirements.txt
  4. ドキュメント保存用のデータディレクトリを作成します(存在しない場合)

    mkdir -p data

フロントエンドのセットアップ

  1. フロントエンドディレクトリに移動する

    cd frontend
  2. フロントエンドの依存関係をインストールする

    npm install

アプリケーションの実行

バックエンドサーバーを起動する

  1. プロジェクトのルート ディレクトリから (仮想環境が有効になっている):

    python app.py

    これにより、 http://localhost:8000で FastAPI サーバーが起動します。

  2. APIドキュメントはhttp://localhost:8000/docsからアクセスできます。

フロントエンド開発サーバーを起動する

  1. 新しいターミナルウィンドウ/タブを開く

  2. フロントエンドディレクトリに移動します。

    cd /path/to/mcp_document_processor/frontend
  3. React 開発サーバーを起動します。

    npm start

    これにより、 http://localhost:3000でフロントエンドが起動します。

アプリケーションの使用

  1. ブラウザを開き、 http://localhost:3000にアクセスします。

  2. サイドバー ナビゲーションを使用して次の操作を実行します。

    • ダッシュボードを見る

    • 新しい文書をアップロードする

    • ドキュメントの詳細を処理して表示する

ワークフローの例

  1. ドキュメントをアップロード:

    • サイドバーの「ドキュメントをアップロード」をクリックします

    • ドキュメント(PDF、画像、またはテキストファイル)をドラッグアンドドロップします

    • 「ドキュメントをアップロード」ボタンをクリックします

  2. ドキュメントを処理する:

    • アップロードが成功したら、「ドキュメントを処理」をクリックします。

    • 処理が完了するまでお待ちください

  3. 結果を表示:

    • 抽出されたデータ、信頼スコア、処理履歴を表示する

    • ダッシュボードに移動して、処理済みのすべてのドキュメントを確認します。

APIの使用

API と直接やり取りすることもできます。

  • GET /api/documents : すべてのドキュメントを取得する

  • POST /api/documents/upload : 新しいドキュメントをアップロードする

  • POST /api/documents/{document_id}/process : ドキュメントを処理する

  • GET /api/documents/{document_id} : ドキュメントの詳細を取得する

  • DELETE /api/documents/{document_id} : ドキュメントを削除する

システムの拡張

新しいドキュメントプロセッサの追加

  1. BaseProcessorを継承する新しいプロセッサ クラスを作成する

  2. can_handleprocessメソッドを実装する

  3. api/routes.pyでルーターにプロセッサを追加します。

新しいモデルの追加

  1. 適切なプロトコルを実装する新しいモデルクラスを作成する

  2. config/config.yamlに設定を追加する

  3. モデルを関連プロセッサと統合する

ライセンス

MITライセンス

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/arifazim/MCP_Document_Classifer'

If you have feedback or need assistance with the MCP directory API, please join our Discord server