Skip to main content
Glama
pbpeter

Enterprise Support MCP Server

by pbpeter

Enterprise Support MCP Server

企業の機能をModel Context Protocol (MCP) を通じて大規模言語モデル(LLM)に公開する方法を示す、軽量なエンタープライズAI統合プロトタイプです。

このプロジェクトは、PythonベースのMCPサーバーを介して顧客情報と注文情報を提供します。Mistralを搭載したAIアシスタントが、利用可能なMCPツールを動的に発見し、自然言語のサポートリクエストに基づいてどのツールを呼び出すかを決定します。

より複雑なリクエストの場合、アシスタントは複数のツール呼び出しを反復的に実行し、最終的な応答を生成するのに十分な情報が得られるまで処理を続けます。

このプロジェクトで使用されるすべての顧客および注文レコードは、合成デモデータです。


主な機能

  • Model Context Protocol (MCP) サーバーとクライアント

  • 動的なMCPツール発見

  • Mistral AI を使用したLLM主導のツール選択

  • マルチステップのツール呼び出しワークフロー

  • エンタープライズデータとの自然言語による対話

  • 顧客および注文の検索

  • Pydantic データモデル

  • SQLite 永続化

  • 構造化されたエラーハンドリング

  • MCP、永続化、AI統合レイヤーの分離


Related MCP server: E-commerce MCP Server

アーキテクチャ

flowchart TD
    U[User] --> L[Mistral LLM]
    L --> C[MCP Client]
    C --> S[Enterprise Support MCP Server]
    S --> D[(SQLite Customer / Order Database)]
    D --> S
    S --> C
    C --> L
    L --> U

LLMはデータベースに直接アクセスしません。

代わりに、エンタープライズ機能は標準化されたMCPツールを通じて公開されます。MCPクライアントはこれらのツールを動的に発見し、そのスキーマをLLMが利用できるようにします。

LLMは、与えられたユーザーリクエストに対してどのツールが必要かを判断します。


サンプルワークフロー

ユーザーが次のように入力します:

Show me customer 1001.

アプリケーションは以下のワークフローを実行します:

User request
    ↓
Mistral LLM
    ↓
Selects get_customer
    ↓
MCP Client
    ↓
Enterprise Support MCP Server
    ↓
SQLite
    ↓
Customer data
    ↓
MCP Client
    ↓
Mistral LLM
    ↓
Natural-language response

結果の例:

Here is the information for customer 1001:

- Name: Anna Schmidt
- Email: anna@example.com
- Status: ACTIVE

アプリケーションコードは、get_customer の選択をハードコードしていません。
LLMがユーザーの自然言語リクエストに基づいて適切なMCPツールを選択します。


利用可能なMCPツール

get_customer

顧客IDで顧客情報を取得します。

入力例:

{
  "customer_id": 1001
}

get_customer_orders

顧客に属するすべての注文を取得します。

入力例:

{
  "customer_id": 1001
}

get_order_status

注文の現在のステータスと配送情報を取得します。

入力例:

{
  "order_id": 5002
}

技術スタック

  • Python

  • Model Context Protocol (MCP) Python SDK

  • Mistral AI

  • Pydantic

  • SQLite

  • asyncio

  • python-dotenv

  • uv


はじめに

前提条件

このプロジェクトには以下が必要です:

  • Python 3.11+

  • pip

  • uv

  • Mistral API キー

Pythonのインストールを確認:

python --version

uv を確認:

uv --version

1. リポジトリのクローン

git clone https://github.com/YOUR-USERNAME/enterprise-support-mcp-server.git
cd enterprise-support-mcp-server

YOUR-USERNAME を自分のGitHubユーザー名に置き換えてください。


2. 仮想環境の作成

python -m venv .venv

Windows PowerShell

.venv\Scripts\Activate.ps1

Linux / macOS

source .venv/bin/activate

3. 依存関係のインストール

pip install -r requirements.txt

主な依存関係は次のとおりです:

mcp[cli]
mistralai
pydantic
python-dotenv

4. Mistral API キーの設定

プロジェクトのルートに .env ファイルを作成します。

テンプレートとして .env.example を使用できます:

MISTRAL_API_KEY=your_mistral_api_key

実際の .env ファイルやAPIキーをGitにコミットしないでください。


5. デモデータベースの初期化

次のコマンドを実行します:

python init_db.py

これにより、MCPツールで使用される合成の顧客および注文レコードを含むローカルのSQLiteデータベースが作成されます。


テスト

このプロジェクトは複数のレベルでテストできます。

テスト1 – データベースアクセス

MCPが関与する前に、データベース関数を独立してテストできます。

デモデータベースが初期化されていることを確認します:

python init_db.py

データベースレイヤーは以下の操作を提供します:

get_customer
get_customer_orders
get_order_status

これにより、MCPやLLMとは独立して永続化レイヤーを検証します。


テスト2 – MCPサーバーの起動

次のコマンドを実行します:

python server.py

stdioベースのMCPサーバーの場合、HTTPポートやブラウザは開かれません。

プロセスは、標準入出力を通じてMCPクライアントからの通信を待機します。

以下のコマンドでサーバーを停止します:

Ctrl+C

テスト3 – LLMなしのMCPクライアント

次のコマンドを実行します:

python client.py

クライアントはMCPサーバーに接続し、利用可能なツールを発見します。

期待されるツールの発見:

Available tools:
- get_customer
- get_customer_orders
- get_order_status

その後、クライアントはMCPツールを直接呼び出すことができます。

このテストで検証されること:

MCP Client
    ↓
MCP protocol
    ↓
MCP Server
    ↓
SQLite
    ↓
MCP result

このテストには大規模言語モデルは必要ありません。


テスト4 – LLM主導のMCPツール選択

次のコマンドを実行します:

python llm_client.py

アプリケーションはまず、サーバーから発見されたMCPツールを表示するはずです:

Available MCP tools:
- get_customer
- get_customer_orders
- get_order_status

その後、自然言語のリクエストを入力できます。

顧客検索

Show me customer 1001.

期待される動作:

Mistral
    ↓
get_customer
    ↓
customer_id = 1001

最終的な応答には、顧客 1001 の情報が含まれている必要があります。


顧客の注文

次のように試してください:

Show me all orders for customer 1001.

期待されるツール:

get_customer_orders

注文ステータス

次のように試してください:

What is the status of order 5002?

期待されるツール:

get_order_status

エンタープライズデータなしのリクエスト

次のように試してください:

What can you help me with?

LLMは、顧客や注文データにアクセスせずにこのリクエストに回答できるはずです。

これは、ツールの実行がすべてのリクエストに対してではなく、動的に選択されることを示しています。


テスト5 – マルチステップのツール呼び出し

LLMクライアントは反復的なツール実行をサポートしています。

次のような複雑なリクエストを試してください:

Customer 1001 says that one of her orders has not arrived.
Can you investigate?

複雑なリクエストの場合、アシスタントは最終的な応答を生成する前に複数のMCPツールを使用できます。

概念的に:

User
    ↓
Mistral
    ↓
MCP Tool
    ↓
Tool Result
    ↓
Mistral
    ↓
Another tool required?
    ├── Yes → MCP Tool → Result → Mistral
    └── No  → Final Response

ツール呼び出しループには、偶発的な無限実行を防ぐための最大反復回数が設定されています。


エラーハンドリングのテスト

MCPサーバーは、不明なビジネスエンティティも処理します。

例えば:

Show me customer 9999.

対応するMCPツールは、顧客情報を捏造する代わりにエラー結果を返します。

これは特にAIベースのエンタープライズ統合において重要です。事実に基づく顧客および注文情報は、LLMではなく、接続されたエンタープライズシステムから取得される必要があります。


プロジェクト構造

enterprise-support-mcp-server/
│
├── server.py
│   └── MCP server and tool definitions
│
├── client.py
│   └── MCP client for direct tool testing
│
├── llm_client.py
│   └── Mistral integration and agentic tool-calling workflow
│
├── database.py
│   └── Database access layer
│
├── models.py
│   └── Pydantic domain models
│
├── init_db.py
│   └── Creates synthetic demo data
│
├── requirements.txt
├── .env.example
├── .gitignore
└── README.md

なぜMCPなのか?

LLMはアプリケーション固有の関数を直接呼び出すこともできます。

MCPは、AIアプリケーションと外部機能の間に標準化されたインターフェースを導入します。

このプロジェクトでは:

Mistral
   ↓
Tool Calling
   ↓
MCP Client
   ↓
Standardized MCP interface
   ↓
Enterprise Support MCP Server
   ↓
Enterprise capabilities

LLMはどの機能が必要かを判断する責任があります。

MCPは、それらの機能を標準化されたプロトコルを通じて公開する責任があります。

この分離により、エンタープライズバックエンドを特定のLLMプロバイダー向けに設計する必要がなくなります。


プロジェクトの目的

このプロジェクトは意図的に小さく、1つのアーキテクチャ上の問いに焦点を当てています:

既存のエンタープライズ機能を、標準化された統合レイヤーを通じてAIアシスタントが利用できるようにするにはどうすればよいか?

以下の組み合わせを示しています:

  • エンタープライズシステム統合

  • Model Context Protocol

  • LLMツール呼び出し

  • エージェント的ワークフロー

  • 構造化されたビジネスデータ

  • 関心事の分離

このプロジェクトは、AIアシスタントを既存のエンタープライズアプリケーションと統合するための実用的なプロトタイプとして機能します。


セキュリティに関する注意

このリポジトリには合成デモデータのみが含まれています。

APIキー、認証情報、顧客データ、その他の機密情報をソースコードやコミットされた .env ファイルを通じて公開しないでください。

Related MCP Connectors

Related MCP Servers