关于 lastsaas
LastSaaS 是一个以 Go 后端和 React + TypeScript 前端构建的 SaaS 基础框架,提供多租户、认证、Stripe 计费、白标品牌、API 密钥与管理后台等功能,面向希望快速启动 SaaS 产品的开发者。该项目采用 MIT 许可证,并内置只读管理 MCP 服务。
主要功能
- 01多租户与基于角色的访问控制
- 02认证与多因素认证(MFA/TOTP)
- 03Stripe 订阅与积分计费
- 04白标品牌定制
- 05带作用域的 API 密钥与出站 Webhook
- 06系统健康监控与产品分析仪表盘
适用场景
- 01为新 SaaS 产品搭建账户、团队与权限基础
- 02通过自然语言查询 ARR 趋势或系统健康状况
- 03为客户提供带签名的出站 Webhook 集成
MCP 相关
该项目内置一个 MCP 服务,提供 32 个只读工具,使 Claude 等 MCP 兼容 AI 可以查询运行中应用的仪表盘、用户、租户、计费、日志与健康数据。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
LastSaaS
你今后唯一需要的 SaaS 脚手架。
LastSaaS 是一个完整、可用于生产环境的 SaaS 基础平台,完全通过与 Claude Code 对话构建。它提供多租户账户管理、身份验证、基于角色的访问控制、白标品牌、Stripe 账单、API 密钥、外发 Webhook、完整的管理界面、系统运行状况监控、基于积分的用量跟踪,以及带遥测功能的产品分析——你启动 SaaS 业务所需的一切,都已准备就绪,可针对你的具体产品进行定制。
构建软件的瓶颈已不再是工程能力,而是想象力。LastSaaS 就证明了这一点:只要有清晰的愿景,一个人和一个 AI Agent 就能搭建出过去需要一个团队花费数月才能完成的东西。由于它是通过 Claude Code 构建的,代码库也已准备好分叉并用于 Agent 式工程——让 AI Agent 处理它,通过对话继续构建你的产品。
LastSaaS 的存在意义
每款 SaaS 产品都需要相同而枯燥的基础功能:用户账户、团队、角色、身份验证、管理仪表板、账单、用量限制、品牌、Webhook、API 密钥。过去,构建这些基础功能意味着要花数周时间处理各种基础设施工作,之后才能写下产品本身的第一行代码。
LastSaaS 彻底解决了这个问题。分叉它,让 AI Agent 处理它,然后基于已具备以下功能的基础平台开始构建产品:
- 基于角色的访问控制与多租户隔离
- 支持刷新令牌轮换的 JWT 身份验证
- Google、GitHub 和 Microsoft OAuth 集成
- 通过 Magic Link 实现无密码身份验证
- 带恢复代码的 MFA/TOTP
- 邮箱验证和密码重置
- 团队邀请和成员管理
- 支持订阅、按席位定价、试用和积分包的 Stripe 账单
- 套餐权益和账单执行中间件
- 支持自定义主题、徽标、着陆页和自定义页面的白标品牌
- API 密钥身份验证(管理员和用户范围)
- 支持 19 种事件类型和 HMAC-SHA256 签名的外发 Webhook
- 基于积分的用量跟踪(订阅 + 已购买的积分桶)
- 通过 Stripe 管理促销代码和优惠券
- 产品分析仪表板(转化漏斗、KPI、留存群组、参与度指标)
- 遥测事件系统,提供 Go SDK 和 REST API,用于自定义事件跟踪
- 用于管理所有内容的完整管理界面
- 内置 API 文档(HTML 和 Markdown)
- 实时系统运行状况监控
- 财务指标仪表板(收入、ARR、DAU、MAU)
- 用于 AI 驱动管理访问的 MCP(Model Context Protocol)服务
- 用于服务器管理的命令行工具
- 通过数据库迁移实现自动版本管理
- 在 Fly.io 上进行生产环境部署
这是面向软件 Agent 时代的开源基础设施——在这个时代,提出想法的人也能亲自发布产品。代码库采用一致的模式,AI Agent 可以轻松理解和操作,因此你可以按照构建它时的方式持续演进它。
对比
如果你正在评估 SaaS 脚手架,你可能已经看过 ShipFast、Supastarter、MakerKit、SaaS Pegasus 和 Gravity。以下是技术型创始人选择 LastSaaS 的原因。
免费且开源。 ShipFast 售价 $169,MakerKit 售价 $199–599,Supastarter 起价 $299,SaaS Pegasus 收取 $249/年,Gravity 的价格低于 $1K。LastSaaS 采用 MIT 许可证——分叉它、发布产品,永远无需支付许可费。代码完全归你所有。 Go 后端,而不是又一个 Next.js 项目。 ShipFast、Supastarter、MakerKit 和 Gravity 都采用 JavaScript/TypeScript 技术栈。SaaS Pegasus 使用 Django。LastSaaS 将 Go 后端与 React + TypeScript 前端结合,带来编译后的二进制文件部署、低内存占用(Alpine 容器仅 14MB),以及 Go 广为人知的并发模型。如果你的 SaaS 将要处理真实流量,或者你想要一个不是 Node.js 单体应用的后端,这一点很重要。
真正的多租户。 ShipFast 完全不支持多租户。SaaS Pegasus 和 Gravity 提供基本的团队功能,但不具备真正的租户隔离。LastSaaS 提供完整的多租户架构:按租户隔离数据、三级 RBAC(所有者/管理员/用户)、团队邀请、所有权转移、按租户记录活动日志,以及按租户计费。这正是“用户可以协作”和“每个客户都有自己的独立工作区”之间的区别。
内置白标品牌定制。 大多数脚手架至多提供主题切换。LastSaaS 包含完整的白标系统:自定义应用名称、徽标、颜色、字体、落地页、自定义页面、CSS 注入、网站图标、支持权益控制的可配置导航,以及身份验证页面定制。如果你正在构建一个让客户看到你的品牌(而不是你的品牌加上某个框架品牌)的平台,这能帮你节省数周时间。
提供出站 Webhook,而不只是 Stripe Webhook。 所有替代方案——ShipFast、Supastarter、MakerKit、SaaS Pegasus 和 Gravity——都不包含出站 Webhook 系统。LastSaaS 内置 19 种事件类型,涵盖计费、团队生命周期、用户生命周期、额度和安全事件,并提供 HMAC-SHA256 签名、投递跟踪和测试事件。你的客户从第一天起就能将你的平台集成到自己的系统中。
支持范围限定访问权限的 API 密钥。 ShipFast、Supastarter 和 MakerKit 都不包含 API 密钥管理。LastSaaS 提供带有 lsk_ 前缀的 API 密钥,支持管理员和用户权限范围、SHA-256 哈希存储,以及最近使用时间跟踪,可供你的客户直接用于构建集成。
健康监控和财务仪表板。 没有其他竞争脚手架包含系统健康监控。LastSaaS 每 60 秒收集所有节点的 CPU、内存、磁盘、HTTP 和 MongoDB 指标,并提供 8 个实时图表、阈值告警和 30 天数据保留。财务仪表板开箱即用地提供收入、ARR、DAU 和 MAU 时间序列数据。
集成遥测的产品分析。 没有其他竞争脚手架包含产品分析。LastSaaS 自动跟踪客户旅程——访客 → 注册 → 计划页面 → 结账 → 付费转化 → 升级——并将其可视化为转化漏斗。PM 仪表板包含 SaaS KPI(MRR、ARR、ARPU、LTV、流失率、试用转化率)、留存群组分析、参与度指标(付费订阅者的 DAU/WAU/MAU),以及自定义事件浏览器。Go SDK 和 REST API 让你无需配置即可跟踪自己的事件。
面向 AI 原生运维的 MCP 服务。 这是 LastSaaS 独有的功能。内置的 Model Context Protocol 服务提供 32 个只读工具,可将 Claude(或任何兼容 MCP 的 AI)直接连接到正在运行的应用。查询 ARR 趋势、排查错误激增、审计 API 密钥或检查系统健康状况——全程使用自然语言。其他 SaaS 脚手架都不提供 Agent 式管理访问。
专为 AI 辅助开发打造。 LastSaaS 完全通过与 Claude Code 对话构建,代码库的设计也便于继续以这种方式开发。模式一致、命名清晰,结构便于 AI Agent 流畅浏览。Fork 项目,让 Agent 处理它,描述你的产品,然后继续开发。竞争产品的脚手架是为手动开发打造的;LastSaaS 则是为当下的软件开发方式打造的。
| LastSaaS | ShipFast | Supastarter | MakerKit | Pegasus | Gravity | |
|---|---|---|---|---|---|---|
| 价格 | 免费(MIT) | $169 | $299+ | $199–599 | $249/年 | <$1K |
| 技术栈 | Go + React | Next.js | Next.js / Nuxt | Next.js | Django | Node + React |
| 多租户 | 完整 RBAC | — | ✓ | ✓ | 仅支持团队 | 仅支持团队 |
| 白标 | 完整 | — | 部分 | 部分 | — | — |
| Webhooks | 19 个事件 | — | — | — | — | — |
| API 密钥 | 限定范围 | — | — | — | 基础 | — |
| 运行状况监控 | 8 个图表 | — | — | — | — | — |
| 产品分析 | 5 个标签页的 PM 仪表盘 | — | — | — | — | — |
| 点数系统 | 双点数池 | — | — | 基础 | — | — |
| MCP 服务 | 26 个工具 | — | — | — | — | — |
| 管理仪表盘 | 完整 | — | ✓ | ✓ | ✓ | 基础 |
| Stripe 计费 | 完整 | ✓ | ✓ | ✓ | ✓ | ✓ |
功能
身份验证与身份
- 使用 bcrypt 哈希的电子邮件/密码注册
- 通过 Resend 验证电子邮件
- 支持 Google、GitHub 和 Microsoft OAuth,并自动关联账户
- 通过电子邮件发送魔法链接,实现无密码登录
- MFA/TOTP 双重身份验证,附带设置向导
- 用于 MFA 备用访问的恢复代码
- JWT 访问令牌(30 分钟)+ 刷新令牌(7 天),支持轮换
- 多次登录失败后锁定账户
- 使用安全令牌重置密码
- 强制执行密码强度要求
- 会话管理——列出活跃会话,并撤销单个或所有会话
- 更改密码时撤销会话
多租户
- 根租户(系统管理员)+ 客户租户
- 用户通过成员关系归属租户
- 角色:owner、admin、user,具有分层权限
- 通过电子邮件通知发送团队邀请
- 在成员之间转移所有权
- 每个租户的活动日志
- 租户设置自助管理
计费与点数(Stripe)
- 订阅计划,支持按月和按年计费(可配置年度折扣百分比)
- 定价模式:固定费率或按席位计费(包含席位数,并设有席位数上下限)
- 免费试用,可为每个计划配置试用天数,并防止滥用试用
- 点数包,用于一次性购买
- 双点数池:订阅点数(重置或累积)+ 已购点数
- Stripe Checkout(基于重定向),用于收款
- Stripe Billing Portal,供客户自助管理(付款方式、发票)
- 多币种支持,可配置默认货币
- Stripe Tax 自动计算税费
- 促销代码和优惠券——通过管理 UI 创建和管理,并关联到 Stripe
- 发票生成——连续发票编号、PDF 下载、税费明细
- 交易记录——支持按租户查看和全局管理员查看,并提供搜索和筛选
- 财务指标——收入、ARR、DAU、MAU 时间序列及图表
- 计费执行中间件——阻止已过期的订阅使用付费功能
- 权益中间件——根据计划控制功能访问(布尔值和数值权益)
- 计费豁免,适用于特殊账户(根租户、演示账户)
- 管理员订阅管理——取消、修改、重新分配计划
- 退款和争议处理——为
charge.refunded、charge.dispute.created、charge.dispute.closed提供 Webhook 处理程序
白标品牌
- 自定义应用名称、副标题和徽标(仅文本、仅图片或两者兼有)
- 主题颜色(主色、强调色、背景、表面、文本),并自动生成色阶调色板
- 自定义字体(正文和标题)
- 支持配置 HTML 的自定义着陆页
- 在
/p/{slug}提供自定义页面,并附带 SEO 元数据 - 注入自定义 CSS
- 注入自定义 head HTML(分析工具、元标签)
- 上传网站图标
- 用于管理图片/资源的媒体库
- 可配置导航侧边栏,并支持按权益控制菜单项
- 自定义身份验证页面(登录/注册标题和说明文字)
- 自定义仪表盘 HTML
- 支持 Open Graph 图片
API 密钥
- 创建带
lsk_前缀的 API 密钥 - 两种权限级别:admin(自动解析根租户)和 user(需要 X-Tenant-ID)
- 使用 SHA-256 哈希存储——原始密钥仅在创建时显示
- 跟踪最后使用时间戳
- 提供密钥管理管理界面
- 所有端点均支持 JWT 和 API 密钥认证
出站 Webhook
- 5 个类别共 19 种事件类型:
- 账单:subscription.activated、subscription.canceled、payment.received、payment.failed
- 团队生命周期:member.invited、member.joined、member.removed、member.role_changed、ownership.transferred
- 用户生命周期:user.registered、user.verified、user.deactivated
- 额度与账单:credits.purchased、plan.changed、tenant.created、tenant.deactivated
- 审计与安全:user.deleted、tenant.deleted、api_key.created、api_key.revoked
- 使用带
whsec_前缀的密钥对载荷进行 HMAC-SHA256 签名 - 跟踪投递情况,包括响应代码、响应正文和耗时
- 测试事件投递
- 重新生成密钥
- 按 Webhook 筛选事件类型
管理界面
- 仪表板:显示用户和租户数量、健康状况概览及业务指标
- 用户管理——列出、搜索、查看个人资料、编辑、暂停、模拟登录;删除前检查所有权
- 租户管理——列出、查看、编辑、分配套餐、控制状态、管理订阅
- 财务概览——跨所有租户的交易历史、收入/ARR/DAU/MAU 图表
- 产品分析——转化漏斗、SaaS KPI、留存群组、参与度指标、自定义事件浏览器
- 套餐管理——创建、编辑、归档、管理权益、配置按席位计费、设置试用天数
- 额度包管理——创建、编辑、排序、启用/停用
- 促销——创建和管理 Stripe 促销代码及优惠券
- 品牌编辑器——主题颜色、徽标、字体、落地页、自定义页面、CSS、导航
- API 密钥管理——创建、查看、撤销
- Webhook 管理——创建、编辑、删除、测试、查看投递历史
- 公告——发布全系统公告
- 系统日志查看器,支持按严重性筛选、搜索和按用户筛选
- 配置变量编辑器(字符串、数字、枚举、模板)
- 应用内消息——向个别用户发送消息
- 根团队成员——通过邀请和角色变更管理管理员团队
- 用户和租户的 CSV 导出
- 管理员模拟登录——以任意用户身份登录以进行调试
- 系统健康监控(见下文)
- 集成健康检查——MongoDB、Stripe、Resend、Google OAuth 状态
- 三级管理员访问权限:user(只读)、admin(读写)、owner(破坏性操作)
系统健康监控
- 自动注册节点并发送心跳(间隔 30 秒)
- 每 60 秒采集指标:CPU、内存、磁盘、网络、HTTP 请求统计、MongoDB 统计、Go 运行时
- HTTP 指标中间件,跟踪百分位延迟(p50/p95/p99)
- 基于阈值的告警(可配置警告/严重级别)
- 通过 MongoDB TTL 索引自动保留数据 30 天
- 实时仪表板,包含 8 个时间序列图表(Recharts)
- 支持聚合、叠加显示所有节点和筛选单个节点三种模式
- 时间范围选择:1h、6h、24h、7d、30d
- 集成健康面板(MongoDB、Stripe、Resend、Google OAuth 连接状态)
产品分析与遥测
- 转化漏斗 — 访客 → 注册 → 方案页面浏览 → 结账 → 付费转化 → 升级,并显示每个步骤的转化率
- SaaS KPI — MRR、ARR、ARPU、LTV、流失率、试用转付费转化率、首次购买中位耗时、活跃订阅用户数
- 留存分群 — 按周或按月统计的分群留存表,带颜色编码热力图(跟踪
lastLoginAt随时间的变化) - 参与度指标 — 付费订阅用户的 DAU/WAU/MAU、每位用户的平均会话数、使用量最高的功能、积分消耗趋势
- 自定义事件浏览器 — 浏览所有事件类型、查看趋势图表、按名称和时间范围筛选
- 遥测 Go SDK —
telemetry.Track()/TrackBatch()/TrackPageView()/TrackCheckoutStarted()/TrackLogin(),用于直接在进程内记录事件(无 HTTP 开销) - 遥测 REST API — 用于页面浏览的
POST /telemetry/track(匿名访问,受速率限制);用于自定义事件的POST /telemetry/events和/telemetry/events/batch(需身份验证) - 自动埋点 — 自动跟踪注册、电子邮件验证、登录、结账、订阅激活/取消和方案变更
- 365 天留存 — 遥测事件通过 MongoDB TTL 索引自动过期
- 速率限制 — 匿名跟踪每个 IP 每分钟 60 个请求,经过身份验证的事件每位用户每分钟 120 个请求
用户自助服务
- 编辑个人资料(显示名称、电子邮件)
- 主题偏好(浅色/深色)
- 密码管理
- MFA 设置与管理
- 会话查看器,支持远程撤销
- 删除账户并清理数据
- 数据导出(符合 GDPR 要求)
- 账单管理(选择方案、购买积分、查看账单历史、下载 PDF)
- 引导流程
内置 API 文档
/api/docs提供交互式 HTML API 参考,端点详情可展开/api/docs/markdown提供 Markdown API 参考,可集成到外部文档中- 全面的 Webhook 事件参考,包含负载说明
- 根据 VERSION 文件自动进行版本管理
CLI 管理
lastsaas setup— 初始化系统(创建根租户和所有者)lastsaas start/stop/restart— 管理服务器进程lastsaas change-password— 重置任意用户的密码lastsaas send-message— 向用户发送系统消息lastsaas transfer-root-owner— 转移根租户所有权lastsaas config list|get|set— 管理配置变量lastsaas version— 显示二进制文件和数据库版本lastsaas status— 检查系统运行状况lastsaas mcp— 启动 MCP 服务(见下文的 MCP 服务)
MCP 服务(AI 管理员访问)
内置的 Model Context Protocol 服务为 Claude 等 AI 助手提供对管理数据的只读访问权限,包括仪表板、用户、租户、财务数据、日志、健康状态等。可用于通过自然语言提问,例如“我们的 ARR 趋势如何?”或“显示过去一小时的严重日志”。
- 32 个只读工具,涵盖 14 个类别——不执行写入操作,设计上安全可靠
- 2 个资源——
lastsaas://dashboard和lastsaas://health,用于自动提供上下文 - API 密钥身份验证——需要根租户 API 密钥,与管理 API 使用相同的身份验证方式
- Stdio 传输——在本地运行,兼容 Claude Desktop 和 Claude Code
工具类别:
- About——软件版本和环境
- Dashboard——用户/租户数量、健康状态概览
- Tenants——带筛选功能的列表、包含成员的详细视图
- Users——支持搜索的列表、包含身份验证方式和成员关系的详细视图
- Financial——交易历史、收入/ARR/DAU/MAU 时间序列指标
- Logs——支持按严重程度/类别/日期筛选的全文搜索、严重程度计数
- Health——当前系统指标、健康数据时间序列、节点列表、集成状态
- Config——运行时配置变量列表和详情
- Plans——套餐详情、权益键、积分包
- Announcements——已发布和草稿公告列表
- Promotions——Stripe 优惠代码及优惠券详情
- Security——API 密钥清单(仅预览)、根租户成员
- Webhooks——Webhook 配置、事件类型参考、发送历史
安全
- 安全标头(CSP、HSTS、X-Frame-Options、X-Content-Type-Options、Referrer-Policy、Permissions-Policy)
- 对身份验证端点进行速率限制
- 请求正文大小限制
- NoSQL 注入防护(转义正则表达式输入)
- 使用 DOMPurify 防止注入的 HTML 造成 XSS
- 可信代理 IP 解析(Fly-Client-IP)
- Webhook 签名验证(入站 Stripe、出站 HMAC-SHA256)
- 通过唯一事件 ID 索引实现幂等 Webhook 处理
- 检测系统日志注入并自动发出严重警报
- 基于令牌族撤销机制的刷新令牌轮换
可用于生产环境
- Docker 多阶段构建(Go + Node + Alpine)
- 部署至 Fly.io,支持机器自动停止/自动启动
- 由 Go 二进制文件提供 SPA 服务(无需单独的 Web 服务器)
- CORS、安全标头、速率限制
- 优雅关闭并排空连接
- 启动时自动确定版本并执行数据库迁移
- 升级后向管理员用户发送版本通知消息
技术栈
| 层 | 技术 |
|---|---|
| 后端 | Go 1.25、gorilla/mux |
| 前端 | React 19、TypeScript、Vite 7、Tailwind CSS 4 |
| 数据库 | MongoDB(Atlas 或本地) |
| 身份验证 | JWT(访问令牌 + 刷新令牌)、bcrypt、Google/GitHub/Microsoft OAuth、Magic Links、TOTP MFA |
| 计费 | Stripe(stripe-go v82)——Checkout、Billing Portal、Webhooks、Tax |
| 邮件 | Resend |
| 图表 | Recharts |
| 指标 | gopsutil v4 |
| gofpdf(生成发票) | |
| 安全 | DOMPurify(前端)、HMAC-SHA256(Webhooks) |
| 部署 | Docker、Fly.io |
前提条件
- Go 1.25+——安装
- Node.js 22+——安装
- MongoDB——以下二选一:
- MongoDB Atlas(免费 M0 层即可满足需求)
- 本地 MongoDB Community Edition
- Git
可选项
- Resend API 密钥——用于邮件验证、密码重置和邀请
- Google OAuth 凭据——用于 Google 登录
- GitHub OAuth 凭据——用于 GitHub 登录
- Microsoft OAuth 凭据——用于 Microsoft 登录
- Stripe 账户——用于计费(订阅、购买积分、发票)
- Fly.io 账户——用于生产环境部署
快速开始
1. 克隆代码库
git clone https://github.com/metavert-io/lastsaas.git
cd lastsaas
2. 运行设置脚本
./scripts/setup.sh
系统会提示你填写:
- 数据库名称 — 项目标识(两个项目使用相同名称时,会共享同一用户群)
- MongoDB URI — 你的 Atlas 连接字符串或
mongodb://localhost:27017 - JWT 密钥 — 自动生成
- Google OAuth 凭据 — 可选,按 Enter 跳过
- Resend API 密钥 — 可选,按 Enter 跳过
- 应用名称和电子邮件设置
脚本会写入 .env 文件并复制配置模板。
3. 启动后端
set -a && source .env && set +a
cd backend
go run ./cmd/server
服务将在 http://localhost:4290 启动。
4. 启动前端
在另一个终端中:
set -a && source .env && set +a
cd frontend
npm install
npm run dev
前端将在 http://localhost:4280 启动。
5. 初始化系统
运行 CLI 设置以创建根租户和管理员账户:
cd backend
go run ./cmd/lastsaas setup
这会创建根租户(你的管理员组织)和所有者账户。现在,你可以在 http://localhost:4280 登录。
设置 Stripe 账单
Stripe 集成是可选的,但付费订阅、购买积分包和生成发票都需要此集成。如果跳过此部分,LastSaaS 将作为仅提供免费套餐的平台运行。
1. 创建 Stripe 账户
在 stripe.com 注册并完成入门设置。开发期间可以使用测试模式。
2. 获取 API 密钥
前往 Stripe Dashboard → Developers → API keys 并复制:
- 可发布密钥(以
pk_test_或pk_live_开头) - 密钥(以
sk_test_或sk_live_开头)
3. 创建 Webhook 端点
前往 Stripe Dashboard → Developers → Webhooks → Add endpoint:
- 端点 URL:
https://your-domain.com/api/billing/webhook- 使用 Stripe CLI 进行本地开发:
stripe listen --forward-to localhost:4290/api/billing/webhook
- 使用 Stripe CLI 进行本地开发:
- 要订阅的事件 — 选择以下 8 个事件:
checkout.session.completedinvoice.paidinvoice.payment_failedcustomer.subscription.updatedcustomer.subscription.deletedcharge.refundedcharge.dispute.createdcharge.dispute.closed
创建端点后,复制签名密钥(以 whsec_ 开头)。
4. 设置环境变量
将以下内容添加到 .env 文件:
STRIPE_SECRET_KEY=sk_test_...
STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
5. 在管理界面中创建套餐
配置 Stripe 并启动后端后:
- 以根租户所有者身份登录
- 前往 Admin → Plans,创建订阅套餐
- 设置价格、账单周期、试用天数、权益和积分分配
- 也可以在 Admin → Credit Bundles 下创建积分包
- 也可以在 Admin → Promotions 下创建促销代码
Stripe 产品和价格会在客户结账时自动创建——除了 API 密钥和 Webhook 之外,无需在 Stripe Dashboard 中进行任何配置。
6. 正式上线
准备投入生产环境时:
- 在 Stripe Dashboard 中切换到实时模式
- 使用生产环境 URL 和相同的 8 个事件创建新的 Webhook 端点
- 使用实时密钥和 Webhook 密钥更新生产环境变量
配置
配置文件位于 backend/config/:
dev.example.yaml/prod.example.yaml— 已提交的模板dev.yaml/prod.yaml— 你的实际配置(已被 git 忽略)
设置 LASTSAAS_ENV=dev 或 LASTSAAS_ENV=prod,以选择要加载的配置。默认为 dev。
密钥在 YAML 中以 ${ENV_VAR} 的形式引用,并在加载时从环境变量展开。默认值使用 ${VAR:default} 语法。
环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
DATABASE_NAME | 是 | 项目标识——名称相同即共享用户群体 |
MONGODB_URI | 是 | MongoDB 连接字符串 |
JWT_ACCESS_SECRET | 是 | 用于签署访问令牌的密钥 |
JWT_REFRESH_SECRET | 是 | 用于签署刷新令牌的密钥 |
FRONTEND_URL | 是 | 用于 CORS 和邮件链接的前端 URL |
APP_NAME | 是 | 应用名称(用于邮件和 UI) |
STRIPE_SECRET_KEY | 否 | Stripe 密钥 API 密钥 |
STRIPE_PUBLISHABLE_KEY | 否 | Stripe 可发布密钥(发送到前端) |
STRIPE_WEBHOOK_SECRET | 否 | Stripe webhook 签名密钥 |
GOOGLE_CLIENT_ID | 否 | Google OAuth 客户端 ID |
GOOGLE_CLIENT_SECRET | 否 | Google OAuth 密钥 |
GOOGLE_REDIRECT_URL | 否 | Google OAuth 重定向 URL |
RESEND_API_KEY | 否 | Resend 邮件服务 API 密钥 |
FROM_EMAIL | 否 | 发件人邮箱地址(默认值:[email protected]) |
FROM_NAME | 否 | 发件人名称(默认值:LastSaaS) |
项目结构
lastsaas/
backend/
cmd/
server/main.go Entry point (HTTP server, route wiring)
lastsaas/main.go CLI administration tool + MCP server
config/ YAML config files
internal/
api/handlers/ HTTP handlers (auth, admin, tenant, billing, branding, webhooks, etc.)
apicounter/ API call counters for integration health
auth/ JWT, password hashing, Google/GitHub/Microsoft OAuth, TOTP MFA
config/ Config loader with env variable expansion
configstore/ Runtime configuration (DB-backed, cached)
db/ MongoDB connection, collections, indexes
email/ Resend email service with templates
events/ Internal event emitter (drives webhook deliveries)
health/ System health monitoring service
middleware/ Auth, tenant, RBAC, rate limiting, metrics, security, billing enforcement
models/ All data models
planstore/ Plan seeding
stripe/ Stripe service (Checkout, Billing Portal, Customers, Prices, Subscriptions)
syslog/ System logging service with injection detection
telemetry/ Telemetry event collection, Go SDK, and PM analytics queries
version/ Version management and auto-migration
frontend/
src/
api/client.ts Axios API client with token refresh
components/ Layout, AdminLayout, BrandingThemeInjector, shared components
contexts/ Auth, Tenant, and Branding React contexts
pages/
admin/ Admin interface (dashboard, users, tenants, plans, billing, branding, etc.)
admin/health/ Health monitoring components and charts
app/ Customer-facing pages (dashboard, billing, team, settings, activity)
app/settings/ User settings tabs (profile, security, MFA, sessions, billing)
auth/ Login, signup, MFA challenge, magic link, verification, password reset
public/ Landing page and custom pages
types/index.ts TypeScript type definitions
scripts/
setup.sh Interactive setup script
Dockerfile Multi-stage production build
fly.toml Fly.io deployment config
VERSION Current version number
API 文档
LastSaaS 内置了可自托管的 API 文档:
- 交互式 HTML 参考文档:
GET /api/docs— 可展开的端点卡片,包含请求/响应示例 - Markdown 参考文档:
GET /api/docs/markdown— 可嵌入外部文档
文档根据代码生成,始终与运行版本一致。文档涵盖所有端点、参数、请求/响应格式,以及全部 19 种 webhook 事件类型的负载说明。
MCP 服务设置
MCP 服务可让 AI 助手通过自然语言查询管理数据。它使用 API 密钥,将只读请求转发到 LastSaaS 管理 API。
前提条件
- 正在运行的 LastSaaS 实例(本地或已部署)
- 根租户 API 密钥——在 Admin → API Keys 中创建,并授予 admin 权限
在 Claude Desktop 中使用
添加到 Claude Desktop 配置文件(macOS 上为 ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"lastsaas": {
"command": "/path/to/lastsaas",
"args": ["mcp"],
"env": {
"LASTSAAS_URL": "https://your-app.fly.dev",
"LASTSAAS_API_KEY": "lsk_your_api_key_here"
}
}
}
}
在 Claude Code 中使用
添加到项目的 .mcp.json:
{
"mcpServers": {
"lastsaas": {
"command": "/path/to/lastsaas",
"args": ["mcp"],
"env": {
"LASTSAAS_URL": "https://your-app.fly.dev",
"LASTSAAS_API_KEY": "lsk_your_api_key_here"
}
}
}
}
构建 CLI 二进制文件
cd backend
go build -o lastsaas ./cmd/lastsaas
环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
LASTSAAS_URL | 是 | LastSaaS 实例的基础 URL(例如 http://localhost:4290 或 https://your-app.fly.dev) |
LASTSAAS_API_KEY | 是 | 具有 admin 权限的根租户 API 密钥(以 lsk_ 开头) |
可用工具(26 个)
| 工具 | 描述 |
|---|---|
get_about | 软件版本和环境 |
dashboard_stats | 用户/租户数量及健康状况概览 |
list_tenants | 支持分页、搜索和筛选的租户列表 |
get_tenant | 包含套餐、账单和成员信息的租户详情 |
list_users | 支持分页、搜索和筛选的用户列表 |
get_user | 包含身份验证方式和成员资格的用户详情 |
list_transactions | 支持搜索和筛选的金融交易 |
get_financial_metrics | 收入、ARR、DAU、MAU 时间序列 |
search_logs | 支持按严重级别/类别/日期筛选的全文日志搜索 |
get_log_severity_counts | 按严重级别统计的日志数量 |
get_system_health | 当前 CPU、内存、磁盘、HTTP 统计信息 |
get_health_metrics | 时间序列健康数据(按节点或汇总) |
list_nodes | 包含状态和版本的服务节点 |
get_integrations | 第三方集成健康状况 |
list_config | 所有运行时配置变量 |
get_config | 单个配置变量详情 |
list_plans | 包含价格和权益的订阅套餐 |
get_plan | 套餐详情 |
list_entitlement_keys | 权益密钥目录 |
list_credit_bundles | 积分包价格 |
list_announcements | 已发布和草拟的公告 |
list_promotions | Stripe 促销代码和优惠券 |
list_api_keys | API 密钥清单(仅显示预览) |
list_root_members | 管理团队和待处理邀请 |
list_webhooks | 出站 Webhook 配置 |
list_webhook_event_types | 可用的 Webhook 事件类型 |
get_webhook | Webhook 详情及投递历史 |
MCP 示例
这些示例展示了 MCP 工具的实际工作方式。每个示例都列出了用户提示词,以及在后台执行的确切工具调用。
示例 1:查看业务概况
提示词:“我今天的 SaaS 业务情况如何?”
工具调用:
dashboard_stats— 返回快照:Users: 1,284 (12 new today) Tenants: 89 (3 new this week) Health: All systems healthy Active alerts: 0
示例 2:调查收入趋势
提示词:“显示我们过去 30 天的收入趋势”
工具调用:
get_financial_metrics— 查询时间序列数据:
返回用于绘图的每日收入数据点(数值以美分为单位),例如:{ "range": "30d", "metric": "revenue" }2026-01-27: $1,250.00 2026-01-28: $890.00 ... 2026-02-25: $2,100.00get_financial_metrics— 进一步查询 ARR:{ "range": "30d", "metric": "arr" }
示例 3:查找特定租户
提示词:“查找 Acme Corp 租户并显示其详情”
工具调用:
list_tenants— 按名称搜索:
返回匹配的租户及其 ID、套餐名称和账单状态。{ "search": "Acme Corp" }get_tenant— 使用租户 ID 获取完整详情:
返回套餐信息、账单状态、积分余额、订阅日期,以及包含角色信息的完整成员列表。{ "id": "6789abc..." }
示例 4:搜索严重错误
提示词:“过去一小时内是否有严重错误?”
工具调用:
search_logs— 按严重级别和时间筛选:
返回包含时间戳、类别、消息和元数据的日志条目。例如:{ "severity": "critical", "fromDate": "2026-02-26T14:00:00Z", "perPage": "50" }[critical] 14:23:05 billing — Stripe webhook signature verification failed [critical] 14:31:12 security — Log injection pattern detected in user inputget_log_severity_counts— 提供总体分布:critical: 2, high: 15, medium: 89, low: 342, debug: 1,204
示例 5:监控系统健康状况
提示词:“系统健康状况如何?所有集成都正常运行吗?”
工具调用:
get_system_health— 返回当前指标:CPU: 12.3% Memory: 245 MB / 512 MB (47.8%) Disk: 1.2 GB / 8 GB (15.0%) HTTP: 1,234 requests (p95 latency: 45ms) MongoDB: 12 active connectionsget_integrations— 检查第三方连接状态:MongoDB: healthy (3ms response) Stripe: healthy (120ms response, 89 calls/24h) Resend: healthy (95ms response, 12 calls/24h) Google OAuth: healthy
示例 6:审查 API 密钥使用情况
提示词:“显示所有有效的 API 密钥及其上次使用时间”
工具调用:
list_api_keys— 返回密钥清单(绝不会公开完整密钥):"Production Automation" (admin) — lsk_...a3f2 — last used: 2 hours ago "CI/CD Pipeline" (admin) — lsk_...b7e1 — last used: 15 minutes ago "Customer Integration" (user) — lsk_...c9d4 — last used: 3 days ago "Old Test Key" (admin) — lsk_...d1e5 — last used: never
示例 7:查看订阅套餐
提示词:“我们提供哪些套餐?每个套餐有多少订阅者?”
工具调用:
list_plans— 返回所有套餐及价格和订阅者数量:Starter: $9/mo ($86/yr) — 45 subscribers — 5 seat limit Pro: $29/mo ($278/yr) — 31 subscribers — 25 seat limit, per-seat pricing Enterprise: $99/mo ($950/yr) — 8 subscribers — unlimited seatslist_credit_bundles— 显示可购买的积分:Small Pack: 100 credits — $5.00 — active Medium Pack: 500 credits — $20.00 — active Large Pack: 2000 credits — $60.00 — active
示例 8:检查 Webhook 投递情况
提示词:“我们的 Webhook 是否成功投递?给我看看生产 Webhook 的近期历史记录。”
工具调用:
list_webhooks— 显示所有已配置的 Webhook:"Production" — https://api.example.com/webhooks — 12 events — active "Staging" — https://staging.example.com/hooks — 5 events — activeget_webhook— 获取生产 Webhook 的投递历史记录:
返回近期投递尝试的状态码、响应时间和任何失败信息:{ "id": "abc123..." }2026-02-26 14:30:01 — subscription.activated — 200 OK (120ms) 2026-02-26 14:15:22 — payment.received — 200 OK (95ms) 2026-02-26 13:45:10 — member.joined — 500 Error (340ms)
示例 9:用户查询和成员关系
提示词:“查找邮箱为 [email protected] 的用户,并显示其租户成员关系。”
工具调用:
list_users— 按邮箱搜索:
返回匹配用户的 ID、验证状态和上次登录时间。{ "search": "[email protected]" }get_user— 获取完整详情:
返回:{ "id": "def456..." }Email: [email protected] (verified) Auth: password + Google OAuth MFA: TOTP enabled Memberships: — Acme Corp (owner) — joined 2026-01-15 — Side Project Inc (admin) — joined 2026-02-10 Last login: 2 hours ago
示例 10:深入查看运行状况指标
提示词:“显示过去 24 小时所有节点的 CPU 和内存趋势。”
工具调用:
list_nodes— 确认所有服务器节点:node-1 (v1.0.0) — healthy — last seen: 30s ago node-2 (v1.0.0) — healthy — last seen: 28s agoget_health_metrics— 获取聚合时间序列数据:
每 60 秒返回一个数据点,包含 CPU 百分比、内存百分比、磁盘百分比、HTTP 请求数和延迟百分位数,可直接用于绘图。{ "range": "24h" }get_health_metrics— 还可以深入查看特定节点:{ "node": "node-1", "range": "24h" }
部署
Fly.io
LastSaaS 包含用于生产部署的 Dockerfile 和 Fly.io 配置。
# Install flyctl if needed
curl -L https://fly.io/install.sh | sh
# Create the app (first time only)
flyctl apps create your-app-name --org your-org
# Set production secrets
flyctl secrets set \
DATABASE_NAME="your-db-name" \
MONGODB_URI="mongodb+srv://..." \
JWT_ACCESS_SECRET="$(openssl rand -hex 32)" \
JWT_REFRESH_SECRET="$(openssl rand -hex 32)" \
FRONTEND_URL="https://your-app-name.fly.dev" \
APP_NAME="YourApp" \
STRIPE_SECRET_KEY="sk_live_..." \
STRIPE_PUBLISHABLE_KEY="pk_live_..." \
STRIPE_WEBHOOK_SECRET="whsec_..."
# Deploy
flyctl deploy
Dockerfile 会将 Go 后端和 React 前端构建到一个约 14MB 的 Alpine 容器中。Go 二进制文件会直接提供前端 SPA 服务,无需 nginx 或单独的 Web 服务器。
其他平台
Docker 镜像可在任何运行容器的平台上使用。唯一的外部依赖是 MongoDB。设置上文列出的环境变量,并开放 8080 端口。
Fork 并借助 AI 持续构建
LastSaaS 完全通过与 Claude Code 对话构建而成——每项功能、每个处理程序和每个组件,都是用自然语言描述后由 AI Agent 实现的。但重点并不在于它曾经以这种方式构建,而在于它的设计目标是继续以这种方式构建。
代码库遵循一致的模式,使用清晰的命名,并采用 AI Agent 能够流畅理解的结构。Fork 这个项目,让 Claude Code 处理它,然后开始描述你的产品。Agent 已经理解身份验证、多租户、计费、中间件和事件等模式,并能自然地在此基础上构建。你不是从头开始,而是在继续一场对话。
以下内容已为你配置完成:
- 添加产品的数据模型到
backend/internal/models/ - 添加 API 处理程序到
backend/internal/api/handlers/ - 在
backend/cmd/server/main.go中配置路由 - 添加前端页面到
frontend/src/pages/ - 使用租户上下文——每个经过身份验证的请求都会携带用户的租户,因此产品逻辑可免费获得多租户支持
- 使用积分系统——为按用量计费的功能检查并扣除积分
- 使用权益——通过
middleware.RequireEntitlement(db, "feature_name")和middleware.RequireActiveBilling()控制功能访问 - 使用配置存储——添加可在运行时配置的设置,无需重新部署
- 使用事件发射器——从处理程序发出事件后,事件会自动投递到已配置的 Webhook
- 使用 API 密钥——你的端点会自动支持 JWT 和 API 密钥身份验证
- 使用品牌系统——你的 UI 会通过 BrandingContext 自动继承白标主题
- 使用遥测系统——在 Go 中通过
telemetry.Track()跟踪自定义事件,或从外部客户端调用POST /telemetry/events,这些事件会自动显示在 PM 仪表板中
隐私政策
LastSaaS 是可自托管的软件——您可以控制自己的数据库、托管服务和数据。MCP 服务通过 HTTP API 连接到您的 LastSaaS 实例,并使用只读工具——不会向 Metavert LLC 或任何第三方传输数据。
完整隐私政策请参阅:https://www.metavert.io/lastsaas-privacy-policy
许可证
MIT - Copyright 2026 Metavert LLC
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。