# Repository Guidelines

## プロジェクト構成とモジュール整理
このリポジトリは小規模な Rust のバイナリクレートです。`src/main.rs` は起動処理のみにとどめ、MCP サーバー本体は `src/server.rs`、ツール群は `src/tools/` 配下に分けてください。今後ツールを増やす場合も、`src/tools/basic.rs` のように責務ごとにファイルを分ける前提で進めてください。`Cargo.toml` はパッケージ定義と依存関係、`Cargo.lock` は依存バージョン固定、`config.toml` はローカル実行用の設定ファイルです。ビルド成果物は `target/` に出力されるため、追跡対象にはしないでください。

## ビルド・テスト・開発コマンド
- `cargo run`: ローカルでビルドしてサーバーを起動する
- `cargo build`: 実際に起動可能なバイナリが生成できるか確認する
- `cargo check`: 実行ファイルを作らずに高速でコンパイル確認する
- `cargo test`: ユニットテストと統合テストを実行する
- `cargo fmt`: Rust 標準フォーマットを適用する
- `cargo clippy --all-targets --all-features`: レビュー前に lint を確認する

コードを更新したら、少なくとも `cargo build` でバイナリ生成が通ることを確認してください。プルリクエスト前は `cargo fmt`、`cargo build`、`cargo clippy --all-targets --all-features` を通してください。

## コーディング規約と命名
Rust 2024 edition を前提とし、整形は標準の `rustfmt` に従ってください。インデントは 4 スペースとし、関数は小さく保ち、読みやすさに有効な場面では型を明示してください。命名は Rust の慣例に合わせてください。
- モジュール名・ファイル名: `snake_case`
- 関数名・変数名: `snake_case`
- 型・トレイト・列挙型: `UpperCamelCase`
- 定数: `SCREAMING_SNAKE_CASE`

副作用はできるだけ境界に寄せ、再利用できる処理はテストしやすい関数やモジュールへ切り出してください。`#[allow(...)]` 系の抑制は原則禁止とし、まず警告やエラーの原因をコード側で解消してください。どうしても必要な場合だけ、理由を明確にしたうえで最小範囲に限定して使用してください。
アプリケーションメッセージ、CLI 出力、エラー文言、README などの公開向け文言は、会話口調ではなく公開向けの事務的な敬体で記述してください。

## テスト方針
まだテストは少ないものの、新しい振る舞いを追加する場合は対応するテストも同時に追加してください。ユニットテストは `#[cfg(test)]` で実装の近くに置き、公開挙動や CLI 風の流れを確認したい場合は `tests/` 配下に統合テストを追加してください。テスト名は `returns_error_for_missing_token` のように、期待する挙動がそのまま分かる形にしてください。

## コミットとプルリクエスト
履歴はまだ少ないため、コミットメッセージは `Add Gyazo upload client` のような命令形で、短く明確に記述してください。件名は 72 文字前後までに収め、1コミットごとにレビューしやすい単位へ分けてください。プルリクエストには変更概要、実行した確認コマンド（`cargo build`、`cargo test`、`cargo clippy` など）、設定やプロトコルに関する前提があればそれも記載してください。MCP の挙動を変える場合は、リクエストやレスポンスの例も添えると分かりやすくなります。

## 設定とセキュリティ
`config.toml` や `.env` に秘密情報、API トークン、端末固有の値をコミットしないでください。.env 系ファイルはローカル専用として扱い、必要な場合は `.env.example` のみを共有してください。動作設定は `~/.config/gyazo-mcp-server/config.toml`、認証情報は `~/.config/gyazo-mcp-server/.env` に分けて扱ってください。`tcp_port`、`oauth_callback_path`、`rust_log` は `config.toml` を正とし、一時上書きが必要な場合だけ `GYAZO_MCP_TCP_PORT`、`GYAZO_MCP_OAUTH_CALLBACK_PATH`、`RUST_LOG` を使ってください。`GYAZO_MCP_OAUTH_CLIENT_ID`、`GYAZO_MCP_OAUTH_CLIENT_SECRET`、`GYAZO_MCP_PERSONAL_ACCESS_TOKEN` は `.env` で管理してください。設定例が必要な場合は、実値ではなくプレースホルダーを用い、必要なキーは PR か README に記載して共有してください。

## Transport 運用メモ
- HTTP transport は `/mcp` endpoint を利用し、MCP login 対応 client からの利用を基本としてください。
- stdio transport は `gyazo-mcp-server stdio` で起動してください。
- MCP login 非対応 client 向けの認証準備は `gyazo-mcp-server stdio --auth` を案内してください。
- `stdio --auth` は一時的なローカル callback サーバーとブラウザ認可を必要とするため、その前提も README に明記してください。
- client 設定例を追加する場合は、少なくとも TOML 形式 1 例と JSON 形式 1 例を維持してください。
