@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,49 @@
1
+ import { z } from "zod";
2
+ export function registerProjectTools(server, client) {
3
+ server.tool("list_projects", "List all projects in the organization. Returns projects grouped by area with status and member info.", {
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("/projects", params);
13
+ return {
14
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
15
+ };
16
+ });
17
+ server.tool("get_project", "Get detailed information about a specific project.", {
18
+ id: z.string().describe("The project UUID"),
19
+ }, async ({ id }) => {
20
+ const data = await client.get(`/projects/${id}`);
21
+ return {
22
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
23
+ };
24
+ });
25
+ server.tool("create_project", "Create a new project.", {
26
+ name: z.string().describe("Project name"),
27
+ description: z.string().optional().describe("Project description"),
28
+ client_id: z.string().optional().describe("Associated client UUID"),
29
+ area_id: z.string().optional().describe("Area/group UUID"),
30
+ status: z
31
+ .enum(["active", "archived", "completed"])
32
+ .optional()
33
+ .describe("Project status (default: active)"),
34
+ }, async (input) => {
35
+ const data = await client.post("/projects", input);
36
+ return {
37
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
38
+ };
39
+ });
40
+ server.tool("get_project_board", "Get the full kanban board for a project — all columns with their tasks, assignees, tags, subtask counts, and time tracked.", {
41
+ id: z.string().describe("The project UUID"),
42
+ }, async ({ id }) => {
43
+ const data = await client.get(`/projects/${id}/columns`);
44
+ return {
45
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
46
+ };
47
+ });
48
+ }
49
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/tools/projects.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 registerQuoteTools(server: McpServer, client: DversumClient): void;
4
+ //# sourceMappingURL=quotes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quotes.d.ts","sourceRoot":"","sources":["../../../src/tools/quotes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,QAiFtB"}
@@ -0,0 +1,62 @@
1
+ import { z } from "zod";
2
+ export function registerQuoteTools(server, client) {
3
+ server.tool("list_quotes", "List quotes/proposals. Filter by status or client.", {
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", "accepted", "declined", "expired"])
8
+ .optional()
9
+ .describe("Filter by quote status"),
10
+ client_id: z.string().optional().describe("Filter by client UUID"),
11
+ }, async ({ page, per_page, status, client_id }) => {
12
+ const params = {};
13
+ if (page !== undefined)
14
+ params.page = String(page);
15
+ if (per_page !== undefined)
16
+ params.per_page = String(per_page);
17
+ if (status)
18
+ params.status = status;
19
+ if (client_id)
20
+ params.client_id = client_id;
21
+ const data = await client.get("/quotes", params);
22
+ return {
23
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
24
+ };
25
+ });
26
+ server.tool("get_quote", "Get detailed information about a quote including line items and totals.", {
27
+ id: z.string().describe("The quote UUID"),
28
+ }, async ({ id }) => {
29
+ const data = await client.get(`/quotes/${id}`);
30
+ return {
31
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
32
+ };
33
+ });
34
+ server.tool("create_quote", "Create a new draft quote/proposal for a client.", {
35
+ client_id: z.string().describe("Client UUID"),
36
+ valid_until: z.string().optional().describe("Quote valid until date (YYYY-MM-DD)"),
37
+ notes: z.string().optional().describe("Notes on the quote"),
38
+ line_items: z
39
+ .array(z.object({
40
+ description: z.string().describe("Line item description"),
41
+ quantity: z.number().describe("Quantity"),
42
+ unit_price: z.number().describe("Unit price in cents"),
43
+ tax_rate: z.number().optional().describe("Tax rate percentage"),
44
+ }))
45
+ .optional()
46
+ .describe("Quote line items"),
47
+ }, async (input) => {
48
+ const data = await client.post("/quotes", input);
49
+ return {
50
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
51
+ };
52
+ });
53
+ server.tool("convert_quote_to_invoice", "Convert an accepted quote into a draft invoice.", {
54
+ id: z.string().describe("The quote UUID to convert"),
55
+ }, async ({ id }) => {
56
+ const data = await client.post(`/quotes/${id}/convert-to-invoice`);
57
+ return {
58
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
59
+ };
60
+ });
61
+ }
62
+ //# sourceMappingURL=quotes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quotes.js","sourceRoot":"","sources":["../../../src/tools/quotes.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 registerStorageTools(server: McpServer, client: DversumClient): void;
4
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/tools/storage.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+DtB"}
@@ -0,0 +1,45 @@
1
+ import { z } from "zod";
2
+ export function registerStorageTools(server, client) {
3
+ server.tool("list_files", "List files in a folder (or root if no folder specified).", {
4
+ folder_id: z.string().optional().describe("Folder UUID (omit for root)"),
5
+ search: z.string().optional().describe("Search files by name"),
6
+ }, async ({ folder_id, search }) => {
7
+ const params = {};
8
+ if (folder_id)
9
+ params.folder_id = folder_id;
10
+ if (search)
11
+ params.search = search;
12
+ const data = await client.get("/storage/files", params);
13
+ return {
14
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
15
+ };
16
+ });
17
+ server.tool("list_folders", "List folders (or subfolders of a parent folder).", {
18
+ parent_id: z.string().optional().describe("Parent folder UUID (omit for root)"),
19
+ }, async ({ parent_id }) => {
20
+ const params = {};
21
+ if (parent_id)
22
+ params.parent_id = parent_id;
23
+ const data = await client.get("/storage/folders", params);
24
+ return {
25
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
26
+ };
27
+ });
28
+ server.tool("create_folder", "Create a new folder.", {
29
+ name: z.string().describe("Folder name"),
30
+ parent_id: z.string().optional().describe("Parent folder UUID"),
31
+ color: z.string().optional().describe("Folder color"),
32
+ }, async (input) => {
33
+ const data = await client.post("/storage/folders", input);
34
+ return {
35
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
36
+ };
37
+ });
38
+ server.tool("get_folder_tree", "Get the full folder hierarchy tree.", {}, async () => {
39
+ const data = await client.get("/storage/folders/tree");
40
+ return {
41
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
42
+ };
43
+ });
44
+ }
45
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/tools/storage.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 registerTaskTools(server: McpServer, client: DversumClient): void;
4
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks.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,QAyGtB"}
@@ -0,0 +1,72 @@
1
+ import { z } from "zod";
2
+ export function registerTaskTools(server, client) {
3
+ server.tool("get_task", "Get detailed information about a task including description, assignees, subtasks, tags, time tracked, and child tasks.", {
4
+ id: z.string().describe("The task UUID"),
5
+ }, async ({ id }) => {
6
+ const data = await client.get(`/tasks/${id}`);
7
+ return {
8
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
9
+ };
10
+ });
11
+ server.tool("create_task", "Create a new task in a project column.", {
12
+ project_id: z.string().describe("The project UUID"),
13
+ column_id: z.string().describe("The column UUID to place the task in"),
14
+ title: z.string().describe("Task title"),
15
+ description: z.string().optional().describe("Task description (HTML supported)"),
16
+ due_date: z.string().optional().describe("Due date in ISO 8601 format (YYYY-MM-DD)"),
17
+ priority: z
18
+ .enum(["low", "medium", "high", "urgent"])
19
+ .optional()
20
+ .describe("Task priority"),
21
+ parent_id: z.string().optional().describe("Parent task UUID (for child tasks)"),
22
+ }, async (input) => {
23
+ const data = await client.post("/tasks", input);
24
+ return {
25
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
26
+ };
27
+ });
28
+ server.tool("update_task", "Update an existing task's properties.", {
29
+ id: z.string().describe("The task UUID"),
30
+ title: z.string().optional().describe("Task title"),
31
+ description: z.string().optional().describe("Task description"),
32
+ due_date: z.string().optional().describe("Due date (YYYY-MM-DD)"),
33
+ priority: z
34
+ .enum(["low", "medium", "high", "urgent"])
35
+ .optional()
36
+ .describe("Task priority"),
37
+ }, async ({ id, ...fields }) => {
38
+ const data = await client.put(`/tasks/${id}`, fields);
39
+ return {
40
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
41
+ };
42
+ });
43
+ server.tool("move_task", "Move a task to a different column (changes its status on the kanban board).", {
44
+ id: z.string().describe("The task UUID"),
45
+ column_id: z.string().describe("Target column UUID"),
46
+ }, async ({ id, column_id }) => {
47
+ const data = await client.patch(`/tasks/${id}/move`, { column_id });
48
+ return {
49
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
50
+ };
51
+ });
52
+ server.tool("assign_task", "Add an assignee to a task.", {
53
+ task_id: z.string().describe("The task UUID"),
54
+ user_id: z.string().describe("The user UUID to assign"),
55
+ }, async ({ task_id, user_id }) => {
56
+ const data = await client.post(`/tasks/${task_id}/assignees`, {
57
+ user_id,
58
+ });
59
+ return {
60
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
61
+ };
62
+ });
63
+ server.tool("list_task_comments", "List all comments on a task.", {
64
+ task_id: z.string().describe("The task UUID"),
65
+ }, async ({ task_id }) => {
66
+ const data = await client.get(`/tasks/${task_id}/comments`);
67
+ return {
68
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
69
+ };
70
+ });
71
+ }
72
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/tools/tasks.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 registerTimeTools(server: McpServer, client: DversumClient): void;
4
+ //# sourceMappingURL=time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../../src/tools/time.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,QA0GtB"}
@@ -0,0 +1,81 @@
1
+ import { z } from "zod";
2
+ export function registerTimeTools(server, client) {
3
+ server.tool("list_time_entries", "List time entries. Filter by date range, project, or user.", {
4
+ page: z.number().optional().describe("Page number (0-based)"),
5
+ per_page: z.number().optional().describe("Results per page (default 50)"),
6
+ project_id: z.string().optional().describe("Filter by project UUID"),
7
+ start_date: z.string().optional().describe("Filter from date (YYYY-MM-DD)"),
8
+ end_date: z.string().optional().describe("Filter to date (YYYY-MM-DD)"),
9
+ }, async ({ page, per_page, project_id, start_date, end_date }) => {
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
+ if (project_id)
16
+ params.project_id = project_id;
17
+ if (start_date)
18
+ params.start_date = start_date;
19
+ if (end_date)
20
+ params.end_date = end_date;
21
+ const data = await client.get("/time-entries", params);
22
+ return {
23
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
24
+ };
25
+ });
26
+ server.tool("create_time_entry", "Log a completed time entry with start and end time.", {
27
+ project_id: z.string().describe("Project UUID"),
28
+ task_id: z.string().optional().describe("Task UUID (optional)"),
29
+ description: z.string().optional().describe("What was worked on"),
30
+ start_time: z.string().describe("Start time in ISO 8601 format"),
31
+ end_time: z.string().describe("End time in ISO 8601 format"),
32
+ billable: z.boolean().optional().describe("Whether this time is billable (default true)"),
33
+ }, async (input) => {
34
+ const data = await client.post("/time-entries", input);
35
+ return {
36
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
37
+ };
38
+ });
39
+ server.tool("start_timer", "Start a running timer for time tracking.", {
40
+ project_id: z.string().describe("Project UUID"),
41
+ task_id: z.string().optional().describe("Task UUID (optional)"),
42
+ description: z.string().optional().describe("What you're working on"),
43
+ }, async (input) => {
44
+ const data = await client.post("/time-entries/start", input);
45
+ return {
46
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
47
+ };
48
+ });
49
+ server.tool("stop_timer", "Stop a currently running timer.", {
50
+ id: z.string().describe("The running time entry UUID"),
51
+ }, async ({ id }) => {
52
+ const data = await client.post(`/time-entries/${id}/stop`);
53
+ return {
54
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
55
+ };
56
+ });
57
+ server.tool("get_running_timer", "Get the currently running timer, if any.", {}, async () => {
58
+ const data = await client.get("/time-entries/running");
59
+ return {
60
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
61
+ };
62
+ });
63
+ server.tool("get_time_stats", "Get time tracking statistics (total hours, billable hours, etc.).", {
64
+ project_id: z.string().optional().describe("Filter by project UUID"),
65
+ start_date: z.string().optional().describe("From date (YYYY-MM-DD)"),
66
+ end_date: z.string().optional().describe("To date (YYYY-MM-DD)"),
67
+ }, async ({ project_id, start_date, end_date }) => {
68
+ const params = {};
69
+ if (project_id)
70
+ params.project_id = project_id;
71
+ if (start_date)
72
+ params.start_date = start_date;
73
+ if (end_date)
74
+ params.end_date = end_date;
75
+ const data = await client.get("/time-entries/stats", params);
76
+ return {
77
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
78
+ };
79
+ });
80
+ }
81
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../../src/tools/time.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,iBAAiB,CAC/B,MAAiB,EACjB,MAAqB;IAErB,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,4DAA4D,EAC5D;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;QACzE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACpE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC3E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACxE,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC7D,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,IAAI,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/C,IAAI,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/C,IAAI,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACvD,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,mBAAmB,EACnB,qDAAqD,EACrD;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACjE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAChE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAC5D,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;KAC1F,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACvD,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,0CAA0C,EAC1C;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KACtE,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,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;IAEF,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,iCAAiC,EACjC;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACvD,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAC3D,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,mBAAmB,EACnB,0CAA0C,EAC1C,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACvD,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,mEAAmE,EACnE;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACpE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACpE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KACjE,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC7C,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/C,IAAI,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/C,IAAI,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,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"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@dversum/mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "Official MCP server for the dVersum business management platform",
5
+ "type": "module",
6
+ "main": "dist/src/index.js",
7
+ "bin": {
8
+ "dversum-mcp": "dist/bin/dversum-mcp.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "start": "node dist/bin/dversum-mcp.js"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/dversum/mcp-server.git"
18
+ },
19
+ "homepage": "https://dversum.com",
20
+ "bugs": {
21
+ "url": "https://github.com/dversum/mcp-server/issues"
22
+ },
23
+ "mcpName": "io.github.dversum/mcp-server",
24
+ "dependencies": {
25
+ "@modelcontextprotocol/sdk": "^1.12.1",
26
+ "zod": "^3.24.0"
27
+ },
28
+ "devDependencies": {
29
+ "typescript": "^5.7.0",
30
+ "@types/node": "^22.0.0"
31
+ },
32
+ "files": [
33
+ "dist"
34
+ ],
35
+ "keywords": [
36
+ "mcp",
37
+ "model-context-protocol",
38
+ "dversum",
39
+ "business-management",
40
+ "claude",
41
+ "ai",
42
+ "project-management",
43
+ "invoicing",
44
+ "time-tracking"
45
+ ],
46
+ "license": "MIT"
47
+ }