InvoiceFlow

io.github.EarthyPunyapat由 GitHub 帳號 EarthyPunyapat 發布v1.0.0更新於 Nov 3, 2026

從任意代理建立發票、客戶和 Stripe 支付連結。7 個工具。無電子郵件或刪除功能。

AI 翻譯由 AI 模型根據下方的原文描述翻譯,可能有誤。

原文描述

Create invoices, clients, and Stripe payment links from any agent. 7 tools. No email or deletes.

已驗證Streamable HTTP可網頁執行商業與電商

概覽

InvoiceFlow 的託管 MCP 服務(invoiceflow-ten-azure.vercel.app);需要 API 金鑰;Streamable HTTP;7 個工具。

暫無 AI 概覽:以下資訊來自註冊中心條目和服務本身。

端點
invoiceflow-ten-azure.vercel.app
最近檢查

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 InvoiceFlow,將其新增到工作區。
  2. 連接 Authorization token 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

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

交給代理程式安裝

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

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

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

其他 MCP 客戶端

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

{
  "mcpServers": {
    "invoiceflow": {
      "type": "http",
      "url": "https://invoiceflow-ten-azure.vercel.app/api/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

InvoiceFlow

Professional invoices, Stripe payment links, reminders, and currency-safe reporting. Early access.

[Live Demo] [License: MIT] [TypeScript] [Next.js] [Postgres] [Prisma] [Stripe] [Resend]

Features • Architecture • Local Development • Deployment


InvoiceFlow is an invoicing app for freelancers. Manage clients, create branded invoices and estimates, share public payment links, collect payments through Stripe Connect, and automate overdue reminders.

MCP server (agents)

InvoiceFlow ships a dependency-free Model Context Protocol server, so an agent in Claude Desktop, Cursor, or any MCP host can create invoices and get payable Stripe links without reading a REST document.

json
{  "mcpServers": {    "invoiceflow": {      "command": "node",      "args": ["/abs/path/invoiceflow-mcp.mjs"],      "env": { "INVOICEFLOW_API_KEY": "ifk_..." }    }  }}

Download the server from https://invoiceflow-ten-azure.vercel.app/sdk/invoiceflow-mcp.mjs.

Tools: whoami, create_client, list_clients, create_invoice, list_invoices, get_invoice, share_invoice.

The omissions are the design. No tool sends email, deletes, refunds, or pays. Creating an invoice is additive and a human can undo it; an agent that emails a customer on every retry cannot take that back. Amounts are integer cents named unitPrice, and a non-integer is refused with an explanation rather than rounded, because 25.5 silently meaning 25 cents is the defect most likely to reach a real customer.

Verify it yourself, no account required:

bash
curl -sO https://invoiceflow-ten-azure.vercel.app/sdk/invoiceflow-mcp.mjscurl -sO https://invoiceflow-ten-azure.vercel.app/sdk/invoiceflow-client.mjscurl -sO https://invoiceflow-ten-azure.vercel.app/sdk/test-mcp.mjsnode test-mcp.mjs     # 14 passed, 0 failed — no key, no network

Stack

  • Node.js 22 and pnpm 10.34.9 (packageManager in package.json)
  • Next.js 15 App Router, React 18, TypeScript, Tailwind CSS and Framer Motion
  • NextAuth v5 with Google OAuth and JWT sessions
  • Prisma 5 and PostgreSQL 16; Docker Compose locally, Neon for deployment
  • Stripe Connect Express and Checkout; Resend and React Email
  • Vitest unit and PostgreSQL integration tests; ESLint and GitHub Actions

Implemented workflows

AreaBehavior
Clients and invoicesOwner-scoped management, line items, percentage tax, draft editing and controlled status changes
Invoice deliverySave & Send calls the email endpoint; accepted email uses a stable public link, failed delivery keeps one saved draft, explicit resends are available
Public invoicesBranded view, readable multi-page PDF export with saved notes and correct tax breakdown, unguessable share tokens and noindex metadata
Online paymentsTax-inclusive grand total, reuse of open Checkout sessions, signed webhook reconciliation
RemindersEscalating email reminders for sent and overdue invoices
Recurring invoicesScheduled draft generation and schedule advancement in one database transaction
EstimatesCreate and manage estimates; convert an estimate to an invoice once
Reports and exportsRevenue, outstanding balances, aging, client reports and CSV export
Business profileName, address, logo, accent color and invoice numbering prefix

The app offers early access. Subscription purchases and plan enforcement are not implemented. Invoice payments are separate from billing users for access to InvoiceFlow.

Interface and design guidance

The public site, Google sign-in and workspace use a warm-white, dark-ink and evergreen visual system, with an interactive example invoice, compact tables and keyboard-friendly mobile navigation. Reports retain separate totals for each currency. Client creation is available inside invoice and estimate drafts.

Read PRODUCT.md and DESIGN.md before changing the interface. The requested Emil Kowalski, Impeccable, Taste and frontend-design skills are installed locally under .agents/skills, with upstream revisions and licenses. The design review records rendered checks and deliberate tradeoffs.

Local development

Install Node.js 22 and the pinned pnpm version first. Keep existing local configuration rather than replacing it.

bash
pnpm install --frozen-lockfiletest -e .env || cp .env.example .env# Configure .env before continuing.docker compose up -d --waitpnpm run db:generatepnpm run db:deploypnpm run dev

Use the local PostgreSQL URL from .env.example for both DATABASE_URL and DATABASE_URL_UNPOOLED. Generate an AUTH_SECRET, add Google OAuth credentials, and use http://localhost:3000 for NEXTAUTH_URL and NEXT_PUBLIC_APP_URL. Register http://localhost:3000/api/auth/callback/google in the Google OAuth client.

Leave optional Stripe and Resend keys empty until you have valid credentials; the example strings are placeholders. Unconfigured integrations return an unavailable response. Google sign-in and the full send/pay workflow require their actual service configuration.

pnpm run db:deploy applies committed migrations to a new development database. If an existing database was created using prisma db push, follow the baseline procedure before applying migrations. Never use db push or migrate reset to deploy production schema changes.

The Compose database uses a persistent named volume. docker compose down stops it without deleting that volume.

Optional demo data:

bash
# Only against a disposable development database.pnpm run db:seed

The seed replaces the account selected by SEED_DEMO_EMAIL (default [email protected]) and its related data. Do not target a real customer account or production database.

PDF exports

PDF downloads use a measured A4 layout with separate sender/recipient blocks, issue/due dates, currency, status, itemized charges, tax and total. Long records paginate with repeated table headings. Saved invoice Notes are included under “Notes & payment instructions”; payment details and a billing period can be entered there. The PDF reflects the saved invoice amounts and does not change payment status or data.

View the synthetic PDF example and layout review. Generate short, normal and long review fixtures without database/provider access:

bash
pnpm exec tsx scripts/preview-invoice-pdf.ts

Configuration

VariableUse
DATABASE_URLPrisma runtime PostgreSQL connection; use Neon's pooled URL in deployment
DATABASE_URL_UNPOOLEDDirect database connection for Prisma migrations
AUTH_SECRETStable, private NextAuth signing/encryption secret
AUTH_GOOGLE_ID, AUTH_GOOGLE_SECRETGoogle web OAuth client credentials
NEXTAUTH_URLCanonical auth origin; HTTPS in production
AUTH_TRUST_HOSTSet to true only behind the trusted deployment proxy, such as Vercel
NEXT_PUBLIC_APP_URLCanonical public HTTPS origin for invoice, payment and email URLs
STRIPE_SECRET_KEYStripe platform API key for Connect and Checkout
STRIPE_WEBHOOK_SECRETSigning secret for this deployment's connected-account webhook endpoint
STRIPE_CONNECT_COUNTRYSupported Connect country for newly created accounts; defaults to US
RESEND_API_KEY, RESEND_FROM_EMAILEmail API key and a sender on a verified Resend domain
FREELANCER_NOTIFY_EMAILFallback only when the invoice owner has no email address
CRON_SECRETBearer secret for scheduled invoice generation and reminders
SEED_DEMO_EMAILDisposable account targeted by the destructive demo seed

NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY is reserved in the example configuration; the current hosted Checkout redirect does not use a browser Stripe SDK. The INNGEST_* variables are also unused.

Keep secrets in ignored local environment files or the hosting provider's secure settings. Preview and production deployments should use separate databases and service keys.

Validation

bash
pnpm testpnpm run lintNEXT_PUBLIC_APP_URL=https://invoiceflow.example.test pnpm run buildpnpm run typecheck# After building, against the disposable local test DB:pnpm run test:browserpnpm audit --prod --audit-level high

For these local browser checks, the build uses the HTTPS test origin above; Vercel releases use the real configured production origin. Next.js embeds NEXT_PUBLIC_APP_URL during the build.

The build generates Prisma Client, compiles all routes, and produces the production application. Production Vercel builds first verify and migrate the database with a guarded release step; local and preview builds require explicit database preparation. Google Fonts access is needed for the configured next/font loader. Prisma downloads must retain TLS and checksum verification.

Integration tests use a separate disposable local database named invoiceflow_test. Create it once:

bash
docker compose exec -T db createdb -U postgres invoiceflow_test

Then run:

bash
export DATABASE_URL='postgresql://postgres:postgres@localhost:5432/invoiceflow_test?schema=public'export DATABASE_URL_UNPOOLED="$DATABASE_URL"pnpm run db:deploypnpm run test:integration

Run these exports in a separate shell from the development server. The suite rejects remote databases and other database names. It uses real PostgreSQL transactions and signed Stripe fixtures, with external Stripe/Resend requests mocked. It covers invoice totals, public links, checkout reuse, webhook verification and retries, concurrent numbering/conversion, and recurring transaction rollback. It does not establish that live OAuth, payment or email credentials work.

GitHub Actions runs frozen installation, Prisma generation, migrations, lint, unit/integration tests, the production build, Chromium browser workflows, typechecking and a production dependency audit using PostgreSQL 16 and Node.js 22.

Deployment

Use the Vercel and Neon release guide for migration handling, service configuration, scheduled jobs and the required test-mode release smoke test. Passing local checks is separate from validating a deployed application.

Scheduled jobs

Both jobs use GET and require Authorization: Bearer <CRON_SECRET>:

  • /api/cron/generate-recurring creates due draft invoices and advances their schedules.
  • /api/cron/chase-invoices sends due reminders.

vercel.json schedules generation at 00:00 UTC and reminders at 09:00 UTC each day. Vercel sends the bearer header when CRON_SECRET is configured. Check the plan's scheduling and function-duration limits before enabling a larger workload.

Current product boundaries

  • Online Checkout supports currencies with two decimal places and positive totals within its validated amount limit. It charges one tax-inclusive invoice total; the public invoice supplies the breakdown.
  • Dashboard and reports show monetary totals for the selected currency. They do not convert currencies or provide a consolidated foreign-exchange total. Recent invoices display their own currency.
  • Public payment IP throttling is in memory and therefore best effort across Vercel instances. A distributed rate limiter is needed for a larger deployment.
  • Payment confirmation email currently goes to the invoice owner, not a separate customer receipt workflow.
  • Recurring jobs create drafts; they do not automatically send them or charge stored payment methods.
  • Invoice/subscription accounting, refunds, partial payments and SaaS plan billing require separate product work.

Architecture

                           ┌─────────────────────────────┐                           │      Client / Browser       │                           └──────────────┬──────────────┘                                          │                                          ▼                         ┌─────────────────────────────────┐                         │   Next.js Middleware (Auth)     │                         └──────────────┬──────────────────┘                                        │        ┌───────────────────────────────┼───────────────────────────────┐        ▼                               ▼                               ▼ ┌──────────────┐             ┌──────────────────┐            ┌──────────────────┐ │ Landing Page │             │ Dashboard (App)  │            │  Public Invoice  │ │     `/`      │             │  `/(dashboard)`  │            │   `/i/[token]`   │ └──────────────┘             └─────────┬────────┘            └────────┬─────────┘                                        │                              │                                        ▼                              ▼                         ┌─────────────────────────────────────────────────┐                         │               API Routes & Crons                │                         │   • /api/invoices        • /api/estimates       │                         │   • /api/clients         • /api/cron/*          │                         │   • /api/i/[token]/pay   • /api/webhooks/stripe │                         └──────────────────────┬──────────────────────────┘                                                │         ┌──────────────────────────────────────┼──────────────────────────────────────┐         ▼                                      ▼                                      ▼┌──────────────────┐                  ┌──────────────────┐                   ┌──────────────────┐│  Neon Postgres   │                  │  Stripe Connect  │                   │      Resend      ││  (Prisma Engine) │                  │ (Checkout & Web) │                   │  (React Emails)  │└──────────────────┘                  └──────────────────┘                   └──────────────────┘

Structure

text
prisma/             Schema, migrations and disposable demo seedsrc/app/            Marketing, authenticated app, public invoices and API routessrc/lib/            Billing, auth, money, reporting, validation and integrationssrc/emails/         React Email templatessrc/components/     UI, reports and marketing componentsintegration/        PostgreSQL-backed billing regression tests.github/workflows/  CI

Browser workflow tests

Run pnpm run test:browser after pnpm run build, with DATABASE_URL and DATABASE_URL_UNPOOLED pointing to the disposable local invoiceflow_test database. Install Chromium using pnpm exec playwright install chromium when a system Chromium is unavailable. Browser tests start a production server on port 3100, use isolated test accounts and a locally signed session, and exercise actual pages, API requests and database writes. The design checks cover 13 routes at desktop (1440px), tablet (768px) and phone (390px) widths, including public invoices, invoice/estimate details, keyboard interactions, reduced motion and mobile sign-out. PDF browser tests also exercise the Download PDF button, parse the exported values and notes, and reject cross-account or unauthenticated downloads. They do not complete Google OAuth or send real emails/payments. Provider HTTP responses come from guarded local fixtures loaded only into the test server. These fixtures exercise the actual Resend/Stripe SDK requests while blocking unmatched external requests. Browser checks cover Save & Send, provider rejection and retry, explicit resend, existing issued invoices, Stripe readiness reconciliation and the Checkout redirect. See delivery and payment checks for production setup and the distinction between email acceptance and inbox delivery.

來源:README.md,提交 96899a5

工具

7

invoiceflow_whoami

Check which InvoiceFlow account this key belongs to and that the key works. Call this first; it is the cheapest way to fail early.

無需輸入參數。

invoiceflow_create_client

Create a customer record. A client is required before an invoice can be created. Returns the new client id.

輸入參數name必填email必填notescompany

invoiceflow_list_clients

List existing clients. Use this before create_client to avoid making duplicate customer records.

輸入參數query

invoiceflow_create_invoice

Create a DRAFT invoice for an existing client. Amounts are INTEGER CENTS: unitPrice 25000 means $250.00, not $25,000. Do not send totals - the server derives subtotal and total from the line items. Does not email anyone.

輸入參數taxitems必填notesdueDateclientId必填currency

invoiceflow_list_invoices

List invoices with their status and totals. Invoices belonging to other accounts are not visible and return as absent, not as errors.

輸入參數limitstatus

invoiceflow_get_invoice

Fetch one invoice by id, including line items and derived totals.

輸入參數id必填

invoiceflow_share_invoice

Get the payable Stripe Checkout link for an invoice. This is what you give a human so they can actually pay. Does not email anyone.

輸入參數id必填

版本歷史

1
  1. v1.0.0最新Nov 3, 2026

評分

已滿足適用檢查項的 90%

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

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

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