MCP Invoice Maker
A local-first MCP server for creating PDF invoices from SQLite data, supporting client management and invoice generation.
README
MCP Invoice Maker
A local-first MCP project for creating PDF invoices from SQLite data.
Current Step: Database
Initialize the local SQLite database:
npm run db:init
Add sample data:
npm run db:seed
Inspect available tables:
npm run db:inspect
The database is created at data/invoices.sqlite and is ignored by git.
Planned Build Order
- SQLite database for invoice data
- HTML invoice page/template
- MCP JSON tools for creating, rendering, and fetching invoices
- Puppeteer PDF rendering
HTML Invoice Template
The invoice template lives at templates/invoice.html with styles in templates/invoice.css.
It is based on the Beam Beam Digital PDF invoice design and uses:
- Montserrat for general invoice text and
BEAM BEAM - Bodoni Moda for
DigitalandWith thanks
Invoice Input Schema
The create-invoice JSON input schema lives at src/schemas/create-invoice.schema.json.
An example payload lives at examples/create-invoice.json.
The required invoice input is intentionally minimal:
client_namework_carried_outhours
The optional issue_date can override the current local date.
MCP Server
Run the local MCP server over stdio:
npm start
Codex project-local MCP config lives at .codex/config.toml and registers this server as:
invoice_maker
After adding or changing MCP config, restart Codex or open a new Codex thread so the tools are loaded.
Current tools:
add_clientupdate_clientlist_clientscreate_invoiceget_invoicelist_client_invoices
The create_invoice tool treats an invoice request as a PDF request: it writes
the invoice data to SQLite, renders the invoice PDF, and returns the invoice data
with a pdf.path and pdf.url.
Render HTML
Render an existing invoice to a local HTML file:
npm run render:html -- 001
This writes to output/invoice-001.html.
Render PDF
Render an existing invoice to a local PDF file:
npm run render:pdf -- 001
This writes:
output/invoice-001.htmloutput/invoice-001.pdf
PDF rendering uses puppeteer-core and the Chrome installed at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome. You can override the browser path with PUPPETEER_EXECUTABLE_PATH.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.