CarrotAI について
CarrotAI は MCP 統合を備えた AI エージェントアプリで、Server-Sent Events を通じてリアルタイムストリーミングチャットを提供します。複数の SSE MCP サーバーに同時接続でき、英語、中国語、日本語のインターフェースを備えています。
主な機能
- 01SSE と MCP アダプター駆動のリアルタイムストリーミングチャット
- 02複数の MCP サーバーへの並行接続
- 03英語、中国語、日本語への完全なローカライゼーション
- 04複雑なクエリ向けの深思考モード
- 05会話内のファイルアップロードとパース
活用シーン
- 01複数の専門サーバーからのインテリジェントレスポンス集約
- 02より豊かな会話コンテキストのためのファイルアップロード
- 03深い分析が必要な複雑な問題の処理
- 04多言語とクロスプラットフォームの AI 会話
MCP 対応
CarrotAI は複数の SSE MCP サーバーに接続するクライアントとして機能し、MCP アダプター経由でそれらのツールとリソースを呼び出して AI エージェントの機能を拡張します。
詳細
CarrotAI
マルチサーバーストリーミング & マルチ言語対応の AI エージェント
Flutter フロントエンド + FastAPI バックエンド
🚀 オンラインで今すぐ体験 | SaaS クライアントをダウンロード
🇨🇳 中文文档を読む
🥕 概要
CarrotAI は、Server-Sent Events(SSE)とストリーマブル HTTP 経由のリアルタイムストリーミングチャットを提供する最先端の AI エージェントアプリケーションです。Model Control Protocol(MCP)が統合されており、複数の SSE MCP サーバーへの同時接続をサポートし、英語、中国語、日本語のユーザーインターフェースを提供します。
🚀 機能
- AI エージェント: SSE と MCP アダプターによるリアルタイムチャット機能で、シームレスな会話体験を実現します。
- マルチサーバーサポート: 複数の SSE MCP サーバーに同時に接続してコールし、インテリジェントな応答を集約できます。
- マルチ言語対応: 英語、中文(中国語)、日本語に完全ローカライズされています。
- ディープシンキングモード: 複雑なクエリや複数のステップを含むクエリに対する高度な分析機能です。
- 認証: JWT トークンを使用したセキュアなログイン/登録フロー。
- レスポンシブ UI: モバイル、デスクトップ、Web プラットフォームに対応した適応型デザイン。
- テーマカスタマイズ: ライト/ダークモード、カスタムシードカラー、
dynamic_colorによる動的 Material 3 テーマ。 - ファイルアップロード: 会話内でファイルを添付および解析して、より豊かなコンテキストを提供できます。
🤖 サポートされるモデル API
- DeepSeek: 強力な推論機能を備えた高度な言語モデル
🛠️ 技術スタック
フロントエンド
- フレームワーク: Flutter
- 状態管理: Provider
- UI: Material Design 3
- ローカライズ: flutter gen-l10n
- テーミング: dynamic_color
バックエンド
- フレームワーク: FastAPI
- ストリーミング: Server-Sent Events(SSE)
- AI インテグレーション: DeepSeek LLM、MCP(Model Control Protocol)
- データベース: PostgreSQL + SQLAlchemy
- 認証: JSON Web Tokens
- マイグレーション: Alembic
- デプロイメント: Uvicorn & Gunicorn
📋 前提条件
- Flutter SDK ^3.7.2
- Python >=3.12
- PostgreSQL
⚡ クイックスタート
uv がインストール済みであることを確認してください。
# Clone repository
git clone https://github.com/Xingsandesu/CarrotAI.git && cd CarrotAI
# Deal with environment variables
mv backend/.env.example backend/.env && mv .env.example .env
# Edit environment variables
vim .env
vim backend/.env
# Temporarily start PostgreSQL
docker-compose -f docker-compose.yml -f docker-compose.override.yml up -d postgres
# Backend setup
uv run backend/scripts/startup.py --user --email <email> --username <name> --password <password>
# Stop PostgreSQL
docker-compose -f docker-compose.yml -f docker-compose.override.yml down
# Deal with Config
vim config/
# Run Backend
docker compose up -d
🔧 インストール
バックエンド セットアップ
- バックエンドディレクトリに移動します:
cd backend - 仮想環境を作成して有効化します:
uv sync - 環境ファイルの例をコピーします:
cp .env.example .env - データベースマイグレーションを実行します:
uv run scripts/init_db.py && uv run scripts/init_config.py - サーバーを実行します:
python main.py # Development mode python main.py prod # Production mode with Gunicorn
フロントエンド セットアップ
- プロジェクトルートに戻ります:
cd .. - Flutter の依存関係を取得します:
flutter pub get - ローカライズファイルを生成します:
flutter gen-l10n - アプリを起動します:
flutter run - Web 用にビルドします:
flutter build web --wasm
🌐 設定
- フロントエンド:
lib/core/config/app_config.dartを編集して、API エンドポイントとテーマのデフォルトを設定します。 - バックエンド:
.envとbackend/app/core/config.pyを設定して、データベースと MCP サーバーを構成します。
バックエンド設定ファイル
バックエンドは backend/config/ に配置された JSON ファイルを使用して、モデル、MCP サーバー、カスタムアダプターを定義します。以下はデフォルトのフォルダ構成です:
backend/config/
├── model_configs.json # LLM model definitions and metadata
├── mcp_servers.json # SSE MCP server endpoints and env settings
└── app/ # Custom adapter definitions
└── duckduckgo-search.json
model_configs.json
CarrotAI で利用可能な LLM モデルを定義します。各エントリには以下が含まれます:
id(文字列): 一意のモデル識別子。icon(文字列): 表示用のアイコン名。translations(オブジェクト): ローカライズされた名前と説明(zh、en、ja)。exclusiveRules(オブジェクト): 機能のトグルと除外ルール。
例:
[
{
"id": "deepseek",
"icon": "smart_toy_outlined",
"translations": {
"zh": { "name": "DeepSeek", "description": "专注于深度思考和复杂推理的满血模型" },
"en": { "name": "DeepSeek", "description": "Powerful Chinese large model focused on deep thinking and complex reasoning" },
"ja": { "name": "DeepSeek", "description": "深い思考と複雑な推論に特化した強力な中国語大規模モデル" }
},
"exclusiveRules": {
"deepThinking": { "enabled": true, "excludes": ["mcpServices"] },
"mcpServices": { "enabled": true, "excludes": ["deepThinking"] }
}
}
]
mcp_servers.json
SSE Model Control Protocol(MCP)エンドポイントを指定します。形式:
- キー: サービス名。
url(文字列): SSE エンドポイント URL。env(オブジェクト): アダプター用の環境変数。
例:
{
"serviceA": {
"url": "http://localhost:10000/sse",
"env": {
"API_KEY": "your_api_key"
}
}
}
カスタムアダプター (app/*.json)
カスタム MCP アダプターを backend/config/app/ に配置します。各ファイルは以下を定義します:
id(文字列):アダプター識別子。icon(文字列):絵文字またはアイコン名。mcpServer(オブジェクト):mcp_servers.json内のエントリと同じ構造。translations(オブジェクト):ローカライズされた UI メタデータ。
例 (duckduckgo-search.json):
{
"id": "duckduckgo-search",
"icon": "🔍",
"mcpServer": {
"url": "http://localhost:10000/duckduckgo-search",
"env": {}
},
"transportType": "sse",
"translations": {
"en": { "name": "DuckDuckGo Search", "type": "Search Tool", "description": "Use DuckDuckGo search engine for secure and private web searches" },
"zh": { "name": "DuckDuckGo搜索", "type": "搜索工具", "description": "使用DuckDuckGo搜索引擎进行安全、私密的网络搜索" },
"ja": { "name": "DuckDuckGo検索", "type": "検索ツール", "description": "DuckDuckGo検索エンジンを使用して安全でプライベートなウェブ検索を行います" }
}
}
使用方法
- デフォルト設定を初期化します:
uv run scripts/init_config.py backend/config/下の JSON ファイルを変更して、モデルとエンドポイントを追加または更新します。- バックエンドサーバーを再起動して変更を適用します。
🔧 環境変数
バックエンド (.env)
| キー | 説明 | デフォルト |
|---|---|---|
| DATABASE_URL | PostgreSQL 接続 URL | 必須 |
| BACKEND_CORS_ORIGINS | 許可された CORS オリジン(カンマ区切り) | [] |
| MCP_SERVERS | SSE MCP サーバーエンドポイントの JSON リスト | 必須 |
| SECRET_KEY | JWT シークレットキー | 必須 |
フロントエンド (lib/core/config/app_config.dart)
static String get baseUrl => "http://127.0.0.1:8000";
💡 使用方法
- クイックスタートに示されているようにバックエンドとフロントエンドを起動します。
- ブラウザまたはモバイルエミュレーターでアプリを開きます。
- 登録またはログインして JWT トークンを取得します。
- ディープシンキングモードまたはデフォルトチャットモードを使用して AI エージェントと対話します。
- 設定でアダプターを切り替えるか、新しいエンドポイントを追加します。
🔗 API リファレンス
インタラクティブな Swagger UI にアクセスします:
http://127.0.0.1:8000/docs
🛣️ ロードマップ
- SSE マルチサーバーサポート
- 多言語対応 (EN, 中文, 日本語)
- Docker Compose セットアップ
- ストリーミング可能な HTTP サポート
- ローカル Stdio マルチサーバーサポート
- ローカル OCR サポート
- アップロードインターフェースのより多くのフォーマットのサポート
- フロントエンドカスタムプロンプト
- より多くのモデルサポート
- より多くの言語サポート
🛡️ セキュリティ
- 認証:すべてのバックエンドエンドポイントは JWT で保護されています。トークンは暗号化されたストレージに安全に保存されます。
- データ保護:本番環境では HTTPS を使用してください。
.envのBACKEND_CORS_ORIGINSで許可された CORS オリジンを設定します。 - シークレット管理:
.envでSECRET_KEYを定義してください。シークレットをソースコントロールにコミットしないようにしてください。
🔍 監視とログ
- サーバーログ:
gunicorn.conf.pyで設定されています。アクセスログとエラーログはlogs/にあります。 - アプリケーションログ:構造化ログに Loguru を使用しています。フロントエンドはリリースモードで
debugPrintを無効にします。
🚀 パフォーマンスと最適化
- キャッシング:フロントエンドは静的アセットをキャッシュします。バックエンドは PostgreSQL に非同期接続プーリングを使用します。
- バンドルサイズ:Web アーティファクトは
--wasmでビルドされ、最適化されて配信されます。
🗂️ 変更履歴
すべての注目すべき変更は CHANGELOG.md に記載されています。
📱 スクリーンショット
🤝 コントリビューション
コントリビューションを歓迎します。提案がある場合はプルリクエストを開いてください。
📄 ライセンス
このプロジェクトは CarrotAI オープンソースライセンスの下でライセンスされています。詳細は LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。