mcpField
W
write-proposal

write-proposal

github.com/upworkマーケティング・グロース20162 回インストール今日更新
リポジトリ

write-proposal について

write-proposal は、フリーランサーが Upwork の応募文を作成するためのスキルです。求人内容と本人の実際のプロフィールに基づいて文章を整え、応募状況、添付、入札額を確認し、送信前に明示的な承認を求めます。

主な機能

  1. 01Upwork 求人の検索と詳細取得
  2. 02招待と既存応募の確認
  3. 03プロフィールに基づく実績の選定
  4. 04求人に合わせた応募文と質問回答の作成
  5. 05添付、入札額、送信承認の管理

活用シーン

  1. 01求人内容と応募条件の確認
  2. 02過去の実績をもとに応募文を作成
  3. 03招待への返信または新規応募

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/upwork/upwork-agent-plugin --skill write-proposal

インストール後、Claude Code で/write-proposalを入力して読み込まれたか確認します。

詳細

Upwork の提案文を作成する

フリーランサー本人の実際のプロフィールと職歴に基づき、要点を絞った提案文を作成します。量やありきたりな説得ではなく、関連性と信頼性を重視してください。

アカウントを選択する

list_accounts を呼び出し、raw role が TALENT または FL_AGENCY のアカウントを選択します。該当するアカウントが複数ある場合は、ユーザーに確認してください。その後のすべての呼び出しで org_uid と role を保持し、アカウントについては name と role_label で言及してください。

求人を確認する

  1. find_jobs を action get で呼び出します。id パラメーターには、数値の求人 ID、~02… の暗号文、または Upwork の求人 URL 全体を指定できます。そのため、ユーザーが貼り付けたリンクは変更せずに渡せます。
  2. まず候補の求人を探すには、ユーザーが検索語を提示した場合は find_jobs の action search を、ユーザー自身のプロフィールに合う仕事を探したい場合は action smart_search を使います。smart_search にプロフィールのスキルを渡さないでください。レコメンダーはすでにプロフィールを把握しています。デフォルトのモードは best_match です。これらの検索結果を返す際は、Most Recent も利用可能であることを必ず伝え、ユーザーが新しい仕事を求めた場合は mode: most_recent に切り替えてください。日付フィルター(days_posted、または from_date / to_date)は most_recent にのみ適用されます。action search では日付で絞り込めません。検索結果の行には connects_cost が含まれないため、ユーザーが特定の求人を開いたときに action get から確認してください。applied が true の結果は、このフリーランサーがすでに応募済みであることを意味します。再応募を勧めないでください。
  3. 回答に含まれる場合は、正確なタイトル、業務範囲、予算、必須スキル、クライアントの希望条件、スクリーニングの質問、応募に必要な Connects の費用を提示してください。
  4. 求人の client.rating は、他のフリーランサーがクライアントと仕事をした後に付けた平均評価であり、クライアントがフリーランサーに付けた評価ではありません。応募するかどうかをユーザーが判断している場合は、低い評価を伝え、独自の解釈を加えず、レスポンスの client_rating_basis に示された説明を伝えてください。
  5. 検索結果に行がない場合は、empty_reason を確認し、その意味を伝えてください。マーケットプレイス全体に求人がないと報告してはいけません。no_personalization の場合は、action search を使ってマーケットプレイス全体を検索してください。empty_reason がない場合は、指定された条件に一致するものがなかったとだけ伝えてください。上流の制限がある場合も同じ結果になるため、どちらかだと断定しないでください。

既存の招待や提案文を確認する

提案文の作成前に確認してください。Upwork は上流での重複応募を拒否するため、この確認を省くとユーザーの手間を無駄にし、サーバーエラーのように見える可能性があります。

  • list_freelancer_proposals を action invitations で呼び出します。求人が招待経由の場合は、manage_proposals の action accept_invitation または decline_invitation で応答してください。action create は招待なしの応募にのみ使うため、使用しないでください。
  • 同じ求人に対する既存の提案文や契約がないか確認するため、list_freelancer_proposals を action list で呼び出します。どちらの list アクションにもデフォルトのステータスフィルターが適用されるため、特定の状態を確認する場合はステータスを明示的に設定してください。
  • 提案文のステータスが Accepted の場合、提案文が送信され、検証されたことを意味します。クライアントがフリーランサーを採用したという意味ではありません。平易な意味を示す付随の status_label を優先し、ユーザーにはその内容を伝えてください。

実際の証拠を集める

ツールから返された情報のみを使用してください。クライアント、称賛、指標、資格、成果を捏造しないでください。

  • TALENT アカウントでは、スキル、概要、職歴、プロフィールのシグナルには get_profile の get アクションを、ポートフォリオのプロジェクトと資格には list_highlights アクションを、Connects には connects_balance アクションを使用してください。connects_balance の balance は Connects ウォレットの残高です。product_credits がある場合、そのクレジットは指定された製品でのみ使用でき、この残高には含まれません。別途報告してください。
  • 自分のプロフィールの読み取り結果には、Connects を獲得するタスクと有効な Freelancer Plus オファーを含む promotions も返されます。応募に関係する場合はこれらに触れ、オファー URL は返されたとおりに正確に共有してください。promotions に error が含まれている場合は、オファーがないと断言せず、照会に失敗したと伝えてください。
  • Upwork がこのアカウントによる提案書の提出を許可していないために create が拒否された場合は、その理由を伝え、原因だと決めつけずにプロフィールまたはダッシュボードで identity_verification を確認してください。ユーザーが解決したと伝えるまで再試行しないでください。
  • FL_AGENCY アカウントでは、エージェンシーの実績情報に get_agency の get_profile アクションを、Connects には get_freelancer_financials の connects_balance アクションを使用してください。エージェンシーアカウントでは get_profile は利用できません。
  • 過去に提出した提案、オファーを受けた提案、または採用に至った提案を確認し、文章の参考にするには list_freelancer_proposals を使用してください。

提案書を作成する

  1. クライアントの主な成果目標を特定し、最も適合する実績を選んでください。作成を始める前に、find_jobs の get アクションから client_feedback を、または招待状から user.name を確認してください。レビューまたは招待状にクライアントの担当者名やプロジェクト名が記載されている場合は、その担当者に呼びかけ、該当プロジェクトに触れて書き出してください。レビューにも招待状にも記載されていない名前を決して捏造しないでください。
  2. 簡潔なカバーレターを作成してください。ツールが最大文字数を適用し、その上限を報告します。ユーザーが上限を超える文章を提示した場合、切り詰めて送信するのではなく、短くするよう依頼してください。
    • 案件に特化した成果目標から書き始めてください。
    • 実際の事例を1つか2つ取り上げ、依頼された業務との関連を示してください。
    • 実践的な進め方、または具体的な最初のステップを説明してください。
    • 重要なリスクや制約、およびスクリーニングの質問すべてに個別に回答してください。
    • 有益な次のステップを提案して締めくくってください。
  3. 案件で別の言語が必要な場合は、英語とその言語の両方で提案書を作成してください。
  4. 添付ファイルについては、質問を無視せず、必ず添付を提案してください。ローカルファイルの場合、通常の応募では proposals コンテキストで、クライアントからの招待を承諾するときは invitation コンテキストでアップロードを開始してください。インラインアップロードでは、保存済みの file_uid 値が直接返されます。フォールバック URL によるアップロードでは、ステータスが ok になるまでポーリングしてから、confirm_attachment_upload で確定してください。取得した file_uid 値を提案書に渡してください。ファイルを添付できるのは、アップロードしたコンテキストと同じコンテキストに限られます。コンテキストが一致しない場合は拒否されるため、ファイルを再アップロードする必要があります。TALENT アカウントの場合は、get_profile の list_highlights アクションから関連するポートフォリオのプロジェクトや資格も提示し、選択した ID を certificate_ids および portfolio_project_ids として渡してください。FL_AGENCY アカウントでは list_highlights を呼び出さず、代わりに get_agency からすでに返されているエージェンシーのプロフィール情報を使用してください。
  5. ユーザーが承認した入札額をそのまま使用し、charged_amount には数値として渡してください。市場価格に置き換えたり、金銭条件を推測したりしないでください。

提案の送信

  1. カバーレター、スクリーニングの回答、入札額、添付ファイル、アピールポイントを要約し、書き込み可能な最初の呼び出しの前に、明示的な確認を得てください。
  2. manage_proposals のアクション create を呼び出します。求人の参照には数値の求人 ID を指定してください。~02… の暗号文は指定しないでください。アクション get は暗号文または求人 URL を受け取り、ここで渡す数値 ID を返します。エージェンシーの場合は、チームのパラメーターを省略してください。エージェンシーに複数のチームがある場合、エラーにチーム名が示されるので、ユーザーにどれを選ぶか確認します。
  3. 返されたプレビューを提示し、必ず以下を明示してください。
    • 必要な Connects 数と現在の残高。
    • アカウントから応募できるかどうか。
    • 満たしていない優遇資格、または資格チェックを利用できなかったこと。
    • 必須のスクリーニング回答。
    • プレビューに他の入札者の入札情報が表示されている場合に限り、競合する入札と他の応募者の入札額。情報を利用できないと表示された場合はその旨を伝え、金額を推測しないでください。
    • boost.suggested_bid がある場合は、固有の注記としてのみ提示し、応募者に対する割合として言い換えないでください。
    • ブーストが利用可能かどうかと Connects の残高。
  4. ブーストするかどうか、およびブースト額はユーザーに決めてもらいます。ブーストが利用できない場合は提案せず、boost.reason を伝えてください。それ以外の場合は、boost.recommendation が skip でない限り提案してください。プレビューに記載された上限の範囲内に収め、ユーザーが承認した額のみを boost_connects として適用してください。送信後、このツールでは入札額を編集または取り消しできません。承認済みの入札額では有料枠を確保できなくなったと確認時に報告された場合、送信は行われていません。新たに上回る必要がある入札額を提示し、改めて金額の承認を得てください。
  5. 内容または条件に変更があった場合は、修正後の値でアクション create を再度呼び出してください。新しいプレビューが保留中のプレビューに置き換わります。
  6. 送信について、別途、明示的な承認を得てから、プレビューで返された type と、返された preview_id のみを指定して、アクション confirm で confirm_preview を呼び出します。新しい応募と招待への返信では返されるタイプが異なるため、決めつけず、返されたものを使用してください。
  7. 確認のため、フリーランサーの提案をステータス Pending で一覧表示します。ユーザーがブーストした場合は、list_freelancer_proposals のアクション get を読み取り、terms.connectsBid を報告してください。これは Upwork に記録された入札額で、送信した金額と異なる場合があり、このツールでは変更できません。

Connects が不足している場合は、その旨を明確に伝え、ユーザーが Connects を追加してから再試行できるようにしてください。失敗を取り返しのつかないものとして説明しないでください。

サーバーから初回のマーケットプレイス安全ポリシーの確認が求められた場合は、その内容をユーザーに提示してください。ユーザーが明示的に同意した後に限り、manage_proposals のアクション acknowledge_policy を呼び出し、中断されたアクションを再試行してください。

クライアントへのメッセージ送信

フリーランサーは提案のスレッドを開いたり、提案に関する最初のメッセージを送信したりできません。既存の会話に返信するには、list_freelancer_proposals のアクション get_room、または get_messages のアクション find_room に context_type=proposal を指定し、その後 send_message のアクション send を使用します。まだスレッドがない場合は、クライアントから先にメッセージを送る必要があるとユーザーに伝えてください。find_room で見つからない場合は、会話が始まるまでその結果は変わりません。直接契約の提案を送れるのは、クライアントが開始した会話からのみです。

品質ルール

  • 提案はすべて、個々の求人に合わせて作成してください。求人をまたいでカバーレターを使い回さないでください。
  • 形容詞や定型文より、具体的な根拠を優先してください。
  • タイトル、識別子、クライアントが作成した未信頼テキストについては、サーバーの提示ルールに従ってください。

ツールの検出とコンパクトモードについては、upwork-workflows スキルに従ってください。

コメント