Queryweaver について
QueryWeaver は、グラフベースのスキーマ理解を用いて平易な英語の質問を SQL に変換するオープンソースの Text2SQL ツールです。自然言語でデータベースに問い合わせたいユーザーを対象とし、REST API と MCP インターフェースを提供します。
主な機能
- 01自然言語から SQL への変換
- 02グラフベースのスキーマ理解
- 03Swagger ドキュメント付きの REST API
- 04他のサービスから呼び出せる組み込み MCP エンドポイント
- 05複数のAIプロバイダーの設定に対応
- 06環境変数による MCP エンドポイントの無効化
活用シーン
- 01平易な英語でデータベースに質問し、SQL の結果を得る
- 02MCP クライアントからデータベースのクエリツールを呼び出す
- 03REST API で Text2SQL 機能をスクリプトに組み込む
MCP 対応
本プロジェクトは MCP サーバーとして動作し、list_databases、connect_database、database_schema、query_database などのツールを公開できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
4掲載時のツール一覧 · 3 週間前に更新
このツールにパラメーターはありません。
詳細
QueryWeaver(Text2SQL)
REST API · MCP · グラフを活用
QueryWeaver は、グラフを活用したスキーマ理解を用いて、平易な英語の質問を SQL に変換するオープンソースの Text2SQLツールです。データベースに自然言語で質問すると、SQL と結果を返します。
はじめに
Docker
💡 評価目的での利用を推奨します(ローカルの Python や Node は不要です)
docker run -p 5000:5000 -it falkordb/queryweaver
.env ファイルを使用する(推奨)
.env.example をコピーしてローカルに .env を作成し、Docker に渡します。必要な設定をすべて指定する最も簡単な方法です。
cp .env.example .env
# edit .env to set your values, then:
docker run -p 5000:5000 --env-file .env falkordb/queryweaver
別の方法:環境変数を個別に渡す
コマンドラインで変数を渡す場合は、-e フラグを使用します(変数が多い場合は不便です)。
docker run -p 5000:5000 -it \
-e APP_ENV=development \
-e FASTAPI_SECRET_KEY=your_super_secret_key_here \
-e GOOGLE_CLIENT_ID=your_google_client_id \
-e GOOGLE_CLIENT_SECRET=your_google_client_secret \
-e GITHUB_CLIENT_ID=your_github_client_id \
-e GITHUB_CLIENT_SECRET=your_github_client_secret \
-e AZURE_API_KEY=your_azure_api_key \
falkordb/queryweaver
APP_ENV=developmentを指定すると、このコマンドが提供するプレーン HTTP のhttp://localhost:5000でログインできるようになります。QueryWeaver を HTTPS の背後に配置する場合は、この指定を削除するか、別の値に設定してください。セッション Cookie にSecureが付与されます。詳しくはアプリケーション環境をご覧ください。
注:QueryWeaver は複数の AI プロバイダーをサポートしています。
OPENAI_API_KEY、GEMINI_API_KEY、ANTHROPIC_API_KEY、またはAZURE_API_KEYを使用できます。詳細はAI/LLM の設定をご覧ください。
設定オプションの一覧は
.env.exampleをご確認ください。
メモリ TTL(任意)
QueryWeaver は、ユーザーごとの会話メモリを FalkorDB に保存します。デフォルトでは、これらのグラフは無期限に保持されます。MEMORY_TTL_SECONDS を設定すると、Redis の TTL(秒単位)が適用され、使用されていないメモリグラフが自動的に削除されます。
# Expire memory graphs after 1 week of inactivity
MEMORY_TTL_SECONDS=604800
ユーザーが操作するたびに TTL が更新されるため、アクティブなユーザーのメモリは保持されます。
MCP サーバー:ホストまたは接続(任意)
QueryWeaver には、Model Context Protocol(MCP)のオプションサポートが含まれています。QueryWeaver に MCP 対応の HTTP インターフェースを公開させ(ほかのサービスから MCP サーバーとして QueryWeaver を呼び出せるようにする)、またはモデル/コンテキストサービス用の外部 MCP サーバーを呼び出すように QueryWeaver を設定できます。
QueryWeaver が提供する機能
-
アプリは Text2SQL のワークフローに特化した MCP オペレーションを登録します:
list_databasesconnect_databasedatabase_schemaquery_database
-
組み込み MCP エンドポイントを無効にするには、
.envまたは環境変数にDISABLE_MCP=trueを設定します(デフォルト:MCP は有効)。 -
設定
-
DISABLE_MCP— QueryWeaver の組み込み MCP HTTP インターフェースを無効にします。無効にするにはtrueに設定します。デフォルト:false(MCP は有効)。
例
Docker で実行するときに組み込み MCP を無効にする:
docker run -p 5000:5000 -it --env DISABLE_MCP=true falkordb/queryweaver
組み込み MCP エンドポイントの呼び出し(例)
- MCP インターフェースは HTTP エンドポイントとして公開されます。
サーバーの設定
以下は、/mcp で MCP HTTP インターフェースを公開しているローカルの QueryWeaver インスタンスを指定する、最小限の mcp.json クライアント設定例です。
{
"servers": {
"queryweaver": {
"type": "http",
"url": "http://127.0.0.1:5000/mcp",
"headers": {
"Authorization": "Bearer your_token_here"
}
}
},
"inputs": []
}
REST API
API ドキュメント
Swagger UI:https://app.queryweaver.ai/docs
OpenAPI JSON:https://app.queryweaver.ai/openapi.json
概要
QueryWeaver は、グラフ(データベーススキーマ)の管理と Text2SQL クエリの実行に使う小規模な REST API を提供します。ユーザーごとのデータを変更または参照するすべてのエンドポイントでは、認証が必要です。ブラウザーでは、OAuth またはメールアドレスとパスワードによって確立される署名付きセッション Cookie を使用します。CLI やスクリプトでは、API トークンを使用できます(作成するには tokens ルートまたはウェブ UI を参照してください)。
主なエンドポイント
- GET /graphs — 認証済みユーザーが利用できるグラフの一覧を取得します
- GET /graphs/{graph_id}/data — グラフのノード/リンク(テーブル、列、外部キー)を返します
- POST /graphs — グラフをアップロードまたは作成します(JSON ペイロードまたはファイルのアップロード)
- POST /graphs/{graph_id} — 指定したグラフに対して Text2SQL チャットクエリを実行します(ストリーミング応答)
認証
- Authorization ヘッダーを追加します:
Authorization: Bearer <API_TOKEN>
3 種類の認証情報はそれぞれ独立しています
QueryWeaver では、3 種類の「ログイン」を互いに独立して扱います。そのため、いずれかの失敗が別のものの失敗に見えることはありません。
| 認証情報 | 証明する内容 | 保存場所 | FalkorDB に依存しますか? |
|---|---|---|---|
| ブラウザーログイン | アプリを使用しているユーザー | OAuth またはパスワードで一度確立される署名付きセッション Cookie | いいえ。プロセスの実行開始後は依存しません |
| API トークン | スクリプトがユーザーとして操作できること | Organizations グラフ内の Token ノード。Authorization: Bearer … として送信 | はい |
| データソース接続 | あなたの データベースへのアクセス | リクエストごとに指定され、保存されません | いいえ(あなた自身のデータベースです) |
ブラウザーログインは署名付き Cookie なので、ログイン状態を維持するためにデータベースへの再接続は不要です。また、すでに実行中のプロセスでは、FalkorDB が停止してもログイン状態が維持されます。セッションはそのまま残り、実際にグラフを必要とする操作だけが失敗します。
API トークンを明示的に指定したリクエストは、常にデータベースに照合されます。データベースに接続できない場合は 401 ではなく 503 が返されるため、クライアントは再認証せずにリトライできます。
対象範囲に注意してください。これはログイン状態の維持についてであり、起動についてではありません。QueryWeaver は起動時に引き続き FalkorDB に接続するため、接続できない状態では起動しません。そのため、停止中の再起動は対象外です。
ブラウザーログインの有効期間はデフォルトで 24 時間です。変更するには BROWSER_SESSION_TTL_HOURS を設定してください。ログアウトするとセッション Cookie が削除されます。ブラウザーには API トークンが発行されないため、失効させるトークンもありません。トークンは tokens API から明示的に作成し、同 API から失効させます。(以前のリリースで作成された api_token Cookie が残っている場合も、ログアウト時に削除され、トークンが失効します。)
メールアドレスでの登録は、アカウント作成前に確認されます
メールアドレスとパスワードで登録しても、アカウントは作成されません。送信された情報はいったん保留され、6 桁の確認コードがそのアドレスにメールで送信されます。登録フォームにそのコードが入力されたときに初めて、アカウントとセッションが作成されます。つまり、登録者が管理していないアドレスがアカウントになることはなく、システムの他の部分が扱う中途半端なユーザーも生まれません。
メールでリンクではなくコードを送るのは、フォームを送信したセッションにコードを戻す必要があるためです。リンクは受け取った人なら誰でも開けます。第三者があなたのアドレスと自分で選んだパスワードを使って登録し、あなたが一度クリックするだけで、その人がパスワードを知るアカウントが作成される可能性があります。ここでは、フォームに入力した本人だけが両方の情報を持つため、他人が代わりに登録することはできません。 このコードは1回限り有効で、15分後に期限切れとなり、間違った入力が数回続くと、保留中の登録は破棄されます。短いコードが安全なのは、試行回数が少ない間だけです。また、コードを利用できるのは、フォームを送信したブラウザーに限られます。送信ごとにチケットが発行され、そのブラウザーのセッションに保存されるため、チケットなしでコードを提示しても拒否されます。コードを入力すると、ブラウザーはそのままサインインします。パスワードは数分前に設定済みで、もう一度入力を求めても確認にはなりません。同じ画面からコードを再送できますが、アドレスごとのレート制限があります。送信回数の上限は保留中の登録ごとに設定されるため、保留中の登録が期限切れになるとリセットされ、同じアドレスでも後からいつでも再登録できます。期限切れのコードを入力しても、間違った入力として数えられず、登録も破棄されません。保留中の登録はそのまま残るため、同じ画面から新しいコードを送信できます。
開発環境では、メールサーバーが設定されていない場合、メッセージは送信されず、アプリケーションログに書き込まれます。そのため、ログからコードをコピーすれば、このフローを完了できます。これには APP_ENV=development が必要です。それ以外の環境では、設定されていないプロセスはコードをログに記録して成功を報告するのではなく、送信を拒否します。実際に送信するには、MAIL_SERVER(および MAIL_PORT、MAIL_USERNAME、MAIL_PASSWORD、MAIL_DEFAULT_SENDER)を設定してください。SMTP エンドポイントがあるプロバイダーであれば利用できます。EMAIL_VERIFICATION_TTL_MINUTES、EMAIL_VERIFICATION_MAX_ATTEMPTS、EMAIL_VERIFICATION_RESEND_SECONDS、EMAIL_VERIFICATION_MAX_SENDS で有効期間と上限を調整できます。全項目については .env.example を参照してください。
署名付きセッションクッキーのトレードオフは、有効期限前にサーバーから無効化できないことです。TTL によって被害を抑えられます。また、FASTAPI_SECRET_KEY をローテーションすると、すべてのブラウザーのログインが一度に無効になります。API トークンはサーバー側に記録が保持されるため、個別に、すぐに取り消すことができます。より短い有効期間が必要な場合は、BROWSER_SESSION_TTL_HOURS を短くしてください。
例
- グラフの一覧を取得(GET)
curl の例:
curl -s -H "Authorization: Bearer $TOKEN" \
https://app.queryweaver.ai/graphs
Python の例:
import requests
resp = requests.get('https://app.queryweaver.ai/graphs', headers={'Authorization': f'Bearer {TOKEN}'})
print(resp.json())
- グラフのスキーマを取得(GET)
curl の例:
curl -s -H "Authorization: Bearer $TOKEN" \
https://app.queryweaver.ai/graphs/my_database/data
Python の例:
resp = requests.get('https://app.queryweaver.ai/graphs/my_database/data', headers={'Authorization': f'Bearer {TOKEN}'})
print(resp.json())
- グラフを読み込む(POST)— JSON ペイロード
curl -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"database": "my_database", "tables": [...]}' \
https://app.queryweaver.ai/graphs
または、ファイルをアップロードします(multipart/form-data):
curl -H "Authorization: Bearer $TOKEN" -F "[email protected]" \
https://app.queryweaver.ai/graphs
- グラフにクエリを実行(POST)— チャットベースの Text2SQL リクエストを実行
POST /graphs/{graph_id} エンドポイントは、少なくとも chat フィールド(メッセージの配列)を含む JSON 本文を受け付けます。このエンドポイントは、処理手順と最終的な SQL を、フロントエンドが使用する特殊な区切り文字で区切られた、サーバー送信メッセージのチャンクとしてストリーミングします。簡単なスクリプトから呼び出す場合は、ストリーミングされたメッセージから最終的な JSON オブジェクトを読み取ることができます。
ペイロードの例:
{
"chat": ["How many users signed up last month?"],
"result": [],
"instructions": "Prefer PostgreSQL compatible SQL"
}
curl の例(簡易版。レスポンス全体を取得):
curl -s -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"chat": ["Count orders last week"]}' \
https://app.queryweaver.ai/graphs/my_database
Python の例(ストリーム対応):
import requests
import json
url = 'https://app.queryweaver.ai/graphs/my_database'
headers = {'Authorization': f'Bearer {TOKEN}', 'Content-Type': 'application/json'}
with requests.post(url, headers=headers, json={"chat": ["Count orders last week"]}, stream=True) as r:
# The server yields JSON objects delimited by a message boundary string
boundary = '|||FALKORDB_MESSAGE_BOUNDARY|||'
buffer = ''
for chunk in r.iter_content(decode_unicode=True, chunk_size=1024):
buffer += chunk
while boundary in buffer:
part, buffer = buffer.split(boundary, 1)
if not part.strip():
continue
obj = json.loads(part)
print('STREAM:', obj)
注意点とヒント
- グラフ ID はユーザーごとに名前空間が分かれています。API を直接呼び出す場合は、プレーンなグラフ ID を使用してください(サーバーが認証済みユーザーに基づいて名前空間を設定します)。アップロードしたファイルでは、
databaseフィールドによって保存されるグラフ ID が決まります。 - ストリーミングレスポンスには、中間の推論手順、追加の質問(クエリが曖昧またはトピック外の場合)、最終的な SQL が含まれます。フロントエンドは、メッセージ間の区切り文字列
|||FALKORDB_MESSAGE_BOUNDARY|||を想定しています。 - 破壊的な SQL(INSERT/UPDATE/DELETE など)では、サービスはストリームに確認手順を含めます。このフローはフロントエンドが処理します。破壊的な操作を自動化する場合は、確認を適切に処理してください(コード内の
ConfirmRequestモデルを参照)。
Python SDK
QueryWeaver Python SDK を使用すると、ウェブサーバーを実行せずに、Python アプリケーションから Text2SQL 機能を直接利用できます。
インストール
# SDK only (minimal dependencies)
pip install queryweaver
# With server dependencies (FastAPI, etc.)
pip install queryweaver[server]
# Development (includes testing tools)
pip install queryweaver[dev]
クイックスタート
import asyncio
from queryweaver import QueryWeaver
async def main():
# Initialize with FalkorDB connection
qw = QueryWeaver(falkordb_url="redis://localhost:6379")
# Connect a PostgreSQL or MySQL database
conn = await qw.connect_database("postgresql://user:pass@host:5432/mydb")
print(f"Connected: {conn.database_id}") # "mydb"
# Convert natural language to SQL and execute — pass the database_id
# returned by connect_database (un-prefixed; namespacing is internal).
result = await qw.query(conn.database_id, "Show me all customers from NYC")
print(result.sql_query) # SELECT * FROM customers WHERE city = 'NYC'
print(result.results) # [{"id": 1, "name": "Alice", "city": "NYC"}, ...]
print(result.ai_response) # "Found 42 customers from NYC..."
await qw.close()
asyncio.run(main())
コンテキストマネージャー
async with QueryWeaver(falkordb_url="redis://localhost:6379") as qw:
conn = await qw.connect_database("postgresql://user:pass@host/mydb")
result = await qw.query(conn.database_id, "Count orders by status")
# close() runs automatically, awaiting any in-flight background memory writes.
複数のインスタンス
複数の QueryWeaver インスタンスを、同じプロセス内で並行して実行できます。
各インスタンスは独自の FalkorDB 接続を保持し、すべての呼び出しでその接続を明示的に渡すため、競合する共有グローバル状態はありません。
async with QueryWeaver(falkordb_url="redis://host-a:6379", user_id="tenant_a") as a, \
QueryWeaver(falkordb_url="redis://host-b:6379", user_id="tenant_b") as b:
sales = await a.connect_database("postgresql://user:pass@host-a/sales")
ops = await b.connect_database("postgresql://user:pass@host-b/ops")
await a.query(sales.database_id, "Show top customers")
await b.query(ops.database_id, "Count open tickets")
利用可能なメソッド
| メソッド | 説明 |
|---|---|
connect_database(db_url) | PostgreSQL/MySQL に接続し、スキーマを読み込みます |
query(database, question) | 自然言語を SQL に変換して実行します |
get_schema(database) | データベーススキーマ(テーブルとリレーションシップ)を取得します |
list_databases() | 接続済みのすべてのデータベースを一覧表示します |
delete_database(database) | FalkorDB からデータベースを削除します |
refresh_schema(database) | データベースの変更後にスキーマを再同期します |
execute_confirmed(database, sql) | 確認済みの破壊的操作を実行します |
高度なクエリオプション
複数ターンの会話、カスタム指示、リクエストごとの LLM オーバーライドを使用する場合:
from queryweaver import QueryWeaver, QueryRequest
request = QueryRequest(
question="Show their recent orders",
chat_history=["Show all customers from NYC"],
result_history=["Found 42 customers..."],
instructions="Use created_at for date filtering",
# Optional per-request LLM overrides — bypass env-based config
custom_api_key="sk-...",
custom_model="openai/gpt-4.1",
)
result = await qw.query("mydb", request)
破壊的操作の処理
INSERT、UPDATE、DELETE 操作には確認が必要です:
result = await qw.query("mydb", "Delete inactive users")
if result.requires_confirmation:
print(f"Destructive SQL: {result.sql_query}")
# Execute after user confirms
confirmed = await qw.execute_confirmed("mydb", result.sql_query)
要件
- Python 3.12+
- FalkorDB インスタンス(ローカルまたはリモート)
- OpenAI または Azure OpenAI の API キー(LLM 用)
- 対象の SQL データベース(PostgreSQL または MySQL)
開発
以下の手順で、ソースから QueryWeaver を実行および開発できます。
前提条件
- Python 3.12+
- uv(Python パッケージマネージャー)
- FalkorDB インスタンス(ローカルまたはリモート)
- Node.js と npm(React フロントエンド用)
インストールと設定
クイックスタート(開発に推奨):
# Clone the repo
git clone https://github.com/FalkorDB/QueryWeaver.git
cd QueryWeaver
# Install dependencies (backend + frontend) and start the dev server
make install
make run-dev
手動でセットアップする場合や、カスタム環境が必要な場合は、uv を使用してください:
# Install Python (backend) and frontend dependencies
uv sync
# Create a local environment file
cp .env.example .env
# Edit .env with your values (set APP_ENV=development for local development)
アプリをローカルで実行する
uv run uvicorn api.index:app --host 0.0.0.0 --port 5000 --reload
サーバーは http://localhost:5000 で利用できます。
または、このリポジトリに用意されている Make ターゲットを使ってアプリを実行できます:
make run-dev # development server (reload, debug-friendly)
make run-prod # production mode (ensure frontend build if needed)
フロントエンドのビルド(必要な場合)
フロントエンドは app/ にある最新の React + Vite アプリです。本番環境で実行する前、またはフロントエンドを変更した後にビルドしてください:
make install # installs backend and frontend deps
make build-prod # builds the frontend into app/dist/
# or manually
cd app
npm ci
npm run build
OAuth の設定
QueryWeaver は Google と GitHub の OAuth に対応しています。各プロバイダーの OAuth 認証情報を作成し、クライアント ID/シークレットを .env ファイルに貼り付けてください。
- Google:認証済みオリジンとコールバック
http://localhost:5000/login/google/authorizedを設定します - GitHub:ホームページとコールバック
http://localhost:5000/login/github/authorizedを設定します
環境別の OAuth 設定
本番/ステージング環境へのデプロイでは、セッション Cookie はデフォルトで HTTPS 専用です。トリミングして小文字に変換した後に development と判定される APP_ENV の場合に限り、この設定は無効になります。そのため、デプロイ時にこの変数を設定し忘れても、Cookie は安全な設定のままです。プレーン HTTP のローカル実行では APP_ENV=development を設定してください。そうしないと、ブラウザーが Cookie を破棄し、OAuth の CSRF state mismatch エラーが発生します。
署名付きセッション Cookie は、ブラウザーで使用する唯一の認証情報です。api_token がブラウザーの Cookie に書き込まれることはありません。Cookie 内のベアラートークンは、有効期間中ずっとディスク上に平文で保存されるためです。そのため、プログラムから利用するクライアントは、代わりにトークン API からトークンを取得します。この変更前に発行されたセッションは引き続き使用できます。従来の api_token Cookie は引き続き受け入れられますが、新たに提供されることはありません。
# For production/staging (HTTPS-only session cookies - also the default)
APP_ENV=production
# For development (allows HTTP session cookies)
APP_ENV=development
重要:プレーン HTTP 環境で「mismatching_state: CSRF Warning!」エラーが発生する場合は、APP_ENV が development に設定されていることを確認してください。
AI/LLM の設定
QueryWeaver は複数の AI プロバイダーに対応しています。API キーを 1 つ設定すると、QueryWeaver が使用するプロバイダーを自動的に検出します。
優先順位: Ollama > OpenAI > Gemini > Anthropic > Cohere > Azure(デフォルト)
| プロバイダー | API キー | デフォルトのモデル |
|---|---|---|
| Ollama | OLLAMA_MODEL | ollama/<your-model>, ollama/nomic-embed-text |
| OpenAI | OPENAI_API_KEY | openai/gpt-4.1, openai/text-embedding-ada-002 |
| Google Gemini | GEMINI_API_KEY | gemini/gemini-3-pro-preview, gemini/gemini-embedding-001 |
| Anthropic | ANTHROPIC_API_KEY | anthropic/claude-sonnet-4-5-20250929, voyage/voyage-3* |
| Cohere | COHERE_API_KEY | cohere/command-a-03-2025, cohere/embed-v4.0 |
| Azure OpenAI | AZURE_API_KEY | azure/gpt-4.1, azure/text-embedding-ada-002 |
* Anthropic にはネイティブの埋め込み機能がありません。埋め込みを利用するには、VOYAGE_API_KEY または EMBEDDING_MODEL を設定する必要があります。設定しない場合、起動時にエラーが発生します。
任意:デフォルトのモデルを上書きする
COMPLETION_MODEL=gemini/gemini-3-pro-preview
EMBEDDING_MODEL=gemini/gemini-embedding-001
どちらも API キーのプロバイダーと一致している必要があります。
AI 設定を使用した Docker の例
OpenAI を使用する場合:
docker run -p 5000:5000 -it \
-e FASTAPI_SECRET_KEY=your_secret_key \
-e OPENAI_API_KEY=your_openai_api_key \
falkordb/queryweaver
Google Gemini を使用する場合:
docker run -p 5000:5000 -it \
-e FASTAPI_SECRET_KEY=your_secret_key \
-e GEMINI_API_KEY=your_gemini_api_key \
falkordb/queryweaver
Anthropic を使用する場合:
docker run -p 5000:5000 -it \
-e FASTAPI_SECRET_KEY=your_secret_key \
-e ANTHROPIC_API_KEY=your_anthropic_api_key \
falkordb/queryweaver
Azure OpenAI を使用する場合:
docker run -p 5000:5000 -it \
-e FASTAPI_SECRET_KEY=your_secret_key \
-e AZURE_API_KEY=your_azure_api_key \
-e AZURE_API_BASE=https://your-resource.openai.azure.com/ \
-e AZURE_API_VERSION=2025-03-01-preview \
falkordb/queryweaver
テスト
簡単な注意:多くのテストでは FalkorDB が利用可能である必要があります。必要に応じて、付属のヘルパーを使って Docker でテスト用 DB を起動してください。
前提条件
- 開発用依存関係をインストールします:
uv sync - FalkorDB を起動します(
make docker-falkordbを参照) - Playwright ブラウザーをインストールします:
uv run playwright install
クイックコマンド
推奨:Make ヘルパーを使用して開発/テスト環境を準備します(依存関係と Playwright ブラウザーをインストールします)。
# Prepare development/test environment (installs deps and Playwright browsers)
make setup-dev
または、E2E 専用のセットアップスクリプトを実行してから、手動でテストを実行できます。
# Prepare E2E test environment (installs browsers and other setup)
./setup_e2e_tests.sh
# Run all tests
make test
# Run unit tests only (faster)
make test-unit
# Run E2E tests (headless)
make test-e2e
# Run E2E tests with a visible browser for debugging
make test-e2e-headed
テストの種類
- 単体テスト:個々のモジュールとユーティリティを対象にします。
make test-unitまたはuv run python -m pytest tests/ -k "not e2e"で実行します。 - エンドツーエンド(E2E)テスト:Playwright を使用して実行し、UI のフロー、OAuth、ファイルのアップロード、スキーマ処理、チャットクエリ、API エンドポイントをテストします。
make test-e2eを使用します。
E2E テストの詳しい手順については、tests/e2e/README.md を参照してください。
CI/CD
GitHub Actions は、プッシュ時とプルリクエスト時に単体テストと E2E テストを実行します。失敗時には、デバッグ用のスクリーンショットとアーティファクトが保存されます。
トラブルシューティング
- FalkorDB の接続に関する問題:DB ヘルパー
make docker-falkordbを起動するか、ネットワーク/ホストの設定を確認してください。 - Playwright/ブラウザーの問題:
uv run playwright installでブラウザーをインストールし、システム依存関係がそろっていることを確認してください。 - 環境変数が設定されていない場合:
.env.exampleをコピーし、必須の値を入力してください。 - OAuth の「mismatching_state: CSRF Warning!」エラー:
APP_ENVを前後の空白を取り除いて小文字に変換した値がdevelopmentでない場合、セッション Cookie は HTTPS 専用になります。HTTP 環境ではAPP_ENV=developmentを設定してください。HTTPS でデプロイする場合は、productionまたはstagingを設定するか、変数を設定しないでください。
プロジェクトの構成(概要)
api/– FastAPI バックエンドapp/– React + Vite フロントエンドtests/– 単体テストと E2E テスト
ライセンス
GNU Affero General Public License(AGPL)のもとでライセンスされています。LICENSE を参照してください。
Copyright FalkorDB Ltd. 2025
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。