chasa について
docstocは、フリーランサー向けに未払い請求書の情報からフォローアップメールを作成し、遅延日数に応じて文面の調子を調整します。メールは送信せず、草稿をメールアプリにコピーして使います。MCPの読み取り専用ツールは公開され、草稿作成にはセッションまたはAPIキーが必要です。
主な機能
- 01延滞期間に応じた督促メールの草稿
- 02柔らかめ・強め・短めへの書き換え
- 03CSVから請求書を取り込み
- 04請求書の経過日数ボードでの管理
- 05公開のMCP読み取り専用ツール
活用シーン
- 01未払い請求書のリマインダー作成
- 02延滞が続く請求書への強めの連絡準備
- 03CSVファイルから請求書データを読み込み
- 04経過日数ボードで未払い請求書を確認
MCP 対応
https://api.docstoc.io/mcp でMCPエンドポイントを提供します。読み取り専用ツールは公開され、draft_chase_emailツールにはセッションまたはAPIキーが必要です。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://api.chasa.io/mcpclaude mcp add --transport http docracy1-chasa https://api.chasa.io/mcp{"mcpServers":{"docracy1-chasa":{"type":"http","url":"https://api.chasa.io/mcp"}}}Cursor で開く{"servers":{"docracy1-chasa":{"type":"http","url":"https://api.chasa.io/mcp"}}}VS Code で開く{"mcpServers":{"docracy1-chasa":{"type":"http","url":"https://api.chasa.io/mcp"}}}{"mcpServers":{"docracy1-chasa":{"serverUrl":"https://api.chasa.io/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
docstoc
未払いの請求書を貼り付けると、滞納日数に応じた適切なトーンの督促メールが作成されます。
docstocがクライアントにメールを送信することはありません — Gmail、Outlook、または Apple Mail にコピーして使える督促メールの下書きを作成します。トーンは滞納日数に応じて変化します(友好的 → 強め → 直接的)。
ライブ URL
| URL | |
|---|---|
| マーケティング | https://docstoc.io/ |
| アプリ(ツール) | https://docstoc.io/app/ |
| ログイン | https://docstoc.io/app/login |
| コネクター | https://docstoc.io/app/connector |
| 管理 | https://docstoc.io/app/admin |
| API | https://api.docstoc.io |
| MCP | https://api.docstoc.io/mcp — 読み取り専用ツールは公開されています。draft_chase_email にはセッションまたは API キーが必要です |
Worker の PUBLIC_APP_URL は https://docstoc.io です(マジックリンク、OAuth コールバック、Stripe のリターン URL、ダイジェストリンク)。
旧ドメインの chasa.io / api.chasa.io は docstoc に 301 リダイレクトされます(Pages の _middleware.ts と Worker のリダイレクト)。プロバイダーコンソールの URI については、scripts/oauth-redirect-uris.md を参照してください。
本番公開チェックリスト
- Cloudflare Pages プロジェクト
chasaにdocstoc.ioを追加し、Active になるまで待ちます。 www.docstoc.io→ ルートドメイン:apps/web/functions/_middleware.tsが処理します(web を再デプロイ)。chasa.io/www.chasa.io→docstoc.io:同じミドルウェアが処理します。api.chasa.io→api.docstoc.io:apps/worker/src/lib/legacyHostRedirect.tsの Worker ミドルウェアが処理します。api.docstoc.ioに OAuth リダイレクト URI を登録します —scripts/oauth-redirect-uris.mdを参照してください。- DMARC の設定は任意です:
./scripts/dmarc-remove-rua.sh(_dmarc.docstoc.ioからrua=を削除します)。 ./scripts/go-live-verify.shを実行します。
順序は問いません。ブラウザー向けリンクは、リクエストが届いたオリジンから生成されるため(下記の「アプリのオリジン解決」を参照)、どちらを先にデプロイしても pages.dev と chasa.io の両方が引き続き動作します。
アプリのオリジン解決
マジックリンク、ログイン後のリダイレクト、Stripe のリターン URL、チームへの招待には、PUBLIC_APP_URL ではなく、ユーザーが実際にアクセスしているオリジンが使われます。Pages の /api プロキシはこれを X-Docstoc-App-Origin として転送し、Worker は lib/appUrl.ts の許可リスト(PUBLIC_APP_URL、docstoc.io、www.docstoc.io、旧 chasa.io ホスト、*.pages.dev のプロジェクト/プレビューホスト、localhost)に一致する場合に限り、その値を受け入れます。これにより、プレビューのデプロイが独立して動作し、ドメインの切り替えをダウンタイムなしで行えます。
信頼できるオリジンを伴わずに届くリクエスト — api.docstoc.io に直接届くプロバイダーの OAuth コールバックと、ダイジェスト cron — は、引き続き PUBLIC_APP_URL にフォールバックします。
製品仕様
プランと料金
| プラン | 料金 | AI 下書き | チームの席数 | 備考 |
|---|---|---|---|---|
| Free | $0 | 月 5 件(サーバー側で適用) | 1(オーナーのみ) | 下書きの作成にサインアップは不要。アップグレードするにはサインイン |
| Pro | 月額 $14.99 | 無制限 | 5(オーナー+招待ユーザー) | ワークスペースの定額料金 — 席ごとの料金ではありません。最も人気 |
| Business | 月額 $39.99 | 無制限 | 20 | スマート返信、リスクスコア、督促状、証明書のブランディング、SSL の自動化 |
Stripe の価格 ID は apps/worker/wrangler.toml にあり、STRIPE_PRICE_SOLO(Pro に対応)、STRIPE_PRICE_PRO / STRIPE_PRICE_ENTERPRISE(Business に対応。いずれもシークレットではありません)として定義されています。請求ポータルと Webhook が accounts.plan と is_paid を更新します。
プラン別機能一覧
| 機能 | Free | Pro+ |
|---|---|---|
| AI による督促メールの下書き(延滞日数に応じたトーン) | 5 件/月 | 無制限 |
15 種類以上のコピー&ペースト可能なメールテンプレート(/free-templates/) | ✓ | ✓ |
| 請求書の CSV アップロード(ツール) | ✓ | ✓ |
| 請求書の手動リスト+経過日数ボード(ツール) | ✓ | ✓ |
| より柔らかく/強めに/短く書き換え | — | ✓ |
| お礼、クライアントへの返信、3 ステップの連続メール、SMS/WhatsApp の下書き | — | ✓ |
| クライアント CRM+連絡先メモ | — | ✓ |
| 経過日数の同期(ツール → サーバー) | — | ✓ |
| リマインダーカレンダー(予定されている督促日) | — | ✓ |
| 督促タイムライン+送信済み/支払い済みのマーク | — | ✓ |
| 毎日の督促ダイジェストメール(米国東部時間午前 9 時、承認後に送信) | — | ✓ |
| リマインダーのスヌーズ+支払い済みのマーク後に停止 | — | ✓ |
| トラッキング対象の HTML でのメール開封/クリック追跡 | — | ✓ |
| デフォルトの支払いリンク(Stripe、PayPal、Venmo、Zelle…) | — | ✓ |
| Zapier テンプレート(FreshBooks、Wave、Zoho Books) | — | ✓ |
| スマート返信分類器+支払い予定日の検出 | — | Business |
| クライアントの支払いリスクスコア | — | Business |
| 正式な請求書+回収証拠パック | — | Business |
| カスタム証明書のブランディング+SSL の自動化 | — | Business |
| カスタムブランディング(ロゴ、延滞手数料のヒント) | — | ✓(管理者ロール) |
アウトバウンド Webhook(chase.drafted、chase.sent、…)+HMAC 署名 | — | ✓(管理者) |
| クリック追跡(トラッキング対象のコピー用 HTML) | — | ✓ |
| チームへの招待(管理者/メンバーロール) | — | ✓ |
| クラウドストレージからの PDF インポート(Dropbox、OneDrive、Box) | — | ✓ |
| QuickBooks Online+Xero の延滞請求書インポート | — | ✓ |
HTTP API+API キー(/api/v1/chase/draft) | — | ✓ |
| API キー経由の Zapier/Make | — | ✓ |
ワークスペースのロール: 所有者は常に管理者です。招待されたメンバーは Pro+ の機能を使用できます。管理者限定の操作:ブランディング、Webhook、コネクターの OAuth 接続/インポート、API キーの CRUD、チームへの招待。
アプリのルート(/app/*)
| ルート | 目的 |
|---|---|
/ | ツール — 請求書リスト、AI による下書き、CSV/PDF インポート、複数選択による一括操作 |
/login | マジックリンクログイン+Cloudflare Turnstile |
/account | プラン、請求ポータル、支払いリンク |
/team | メンバーの招待、ロール(Pro+) |
/clients | クライアント CRM(Pro+) |
/branding | ロゴ+延滞手数料のヒント(ワークスペース管理者) |
/webhooks | アウトバウンド Webhook URL(ワークスペース管理者) |
/connector | クラウドストレージ+QBO/Xero OAuth+API キー |
/admin | 内部管理ダッシュボード(別個の Cookie) |
/login と /admin を除くすべてのアプリルートでは、セッションが必要です。認証されていないユーザーは /login にリダイレクトされます。SPA の分析機能には Cookie の同意が必要です(GDPR)。
i18n(EN+ES)
Docracy と同じパスを使用します。apps/web/app/src/lib/i18n/ に軽量なカタログを配置しています(i18next は使用しません)。ログイン画面、サイドバー、「その他」シートに LocaleProvider と EN|ES 切り替え機能があります。P1 ではログイン画面/シェル/ウェルカム画面に対応しています。次に、アプリの残りの部分へカタログを拡張します。設定は chasa_locale に保存されます。マーケティング HTML は、後の作業まで英語のままです。
マーケティングと SEO(apps/web/public/ 内の静的 HTML)
- 価格、FAQ の JSON-LD、競合他社との比較を含むホームページ
- SEO ランディングページ:
/invoice-follow-up、/payment-reminder、/overdue-invoice、/chase-invoices、/freelancer-invoice-follow-up /features/(インデックス、AI のトーン、テンプレート)、/docs/、/ai、/about/blog/(3 記事+動的なpost.html)/free-templates/— 自動生成されたテンプレートページ 15 件+インデックス- 法的ページ:
/privacy、/terms、/imprint sitemap.xml、robots.txt、404.html、Cookie 同意、スクロール深度分析- セルフホストフォント(Google Fonts は不使用);
_headersによる CSP の適用
apps/web/scripts/generate-free-templates.mjs を編集した後、無料テンプレートを再生成します:
npm run generate:templates --workspace apps/web
アーキテクチャ
モノレポ(npm workspaces):
| パッケージ | スタック | デプロイ先 |
|---|---|---|
apps/web | React 18 + Vite + React Router | Cloudflare Pages(chasa) |
apps/worker | Hono + Cloudflare Workers + D1 + Workers AI | api.chasa.io |
apps/web/
app/ React SPA (/app/*) — lazy-loaded routes, AccountProvider
src/pages/tool/ Tool module (components, CSV import, aging sync)
src/pages/connector/ Connector module (OAuth, API keys)
public/ Static marketing site + fonts + _headers
scripts/ copy-fonts, generate-free-templates, validate-static-html
apps/worker/
src/routes/ HTTP handlers (auth, billing, emails, aging, mcp, …)
src/lib/ auth, ai, billing, schemas (Zod), rate limits, webhooks
migrations/ D1 SQL (0001–0011)
データ: Cloudflare D1(chasa-db)。OAuth トークンは保存時に暗号化されます(AES-GCM、TOKEN_SECRET)。セッションは sessions テーブルに保存されます。マジックリンクは一度だけ使用できます(アトミックに消費)。
AI: Cloudflare Workers AI(@cf/meta/llama-3.1-8b-instruct-fp8)。インジェクションを軽減するため、プロンプトではユーザーコンテンツを区切り文字で囲みます。
API サーフェス(worker)
| プレフィックス | 目的 |
|---|---|
/api/auth | マジックリンクのリクエスト/検証、ログアウト、Turnstile 設定 |
/api/account | プロフィール、ブランディング |
/api(emails) | generate-email、rewrite-email、generate-thank-you、generate-reply、generate-sequence、generate-sms |
/api/billing | Stripe のチェックアウト、ポータル、Webhook |
/api/aging | エイジングボードの CRUD とアトミックな一括同期 |
/api/clients | クライアント CRM |
/api/reminders | 督促リマインダーのカレンダー |
/api/team | ワークスペースのメンバーと招待 |
/api/webhooks | アウトバウンド Webhook の CRUD |
/api/connector | レガシー API キーの CRUD |
/api/account/connectors | クラウドおよび会計サービスの OAuth |
/api/tracking | トラッキング対象のコピーとクリック統計 |
/api/analytics | イベントのトラッキングとページビューの集計 |
/api/v1/chase/draft | 公開 HTTP API(Bearer chasa_… キー) |
/api/admin | 管理者ダッシュボード API |
/api/blog | D1 の公開ブログ記事 |
/api/csp-report | CSP 違反レポート |
/mcp | MCP JSON-RPC(下書きツール、テンプレート一覧) |
/api/t/:id | クリック時のリダイレクト(許可リストに登録された URL のみ) |
セキュリティとコンプライアンス(実装済み)
- 無料プランの利用上限: 月 5 件の AI 下書き。クライアント側ではなく D1(
ai_usage)で適用 - レート制限: AI 下書き、MCP、アナリティクス、管理者ログイン(D1 バケット)
- Turnstile: シークレットが設定されている場合、本番 HTTPS ではフェイルクローズ。メールアドレスごとにマジックリンクの送信間隔を 60 秒に制限
- HKDF トークン用途: セッション、マジックリンク、API キー、管理者、招待、OAuth state、Webhook 署名に個別のキーを使用(検索時はレガシーハッシュにもフォールバック)
- セッションローテーション: マジックリンクでのログイン時に以前のセッションを無効化。管理者ログイン時に管理者セッションをクリア
- セッションクリーンアップ: 毎日の cron で期限切れのセッション、マジックリンク、レート制限バケットを削除
- RBAC: ブランディング、Webhook、コネクター OAuth、API キー、チーム招待にはワークスペース管理者権限が必要
- 入力検証: すべての JSON API ルート(auth、emails、clients、team、webhooks、billing、admin、MCP の draft args)で Zod スキーマを使用
- Stripe Webhook: イベント ID による重複排除(
stripe_events) - アウトバウンド Webhook:
X-Chasa-Signature: sha256=…HMAC - クリックトラッキング: リダイレクト先は、トラッキング対象のメール作成時に保存された URL のみに限定
- Webhook URL: SSRF チェック(localhost/プライベート IP を拒否)
- OAuth state: タイミングセーフな HMAC 比較
- CSP: Pages でポリシーを強制。
report-uri→/api/csp-report - GDPR: Cookie の同意を SPA アナリティクスの利用条件とし、ページビューに訪問者 ID を付与せず、集計のみ実施
- シークレット: コミット禁止 —
wrangler secret put …
ローカル開発
npm install
npm run dev:worker # wrangler dev --local, http://127.0.0.1:8787
npm run dev:web # vite, http://localhost:5173 (proxies /api to worker)
RESEND_API_KEY がない場合、マジックリンクは worker のコンソールに出力されます。URL をコピーしてブラウザーで開いてください。
品質チェック
npm run lint # ESLint (web app + worker)
npm run test # Vitest (schemas, crypto, dates)
npm run typecheck # tsc worker + vite build web
CI(.github/workflows/ci.yml)はすべての PR で lint → test → 静的 HTML 検証 → typecheck を実行します。CLOUDFLARE_API_TOKEN が設定されている場合、main への push 時に worker と web を自動デプロイします。
手動デプロイ
npm run deploy:worker
npm run deploy:web # builds (copies fonts) then pages deploy
スキーマ変更後:
cd apps/worker
wrangler d1 migrations apply chasa-db --local # dev
wrangler d1 migrations apply chasa-db --remote # production
マイグレーション 0001~0011 には、プラン、管理者/アナリティクス、ブランディング、Webhook、API キー、クラウドコネクター、クライアント/エイジング、パリティ機能、セキュリティ強化(レート制限、AI 利用状況、Stripe の冪等性、トラッキングリンクの許可リスト)が含まれます。
Cloudflare Turnstile(ボット対策)
/api/auth/request と管理者ログインを保護します。
- Cloudflare Dashboard → Turnstile → Add widget
- ホスト名:
chasa-71s.pages.dev、chasa.io、localhost - サイトキー →
wrangler.tomlの[vars]にあるTURNSTILE_SITE_KEY - シークレット →
wrangler secret put TURNSTILE_SECRET_KEY - Worker を再デプロイします。ログイン UI は
GET /api/auth/configから設定を読み込みます。
ローカル/キー未設定の場合: コンソールに警告を表示し、検証をバイパスします。テストキー:
| 値 | |
|---|---|
| サイトキー | 1x00000000000000000000AA |
| シークレットキー | 1x0000000000000000000000000000000AA |
クラウドの初回セットアップ
-
cd apps/worker && wrangler d1 create chasa-db—database_idをwrangler.tomlに貼り付けます -
wrangler d1 migrations apply chasa-db --remote -
Stripe(まずテストモードで): 定期購入の Price を2つ作成します(Pro $14.99、Business $39.99)。
price_…ID をwrangler.tomlにコピーします:STRIPE_PRICE_SOLO、STRIPE_PRICE_PRO、STRIPE_PRICE_ENTERPRISE
-
wrangler secret put TOKEN_SECRET—openssl rand -hex 32 -
wrangler secret put STRIPE_SECRET_KEY(まずテストキーを設定) -
Stripe webhook →
https://api.chasa.io/api/billing/webhook— イベント:checkout.session.completed、customer.subscription.deleted→wrangler secret put STRIPE_WEBHOOK_SECRET -
wrangler secret put RESEND_API_KEY— Resend で送信ドメインを検証します -
Turnstile — 上記を参照してください
-
wrangler secret put ADMIN_PASSWORD—/app/admin用 9a. AI Document Generator(任意、一般公開のマーケティングツール): Google AI Studio → 無料の API キーを作成 →wrangler secret put GEMINI_API_KEY。無料枠にはレート制限があり、Worker でも IP ごとの制限と Turnstile を適用します。apps/worker/src/lib/geminiDocGen.tsを参照してください。 -
クラウドストレージ OAuth(任意、Pro 以上):
プロバイダー リダイレクト URI Dropbox https://api.docstoc.io/api/account/connectors/dropbox/callbackOneDrive https://api.docstoc.io/api/account/connectors/onedrive/callbackBox https://api.docstoc.io/api/account/connectors/box/callbackGoogle https://api.docstoc.io/api/account/connectors/google/callbackGoogle Sign-In のリダイレクト先:
https://api.docstoc.io/api/auth/google/callbackプロバイダーごとの手順:
scripts/connectors-docstoc-setup.mdwrangler secret put DROPBOX_CLIENT_ID wrangler secret put DROPBOX_CLIENT_SECRET wrangler secret put ONEDRIVE_CLIENT_ID wrangler secret put ONEDRIVE_CLIENT_SECRET wrangler secret put BOX_CLIENT_ID wrangler secret put BOX_CLIENT_SECRET wrangler secret put GOOGLE_LOGIN_CLIENT_SECRET wrangler secret put GOOGLE_INTEGRATIONS_CLIENT_SECRET -
QuickBooks Online + Xero(任意、Pro 以上):
プロバイダー リダイレクト URI QBO https://api.docstoc.io/api/account/connectors/quickbooks/callbackXero https://api.docstoc.io/api/account/connectors/xero/callbackコンソールでの手順は
scripts/connectors-docstoc-setup.mdを参照してください。wrangler secret put QBO_CLIENT_ID wrangler secret put QBO_CLIENT_SECRET wrangler secret put XERO_CLIENT_ID wrangler secret put XERO_CLIENT_SECRET -
Cloudflare Pages プロジェクト
chasaとカスタムドメインchasa.ioを設定します。Worker のカスタムドメインはapi.chasa.ioです -
エンドツーエンドのテストモードでのスモークテストが完了してから、Stripe の 本番キー/価格/Webhook に切り替えます
ローカルのシークレット(apps/worker/.dev.vars、gitignore 対象)
TOKEN_SECRET=dev-secret-not-for-prod
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
ADMIN_PASSWORD=your-dev-admin-password
# Optional Turnstile test keys (or omit to bypass):
# TURNSTILE_SECRET_KEY=1x0000000000000000000000000000000AA
# Optional — AI Document Generator tool returns 503 until set:
# GEMINI_API_KEY=your-google-ai-studio-key
ローカル Webhook 用の Stripe CLI:
stripe listen --forward-to localhost:8787/api/billing/webhook
ステージング環境
wrangler deploy --env staging
別の D1(chasa-db-staging)を使用します。作成し、ID を wrangler.toml の [env.staging] に貼り付けてください。
SEO 公開前チェックリスト
自動化(ビルド)
generate-seo.mjs は npm run build のたびに実行され、次のファイルを生成します。
sitemap.xml— すべての公開ページ(マーケティング、テンプレート、ブログ)robots.txt— クロールルールとサイトマップの URLblog/feed.xml— ブログ記事の RSS{indexnow-key}.txt— Bing/Yandex 用の IndexNow キーファイル- 環境変数が設定されている場合に
index.html/ai.htmlに検証用メタ情報を追加します(下記を参照)
プレスキットは /press にあります。ロゴ、定型文、被リンク用の推奨アンカーテキストを掲載しています。
Google Search Console(初回のみ)
-
Search Console で
https://chasa.ioのプロパティを追加します -
HTML tag による確認を選択し、
content="…"の値をコピーします -
トークンを使って再ビルドします。
GOOGLE_SITE_VERIFICATION=your_token_here npm run build --workspace apps/web npm run deploy:webまたは Cloudflare で DNS TXT を使用します(再ビルドは不要です)。
-
サイトマップ
https://chasa.io/sitemap.xmlを送信します -
/、/app/、/payment-reminder、/free-templates/で URL 検査を行います
Bing は任意です。BING_SITE_VERIFICATION=… は Google と同様に設定します。
デプロイ後、IndexNow(Bing)に通知します。
curl -X POST https://api.indexnow.org/indexnow \
-H 'Content-Type: application/json' \
-d '{"host":"chasa.io","key":"chasa-indexnow-20260727","keyLocation":"https://chasa.io/chasa-indexnow-20260727.txt","urlList":["https://chasa.io/sitemap.xml"]}'
被リンク(創業者向け — /press を使用)
サイト側の対応は完了しています。すべてのページにソーシャルリンクと sameAs スキーマを追加し、ブログからランディングページへの内部リンク、RSS、llms.txt を用意しました。
手動での対応が必要です(プレスキットからコピーしてください)。
- LinkedIn の会社ページ — ウェブサイト欄と、
/app/またはブログ記事へのリンクを含むローンチ投稿 - X @DocstocHQ — ローンチ投稿をピン留め
- 準備ができたら Product Hunt/Indie Hackers に掲載
- RELACON GmbH のウェブサイトから
chasa.ioへの相互リンク - フリーランサー向けコミュニティを3〜5か所 — ホームページだけでなく、
/blog/の記事または/free-templates/へのリンク - メール署名に
chasa.ioを追加
事業者情報
docstoc は、オーストリアのウィーンにある RELACON GmbH の製品です。/imprint と /privacy をご覧ください。
お問い合わせ:[email protected]
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。