MyAIServ: AI-Powered FastAPI Server with MCP 🚀 について
MyAIServは、LLMとアプリケーションをつなぐFastAPIベースのMCPサーバーです。MCP機能に加え、GraphQL、WebSocket、検索、キャッシュ、監視を備えています。
主な機能
- 01MCPのリソース、ツール、プロンプト、サンプリング
- 02ファイル、天気、テキスト、画像のツール
- 03GraphQLとWebSocket API
- 04Elasticsearchによるセマンティック検索
- 05RedisキャッシュとPrometheusメトリクス
活用シーン
- 01LLMアプリケーションへのファイル・テキスト操作の提供
- 02インデックス済みコンテンツのセマンティック検索
- 03ツールのリクエスト数と処理時間の監視
MCP 対応
MCPを実装し、MCPクライアントにリソース、ツール、プロンプト、サンプリング機能を提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Server - Model Context Protocol API
MCP Server は、FastAPI をベースにした Model Context Protocol(MCP)の実装であり、LLM とアプリケーション間のやり取りに標準化されたインターフェースを提供します。
特長
- 🚀 FastAPI と非同期処理をベースにした 高性能 API
- 🔄 リソース、ツール、プロンプト、サンプリングに対応した MCP の完全サポート
- 📊 Prometheus と Grafana による モニタリングとメトリクス
- 🧩 新しいツールを簡単に追加できるインターフェースによる 拡張性
- 📝 柔軟なデータ操作を可能にする GraphQL API
- 💬 リアルタイム通信のための WebSocket サポート
- 🔍 Elasticsearch との連携による セマンティック検索
- 🗃️ パフォーマンスを向上させる Redis による キャッシュ
- 📦 パッケージを確実に管理する Poetry による 依存関係管理
はじめに
インストール
-
リポジトリをクローンします:
git clone https://github.com/yourusername/myaiserv.git cd myaiserv -
Poetry をインストールします(まだインストールされていない場合):
curl -sSL https://install.python-poetry.org | python3 - -
Poetry で依存関係をインストールします:
poetry install
サーバーの起動
poetry run uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
または、just ユーティリティを使います:
just run
起動後、API は http://localhost:8000 で利用できます。
API ドキュメント
- Swagger UI:http://localhost:8000/docs
- ReDoc:http://localhost:8000/redoc
- GraphQL Playground:http://localhost:8000/graphql
プロジェクト構成
myaiserv/
├── app/
│ ├── core/ # Базовые компоненты MCP
│ │ ├── base_mcp.py # Абстрактные классы MCP
│ │ └── base_sampling.py # Базовые классы для сэмплирования
│ ├── models/ # Pydantic модели
│ │ ├── mcp.py # Модели данных MCP
│ │ └── graphql.py # GraphQL схема
│ ├── services/ # Бизнес-логика
│ │ └── mcp_service.py # Сервис MCP
│ ├── storage/ # Хранилище данных
│ ├── tools/ # Инструменты MCP
│ │ ├── example_tool.py # Примеры инструментов
│ │ └── text_processor.py # Инструмент обработки текста
│ ├── utils/ # Утилиты
│ └── main.py # Точка входа FastAPI
├── app/tests/ # Тесты
├── docs/ # Документация
│ └── MCP_API.md # Описание API
├── pyproject.toml # Конфигурация Poetry и инструментов
└── .justfile # Задачи для утилиты just
利用可能なツール
File System Tool
ファイルの読み取り、書き込み、削除、一覧表示に対応したファイルシステム操作ツールです。
curl -X POST "http://localhost:8000/tools/file_operations" \
-H "Content-Type: application/json" \
-d '{"operation": "list", "path": "."}'
Weather Tool
座標に基づいて天気データを取得するツールです。
curl -X POST "http://localhost:8000/tools/weather" \
-H "Content-Type: application/json" \
-d '{"latitude": 37.7749, "longitude": -122.4194}'
Text Analysis Tool
感情分析や要約など、テキストを分析するツールです。
curl -X POST "http://localhost:8000/tools/text_analysis" \
-H "Content-Type: application/json" \
-d '{"text": "Example text for analysis", "analysis_type": "sentiment"}'
Text Processor Tool
書式設定、統計情報の計算、エンティティの抽出など、テキストを処理するツールです。
curl -X POST "http://localhost:8000/tools/text_processor" \
-H "Content-Type: application/json" \
-d '{"operation": "statistics", "text": "Example text", "stat_options": ["chars", "words"]}'
Image Processing Tool
サイズ変更、トリミング、フィルター適用に対応した画像処理ツールです。
curl -X POST "http://localhost:8000/tools/image_processing" \
-H "Content-Type: application/json" \
-d '{"operation": "resize", "image_data": "base64...", "params": {"width": 800, "height": 600}}'
WebSocket API
WebSocket API に接続するには:
const socket = new WebSocket("ws://localhost:8000/ws");
socket.onopen = () => {
socket.send(JSON.stringify({
type: "initialize",
id: "my-request-id"
}));
};
socket.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log("Received:", data);
};
GraphQL API
GraphQL を使ったクエリの例:
# Получение списка всех инструментов
query {
getTools {
name
description
}
}
# Выполнение инструмента
mutation {
executeTool(input: {
name: "text_processor",
parameters: {
operation: "statistics",
text: "Example text for analysis"
}
}) {
content {
type
text
}
is_error
}
}
テストの実行
テストを実行するには、Poetry を使います:
poetry run pytest
または、just ユーティリティを使います:
just test
Docker
Docker Compose によるビルドと起動
docker compose up -d
個別のサービスを起動するには:
docker compose up -d web redis elasticsearch
LLM との連携
MCP Server は、さまざまなプロバイダーの LLM と連携するための標準化されたインターフェースを提供します:
import httpx
async def query_mcp_with_llm(prompt: str):
async with httpx.AsyncClient() as client:
# Запрос к MCP для получения контекста и инструментов
tools_response = await client.get("http://localhost:8000/tools")
tools = tools_response.json()["tools"]
# Отправка запроса к LLM с включением MCP контекста
llm_response = await client.post(
"https://api.example-llm.com/v1/chat",
json={
"messages": [
{"role": "system", "content": "You have access to the following tools:"},
{"role": "user", "content": prompt}
],
"tools": tools,
"tool_choice": "auto"
}
)
return llm_response.json()
メトリクスとモニタリング
MCP Server は /metrics エンドポイントで Prometheus 形式のメトリクスを提供します。メトリクスには次の項目が含まれます:
- 各ツールへのリクエスト数
- リクエストの実行時間
- エラーと例外
開発
コードのフォーマットとリンターによるチェックを行うには:
just fmt
just lint
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。