SuperBooks: Drafting Invoices
Drafts a SuperBooks invoice for a customer, optionally from tracked time, creates the customer if needed, and sends it only after an explicit confirmation naming the invoice and re…
Alaeddin BENSALAH
@bsalaeddin
Install
$ openclaw skills install @bsalaeddin/superbooks-drafting-invoicesDraft an invoice in SuperBooks
Build a correct draft invoice from what the user says or from their tracked time. The draft stays in SuperBooks until the user explicitly asks to send it; sending e-mails the customer.
Connecting and calling the tools
Every operation in this skill comes from the superbooks MCP server, the SuperBooks connector. The server defaults to Code Mode, so the operations below are written as the external_* functions you call inside superbooks:execute_typescript. On a server set to the per-tool surface, the same operation is listed as superbooks:<name> without the external_ prefix, for example superbooks:invoices_list.
- Only
superbooks:search_toolsandsuperbooks:execute_typescriptlisted (Code Mode, the default): callsuperbooks:search_toolsfirst, then call each tool insidesuperbooks:execute_typescriptasexternal_<tool>(for exampleexternal_invoices_list); the program mustreturnits result. Scopes, confirmations and gates are identical on both surfaces. - Operations listed by name: call them directly, for example
superbooks:invoices_list. - "Tool not found": switch to the Code Mode route instead of retrying the direct call. If
superbooks:search_toolsdoes not return the tool either, its OAuth scope was not granted; the user reconnects SuperBooks and approves that scope. - No
superbookstools at all: SuperBooks is not connected yet. Install the SuperBooks power, which adds the server; it signs in with OAuth on first use.
Tools you will use
The superbooks MCP server has two tools. Everything below goes through them.
superbooks:search_tools: lists the operations this connection can reach asdeclare function external_<name>(...)signatures. Call it first, for example with the queriesinvoice,customer,tracker, to get the exact input shapes.superbooks:execute_typescript: runs a short program calling thoseexternal_*functions, which are already in scope; never import or redeclare them. The program mustreturnits result.
If the connection lists the operations by name instead (the per-tool surface), call them directly without the external_ prefix.
Operations this skill uses:
external_customers_listandexternal_customers_get: find the customer and their billing details.external_customers_create: add a customer that does not exist yet.external_tracker_list_projectsandexternal_tracker_list_entries: tracked projects and their time entries (start, stop, description).external_team_get: the team profile, including its currency.external_invoices_create_draft: save an invoice with line items and a due date as a draft. Returns the invoice number.external_invoices_get: read the draft back to confirm totals.external_invoices_send: e-mail the invoice to the customer and mark it unpaid. Confirm first, every time.
Workflow
- In one program, fetch
external_customers_listandexternal_team_getwithawait Promise.all. If the customer is missing, offer to create one; ask for the name and billing e-mail, then callexternal_customers_create. - Build the line items:
- From the user's words: description, quantity, unit price.
- From tracked time: find the project with
external_tracker_list_projects, fetchexternal_tracker_list_entriesfor the period, total the hours, and show the entries you are billing.
- Show the draft: customer, line items, subtotal in the team currency, due date (default 30 days unless the user says otherwise).
- On approval, call
external_invoices_create_draft. Report the invoice number and that it is a draft the customer has not received. - Only if the user asks to send it: restate "Send INV-0007 for $750.00 to billing@cedarvalley.example?" and wait for a yes. Then run
external_invoices_sendon its own, and confirm withexternal_invoices_getthat it is unpaid with asent_attime.
Code Mode pattern
const [customers, team] = await Promise.all([
external_customers_list({}),
external_team_get({}),
]);
return { customers, currency: team.currency };
A call that is out of scope or fails throws an Error whose message says what went wrong. Wrap it in try { ... } catch (e) { return String(e) } and relay the message.
Rules
- Never call
external_invoices_sendwithout an explicit confirmation naming the invoice and the recipient in this conversation. Drafting never implies sending, and a send never runs in the same program as other writes. - Do not invent rates, hours, or tax. Ask when a price or quantity is missing.
- No operation moves money; there is no payment tool.
- Deleting or voiding invoices is not offered here. If the user asks, point them to the SuperBooks app.
Top skills in this category
Stock Analysis
@udiedrichsenAnalyze stocks and cryptocurrencies using Yahoo Finance data. Supports portfolio management, watchlists with alerts, dividend analysis, 8-dimension stock scoring, viral trend detection (Hot Scanner), and rumor/early signal detection. Use for stock analysis, portfolio tracking, earnings reactions, crypto monitoring, trending stocks, or finding rumors before they hit mainstream.
Stock Market Pro
@kys42Yahoo Finance (yfinance) powered stock analysis skill: quotes, fundamentals, ASCII trends, high-resolution charts (RSI/MACD/BB/VWAP/ATR), plus optional web a...
Stock Watcher
@robin797860Manage and monitor a personal stock watchlist with support for adding, removing, listing stocks, and summarizing their recent performance using data from 10jqka.com.cn. Use when the user wants to track specific stocks, get performance summaries, or manage their watchlist.
A股量化 AkShare
@mbpzA股量化数据分析工具,基于AkShare库获取A股行情、财务数据、板块信息等。用于回答关于A股股票查询、行情数据、财务分析、选股等问题。
Intelligent Stocks Screener
@financial-ai-analyst基于东方财富数据库,支持通过自然语言输入筛选A港美股、基金、债券等多种资产,支持多元指标筛选,含技术面、消息面、基本面及市场情绪等,可用于全球资产速筛、跨市场监控、投资组合构建、策略回测等场景。返回结果包含数据说明及 csv 文件。Natural language screener for investment...