@bmhall2/skylight-mcp 1.1.7

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 (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +265 -0
  3. package/dist/api/auth.d.ts +38 -0
  4. package/dist/api/auth.d.ts.map +1 -0
  5. package/dist/api/auth.js +62 -0
  6. package/dist/api/auth.js.map +1 -0
  7. package/dist/api/client.d.ts +84 -0
  8. package/dist/api/client.d.ts.map +1 -0
  9. package/dist/api/client.js +228 -0
  10. package/dist/api/client.js.map +1 -0
  11. package/dist/api/endpoints/calendar.d.ts +33 -0
  12. package/dist/api/endpoints/calendar.d.ts.map +1 -0
  13. package/dist/api/endpoints/calendar.js +60 -0
  14. package/dist/api/endpoints/calendar.js.map +1 -0
  15. package/dist/api/endpoints/categories.d.ts +23 -0
  16. package/dist/api/endpoints/categories.d.ts.map +1 -0
  17. package/dist/api/endpoints/categories.js +48 -0
  18. package/dist/api/endpoints/categories.js.map +1 -0
  19. package/dist/api/endpoints/chores.d.ts +50 -0
  20. package/dist/api/endpoints/chores.d.ts.map +1 -0
  21. package/dist/api/endpoints/chores.js +106 -0
  22. package/dist/api/endpoints/chores.js.map +1 -0
  23. package/dist/api/endpoints/devices.d.ts +6 -0
  24. package/dist/api/endpoints/devices.d.ts.map +1 -0
  25. package/dist/api/endpoints/devices.js +10 -0
  26. package/dist/api/endpoints/devices.js.map +1 -0
  27. package/dist/api/endpoints/frames.d.ts +6 -0
  28. package/dist/api/endpoints/frames.d.ts.map +1 -0
  29. package/dist/api/endpoints/frames.js +10 -0
  30. package/dist/api/endpoints/frames.js.map +1 -0
  31. package/dist/api/endpoints/lists.d.ts +55 -0
  32. package/dist/api/endpoints/lists.d.ts.map +1 -0
  33. package/dist/api/endpoints/lists.js +125 -0
  34. package/dist/api/endpoints/lists.js.map +1 -0
  35. package/dist/api/endpoints/meals.d.ts +102 -0
  36. package/dist/api/endpoints/meals.d.ts.map +1 -0
  37. package/dist/api/endpoints/meals.js +100 -0
  38. package/dist/api/endpoints/meals.js.map +1 -0
  39. package/dist/api/endpoints/misc.d.ts +27 -0
  40. package/dist/api/endpoints/misc.d.ts.map +1 -0
  41. package/dist/api/endpoints/misc.js +18 -0
  42. package/dist/api/endpoints/misc.js.map +1 -0
  43. package/dist/api/endpoints/photos.d.ts +13 -0
  44. package/dist/api/endpoints/photos.d.ts.map +1 -0
  45. package/dist/api/endpoints/photos.js +10 -0
  46. package/dist/api/endpoints/photos.js.map +1 -0
  47. package/dist/api/endpoints/rewards.d.ts +49 -0
  48. package/dist/api/endpoints/rewards.d.ts.map +1 -0
  49. package/dist/api/endpoints/rewards.js +105 -0
  50. package/dist/api/endpoints/rewards.js.map +1 -0
  51. package/dist/api/endpoints/taskbox.d.ts +13 -0
  52. package/dist/api/endpoints/taskbox.d.ts.map +1 -0
  53. package/dist/api/endpoints/taskbox.js +22 -0
  54. package/dist/api/endpoints/taskbox.js.map +1 -0
  55. package/dist/api/generated-types.d.ts +18967 -0
  56. package/dist/api/generated-types.d.ts.map +1 -0
  57. package/dist/api/generated-types.js +6 -0
  58. package/dist/api/generated-types.js.map +1 -0
  59. package/dist/api/types.d.ts +283 -0
  60. package/dist/api/types.d.ts.map +1 -0
  61. package/dist/api/types.js +5 -0
  62. package/dist/api/types.js.map +1 -0
  63. package/dist/config.d.ts +52 -0
  64. package/dist/config.d.ts.map +1 -0
  65. package/dist/config.js +80 -0
  66. package/dist/config.js.map +1 -0
  67. package/dist/index.d.ts +3 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +11 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/server.d.ts +7 -0
  72. package/dist/server.d.ts.map +1 -0
  73. package/dist/server.js +48 -0
  74. package/dist/server.js.map +1 -0
  75. package/dist/tools/calendar.d.ts +3 -0
  76. package/dist/tools/calendar.d.ts.map +1 -0
  77. package/dist/tools/calendar.js +297 -0
  78. package/dist/tools/calendar.js.map +1 -0
  79. package/dist/tools/chores.d.ts +3 -0
  80. package/dist/tools/chores.d.ts.map +1 -0
  81. package/dist/tools/chores.js +349 -0
  82. package/dist/tools/chores.js.map +1 -0
  83. package/dist/tools/family.d.ts +3 -0
  84. package/dist/tools/family.d.ts.map +1 -0
  85. package/dist/tools/family.js +182 -0
  86. package/dist/tools/family.js.map +1 -0
  87. package/dist/tools/lists.d.ts +3 -0
  88. package/dist/tools/lists.d.ts.map +1 -0
  89. package/dist/tools/lists.js +481 -0
  90. package/dist/tools/lists.js.map +1 -0
  91. package/dist/tools/meals.d.ts +3 -0
  92. package/dist/tools/meals.d.ts.map +1 -0
  93. package/dist/tools/meals.js +319 -0
  94. package/dist/tools/meals.js.map +1 -0
  95. package/dist/tools/misc.d.ts +3 -0
  96. package/dist/tools/misc.d.ts.map +1 -0
  97. package/dist/tools/misc.js +101 -0
  98. package/dist/tools/misc.js.map +1 -0
  99. package/dist/tools/photos.d.ts +3 -0
  100. package/dist/tools/photos.d.ts.map +1 -0
  101. package/dist/tools/photos.js +42 -0
  102. package/dist/tools/photos.js.map +1 -0
  103. package/dist/tools/rewards.d.ts +3 -0
  104. package/dist/tools/rewards.d.ts.map +1 -0
  105. package/dist/tools/rewards.js +338 -0
  106. package/dist/tools/rewards.js.map +1 -0
  107. package/dist/tools/tasks.d.ts +3 -0
  108. package/dist/tools/tasks.d.ts.map +1 -0
  109. package/dist/tools/tasks.js +68 -0
  110. package/dist/tools/tasks.js.map +1 -0
  111. package/dist/utils/dates.d.ts +26 -0
  112. package/dist/utils/dates.d.ts.map +1 -0
  113. package/dist/utils/dates.js +109 -0
  114. package/dist/utils/dates.js.map +1 -0
  115. package/dist/utils/errors.d.ts +45 -0
  116. package/dist/utils/errors.d.ts.map +1 -0
  117. package/dist/utils/errors.js +102 -0
  118. package/dist/utils/errors.js.map +1 -0
  119. package/package.json +59 -0
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Base error class for Skylight API errors
3
+ */
4
+ export class SkylightError extends Error {
5
+ code;
6
+ statusCode;
7
+ recoverable;
8
+ constructor(message, code, statusCode, recoverable = false) {
9
+ super(message);
10
+ this.code = code;
11
+ this.statusCode = statusCode;
12
+ this.recoverable = recoverable;
13
+ this.name = "SkylightError";
14
+ }
15
+ }
16
+ /**
17
+ * Authentication failed - token may be expired or invalid
18
+ */
19
+ export class AuthenticationError extends SkylightError {
20
+ constructor(message = "Authentication failed. Your token may be expired or invalid.") {
21
+ super(message, "AUTH_FAILED", 401, true);
22
+ this.name = "AuthenticationError";
23
+ }
24
+ }
25
+ /**
26
+ * Configuration error - missing or invalid settings
27
+ */
28
+ export class ConfigurationError extends SkylightError {
29
+ constructor(message) {
30
+ super(message, "CONFIG_ERROR", undefined, true);
31
+ this.name = "ConfigurationError";
32
+ }
33
+ }
34
+ /**
35
+ * Resource not found
36
+ */
37
+ export class NotFoundError extends SkylightError {
38
+ constructor(resource) {
39
+ super(`${resource} not found`, "NOT_FOUND", 404, false);
40
+ this.name = "NotFoundError";
41
+ }
42
+ }
43
+ /**
44
+ * Rate limited by the API
45
+ */
46
+ export class RateLimitError extends SkylightError {
47
+ constructor(retryAfter) {
48
+ super(`Rate limited by Skylight API. ${retryAfter ? `Retry after ${retryAfter}s` : "Please wait and try again."}`, "RATE_LIMITED", 429, true);
49
+ this.name = "RateLimitError";
50
+ }
51
+ }
52
+ /**
53
+ * API returned an unexpected response format
54
+ */
55
+ export class ParseError extends SkylightError {
56
+ constructor(message = "Unexpected API response format") {
57
+ super(message, "PARSE_ERROR", undefined, false);
58
+ this.name = "ParseError";
59
+ }
60
+ }
61
+ /**
62
+ * Format an error for MCP tool response
63
+ * Accepts unknown to handle any value from catch blocks safely
64
+ */
65
+ export function formatErrorForMcp(error) {
66
+ if (error instanceof AuthenticationError) {
67
+ return `Authentication Error: ${error.message}
68
+
69
+ Your Skylight token may have expired. To fix this:
70
+ 1. Open the Skylight app on your device
71
+ 2. Capture fresh API traffic using a proxy tool
72
+ 3. Update your SKYLIGHT_TOKEN environment variable
73
+
74
+ See the auth documentation for detailed steps.`;
75
+ }
76
+ if (error instanceof NotFoundError) {
77
+ return `Not Found: ${error.message}
78
+
79
+ This could mean:
80
+ - The requested item doesn't exist
81
+ - Your frame ID is incorrect
82
+ - The item was deleted from Skylight`;
83
+ }
84
+ if (error instanceof RateLimitError) {
85
+ return `Rate Limited: ${error.message}
86
+
87
+ The Skylight API is temporarily limiting requests. Please wait a moment and try again.`;
88
+ }
89
+ if (error instanceof ConfigurationError) {
90
+ return `Configuration Error: ${error.message}
91
+
92
+ Please check your environment variables are set correctly.`;
93
+ }
94
+ if (error instanceof SkylightError) {
95
+ return `Skylight Error: ${error.message}`;
96
+ }
97
+ if (error instanceof Error) {
98
+ return `Error: ${error.message}`;
99
+ }
100
+ return `Error: ${String(error)}`;
101
+ }
102
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IAG7B;IACA;IACA;IAJT,YACE,OAAe,EACR,IAAY,EACZ,UAAmB,EACnB,cAAuB,KAAK;QAEnC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAQ;QACZ,eAAU,GAAV,UAAU,CAAS;QACnB,gBAAW,GAAX,WAAW,CAAiB;QAGnC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IACpD,YAAY,UAAkB,8DAA8D;QAC1F,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IACnD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,aAAa;IAC9C,YAAY,QAAgB;QAC1B,KAAK,CAAC,GAAG,QAAQ,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,aAAa;IAC/C,YAAY,UAAmB;QAC7B,KAAK,CACH,iCAAiC,UAAU,CAAC,CAAC,CAAC,eAAe,UAAU,GAAG,CAAC,CAAC,CAAC,4BAA4B,EAAE,EAC3G,cAAc,EACd,GAAG,EACH,IAAI,CACL,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,aAAa;IAC3C,YAAY,UAAkB,gCAAgC;QAC5D,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;QACzC,OAAO,yBAAyB,KAAK,CAAC,OAAO;;;;;;;+CAOF,CAAC;IAC9C,CAAC;IAED,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;QACnC,OAAO,cAAc,KAAK,CAAC,OAAO;;;;;qCAKD,CAAC;IACpC,CAAC;IAED,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,OAAO,iBAAiB,KAAK,CAAC,OAAO;;uFAE8C,CAAC;IACtF,CAAC;IAED,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;QACxC,OAAO,wBAAwB,KAAK,CAAC,OAAO;;2DAEW,CAAC;IAC1D,CAAC;IAED,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;QACnC,OAAO,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC;IAC5C,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,UAAU,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACnC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@bmhall2/skylight-mcp",
3
+ "version": "1.1.7",
4
+ "description": "MCP server for Skylight Calendar API - enables agentic interactions for calendar, chores, lists, and family management",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "skylight-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "start": "node dist/index.js",
18
+ "dev": "tsx watch src/index.ts",
19
+ "test": "vitest",
20
+ "test:coverage": "vitest --coverage",
21
+ "lint": "eslint src/",
22
+ "typecheck": "tsc --noEmit",
23
+ "prepare": "npm run build",
24
+ "generate:types": "openapi-typescript ../skylight-api/docs/openapi/openapi.yaml -o src/api/generated-types.ts"
25
+ },
26
+ "keywords": [
27
+ "mcp",
28
+ "skylight",
29
+ "calendar",
30
+ "model-context-protocol",
31
+ "claude",
32
+ "ai",
33
+ "family",
34
+ "chores"
35
+ ],
36
+ "author": "Ben Hall <bmhall2@gmail.com>",
37
+ "license": "MIT",
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "https://github.com/bmhall2/skylight-mcp.git"
41
+ },
42
+ "dependencies": {
43
+ "@modelcontextprotocol/sdk": "^1.11.0",
44
+ "zod": "^3.24.1"
45
+ },
46
+ "devDependencies": {
47
+ "@types/node": "^20.12.2",
48
+ "typescript": "^5.4.5",
49
+ "tsx": "^4.7.0",
50
+ "vitest": "^1.6.0",
51
+ "eslint": "^8.57.0",
52
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
53
+ "@typescript-eslint/parser": "^7.0.0",
54
+ "openapi-typescript": "^7.0.0"
55
+ },
56
+ "engines": {
57
+ "node": ">=18.0.0"
58
+ }
59
+ }