mcp-server-return-to-dark-tower 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 (56) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/LICENSE +21 -0
  3. package/README.md +729 -0
  4. package/dist/index.d.ts +3 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +133 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/prompts/index.d.ts +3 -0
  9. package/dist/prompts/index.d.ts.map +1 -0
  10. package/dist/prompts/index.js +250 -0
  11. package/dist/prompts/index.js.map +1 -0
  12. package/dist/resources/index.d.ts +4 -0
  13. package/dist/resources/index.d.ts.map +1 -0
  14. package/dist/resources/index.js +228 -0
  15. package/dist/resources/index.js.map +1 -0
  16. package/dist/tools/audio.d.ts +4 -0
  17. package/dist/tools/audio.d.ts.map +1 -0
  18. package/dist/tools/audio.js +59 -0
  19. package/dist/tools/audio.js.map +1 -0
  20. package/dist/tools/connection.d.ts +4 -0
  21. package/dist/tools/connection.d.ts.map +1 -0
  22. package/dist/tools/connection.js +111 -0
  23. package/dist/tools/connection.js.map +1 -0
  24. package/dist/tools/drums.d.ts +4 -0
  25. package/dist/tools/drums.d.ts.map +1 -0
  26. package/dist/tools/drums.js +70 -0
  27. package/dist/tools/drums.js.map +1 -0
  28. package/dist/tools/lights.d.ts +4 -0
  29. package/dist/tools/lights.d.ts.map +1 -0
  30. package/dist/tools/lights.js +86 -0
  31. package/dist/tools/lights.js.map +1 -0
  32. package/dist/tools/seals.d.ts +4 -0
  33. package/dist/tools/seals.d.ts.map +1 -0
  34. package/dist/tools/seals.js +60 -0
  35. package/dist/tools/seals.js.map +1 -0
  36. package/dist/tools/state.d.ts +4 -0
  37. package/dist/tools/state.d.ts.map +1 -0
  38. package/dist/tools/state.js +64 -0
  39. package/dist/tools/state.js.map +1 -0
  40. package/dist/tower-controller.d.ts +87 -0
  41. package/dist/tower-controller.d.ts.map +1 -0
  42. package/dist/tower-controller.js +355 -0
  43. package/dist/tower-controller.js.map +1 -0
  44. package/dist/utils/logger.d.ts +11 -0
  45. package/dist/utils/logger.d.ts.map +1 -0
  46. package/dist/utils/logger.js +29 -0
  47. package/dist/utils/logger.js.map +1 -0
  48. package/dist/utils/lookups.d.ts +14 -0
  49. package/dist/utils/lookups.d.ts.map +1 -0
  50. package/dist/utils/lookups.js +33 -0
  51. package/dist/utils/lookups.js.map +1 -0
  52. package/dist/utils/schemas.d.ts +165 -0
  53. package/dist/utils/schemas.d.ts.map +1 -0
  54. package/dist/utils/schemas.js +70 -0
  55. package/dist/utils/schemas.js.map +1 -0
  56. package/package.json +69 -0
@@ -0,0 +1,165 @@
1
+ import { z } from "zod";
2
+ export declare const TowerSideSchema: z.ZodEnum<["north", "south", "east", "west"]>;
3
+ export declare const TowerLevelsSchema: z.ZodEnum<["top", "middle", "bottom"]>;
4
+ export declare const TowerCornerSchema: z.ZodEnum<["northeast", "southeast", "southwest", "northwest"]>;
5
+ export declare const LightEffectNameSchema: z.ZodEnum<["off", "on", "breathe", "breatheFast", "breathe50percent", "flicker"]>;
6
+ export declare const BaseLightLevelSchema: z.ZodEnum<["top", "bottom", "a", "b"]>;
7
+ export declare const DoorwayLightSchema: z.ZodObject<{
8
+ position: z.ZodEnum<["north", "south", "east", "west"]>;
9
+ level: z.ZodEnum<["top", "middle", "bottom"]>;
10
+ style: z.ZodEnum<["off", "on", "breathe", "breatheFast", "breathe50percent", "flicker"]>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ level: "top" | "middle" | "bottom";
13
+ position: "north" | "south" | "east" | "west";
14
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
15
+ }, {
16
+ level: "top" | "middle" | "bottom";
17
+ position: "north" | "south" | "east" | "west";
18
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
19
+ }>;
20
+ export declare const LedgeLightSchema: z.ZodObject<{
21
+ position: z.ZodEnum<["northeast", "southeast", "southwest", "northwest"]>;
22
+ style: z.ZodEnum<["off", "on", "breathe", "breatheFast", "breathe50percent", "flicker"]>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ position: "northeast" | "southeast" | "southwest" | "northwest";
25
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
26
+ }, {
27
+ position: "northeast" | "southeast" | "southwest" | "northwest";
28
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
29
+ }>;
30
+ export declare const BaseLightPositionSchema: z.ZodObject<{
31
+ side: z.ZodEnum<["north", "south", "east", "west"]>;
32
+ level: z.ZodEnum<["top", "bottom", "a", "b"]>;
33
+ }, "strip", z.ZodTypeAny, {
34
+ level: "top" | "bottom" | "a" | "b";
35
+ side: "north" | "south" | "east" | "west";
36
+ }, {
37
+ level: "top" | "bottom" | "a" | "b";
38
+ side: "north" | "south" | "east" | "west";
39
+ }>;
40
+ export declare const BaseLightSchema: z.ZodObject<{
41
+ position: z.ZodObject<{
42
+ side: z.ZodEnum<["north", "south", "east", "west"]>;
43
+ level: z.ZodEnum<["top", "bottom", "a", "b"]>;
44
+ }, "strip", z.ZodTypeAny, {
45
+ level: "top" | "bottom" | "a" | "b";
46
+ side: "north" | "south" | "east" | "west";
47
+ }, {
48
+ level: "top" | "bottom" | "a" | "b";
49
+ side: "north" | "south" | "east" | "west";
50
+ }>;
51
+ style: z.ZodEnum<["off", "on", "breathe", "breatheFast", "breathe50percent", "flicker"]>;
52
+ }, "strip", z.ZodTypeAny, {
53
+ position: {
54
+ level: "top" | "bottom" | "a" | "b";
55
+ side: "north" | "south" | "east" | "west";
56
+ };
57
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
58
+ }, {
59
+ position: {
60
+ level: "top" | "bottom" | "a" | "b";
61
+ side: "north" | "south" | "east" | "west";
62
+ };
63
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
64
+ }>;
65
+ export declare const LightsSchema: z.ZodObject<{
66
+ doorway: z.ZodOptional<z.ZodArray<z.ZodObject<{
67
+ position: z.ZodEnum<["north", "south", "east", "west"]>;
68
+ level: z.ZodEnum<["top", "middle", "bottom"]>;
69
+ style: z.ZodEnum<["off", "on", "breathe", "breatheFast", "breathe50percent", "flicker"]>;
70
+ }, "strip", z.ZodTypeAny, {
71
+ level: "top" | "middle" | "bottom";
72
+ position: "north" | "south" | "east" | "west";
73
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
74
+ }, {
75
+ level: "top" | "middle" | "bottom";
76
+ position: "north" | "south" | "east" | "west";
77
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
78
+ }>, "many">>;
79
+ ledge: z.ZodOptional<z.ZodArray<z.ZodObject<{
80
+ position: z.ZodEnum<["northeast", "southeast", "southwest", "northwest"]>;
81
+ style: z.ZodEnum<["off", "on", "breathe", "breatheFast", "breathe50percent", "flicker"]>;
82
+ }, "strip", z.ZodTypeAny, {
83
+ position: "northeast" | "southeast" | "southwest" | "northwest";
84
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
85
+ }, {
86
+ position: "northeast" | "southeast" | "southwest" | "northwest";
87
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
88
+ }>, "many">>;
89
+ base: z.ZodOptional<z.ZodArray<z.ZodObject<{
90
+ position: z.ZodObject<{
91
+ side: z.ZodEnum<["north", "south", "east", "west"]>;
92
+ level: z.ZodEnum<["top", "bottom", "a", "b"]>;
93
+ }, "strip", z.ZodTypeAny, {
94
+ level: "top" | "bottom" | "a" | "b";
95
+ side: "north" | "south" | "east" | "west";
96
+ }, {
97
+ level: "top" | "bottom" | "a" | "b";
98
+ side: "north" | "south" | "east" | "west";
99
+ }>;
100
+ style: z.ZodEnum<["off", "on", "breathe", "breatheFast", "breathe50percent", "flicker"]>;
101
+ }, "strip", z.ZodTypeAny, {
102
+ position: {
103
+ level: "top" | "bottom" | "a" | "b";
104
+ side: "north" | "south" | "east" | "west";
105
+ };
106
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
107
+ }, {
108
+ position: {
109
+ level: "top" | "bottom" | "a" | "b";
110
+ side: "north" | "south" | "east" | "west";
111
+ };
112
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
113
+ }>, "many">>;
114
+ }, "strip", z.ZodTypeAny, {
115
+ doorway?: {
116
+ level: "top" | "middle" | "bottom";
117
+ position: "north" | "south" | "east" | "west";
118
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
119
+ }[] | undefined;
120
+ ledge?: {
121
+ position: "northeast" | "southeast" | "southwest" | "northwest";
122
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
123
+ }[] | undefined;
124
+ base?: {
125
+ position: {
126
+ level: "top" | "bottom" | "a" | "b";
127
+ side: "north" | "south" | "east" | "west";
128
+ };
129
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
130
+ }[] | undefined;
131
+ }, {
132
+ doorway?: {
133
+ level: "top" | "middle" | "bottom";
134
+ position: "north" | "south" | "east" | "west";
135
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
136
+ }[] | undefined;
137
+ ledge?: {
138
+ position: "northeast" | "southeast" | "southwest" | "northwest";
139
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
140
+ }[] | undefined;
141
+ base?: {
142
+ position: {
143
+ level: "top" | "bottom" | "a" | "b";
144
+ side: "north" | "south" | "east" | "west";
145
+ };
146
+ style: "off" | "on" | "breathe" | "breatheFast" | "breathe50percent" | "flicker";
147
+ }[] | undefined;
148
+ }>;
149
+ export declare const SealIdentifierSchema: z.ZodObject<{
150
+ side: z.ZodEnum<["north", "south", "east", "west"]>;
151
+ level: z.ZodEnum<["top", "middle", "bottom"]>;
152
+ }, "strip", z.ZodTypeAny, {
153
+ level: "top" | "middle" | "bottom";
154
+ side: "north" | "south" | "east" | "west";
155
+ }, {
156
+ level: "top" | "middle" | "bottom";
157
+ side: "north" | "south" | "east" | "west";
158
+ }>;
159
+ export declare const GlyphSchema: z.ZodEnum<["cleanse", "quest", "battle", "banner", "reinforce"]>;
160
+ export declare const SoundIndexSchema: z.ZodNumber;
161
+ export declare const VolumeSchema: z.ZodNumber;
162
+ export declare const StatefulVolumeSchema: z.ZodNumber;
163
+ export declare const DrumLevelSchema: z.ZodEnum<["top", "middle", "bottom"]>;
164
+ export declare const LightSequenceSchema: z.ZodNumber;
165
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/utils/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,eAAe,+CAA6C,CAAC;AAC1E,eAAO,MAAM,iBAAiB,wCAAsC,CAAC;AACrE,eAAO,MAAM,iBAAiB,iEAA+D,CAAC;AAG9F,eAAO,MAAM,qBAAqB,mFAEF,CAAC;AAGjC,eAAO,MAAM,oBAAoB,wCAAsC,CAAC;AAGxE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;EAGlC,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;EAG1B,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIvB,CAAC;AAGH,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAC;AAGH,eAAO,MAAM,WAAW,kEAAgE,CAAC;AAGzF,eAAO,MAAM,gBAAgB,aAK8B,CAAC;AAE5D,eAAO,MAAM,YAAY,aAKuB,CAAC;AAEjD,eAAO,MAAM,oBAAoB,aAKe,CAAC;AAGjD,eAAO,MAAM,eAAe,wCAAsC,CAAC;AAGnE,eAAO,MAAM,mBAAmB,aAK2B,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { z } from "zod";
2
+ // Tower navigation
3
+ export const TowerSideSchema = z.enum(["north", "south", "east", "west"]);
4
+ export const TowerLevelsSchema = z.enum(["top", "middle", "bottom"]);
5
+ export const TowerCornerSchema = z.enum(["northeast", "southeast", "southwest", "northwest"]);
6
+ // Light effects — style is a string key into LIGHT_EFFECTS
7
+ export const LightEffectNameSchema = z
8
+ .enum(["off", "on", "breathe", "breatheFast", "breathe50percent", "flicker"])
9
+ .describe("Light effect name");
10
+ // Base light levels
11
+ export const BaseLightLevelSchema = z.enum(["top", "bottom", "a", "b"]);
12
+ // Light configuration schemas
13
+ export const DoorwayLightSchema = z.object({
14
+ position: TowerSideSchema,
15
+ level: TowerLevelsSchema,
16
+ style: LightEffectNameSchema,
17
+ });
18
+ export const LedgeLightSchema = z.object({
19
+ position: TowerCornerSchema,
20
+ style: LightEffectNameSchema,
21
+ });
22
+ export const BaseLightPositionSchema = z.object({
23
+ side: TowerSideSchema,
24
+ level: BaseLightLevelSchema,
25
+ });
26
+ export const BaseLightSchema = z.object({
27
+ position: BaseLightPositionSchema,
28
+ style: LightEffectNameSchema,
29
+ });
30
+ export const LightsSchema = z.object({
31
+ doorway: z.array(DoorwayLightSchema).optional(),
32
+ ledge: z.array(LedgeLightSchema).optional(),
33
+ base: z.array(BaseLightSchema).optional(),
34
+ });
35
+ // Seals
36
+ export const SealIdentifierSchema = z.object({
37
+ side: TowerSideSchema,
38
+ level: TowerLevelsSchema,
39
+ });
40
+ // Glyphs
41
+ export const GlyphSchema = z.enum(["cleanse", "quest", "battle", "banner", "reinforce"]);
42
+ // Audio
43
+ export const SoundIndexSchema = z
44
+ .number()
45
+ .int()
46
+ .min(1)
47
+ .max(113)
48
+ .describe("Sound index (1-113) from tower audio library");
49
+ export const VolumeSchema = z
50
+ .number()
51
+ .int()
52
+ .min(0)
53
+ .max(3)
54
+ .describe("0=Loud, 1=Medium, 2=Quiet, 3=Mute");
55
+ export const StatefulVolumeSchema = z
56
+ .number()
57
+ .int()
58
+ .min(0)
59
+ .max(3)
60
+ .describe("0=Loud, 1=Medium, 2=Quiet, 3=Soft");
61
+ // Drums
62
+ export const DrumLevelSchema = z.enum(["top", "middle", "bottom"]);
63
+ // Light sequences
64
+ export const LightSequenceSchema = z
65
+ .number()
66
+ .int()
67
+ .min(0x01)
68
+ .max(0x13)
69
+ .describe("Light sequence ID from TOWER_LIGHT_SEQUENCES");
70
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/utils/schemas.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "mcp-server-return-to-dark-tower",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for controlling the Return to Dark Tower board game tower via Bluetooth",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "mcp-server-dark-tower": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist/",
12
+ "README.md",
13
+ "LICENSE",
14
+ "CHANGELOG.md"
15
+ ],
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "scripts": {
20
+ "build": "tsc",
21
+ "dev": "tsx watch src/index.ts",
22
+ "start": "node dist/index.js",
23
+ "inspect": "npm run build && npx @modelcontextprotocol/inspector node dist/index.js",
24
+ "inspect:dev": "npx @modelcontextprotocol/inspector tsx src/index.ts",
25
+ "lint": "eslint src/ && prettier --check src/",
26
+ "lint:fix": "eslint src/ --fix && prettier --write src/",
27
+ "test": "echo \"No tests yet\" && exit 0",
28
+ "type-check": "tsc --noEmit",
29
+ "format": "prettier --write src/",
30
+ "format:check": "prettier --check src/",
31
+ "ci": "npm run lint && npm run type-check && npm run test && npm run build",
32
+ "prepack": "npm run ci",
33
+ "prepublishOnly": "npm run prepack",
34
+ "publish:check": "npm pack --dry-run"
35
+ },
36
+ "keywords": [
37
+ "mcp",
38
+ "model-context-protocol",
39
+ "return-to-dark-tower",
40
+ "bluetooth",
41
+ "ble",
42
+ "board-game",
43
+ "claude",
44
+ "ai"
45
+ ],
46
+ "license": "MIT",
47
+ "engines": {
48
+ "node": ">=18"
49
+ },
50
+ "dependencies": {
51
+ "@modelcontextprotocol/sdk": "^1.27.0",
52
+ "express": "^4.21.0",
53
+ "ultimatedarktower": "^2.3.0",
54
+ "zod": "^3.25.0"
55
+ },
56
+ "peerDependencies": {
57
+ "@stoprocent/noble": "^2.0.0"
58
+ },
59
+ "devDependencies": {
60
+ "@eslint/js": "^9.0.0",
61
+ "@types/express": "^5.0.0",
62
+ "@types/node": "^22.0.0",
63
+ "eslint": "^9.0.0",
64
+ "prettier": "^3.4.0",
65
+ "tsx": "^4.19.0",
66
+ "typescript": "^5.7.0",
67
+ "typescript-eslint": "^8.0.0"
68
+ }
69
+ }