sql-fun 0.1.0

SQL query/statement execution code generator
Documentation
# JSON-RPC サーバ起動・終了の設計方針

このドキュメントは、`sql-fun-server` の JSON-RPC サーバの起動・接続・終了制御についての設計方針を示す。

## 起動条件

- `proc-macro` などのクライアントから `sql-fun-server` に接続要求があるとき、自動起動されることが望ましい。
- PID ファイルによってサーバの存在を検出し、存在しなければフォアグラウンドまたはバックグラウンドで起動を試みる。
- 起動直後に、バインドしたポートとプロセス ID を JSON で PID ファイルに記録する。

## 接続方法

- TCP ソケットを基本とする。
- `sql-fun-proxy``sql-fun-server` の PID ファイルを読み、ポート番号を取得して接続する。
- 接続が確立しない場合は、定められた時間だけ再試行する。

## 終了条件

- 一定時間(例:30秒間)リクエストを受け取らなかった場合、自動終了する。
- 終了時には PID ファイルを削除する。
- 明示的に `--shutdown` を呼び出した場合も即時終了し、PID ファイルを削除する。

## MCP 対応(計画)

MCP (Multi-Client Protocol) を通じて LLM や補完系のツールが `sql-fun-server` に接続してくるユースケースを想定する。

- MCP 対応はデフォルトでは無効。
- 起動オプション `--allow-context mcp` を指定したときのみ、MCP コンテキストでの接続を受け付ける。
- さらに、`config.toml``[mcp.expose.*]` セクションが存在し、かつ `columns = "*"` が設定されている場合に限り、全テーブルの全カラムの公開が許可される。
- `[mcp.expose.*]` は文字列リテラルとして完全一致したセクション名のみが認識され、他のキー(例: `[mcp.expose.users]`)は初期実装では一切評価されない。

この仕様により、ユーザーの明示的な許可がない限り MCP に対して何も公開されない、という `sql-fun` の設計哲学を保ったまま、安全な導入が可能となる。

また、MCP を通じて接続されるクライアントが LLM(大規模言語モデル)など外部要素を含む可能性があるため、
**テーブル名やカラム名、リレーション構造などを公開することが、ユーザー環境におけるセキュリティポリシーと干渉する可能性がある。**
そのため MCP による情報開示は明示的な opt-in を必要とし、ユーザーが意図した範囲の情報のみを開示する仕組みとして設計されている。