MCP Sample Chat

MCP Sample Chat

A local LLM chat application implementing the Model Control Protocol (MCP) architecture with Ollama, FastAPI, and Gradio that demonstrates clear separation of model, control, and presentation layers.

Category
访问服务器

README

ローカルMCPチャット (Ollama + FastAPI + Gradio)

このプロジェクトは、MCP(Model Control Protocol)のテスト実装として、Ollamaを使用したローカルLLMチャットアプリケーションを構築しています。MCPの各レイヤーの役割と責任を明確に分離し、それぞれのコンポーネントがどのように連携するかを検証するための環境を提供します。

MCPの構成要素と役割

MCPは、LLMアプリケーションを構築する際の標準的なアーキテクチャパターンを提供します。このプロジェクトでは、以下のような構成でMCPを実装しています:

1. モデルレイヤー (Ollama)

  • 役割: 実際のLLMモデルの実行と管理
  • 責任:
    • モデルのロードと管理
    • 推論の実行
    • モデル固有のパラメータ管理
    • モデルのバージョン管理
  • インターフェース: Ollama API (HTTP/JSON)
  • 特徴:
    • ローカルでのモデル実行
    • モデルごとの独立した実行環境
    • シンプルなAPIインターフェース

2. コントロールレイヤー (FastAPI)

  • 役割: モデルとアプリケーションの間の制御層
  • 責任:
    • リクエストの検証と前処理
    • モデル選択の制御
    • プロンプトの正規化
    • レスポンスの後処理
    • エラーハンドリング
    • ロギングとモニタリング
  • インターフェース: REST API
  • 特徴:
    • モデルに依存しない抽象化
    • 統一されたインターフェース
    • スケーラブルな設計

3. プレゼンテーションレイヤー (Gradio)

  • 役割: ユーザーインターフェースの提供
  • 責任:
    • ユーザー入力の受付
    • インタラクションの管理
    • レスポンスの表示
    • エラー表示
  • インターフェース: Web UI
  • 特徴:
    • 直感的なユーザーインターフェース
    • リアルタイムなインタラクション
    • デモンストレーションに適した設計

MCPの通信フロー

[ユーザー] → [Gradio UI]
    ↓
[リクエスト] → [FastAPI (コントロールレイヤー)]
    ↓
[モデル制御] → [Ollama (モデルレイヤー)]
    ↓
[レスポンス] → [FastAPI (コントロールレイヤー)]
    ↓
[整形済みレスポンス] → [Gradio UI]
    ↓
[ユーザー]

各レイヤー間の通信

  1. プレゼンテーション → コントロール

    • HTTPリクエスト(JSON形式)
    • プロンプトとモデル選択情報
    • エラーハンドリング情報
  2. コントロール → モデル

    • Ollama APIリクエスト
    • 正規化されたプロンプト
    • モデルパラメータ
    • エラーハンドリング
  3. モデル → コントロール

    • モデルレスポンス
    • 生成メタデータ
    • エラー情報
  4. コントロール → プレゼンテーション

    • 整形済みレスポンス
    • エラーメッセージ
    • ステータス情報

プロジェクトの目的

  • MCPの基本的な実装パターンの検証
  • ローカルLLM(Ollama)との連携方法の確認
  • チャットインターフェースの実装パターンの検証
  • バックエンド(FastAPI)とフロントエンド(Gradio)の連携方法の確認

システムアーキテクチャ

[ユーザー] <-> [Gradio UI (app.py)] <-> [FastAPI (main.py)] <-> [Ollama]

各コンポーネントの役割

  1. Gradio UI (app.py)

    • ユーザーインターフェースの提供
    • プロンプト入力とモデル選択の受付
    • FastAPIバックエンドとの通信
    • レスポンスの表示
  2. FastAPI (main.py)

    • MCPの実装の中核
    • リクエストの受付と処理
    • Ollama APIとの通信
    • エラーハンドリングとロギング
    • レスポンスの整形と返却
  3. Ollama

    • ローカルLLMの実行環境
    • モデルの管理と推論実行
    • モデルレスポンスの生成

機能

  • ローカルで動作するLLMチャットインターフェース
  • 複数のモデル(mistral)に対応
  • シンプルで使いやすいGradio UI
  • FastAPIバックエンドによる効率的なAPI処理
  • MCPの基本的な機能実装
    • プロンプトの受け付け
    • モデル選択
    • レスポンス生成
    • エラーハンドリング

必要条件

  • Python 3.8以上
  • Ollama(ローカルにインストール済み)
  • 必要なPythonパッケージ(requirements.txtに記載)

セットアップ

  1. リポジトリをクローン
git clone [repository-url]
cd mcp-sample
  1. 仮想環境の作成と有効化
python -m venv .venv
source .venv/bin/activate  # Linuxの場合
# または
.venv\Scripts\activate  # Windowsの場合
  1. 依存パッケージのインストール
pip install -r requirements.txt
  1. Ollamaの起動
ollama serve

使用方法

  1. FastAPIバックエンドの起動
uvicorn main:app --reload
  1. Gradioフロントエンドの起動
python app.py
  1. ブラウザで http://localhost:7860 にアクセス

アーキテクチャ

  • main.py: FastAPIバックエンドサーバー
    • Ollama APIとの通信を担当
    • モデルの選択とプロンプトの処理
  • app.py: Gradioフロントエンド
    • ユーザーインターフェースの提供
    • バックエンドAPIとの通信

注意事項

  • Ollamaがローカルで起動している必要があります(デフォルトポート: 11434)
  • 使用するモデルは事前にOllamaでダウンロードされている必要があります
  • 初回のモデルダウンロードには時間がかかる場合があります

ライセンス

[ライセンス情報を記載]

貢献

[貢献方法を記載]

開発とテスト

開発環境のセットアップ

  1. 上記のセットアップ手順に従って環境を構築
  2. 開発用の設定
    • FastAPIのデバッグモード: uvicorn main:app --reload --log-level debug
    • Gradioのデバッグモード: 環境変数 GRADIO_DEBUG=1 を設定

テスト項目

  1. 基本機能テスト

    • プロンプト入力と応答生成
    • モデル選択の動作
    • エラー時の挙動
  2. MCP実装テスト

    • APIエンドポイントの動作確認
    • リクエスト/レスポンスの形式
    • エラーハンドリング
  3. 統合テスト

    • フロントエンドとバックエンドの連携
    • Ollamaとの通信
    • エラー時の全体の挙動

デバッグ

  • FastAPIのログ: uvicorn のログレベルを debug に設定
  • Gradioのデバッグ: 環境変数 GRADIO_DEBUG=1 を設定
  • Ollamaのログ: ollama serve の出力を確認

今後の展開

  • より多くのモデルへの対応
  • ストリーミングレスポンスの実装
  • チャット履歴の管理機能
  • より高度なMCP機能の実装
  • エラーハンドリングの強化
  • パフォーマンス最適化

注意事項

  • Ollamaがローカルで起動している必要があります(デフォルトポート: 11434)
  • 使用するモデルは事前にOllamaでダウンロードされている必要があります
  • 初回のモデルダウンロードには時間がかかる場合があります
  • このプロジェクトはMCPのテスト実装であり、本番環境での使用は想定していません

ライセンス

[ライセンス情報を記載]

貢献

[貢献方法を記載]

MCPの実装詳細

モデルレイヤー(Ollama)の実装

# main.py での実装例
async def generate(request: Request):
    # モデルレイヤーとの通信
    payload = {
        "model": model,
        "prompt": prompt,
        "stream": False
    }
    # Ollama APIとの通信
    res = await client.post(OLLAMA_API_URL, json=payload)

コントロールレイヤー(FastAPI)の実装

# main.py での実装例
@app.post("/generate")
async def generate(request: Request):
    # リクエストの検証と前処理
    body = await request.json()
    prompt = body.get("prompt", "")
    model = body.get("model", "mistral")
    
    # モデルレイヤーとの通信
    # レスポンスの後処理
    # エラーハンドリング

プレゼンテーションレイヤー(Gradio)の実装

# app.py での実装例
def chat(prompt, model="mistral"):
    # コントロールレイヤーとの通信
    res = requests.post(API_URL, json={"prompt": prompt, "model": model})
    # レスポンスの表示
    return res.json().get("response", "応答がありません")

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选