@burdenoff/mcp-libs 2026.627.5 → 2026.627.6
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.
- package/dist/modules/comradecircle/index.cjs +8 -8
- package/dist/modules/comradecircle/index.cjs.map +1 -1
- package/dist/modules/comradecircle/index.js +8 -8
- package/dist/modules/comradecircle/index.js.map +1 -1
- package/dist/modules/crewfoundry/index.cjs +7 -7
- package/dist/modules/crewfoundry/index.cjs.map +1 -1
- package/dist/modules/crewfoundry/index.js +7 -7
- package/dist/modules/crewfoundry/index.js.map +1 -1
- package/dist/modules/ggnomad/index.cjs +5 -5
- package/dist/modules/ggnomad/index.cjs.map +1 -1
- package/dist/modules/ggnomad/index.js +5 -5
- package/dist/modules/ggnomad/index.js.map +1 -1
- package/dist/modules/movethewheels/index.cjs +10 -10
- package/dist/modules/movethewheels/index.cjs.map +1 -1
- package/dist/modules/movethewheels/index.js +10 -10
- package/dist/modules/movethewheels/index.js.map +1 -1
- package/dist/modules/timecampus/index.cjs +18 -18
- package/dist/modules/timecampus/index.cjs.map +1 -1
- package/dist/modules/timecampus/index.js +18 -18
- package/dist/modules/timecampus/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -525,7 +525,7 @@ function registerEventTools(server, ctx, track) {
|
|
|
525
525
|
}
|
|
526
526
|
function registerTourTools(server, ctx, track) {
|
|
527
527
|
server.registerTool(
|
|
528
|
-
track(mcpToolName(ctx.productName, "
|
|
528
|
+
track(mcpToolName(ctx.productName, "experiences_get")),
|
|
529
529
|
{
|
|
530
530
|
title: "Get Tour",
|
|
531
531
|
description: "Fetch a single guided tour by ID.",
|
|
@@ -537,7 +537,7 @@ function registerTourTools(server, ctx, track) {
|
|
|
537
537
|
if (!data.ggnomadTour) return errorResult(`Tour ${id} not found`);
|
|
538
538
|
return jsonResult(data.ggnomadTour);
|
|
539
539
|
} catch (error) {
|
|
540
|
-
ctx.logger.error("ggnomad
|
|
540
|
+
ctx.logger.error("ggnomad experiences_get failed", { error: String(error) });
|
|
541
541
|
return errorResult(
|
|
542
542
|
`Failed to get tour: ${error instanceof Error ? error.message : String(error)}`
|
|
543
543
|
);
|
|
@@ -545,7 +545,7 @@ function registerTourTools(server, ctx, track) {
|
|
|
545
545
|
}
|
|
546
546
|
);
|
|
547
547
|
server.registerTool(
|
|
548
|
-
track(mcpToolName(ctx.productName, "
|
|
548
|
+
track(mcpToolName(ctx.productName, "experiences_list")),
|
|
549
549
|
{
|
|
550
550
|
title: "List Tours",
|
|
551
551
|
description: "List guided tours in the bound workspace (first/skip pagination).",
|
|
@@ -559,7 +559,7 @@ function registerTourTools(server, ctx, track) {
|
|
|
559
559
|
const data = await ctx.gql.workspace.request(LIST_TOURS, { pagination: { first: first ?? 20, skip: skip ?? 0 } });
|
|
560
560
|
return jsonResult(data.ggnomadTours);
|
|
561
561
|
} catch (error) {
|
|
562
|
-
ctx.logger.error("ggnomad
|
|
562
|
+
ctx.logger.error("ggnomad experiences_list failed", { error: String(error) });
|
|
563
563
|
return errorResult(
|
|
564
564
|
`Failed to list tours: ${error instanceof Error ? error.message : String(error)}`
|
|
565
565
|
);
|
|
@@ -1013,7 +1013,7 @@ Show results at each step and confirm before listing more inventory.`
|
|
|
1013
1013
|
1. **KPIs**: Use ${p}_analytics_overview for headline numbers and ${p}_analytics_metrics for trends, revenue by category, and top destinations.
|
|
1014
1014
|
2. **Booking Queue**: Use ${p}_bookings_list to find PENDING/CONFIRMED bookings that need attention.
|
|
1015
1015
|
3. **Cancellations**: For any booking that must be cancelled, use ${p}_bookings_cancel with a clear reason.
|
|
1016
|
-
4. **Inventory**: Scan ${p}_properties_list, ${p}_activities_list, ${p}_events_list, ${p}
|
|
1016
|
+
4. **Inventory**: Scan ${p}_properties_list, ${p}_activities_list, ${p}_events_list, ${p}_experiences_list, and ${p}_trips_list for listings needing updates.
|
|
1017
1017
|
|
|
1018
1018
|
Summarize what needs attention after each step.`
|
|
1019
1019
|
}
|
|
@@ -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): tours_{get,list}. Read-only — the backend exposes no tour\n * create/update mutation. Backend: 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, 'tours_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 tours_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, 'tours_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 tours_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}_tours_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/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"]}
|
|
@@ -464,7 +464,7 @@ function registerEventTools(server, ctx, track) {
|
|
|
464
464
|
}
|
|
465
465
|
function registerTourTools(server, ctx, track) {
|
|
466
466
|
server.registerTool(
|
|
467
|
-
track(mcpToolName(ctx.productName, "
|
|
467
|
+
track(mcpToolName(ctx.productName, "experiences_get")),
|
|
468
468
|
{
|
|
469
469
|
title: "Get Tour",
|
|
470
470
|
description: "Fetch a single guided tour by ID.",
|
|
@@ -476,7 +476,7 @@ function registerTourTools(server, ctx, track) {
|
|
|
476
476
|
if (!data.ggnomadTour) return errorResult(`Tour ${id} not found`);
|
|
477
477
|
return jsonResult(data.ggnomadTour);
|
|
478
478
|
} catch (error) {
|
|
479
|
-
ctx.logger.error("ggnomad
|
|
479
|
+
ctx.logger.error("ggnomad experiences_get failed", { error: String(error) });
|
|
480
480
|
return errorResult(
|
|
481
481
|
`Failed to get tour: ${error instanceof Error ? error.message : String(error)}`
|
|
482
482
|
);
|
|
@@ -484,7 +484,7 @@ function registerTourTools(server, ctx, track) {
|
|
|
484
484
|
}
|
|
485
485
|
);
|
|
486
486
|
server.registerTool(
|
|
487
|
-
track(mcpToolName(ctx.productName, "
|
|
487
|
+
track(mcpToolName(ctx.productName, "experiences_list")),
|
|
488
488
|
{
|
|
489
489
|
title: "List Tours",
|
|
490
490
|
description: "List guided tours in the bound workspace (first/skip pagination).",
|
|
@@ -498,7 +498,7 @@ function registerTourTools(server, ctx, track) {
|
|
|
498
498
|
const data = await ctx.gql.workspace.request(LIST_TOURS, { pagination: { first: first ?? 20, skip: skip ?? 0 } });
|
|
499
499
|
return jsonResult(data.ggnomadTours);
|
|
500
500
|
} catch (error) {
|
|
501
|
-
ctx.logger.error("ggnomad
|
|
501
|
+
ctx.logger.error("ggnomad experiences_list failed", { error: String(error) });
|
|
502
502
|
return errorResult(
|
|
503
503
|
`Failed to list tours: ${error instanceof Error ? error.message : String(error)}`
|
|
504
504
|
);
|
|
@@ -952,7 +952,7 @@ Show results at each step and confirm before listing more inventory.`
|
|
|
952
952
|
1. **KPIs**: Use ${p}_analytics_overview for headline numbers and ${p}_analytics_metrics for trends, revenue by category, and top destinations.
|
|
953
953
|
2. **Booking Queue**: Use ${p}_bookings_list to find PENDING/CONFIRMED bookings that need attention.
|
|
954
954
|
3. **Cancellations**: For any booking that must be cancelled, use ${p}_bookings_cancel with a clear reason.
|
|
955
|
-
4. **Inventory**: Scan ${p}_properties_list, ${p}_activities_list, ${p}_events_list, ${p}
|
|
955
|
+
4. **Inventory**: Scan ${p}_properties_list, ${p}_activities_list, ${p}_events_list, ${p}_experiences_list, and ${p}_trips_list for listings needing updates.
|
|
956
956
|
|
|
957
957
|
Summarize what needs attention after each step.`
|
|
958
958
|
}
|