mcpField
C
chasa

chasa

远程服务
github.com/docracy1金融数据02 天前更新
代码仓库

关于 chasa

docstoc 面向自由职业者,将未付款发票信息转为跟进邮件,并根据逾期时间调整语气。它只生成草稿,不会替用户发送;MCP 端点公开只读工具,生成草稿需会话或 API 密钥。

主要功能

  1. 01按逾期时间生成跟进邮件
  2. 02将草稿改写得更委婉、坚定或简短
  3. 03通过 CSV 导入发票
  4. 04在账龄看板中跟踪发票
  5. 05提供公开的 MCP 只读工具

适用场景

  1. 01为未付款发票撰写提醒
  2. 02发票逾期后准备更坚定的跟进邮件
  3. 03从 CSV 文件载入发票记录
  4. 04在账龄看板查看未付款发票

MCP 相关

服务在 https://api.docstoc.io/mcp 提供 MCP 端点。只读工具公开可用;draft_chase_email 工具需要会话或 API 密钥。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://api.chasa.io/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

docstoc

粘贴未付款的发票,即可获得一封已写好的跟进邮件,语气会根据逾期时间恰到好处地调整。

docstoc 绝不会代你给客户发送邮件——它只会起草跟进邮件,供你复制到 Gmail、Outlook 或 Apple Mail 中。语气会随逾期天数逐步加强(友好 → 坚定 → 直接)。

在线网址

URL
营销页面https://docstoc.io/
应用(工具)https://docstoc.io/app/
登录https://docstoc.io/app/login
连接器https://docstoc.io/app/connector
管理后台https://docstoc.io/app/admin
APIhttps://api.docstoc.io
MCPhttps://api.docstoc.io/mcp — 只读工具公开可用;draft_chase_email 需要会话或 API 密钥

Worker 的 PUBLIC_APP_URL 为 https://docstoc.io(用于魔法链接、OAuth 回调、Stripe 返回 URL 和摘要链接)。

旧版 chasa.io / api.chasa.io 会通过 Pages 的 _middleware.ts 和 worker 重定向,返回 301 到 docstoc。服务提供商控制台 URI 请参见 scripts/oauth-redirect-uris.md。

上线检查清单

  1. 在 Cloudflare Pages 项目 chasa 中绑定 docstoc.io,并等待状态变为 Active。
  2. www.docstoc.io → 主域名:由 apps/web/functions/_middleware.ts 处理(重新部署 web)。
  3. chasa.io / www.chasa.io → docstoc.io:由同一中间件处理。
  4. api.chasa.io → api.docstoc.io:由 apps/worker/src/lib/legacyHostRedirect.ts 中的 worker 中间件处理。
  5. 在 api.docstoc.io 上注册 OAuth 重定向 URI——请参见 scripts/oauth-redirect-uris.md。
  6. 可选:配置 DMARC:./scripts/dmarc-remove-rua.sh(从 _dmarc.docstoc.io 中移除 rua=)。
  7. 运行 ./scripts/go-live-verify.sh。

部署顺序无关紧要:面向浏览器的链接会根据请求来源的 origin 构建(见下文“应用 origin 解析”),因此无论先部署哪一项,pages.dev 和 chasa.io 都会继续正常工作。

应用 origin 解析

魔法链接、登录后重定向、Stripe 返回 URL 和团队邀请使用用户当前所在的 origin,而非 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)。这样可以让预览部署独立运行,并实现零停机切换域名。

不带受信任 origin 的请求——直接发往 api.docstoc.io 的服务提供商 OAuth 回调,以及摘要 cron——仍会回退到 PUBLIC_APP_URL。


产品规格

套餐与定价
套餐价格AI 草稿团队席位备注
免费版$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。

功能矩阵(按方案)
功能FreePro+
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 密钥增删改查、团队邀请。

应用路由(/app/*)
路由用途
/工具 — 发票列表、AI 草稿、CSV/PDF 导入、多选批量操作
/loginMagic-link 登录 + 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)。

国际化(EN + ES)

与 Docracy 使用相同路径:apps/web/app/src/lib/i18n/ 中的轻量级目录(不使用 i18next)。登录页、侧边栏和 More 面板中提供 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

架构

Monorepo(npm 工作区):

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)

**数据:**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(邮件)generate-email、rewrite-email、generate-thank-you、generate-reply、generate-sequence、generate-sms
/api/billingStripe 结账、门户、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-reportCSP 违规报告
/mcpMCP JSON-RPC(草稿工具、模板列表)
/api/t/:id点击重定向(仅允许列表中的 URL)

安全与合规(已实现)

  • **免费套餐额度:**每月 5 份 AI 草稿,在 D1(ai_usage)中强制执行,而非在客户端执行
  • **速率限制:**AI 草稿、MCP、分析、管理员登录(D1 桶)
  • **Turnstile:**设置密钥后,在生产环境 HTTPS 中采用失败关闭策略;每个邮箱的魔法链接冷却时间为 60 秒
  • **HKDF 令牌用途:**会话、魔法链接、API 密钥、管理员、邀请、OAuth 状态和 Webhook 签名分别使用独立密钥(查找时回退到旧版哈希)
  • **会话轮换:**通过魔法链接登录时使之前的会话失效;管理员登录时清除管理员会话
  • **会话清理:**每日 cron 清除过期会话、魔法链接和速率限制桶
  • **RBAC:**工作区管理员权限可用于品牌设置、Webhook、连接器 OAuth、API 密钥、团队邀请
  • **输入验证:**所有 JSON API 路由均使用 Zod schema(身份验证、邮件、客户、团队、Webhook、账单、管理员、MCP 草稿参数)
  • **Stripe Webhook:**通过事件 ID 去重(stripe_events)
  • 出站 Webhook:X-Chasa-Signature: sha256=… HMAC
  • **点击跟踪:**仅重定向到创建跟踪邮件时存储的 URL
  • **Webhook URL:**SSRF 检查(不允许 localhost / 私有 IP)
  • **OAuth 状态:**使用时序安全的 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 验证 → 类型检查;当设置了 CLOUDFLARE_API_TOKEN 时,推送到 main 会自动部署 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 和管理员登录。

  1. Cloudflare Dashboard → Turnstile → Add widget
  2. 主机名:chasa-71s.pages.dev、chasa.io、localhost
  3. 站点密钥 → wrangler.toml [vars] 中的 TURNSTILE_SITE_KEY
  4. 密钥 → wrangler secret put TURNSTILE_SECRET_KEY
  5. 重新部署 Worker。登录界面通过 GET /api/auth/config 读取配置。

本地运行 / 未配置密钥: 验证会被跳过,并显示控制台警告。测试密钥:

值
站点密钥1x00000000000000000000AA
密钥1x0000000000000000000000000000000AA

一次性云端设置

  1. cd apps/worker && wrangler d1 create chasa-db — 将 database_id 粘贴到 wrangler.toml

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

  3. Stripe(先使用测试模式): 创建两个周期性 Price(Pro $14.99、Business $39.99)。将 price_… ID 复制到 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(先使用测试密钥)

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

  7. wrangler secret put RESEND_API_KEY — 在 Resend 中验证发信域名

  8. Turnstile — 参见上文

  9. wrangler secret put ADMIN_PASSWORD — 用于 /app/admin 9a. AI 文档生成器(可选,公开营销工具): Google AI Studio → 创建免费 API 密钥 → wrangler secret put GEMINI_API_KEY。免费套餐有速率限制;Worker 也会实施自己的每 IP 限制和 Turnstile 验证。参见 apps/worker/src/lib/geminiDocGen.ts。

  10. 云存储 OAuth(可选,Pro+):

    提供商重定向 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 登录重定向:https://api.docstoc.io/api/auth/google/callback

    各提供商的分步说明:scripts/connectors-docstoc-setup.md

    wrangler 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
    
  11. QuickBooks Online + Xero(可选,Pro+):

    提供商重定向 URI
    QBOhttps://api.docstoc.io/api/account/connectors/quickbooks/callback
    Xerohttps://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
    
  12. Cloudflare Pages 项目 chasa + 自定义域名 chasa.io;Worker 自定义域名 api.chasa.io

  13. 只有在端到端测试模式冒烟测试通过后,才切换到 Stripe 正式密钥、价格和 webhook

本地密钥(apps/worker/.dev.vars,已被 git 忽略)
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 — 爬取规则 + 站点地图 URL
  • blog/feed.xml — 博客文章的 RSS
  • {indexnow-key}.txt — Bing/Yandex 的 IndexNow 密钥文件
  • 设置环境变量时,在 index.html / ai.html 中添加验证元数据(见下文)

新闻资料包见 /press — 标志、公司简介文案,以及建议用于反向链接的锚文本。

Google Search Console(一次性设置)
  1. 在 Search Console 中添加媒体资源 https://chasa.io

  2. 选择 HTML tag 验证方式 → 复制 content="…" 的值

  3. 使用令牌重新构建:

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

    或者在 Cloudflare 中使用 DNS TXT(无需重新构建)。

  4. 提交站点地图:https://chasa.io/sitemap.xml

  5. 对 /、/app/、/payment-reminder、/free-templates/ 使用 URL 检查工具

Bing 可选:BING_SITE_VERIFICATION=…,与 Google 的设置相同。

部署后,向 IndexNow(Bing)发送 ping:

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]

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。