@lkbaba/grok-mcp 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 (40) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/LICENSE +21 -0
  3. package/README.md +179 -0
  4. package/dist/config/index.d.ts +48 -0
  5. package/dist/config/index.d.ts.map +1 -0
  6. package/dist/config/index.js +101 -0
  7. package/dist/config/index.js.map +1 -0
  8. package/dist/index.d.ts +7 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +182 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/tools/agent-search.d.ts +14 -0
  13. package/dist/tools/agent-search.d.ts.map +1 -0
  14. package/dist/tools/agent-search.js +135 -0
  15. package/dist/tools/agent-search.js.map +1 -0
  16. package/dist/tools/brainstorm.d.ts +14 -0
  17. package/dist/tools/brainstorm.d.ts.map +1 -0
  18. package/dist/tools/brainstorm.js +208 -0
  19. package/dist/tools/brainstorm.js.map +1 -0
  20. package/dist/tools/definitions.d.ts +310 -0
  21. package/dist/tools/definitions.d.ts.map +1 -0
  22. package/dist/tools/definitions.js +187 -0
  23. package/dist/tools/definitions.js.map +1 -0
  24. package/dist/types/index.d.ts +210 -0
  25. package/dist/types/index.d.ts.map +1 -0
  26. package/dist/types/index.js +7 -0
  27. package/dist/types/index.js.map +1 -0
  28. package/dist/utils/grok-client.d.ts +53 -0
  29. package/dist/utils/grok-client.d.ts.map +1 -0
  30. package/dist/utils/grok-client.js +147 -0
  31. package/dist/utils/grok-client.js.map +1 -0
  32. package/dist/utils/logger.d.ts +52 -0
  33. package/dist/utils/logger.d.ts.map +1 -0
  34. package/dist/utils/logger.js +97 -0
  35. package/dist/utils/logger.js.map +1 -0
  36. package/dist/utils/tool-builder.d.ts +66 -0
  37. package/dist/utils/tool-builder.d.ts.map +1 -0
  38. package/dist/utils/tool-builder.js +187 -0
  39. package/dist/utils/tool-builder.js.map +1 -0
  40. package/package.json +67 -0
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Search Tool Builder
3
+ *
4
+ * Provides type-safe xAI search tool builder functions with parameter validation
5
+ */
6
+ import { z } from 'zod';
7
+ // ============================================================================
8
+ // Parameter Validation Schemas
9
+ // ============================================================================
10
+ /**
11
+ * Web Search tool parameter validation schema
12
+ */
13
+ const webSearchOptionsSchema = z.object({
14
+ allowedDomains: z
15
+ .array(z.string().min(1, 'Domain cannot be empty').regex(/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*\.[a-zA-Z]{2,}$/, 'Invalid domain format, e.g.: github.com, stackoverflow.com'))
16
+ .max(5, 'Maximum of 5 allowed domains')
17
+ .optional(),
18
+ excludedDomains: z
19
+ .array(z.string().min(1, 'Domain cannot be empty').regex(/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*\.[a-zA-Z]{2,}$/, 'Invalid domain format, e.g.: github.com, stackoverflow.com'))
20
+ .max(5, 'Maximum of 5 excluded domains')
21
+ .optional(),
22
+ enableImageUnderstanding: z.boolean().optional(),
23
+ });
24
+ /**
25
+ * X Search tool parameter validation schema
26
+ */
27
+ const xSearchOptionsSchema = z.object({
28
+ fromDate: z
29
+ .string()
30
+ .regex(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$/, 'Date must be in ISO8601 format (e.g.: 2024-01-01T00:00:00Z)')
31
+ .optional(),
32
+ toDate: z
33
+ .string()
34
+ .regex(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$/, 'Date must be in ISO8601 format (e.g.: 2024-01-01T00:00:00Z)')
35
+ .optional(),
36
+ allowedXHandles: z
37
+ .array(z.string().min(1, 'X handle cannot be empty'))
38
+ .max(10, 'Maximum of 10 allowed X handles')
39
+ .optional(),
40
+ excludedXHandles: z
41
+ .array(z.string().min(1, 'X handle cannot be empty'))
42
+ .max(10, 'Maximum of 10 excluded X handles')
43
+ .optional(),
44
+ enableImageUnderstanding: z.boolean().optional(),
45
+ enableVideoUnderstanding: z.boolean().optional(),
46
+ });
47
+ // ============================================================================
48
+ // Tool Builder Functions
49
+ // ============================================================================
50
+ /**
51
+ * Build Web Search tool configuration
52
+ *
53
+ * @param options - Web Search configuration options
54
+ * @returns Web Search tool object
55
+ * @throws If parameter validation fails
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const tool = buildWebSearchTool({
60
+ * allowedDomains: ['https://example.com'],
61
+ * enableImageUnderstanding: true
62
+ * });
63
+ * ```
64
+ */
65
+ export function buildWebSearchTool(options) {
66
+ // Parameter validation
67
+ if (options) {
68
+ try {
69
+ webSearchOptionsSchema.parse(options);
70
+ }
71
+ catch (error) {
72
+ if (error instanceof z.ZodError) {
73
+ const messages = error.errors.map((err) => ` - ${err.path.join('.')}: ${err.message}`);
74
+ throw new Error(`Web Search tool parameter validation failed:\n${messages.join('\n')}`);
75
+ }
76
+ throw error;
77
+ }
78
+ }
79
+ // Build tool object
80
+ const tool = {
81
+ type: 'web_search',
82
+ };
83
+ // Add optional parameters
84
+ if (options?.enableImageUnderstanding !== undefined) {
85
+ tool.enable_image_understanding = options.enableImageUnderstanding;
86
+ }
87
+ // Add filters
88
+ if (options?.allowedDomains || options?.excludedDomains) {
89
+ tool.filters = {};
90
+ if (options.allowedDomains) {
91
+ tool.filters.allowed_domains = options.allowedDomains;
92
+ }
93
+ if (options.excludedDomains) {
94
+ tool.filters.excluded_domains = options.excludedDomains;
95
+ }
96
+ }
97
+ return tool;
98
+ }
99
+ /**
100
+ * Build X Search tool configuration
101
+ *
102
+ * @param options - X Search configuration options
103
+ * @returns X Search tool object
104
+ * @throws If parameter validation fails
105
+ *
106
+ * @example
107
+ * ```typescript
108
+ * const tool = buildXSearchTool({
109
+ * fromDate: '2024-01-01T00:00:00Z',
110
+ * toDate: '2024-12-31T23:59:59Z',
111
+ * allowedXHandles: ['elonmusk', 'OpenAI'],
112
+ * enableVideoUnderstanding: true
113
+ * });
114
+ * ```
115
+ */
116
+ export function buildXSearchTool(options) {
117
+ // Parameter validation
118
+ if (options) {
119
+ try {
120
+ xSearchOptionsSchema.parse(options);
121
+ }
122
+ catch (error) {
123
+ if (error instanceof z.ZodError) {
124
+ const messages = error.errors.map((err) => ` - ${err.path.join('.')}: ${err.message}`);
125
+ throw new Error(`X Search tool parameter validation failed:\n${messages.join('\n')}`);
126
+ }
127
+ throw error;
128
+ }
129
+ // Date logic validation
130
+ if (options.fromDate && options.toDate) {
131
+ const from = new Date(options.fromDate);
132
+ const to = new Date(options.toDate);
133
+ if (from > to) {
134
+ throw new Error('fromDate cannot be later than toDate');
135
+ }
136
+ }
137
+ }
138
+ // Build tool object
139
+ const tool = {
140
+ type: 'x_search',
141
+ };
142
+ // Add optional parameters
143
+ if (options?.fromDate)
144
+ tool.from_date = options.fromDate;
145
+ if (options?.toDate)
146
+ tool.to_date = options.toDate;
147
+ if (options?.enableImageUnderstanding !== undefined) {
148
+ tool.enable_image_understanding = options.enableImageUnderstanding;
149
+ }
150
+ if (options?.enableVideoUnderstanding !== undefined) {
151
+ tool.enable_video_understanding = options.enableVideoUnderstanding;
152
+ }
153
+ if (options?.allowedXHandles) {
154
+ tool.allowed_x_handles = options.allowedXHandles;
155
+ }
156
+ if (options?.excludedXHandles) {
157
+ tool.excluded_x_handles = options.excludedXHandles;
158
+ }
159
+ return tool;
160
+ }
161
+ // ============================================================================
162
+ // Helper Functions
163
+ // ============================================================================
164
+ /**
165
+ * Validate ISO8601 date format
166
+ *
167
+ * @param dateString - Date string
168
+ * @returns Whether the string is valid ISO8601 format
169
+ */
170
+ export function isValidISO8601(dateString) {
171
+ const iso8601Regex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$/;
172
+ if (!iso8601Regex.test(dateString)) {
173
+ return false;
174
+ }
175
+ const date = new Date(dateString);
176
+ return !isNaN(date.getTime());
177
+ }
178
+ /**
179
+ * Convert date to ISO8601 format
180
+ *
181
+ * @param date - Date object
182
+ * @returns ISO8601 formatted date string
183
+ */
184
+ export function toISO8601(date) {
185
+ return date.toISOString();
186
+ }
187
+ //# sourceMappingURL=tool-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-builder.js","sourceRoot":"","sources":["../../src/utils/tool-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,+EAA+E;AAC/E,+BAA+B;AAC/B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC,KAAK,CACtD,mGAAmG,EACnG,4DAA4D,CAC7D,CAAC;SACD,GAAG,CAAC,CAAC,EAAE,8BAA8B,CAAC;SACtC,QAAQ,EAAE;IACb,eAAe,EAAE,CAAC;SACf,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC,KAAK,CACtD,mGAAmG,EACnG,4DAA4D,CAC7D,CAAC;SACD,GAAG,CAAC,CAAC,EAAE,+BAA+B,CAAC;SACvC,QAAQ,EAAE;IACb,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,KAAK,CACJ,kDAAkD,EAClD,6DAA6D,CAC9D;SACA,QAAQ,EAAE;IACb,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,KAAK,CACJ,kDAAkD,EAClD,6DAA6D,CAC9D;SACA,QAAQ,EAAE;IACb,eAAe,EAAE,CAAC;SACf,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC;SACpD,GAAG,CAAC,EAAE,EAAE,iCAAiC,CAAC;SAC1C,QAAQ,EAAE;IACb,gBAAgB,EAAE,CAAC;SAChB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC;SACpD,GAAG,CAAC,EAAE,EAAE,kCAAkC,CAAC;SAC3C,QAAQ,EAAE;IACb,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChD,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC;AAEH,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAIlC;IACC,uBAAuB;IACvB,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAC/B,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CACrD,CAAC;gBACF,MAAM,IAAI,KAAK,CACb,iDAAiD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvE,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,IAAI,GAAqB;QAC7B,IAAI,EAAE,YAAY;KACnB,CAAC;IAEF,0BAA0B;IAC1B,IAAI,OAAO,EAAE,wBAAwB,KAAK,SAAS,EAAE,CAAC;QACpD,IAAI,CAAC,0BAA0B,GAAG,OAAO,CAAC,wBAAwB,CAAC;IACrE,CAAC;IAED,cAAc;IACd,IAAI,OAAO,EAAE,cAAc,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;QACxD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;QACxD,CAAC;QACD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAOhC;IACC,uBAAuB;IACvB,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAC/B,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CACrD,CAAC;gBACF,MAAM,IAAI,KAAK,CAAC,+CAA+C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxF,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,wBAAwB;QACxB,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,IAAI,GAAmB;QAC3B,IAAI,EAAE,UAAU;KACjB,CAAC;IAEF,0BAA0B;IAC1B,IAAI,OAAO,EAAE,QAAQ;QAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;IACzD,IAAI,OAAO,EAAE,MAAM;QAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IACnD,IAAI,OAAO,EAAE,wBAAwB,KAAK,SAAS,EAAE,CAAC;QACpD,IAAI,CAAC,0BAA0B,GAAG,OAAO,CAAC,wBAAwB,CAAC;IACrE,CAAC;IACD,IAAI,OAAO,EAAE,wBAAwB,KAAK,SAAS,EAAE,CAAC;QACpD,IAAI,CAAC,0BAA0B,GAAG,OAAO,CAAC,wBAAwB,CAAC;IACrE,CAAC;IACD,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAC9B,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACrD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,MAAM,YAAY,GAAG,kDAAkD,CAAC;IACxE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAU;IAClC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@lkbaba/grok-mcp",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for xAI Grok with real-time Web + X (Twitter) search and creative brainstorming",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "grok-mcp": "./dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "prepare": "npm run build",
13
+ "dev": "tsx src/index.ts",
14
+ "start": "node dist/index.js",
15
+ "test": "vitest",
16
+ "test:integration": "vitest tests/integration"
17
+ },
18
+ "keywords": [
19
+ "mcp",
20
+ "model-context-protocol",
21
+ "grok",
22
+ "xai",
23
+ "search",
24
+ "x-search",
25
+ "twitter-search",
26
+ "brainstorm",
27
+ "ai",
28
+ "llm",
29
+ "claude-code",
30
+ "claude-desktop",
31
+ "typescript"
32
+ ],
33
+ "author": "LKbaba",
34
+ "license": "MIT",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "git+https://github.com/LKbaba/Grok-mcp.git"
38
+ },
39
+ "bugs": {
40
+ "url": "https://github.com/LKbaba/Grok-mcp/issues"
41
+ },
42
+ "homepage": "https://github.com/LKbaba/Grok-mcp#readme",
43
+ "engines": {
44
+ "node": ">=20.0.0"
45
+ },
46
+ "publishConfig": {
47
+ "access": "public"
48
+ },
49
+ "files": [
50
+ "dist",
51
+ "README.md",
52
+ "LICENSE",
53
+ "CHANGELOG.md"
54
+ ],
55
+ "dependencies": {
56
+ "@modelcontextprotocol/sdk": "^1.0.0",
57
+ "zod": "^3.22.0",
58
+ "dotenv": "^16.0.0"
59
+ },
60
+ "devDependencies": {
61
+ "typescript": "^5.3.0",
62
+ "@types/node": "^20.0.0",
63
+ "tsx": "^4.0.0",
64
+ "vitest": "^1.0.0",
65
+ "@vitest/ui": "^1.0.0"
66
+ }
67
+ }