beeswax-mcp 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/dist/index.js +1 -1
- package/dist/tools.js +38 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
The official [Model Context Protocol](https://modelcontextprotocol.io) server for
|
|
4
4
|
[Beeswax](https://www.beeswaxapp.com) — projects, tasks, time tracking and accounting
|
|
5
5
|
for creative businesses. It lets Claude and other MCP clients query your invoices,
|
|
6
|
-
quotes, expenses, payments, journals, time entries, milestones
|
|
6
|
+
quotes, expenses, payments, journals, time entries, milestones, products & services
|
|
7
|
+
and tax returns.
|
|
7
8
|
|
|
8
9
|
It is **read-mostly**: writes are limited to manual journals and tax-return fields,
|
|
9
10
|
and each write is gated behind its own token scope — everything else is strictly
|
|
@@ -51,7 +52,7 @@ account.
|
|
|
51
52
|
**Grant only the scopes you need.** Tick individual read scopes
|
|
52
53
|
(`invoices:read`, `payments:read`, `transactions:read`, `journal_entries:read`,
|
|
53
54
|
`tax_returns:read`, `events:read`, `milestones:read`, `projects:read`,
|
|
54
|
-
`time_entries:read`, …) rather than `all` — `all` grants read **and** write. Add
|
|
55
|
+
`time_entries:read`, `transaction_templates:read`, …) rather than `all` — `all` grants read **and** write. Add
|
|
55
56
|
`journal_entries:write` / `tax_returns:write` only if the agent should be able to
|
|
56
57
|
use the write tools.
|
|
57
58
|
|
|
@@ -79,6 +80,7 @@ longer use from the same settings page.
|
|
|
79
80
|
| `list_events`, `get_event` | `/events` (visibility-filtered) |
|
|
80
81
|
| `list_milestones`, `get_milestone` | `/milestones` |
|
|
81
82
|
| `get_project` | `/active_account/projects/:id` |
|
|
83
|
+
| `list_products_services`, `get_product_service` | `/transaction_templates` |
|
|
82
84
|
| `list_manual_journals`, `get_manual_journal`, `create_manual_journal` (write), `finalise_manual_journal` (write) | `/raw_journal_entries` |
|
|
83
85
|
| `list_tax_returns`, `get_tax_return`, `get_tax_return_field_transactions`, `list_tax_return_findings`, `update_tax_return_field` (write), `confirm_tax_return_section` (write) | `/tax_returns` |
|
|
84
86
|
|
|
@@ -95,6 +97,10 @@ longer use from the same settings page.
|
|
|
95
97
|
fetches. `outstanding: true` is the looser "not paid/draft, any due date" set.
|
|
96
98
|
- **Dates.** `from` / `to` accept ISO (`2026-01-01`) or loose strings
|
|
97
99
|
(`Jan 1 2026`); they are normalized to `YYYY-MM-DD` before being sent.
|
|
100
|
+
- **Products & services.** Beeswax stores the catalogue as *transaction
|
|
101
|
+
templates*; the tools filter with `kind: "product"` / `"service"` and need the
|
|
102
|
+
`transaction_templates:read` scope. Internal system templates are excluded
|
|
103
|
+
unless `system: "true"`.
|
|
98
104
|
- **Manual journals.** Balanced double-entry enforced by the API (≥ 2 lines, one of
|
|
99
105
|
debit/credit per line, debits = credits). Created finalised by default; pass
|
|
100
106
|
`status: "draft"` and use `finalise_manual_journal` for a review step. Needs
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ if (!token) {
|
|
|
14
14
|
}
|
|
15
15
|
const client = new BeeswaxClient(baseUrl, token);
|
|
16
16
|
const toolsByName = new Map(TOOLS.map((tool) => [tool.name, tool]));
|
|
17
|
-
const server = new Server({ name: "beeswax-mcp", version: "0.
|
|
17
|
+
const server = new Server({ name: "beeswax-mcp", version: "0.2.0" }, { capabilities: { tools: {} } });
|
|
18
18
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
19
19
|
tools: TOOLS.map(({ name, description, inputSchema }) => ({ name, description, inputSchema })),
|
|
20
20
|
}));
|
package/dist/tools.js
CHANGED
|
@@ -16,6 +16,8 @@ const DATE_PROPS = {
|
|
|
16
16
|
const ACCOUNTING_LIST_PROPS = {
|
|
17
17
|
state: { type: "string", description: "Filter by state (draft, finalised, pdf_sent, partial_paid, paid, …)." },
|
|
18
18
|
project_id: { type: "integer", description: "Filter to a single project." },
|
|
19
|
+
company_id: { type: "integer", description: "Filter to a single client/supplier company by id." },
|
|
20
|
+
company: { type: "string", description: "Filter by client/supplier company name (case-insensitive substring match)." },
|
|
19
21
|
...DATE_PROPS,
|
|
20
22
|
};
|
|
21
23
|
// Only the payable types (invoices / expenses) carry a due date, so the
|
|
@@ -44,6 +46,8 @@ function accountingTools(resource, singular, label, listName, opts = {}) {
|
|
|
44
46
|
handler: (client, args) => client.fetchAll(`/${resource}`, resource, {
|
|
45
47
|
state: args.state,
|
|
46
48
|
project_id: args.project_id,
|
|
49
|
+
company_id: args.company_id,
|
|
50
|
+
company: args.company,
|
|
47
51
|
from: normalizeDate(args.from),
|
|
48
52
|
to: normalizeDate(args.to),
|
|
49
53
|
...(payable ? { overdue: args.overdue, outstanding: args.outstanding } : {}),
|
|
@@ -156,6 +160,40 @@ export const TOOLS = [
|
|
|
156
160
|
inputSchema: { type: "object", properties: { id: { type: "integer" } }, required: ["id"] },
|
|
157
161
|
handler: (client, args) => client.getOne(`/active_account/projects/${args.id}`, "project"),
|
|
158
162
|
},
|
|
163
|
+
// ── Products & services catalogue (transaction templates) ──────────────
|
|
164
|
+
{
|
|
165
|
+
name: "list_products_services",
|
|
166
|
+
description: "List the account's products & services catalogue (stored as 'transaction templates'): everything the business sells or buys as a line item — products and services/activities with their unit, sell/buy prices, linked income/expense accounts and taxes. Use this whenever the user asks about products, services, price lists, rates or catalogue items.",
|
|
167
|
+
inputSchema: {
|
|
168
|
+
type: "object",
|
|
169
|
+
properties: {
|
|
170
|
+
kind: {
|
|
171
|
+
type: "string",
|
|
172
|
+
enum: ["product", "service"],
|
|
173
|
+
description: "Only products, or only services/activities. Omit for both.",
|
|
174
|
+
},
|
|
175
|
+
active: { type: "boolean", description: "Filter by active flag (false = archived items)." },
|
|
176
|
+
query: { type: "string", description: "Case-insensitive substring match on title or description." },
|
|
177
|
+
system: {
|
|
178
|
+
type: "string",
|
|
179
|
+
enum: ["true", "false"],
|
|
180
|
+
description: "true = only internal system templates; false or omitted = only user-created catalogue items.",
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
handler: (client, args) => client.fetchAll("/transaction_templates", "transaction_templates", {
|
|
185
|
+
kind: args.kind,
|
|
186
|
+
active: args.active,
|
|
187
|
+
query: args.query,
|
|
188
|
+
system: args.system,
|
|
189
|
+
}),
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
name: "get_product_service",
|
|
193
|
+
description: "Get a single product or service (transaction template) by id, with its unit, sell/buy prices, item category, linked accounts and taxes.",
|
|
194
|
+
inputSchema: { type: "object", properties: { id: { type: "integer" } }, required: ["id"] },
|
|
195
|
+
handler: (client, args) => client.getOne(`/transaction_templates/${args.id}`, "transaction_template"),
|
|
196
|
+
},
|
|
159
197
|
// ── Tax returns (Australian company / sole-trader) ──────────────────
|
|
160
198
|
{
|
|
161
199
|
name: "list_tax_returns",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "beeswax-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Official MCP server for Beeswax (beeswaxapp.com) — query invoices, quotes, expenses, payments, journals, time entries, projects and tax returns from Claude and other MCP clients.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://www.beeswaxapp.com/support/mcp-setup",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"scripts": {
|
|
31
31
|
"build": "tsc",
|
|
32
|
+
"build:mcpb": "bash scripts/build-mcpb.sh",
|
|
32
33
|
"start": "node dist/index.js",
|
|
33
34
|
"dev": "tsc --watch",
|
|
34
35
|
"prepublishOnly": "npm run build"
|