ResuStack について
ResuStackは、ブラウザーやMCPクライアントで履歴書を作成・管理する人向けのビルダーです。複数のデザイン、AIによる文章作成、変更履歴、求人との照合、PDF出力を備えています。
主な機能
- 01PDFやLinkedInプロフィールのPDFから履歴書を取り込み
- 02フォームやチャットで編集、14種類のデザインに対応
- 03履歴書を求人要件と照合
- 04履歴書を翻訳し言語別バージョンを管理
- 05変更を記録し以前のバージョンを復元
- 06ライブプレビューと同じテンプレートでPDF出力
活用シーン
- 01既存のPDFを編集可能な履歴書に変換
- 02求人に合わせた履歴書のコピーを作成
- 03MCPクライアントから履歴書を更新してPDFを生成
MCP 対応
ResuStackはStreamable HTTPのMCPサーバーで履歴書管理機能を提供します。クライアントは履歴書の一覧・取得・作成・更新、テンプレート選択、フォーカス領域の設定、利用枠の確認、PDFリンクの取得ができ、書き込み前に復元ポイントが作成されます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://resustackapp.com/mcpclaude mcp add --transport http com-resustackapp-resustack https://resustackapp.com/mcp{"mcpServers":{"com-resustackapp-resustack":{"type":"http","url":"https://resustackapp.com/mcp"}}}Cursor で開く{"servers":{"com-resustackapp-resustack":{"type":"http","url":"https://resustackapp.com/mcp"}}}VS Code で開く{"mcpServers":{"com-resustackapp-resustack":{"type":"http","url":"https://resustackapp.com/mcp"}}}{"mcpServers":{"com-resustackapp-resustack":{"serverUrl":"https://resustackapp.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://resustackapp.com/mcp認証が必要ツール
詳細
ResuStack
ResuStack は AI 履歴書ビルダーです。PDF または LinkedIn プロフィールをインポートし、14 種類のデザインから選んで、フォームまたはチャットで編集できます。ブラウザーからでも、MCP サーバー経由で Claude から直接でも利用できます。変更はすべて元に戻すことができ、ダウンロードする PDF はライブプレビューと同じテンプレートから生成されます。
🔗 ライブ版: resustackapp.com
✨ 機能
履歴書ビルダー
- PDF のインポート — 既存の履歴書または LinkedIn プロフィールの PDF をアップロードできます(自動で判別)。AI が内容を抽出して構成し、ファイルで裏付けられない情報にフラグを付けます
- 分割画面エディター — 左側にフォーム、右側にライブプレビューを表示し、PDF と同じ位置に改ページを表示します
- 6 種類のレイアウトに対応した 14 種類のデザイン — 1 カラム、バナー、ラベル用の余白、ヘッダーグリッド、左サイドバー、右レールがあります。ATS 対応のデザインには印が付き、デザインを切り替えても内容は保持されます
- 英語とトルコ語の履歴書 — 見出し、「現在」、月名、学位の表記は、履歴書の言語で印刷されます
- 「現在取り組んでいること」 — 任意のセクションで、オンにした場合のみ学歴の上に表示されます
- Google でサインイン — またはユーザー名とパスワードでサインインできます。メールアドレスで登録すると、最初の PDF をすぐにインポートでき、ほかの AI 機能を使う前にメールアドレスを確認できます
- PDF のエクスポート — プレビューと同じテンプレートから WeasyPrint で生成されます
AI
- ワンクリックでブラッシュアップ — 職務経験やプロジェクトの説明を、より力強い箇条書きに書き換えます
- チャットで一から作成 — アシスタントが履歴書を作成し、質問への回答に応じて内容を入力します
エージェントモード
- チャットで編集 — 「直近の職務をもっとシニアらしくしてください」。エージェントはツールを使い、進捗をストリーミングし、破壊的な操作の前に承認を求めます
- テンプレートペイン — チャットを離れずに、アクティブな履歴書のデザインを選べます
- 元に戻す — 会話から直前の変更を取り消せます
変更履歴
- 保存のたび、および AI や MCP による編集の前に復元ポイントを作成します
- どのプランでも、任意のバージョンと現在の内容との差分を確認し、復元できます
求人情報
- スコアを確認 — 要件ごとに、根拠のある箇所とともに、求人情報に対する履歴書の適合度を評価します
- 求人用コピー — メインの履歴書はそのままに、特定の求人向けのコピーを改善します
- 不足点を改善 — 不足点ごとの質問に回答し、作成された文章を確認して適用し、スコアの変化を確認できます
言語別バージョン
- 履歴書をその場で翻訳するか、元の履歴書に紐付いた翻訳版を作成できます
🤖 Claude から ResuStack を使う(MCP)
ResuStack は Model Context Protocol サーバーです。Claude、または Streamable HTTP とカスタムヘッダーに対応する任意の MCP クライアントが履歴書を編集し、ResuStack が保存、バージョン管理、レンダリングを行います。
1. トークンを作成します。 サインインして、プロフィール → API トークンを開き、トークンを作成します。トークンが表示されるのは一度だけです。置き換えると古いトークンは無効になります。使用するエンドポイントのアドレスもプロフィールページに表示されます。
2. サーバーを追加します。 Claude Code の場合:
claude mcp add --transport http resustack https://resustackapp.com/mcp --header "Authorization: Bearer YOUR_TOKEN"
認証にはベアラートークンのみを使用します。このエンドポイントではセッション Cookie は受け付けられません。
3. 依頼します。 「履歴書の一覧を表示して」、「履歴書を Label Gutter デザインに切り替えて、PDF を渡して」、「今月取り組んだ内容をもとに『現在取り組んでいること』を入力して」。
ツール
| ツール | 内容 |
|---|---|
list_resumes | アカウントの履歴書:ID、タイトル、言語、テンプレート |
get_resume | 1 件の履歴書の保存済みコンテンツ全体 |
create_resume | 構造化されたコンテンツから履歴書を作成 |
update_resume | 履歴書のコンテンツを置き換えます(先に読み取ってください。マージではなく置き換えです) |
set_focus_areas | 「現在取り組んでいること」セクションのみを設定します。履歴書のほかの部分は変更されません |
list_templates | 各デザインの説明と ATS 対応かどうか |
set_template | 履歴書のデザインを変更 |
render_pdf | PDF のダウンロードリンク。1 回のみ使用でき、10 分で期限切れになります |
check_quota | 今月アカウントに残っている利用枠 |
プロンプト
| プロンプト | 内容 |
|---|---|
focus_areas_from_my_work | クライアントのモデルに、確認できる会話内容から実際に行った作業を数行にまとめてもらい、その内容を表示します。承認した場合にのみ、set_focus_areas で保存します |
安全ルール
- 書き込みを行う前に、必ず復元ポイントを作成します。ウェブサイトで元に戻せます
- 削除ツールはありません。履歴書の削除は、担当者が操作するウェブサイトで行います
- すべてのクエリは、トークンの所有者の範囲に限定されます
- アカウントごとにレート制限があります
MCP Registry への登録
リポジトリのルートにある server.json は、公式 MCP Registry 向けに、サーバーを com.resustackapp/resustack として記述しています。この名前で公開するには、/.well-known/mcp-registry-auth で配信するファイルを使って、resustackapp.com の所有権を証明する必要があります。
-
ローカルでキーペアを生成します。
key.pemは絶対にコミットしないでください(.gitignoreに含まれています)。openssl genpkey -algorithm Ed25519 -out key.pem -
証明レコードを出力し、Dokploy で
MCP_REGISTRY_AUTH環境変数に設定してから、再デプロイします。echo "v=MCPv1; k=ed25519; p=$(openssl pkey -in key.pem -pubout -outform DER | tail -c 32 | base64)" -
公開されていることを確認します。
curl https://resustackapp.com/.well-known/mcp-registry-auth -
ログインして、リポジトリのルートから公開します。
mcp-publisher login http --domain resustackapp.com --private-key "$(openssl pkey -in key.pem -noout -text | grep -A3 'priv:' | tail -n +2 | tr -d ' :\n')"mcp-publisher publish
新しい登録を行うたびに、server.json の version と mcp_server/protocol.py の SERVER_INFO を更新します。
📸 スクリーンショット
エディター — フォーム、ライブプレビュー、テンプレートペイン

デザインの選択

エージェントモード

ダッシュボード

💳 プラン
無料で始められます。Pro は一定期間利用できる買い切りプランで、サブスクリプションではありません。
| 無料プラン | 上限 |
|---|---|
| AI クレジット(インポート、AI による書き換え、改善案の下書き、チャットメッセージ) | 月 30 回 |
| PDF ダウンロード | 月 5 回 |
| 履歴書(言語別バージョンは無料) | 3 件 |
| 求人ごとのコピー | 3 件 |
Pro(3 か月 $9、12 か月 $24、買い切り)では、これらの上限がなくなります。決済は、販売者として登録されている Paddle が処理します。上限は core/settings.py の FREE_TIER_LIMITS に設定されています。詳しくは料金ページをご覧ください。
🚀 ローカルでの実行
前提条件
- Docker と Docker Compose
- OpenAI API キー
1. クローンと設定
git clone https://github.com/koksalkapucuoglu/resume-enhance.git
cd resume-enhance && cp .env.example .env
| 変数 | 説明 | 例 |
|---|---|---|
OPENAI_API_KEY | OpenAI API キー | sk-proj-... |
SECRET_KEY | Django のシークレットキー | 任意の長いランダム文字列 |
DEBUG | デバッグモード | True |
ALLOWED_HOSTS | 許可するホスト | localhost,127.0.0.1 |
POSTGRES_DB / POSTGRES_USER / POSTGRES_PASSWORD | データベースの認証情報 | postgres |
POSTGRES_HOST / POSTGRES_PORT | データベースのアドレス | db / 5432 |
EMAIL_HOST_USER / EMAIL_HOST_PASSWORD | パスワードのリセットとメール認証に使用する SMTP 認証情報。Gmail の場合はアプリパスワードを使用します | [email protected] / アプリパスワード |
EMAIL_HOST / EMAIL_PORT / EMAIL_USE_TLS / EMAIL_USE_SSL | SMTP サーバー。デフォルトは Gmail(smtp.gmail.com、587、TLS)です。465 番ポートで暗黙的 TLS を使用するには、EMAIL_USE_SSL=True を設定します | smtp.gmail.com / 587 / True / False |
DOWNLOAD_LINK_MAX_AGE | 署名付き PDF リンクの有効期間(秒、任意) | 600 |
GOOGLE_OAUTH_CLIENT_ID / GOOGLE_OAUTH_CLIENT_SECRET | Google サインイン用。両方を設定するまでボタンは表示されません(任意) | Google Cloud Console で取得 |
DEFAULT_FROM_EMAIL | アカウント関連メールの送信元。デフォルトは EMAIL_HOST_USER です(任意) | ResuStack <[email protected]> |
MCP_REGISTRY_AUTH | /.well-known/mcp-registry-auth で配信する MCP Registry のドメイン証明(任意。公開鍵のみ) | v=MCPv1; k=ed25519; p=... |
PAYMENT_STATUS | coming_soon は決済なしでプランを表示し、live はチェックアウトを有効にします | coming_soon |
PAYMENT_PROVIDER、PAYMENT_WEBHOOK_SECRET、CHECKOUT_URL_*、PRODUCT_ID_* | 決済プロバイダーの設定(任意) |
2. 起動
docker compose up --build
アプリは http://localhost:8000 で動作します。
3. テストを実行する
docker compose exec web python manage.py test resume mcp_server
ユニットテストでは WeasyPrint と OpenAI をモックしているため、API 呼び出しは行われません。
☁️ デプロイ
本番環境は Dokploy で稼働しています。main へのプッシュごとに GitHub webhook 経由でデプロイが開始されます。Dokploy が Dockerfile をビルドし、Gunicorn の起動前に entrypoint.sh が migrate と collectstatic を実行します。HTTPS は Traefik が処理します。
新しいサーバーでのセットアップ方法:
- Dokploy をインストールします:
curl -sSL https://dokploy.com/install.sh | sh http://YOUR_SERVER_IP:3000を開き、管理者アカウントを作成します- プロジェクトを作成 → Application を追加 → この GitHub リポジトリを接続します
- 同じプロジェクトに PostgreSQL サービスを追加します
- 環境変数(
.env.exampleと.claude/integrations/を参照)とドメインを設定してから、デプロイします
注意事項:
- Dokploy の Run Command は空欄にしてください。Dockerfile の
ENTRYPOINTがすべてを実行します - Cloudflare のプロキシの背後で運用する場合、Dokploy のドメイン暗号化を None に、Cloudflare SSL を Full に設定してください
- イメージには履歴書デザインで使用するフォントがインストールされているため、レンダリング時に取得する必要はありません
🔑 Google サインイン
Google サインインには django-allauth を使用しています。ResuStack 独自のログイン、サインアップ、パスワードページはそのまま使用し、allauth は Google の認証フローのみを追加します。
- Google Cloud Console で OAuth consent screen(External)を設定し、プライバシーポリシーの URL を
https://resustackapp.com/privacy/に設定します。スコープはopenid、email、profileのみにします。 - Web application タイプの OAuth client ID を作成し、以下を設定します:
- 承認済みの JavaScript 生成元:
https://resustackapp.com - 承認済みのリダイレクト URI:
https://resustackapp.com/accounts/google/login/callback/ - ローカル開発用に、
http://localhost:8000/accounts/google/login/callback/も設定します
- 承認済みの JavaScript 生成元:
GOOGLE_OAUTH_CLIENT_IDとGOOGLE_OAUTH_CLIENT_SECRETを設定して、再デプロイします。
動作について:
- メールアドレスが一致しても、Google アカウントが既存の ResuStack アカウントに紐付けられることはありません。ローカルのメールアドレスは検証されていないためです。既存ユーザーは、サインインした状態でプロフィールページから Google アカウントを接続します。
- 新しい Google ユーザーは、ユーザー名を選び、国外へのデータ移転に同意するための短いステップを完了します。
- メールアドレスが未検証の Google アカウントは拒否されます。
- メールアドレスで作成したアカウントはすぐに利用できますが、住所が確認されるまで AI 機能はロックされています(ソフト検証)。この仕組みの導入前に作成されたアカウントには影響しません。
🔒 プライバシー
ResuStack が収集する情報、その処理者(AI 機能の OpenAI を含む)、およびデータの削除方法については、resustackapp.com/privacy をご覧ください。KVKK 情報通知として作成されたトルコ語版は、resustackapp.com/gizlilik でご覧いただけます。ユーザーはプロフィールページからアカウントとすべてのデータを削除できます。
🏗️ アーキテクチャ
モノリシックな Django 構成です。ビュー、MCP エンドポイント、PDF 用の WeasyPrint、文章作成用の OpenAI、スコアとチェック用の TypeSafe Jev、決済用の Paddle、エラーとプロダクトファネル用の Sentry および PostHog(どちらも任意)で構成されています。履歴書のコンテンツは単一の JSONField に格納され、すべてのデザインは resume/resume_templates.py の単一カタログから取得されます。規約、パターン、注意点をまとめた完全なガイドは .claude/CLAUDE.md にあります。各インテグレーションのページは .claude/integrations/ に、現在の状態と次のステップは .claude/HANDOFF.md にあります。
🗺️ ロードマップ
- 複数の履歴書デザイン(14 種類)
- 求人情報のスコアリング、求人向けコピー、ギャップの改善
- ツール呼び出し、承認、取り消しに対応したエージェントモード
- 差分表示と復元に対応した変更履歴
- Claude などのクライアント向け MCP サーバー
- 英語とトルコ語の履歴書
- MCP レジストリへの掲載
- トークンに加え、MCP クライアント向け OAuth
- 決済の運用開始
ライセンス
オープンソース。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。