@dversum/mcp-server 1.0.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.
Files changed (78) hide show
  1. package/README.md +235 -0
  2. package/dist/bin/dversum-mcp.d.ts +3 -0
  3. package/dist/bin/dversum-mcp.d.ts.map +1 -0
  4. package/dist/bin/dversum-mcp.js +7 -0
  5. package/dist/bin/dversum-mcp.js.map +1 -0
  6. package/dist/src/client.d.ts +13 -0
  7. package/dist/src/client.d.ts.map +1 -0
  8. package/dist/src/client.js +66 -0
  9. package/dist/src/client.js.map +1 -0
  10. package/dist/src/config.d.ts +6 -0
  11. package/dist/src/config.d.ts.map +1 -0
  12. package/dist/src/config.js +20 -0
  13. package/dist/src/config.js.map +1 -0
  14. package/dist/src/context.d.ts +8 -0
  15. package/dist/src/context.d.ts.map +1 -0
  16. package/dist/src/context.js +6 -0
  17. package/dist/src/context.js.map +1 -0
  18. package/dist/src/index.d.ts +7 -0
  19. package/dist/src/index.d.ts.map +1 -0
  20. package/dist/src/index.js +128 -0
  21. package/dist/src/index.js.map +1 -0
  22. package/dist/src/tools/absences.d.ts +4 -0
  23. package/dist/src/tools/absences.d.ts.map +1 -0
  24. package/dist/src/tools/absences.js +44 -0
  25. package/dist/src/tools/absences.js.map +1 -0
  26. package/dist/src/tools/calendar.d.ts +4 -0
  27. package/dist/src/tools/calendar.d.ts.map +1 -0
  28. package/dist/src/tools/calendar.js +69 -0
  29. package/dist/src/tools/calendar.js.map +1 -0
  30. package/dist/src/tools/clients.d.ts +4 -0
  31. package/dist/src/tools/clients.d.ts.map +1 -0
  32. package/dist/src/tools/clients.js +72 -0
  33. package/dist/src/tools/clients.js.map +1 -0
  34. package/dist/src/tools/contacts.d.ts +4 -0
  35. package/dist/src/tools/contacts.d.ts.map +1 -0
  36. package/dist/src/tools/contacts.js +40 -0
  37. package/dist/src/tools/contacts.js.map +1 -0
  38. package/dist/src/tools/finance.d.ts +4 -0
  39. package/dist/src/tools/finance.d.ts.map +1 -0
  40. package/dist/src/tools/finance.js +67 -0
  41. package/dist/src/tools/finance.js.map +1 -0
  42. package/dist/src/tools/invoices.d.ts +4 -0
  43. package/dist/src/tools/invoices.d.ts.map +1 -0
  44. package/dist/src/tools/invoices.js +97 -0
  45. package/dist/src/tools/invoices.js.map +1 -0
  46. package/dist/src/tools/notifications.d.ts +4 -0
  47. package/dist/src/tools/notifications.d.ts.map +1 -0
  48. package/dist/src/tools/notifications.js +24 -0
  49. package/dist/src/tools/notifications.js.map +1 -0
  50. package/dist/src/tools/organization.d.ts +4 -0
  51. package/dist/src/tools/organization.d.ts.map +1 -0
  52. package/dist/src/tools/organization.js +20 -0
  53. package/dist/src/tools/organization.js.map +1 -0
  54. package/dist/src/tools/pages.d.ts +4 -0
  55. package/dist/src/tools/pages.d.ts.map +1 -0
  56. package/dist/src/tools/pages.js +46 -0
  57. package/dist/src/tools/pages.js.map +1 -0
  58. package/dist/src/tools/projects.d.ts +4 -0
  59. package/dist/src/tools/projects.d.ts.map +1 -0
  60. package/dist/src/tools/projects.js +49 -0
  61. package/dist/src/tools/projects.js.map +1 -0
  62. package/dist/src/tools/quotes.d.ts +4 -0
  63. package/dist/src/tools/quotes.d.ts.map +1 -0
  64. package/dist/src/tools/quotes.js +62 -0
  65. package/dist/src/tools/quotes.js.map +1 -0
  66. package/dist/src/tools/storage.d.ts +4 -0
  67. package/dist/src/tools/storage.d.ts.map +1 -0
  68. package/dist/src/tools/storage.js +45 -0
  69. package/dist/src/tools/storage.js.map +1 -0
  70. package/dist/src/tools/tasks.d.ts +4 -0
  71. package/dist/src/tools/tasks.d.ts.map +1 -0
  72. package/dist/src/tools/tasks.js +72 -0
  73. package/dist/src/tools/tasks.js.map +1 -0
  74. package/dist/src/tools/time.d.ts +4 -0
  75. package/dist/src/tools/time.d.ts.map +1 -0
  76. package/dist/src/tools/time.js +81 -0
  77. package/dist/src/tools/time.js.map +1 -0
  78. package/package.json +47 -0
@@ -0,0 +1,69 @@
1
+ import { z } from "zod";
2
+ export function registerCalendarTools(server, client) {
3
+ server.tool("list_events", "List calendar events within a date range.", {
4
+ start: z.string().optional().describe("Start date (YYYY-MM-DD)"),
5
+ end: z.string().optional().describe("End date (YYYY-MM-DD)"),
6
+ }, async ({ start, end }) => {
7
+ const params = {};
8
+ if (start)
9
+ params.start = start;
10
+ if (end)
11
+ params.end = end;
12
+ const data = await client.get("/calendar/events", params);
13
+ return {
14
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
15
+ };
16
+ });
17
+ server.tool("get_event", "Get detailed information about a calendar event.", {
18
+ id: z.string().describe("The event UUID"),
19
+ }, async ({ id }) => {
20
+ const data = await client.get(`/calendar/events/${id}`);
21
+ return {
22
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
23
+ };
24
+ });
25
+ server.tool("create_event", "Create a new calendar event.", {
26
+ title: z.string().describe("Event title"),
27
+ description: z.string().optional().describe("Event description"),
28
+ start_time: z.string().describe("Start time in ISO 8601 format"),
29
+ end_time: z.string().describe("End time in ISO 8601 format"),
30
+ all_day: z.boolean().optional().describe("Whether this is an all-day event"),
31
+ location: z.string().optional().describe("Event location"),
32
+ color: z.string().optional().describe("Event color (hex code)"),
33
+ create_meet_link: z
34
+ .boolean()
35
+ .optional()
36
+ .describe("Create a Google Meet link for this event"),
37
+ }, async (input) => {
38
+ const data = await client.post("/calendar/events", input);
39
+ return {
40
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
41
+ };
42
+ });
43
+ server.tool("update_event", "Update an existing calendar event.", {
44
+ id: z.string().describe("The event UUID"),
45
+ title: z.string().optional().describe("Event title"),
46
+ description: z.string().optional().describe("Event description"),
47
+ start_time: z.string().optional().describe("Start time (ISO 8601)"),
48
+ end_time: z.string().optional().describe("End time (ISO 8601)"),
49
+ all_day: z.boolean().optional().describe("All-day event"),
50
+ location: z.string().optional().describe("Location"),
51
+ color: z.string().optional().describe("Color (hex code)"),
52
+ }, async ({ id, ...fields }) => {
53
+ const data = await client.put(`/calendar/events/${id}`, fields);
54
+ return {
55
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
56
+ };
57
+ });
58
+ server.tool("delete_event", "Delete a calendar event.", {
59
+ id: z.string().describe("The event UUID"),
60
+ }, async ({ id }) => {
61
+ await client.delete(`/calendar/events/${id}`);
62
+ return {
63
+ content: [
64
+ { type: "text", text: `Calendar event ${id} deleted successfully.` },
65
+ ],
66
+ };
67
+ });
68
+ }
69
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../src/tools/calendar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { DversumClient } from "../client.js";
3
+ export declare function registerClientTools(server: McpServer, client: DversumClient): void;
4
+ //# sourceMappingURL=clients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients.d.ts","sourceRoot":"","sources":["../../../src/tools/clients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,QAiGtB"}
@@ -0,0 +1,72 @@
1
+ import { z } from "zod";
2
+ export function registerClientTools(server, client) {
3
+ server.tool("list_clients", "List all clients in the organization. Returns clients with their associated projects. Supports pagination.", {
4
+ page: z.number().optional().describe("Page number (0-based, default 0)"),
5
+ per_page: z
6
+ .number()
7
+ .optional()
8
+ .describe("Results per page (default 50, max 100)"),
9
+ }, async ({ page, per_page }) => {
10
+ const params = {};
11
+ if (page !== undefined)
12
+ params.page = String(page);
13
+ if (per_page !== undefined)
14
+ params.per_page = String(per_page);
15
+ const data = await client.get("/clients", params);
16
+ return {
17
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
18
+ };
19
+ });
20
+ server.tool("get_client", "Get detailed information about a specific client by ID.", {
21
+ id: z.string().describe("The client UUID"),
22
+ }, async ({ id }) => {
23
+ const data = await client.get(`/clients/${id}`);
24
+ return {
25
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
26
+ };
27
+ });
28
+ server.tool("create_client", "Create a new client in the organization.", {
29
+ name: z.string().describe("Client/company name"),
30
+ email: z.string().optional().describe("Primary email address"),
31
+ phone: z.string().optional().describe("Phone number"),
32
+ website: z.string().optional().describe("Website URL"),
33
+ address: z.string().optional().describe("Street address"),
34
+ city: z.string().optional().describe("City"),
35
+ zip: z.string().optional().describe("Postal/ZIP code"),
36
+ country: z.string().optional().describe("Country"),
37
+ vat_id: z.string().optional().describe("VAT ID (e.g. DE123456789)"),
38
+ notes: z.string().optional().describe("Internal notes"),
39
+ }, async (input) => {
40
+ const data = await client.post("/clients", input);
41
+ return {
42
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
43
+ };
44
+ });
45
+ server.tool("update_client", "Update an existing client's details.", {
46
+ id: z.string().describe("The client UUID"),
47
+ name: z.string().optional().describe("Client/company name"),
48
+ email: z.string().optional().describe("Primary email address"),
49
+ phone: z.string().optional().describe("Phone number"),
50
+ website: z.string().optional().describe("Website URL"),
51
+ address: z.string().optional().describe("Street address"),
52
+ city: z.string().optional().describe("City"),
53
+ zip: z.string().optional().describe("Postal/ZIP code"),
54
+ country: z.string().optional().describe("Country"),
55
+ vat_id: z.string().optional().describe("VAT ID"),
56
+ notes: z.string().optional().describe("Internal notes"),
57
+ }, async ({ id, ...fields }) => {
58
+ const data = await client.put(`/clients/${id}`, fields);
59
+ return {
60
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
61
+ };
62
+ });
63
+ server.tool("delete_client", "Delete a client by ID. This cannot be undone.", {
64
+ id: z.string().describe("The client UUID"),
65
+ }, async ({ id }) => {
66
+ await client.delete(`/clients/${id}`);
67
+ return {
68
+ content: [{ type: "text", text: `Client ${id} deleted successfully.` }],
69
+ };
70
+ });
71
+ }
72
+ //# sourceMappingURL=clients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients.js","sourceRoot":"","sources":["../../../src/tools/clients.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { DversumClient } from "../client.js";
3
+ export declare function registerContactTools(server: McpServer, client: DversumClient): void;
4
+ //# sourceMappingURL=contacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../../src/tools/contacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,QAqDtB"}
@@ -0,0 +1,40 @@
1
+ import { z } from "zod";
2
+ export function registerContactTools(server, client) {
3
+ server.tool("list_contacts", "List all contacts in the organization.", {
4
+ page: z.number().optional().describe("Page number (0-based)"),
5
+ per_page: z.number().optional().describe("Results per page (default 50)"),
6
+ }, async ({ page, per_page }) => {
7
+ const params = {};
8
+ if (page !== undefined)
9
+ params.page = String(page);
10
+ if (per_page !== undefined)
11
+ params.per_page = String(per_page);
12
+ const data = await client.get("/contacts", params);
13
+ return {
14
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
15
+ };
16
+ });
17
+ server.tool("get_contact", "Get detailed information about a specific contact.", {
18
+ id: z.string().describe("The contact UUID"),
19
+ }, async ({ id }) => {
20
+ const data = await client.get(`/contacts/${id}`);
21
+ return {
22
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
23
+ };
24
+ });
25
+ server.tool("create_contact", "Create a new contact.", {
26
+ first_name: z.string().describe("First name"),
27
+ last_name: z.string().describe("Last name"),
28
+ email: z.string().optional().describe("Email address"),
29
+ phone: z.string().optional().describe("Phone number"),
30
+ position: z.string().optional().describe("Job title/position"),
31
+ client_id: z.string().optional().describe("Associated client UUID"),
32
+ notes: z.string().optional().describe("Notes about this contact"),
33
+ }, async (input) => {
34
+ const data = await client.post("/contacts", input);
35
+ return {
36
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
37
+ };
38
+ });
39
+ }
40
+ //# sourceMappingURL=contacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../../src/tools/contacts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,oBAAoB,CAClC,MAAiB,EACjB,MAAqB;IAErB,MAAM,CAAC,IAAI,CACT,eAAe,EACf,wCAAwC,EACxC;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC7D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KAC1E,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3B,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,QAAQ,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,oDAAoD,EACpD;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KAC5C,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,uBAAuB,EACvB;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC7C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QACtD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC9D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAClE,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { DversumClient } from "../client.js";
3
+ export declare function registerFinanceTools(server: McpServer, client: DversumClient): void;
4
+ //# sourceMappingURL=finance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finance.d.ts","sourceRoot":"","sources":["../../../src/tools/finance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,QAiFtB"}
@@ -0,0 +1,67 @@
1
+ import { z } from "zod";
2
+ export function registerFinanceTools(server, client) {
3
+ server.tool("get_finance_overview", "Get the financial overview — monthly revenue vs expenses breakdown for a given year.", {
4
+ year: z
5
+ .number()
6
+ .optional()
7
+ .describe("Year to query (default: current year)"),
8
+ }, async ({ year }) => {
9
+ const params = {};
10
+ if (year !== undefined)
11
+ params.year = String(year);
12
+ const data = await client.get("/finanzen/overview", params);
13
+ return {
14
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
15
+ };
16
+ });
17
+ server.tool("get_vat_summary", "Get the VAT pre-return (USt-Voranmeldung) summary with Kennzahlen 81, 86, 66, 83.", {
18
+ year: z.number().describe("Year"),
19
+ quarter: z
20
+ .number()
21
+ .optional()
22
+ .describe("Quarter (1-4). If omitted, returns full year."),
23
+ }, async ({ year, quarter }) => {
24
+ const params = { year: String(year) };
25
+ if (quarter !== undefined)
26
+ params.quarter = String(quarter);
27
+ const data = await client.get("/finanzen/ust-summary", params);
28
+ return {
29
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
30
+ };
31
+ });
32
+ server.tool("list_received_invoices", "List received invoices (Eingangsrechnungen) from suppliers.", {
33
+ page: z.number().optional().describe("Page number (0-based)"),
34
+ per_page: z.number().optional().describe("Results per page"),
35
+ status: z
36
+ .enum(["received", "validated", "approved", "booked", "paid", "rejected"])
37
+ .optional()
38
+ .describe("Filter by status"),
39
+ }, async ({ page, per_page, status }) => {
40
+ const params = {};
41
+ if (page !== undefined)
42
+ params.page = String(page);
43
+ if (per_page !== undefined)
44
+ params.per_page = String(per_page);
45
+ if (status)
46
+ params.status = status;
47
+ const data = await client.get("/received-invoices", params);
48
+ return {
49
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
50
+ };
51
+ });
52
+ server.tool("list_suppliers", "List all suppliers (Lieferanten).", {
53
+ page: z.number().optional().describe("Page number (0-based)"),
54
+ per_page: z.number().optional().describe("Results per page"),
55
+ }, async ({ page, per_page }) => {
56
+ const params = {};
57
+ if (page !== undefined)
58
+ params.page = String(page);
59
+ if (per_page !== undefined)
60
+ params.per_page = String(per_page);
61
+ const data = await client.get("/suppliers", params);
62
+ return {
63
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
64
+ };
65
+ });
66
+ }
67
+ //# sourceMappingURL=finance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finance.js","sourceRoot":"","sources":["../../../src/tools/finance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { DversumClient } from "../client.js";
3
+ export declare function registerInvoiceTools(server: McpServer, client: DversumClient): void;
4
+ //# sourceMappingURL=invoices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../../../src/tools/invoices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,QA+HtB"}
@@ -0,0 +1,97 @@
1
+ import { z } from "zod";
2
+ export function registerInvoiceTools(server, client) {
3
+ server.tool("list_invoices", "List invoices. Filter by status, client, or type (invoice, credit_note, cancellation).", {
4
+ page: z.number().optional().describe("Page number (0-based)"),
5
+ per_page: z.number().optional().describe("Results per page (default 50)"),
6
+ status: z
7
+ .enum(["draft", "sent", "paid", "overdue", "cancelled"])
8
+ .optional()
9
+ .describe("Filter by invoice status"),
10
+ client_id: z.string().optional().describe("Filter by client UUID"),
11
+ type: z
12
+ .enum(["invoice", "credit_note", "cancellation"])
13
+ .optional()
14
+ .describe("Filter by invoice type"),
15
+ }, async ({ page, per_page, status, client_id, type }) => {
16
+ const params = {};
17
+ if (page !== undefined)
18
+ params.page = String(page);
19
+ if (per_page !== undefined)
20
+ params.per_page = String(per_page);
21
+ if (status)
22
+ params.status = status;
23
+ if (client_id)
24
+ params.client_id = client_id;
25
+ if (type)
26
+ params.type = type;
27
+ const data = await client.get("/invoices", params);
28
+ return {
29
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
30
+ };
31
+ });
32
+ server.tool("get_invoice", "Get detailed information about an invoice including line items, payments, and totals.", {
33
+ id: z.string().describe("The invoice UUID"),
34
+ }, async ({ id }) => {
35
+ const data = await client.get(`/invoices/${id}`);
36
+ return {
37
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
38
+ };
39
+ });
40
+ server.tool("create_invoice", "Create a new draft invoice for a client.", {
41
+ client_id: z.string().describe("Client UUID"),
42
+ invoice_date: z.string().optional().describe("Invoice date (YYYY-MM-DD, default today)"),
43
+ due_date: z.string().optional().describe("Due date (YYYY-MM-DD)"),
44
+ notes: z.string().optional().describe("Notes/description on the invoice"),
45
+ line_items: z
46
+ .array(z.object({
47
+ description: z.string().describe("Line item description"),
48
+ quantity: z.number().describe("Quantity"),
49
+ unit_price: z.number().describe("Unit price in cents"),
50
+ tax_rate: z
51
+ .number()
52
+ .optional()
53
+ .describe("Tax rate as percentage (e.g. 19 for 19%)"),
54
+ }))
55
+ .optional()
56
+ .describe("Invoice line items"),
57
+ }, async (input) => {
58
+ const data = await client.post("/invoices", input);
59
+ return {
60
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
61
+ };
62
+ });
63
+ server.tool("update_invoice_status", "Update the status of an invoice (e.g. mark as sent, paid, cancelled).", {
64
+ id: z.string().describe("The invoice UUID"),
65
+ status: z
66
+ .enum(["draft", "sent", "paid", "overdue", "cancelled"])
67
+ .describe("New invoice status"),
68
+ }, async ({ id, status }) => {
69
+ const data = await client.patch(`/invoices/${id}/status`, { status });
70
+ return {
71
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
72
+ };
73
+ });
74
+ server.tool("send_invoice_email", "Send an invoice to the client via email.", {
75
+ id: z.string().describe("The invoice UUID"),
76
+ to: z.string().optional().describe("Override recipient email address"),
77
+ subject: z.string().optional().describe("Custom email subject"),
78
+ message: z.string().optional().describe("Custom email body message"),
79
+ }, async ({ id, ...options }) => {
80
+ const data = await client.post(`/invoices/${id}/send-email`, options);
81
+ return {
82
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
83
+ };
84
+ });
85
+ server.tool("create_invoice_from_time", "Create a new invoice from tracked time entries for a project.", {
86
+ project_id: z.string().describe("Project UUID"),
87
+ client_id: z.string().describe("Client UUID"),
88
+ start_date: z.string().optional().describe("Include time entries from (YYYY-MM-DD)"),
89
+ end_date: z.string().optional().describe("Include time entries until (YYYY-MM-DD)"),
90
+ }, async (input) => {
91
+ const data = await client.post("/invoices/from-time-entries", input);
92
+ return {
93
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
94
+ };
95
+ });
96
+ }
97
+ //# sourceMappingURL=invoices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoices.js","sourceRoot":"","sources":["../../../src/tools/invoices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { DversumClient } from "../client.js";
3
+ export declare function registerNotificationTools(server: McpServer, client: DversumClient): void;
4
+ //# sourceMappingURL=notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../../src/tools/notifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,QA+BtB"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ export function registerNotificationTools(server, client) {
3
+ server.tool("list_notifications", "List recent notifications.", {
4
+ page: z.number().optional().describe("Page number (0-based)"),
5
+ per_page: z.number().optional().describe("Results per page"),
6
+ }, async ({ page, per_page }) => {
7
+ const params = {};
8
+ if (page !== undefined)
9
+ params.page = String(page);
10
+ if (per_page !== undefined)
11
+ params.per_page = String(per_page);
12
+ const data = await client.get("/notifications", params);
13
+ return {
14
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
15
+ };
16
+ });
17
+ server.tool("get_unread_count", "Get the count of unread notifications.", {}, async () => {
18
+ const data = await client.get("/notifications/unread-count");
19
+ return {
20
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
21
+ };
22
+ });
23
+ }
24
+ //# sourceMappingURL=notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../../src/tools/notifications.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,yBAAyB,CACvC,MAAiB,EACjB,MAAqB;IAErB,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,4BAA4B,EAC5B;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC7D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KAC7D,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3B,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,QAAQ,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,wCAAwC,EACxC,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC7D,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { DversumClient } from "../client.js";
3
+ export declare function registerOrganizationTools(server: McpServer, client: DversumClient): void;
4
+ //# sourceMappingURL=organization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization.d.ts","sourceRoot":"","sources":["../../../src/tools/organization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,QA6BtB"}
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+ export function registerOrganizationTools(server, client) {
3
+ server.tool("get_organization", "Get details about an organization.", {
4
+ id: z.string().describe("The organization UUID"),
5
+ }, async ({ id }) => {
6
+ const data = await client.get(`/organizations/${id}`);
7
+ return {
8
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
9
+ };
10
+ });
11
+ server.tool("list_members", "List all members of an organization.", {
12
+ id: z.string().describe("The organization UUID"),
13
+ }, async ({ id }) => {
14
+ const data = await client.get(`/organizations/${id}/members`);
15
+ return {
16
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
17
+ };
18
+ });
19
+ }
20
+ //# sourceMappingURL=organization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization.js","sourceRoot":"","sources":["../../../src/tools/organization.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,yBAAyB,CACvC,MAAiB,EACjB,MAAqB;IAErB,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,oCAAoC,EACpC;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KACjD,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACtD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,sCAAsC,EACtC;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KACjD,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;QAC9D,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { DversumClient } from "../client.js";
3
+ export declare function registerPageTools(server: McpServer, client: DversumClient): void;
4
+ //# sourceMappingURL=pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../../src/tools/pages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,QAiEtB"}
@@ -0,0 +1,46 @@
1
+ import { z } from "zod";
2
+ export function registerPageTools(server, client) {
3
+ server.tool("list_pages", "List all pages (Notion-like documents).", {
4
+ page: z.number().optional().describe("Page number (0-based)"),
5
+ per_page: z.number().optional().describe("Results per page"),
6
+ }, async ({ page, per_page }) => {
7
+ const params = {};
8
+ if (page !== undefined)
9
+ params.page = String(page);
10
+ if (per_page !== undefined)
11
+ params.per_page = String(per_page);
12
+ const data = await client.get("/pages", params);
13
+ return {
14
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
15
+ };
16
+ });
17
+ server.tool("get_page", "Get a page with its full content.", {
18
+ id: z.string().describe("The page UUID"),
19
+ }, async ({ id }) => {
20
+ const data = await client.get(`/pages/${id}`);
21
+ return {
22
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
23
+ };
24
+ });
25
+ server.tool("create_page", "Create a new page.", {
26
+ title: z.string().describe("Page title"),
27
+ parent_id: z.string().optional().describe("Parent page UUID (for nesting)"),
28
+ project_id: z.string().optional().describe("Project UUID (for project-scoped pages)"),
29
+ icon: z.string().optional().describe("Page icon (emoji)"),
30
+ }, async (input) => {
31
+ const data = await client.post("/pages", input);
32
+ return {
33
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
34
+ };
35
+ });
36
+ server.tool("update_page_content", "Update a page's content (Tiptap JSON format).", {
37
+ id: z.string().describe("The page UUID"),
38
+ content: z.any().describe("Page content in Tiptap JSON format"),
39
+ }, async ({ id, content }) => {
40
+ const data = await client.put(`/pages/${id}/content`, { content });
41
+ return {
42
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
43
+ };
44
+ });
45
+ }
46
+ //# sourceMappingURL=pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../../src/tools/pages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { DversumClient } from "../client.js";
3
+ export declare function registerProjectTools(server: McpServer, client: DversumClient): void;
4
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/tools/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,QAoEtB"}