snowbll-mcp 0.1.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.
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Zod output schemas for the Snowbll MCP tools.
3
+ *
4
+ * These power MCP "structured output": each tool advertises an outputSchema and
5
+ * returns structuredContent, so clients/agents get a validated, typed result
6
+ * (not just a text blob).
7
+ *
8
+ * mockData.ts remains the source of the response *shapes* (TypeScript
9
+ * interfaces). The compile-time assertions at the bottom of this file guarantee
10
+ * these zod schemas stay exactly in sync with those interfaces — if either side
11
+ * drifts, the build fails.
12
+ */
13
+ import { z } from "zod";
14
+ // --- Enums -----------------------------------------------------------------
15
+ export const TierSchema = z.enum(["elite", "strong", "moderate", "low"]);
16
+ export const RaritySchema = z.enum([
17
+ "common",
18
+ "uncommon",
19
+ "rare",
20
+ "epic",
21
+ "legendary",
22
+ ]);
23
+ export const DropOffRiskSchema = z.enum(["low", "medium", "high"]);
24
+ export const PlatformSchema = z.enum([
25
+ "steam",
26
+ "playstation",
27
+ "xbox",
28
+ "switch",
29
+ "epic",
30
+ "unknown",
31
+ ]);
32
+ export const RecommendObjectiveSchema = z.enum([
33
+ "likely_to_finish",
34
+ "hidden_gems",
35
+ "deep_systems",
36
+ "comfort_games",
37
+ "short_sessions",
38
+ "high_progression",
39
+ ]);
40
+ // --- Tool output schemas ---------------------------------------------------
41
+ export const PlayerOverviewSchema = z.object({
42
+ totalGames: z.number(),
43
+ wishlist: z.number(),
44
+ posts: z.number(),
45
+ devFollows: z.number(),
46
+ personaMatch: z.number(),
47
+ personaConfidence: z.string(),
48
+ currentObjective: z.string(),
49
+ summary: z.string(),
50
+ });
51
+ export const PlaystyleDnaSchema = z.object({
52
+ traits: z.array(z.object({ name: z.string(), score: z.number(), tier: TierSchema })),
53
+ uniqueEdge: z.string(),
54
+ });
55
+ export const PersonaCardsSchema = z.object({
56
+ personas: z.array(z.object({
57
+ name: z.string(),
58
+ rarity: RaritySchema,
59
+ level: z.number(),
60
+ progress: z.number(),
61
+ evidence: z.string(),
62
+ })),
63
+ });
64
+ export const ActivityPatternsSchema = z.object({
65
+ mostActiveHours: z.object({
66
+ peak: z.string(),
67
+ activeDays: z.string(),
68
+ type: z.string(),
69
+ insight: z.string(),
70
+ }),
71
+ sessionLength: z.object({
72
+ averageMinutes: z.number(),
73
+ under30Minutes: z.number(),
74
+ between30And90Minutes: z.number(),
75
+ between90And180Minutes: z.number(),
76
+ over180Minutes: z.number(),
77
+ sessionPersona: z.string(),
78
+ }),
79
+ platforms: z.array(z.object({ name: z.string(), hours: z.number(), share: z.number() })),
80
+ totalPlaytimeHours: z.number(),
81
+ });
82
+ export const CompletionBehaviorSchema = z.object({
83
+ completionRate: z.number(),
84
+ insight: z.string(),
85
+ strongCompletionCategories: z.array(z.string()),
86
+ weakCompletionCategories: z.array(z.string()),
87
+ dropOffSignals: z.array(z.string()),
88
+ });
89
+ export const PurchaseBehaviorSchema = z.object({
90
+ gamesPurchased: z.number(),
91
+ averageGamePrice: z.number(),
92
+ topInGameCategories: z.array(z.object({ category: z.string(), share: z.number() })),
93
+ insight: z.string(),
94
+ purchasePlayMismatch: z.object({
95
+ summary: z.string(),
96
+ example: z.string(),
97
+ }),
98
+ sensitiveSignals: z
99
+ .object({
100
+ recentPurchases: z.array(z.object({
101
+ title: z.string(),
102
+ price: z.number(),
103
+ hoursPlayed: z.number(),
104
+ refunded: z.boolean(),
105
+ })),
106
+ note: z.string(),
107
+ })
108
+ .optional(),
109
+ });
110
+ export const GenreMismatchResultSchema = z.object({
111
+ mismatches: z.array(z.object({
112
+ claimedOrPurchased: z.string(),
113
+ observedBehavior: z.string(),
114
+ confidence: z.number(),
115
+ completionSignal: z.string().optional(),
116
+ purchaseSignal: z.string().optional(),
117
+ })),
118
+ summary: z.string(),
119
+ signalsIncluded: z.object({
120
+ purchase: z.boolean(),
121
+ completion: z.boolean(),
122
+ }),
123
+ });
124
+ export const PlayerBehaviourAnalysisSchema = z.object({
125
+ summary: z.string(),
126
+ primaryTraits: z.array(z.string()),
127
+ weakSignals: z.array(z.string()).optional(),
128
+ behavioralEvidence: z.array(z.string()).optional(),
129
+ interpretation: z.string(),
130
+ deepDive: z
131
+ .object({
132
+ traitCorrelations: z.array(z.string()),
133
+ predictedPreferences: z.array(z.string()),
134
+ riskFactors: z.array(z.string()),
135
+ })
136
+ .optional(),
137
+ });
138
+ export const TastePatternSchema = z.object({
139
+ topic: z.string(),
140
+ explanation: z.string(),
141
+ supportingSignals: z.array(z.string()),
142
+ actionableAdvice: z.array(z.string()),
143
+ });
144
+ export const GameFitSchema = z.object({
145
+ game: z.string(),
146
+ platform: PlatformSchema,
147
+ fitScore: z.number(),
148
+ finishLikelihood: z.number(),
149
+ dropOffRisk: DropOffRiskSchema,
150
+ whyItFits: z.array(z.string()),
151
+ whyItMayNotFit: z.array(z.string()),
152
+ verdict: z.string(),
153
+ });
154
+ export const CompareResultSchema = z.object({
155
+ ranking: z.array(z.object({
156
+ game: z.string(),
157
+ fitScore: z.number(),
158
+ finishLikelihood: z.number(),
159
+ reason: z.string(),
160
+ })),
161
+ bestPick: z.string(),
162
+ summary: z.string(),
163
+ });
164
+ export const RecommendResultSchema = z.object({
165
+ objective: RecommendObjectiveSchema,
166
+ recommendations: z.array(z.object({
167
+ game: z.string(),
168
+ fitScore: z.number(),
169
+ reason: z.string(),
170
+ risk: DropOffRiskSchema,
171
+ })),
172
+ note: z.string(),
173
+ });
174
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "snowbll-mcp",
3
+ "version": "0.1.0",
4
+ "description": "Snowbll MCP Server — Gaming Behaviour Intelligence tools for AI agents (Claude, Cursor, Windsurf, OpenAI Agents SDK, LangChain, CrewAI, AutoGen, Vercel AI SDK).",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "bin": {
8
+ "snowbll-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "engines": {
15
+ "node": ">=18"
16
+ },
17
+ "scripts": {
18
+ "dev": "tsx src/index.ts",
19
+ "build": "tsc",
20
+ "start": "node dist/index.js",
21
+ "test": "tsx test/all.test.ts",
22
+ "prepublishOnly": "npm run build && npm test"
23
+ },
24
+ "keywords": [
25
+ "mcp",
26
+ "model-context-protocol",
27
+ "snowbll",
28
+ "gaming",
29
+ "behaviour-intelligence",
30
+ "ai-agents",
31
+ "playstyle",
32
+ "persona"
33
+ ],
34
+ "dependencies": {
35
+ "@modelcontextprotocol/sdk": "^1.12.0",
36
+ "zod": "^3.23.8"
37
+ },
38
+ "devDependencies": {
39
+ "@types/node": "^20.14.0",
40
+ "snowbll-community-recommendation-engine": "file:../community-recommendation-engine",
41
+ "snowbll-recommendation-engine": "file:../recommendation-engine",
42
+ "tsx": "^4.16.0",
43
+ "typescript": "^5.5.0"
44
+ }
45
+ }