Chasa

io.github.docracy1由 GitHub 帳號 docracy1 發布v1.0.0更新於 Oct 24, 2026

AI invoice follow-up emails for freelancers. Draft-only, never sends for you.

已驗證Streamable HTTP可網頁執行效率與工作流商業與電商

概覽

AI 產生的概覽

為自由工作者的逾期發票起草 AI 催款信件,語氣隨逾期天數升級,只產生草稿、絕不代為寄送。

可以做什麼
  • 為未付款發票起草催款信件,語氣隨逾期天數由友善逐步升級為堅定、直接
  • 列出並重複使用可直接複製的信件範本
  • 只產出草稿,由你複製到 Gmail、Outlook 或 Apple Mail 寄出
  • 唯讀工具公開可用,起草需要登入工作階段或 API 金鑰
適用情境
適合需要協助撰寫催款信件、又不想把寄信權限交出去的自由工作者與小型工作室。當你想依發票逾期程度取得語氣合適的草稿時最有用。
執行需求
遠端 MCP 端點位於 api.chasa.io(舊網域會重新導向至 docstoc)。唯讀工具公開,起草工具需要登入工作階段或 API 金鑰。免費方案每月 5 次 AI 草稿,付費方案按月計費。
安裝前請注意
起草需要帳號工作階段或 API 金鑰,應視為敏感憑證。此服務為付費產品,按月訂閱並透過 Stripe 計費。它本身不寄信,但草稿可能存放在伺服器端,免費額度也有限制。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Chasa,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.docracy1%2Fchasa/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "chasa": {
      "type": "http",
      "url": "https://api.chasa.io/mcp"
    }
  }
}

README

docstoc

Paste your unpaid invoices. Get the follow-up email already written, in the right tone for how late it is.

docstoc never emails your clients for you — it drafts follow-ups you copy into Gmail, Outlook, or Apple Mail. Tone escalates with days overdue (friendly → firm → direct).

Live URLs

URL
Marketinghttps://docstoc.io/
App (Tool)https://docstoc.io/app/
Loginhttps://docstoc.io/app/login
Connectorhttps://docstoc.io/app/connector
Adminhttps://docstoc.io/app/admin
APIhttps://api.docstoc.io
MCPhttps://api.docstoc.io/mcp — read-only tools public; draft_chase_email requires session or API key

Worker PUBLIC_APP_URL is https://docstoc.io (magic links, OAuth callbacks, Stripe return URLs, digest links).

Legacy chasa.io / api.chasa.io 301 to docstoc (Pages _middleware.ts + worker redirect). See scripts/oauth-redirect-uris.md for provider console URIs.

Go-live checklist

  1. Attach docstoc.io on Cloudflare Pages project chasa and wait for Active.
  2. www.docstoc.io → apex: handled by apps/web/functions/_middleware.ts (redeploy web).
  3. chasa.io / www.chasa.io → docstoc.io: same middleware.
  4. api.chasa.io → api.docstoc.io: worker middleware in apps/worker/src/lib/legacyHostRedirect.ts.
  5. Register OAuth redirect URIs on api.docstoc.io — see scripts/oauth-redirect-uris.md.
  6. Optional DMARC: ./scripts/dmarc-remove-rua.sh (removes rua= from _dmarc.docstoc.io).
  7. Run ./scripts/go-live-verify.sh.

The order does not matter: browser-facing links are built from the origin the request came in on (see “App origin resolution” below), so pages.dev and chasa.io both keep working whichever is deployed first.

App origin resolution

Magic links, post-login redirects, Stripe return URLs and team invites use the origin the user is actually on, not PUBLIC_APP_URL. The Pages /api proxy forwards it as X-Docstoc-App-Origin, and the worker honours it only if it matches lib/appUrl.ts's allowlist (PUBLIC_APP_URL, docstoc.io, www.docstoc.io, legacy chasa.io hosts, *.pages.dev project/preview hosts, localhost). This keeps preview deploys self-contained and makes the domain cutover zero-downtime.

Requests that arrive without a trusted origin — provider OAuth callbacks hitting api.docstoc.io directly, and the digest cron — still fall back to PUBLIC_APP_URL.


Product specs

Plans & pricing

PlanPriceAI draftsTeam seatsNotes
Free$05 / month (server-enforced)1 (owner only)No signup required for drafts; sign in to upgrade
Pro$14.99 / moUnlimited5 (owner + invites)Flat workspace fee — not per-seat; most popular
Business$39.99 / moUnlimited20Smart reply, risk score, demand letters, cert branding, SSL automation

Stripe price IDs live in apps/worker/wrangler.toml as STRIPE_PRICE_SOLO (maps to Pro), STRIPE_PRICE_PRO / STRIPE_PRICE_ENTERPRISE (map to Business; non-secret). Billing portal and webhooks update accounts.plan and is_paid.

Feature matrix (by plan)

FeatureFreePro+
AI chase email drafts (tone by days overdue)5/moUnlimited
15+ copy-paste email templates (/free-templates/)✓✓
CSV invoice upload (Tool)✓✓
Manual invoice list + aging board (Tool)✓✓
Rewrite softer / firmer / shorter—✓
Thank-you, reply-to-client, 3-step sequence, SMS/WhatsApp drafts—✓
Clients CRM + contact notes—✓
Aging sync (Tool → server)—✓
Reminder calendar (planned chase dates)—✓
Chase timeline + mark sent/paid—✓
Daily chase digest email (9 AM Eastern, approve-to-send)—✓
Reminder snooze + stop when marked paid—✓
Email open/click tracking on tracked HTML—✓
Default payment link (Stripe, PayPal, Venmo, Zelle…)—✓
Zapier templates (FreshBooks, Wave, Zoho Books)—✓
Smart reply classifier + promised pay date detection—Business
Client payment risk score—Business
Formal demand letter + collections evidence pack—Business
Custom certificate branding + SSL automation—Business
Custom branding (logo, late-fee hint)—✓ (admin role)
Outbound webhooks (chase.drafted, chase.sent, …) + HMAC signatures—✓ (admin)
Click tracking (tracked copy HTML)—✓
Team invites (admin / member roles)—✓
Cloud storage PDF import (Dropbox, OneDrive, Box)—✓
QuickBooks Online + Xero overdue import—✓
HTTP API + API keys (/api/v1/chase/draft)—✓
Zapier / Make via API key—✓

Workspace roles: owner is always admin. Invited members can use Pro+ features; admin-only actions: branding, webhooks, connector OAuth connect/import, API key CRUD, team invites.

App routes (/app/*)

RoutePurpose
/Tool — invoice list, AI drafts, CSV/PDF import, multi-select batch
/loginMagic-link login + Cloudflare Turnstile
/accountPlan, billing portal, payment link
/teamInvite members, roles (Pro+)
/clientsClient CRM (Pro+)
/brandingLogo + late-fee hint (workspace admin)
/webhooksOutbound webhook URLs (workspace admin)
/connectorCloud storage + QBO/Xero OAuth + API keys
/adminInternal admin dashboard (separate cookie)

All app routes except /login and /admin require a session. Unauthenticated users redirect to /login. SPA analytics require cookie consent (GDPR).

i18n (EN + ES)

Same path as Docracy: lightweight catalogs in apps/web/app/src/lib/i18n/ (no i18next). LocaleProvider + EN|ES switcher on login, sidebar, and More sheet. P1 covers login / shell / welcome; expand catalogs for the rest of the app next. Preference stored as chasa_locale. Marketing HTML stays English until a later pass.

Marketing & SEO (static HTML in apps/web/public/)

  • Homepage with pricing, FAQ JSON-LD, competitor comparison
  • SEO landing pages: /invoice-follow-up, /payment-reminder, /overdue-invoice, /chase-invoices, /freelancer-invoice-follow-up
  • /features/ (index, AI tone, templates), /docs/, /ai, /about
  • /blog/ (3 articles + dynamic post.html)
  • /free-templates/ — 15 generated template pages + index
  • Legal: /privacy, /terms, /imprint
  • sitemap.xml, robots.txt, 404.html, cookie consent, scroll-depth analytics
  • Self-hosted fonts (no Google Fonts); enforcing CSP via _headers

Regenerate free templates after editing apps/web/scripts/generate-free-templates.mjs:

bash
npm run generate:templates --workspace apps/web

Architecture

Monorepo (npm workspaces):

PackageStackDeploy target
apps/webReact 18 + Vite + React RouterCloudflare Pages (chasa)
apps/workerHono + Cloudflare Workers + D1 + Workers AIapi.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)

Data: Cloudflare D1 (chasa-db). OAuth tokens encrypted at rest (AES-GCM, TOKEN_SECRET). Sessions in sessions table; magic links single-use (atomic consume).

AI: Cloudflare Workers AI (@cf/meta/llama-3.1-8b-instruct-fp8). Prompts wrap user content in delimiters to reduce injection.

API surface (worker)

PrefixPurpose
/api/authMagic link request/verify, logout, Turnstile config
/api/accountProfile, branding
/api (emails)generate-email, rewrite-email, generate-thank-you, generate-reply, generate-sequence, generate-sms
/api/billingStripe checkout, portal, webhook
/api/agingAging board CRUD + atomic batch sync
/api/clientsClient CRM
/api/remindersChase reminder calendar
/api/teamWorkspace members + invites
/api/webhooksOutbound webhook CRUD
/api/connectorLegacy API key CRUD
/api/account/connectorsCloud + accounting OAuth
/api/trackingTracked copy + click stats
/api/analyticsEvent track + pageview aggregates
/api/v1/chase/draftPublic HTTP API (Bearer chasa_… key)
/api/adminAdmin dashboard API
/api/blogPublic blog posts from D1
/api/csp-reportCSP violation reports
/mcpMCP JSON-RPC (draft tools, template list)
/api/t/:idClick redirect (allowlisted URLs only)

Security & compliance (implemented)

  • Free-tier quota: 5 AI drafts/month enforced in D1 (ai_usage), not client-side
  • Rate limits: AI drafts, MCP, analytics, admin login (D1 buckets)
  • Turnstile: fail-closed in production HTTPS when secret is set; 60s magic-link cooldown per email
  • HKDF token purposes: separate keys for session, magic-link, API key, admin, invite, OAuth state, webhook signing (legacy hash fallback on lookup)
  • Session rotation: prior sessions invalidated on magic-link login; admin sessions cleared on admin login
  • Session cleanup: daily cron purges expired sessions, magic links, rate-limit buckets
  • RBAC: workspace admin for branding, webhooks, connector OAuth, API keys, team invites
  • Input validation: Zod schemas on all JSON API routes (auth, emails, clients, team, webhooks, billing, admin, MCP draft args)
  • Stripe webhooks: event-id deduplication (stripe_events)
  • Outbound webhooks: X-Chasa-Signature: sha256=… HMAC
  • Click tracking: redirects only to URLs stored when the tracked email was created
  • Webhook URLs: SSRF checks (no localhost / private IPs)
  • OAuth state: timing-safe HMAC compare
  • CSP: enforcing policy on Pages with a nonce per page instead of 'unsafe-inline' (apps/web/functions/lib/csp.ts, applied in functions/_middleware.ts); report-uri → /api/csp-report. The API worker sends the same header set (apps/worker/src/lib/securityHeaders.ts).
  • GDPR: cookie consent gates SPA analytics; no visitor IDs on page views (aggregate only)
  • Secrets: never committed — wrangler secret put …

Local development

bash
npm installnpm run dev:worker   # wrangler dev --local, http://127.0.0.1:8787npm run dev:web      # vite, http://localhost:5173 (proxies /api to worker)

Without RESEND_API_KEY, magic links log to the worker console — copy the URL into your browser.

Quality checks

bash
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) runs lint → test → static HTML validation → typecheck on every PR; auto-deploys worker + web on push to main when CLOUDFLARE_API_TOKEN is set.

Deploy manually

bash
npm run deploy:workernpm run deploy:web    # builds (copies fonts) then pages deploy, pings IndexNow, submits the sitemap to Google

The Google step (apps/web/scripts/gsc-sitemap.mjs) needs the service account key at ~/.config/docstoc/gsc-service-account.json (never in the repo) and the service account as a Full user of the docstoc.io Search Console property. Without the key it prints a note and exits 0.

After schema changes:

bash
cd apps/workerwrangler d1 migrations apply chasa-db --local    # devwrangler d1 migrations apply chasa-db --remote   # production

Migrations 0001–0011 include plans, admin/analytics, branding, webhooks, API keys, cloud connectors, clients/aging, parity features, and security hardening (rate limits, AI usage, Stripe idempotency, tracking link allowlist).


Cloudflare Turnstile (bot protection)

Protects /api/auth/request and admin login.

  1. Cloudflare Dashboard → Turnstile → Add widget
  2. Hostnames: chasa-71s.pages.dev, chasa.io, localhost
  3. Site key → TURNSTILE_SITE_KEY in wrangler.toml [vars]
  4. Secret → wrangler secret put TURNSTILE_SECRET_KEY
  5. Redeploy worker. Login UI reads config from GET /api/auth/config.

Local / without keys: verification bypassed with console warning. Test keys:

Value
Site key1x00000000000000000000AA
Secret key1x0000000000000000000000000000000AA

One-time cloud setup

  1. cd apps/worker && wrangler d1 create chasa-db — paste database_id into wrangler.toml

  2. wrangler d1 migrations apply chasa-db --remote

  3. Stripe (test mode first): create two recurring Prices (Pro $14.99, Business $39.99). Copy price_… IDs into wrangler.toml:

    • STRIPE_PRICE_SOLO, STRIPE_PRICE_PRO, STRIPE_PRICE_ENTERPRISE
  4. wrangler secret put TOKEN_SECRET — openssl rand -hex 32

  5. wrangler secret put STRIPE_SECRET_KEY (test key first)

  6. Stripe webhook → https://api.chasa.io/api/billing/webhook — events: checkout.session.completed, customer.subscription.deleted → wrangler secret put STRIPE_WEBHOOK_SECRET

  7. wrangler secret put RESEND_API_KEY — verify sending domain in Resend

  8. Turnstile — see above

  9. wrangler secret put ADMIN_PASSWORD — for /app/admin 9a. AI Document Generator (optional, public marketing tool): Google AI Studio → create a free API key → wrangler secret put GEMINI_API_KEY. Free tier is rate-limited; the worker also enforces its own per-IP limit + Turnstile. See apps/worker/src/lib/geminiDocGen.ts.

  10. Cloud storage OAuth (optional, Pro+):

    ProviderRedirect URI
    Dropboxhttps://api.docstoc.io/api/account/connectors/dropbox/callback
    OneDrivehttps://api.docstoc.io/api/account/connectors/onedrive/callback
    Boxhttps://api.docstoc.io/api/account/connectors/box/callback
    Googlehttps://api.docstoc.io/api/account/connectors/google/callback

    Google Sign-In redirect: https://api.docstoc.io/api/auth/google/callback

    Step-by-step for each provider: scripts/connectors-docstoc-setup.md

    bash
    wrangler secret put DROPBOX_CLIENT_IDwrangler secret put DROPBOX_CLIENT_SECRETwrangler secret put ONEDRIVE_CLIENT_IDwrangler secret put ONEDRIVE_CLIENT_SECRETwrangler secret put BOX_CLIENT_IDwrangler secret put BOX_CLIENT_SECRETwrangler secret put GOOGLE_LOGIN_CLIENT_SECRETwrangler secret put GOOGLE_INTEGRATIONS_CLIENT_SECRET
  11. QuickBooks Online + Xero (optional, Pro+):

    ProviderRedirect URI
    QBOhttps://api.docstoc.io/api/account/connectors/quickbooks/callback
    Xerohttps://api.docstoc.io/api/account/connectors/xero/callback

    See scripts/connectors-docstoc-setup.md for console steps.

    bash
    wrangler secret put QBO_CLIENT_IDwrangler secret put QBO_CLIENT_SECRETwrangler secret put XERO_CLIENT_IDwrangler secret put XERO_CLIENT_SECRET
  12. Cloudflare Pages project chasa + custom domain chasa.io; Worker custom domain api.chasa.io

  13. Switch to Stripe live keys/prices/webhook only after end-to-end test-mode smoke test

Local secrets (apps/worker/.dev.vars, gitignored)

TOKEN_SECRET=dev-secret-not-for-prodSTRIPE_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

Stripe CLI for local webhooks:

bash
stripe listen --forward-to localhost:8787/api/billing/webhook

Staging environment

bash
wrangler deploy --env staging

Uses separate D1 (chasa-db-staging) — create and paste ID in wrangler.toml [env.staging].


SEO launch checklist

Automated (build)

generate-seo.mjs runs on every npm run build and writes:

  • sitemap.xml — all public pages (marketing, templates, blog)
  • robots.txt — crawl rules + sitemap URL
  • blog/feed.xml — RSS for blog posts
  • {indexnow-key}.txt — IndexNow key file for Bing/Yandex
  • Verification meta on index.html / ai.html when env vars are set (see below)

Press kit at /press — logos, boilerplate, suggested anchor text for backlinks.

Google Search Console (one-time)

  1. Add property https://chasa.io at Search Console

  2. Choose HTML tag verification → copy the content="…" value

  3. Rebuild with the token:

    bash
    GOOGLE_SITE_VERIFICATION=your_token_here npm run build --workspace apps/webnpm run deploy:web

    Or use DNS TXT in Cloudflare (no rebuild needed).

  4. Submit sitemap: https://chasa.io/sitemap.xml

  5. URL Inspection on /, /app/, /payment-reminder, /free-templates/

Optional Bing: BING_SITE_VERIFICATION=… same as Google.

After deploy, ping IndexNow (Bing):

bash
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"]}'

Backlinks (founder — use /press)

Site-side done: social links + sameAs schema on all pages, internal links from blog → landing pages, RSS + llms.txt.

Still manual (copy from press kit):

  • LinkedIn company page — website field + launch post linking to /app/ or a blog article
  • X @DocstocHQ — pin launch post
  • Product Hunt / Indie Hackers when ready
  • RELACON GmbH website cross-link to chasa.io
  • 3–5 freelancer communities — link to /blog/ articles or /free-templates/, not just homepage
  • Email signature with chasa.io

Entity

docstoc is a product of RELACON GmbH, Vienna, Austria. See /imprint and /privacy.

Contact: [email protected]

來源:README.md,提交 5325584

工具

0
SourceWeft 尚未讀取此伺服器的工具。

版本歷史

1
  1. v1.0.0最新Sep 16, 2026

評分

已滿足適用檢查項的 40%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式必需10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。