@burdenoff/mcp-libs 2026.704.1 → 2026.719.2

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 (185) hide show
  1. package/dist/{chunk-WWFVD7BO.js → chunk-RHWHUY5Y.js} +3 -3
  2. package/dist/{chunk-WWFVD7BO.js.map → chunk-RHWHUY5Y.js.map} +1 -1
  3. package/dist/{chunk-H2OYWLOA.js → chunk-YOSQUY3M.js} +101 -35
  4. package/dist/chunk-YOSQUY3M.js.map +1 -0
  5. package/dist/core/index.cjs +101 -32
  6. package/dist/core/index.cjs.map +1 -1
  7. package/dist/core/index.d.cts +1 -1
  8. package/dist/core/index.d.ts +1 -1
  9. package/dist/core/index.js +1 -1
  10. package/dist/index.cjs +97 -31
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/modules/adaptercloud/index.cjs +14 -14
  16. package/dist/modules/adaptercloud/index.cjs.map +1 -1
  17. package/dist/modules/adaptercloud/index.js +1 -1
  18. package/dist/modules/artistrybase/index.cjs +14 -14
  19. package/dist/modules/artistrybase/index.cjs.map +1 -1
  20. package/dist/modules/artistrybase/index.js +1 -1
  21. package/dist/modules/assethandler/index.cjs +14 -14
  22. package/dist/modules/assethandler/index.cjs.map +1 -1
  23. package/dist/modules/assethandler/index.js +1 -1
  24. package/dist/modules/atheletebridge/index.cjs +14 -14
  25. package/dist/modules/atheletebridge/index.cjs.map +1 -1
  26. package/dist/modules/atheletebridge/index.js +1 -1
  27. package/dist/modules/auth/index.cjs +14 -14
  28. package/dist/modules/auth/index.cjs.map +1 -1
  29. package/dist/modules/auth/index.js +3 -3
  30. package/dist/modules/billing/index.cjs +14 -14
  31. package/dist/modules/billing/index.cjs.map +1 -1
  32. package/dist/modules/billing/index.js +1 -1
  33. package/dist/modules/brainyrich/index.cjs +14 -14
  34. package/dist/modules/brainyrich/index.cjs.map +1 -1
  35. package/dist/modules/brainyrich/index.js +1 -1
  36. package/dist/modules/buildmyiq/index.cjs +14 -14
  37. package/dist/modules/buildmyiq/index.cjs.map +1 -1
  38. package/dist/modules/buildmyiq/index.js +1 -1
  39. package/dist/modules/channels/index.cjs +14 -14
  40. package/dist/modules/channels/index.cjs.map +1 -1
  41. package/dist/modules/channels/index.js +1 -1
  42. package/dist/modules/collabkin/index.cjs +14 -14
  43. package/dist/modules/collabkin/index.cjs.map +1 -1
  44. package/dist/modules/collabkin/index.js +1 -1
  45. package/dist/modules/comradecircle/index.cjs +14 -14
  46. package/dist/modules/comradecircle/index.cjs.map +1 -1
  47. package/dist/modules/comradecircle/index.js +1 -1
  48. package/dist/modules/conversations/index.cjs +14 -14
  49. package/dist/modules/conversations/index.cjs.map +1 -1
  50. package/dist/modules/conversations/index.js +1 -1
  51. package/dist/modules/coolandlovely/index.cjs +14 -14
  52. package/dist/modules/coolandlovely/index.cjs.map +1 -1
  53. package/dist/modules/coolandlovely/index.js +1 -1
  54. package/dist/modules/cosmicintersection/index.cjs +14 -14
  55. package/dist/modules/cosmicintersection/index.cjs.map +1 -1
  56. package/dist/modules/cosmicintersection/index.js +1 -1
  57. package/dist/modules/crewfoundry/index.cjs +14 -14
  58. package/dist/modules/crewfoundry/index.cjs.map +1 -1
  59. package/dist/modules/crewfoundry/index.js +1 -1
  60. package/dist/modules/devportal/index.cjs +14 -14
  61. package/dist/modules/devportal/index.cjs.map +1 -1
  62. package/dist/modules/devportal/index.js +1 -1
  63. package/dist/modules/ecoimpacthub/index.cjs +14 -14
  64. package/dist/modules/ecoimpacthub/index.cjs.map +1 -1
  65. package/dist/modules/ecoimpacthub/index.js +1 -1
  66. package/dist/modules/eventfullymanaged/index.cjs +14 -14
  67. package/dist/modules/eventfullymanaged/index.cjs.map +1 -1
  68. package/dist/modules/eventfullymanaged/index.js +1 -1
  69. package/dist/modules/export/index.cjs +14 -14
  70. package/dist/modules/export/index.cjs.map +1 -1
  71. package/dist/modules/export/index.js +1 -1
  72. package/dist/modules/files/index.cjs +14 -14
  73. package/dist/modules/files/index.cjs.map +1 -1
  74. package/dist/modules/files/index.js +1 -1
  75. package/dist/modules/ggnomad/index.cjs +14 -14
  76. package/dist/modules/ggnomad/index.cjs.map +1 -1
  77. package/dist/modules/ggnomad/index.js +1 -1
  78. package/dist/modules/govcitizenhub/index.cjs +14 -14
  79. package/dist/modules/govcitizenhub/index.cjs.map +1 -1
  80. package/dist/modules/govcitizenhub/index.js +1 -1
  81. package/dist/modules/groups/index.cjs +14 -14
  82. package/dist/modules/groups/index.cjs.map +1 -1
  83. package/dist/modules/groups/index.js +1 -1
  84. package/dist/modules/headshotmarketing/index.cjs +14 -14
  85. package/dist/modules/headshotmarketing/index.cjs.map +1 -1
  86. package/dist/modules/headshotmarketing/index.js +1 -1
  87. package/dist/modules/health/index.cjs +21 -19
  88. package/dist/modules/health/index.cjs.map +1 -1
  89. package/dist/modules/health/index.js +1 -1
  90. package/dist/modules/hookmovies/index.cjs +14 -14
  91. package/dist/modules/hookmovies/index.cjs.map +1 -1
  92. package/dist/modules/hookmovies/index.js +1 -1
  93. package/dist/modules/housingvista/index.cjs +14 -14
  94. package/dist/modules/housingvista/index.cjs.map +1 -1
  95. package/dist/modules/housingvista/index.js +1 -1
  96. package/dist/modules/integrations/index.cjs +14 -14
  97. package/dist/modules/integrations/index.cjs.map +1 -1
  98. package/dist/modules/integrations/index.js +1 -1
  99. package/dist/modules/intelwatchtower/index.cjs +14 -14
  100. package/dist/modules/intelwatchtower/index.cjs.map +1 -1
  101. package/dist/modules/intelwatchtower/index.js +1 -1
  102. package/dist/modules/kadaikodi/index.cjs +14 -14
  103. package/dist/modules/kadaikodi/index.cjs.map +1 -1
  104. package/dist/modules/kadaikodi/index.js +1 -1
  105. package/dist/modules/labsofscience/index.cjs +14 -14
  106. package/dist/modules/labsofscience/index.cjs.map +1 -1
  107. package/dist/modules/labsofscience/index.js +1 -1
  108. package/dist/modules/manufacturedops/index.cjs +14 -14
  109. package/dist/modules/manufacturedops/index.cjs.map +1 -1
  110. package/dist/modules/manufacturedops/index.js +1 -1
  111. package/dist/modules/movethewheels/index.cjs +16 -42
  112. package/dist/modules/movethewheels/index.cjs.map +1 -1
  113. package/dist/modules/movethewheels/index.js +3 -29
  114. package/dist/modules/movethewheels/index.js.map +1 -1
  115. package/dist/modules/mybodyshield/index.cjs +14 -14
  116. package/dist/modules/mybodyshield/index.cjs.map +1 -1
  117. package/dist/modules/mybodyshield/index.js +1 -1
  118. package/dist/modules/notifications/index.cjs +14 -14
  119. package/dist/modules/notifications/index.cjs.map +1 -1
  120. package/dist/modules/notifications/index.js +1 -1
  121. package/dist/modules/organizations/index.cjs +14 -14
  122. package/dist/modules/organizations/index.cjs.map +1 -1
  123. package/dist/modules/organizations/index.js +1 -1
  124. package/dist/modules/planmagnet/index.cjs +14 -14
  125. package/dist/modules/planmagnet/index.cjs.map +1 -1
  126. package/dist/modules/planmagnet/index.js +1 -1
  127. package/dist/modules/products/index.cjs +14 -14
  128. package/dist/modules/products/index.cjs.map +1 -1
  129. package/dist/modules/products/index.js +1 -1
  130. package/dist/modules/proserviceworld/index.cjs +14 -14
  131. package/dist/modules/proserviceworld/index.cjs.map +1 -1
  132. package/dist/modules/proserviceworld/index.js +1 -1
  133. package/dist/modules/rbac/index.cjs +14 -14
  134. package/dist/modules/rbac/index.cjs.map +1 -1
  135. package/dist/modules/rbac/index.js +1 -1
  136. package/dist/modules/sandbox/index.cjs +14 -14
  137. package/dist/modules/sandbox/index.cjs.map +1 -1
  138. package/dist/modules/sandbox/index.js +1 -1
  139. package/dist/modules/scheduler/index.cjs +14 -14
  140. package/dist/modules/scheduler/index.cjs.map +1 -1
  141. package/dist/modules/scheduler/index.js +1 -1
  142. package/dist/modules/security/index.cjs +14 -14
  143. package/dist/modules/security/index.cjs.map +1 -1
  144. package/dist/modules/security/index.js +1 -1
  145. package/dist/modules/semanticfed/index.cjs +14 -14
  146. package/dist/modules/semanticfed/index.cjs.map +1 -1
  147. package/dist/modules/semanticfed/index.js +1 -1
  148. package/dist/modules/store/index.cjs +14 -14
  149. package/dist/modules/store/index.cjs.map +1 -1
  150. package/dist/modules/store/index.js +1 -1
  151. package/dist/modules/subscriberbot/index.cjs +14 -14
  152. package/dist/modules/subscriberbot/index.cjs.map +1 -1
  153. package/dist/modules/subscriberbot/index.js +1 -1
  154. package/dist/modules/support/index.cjs +14 -14
  155. package/dist/modules/support/index.cjs.map +1 -1
  156. package/dist/modules/support/index.js +1 -1
  157. package/dist/modules/tags/index.cjs +14 -14
  158. package/dist/modules/tags/index.cjs.map +1 -1
  159. package/dist/modules/tags/index.js +1 -1
  160. package/dist/modules/technospam/index.cjs +14 -14
  161. package/dist/modules/technospam/index.cjs.map +1 -1
  162. package/dist/modules/technospam/index.js +1 -1
  163. package/dist/modules/theculturepost/index.cjs +14 -14
  164. package/dist/modules/theculturepost/index.cjs.map +1 -1
  165. package/dist/modules/theculturepost/index.js +1 -1
  166. package/dist/modules/theglobalfuel/index.cjs +14 -14
  167. package/dist/modules/theglobalfuel/index.cjs.map +1 -1
  168. package/dist/modules/theglobalfuel/index.js +1 -1
  169. package/dist/modules/timecampus/index.cjs +21 -16
  170. package/dist/modules/timecampus/index.cjs.map +1 -1
  171. package/dist/modules/timecampus/index.js +8 -3
  172. package/dist/modules/timecampus/index.js.map +1 -1
  173. package/dist/modules/tours/index.cjs +14 -14
  174. package/dist/modules/tours/index.cjs.map +1 -1
  175. package/dist/modules/tours/index.js +1 -1
  176. package/dist/modules/vibecontrols/index.cjs +14 -14
  177. package/dist/modules/vibecontrols/index.cjs.map +1 -1
  178. package/dist/modules/vibecontrols/index.js +2 -2
  179. package/dist/modules/workspaces/index.cjs +14 -14
  180. package/dist/modules/workspaces/index.cjs.map +1 -1
  181. package/dist/modules/workspaces/index.js +1 -1
  182. package/dist/{tool-name-DlnrBsZ6.d.ts → tool-name-BaPNMZdj.d.ts} +17 -1
  183. package/dist/{tool-name-CQf_IqAj.d.cts → tool-name-Bvb36qmq.d.cts} +17 -1
  184. package/package.json +1 -1
  185. package/dist/chunk-H2OYWLOA.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { mcpToolName, jsonResult, errorResult } from '../../chunk-H2OYWLOA.js';
1
+ import { mcpToolName, jsonResult, errorResult } from '../../chunk-YOSQUY3M.js';
2
2
  import { z } from 'zod';
3
3
 
4
4
  // src/modules/files/operations.ts
@@ -18,20 +18,6 @@ var McpInternalError = class extends Error {
18
18
  }
19
19
  };
20
20
 
21
- // src/core/result.ts
22
- function jsonResult(data, structured) {
23
- const result = {
24
- content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
25
- };
26
- return result;
27
- }
28
- function errorResult(message, hint) {
29
- const text = hint ? `${message}
30
-
31
- Hint: ${hint}` : message;
32
- return { content: [{ type: "text", text }], isError: true };
33
- }
34
-
35
21
  // src/core/tool-name.ts
36
22
  var MAX_TOOL_NAME_LENGTH = 63;
37
23
  function assertSafeName(name, kind) {
@@ -62,6 +48,20 @@ function mcpPromptName(productName, ...parts) {
62
48
  return [productName, ...parts].filter(Boolean).join("-");
63
49
  }
64
50
 
51
+ // src/core/result.ts
52
+ function jsonResult(data, structured) {
53
+ const result = {
54
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
55
+ };
56
+ return result;
57
+ }
58
+ function errorResult(message, hint) {
59
+ const text = hint ? `${message}
60
+
61
+ Hint: ${hint}` : message;
62
+ return { content: [{ type: "text", text }], isError: true };
63
+ }
64
+
65
65
  // src/modules/ggnomad/operations.ts
66
66
  var PROVIDER_FIELDS = `
67
67
  id name type description contactEmail contactPhone website status
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/result.ts","../../../src/core/tool-name.ts","../../../src/modules/ggnomad/operations.ts","../../../src/modules/ggnomad/tools/providers.ts","../../../src/modules/ggnomad/tools/shared.ts","../../../src/modules/ggnomad/tools/properties.ts","../../../src/modules/ggnomad/tools/activities.ts","../../../src/modules/ggnomad/tools/events.ts","../../../src/modules/ggnomad/tools/tours.ts","../../../src/modules/ggnomad/tools/trips.ts","../../../src/modules/ggnomad/tools/bookings.ts","../../../src/modules/ggnomad/tools/favorites.ts","../../../src/modules/ggnomad/tools/analytics.ts","../../../src/modules/ggnomad/resources.ts","../../../src/modules/ggnomad/prompts.ts","../../../src/modules/ggnomad/index.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Error classes for MCP SDK.\n *\n * Modules MUST throw these instead of throwing raw Errors. The registerTool\n * wrapper in result.ts catches and maps them to MCP-protocol-compliant\n * `{ isError: true, content: [...] }` responses.\n *\n * Throwing past the wrapper to the protocol surfaces as JSON-RPC -32603 to\n * the client and is a protocol bug.\n */\n\nexport class McpUserError extends Error {\n public readonly hint: string | undefined;\n\n constructor(message: string, opts?: { hint?: string }) {\n super(message);\n this.name = 'McpUserError';\n this.hint = opts?.hint;\n }\n}\n\nexport class McpAuthError extends McpUserError {\n constructor(message: string, opts?: { hint?: string }) {\n super(message, {\n hint: opts?.hint ?? 'Run the auth_login tool to authenticate.',\n });\n this.name = 'McpAuthError';\n }\n}\n\nexport class McpInternalError extends Error {\n public override readonly cause: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'McpInternalError';\n this.cause = cause;\n }\n}\n","/**\n * MCP tool result helpers + central handler.\n *\n * Modules NEVER call server.registerTool directly — they use registerTool()\n * from this module so the central try/catch wraps the handler and:\n * - maps thrown McpUserError / McpAuthError / McpInternalError to\n * MCP-protocol-compliant `{ isError: true, content: [...] }` shapes\n * - threads `_meta.progressToken` into ctx.progress for long ops\n * - emits a structured log line on every error\n * - never leaks `cause` from McpInternalError to the client\n *\n * This is the analog of cli-sdk's createProgram() central error handler.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { ZodRawShape } from 'zod';\nimport type { McpContext } from './context.js';\nimport { McpAuthError, McpInternalError, McpUserError } from './errors.js';\n\nexport interface ToolTextContent {\n type: 'text';\n text: string;\n [k: string]: unknown;\n}\n\nexport interface ToolResult {\n content: ToolTextContent[];\n isError?: boolean;\n structuredContent?: Record<string, unknown>;\n [k: string]: unknown;\n}\n\nexport interface ToolMeta {\n progressToken?: string | number;\n}\n\n/**\n * Build a successful tool result with JSON content (pretty-printed).\n */\nexport function jsonResult(data: unknown, structured?: Record<string, unknown>): ToolResult {\n const result: ToolResult = {\n content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],\n };\n if (structured !== undefined) {\n result.structuredContent = structured;\n }\n return result;\n}\n\n/**\n * Build a successful tool result with plain text content.\n */\nexport function textResult(text: string): ToolResult {\n return { content: [{ type: 'text', text }] };\n}\n\n/**\n * Build an error tool result. Honors MCP's `{ isError: true, content }` shape.\n * Optional hint is appended on a new line so the LLM can react.\n */\nexport function errorResult(message: string, hint?: string): ToolResult {\n const text = hint ? `${message}\\n\\nHint: ${hint}` : message;\n return { content: [{ type: 'text', text }], isError: true };\n}\n\nexport interface ToolMetadata {\n title: string;\n description: string;\n inputSchema?: ZodRawShape;\n}\n\nexport type ToolHandler<TArgs = Record<string, unknown>> = (\n args: TArgs,\n ctx: McpContext,\n meta: ToolMeta,\n) => Promise<unknown>;\n\n/**\n * Register a tool with the central error wrapper.\n *\n * The handler returns a plain value or void. The wrapper:\n * - wraps non-undefined returns in jsonResult()\n * - if the value already looks like a ToolResult (has `content`), passes through\n * - catches McpAuthError / McpUserError / McpInternalError / generic Error\n * - logs every error via ctx.logger.error\n */\nexport function registerTool<TArgs extends Record<string, unknown>>(\n server: McpServer,\n ctx: McpContext,\n name: string,\n metadata: ToolMetadata,\n handler: ToolHandler<TArgs>,\n): void {\n const sdkConfig = {\n title: metadata.title,\n description: metadata.description,\n ...(metadata.inputSchema ? { inputSchema: metadata.inputSchema } : {}),\n };\n\n // The MCP SDK's registerTool signature is `(name, config, handler)`. The\n // handler arity depends on whether inputSchema is present (1-arg without,\n // 2-arg with). We accept a unified handler shape and dispatch at runtime.\n // The SDK's typing is strict and conditional on the inputSchema generic;\n // bypass with a cast since runtime acceptance is unconditional.\n const wrapped = async (...callbackArgs: unknown[]): Promise<ToolResult> => {\n const hasArgs = callbackArgs.length === 2;\n const args = (hasArgs ? callbackArgs[0] : {}) as TArgs;\n const extra = (hasArgs ? callbackArgs[1] : callbackArgs[0]) as\n | { _meta?: { progressToken?: string | number } }\n | undefined;\n\n const progressToken = extra?._meta?.progressToken;\n const meta: ToolMeta = progressToken !== undefined ? { progressToken } : {};\n\n try {\n const result = await handler(args, ctx, meta);\n if (isToolResult(result)) return result;\n if (result === undefined) return textResult('OK');\n return jsonResult(result);\n } catch (error) {\n return mapErrorToResult(error, ctx, name);\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (server as any).registerTool(name, sdkConfig, wrapped);\n}\n\nfunction isToolResult(value: unknown): value is ToolResult {\n return (\n !!value &&\n typeof value === 'object' &&\n 'content' in value &&\n Array.isArray((value as ToolResult).content)\n );\n}\n\nfunction mapErrorToResult(error: unknown, ctx: McpContext, toolName: string): ToolResult {\n if (error instanceof McpAuthError) {\n ctx.logger.warn(`${toolName}: auth required`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpUserError) {\n ctx.logger.info(`${toolName}: user error`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpInternalError) {\n ctx.logger.error(`${toolName}: internal error`, {\n message: error.message,\n cause: stringifyCause(error.cause),\n });\n return errorResult(`Internal error in ${toolName}.`);\n }\n const message = error instanceof Error ? error.message : String(error);\n ctx.logger.error(`${toolName}: unhandled error`, { message });\n return errorResult(`${toolName}: ${message}`);\n}\n\nfunction stringifyCause(cause: unknown): string | undefined {\n if (cause === undefined || cause === null) return undefined;\n if (cause instanceof Error) return cause.message;\n try {\n return JSON.stringify(cause);\n } catch {\n return String(cause);\n }\n}\n","/**\n * Tool / resource / prompt naming helpers.\n *\n * Mandatory product prefix avoids collisions when Claude Desktop runs\n * multiple MCP servers concurrently (typical setup is ~6).\n *\n * Tool names are capped at 63 characters — Claude Desktop pre-1.x\n * truncated at 64 in some versions.\n */\n\nimport { McpInternalError } from './errors.js';\n\nconst MAX_TOOL_NAME_LENGTH = 63;\n\nfunction assertSafeName(name: string, kind: 'tool' | 'resource' | 'prompt'): string {\n if (kind === 'tool' && name.length > MAX_TOOL_NAME_LENGTH) {\n throw new McpInternalError(\n `Tool name '${name}' exceeds ${MAX_TOOL_NAME_LENGTH} characters (some MCP clients truncate at 64).`,\n );\n }\n return name;\n}\n\n/**\n * Build a tool name. Format: `<productName>_<...parts>` (snake_case).\n * Example: mcpToolName('vibecontrols', 'vibes', 'list') -> 'vibecontrols_vibes_list'\n */\nexport function mcpToolName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpToolName: productName is required');\n }\n const name = [productName, ...parts].filter(Boolean).join('_');\n return assertSafeName(name, 'tool');\n}\n\n/**\n * Build a resource URI. Format: `<productName>://<...parts>`.\n * Example: mcpResourceUri('vibecontrols', 'schema') -> 'vibecontrols://schema'\n */\nexport function mcpResourceUri(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpResourceUri: productName is required');\n }\n return `${productName}://${parts.filter(Boolean).join('/')}`;\n}\n\n/**\n * Build a prompt name. Format: `<productName>-<...parts>` (kebab-case).\n * Example: mcpPromptName('vibecontrols', 'setup') -> 'vibecontrols-setup'\n */\nexport function mcpPromptName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpPromptName: productName is required');\n }\n return [productName, ...parts].filter(Boolean).join('-');\n}\n\nexport const TOOL_NAME_LIMIT = MAX_TOOL_NAME_LENGTH;\n","/**\n * Centralized GraphQL operations for the GGNomad MCP module.\n *\n * GGNomad is the nomad travel + hospitality marketplace (future-products\n * ecosystem): bookable properties, activities, events, guided tours, and\n * trips, sold by providers, booked by guests. Backend subgraph:\n * ~/products/wspace/ggnomad/wspace-ggnomad-svc/ (Hive service name `ggnomad`).\n *\n * All operations run against the WORKSPACE gateway. Workspace scoping is\n * carried by the gateway headers (x-workspace-id / X-Workspace-Authorization)\n * issued by the auth module — GGNomad inputs do NOT carry a workspaceId.\n *\n * Pagination is uniformly the `GgnomadPaginationInput` shape ({ first, skip })\n * — NOT limit/offset. Favorites uses the separate `GgnomadFavoritesPaginationInput`.\n *\n * Root field names mirror the real backend EXACTLY: queries are `ggnomad*`\n * prefixed, mutations are `createGgnomad* / cancelGgnomadBooking /\n * toggleGgnomadFavorite` — called by their real names below.\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical kadaikodi module's operations file.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const PROVIDER_FIELDS = `\n id name type description contactEmail contactPhone website status\n rating reviewCount listingCount totalRevenue workspaceId createdAt updatedAt\n`;\n\nexport const PROPERTY_FIELDS = `\n id name type description address amenities bedrooms bathrooms maxGuests\n pricePerNight currency checkInTime checkOutTime images rating reviewCount\n status providerId workspaceId createdAt updatedAt\n provider { id name type status }\n`;\n\nexport const ACTIVITY_FIELDS = `\n id name category description duration difficulty price currency location\n images includes requirements maxParticipants rating reviewCount safetyInfo\n status providerId workspaceId createdAt updatedAt\n provider { id name type status }\n`;\n\nexport const EVENT_FIELDS = `\n id name category description venue startsAt endsAt price currency images\n performers rating reviewCount status providerId workspaceId createdAt updatedAt\n provider { id name type status }\n`;\n\nexport const TOUR_FIELDS = `\n id name type description duration difficulty price currency location\n highlights languages images maxGroupSize guideName rating reviewCount\n status providerId workspaceId createdAt updatedAt\n provider { id name type status }\n`;\n\nexport const TRIP_FIELDS = `\n id name transportMode origin destination departureAt arrivalAt isRoundTrip\n returnDepartureAt returnArrivalAt passengers class carrier price currency\n ecoFriendly status workspaceId createdAt updatedAt\n`;\n\nexport const BOOKING_FIELDS = `\n id bookingType referenceCode itemId itemName guestName guestEmail guestPhone\n guests checkIn checkOut eventDate totalPrice currency paymentMethod\n paymentStatus status specialRequests workspaceId createdAt updatedAt\n`;\n\nexport const ANALYTICS_FIELDS = `\n conversionRate monthlyTrends revenueByCategory topDestinations\n totalBookings totalRevenue totalUsers\n`;\n\nexport const OVERVIEW_FIELDS = `\n bookings listings monthlyRevenue users\n`;\n\n// ---------------------------------------------------------------------------\n// Providers\n// ---------------------------------------------------------------------------\n\nexport const GET_PROVIDER = `\n query GgnomadGetProvider($id: ID!) {\n ggnomadProvider(id: $id) {\n ${PROVIDER_FIELDS}\n }\n }\n`;\n\nexport const LIST_PROVIDERS = `\n query GgnomadListProviders($pagination: GgnomadPaginationInput) {\n ggnomadProviders(pagination: $pagination) {\n ${PROVIDER_FIELDS}\n }\n }\n`;\n\nexport const CREATE_PROVIDER = `\n mutation GgnomadCreateProvider($input: CreateGgnomadProviderInput!) {\n createGgnomadProvider(input: $input) {\n ${PROVIDER_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Properties\n// ---------------------------------------------------------------------------\n\nexport const GET_PROPERTY = `\n query GgnomadGetProperty($id: ID!) {\n ggnomadProperty(id: $id) {\n ${PROPERTY_FIELDS}\n }\n }\n`;\n\nexport const LIST_PROPERTIES = `\n query GgnomadListProperties($pagination: GgnomadPaginationInput) {\n ggnomadProperties(pagination: $pagination) {\n ${PROPERTY_FIELDS}\n }\n }\n`;\n\nexport const CREATE_PROPERTY = `\n mutation GgnomadCreateProperty($input: CreateGgnomadPropertyInput!) {\n createGgnomadProperty(input: $input) {\n ${PROPERTY_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Activities\n// ---------------------------------------------------------------------------\n\nexport const GET_ACTIVITY = `\n query GgnomadGetActivity($id: ID!) {\n ggnomadActivity(id: $id) {\n ${ACTIVITY_FIELDS}\n }\n }\n`;\n\nexport const LIST_ACTIVITIES = `\n query GgnomadListActivities($pagination: GgnomadPaginationInput) {\n ggnomadActivities(pagination: $pagination) {\n ${ACTIVITY_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Events\n// ---------------------------------------------------------------------------\n\nexport const GET_EVENT = `\n query GgnomadGetEvent($id: ID!) {\n ggnomadEvent(id: $id) {\n ${EVENT_FIELDS}\n }\n }\n`;\n\nexport const LIST_EVENTS = `\n query GgnomadListEvents($pagination: GgnomadPaginationInput) {\n ggnomadEvents(pagination: $pagination) {\n ${EVENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Tours\n// ---------------------------------------------------------------------------\n\nexport const GET_TOUR = `\n query GgnomadGetTour($id: ID!) {\n ggnomadTour(id: $id) {\n ${TOUR_FIELDS}\n }\n }\n`;\n\nexport const LIST_TOURS = `\n query GgnomadListTours($pagination: GgnomadPaginationInput) {\n ggnomadTours(pagination: $pagination) {\n ${TOUR_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Trips\n// ---------------------------------------------------------------------------\n\nexport const LIST_TRIPS = `\n query GgnomadListTrips($pagination: GgnomadPaginationInput) {\n ggnomadTrips(pagination: $pagination) {\n ${TRIP_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Bookings\n// ---------------------------------------------------------------------------\n\nexport const LIST_BOOKINGS = `\n query GgnomadListBookings($pagination: GgnomadPaginationInput) {\n ggnomadBookings(pagination: $pagination) {\n ${BOOKING_FIELDS}\n }\n }\n`;\n\nexport const CREATE_BOOKING = `\n mutation GgnomadCreateBooking($input: CreateGgnomadBookingInput!) {\n createGgnomadBooking(input: $input) {\n ${BOOKING_FIELDS}\n }\n }\n`;\n\nexport const CANCEL_BOOKING = `\n mutation GgnomadCancelBooking($id: ID!, $reason: String) {\n cancelGgnomadBooking(id: $id, reason: $reason) {\n ${BOOKING_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Favorites\n// ---------------------------------------------------------------------------\n\nexport const LIST_FAVORITES = `\n query GgnomadListFavorites($pagination: GgnomadFavoritesPaginationInput) {\n ggnomadFavorites(pagination: $pagination)\n }\n`;\n\nexport const TOGGLE_FAVORITE = `\n mutation GgnomadToggleFavorite($input: ToggleGgnomadFavoriteInput!) {\n toggleGgnomadFavorite(input: $input)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Analytics\n// ---------------------------------------------------------------------------\n\nexport const ANALYTICS = `\n query GgnomadAnalytics {\n ggnomadAnalytics {\n ${ANALYTICS_FIELDS}\n }\n }\n`;\n\nexport const OVERVIEW_STATS = `\n query GgnomadOverviewStats {\n ggnomadOverviewStats {\n ${OVERVIEW_FIELDS}\n }\n }\n`;\n","/**\n * GGNomad provider tools — hospitality provider directory.\n *\n * Surface (3): providers_{get,list,create}.\n * Queries (ggnomadProvider / ggnomadProviders) and the create mutation\n * (createGgnomadProvider) are called by their REAL backend names in operations.ts.\n * Pagination is the { first, skip } GgnomadPaginationInput shape.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerProviderTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'providers_get')),\n {\n title: 'Get Provider',\n description: 'Fetch a single GGNomad hospitality provider by ID.',\n inputSchema: { id: z.string().describe('Provider ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadProvider: Record<string, unknown> | null;\n }>(ops.GET_PROVIDER, { id });\n if (!data.ggnomadProvider) return errorResult(`Provider ${id} not found`);\n return jsonResult(data.ggnomadProvider);\n } catch (error) {\n ctx.logger.error('ggnomad providers_get failed', { error: String(error) });\n return errorResult(\n `Failed to get provider: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'providers_list')),\n {\n title: 'List Providers',\n description: 'List hospitality providers in the bound workspace, with first/skip pagination.',\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 20)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadProviders: Array<Record<string, unknown>>;\n }>(ops.LIST_PROVIDERS, { pagination: { first: first ?? 20, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadProviders);\n } catch (error) {\n ctx.logger.error('ggnomad providers_list failed', { error: String(error) });\n return errorResult(\n `Failed to list providers: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'providers_create')),\n {\n title: 'Create Provider',\n description:\n 'Onboard a new hospitality provider. `name` and `type` are required (type is a free-form provider class, e.g. \"hotel\", \"tour_operator\", \"transport\").',\n inputSchema: {\n name: z.string().min(1).describe('Provider display name'),\n type: z\n .string()\n .min(1)\n .describe('Provider type, e.g. \"hotel\", \"tour_operator\", \"transport\"'),\n description: z.string().optional().describe('Provider description'),\n contactEmail: z.string().optional().describe('Contact email'),\n contactPhone: z.string().optional().describe('Contact phone'),\n website: z.string().optional().describe('Provider website URL'),\n },\n },\n async ({ name, type, description, contactEmail, contactPhone, website }) => {\n try {\n const input: Record<string, unknown> = { name, type };\n if (description !== undefined) input.description = description;\n if (contactEmail !== undefined) input.contactEmail = contactEmail;\n if (contactPhone !== undefined) input.contactPhone = contactPhone;\n if (website !== undefined) input.website = website;\n\n const data = await ctx.gql.workspace.request<{\n createGgnomadProvider: Record<string, unknown>;\n }>(ops.CREATE_PROVIDER, { input });\n return jsonResult(data.createGgnomadProvider);\n } catch (error) {\n ctx.logger.error('ggnomad providers_create failed', { error: String(error) });\n return errorResult(\n `Failed to create provider: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Shared zod schemas for the GGNomad tool surface.\n *\n * Every backend enum is mirrored as a tight zod enum so Claude Desktop\n * grounds tool calls against the exact allowed values. JSON scalar inputs\n * (address, location, venue, origin, destination) are modelled as permissive\n * object records — the backend accepts arbitrary JSON, but a record shape\n * gives the LLM a typed hint.\n */\n\nimport { z } from 'zod';\n\nexport const GgnomadBookingStatusEnum = z\n .enum(['CANCELLED', 'CHECKED_IN', 'COMPLETED', 'CONFIRMED', 'NO_SHOW', 'PENDING', 'REFUNDED'])\n .describe('Lifecycle status of a booking');\n\nexport const GgnomadBookingTypeEnum = z\n .enum(['ACTIVITY', 'EVENT', 'PROPERTY', 'TOUR', 'TRIP'])\n .describe('The kind of listing a booking or favorite targets');\n\nexport const GgnomadListingStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'DRAFT', 'PAUSED', 'PENDING_REVIEW'])\n .describe('Lifecycle/moderation status of a listing (property, activity, event, tour)');\n\n/** Permissive JSON-object schema for `JSON` scalar inputs. */\nexport const JsonObject = z.record(z.string(), z.unknown());\n","/**\n * GGNomad property tools — bookable stay listings.\n *\n * Surface (3): properties_{get,list,create}.\n * Backend: ggnomadProperty / ggnomadProperties / createGgnomadProperty.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { JsonObject } from './shared.js';\n\nexport function registerPropertyTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'properties_get')),\n {\n title: 'Get Property',\n description: 'Fetch a single bookable property (stay listing) by ID.',\n inputSchema: { id: z.string().describe('Property ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadProperty: Record<string, unknown> | null;\n }>(ops.GET_PROPERTY, { id });\n if (!data.ggnomadProperty) return errorResult(`Property ${id} not found`);\n return jsonResult(data.ggnomadProperty);\n } catch (error) {\n ctx.logger.error('ggnomad properties_get failed', { error: String(error) });\n return errorResult(\n `Failed to get property: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'properties_list')),\n {\n title: 'List Properties',\n description: 'List bookable properties in the bound workspace, with first/skip pagination.',\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 20)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadProperties: Array<Record<string, unknown>>;\n }>(ops.LIST_PROPERTIES, { pagination: { first: first ?? 20, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadProperties);\n } catch (error) {\n ctx.logger.error('ggnomad properties_list failed', { error: String(error) });\n return errorResult(\n `Failed to list properties: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'properties_create')),\n {\n title: 'Create Property',\n description:\n 'List a new bookable property. `address` is required JSON; `amenities`/`images` are required arrays; `type` is a free-form class (e.g. \"apartment\", \"villa\", \"hostel\").',\n inputSchema: {\n name: z.string().min(1).describe('Property display name'),\n type: z.string().min(1).describe('Property type, e.g. \"apartment\", \"villa\", \"hostel\"'),\n address: JsonObject.describe('Address JSON ({ line1, city, country, lat, lng, ... })'),\n amenities: z.array(z.string()).describe('Amenity tags (e.g. wifi, kitchen, parking)'),\n images: z.array(z.string()).describe('Image URLs'),\n maxGuests: z.number().int().describe('Maximum guest capacity'),\n pricePerNight: z.number().describe('Nightly price'),\n bedrooms: z.number().int().optional().describe('Number of bedrooms'),\n bathrooms: z.number().int().optional().describe('Number of bathrooms'),\n checkInTime: z.string().optional().describe('Check-in time, e.g. \"15:00\"'),\n checkOutTime: z.string().optional().describe('Check-out time, e.g. \"11:00\"'),\n currency: z.string().optional().describe('ISO currency code (default service currency)'),\n description: z.string().optional().describe('Property description'),\n providerId: z.string().optional().describe('Owning provider ID'),\n },\n },\n async ({\n name,\n type,\n address,\n amenities,\n images,\n maxGuests,\n pricePerNight,\n bedrooms,\n bathrooms,\n checkInTime,\n checkOutTime,\n currency,\n description,\n providerId,\n }) => {\n try {\n const input: Record<string, unknown> = {\n name,\n type,\n address,\n amenities,\n images,\n maxGuests,\n pricePerNight,\n };\n if (bedrooms !== undefined) input.bedrooms = bedrooms;\n if (bathrooms !== undefined) input.bathrooms = bathrooms;\n if (checkInTime !== undefined) input.checkInTime = checkInTime;\n if (checkOutTime !== undefined) input.checkOutTime = checkOutTime;\n if (currency !== undefined) input.currency = currency;\n if (description !== undefined) input.description = description;\n if (providerId !== undefined) input.providerId = providerId;\n\n const data = await ctx.gql.workspace.request<{\n createGgnomadProperty: Record<string, unknown>;\n }>(ops.CREATE_PROPERTY, { input });\n return jsonResult(data.createGgnomadProperty);\n } catch (error) {\n ctx.logger.error('ggnomad properties_create failed', { error: String(error) });\n return errorResult(\n `Failed to create property: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * GGNomad activity tools — bookable experiences/activities.\n *\n * Surface (2): activities_{get,list}. Read-only — the backend exposes no\n * activity create/update mutation. Backend: ggnomadActivity / ggnomadActivities.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerActivityTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'activities_get')),\n {\n title: 'Get Activity',\n description: 'Fetch a single bookable activity/experience by ID.',\n inputSchema: { id: z.string().describe('Activity ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadActivity: Record<string, unknown> | null;\n }>(ops.GET_ACTIVITY, { id });\n if (!data.ggnomadActivity) return errorResult(`Activity ${id} not found`);\n return jsonResult(data.ggnomadActivity);\n } catch (error) {\n ctx.logger.error('ggnomad activities_get failed', { error: String(error) });\n return errorResult(\n `Failed to get activity: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'activities_list')),\n {\n title: 'List Activities',\n description:\n 'List bookable activities/experiences in the bound workspace (first/skip pagination).',\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 20)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadActivities: Array<Record<string, unknown>>;\n }>(ops.LIST_ACTIVITIES, { pagination: { first: first ?? 20, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadActivities);\n } catch (error) {\n ctx.logger.error('ggnomad activities_list failed', { error: String(error) });\n return errorResult(\n `Failed to list activities: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * GGNomad event tools — ticketed events.\n *\n * Surface (2): events_{get,list}. Read-only — the backend exposes no event\n * create/update mutation. Backend: ggnomadEvent / ggnomadEvents.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerEventTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_get')),\n {\n title: 'Get Event',\n description: 'Fetch a single ticketed event by ID.',\n inputSchema: { id: z.string().describe('Event ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadEvent: Record<string, unknown> | null;\n }>(ops.GET_EVENT, { id });\n if (!data.ggnomadEvent) return errorResult(`Event ${id} not found`);\n return jsonResult(data.ggnomadEvent);\n } catch (error) {\n ctx.logger.error('ggnomad events_get failed', { error: String(error) });\n return errorResult(\n `Failed to get event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_list')),\n {\n title: 'List Events',\n description: 'List ticketed events in the bound workspace (first/skip pagination).',\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 20)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadEvents: Array<Record<string, unknown>>;\n }>(ops.LIST_EVENTS, { pagination: { first: first ?? 20, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadEvents);\n } catch (error) {\n ctx.logger.error('ggnomad events_list failed', { error: String(error) });\n return errorResult(\n `Failed to list events: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * GGNomad tour tools — guided tours.\n *\n * Surface (2): experiences_{get,list}. Read-only — the backend exposes no tour\n * create/update mutation. Backend: ggnomadTour / ggnomadTours.\n *\n * Note: the MCP tool prefix is `experiences_*` (not `tours_*`) to avoid colliding\n * with the generic `tours` module's tool names when both are mounted in a shell.\n * The GraphQL operations/types are unchanged (still ggnomadTour / ggnomadTours).\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerTourTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'experiences_get')),\n {\n title: 'Get Tour',\n description: 'Fetch a single guided tour by ID.',\n inputSchema: { id: z.string().describe('Tour ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadTour: Record<string, unknown> | null;\n }>(ops.GET_TOUR, { id });\n if (!data.ggnomadTour) return errorResult(`Tour ${id} not found`);\n return jsonResult(data.ggnomadTour);\n } catch (error) {\n ctx.logger.error('ggnomad experiences_get failed', { error: String(error) });\n return errorResult(\n `Failed to get tour: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'experiences_list')),\n {\n title: 'List Tours',\n description: 'List guided tours in the bound workspace (first/skip pagination).',\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 20)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadTours: Array<Record<string, unknown>>;\n }>(ops.LIST_TOURS, { pagination: { first: first ?? 20, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadTours);\n } catch (error) {\n ctx.logger.error('ggnomad experiences_list failed', { error: String(error) });\n return errorResult(\n `Failed to list tours: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * GGNomad trip tools — transport/travel legs.\n *\n * Surface (1): trips_list. Read-only — the backend exposes neither a singular\n * trip query nor a trip create/update mutation. Backend: ggnomadTrips.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerTripTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'trips_list')),\n {\n title: 'List Trips',\n description: 'List transport/travel trips in the bound workspace (first/skip pagination).',\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 20)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadTrips: Array<Record<string, unknown>>;\n }>(ops.LIST_TRIPS, { pagination: { first: first ?? 20, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadTrips);\n } catch (error) {\n ctx.logger.error('ggnomad trips_list failed', { error: String(error) });\n return errorResult(\n `Failed to list trips: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * GGNomad booking tools — guest booking lifecycle.\n *\n * Surface (3): bookings_{list,create,cancel}.\n * Backend: ggnomadBookings (list only — no singular query),\n * createGgnomadBooking, cancelGgnomadBooking.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { GgnomadBookingTypeEnum } from './shared.js';\n\nexport function registerBookingTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'bookings_list')),\n {\n title: 'List Bookings',\n description: 'List bookings in the bound workspace (first/skip pagination).',\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 20)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadBookings: Array<Record<string, unknown>>;\n }>(ops.LIST_BOOKINGS, { pagination: { first: first ?? 20, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadBookings);\n } catch (error) {\n ctx.logger.error('ggnomad bookings_list failed', { error: String(error) });\n return errorResult(\n `Failed to list bookings: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'bookings_create')),\n {\n title: 'Create Booking',\n description:\n 'Create a guest booking against a listing. `itemId`/`itemName` snapshot the booked listing; `bookingType` selects the listing kind; supply `checkIn`/`checkOut` for stays, `eventDate` for events/activities.',\n inputSchema: {\n bookingType: GgnomadBookingTypeEnum.describe('Kind of listing being booked'),\n itemId: z.string().min(1).describe('ID of the booked listing'),\n itemName: z.string().min(1).describe('Snapshot name of the booked listing'),\n guestName: z.string().min(1).describe('Lead guest name'),\n guests: z.number().int().describe('Number of guests'),\n totalPrice: z.number().describe('Total booking price'),\n guestEmail: z.string().optional().describe('Guest email'),\n guestPhone: z.string().optional().describe('Guest phone'),\n checkIn: z.string().optional().describe('Check-in datetime (ISO 8601) — stays'),\n checkOut: z.string().optional().describe('Check-out datetime (ISO 8601) — stays'),\n eventDate: z\n .string()\n .optional()\n .describe('Event/activity datetime (ISO 8601) — events, activities, tours'),\n currency: z.string().optional().describe('ISO currency code (default service currency)'),\n paymentMethod: z.string().optional().describe('Payment method, e.g. \"card\", \"upi\"'),\n specialRequests: z.string().optional().describe('Free-text special requests'),\n },\n },\n async ({\n bookingType,\n itemId,\n itemName,\n guestName,\n guests,\n totalPrice,\n guestEmail,\n guestPhone,\n checkIn,\n checkOut,\n eventDate,\n currency,\n paymentMethod,\n specialRequests,\n }) => {\n try {\n const input: Record<string, unknown> = {\n bookingType,\n itemId,\n itemName,\n guestName,\n guests,\n totalPrice,\n };\n if (guestEmail !== undefined) input.guestEmail = guestEmail;\n if (guestPhone !== undefined) input.guestPhone = guestPhone;\n if (checkIn !== undefined) input.checkIn = checkIn;\n if (checkOut !== undefined) input.checkOut = checkOut;\n if (eventDate !== undefined) input.eventDate = eventDate;\n if (currency !== undefined) input.currency = currency;\n if (paymentMethod !== undefined) input.paymentMethod = paymentMethod;\n if (specialRequests !== undefined) input.specialRequests = specialRequests;\n\n const data = await ctx.gql.workspace.request<{\n createGgnomadBooking: Record<string, unknown>;\n }>(ops.CREATE_BOOKING, { input });\n return jsonResult(data.createGgnomadBooking);\n } catch (error) {\n ctx.logger.error('ggnomad bookings_create failed', { error: String(error) });\n return errorResult(\n `Failed to create booking: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'bookings_cancel')),\n {\n title: 'Cancel Booking',\n description: 'Cancel a booking by ID, with an optional cancellation reason.',\n inputSchema: {\n id: z.string().describe('Booking ID'),\n reason: z.string().optional().describe('Cancellation reason'),\n },\n },\n async ({ id, reason }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n cancelGgnomadBooking: Record<string, unknown>;\n }>(ops.CANCEL_BOOKING, { id, reason });\n return jsonResult(data.cancelGgnomadBooking);\n } catch (error) {\n ctx.logger.error('ggnomad bookings_cancel failed', { error: String(error) });\n return errorResult(\n `Failed to cancel booking: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * GGNomad favorites tools — guest wishlists.\n *\n * Surface (2): favorites_{list,toggle}.\n * Backend: ggnomadFavorites (returns [JSON!]!), toggleGgnomadFavorite\n * (returns Boolean! — true when now favorited, false when un-favorited).\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { GgnomadBookingTypeEnum } from './shared.js';\n\nexport function registerFavoriteTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'favorites_list')),\n {\n title: 'List Favorites',\n description:\n \"List the calling user's favorited listings (first/skip pagination, default page 50).\",\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 50)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadFavorites: Array<Record<string, unknown>>;\n }>(ops.LIST_FAVORITES, { pagination: { first: first ?? 50, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadFavorites);\n } catch (error) {\n ctx.logger.error('ggnomad favorites_list failed', { error: String(error) });\n return errorResult(\n `Failed to list favorites: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'favorites_toggle')),\n {\n title: 'Toggle Favorite',\n description:\n \"Toggle a listing in the calling user's favorites. Returns true if the listing is now favorited, false if it was removed.\",\n inputSchema: {\n targetId: z.string().min(1).describe('ID of the listing to favorite/un-favorite'),\n targetType: GgnomadBookingTypeEnum.describe('Kind of listing being targeted'),\n },\n },\n async ({ targetId, targetType }) => {\n try {\n const data = await ctx.gql.workspace.request<{ toggleGgnomadFavorite: boolean }>(\n ops.TOGGLE_FAVORITE,\n { input: { targetId, targetType } },\n );\n return jsonResult({ favorited: data.toggleGgnomadFavorite });\n } catch (error) {\n ctx.logger.error('ggnomad favorites_toggle failed', { error: String(error) });\n return errorResult(\n `Failed to toggle favorite: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * GGNomad analytics tools.\n *\n * Surface (2): analytics_metrics, analytics_overview.\n * `analytics_metrics` maps to ggnomadAnalytics (detailed marketplace metrics);\n * `analytics_overview` maps to ggnomadOverviewStats (headline KPIs). Both are\n * @rbac wspace-scoped. The GGNomad subgraph exposes no public health probe.\n */\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerAnalyticsTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'analytics_metrics')),\n {\n title: 'GGNomad Analytics',\n description:\n 'Marketplace-wide analytics: conversion rate, monthly trends, revenue by category, top destinations, and total users/bookings/revenue.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadAnalytics: Record<string, unknown>;\n }>(ops.ANALYTICS, {});\n return jsonResult(data.ggnomadAnalytics);\n } catch (error) {\n ctx.logger.error('ggnomad analytics_metrics failed', { error: String(error) });\n return errorResult(\n `Failed to get analytics: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'analytics_overview')),\n {\n title: 'GGNomad Overview Stats',\n description:\n 'Headline marketplace KPIs: active listings, total bookings, total users, and monthly revenue.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadOverviewStats: Record<string, unknown>;\n }>(ops.OVERVIEW_STATS, {});\n return jsonResult(data.ggnomadOverviewStats);\n } catch (error) {\n ctx.logger.error('ggnomad analytics_overview failed', { error: String(error) });\n return errorResult(\n `Failed to get overview stats: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpResourceUri, type McpContext } from '../../core/index.js';\nimport { OVERVIEW_STATS, ANALYTICS, LIST_PROPERTIES } from './operations.js';\n\n/**\n * Read-only GGNomad MCP resources. URIs are product-prefixed via\n * mcpResourceUri so they don't collide when multiple MCP servers run side by\n * side. Each is tracked at function entry so the shell manifest reflects what\n * was registered even though registration is imperative.\n */\nexport function registerGgnomadResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const overviewUri = track(mcpResourceUri(ctx.productName, 'overview'));\n const analyticsUri = track(mcpResourceUri(ctx.productName, 'analytics'));\n const propertiesUri = track(mcpResourceUri(ctx.productName, 'properties'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'ggnomad-schema',\n schemaUri,\n {\n title: 'GGNomad Domain Schema',\n description:\n 'Overview of the GGNomad travel + hospitality marketplace domain — entities, enums, and the per-entity tool surface.',\n mimeType: 'text/plain',\n },\n async () => {\n ctx.logger.debug(`Resource ${schemaUri} requested`);\n const schema = `# GGNomad Domain (Overview)\n\nNomad travel + hospitality marketplace: bookable stays, activities, events,\nguided tours, and trips, sold by providers and booked by guests.\n\n## Entities\n- GgnomadProvider — a hospitality business (hotel, tour operator, transport)\n- GgnomadProperty — a bookable stay listing\n- GgnomadActivity — a bookable experience/activity\n- GgnomadEvent — a ticketed event\n- GgnomadTour — a guided tour\n- GgnomadTrip — a transport/travel leg\n- GgnomadBooking — a guest booking against any listing\n\n## Enums\n- GgnomadBookingType: ACTIVITY, EVENT, PROPERTY, TOUR, TRIP\n- GgnomadBookingStatus: PENDING, CONFIRMED, CHECKED_IN, COMPLETED, CANCELLED, NO_SHOW, REFUNDED\n- GgnomadListingStatus: DRAFT, PENDING_REVIEW, ACTIVE, PAUSED, ARCHIVED\n\n## Tool groups\nproviders, properties, activities, events, tours, trips, bookings, favorites, analytics.\nAll run against the WORKSPACE gateway (workspace-scoped). Pagination is { first, skip }.\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://overview — headline KPIs\n server.registerResource(\n 'ggnomad-overview',\n overviewUri,\n {\n title: 'GGNomad Overview Stats',\n description: 'Live headline marketplace KPIs (listings, bookings, users, monthly revenue).',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${overviewUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ ggnomadOverviewStats: unknown }>(\n OVERVIEW_STATS,\n {},\n );\n return {\n contents: [\n {\n uri: overviewUri,\n text: JSON.stringify(data.ggnomadOverviewStats, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: overviewUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://analytics — marketplace analytics\n server.registerResource(\n 'ggnomad-analytics',\n analyticsUri,\n {\n title: 'GGNomad Analytics',\n description:\n 'Marketplace-wide analytics: conversion rate, monthly trends, revenue by category, top destinations, totals.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${analyticsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ ggnomadAnalytics: unknown }>(ANALYTICS, {});\n return {\n contents: [\n {\n uri: analyticsUri,\n text: JSON.stringify(data.ggnomadAnalytics, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: analyticsUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://properties — property directory\n server.registerResource(\n 'ggnomad-properties',\n propertiesUri,\n {\n title: 'GGNomad Property Directory',\n description: 'The first 50 bookable properties in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${propertiesUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ ggnomadProperties: unknown }>(\n LIST_PROPERTIES,\n { pagination: { first: 50, skip: 0 } },\n );\n return {\n contents: [\n {\n uri: propertiesUri,\n text: JSON.stringify(data.ggnomadProperties, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: propertiesUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n}\n","import { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpPromptName, type McpContext } from '../../core/index.js';\n\n/**\n * GGNomad MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerGgnomadPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const onboardingName = track(mcpPromptName(p, 'provider-onboarding'));\n const opsName = track(mcpPromptName(p, 'marketplace-ops'));\n\n // <product>-provider-onboarding — stand up a provider + inventory\n server.registerPrompt(\n onboardingName,\n {\n title: 'Provider Onboarding',\n description:\n 'Guide for onboarding a new GGNomad hospitality provider end to end: create the provider and list its first bookable property.',\n argsSchema: {\n name: z.string().optional().describe('Provider/business name'),\n type: z.string().optional().describe('Provider type, e.g. \"hotel\", \"tour_operator\"'),\n },\n },\n ({ name, type }) => {\n ctx.logger.debug(`Prompt ${onboardingName} called`, { name, type });\n const nameNote = name\n ? `Use the business name \"${name}\".`\n : 'Ask the user for the business name.';\n const typeNote = type\n ? `Use provider type \"${type}\".`\n : 'Help the user pick a provider type.';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me onboard a new GGNomad hospitality provider.\n\n1. **Create Provider**: Use ${p}_providers_create. ${nameNote} ${typeNote} Optionally add contactEmail, contactPhone, and website.\n2. **List a Property**: Use ${p}_properties_create for the first stay — set the providerId from step 1, plus address JSON, amenities, images, maxGuests, and pricePerNight.\n3. **Verify**: Use ${p}_properties_list to confirm the property appears, and ${p}_providers_get to confirm the provider's listingCount.\n\nShow results at each step and confirm before listing more inventory.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-marketplace-ops — daily operations\n server.registerPrompt(\n opsName,\n {\n title: 'Marketplace Operations',\n description:\n 'Daily operations workflow: review KPIs, triage the booking queue, manage cancellations, and scan inventory.',\n argsSchema: {\n providerId: z.string().optional().describe('Provider ID to focus on'),\n },\n },\n ({ providerId }) => {\n ctx.logger.debug(`Prompt ${opsName} called`, { providerId });\n const providerNote = providerId\n ? `Focus on provider \"${providerId}\".`\n : `First list providers with ${p}_providers_list and pick one.`;\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run daily GGNomad marketplace operations. ${providerNote}\n\n1. **KPIs**: Use ${p}_analytics_overview for headline numbers and ${p}_analytics_metrics for trends, revenue by category, and top destinations.\n2. **Booking Queue**: Use ${p}_bookings_list to find PENDING/CONFIRMED bookings that need attention.\n3. **Cancellations**: For any booking that must be cancelled, use ${p}_bookings_cancel with a clear reason.\n4. **Inventory**: Scan ${p}_properties_list, ${p}_activities_list, ${p}_events_list, ${p}_experiences_list, and ${p}_trips_list for listings needing updates.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * GGNomad module — domain module for the future-products ecosystem program.\n *\n * Covers all 7 @key entities of wspace-ggnomad-svc grouped into per-entity\n * sub-APIs: providers, properties, activities, events, tours, trips, bookings,\n * plus favorites and analytics. Mirrors the kadaikodi module's structure\n * (tools/<entity>.ts + resources.ts + prompts.ts) and typing discipline.\n *\n * Backend: ~/products/wspace/ggnomad/wspace-ggnomad-svc/\n * (Hive service name `ggnomad`). All operations run against the WORKSPACE\n * gateway. The subgraph exposes no @public health probe.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerProviderTools } from './tools/providers.js';\nimport { registerPropertyTools } from './tools/properties.js';\nimport { registerActivityTools } from './tools/activities.js';\nimport { registerEventTools } from './tools/events.js';\nimport { registerTourTools } from './tools/tours.js';\nimport { registerTripTools } from './tools/trips.js';\nimport { registerBookingTools } from './tools/bookings.js';\nimport { registerFavoriteTools } from './tools/favorites.js';\nimport { registerAnalyticsTools } from './tools/analytics.js';\nimport { registerGgnomadResources } from './resources.js';\nimport { registerGgnomadPrompts } from './prompts.js';\n\nconst ggnomadModule: McpModule = {\n id: 'ggnomad',\n version: '0.0.1',\n displayName: 'GGNomad',\n dependsOn: ['auth'],\n capabilities: { tools: {}, resources: {}, prompts: {} },\n\n register(server: McpServer, ctx: McpContext): ModuleRegistration {\n const tools: string[] = [];\n const resources: string[] = [];\n const prompts: string[] = [];\n\n const trackTool = (n: string): string => {\n tools.push(n);\n return n;\n };\n const trackResource = (uri: string): string => {\n resources.push(uri);\n return uri;\n };\n const trackPrompt = (n: string): string => {\n prompts.push(n);\n return n;\n };\n\n registerProviderTools(server, ctx, trackTool);\n registerPropertyTools(server, ctx, trackTool);\n registerActivityTools(server, ctx, trackTool);\n registerEventTools(server, ctx, trackTool);\n registerTourTools(server, ctx, trackTool);\n registerTripTools(server, ctx, trackTool);\n registerBookingTools(server, ctx, trackTool);\n registerFavoriteTools(server, ctx, trackTool);\n registerAnalyticsTools(server, ctx, trackTool);\n\n registerGgnomadResources(server, ctx, trackResource);\n registerGgnomadPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default ggnomadModule;\n"]}
1
+ {"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/tool-name.ts","../../../src/core/result.ts","../../../src/modules/ggnomad/operations.ts","../../../src/modules/ggnomad/tools/providers.ts","../../../src/modules/ggnomad/tools/shared.ts","../../../src/modules/ggnomad/tools/properties.ts","../../../src/modules/ggnomad/tools/activities.ts","../../../src/modules/ggnomad/tools/events.ts","../../../src/modules/ggnomad/tools/tours.ts","../../../src/modules/ggnomad/tools/trips.ts","../../../src/modules/ggnomad/tools/bookings.ts","../../../src/modules/ggnomad/tools/favorites.ts","../../../src/modules/ggnomad/tools/analytics.ts","../../../src/modules/ggnomad/resources.ts","../../../src/modules/ggnomad/prompts.ts","../../../src/modules/ggnomad/index.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Error classes for MCP SDK.\n *\n * Modules MUST throw these instead of throwing raw Errors. The registerTool\n * wrapper in result.ts catches and maps them to MCP-protocol-compliant\n * `{ isError: true, content: [...] }` responses.\n *\n * Throwing past the wrapper to the protocol surfaces as JSON-RPC -32603 to\n * the client and is a protocol bug.\n */\n\nexport class McpUserError extends Error {\n public readonly hint: string | undefined;\n\n constructor(message: string, opts?: { hint?: string }) {\n super(message);\n this.name = 'McpUserError';\n this.hint = opts?.hint;\n }\n}\n\nexport class McpAuthError extends McpUserError {\n constructor(message: string, opts?: { hint?: string }) {\n super(message, {\n hint: opts?.hint ?? 'Run the auth_login tool to authenticate.',\n });\n this.name = 'McpAuthError';\n }\n}\n\nexport class McpInternalError extends Error {\n public override readonly cause: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'McpInternalError';\n this.cause = cause;\n }\n}\n","/**\n * Tool / resource / prompt naming helpers.\n *\n * Mandatory product prefix avoids collisions when Claude Desktop runs\n * multiple MCP servers concurrently (typical setup is ~6).\n *\n * Tool names are capped at 63 characters — Claude Desktop pre-1.x\n * truncated at 64 in some versions.\n */\n\nimport { McpInternalError } from './errors.js';\n\nconst MAX_TOOL_NAME_LENGTH = 63;\n\nfunction assertSafeName(name: string, kind: 'tool' | 'resource' | 'prompt'): string {\n if (kind === 'tool' && name.length > MAX_TOOL_NAME_LENGTH) {\n throw new McpInternalError(\n `Tool name '${name}' exceeds ${MAX_TOOL_NAME_LENGTH} characters (some MCP clients truncate at 64).`,\n );\n }\n return name;\n}\n\n/**\n * Build a tool name. Format: `<productName>_<...parts>` (snake_case).\n * Example: mcpToolName('vibecontrols', 'vibes', 'list') -> 'vibecontrols_vibes_list'\n */\nexport function mcpToolName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpToolName: productName is required');\n }\n const name = [productName, ...parts].filter(Boolean).join('_');\n return assertSafeName(name, 'tool');\n}\n\n/**\n * Build a resource URI. Format: `<productName>://<...parts>`.\n * Example: mcpResourceUri('vibecontrols', 'schema') -> 'vibecontrols://schema'\n */\nexport function mcpResourceUri(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpResourceUri: productName is required');\n }\n return `${productName}://${parts.filter(Boolean).join('/')}`;\n}\n\n/**\n * Build a prompt name. Format: `<productName>-<...parts>` (kebab-case).\n * Example: mcpPromptName('vibecontrols', 'setup') -> 'vibecontrols-setup'\n */\nexport function mcpPromptName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpPromptName: productName is required');\n }\n return [productName, ...parts].filter(Boolean).join('-');\n}\n\nexport const TOOL_NAME_LIMIT = MAX_TOOL_NAME_LENGTH;\n\n/**\n * Name-based hint heuristics for MCP `annotations` (readOnlyHint /\n * destructiveHint). Used by tool-governance.ts to auto-fill annotations for\n * the fleet of product modules that call `server.registerTool` directly\n * (bypassing the `registerTool()` core helper) and so never set them\n * explicitly today (BOFF-3903). Deliberately conservative — matched against\n * whole `_`-delimited segments so e.g. `timeentries_delete` and\n * `pomodoro_delete_goal` match, but a hypothetical `undeletable_check`\n * would not.\n *\n * A module can always override the inference by passing an explicit\n * `annotations` object to `registerTool()` / `server.registerTool()`.\n */\nconst DESTRUCTIVE_NAME_SEGMENT = /(?:^|_)delete(?:_|$)/i;\nconst READ_ONLY_NAME_SEGMENT = /(?:^|_)(?:list|get|search|check|read|count|stats|by_date)(?:_|$)/i;\n\n/** True when a tool name looks destructive (irreversibly deletes data) by naming convention. */\nexport function inferDestructiveHint(toolName: string): boolean {\n return DESTRUCTIVE_NAME_SEGMENT.test(toolName);\n}\n\n/**\n * True when a tool name looks read-only by naming convention. Never true for\n * a name that also looks destructive (a tool can't be both).\n */\nexport function inferReadOnlyHint(toolName: string): boolean {\n return !inferDestructiveHint(toolName) && READ_ONLY_NAME_SEGMENT.test(toolName);\n}\n","/**\n * MCP tool result helpers + central handler.\n *\n * Modules NEVER call server.registerTool directly — they use registerTool()\n * from this module so the central try/catch wraps the handler and:\n * - maps thrown McpUserError / McpAuthError / McpInternalError to\n * MCP-protocol-compliant `{ isError: true, content: [...] }` shapes\n * - threads `_meta.progressToken` into ctx.progress for long ops\n * - emits a structured log line on every error\n * - never leaks `cause` from McpInternalError to the client\n *\n * This is the analog of cli-sdk's createProgram() central error handler.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { ZodRawShape } from 'zod';\nimport type { McpContext } from './context.js';\nimport { McpAuthError, McpInternalError, McpUserError } from './errors.js';\nimport type { ToolAnnotations } from './tool-governance.js';\n\nexport interface ToolTextContent {\n type: 'text';\n text: string;\n [k: string]: unknown;\n}\n\nexport interface ToolResult {\n content: ToolTextContent[];\n isError?: boolean;\n structuredContent?: Record<string, unknown>;\n [k: string]: unknown;\n}\n\nexport interface ToolMeta {\n progressToken?: string | number;\n}\n\n/**\n * Build a successful tool result with JSON content (pretty-printed).\n */\nexport function jsonResult(data: unknown, structured?: Record<string, unknown>): ToolResult {\n const result: ToolResult = {\n content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],\n };\n if (structured !== undefined) {\n result.structuredContent = structured;\n }\n return result;\n}\n\n/**\n * Build a successful tool result with plain text content.\n */\nexport function textResult(text: string): ToolResult {\n return { content: [{ type: 'text', text }] };\n}\n\n/**\n * Build an error tool result. Honors MCP's `{ isError: true, content }` shape.\n * Optional hint is appended on a new line so the LLM can react.\n */\nexport function errorResult(message: string, hint?: string): ToolResult {\n const text = hint ? `${message}\\n\\nHint: ${hint}` : message;\n return { content: [{ type: 'text', text }], isError: true };\n}\n\nexport interface ToolMetadata {\n title: string;\n description: string;\n inputSchema?: ZodRawShape;\n /**\n * Explicit MCP annotations (readOnlyHint / destructiveHint / ...). Optional\n * — when omitted, `wrapServerWithToolGovernance` (applied centrally in\n * `createMcpServer`) infers them from the tool name. Set this to override\n * the inference for a tool whose name doesn't match the naming convention.\n */\n annotations?: ToolAnnotations;\n}\n\nexport type ToolHandler<TArgs = Record<string, unknown>> = (\n args: TArgs,\n ctx: McpContext,\n meta: ToolMeta,\n) => Promise<unknown>;\n\n/**\n * Register a tool with the central error wrapper.\n *\n * The handler returns a plain value or void. The wrapper:\n * - wraps non-undefined returns in jsonResult()\n * - if the value already looks like a ToolResult (has `content`), passes through\n * - catches McpAuthError / McpUserError / McpInternalError / generic Error\n * - logs every error via ctx.logger.error\n */\nexport function registerTool<TArgs extends Record<string, unknown>>(\n server: McpServer,\n ctx: McpContext,\n name: string,\n metadata: ToolMetadata,\n handler: ToolHandler<TArgs>,\n): void {\n const sdkConfig = {\n title: metadata.title,\n description: metadata.description,\n ...(metadata.inputSchema ? { inputSchema: metadata.inputSchema } : {}),\n ...(metadata.annotations ? { annotations: metadata.annotations } : {}),\n };\n\n // The MCP SDK's registerTool signature is `(name, config, handler)`. The\n // handler arity depends on whether inputSchema is present (1-arg without,\n // 2-arg with). We accept a unified handler shape and dispatch at runtime.\n // The SDK's typing is strict and conditional on the inputSchema generic;\n // bypass with a cast since runtime acceptance is unconditional.\n const wrapped = async (...callbackArgs: unknown[]): Promise<ToolResult> => {\n const hasArgs = callbackArgs.length === 2;\n const args = (hasArgs ? callbackArgs[0] : {}) as TArgs;\n const extra = (hasArgs ? callbackArgs[1] : callbackArgs[0]) as\n | { _meta?: { progressToken?: string | number } }\n | undefined;\n\n const progressToken = extra?._meta?.progressToken;\n const meta: ToolMeta = progressToken !== undefined ? { progressToken } : {};\n\n try {\n const result = await handler(args, ctx, meta);\n if (isToolResult(result)) return result;\n if (result === undefined) return textResult('OK');\n return jsonResult(result);\n } catch (error) {\n return mapErrorToResult(error, ctx, name);\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (server as any).registerTool(name, sdkConfig, wrapped);\n}\n\nfunction isToolResult(value: unknown): value is ToolResult {\n return (\n !!value &&\n typeof value === 'object' &&\n 'content' in value &&\n Array.isArray((value as ToolResult).content)\n );\n}\n\nfunction mapErrorToResult(error: unknown, ctx: McpContext, toolName: string): ToolResult {\n if (error instanceof McpAuthError) {\n ctx.logger.warn(`${toolName}: auth required`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpUserError) {\n ctx.logger.info(`${toolName}: user error`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpInternalError) {\n ctx.logger.error(`${toolName}: internal error`, {\n message: error.message,\n cause: stringifyCause(error.cause),\n });\n return errorResult(`Internal error in ${toolName}.`);\n }\n const message = error instanceof Error ? error.message : String(error);\n ctx.logger.error(`${toolName}: unhandled error`, { message });\n return errorResult(`${toolName}: ${message}`);\n}\n\nfunction stringifyCause(cause: unknown): string | undefined {\n if (cause === undefined || cause === null) return undefined;\n if (cause instanceof Error) return cause.message;\n try {\n return JSON.stringify(cause);\n } catch {\n return String(cause);\n }\n}\n","/**\n * Centralized GraphQL operations for the GGNomad MCP module.\n *\n * GGNomad is the nomad travel + hospitality marketplace (future-products\n * ecosystem): bookable properties, activities, events, guided tours, and\n * trips, sold by providers, booked by guests. Backend subgraph:\n * ~/products/wspace/ggnomad/wspace-ggnomad-svc/ (Hive service name `ggnomad`).\n *\n * All operations run against the WORKSPACE gateway. Workspace scoping is\n * carried by the gateway headers (x-workspace-id / X-Workspace-Authorization)\n * issued by the auth module — GGNomad inputs do NOT carry a workspaceId.\n *\n * Pagination is uniformly the `GgnomadPaginationInput` shape ({ first, skip })\n * — NOT limit/offset. Favorites uses the separate `GgnomadFavoritesPaginationInput`.\n *\n * Root field names mirror the real backend EXACTLY: queries are `ggnomad*`\n * prefixed, mutations are `createGgnomad* / cancelGgnomadBooking /\n * toggleGgnomadFavorite` — called by their real names below.\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical kadaikodi module's operations file.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const PROVIDER_FIELDS = `\n id name type description contactEmail contactPhone website status\n rating reviewCount listingCount totalRevenue workspaceId createdAt updatedAt\n`;\n\nexport const PROPERTY_FIELDS = `\n id name type description address amenities bedrooms bathrooms maxGuests\n pricePerNight currency checkInTime checkOutTime images rating reviewCount\n status providerId workspaceId createdAt updatedAt\n provider { id name type status }\n`;\n\nexport const ACTIVITY_FIELDS = `\n id name category description duration difficulty price currency location\n images includes requirements maxParticipants rating reviewCount safetyInfo\n status providerId workspaceId createdAt updatedAt\n provider { id name type status }\n`;\n\nexport const EVENT_FIELDS = `\n id name category description venue startsAt endsAt price currency images\n performers rating reviewCount status providerId workspaceId createdAt updatedAt\n provider { id name type status }\n`;\n\nexport const TOUR_FIELDS = `\n id name type description duration difficulty price currency location\n highlights languages images maxGroupSize guideName rating reviewCount\n status providerId workspaceId createdAt updatedAt\n provider { id name type status }\n`;\n\nexport const TRIP_FIELDS = `\n id name transportMode origin destination departureAt arrivalAt isRoundTrip\n returnDepartureAt returnArrivalAt passengers class carrier price currency\n ecoFriendly status workspaceId createdAt updatedAt\n`;\n\nexport const BOOKING_FIELDS = `\n id bookingType referenceCode itemId itemName guestName guestEmail guestPhone\n guests checkIn checkOut eventDate totalPrice currency paymentMethod\n paymentStatus status specialRequests workspaceId createdAt updatedAt\n`;\n\nexport const ANALYTICS_FIELDS = `\n conversionRate monthlyTrends revenueByCategory topDestinations\n totalBookings totalRevenue totalUsers\n`;\n\nexport const OVERVIEW_FIELDS = `\n bookings listings monthlyRevenue users\n`;\n\n// ---------------------------------------------------------------------------\n// Providers\n// ---------------------------------------------------------------------------\n\nexport const GET_PROVIDER = `\n query GgnomadGetProvider($id: ID!) {\n ggnomadProvider(id: $id) {\n ${PROVIDER_FIELDS}\n }\n }\n`;\n\nexport const LIST_PROVIDERS = `\n query GgnomadListProviders($pagination: GgnomadPaginationInput) {\n ggnomadProviders(pagination: $pagination) {\n ${PROVIDER_FIELDS}\n }\n }\n`;\n\nexport const CREATE_PROVIDER = `\n mutation GgnomadCreateProvider($input: CreateGgnomadProviderInput!) {\n createGgnomadProvider(input: $input) {\n ${PROVIDER_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Properties\n// ---------------------------------------------------------------------------\n\nexport const GET_PROPERTY = `\n query GgnomadGetProperty($id: ID!) {\n ggnomadProperty(id: $id) {\n ${PROPERTY_FIELDS}\n }\n }\n`;\n\nexport const LIST_PROPERTIES = `\n query GgnomadListProperties($pagination: GgnomadPaginationInput) {\n ggnomadProperties(pagination: $pagination) {\n ${PROPERTY_FIELDS}\n }\n }\n`;\n\nexport const CREATE_PROPERTY = `\n mutation GgnomadCreateProperty($input: CreateGgnomadPropertyInput!) {\n createGgnomadProperty(input: $input) {\n ${PROPERTY_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Activities\n// ---------------------------------------------------------------------------\n\nexport const GET_ACTIVITY = `\n query GgnomadGetActivity($id: ID!) {\n ggnomadActivity(id: $id) {\n ${ACTIVITY_FIELDS}\n }\n }\n`;\n\nexport const LIST_ACTIVITIES = `\n query GgnomadListActivities($pagination: GgnomadPaginationInput) {\n ggnomadActivities(pagination: $pagination) {\n ${ACTIVITY_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Events\n// ---------------------------------------------------------------------------\n\nexport const GET_EVENT = `\n query GgnomadGetEvent($id: ID!) {\n ggnomadEvent(id: $id) {\n ${EVENT_FIELDS}\n }\n }\n`;\n\nexport const LIST_EVENTS = `\n query GgnomadListEvents($pagination: GgnomadPaginationInput) {\n ggnomadEvents(pagination: $pagination) {\n ${EVENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Tours\n// ---------------------------------------------------------------------------\n\nexport const GET_TOUR = `\n query GgnomadGetTour($id: ID!) {\n ggnomadTour(id: $id) {\n ${TOUR_FIELDS}\n }\n }\n`;\n\nexport const LIST_TOURS = `\n query GgnomadListTours($pagination: GgnomadPaginationInput) {\n ggnomadTours(pagination: $pagination) {\n ${TOUR_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Trips\n// ---------------------------------------------------------------------------\n\nexport const LIST_TRIPS = `\n query GgnomadListTrips($pagination: GgnomadPaginationInput) {\n ggnomadTrips(pagination: $pagination) {\n ${TRIP_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Bookings\n// ---------------------------------------------------------------------------\n\nexport const LIST_BOOKINGS = `\n query GgnomadListBookings($pagination: GgnomadPaginationInput) {\n ggnomadBookings(pagination: $pagination) {\n ${BOOKING_FIELDS}\n }\n }\n`;\n\nexport const CREATE_BOOKING = `\n mutation GgnomadCreateBooking($input: CreateGgnomadBookingInput!) {\n createGgnomadBooking(input: $input) {\n ${BOOKING_FIELDS}\n }\n }\n`;\n\nexport const CANCEL_BOOKING = `\n mutation GgnomadCancelBooking($id: ID!, $reason: String) {\n cancelGgnomadBooking(id: $id, reason: $reason) {\n ${BOOKING_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Favorites\n// ---------------------------------------------------------------------------\n\nexport const LIST_FAVORITES = `\n query GgnomadListFavorites($pagination: GgnomadFavoritesPaginationInput) {\n ggnomadFavorites(pagination: $pagination)\n }\n`;\n\nexport const TOGGLE_FAVORITE = `\n mutation GgnomadToggleFavorite($input: ToggleGgnomadFavoriteInput!) {\n toggleGgnomadFavorite(input: $input)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Analytics\n// ---------------------------------------------------------------------------\n\nexport const ANALYTICS = `\n query GgnomadAnalytics {\n ggnomadAnalytics {\n ${ANALYTICS_FIELDS}\n }\n }\n`;\n\nexport const OVERVIEW_STATS = `\n query GgnomadOverviewStats {\n ggnomadOverviewStats {\n ${OVERVIEW_FIELDS}\n }\n }\n`;\n","/**\n * GGNomad provider tools — hospitality provider directory.\n *\n * Surface (3): providers_{get,list,create}.\n * Queries (ggnomadProvider / ggnomadProviders) and the create mutation\n * (createGgnomadProvider) are called by their REAL backend names in operations.ts.\n * Pagination is the { first, skip } GgnomadPaginationInput shape.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerProviderTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'providers_get')),\n {\n title: 'Get Provider',\n description: 'Fetch a single GGNomad hospitality provider by ID.',\n inputSchema: { id: z.string().describe('Provider ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadProvider: Record<string, unknown> | null;\n }>(ops.GET_PROVIDER, { id });\n if (!data.ggnomadProvider) return errorResult(`Provider ${id} not found`);\n return jsonResult(data.ggnomadProvider);\n } catch (error) {\n ctx.logger.error('ggnomad providers_get failed', { error: String(error) });\n return errorResult(\n `Failed to get provider: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'providers_list')),\n {\n title: 'List Providers',\n description: 'List hospitality providers in the bound workspace, with first/skip pagination.',\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 20)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadProviders: Array<Record<string, unknown>>;\n }>(ops.LIST_PROVIDERS, { pagination: { first: first ?? 20, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadProviders);\n } catch (error) {\n ctx.logger.error('ggnomad providers_list failed', { error: String(error) });\n return errorResult(\n `Failed to list providers: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'providers_create')),\n {\n title: 'Create Provider',\n description:\n 'Onboard a new hospitality provider. `name` and `type` are required (type is a free-form provider class, e.g. \"hotel\", \"tour_operator\", \"transport\").',\n inputSchema: {\n name: z.string().min(1).describe('Provider display name'),\n type: z\n .string()\n .min(1)\n .describe('Provider type, e.g. \"hotel\", \"tour_operator\", \"transport\"'),\n description: z.string().optional().describe('Provider description'),\n contactEmail: z.string().optional().describe('Contact email'),\n contactPhone: z.string().optional().describe('Contact phone'),\n website: z.string().optional().describe('Provider website URL'),\n },\n },\n async ({ name, type, description, contactEmail, contactPhone, website }) => {\n try {\n const input: Record<string, unknown> = { name, type };\n if (description !== undefined) input.description = description;\n if (contactEmail !== undefined) input.contactEmail = contactEmail;\n if (contactPhone !== undefined) input.contactPhone = contactPhone;\n if (website !== undefined) input.website = website;\n\n const data = await ctx.gql.workspace.request<{\n createGgnomadProvider: Record<string, unknown>;\n }>(ops.CREATE_PROVIDER, { input });\n return jsonResult(data.createGgnomadProvider);\n } catch (error) {\n ctx.logger.error('ggnomad providers_create failed', { error: String(error) });\n return errorResult(\n `Failed to create provider: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Shared zod schemas for the GGNomad tool surface.\n *\n * Every backend enum is mirrored as a tight zod enum so Claude Desktop\n * grounds tool calls against the exact allowed values. JSON scalar inputs\n * (address, location, venue, origin, destination) are modelled as permissive\n * object records — the backend accepts arbitrary JSON, but a record shape\n * gives the LLM a typed hint.\n */\n\nimport { z } from 'zod';\n\nexport const GgnomadBookingStatusEnum = z\n .enum(['CANCELLED', 'CHECKED_IN', 'COMPLETED', 'CONFIRMED', 'NO_SHOW', 'PENDING', 'REFUNDED'])\n .describe('Lifecycle status of a booking');\n\nexport const GgnomadBookingTypeEnum = z\n .enum(['ACTIVITY', 'EVENT', 'PROPERTY', 'TOUR', 'TRIP'])\n .describe('The kind of listing a booking or favorite targets');\n\nexport const GgnomadListingStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'DRAFT', 'PAUSED', 'PENDING_REVIEW'])\n .describe('Lifecycle/moderation status of a listing (property, activity, event, tour)');\n\n/** Permissive JSON-object schema for `JSON` scalar inputs. */\nexport const JsonObject = z.record(z.string(), z.unknown());\n","/**\n * GGNomad property tools — bookable stay listings.\n *\n * Surface (3): properties_{get,list,create}.\n * Backend: ggnomadProperty / ggnomadProperties / createGgnomadProperty.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { JsonObject } from './shared.js';\n\nexport function registerPropertyTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'properties_get')),\n {\n title: 'Get Property',\n description: 'Fetch a single bookable property (stay listing) by ID.',\n inputSchema: { id: z.string().describe('Property ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadProperty: Record<string, unknown> | null;\n }>(ops.GET_PROPERTY, { id });\n if (!data.ggnomadProperty) return errorResult(`Property ${id} not found`);\n return jsonResult(data.ggnomadProperty);\n } catch (error) {\n ctx.logger.error('ggnomad properties_get failed', { error: String(error) });\n return errorResult(\n `Failed to get property: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'properties_list')),\n {\n title: 'List Properties',\n description: 'List bookable properties in the bound workspace, with first/skip pagination.',\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 20)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadProperties: Array<Record<string, unknown>>;\n }>(ops.LIST_PROPERTIES, { pagination: { first: first ?? 20, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadProperties);\n } catch (error) {\n ctx.logger.error('ggnomad properties_list failed', { error: String(error) });\n return errorResult(\n `Failed to list properties: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'properties_create')),\n {\n title: 'Create Property',\n description:\n 'List a new bookable property. `address` is required JSON; `amenities`/`images` are required arrays; `type` is a free-form class (e.g. \"apartment\", \"villa\", \"hostel\").',\n inputSchema: {\n name: z.string().min(1).describe('Property display name'),\n type: z.string().min(1).describe('Property type, e.g. \"apartment\", \"villa\", \"hostel\"'),\n address: JsonObject.describe('Address JSON ({ line1, city, country, lat, lng, ... })'),\n amenities: z.array(z.string()).describe('Amenity tags (e.g. wifi, kitchen, parking)'),\n images: z.array(z.string()).describe('Image URLs'),\n maxGuests: z.number().int().describe('Maximum guest capacity'),\n pricePerNight: z.number().describe('Nightly price'),\n bedrooms: z.number().int().optional().describe('Number of bedrooms'),\n bathrooms: z.number().int().optional().describe('Number of bathrooms'),\n checkInTime: z.string().optional().describe('Check-in time, e.g. \"15:00\"'),\n checkOutTime: z.string().optional().describe('Check-out time, e.g. \"11:00\"'),\n currency: z.string().optional().describe('ISO currency code (default service currency)'),\n description: z.string().optional().describe('Property description'),\n providerId: z.string().optional().describe('Owning provider ID'),\n },\n },\n async ({\n name,\n type,\n address,\n amenities,\n images,\n maxGuests,\n pricePerNight,\n bedrooms,\n bathrooms,\n checkInTime,\n checkOutTime,\n currency,\n description,\n providerId,\n }) => {\n try {\n const input: Record<string, unknown> = {\n name,\n type,\n address,\n amenities,\n images,\n maxGuests,\n pricePerNight,\n };\n if (bedrooms !== undefined) input.bedrooms = bedrooms;\n if (bathrooms !== undefined) input.bathrooms = bathrooms;\n if (checkInTime !== undefined) input.checkInTime = checkInTime;\n if (checkOutTime !== undefined) input.checkOutTime = checkOutTime;\n if (currency !== undefined) input.currency = currency;\n if (description !== undefined) input.description = description;\n if (providerId !== undefined) input.providerId = providerId;\n\n const data = await ctx.gql.workspace.request<{\n createGgnomadProperty: Record<string, unknown>;\n }>(ops.CREATE_PROPERTY, { input });\n return jsonResult(data.createGgnomadProperty);\n } catch (error) {\n ctx.logger.error('ggnomad properties_create failed', { error: String(error) });\n return errorResult(\n `Failed to create property: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * GGNomad activity tools — bookable experiences/activities.\n *\n * Surface (2): activities_{get,list}. Read-only — the backend exposes no\n * activity create/update mutation. Backend: ggnomadActivity / ggnomadActivities.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerActivityTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'activities_get')),\n {\n title: 'Get Activity',\n description: 'Fetch a single bookable activity/experience by ID.',\n inputSchema: { id: z.string().describe('Activity ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadActivity: Record<string, unknown> | null;\n }>(ops.GET_ACTIVITY, { id });\n if (!data.ggnomadActivity) return errorResult(`Activity ${id} not found`);\n return jsonResult(data.ggnomadActivity);\n } catch (error) {\n ctx.logger.error('ggnomad activities_get failed', { error: String(error) });\n return errorResult(\n `Failed to get activity: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'activities_list')),\n {\n title: 'List Activities',\n description:\n 'List bookable activities/experiences in the bound workspace (first/skip pagination).',\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 20)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadActivities: Array<Record<string, unknown>>;\n }>(ops.LIST_ACTIVITIES, { pagination: { first: first ?? 20, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadActivities);\n } catch (error) {\n ctx.logger.error('ggnomad activities_list failed', { error: String(error) });\n return errorResult(\n `Failed to list activities: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * GGNomad event tools — ticketed events.\n *\n * Surface (2): events_{get,list}. Read-only — the backend exposes no event\n * create/update mutation. Backend: ggnomadEvent / ggnomadEvents.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerEventTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_get')),\n {\n title: 'Get Event',\n description: 'Fetch a single ticketed event by ID.',\n inputSchema: { id: z.string().describe('Event ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadEvent: Record<string, unknown> | null;\n }>(ops.GET_EVENT, { id });\n if (!data.ggnomadEvent) return errorResult(`Event ${id} not found`);\n return jsonResult(data.ggnomadEvent);\n } catch (error) {\n ctx.logger.error('ggnomad events_get failed', { error: String(error) });\n return errorResult(\n `Failed to get event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_list')),\n {\n title: 'List Events',\n description: 'List ticketed events in the bound workspace (first/skip pagination).',\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 20)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadEvents: Array<Record<string, unknown>>;\n }>(ops.LIST_EVENTS, { pagination: { first: first ?? 20, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadEvents);\n } catch (error) {\n ctx.logger.error('ggnomad events_list failed', { error: String(error) });\n return errorResult(\n `Failed to list events: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * GGNomad tour tools — guided tours.\n *\n * Surface (2): experiences_{get,list}. Read-only — the backend exposes no tour\n * create/update mutation. Backend: ggnomadTour / ggnomadTours.\n *\n * Note: the MCP tool prefix is `experiences_*` (not `tours_*`) to avoid colliding\n * with the generic `tours` module's tool names when both are mounted in a shell.\n * The GraphQL operations/types are unchanged (still ggnomadTour / ggnomadTours).\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerTourTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'experiences_get')),\n {\n title: 'Get Tour',\n description: 'Fetch a single guided tour by ID.',\n inputSchema: { id: z.string().describe('Tour ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadTour: Record<string, unknown> | null;\n }>(ops.GET_TOUR, { id });\n if (!data.ggnomadTour) return errorResult(`Tour ${id} not found`);\n return jsonResult(data.ggnomadTour);\n } catch (error) {\n ctx.logger.error('ggnomad experiences_get failed', { error: String(error) });\n return errorResult(\n `Failed to get tour: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'experiences_list')),\n {\n title: 'List Tours',\n description: 'List guided tours in the bound workspace (first/skip pagination).',\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 20)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadTours: Array<Record<string, unknown>>;\n }>(ops.LIST_TOURS, { pagination: { first: first ?? 20, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadTours);\n } catch (error) {\n ctx.logger.error('ggnomad experiences_list failed', { error: String(error) });\n return errorResult(\n `Failed to list tours: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * GGNomad trip tools — transport/travel legs.\n *\n * Surface (1): trips_list. Read-only — the backend exposes neither a singular\n * trip query nor a trip create/update mutation. Backend: ggnomadTrips.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerTripTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'trips_list')),\n {\n title: 'List Trips',\n description: 'List transport/travel trips in the bound workspace (first/skip pagination).',\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 20)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadTrips: Array<Record<string, unknown>>;\n }>(ops.LIST_TRIPS, { pagination: { first: first ?? 20, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadTrips);\n } catch (error) {\n ctx.logger.error('ggnomad trips_list failed', { error: String(error) });\n return errorResult(\n `Failed to list trips: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * GGNomad booking tools — guest booking lifecycle.\n *\n * Surface (3): bookings_{list,create,cancel}.\n * Backend: ggnomadBookings (list only — no singular query),\n * createGgnomadBooking, cancelGgnomadBooking.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { GgnomadBookingTypeEnum } from './shared.js';\n\nexport function registerBookingTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'bookings_list')),\n {\n title: 'List Bookings',\n description: 'List bookings in the bound workspace (first/skip pagination).',\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 20)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadBookings: Array<Record<string, unknown>>;\n }>(ops.LIST_BOOKINGS, { pagination: { first: first ?? 20, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadBookings);\n } catch (error) {\n ctx.logger.error('ggnomad bookings_list failed', { error: String(error) });\n return errorResult(\n `Failed to list bookings: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'bookings_create')),\n {\n title: 'Create Booking',\n description:\n 'Create a guest booking against a listing. `itemId`/`itemName` snapshot the booked listing; `bookingType` selects the listing kind; supply `checkIn`/`checkOut` for stays, `eventDate` for events/activities.',\n inputSchema: {\n bookingType: GgnomadBookingTypeEnum.describe('Kind of listing being booked'),\n itemId: z.string().min(1).describe('ID of the booked listing'),\n itemName: z.string().min(1).describe('Snapshot name of the booked listing'),\n guestName: z.string().min(1).describe('Lead guest name'),\n guests: z.number().int().describe('Number of guests'),\n totalPrice: z.number().describe('Total booking price'),\n guestEmail: z.string().optional().describe('Guest email'),\n guestPhone: z.string().optional().describe('Guest phone'),\n checkIn: z.string().optional().describe('Check-in datetime (ISO 8601) — stays'),\n checkOut: z.string().optional().describe('Check-out datetime (ISO 8601) — stays'),\n eventDate: z\n .string()\n .optional()\n .describe('Event/activity datetime (ISO 8601) — events, activities, tours'),\n currency: z.string().optional().describe('ISO currency code (default service currency)'),\n paymentMethod: z.string().optional().describe('Payment method, e.g. \"card\", \"upi\"'),\n specialRequests: z.string().optional().describe('Free-text special requests'),\n },\n },\n async ({\n bookingType,\n itemId,\n itemName,\n guestName,\n guests,\n totalPrice,\n guestEmail,\n guestPhone,\n checkIn,\n checkOut,\n eventDate,\n currency,\n paymentMethod,\n specialRequests,\n }) => {\n try {\n const input: Record<string, unknown> = {\n bookingType,\n itemId,\n itemName,\n guestName,\n guests,\n totalPrice,\n };\n if (guestEmail !== undefined) input.guestEmail = guestEmail;\n if (guestPhone !== undefined) input.guestPhone = guestPhone;\n if (checkIn !== undefined) input.checkIn = checkIn;\n if (checkOut !== undefined) input.checkOut = checkOut;\n if (eventDate !== undefined) input.eventDate = eventDate;\n if (currency !== undefined) input.currency = currency;\n if (paymentMethod !== undefined) input.paymentMethod = paymentMethod;\n if (specialRequests !== undefined) input.specialRequests = specialRequests;\n\n const data = await ctx.gql.workspace.request<{\n createGgnomadBooking: Record<string, unknown>;\n }>(ops.CREATE_BOOKING, { input });\n return jsonResult(data.createGgnomadBooking);\n } catch (error) {\n ctx.logger.error('ggnomad bookings_create failed', { error: String(error) });\n return errorResult(\n `Failed to create booking: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'bookings_cancel')),\n {\n title: 'Cancel Booking',\n description: 'Cancel a booking by ID, with an optional cancellation reason.',\n inputSchema: {\n id: z.string().describe('Booking ID'),\n reason: z.string().optional().describe('Cancellation reason'),\n },\n },\n async ({ id, reason }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n cancelGgnomadBooking: Record<string, unknown>;\n }>(ops.CANCEL_BOOKING, { id, reason });\n return jsonResult(data.cancelGgnomadBooking);\n } catch (error) {\n ctx.logger.error('ggnomad bookings_cancel failed', { error: String(error) });\n return errorResult(\n `Failed to cancel booking: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * GGNomad favorites tools — guest wishlists.\n *\n * Surface (2): favorites_{list,toggle}.\n * Backend: ggnomadFavorites (returns [JSON!]!), toggleGgnomadFavorite\n * (returns Boolean! — true when now favorited, false when un-favorited).\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { GgnomadBookingTypeEnum } from './shared.js';\n\nexport function registerFavoriteTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'favorites_list')),\n {\n title: 'List Favorites',\n description:\n \"List the calling user's favorited listings (first/skip pagination, default page 50).\",\n inputSchema: {\n first: z.number().int().optional().describe('Page size (default 50)'),\n skip: z.number().int().optional().describe('Records to skip (default 0)'),\n },\n },\n async ({ first, skip }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadFavorites: Array<Record<string, unknown>>;\n }>(ops.LIST_FAVORITES, { pagination: { first: first ?? 50, skip: skip ?? 0 } });\n return jsonResult(data.ggnomadFavorites);\n } catch (error) {\n ctx.logger.error('ggnomad favorites_list failed', { error: String(error) });\n return errorResult(\n `Failed to list favorites: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'favorites_toggle')),\n {\n title: 'Toggle Favorite',\n description:\n \"Toggle a listing in the calling user's favorites. Returns true if the listing is now favorited, false if it was removed.\",\n inputSchema: {\n targetId: z.string().min(1).describe('ID of the listing to favorite/un-favorite'),\n targetType: GgnomadBookingTypeEnum.describe('Kind of listing being targeted'),\n },\n },\n async ({ targetId, targetType }) => {\n try {\n const data = await ctx.gql.workspace.request<{ toggleGgnomadFavorite: boolean }>(\n ops.TOGGLE_FAVORITE,\n { input: { targetId, targetType } },\n );\n return jsonResult({ favorited: data.toggleGgnomadFavorite });\n } catch (error) {\n ctx.logger.error('ggnomad favorites_toggle failed', { error: String(error) });\n return errorResult(\n `Failed to toggle favorite: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * GGNomad analytics tools.\n *\n * Surface (2): analytics_metrics, analytics_overview.\n * `analytics_metrics` maps to ggnomadAnalytics (detailed marketplace metrics);\n * `analytics_overview` maps to ggnomadOverviewStats (headline KPIs). Both are\n * @rbac wspace-scoped. The GGNomad subgraph exposes no public health probe.\n */\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerAnalyticsTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'analytics_metrics')),\n {\n title: 'GGNomad Analytics',\n description:\n 'Marketplace-wide analytics: conversion rate, monthly trends, revenue by category, top destinations, and total users/bookings/revenue.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadAnalytics: Record<string, unknown>;\n }>(ops.ANALYTICS, {});\n return jsonResult(data.ggnomadAnalytics);\n } catch (error) {\n ctx.logger.error('ggnomad analytics_metrics failed', { error: String(error) });\n return errorResult(\n `Failed to get analytics: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'analytics_overview')),\n {\n title: 'GGNomad Overview Stats',\n description:\n 'Headline marketplace KPIs: active listings, total bookings, total users, and monthly revenue.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{\n ggnomadOverviewStats: Record<string, unknown>;\n }>(ops.OVERVIEW_STATS, {});\n return jsonResult(data.ggnomadOverviewStats);\n } catch (error) {\n ctx.logger.error('ggnomad analytics_overview failed', { error: String(error) });\n return errorResult(\n `Failed to get overview stats: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpResourceUri, type McpContext } from '../../core/index.js';\nimport { OVERVIEW_STATS, ANALYTICS, LIST_PROPERTIES } from './operations.js';\n\n/**\n * Read-only GGNomad MCP resources. URIs are product-prefixed via\n * mcpResourceUri so they don't collide when multiple MCP servers run side by\n * side. Each is tracked at function entry so the shell manifest reflects what\n * was registered even though registration is imperative.\n */\nexport function registerGgnomadResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const overviewUri = track(mcpResourceUri(ctx.productName, 'overview'));\n const analyticsUri = track(mcpResourceUri(ctx.productName, 'analytics'));\n const propertiesUri = track(mcpResourceUri(ctx.productName, 'properties'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'ggnomad-schema',\n schemaUri,\n {\n title: 'GGNomad Domain Schema',\n description:\n 'Overview of the GGNomad travel + hospitality marketplace domain — entities, enums, and the per-entity tool surface.',\n mimeType: 'text/plain',\n },\n async () => {\n ctx.logger.debug(`Resource ${schemaUri} requested`);\n const schema = `# GGNomad Domain (Overview)\n\nNomad travel + hospitality marketplace: bookable stays, activities, events,\nguided tours, and trips, sold by providers and booked by guests.\n\n## Entities\n- GgnomadProvider — a hospitality business (hotel, tour operator, transport)\n- GgnomadProperty — a bookable stay listing\n- GgnomadActivity — a bookable experience/activity\n- GgnomadEvent — a ticketed event\n- GgnomadTour — a guided tour\n- GgnomadTrip — a transport/travel leg\n- GgnomadBooking — a guest booking against any listing\n\n## Enums\n- GgnomadBookingType: ACTIVITY, EVENT, PROPERTY, TOUR, TRIP\n- GgnomadBookingStatus: PENDING, CONFIRMED, CHECKED_IN, COMPLETED, CANCELLED, NO_SHOW, REFUNDED\n- GgnomadListingStatus: DRAFT, PENDING_REVIEW, ACTIVE, PAUSED, ARCHIVED\n\n## Tool groups\nproviders, properties, activities, events, tours, trips, bookings, favorites, analytics.\nAll run against the WORKSPACE gateway (workspace-scoped). Pagination is { first, skip }.\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://overview — headline KPIs\n server.registerResource(\n 'ggnomad-overview',\n overviewUri,\n {\n title: 'GGNomad Overview Stats',\n description: 'Live headline marketplace KPIs (listings, bookings, users, monthly revenue).',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${overviewUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ ggnomadOverviewStats: unknown }>(\n OVERVIEW_STATS,\n {},\n );\n return {\n contents: [\n {\n uri: overviewUri,\n text: JSON.stringify(data.ggnomadOverviewStats, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: overviewUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://analytics — marketplace analytics\n server.registerResource(\n 'ggnomad-analytics',\n analyticsUri,\n {\n title: 'GGNomad Analytics',\n description:\n 'Marketplace-wide analytics: conversion rate, monthly trends, revenue by category, top destinations, totals.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${analyticsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ ggnomadAnalytics: unknown }>(ANALYTICS, {});\n return {\n contents: [\n {\n uri: analyticsUri,\n text: JSON.stringify(data.ggnomadAnalytics, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: analyticsUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://properties — property directory\n server.registerResource(\n 'ggnomad-properties',\n propertiesUri,\n {\n title: 'GGNomad Property Directory',\n description: 'The first 50 bookable properties in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${propertiesUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ ggnomadProperties: unknown }>(\n LIST_PROPERTIES,\n { pagination: { first: 50, skip: 0 } },\n );\n return {\n contents: [\n {\n uri: propertiesUri,\n text: JSON.stringify(data.ggnomadProperties, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: propertiesUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n}\n","import { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpPromptName, type McpContext } from '../../core/index.js';\n\n/**\n * GGNomad MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerGgnomadPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const onboardingName = track(mcpPromptName(p, 'provider-onboarding'));\n const opsName = track(mcpPromptName(p, 'marketplace-ops'));\n\n // <product>-provider-onboarding — stand up a provider + inventory\n server.registerPrompt(\n onboardingName,\n {\n title: 'Provider Onboarding',\n description:\n 'Guide for onboarding a new GGNomad hospitality provider end to end: create the provider and list its first bookable property.',\n argsSchema: {\n name: z.string().optional().describe('Provider/business name'),\n type: z.string().optional().describe('Provider type, e.g. \"hotel\", \"tour_operator\"'),\n },\n },\n ({ name, type }) => {\n ctx.logger.debug(`Prompt ${onboardingName} called`, { name, type });\n const nameNote = name\n ? `Use the business name \"${name}\".`\n : 'Ask the user for the business name.';\n const typeNote = type\n ? `Use provider type \"${type}\".`\n : 'Help the user pick a provider type.';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me onboard a new GGNomad hospitality provider.\n\n1. **Create Provider**: Use ${p}_providers_create. ${nameNote} ${typeNote} Optionally add contactEmail, contactPhone, and website.\n2. **List a Property**: Use ${p}_properties_create for the first stay — set the providerId from step 1, plus address JSON, amenities, images, maxGuests, and pricePerNight.\n3. **Verify**: Use ${p}_properties_list to confirm the property appears, and ${p}_providers_get to confirm the provider's listingCount.\n\nShow results at each step and confirm before listing more inventory.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-marketplace-ops — daily operations\n server.registerPrompt(\n opsName,\n {\n title: 'Marketplace Operations',\n description:\n 'Daily operations workflow: review KPIs, triage the booking queue, manage cancellations, and scan inventory.',\n argsSchema: {\n providerId: z.string().optional().describe('Provider ID to focus on'),\n },\n },\n ({ providerId }) => {\n ctx.logger.debug(`Prompt ${opsName} called`, { providerId });\n const providerNote = providerId\n ? `Focus on provider \"${providerId}\".`\n : `First list providers with ${p}_providers_list and pick one.`;\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run daily GGNomad marketplace operations. ${providerNote}\n\n1. **KPIs**: Use ${p}_analytics_overview for headline numbers and ${p}_analytics_metrics for trends, revenue by category, and top destinations.\n2. **Booking Queue**: Use ${p}_bookings_list to find PENDING/CONFIRMED bookings that need attention.\n3. **Cancellations**: For any booking that must be cancelled, use ${p}_bookings_cancel with a clear reason.\n4. **Inventory**: Scan ${p}_properties_list, ${p}_activities_list, ${p}_events_list, ${p}_experiences_list, and ${p}_trips_list for listings needing updates.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * GGNomad module — domain module for the future-products ecosystem program.\n *\n * Covers all 7 @key entities of wspace-ggnomad-svc grouped into per-entity\n * sub-APIs: providers, properties, activities, events, tours, trips, bookings,\n * plus favorites and analytics. Mirrors the kadaikodi module's structure\n * (tools/<entity>.ts + resources.ts + prompts.ts) and typing discipline.\n *\n * Backend: ~/products/wspace/ggnomad/wspace-ggnomad-svc/\n * (Hive service name `ggnomad`). All operations run against the WORKSPACE\n * gateway. The subgraph exposes no @public health probe.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerProviderTools } from './tools/providers.js';\nimport { registerPropertyTools } from './tools/properties.js';\nimport { registerActivityTools } from './tools/activities.js';\nimport { registerEventTools } from './tools/events.js';\nimport { registerTourTools } from './tools/tours.js';\nimport { registerTripTools } from './tools/trips.js';\nimport { registerBookingTools } from './tools/bookings.js';\nimport { registerFavoriteTools } from './tools/favorites.js';\nimport { registerAnalyticsTools } from './tools/analytics.js';\nimport { registerGgnomadResources } from './resources.js';\nimport { registerGgnomadPrompts } from './prompts.js';\n\nconst ggnomadModule: McpModule = {\n id: 'ggnomad',\n version: '0.0.1',\n displayName: 'GGNomad',\n dependsOn: ['auth'],\n capabilities: { tools: {}, resources: {}, prompts: {} },\n\n register(server: McpServer, ctx: McpContext): ModuleRegistration {\n const tools: string[] = [];\n const resources: string[] = [];\n const prompts: string[] = [];\n\n const trackTool = (n: string): string => {\n tools.push(n);\n return n;\n };\n const trackResource = (uri: string): string => {\n resources.push(uri);\n return uri;\n };\n const trackPrompt = (n: string): string => {\n prompts.push(n);\n return n;\n };\n\n registerProviderTools(server, ctx, trackTool);\n registerPropertyTools(server, ctx, trackTool);\n registerActivityTools(server, ctx, trackTool);\n registerEventTools(server, ctx, trackTool);\n registerTourTools(server, ctx, trackTool);\n registerTripTools(server, ctx, trackTool);\n registerBookingTools(server, ctx, trackTool);\n registerFavoriteTools(server, ctx, trackTool);\n registerAnalyticsTools(server, ctx, trackTool);\n\n registerGgnomadResources(server, ctx, trackResource);\n registerGgnomadPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default ggnomadModule;\n"]}
@@ -1,4 +1,4 @@
1
- import { mcpToolName, errorResult, jsonResult, mcpResourceUri, mcpPromptName } from '../../chunk-H2OYWLOA.js';
1
+ import { mcpToolName, errorResult, jsonResult, mcpResourceUri, mcpPromptName } from '../../chunk-YOSQUY3M.js';
2
2
  import { z } from 'zod';
3
3
 
4
4
  // src/modules/ggnomad/operations.ts
@@ -18,20 +18,6 @@ var McpInternalError = class extends Error {
18
18
  }
19
19
  };
20
20
 
21
- // src/core/result.ts
22
- function jsonResult(data, structured) {
23
- const result = {
24
- content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
25
- };
26
- return result;
27
- }
28
- function errorResult(message, hint) {
29
- const text = hint ? `${message}
30
-
31
- Hint: ${hint}` : message;
32
- return { content: [{ type: "text", text }], isError: true };
33
- }
34
-
35
21
  // src/core/tool-name.ts
36
22
  var MAX_TOOL_NAME_LENGTH = 63;
37
23
  function assertSafeName(name, kind) {
@@ -62,6 +48,20 @@ function mcpPromptName(productName, ...parts) {
62
48
  return [productName, ...parts].filter(Boolean).join("-");
63
49
  }
64
50
 
51
+ // src/core/result.ts
52
+ function jsonResult(data, structured) {
53
+ const result = {
54
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
55
+ };
56
+ return result;
57
+ }
58
+ function errorResult(message, hint) {
59
+ const text = hint ? `${message}
60
+
61
+ Hint: ${hint}` : message;
62
+ return { content: [{ type: "text", text }], isError: true };
63
+ }
64
+
65
65
  // src/modules/govcitizenhub/operations.ts
66
66
  var AGENCY_FIELDS = `
67
67
  id code name description jurisdiction contactEmail contactPhone