@burdenoff/mcp-libs 2026.704.1 → 2026.719.1
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/{chunk-WWFVD7BO.js → chunk-RHWHUY5Y.js} +3 -3
- package/dist/{chunk-WWFVD7BO.js.map → chunk-RHWHUY5Y.js.map} +1 -1
- package/dist/{chunk-H2OYWLOA.js → chunk-YOSQUY3M.js} +101 -35
- package/dist/chunk-YOSQUY3M.js.map +1 -0
- package/dist/core/index.cjs +101 -32
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +1 -1
- package/dist/index.cjs +97 -31
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/modules/adaptercloud/index.cjs +14 -14
- package/dist/modules/adaptercloud/index.cjs.map +1 -1
- package/dist/modules/adaptercloud/index.js +1 -1
- package/dist/modules/artistrybase/index.cjs +14 -14
- package/dist/modules/artistrybase/index.cjs.map +1 -1
- package/dist/modules/artistrybase/index.js +1 -1
- package/dist/modules/assethandler/index.cjs +14 -14
- package/dist/modules/assethandler/index.cjs.map +1 -1
- package/dist/modules/assethandler/index.js +1 -1
- package/dist/modules/atheletebridge/index.cjs +14 -14
- package/dist/modules/atheletebridge/index.cjs.map +1 -1
- package/dist/modules/atheletebridge/index.js +1 -1
- package/dist/modules/auth/index.cjs +14 -14
- package/dist/modules/auth/index.cjs.map +1 -1
- package/dist/modules/auth/index.js +3 -3
- package/dist/modules/billing/index.cjs +14 -14
- package/dist/modules/billing/index.cjs.map +1 -1
- package/dist/modules/billing/index.js +1 -1
- package/dist/modules/brainyrich/index.cjs +14 -14
- package/dist/modules/brainyrich/index.cjs.map +1 -1
- package/dist/modules/brainyrich/index.js +1 -1
- package/dist/modules/buildmyiq/index.cjs +14 -14
- package/dist/modules/buildmyiq/index.cjs.map +1 -1
- package/dist/modules/buildmyiq/index.js +1 -1
- package/dist/modules/channels/index.cjs +14 -14
- package/dist/modules/channels/index.cjs.map +1 -1
- package/dist/modules/channels/index.js +1 -1
- package/dist/modules/collabkin/index.cjs +14 -14
- package/dist/modules/collabkin/index.cjs.map +1 -1
- package/dist/modules/collabkin/index.js +1 -1
- package/dist/modules/comradecircle/index.cjs +14 -14
- package/dist/modules/comradecircle/index.cjs.map +1 -1
- package/dist/modules/comradecircle/index.js +1 -1
- package/dist/modules/conversations/index.cjs +14 -14
- package/dist/modules/conversations/index.cjs.map +1 -1
- package/dist/modules/conversations/index.js +1 -1
- package/dist/modules/coolandlovely/index.cjs +14 -14
- package/dist/modules/coolandlovely/index.cjs.map +1 -1
- package/dist/modules/coolandlovely/index.js +1 -1
- package/dist/modules/cosmicintersection/index.cjs +14 -14
- package/dist/modules/cosmicintersection/index.cjs.map +1 -1
- package/dist/modules/cosmicintersection/index.js +1 -1
- package/dist/modules/crewfoundry/index.cjs +14 -14
- package/dist/modules/crewfoundry/index.cjs.map +1 -1
- package/dist/modules/crewfoundry/index.js +1 -1
- package/dist/modules/devportal/index.cjs +14 -14
- package/dist/modules/devportal/index.cjs.map +1 -1
- package/dist/modules/devportal/index.js +1 -1
- package/dist/modules/ecoimpacthub/index.cjs +14 -14
- package/dist/modules/ecoimpacthub/index.cjs.map +1 -1
- package/dist/modules/ecoimpacthub/index.js +1 -1
- package/dist/modules/eventfullymanaged/index.cjs +14 -14
- package/dist/modules/eventfullymanaged/index.cjs.map +1 -1
- package/dist/modules/eventfullymanaged/index.js +1 -1
- package/dist/modules/export/index.cjs +14 -14
- package/dist/modules/export/index.cjs.map +1 -1
- package/dist/modules/export/index.js +1 -1
- package/dist/modules/files/index.cjs +14 -14
- package/dist/modules/files/index.cjs.map +1 -1
- package/dist/modules/files/index.js +1 -1
- package/dist/modules/ggnomad/index.cjs +14 -14
- package/dist/modules/ggnomad/index.cjs.map +1 -1
- package/dist/modules/ggnomad/index.js +1 -1
- package/dist/modules/govcitizenhub/index.cjs +14 -14
- package/dist/modules/govcitizenhub/index.cjs.map +1 -1
- package/dist/modules/govcitizenhub/index.js +1 -1
- package/dist/modules/groups/index.cjs +14 -14
- package/dist/modules/groups/index.cjs.map +1 -1
- package/dist/modules/groups/index.js +1 -1
- package/dist/modules/headshotmarketing/index.cjs +14 -14
- package/dist/modules/headshotmarketing/index.cjs.map +1 -1
- package/dist/modules/headshotmarketing/index.js +1 -1
- package/dist/modules/health/index.cjs +21 -19
- package/dist/modules/health/index.cjs.map +1 -1
- package/dist/modules/health/index.js +1 -1
- package/dist/modules/hookmovies/index.cjs +14 -14
- package/dist/modules/hookmovies/index.cjs.map +1 -1
- package/dist/modules/hookmovies/index.js +1 -1
- package/dist/modules/housingvista/index.cjs +14 -14
- package/dist/modules/housingvista/index.cjs.map +1 -1
- package/dist/modules/housingvista/index.js +1 -1
- package/dist/modules/integrations/index.cjs +14 -14
- package/dist/modules/integrations/index.cjs.map +1 -1
- package/dist/modules/integrations/index.js +1 -1
- package/dist/modules/intelwatchtower/index.cjs +14 -14
- package/dist/modules/intelwatchtower/index.cjs.map +1 -1
- package/dist/modules/intelwatchtower/index.js +1 -1
- package/dist/modules/kadaikodi/index.cjs +14 -14
- package/dist/modules/kadaikodi/index.cjs.map +1 -1
- package/dist/modules/kadaikodi/index.js +1 -1
- package/dist/modules/labsofscience/index.cjs +14 -14
- package/dist/modules/labsofscience/index.cjs.map +1 -1
- package/dist/modules/labsofscience/index.js +1 -1
- package/dist/modules/manufacturedops/index.cjs +14 -14
- package/dist/modules/manufacturedops/index.cjs.map +1 -1
- package/dist/modules/manufacturedops/index.js +1 -1
- package/dist/modules/movethewheels/index.cjs +14 -14
- package/dist/modules/movethewheels/index.cjs.map +1 -1
- package/dist/modules/movethewheels/index.js +1 -1
- package/dist/modules/mybodyshield/index.cjs +14 -14
- package/dist/modules/mybodyshield/index.cjs.map +1 -1
- package/dist/modules/mybodyshield/index.js +1 -1
- package/dist/modules/notifications/index.cjs +14 -14
- package/dist/modules/notifications/index.cjs.map +1 -1
- package/dist/modules/notifications/index.js +1 -1
- package/dist/modules/organizations/index.cjs +14 -14
- package/dist/modules/organizations/index.cjs.map +1 -1
- package/dist/modules/organizations/index.js +1 -1
- package/dist/modules/planmagnet/index.cjs +14 -14
- package/dist/modules/planmagnet/index.cjs.map +1 -1
- package/dist/modules/planmagnet/index.js +1 -1
- package/dist/modules/products/index.cjs +14 -14
- package/dist/modules/products/index.cjs.map +1 -1
- package/dist/modules/products/index.js +1 -1
- package/dist/modules/proserviceworld/index.cjs +14 -14
- package/dist/modules/proserviceworld/index.cjs.map +1 -1
- package/dist/modules/proserviceworld/index.js +1 -1
- package/dist/modules/rbac/index.cjs +14 -14
- package/dist/modules/rbac/index.cjs.map +1 -1
- package/dist/modules/rbac/index.js +1 -1
- package/dist/modules/sandbox/index.cjs +14 -14
- package/dist/modules/sandbox/index.cjs.map +1 -1
- package/dist/modules/sandbox/index.js +1 -1
- package/dist/modules/scheduler/index.cjs +14 -14
- package/dist/modules/scheduler/index.cjs.map +1 -1
- package/dist/modules/scheduler/index.js +1 -1
- package/dist/modules/security/index.cjs +14 -14
- package/dist/modules/security/index.cjs.map +1 -1
- package/dist/modules/security/index.js +1 -1
- package/dist/modules/semanticfed/index.cjs +14 -14
- package/dist/modules/semanticfed/index.cjs.map +1 -1
- package/dist/modules/semanticfed/index.js +1 -1
- package/dist/modules/store/index.cjs +14 -14
- package/dist/modules/store/index.cjs.map +1 -1
- package/dist/modules/store/index.js +1 -1
- package/dist/modules/subscriberbot/index.cjs +14 -14
- package/dist/modules/subscriberbot/index.cjs.map +1 -1
- package/dist/modules/subscriberbot/index.js +1 -1
- package/dist/modules/support/index.cjs +14 -14
- package/dist/modules/support/index.cjs.map +1 -1
- package/dist/modules/support/index.js +1 -1
- package/dist/modules/tags/index.cjs +14 -14
- package/dist/modules/tags/index.cjs.map +1 -1
- package/dist/modules/tags/index.js +1 -1
- package/dist/modules/technospam/index.cjs +14 -14
- package/dist/modules/technospam/index.cjs.map +1 -1
- package/dist/modules/technospam/index.js +1 -1
- package/dist/modules/theculturepost/index.cjs +14 -14
- package/dist/modules/theculturepost/index.cjs.map +1 -1
- package/dist/modules/theculturepost/index.js +1 -1
- package/dist/modules/theglobalfuel/index.cjs +14 -14
- package/dist/modules/theglobalfuel/index.cjs.map +1 -1
- package/dist/modules/theglobalfuel/index.js +1 -1
- package/dist/modules/timecampus/index.cjs +21 -16
- package/dist/modules/timecampus/index.cjs.map +1 -1
- package/dist/modules/timecampus/index.js +8 -3
- package/dist/modules/timecampus/index.js.map +1 -1
- package/dist/modules/tours/index.cjs +14 -14
- package/dist/modules/tours/index.cjs.map +1 -1
- package/dist/modules/tours/index.js +1 -1
- package/dist/modules/vibecontrols/index.cjs +14 -14
- package/dist/modules/vibecontrols/index.cjs.map +1 -1
- package/dist/modules/vibecontrols/index.js +2 -2
- package/dist/modules/workspaces/index.cjs +14 -14
- package/dist/modules/workspaces/index.cjs.map +1 -1
- package/dist/modules/workspaces/index.js +1 -1
- package/dist/{tool-name-DlnrBsZ6.d.ts → tool-name-BaPNMZdj.d.ts} +17 -1
- package/dist/{tool-name-CQf_IqAj.d.cts → tool-name-Bvb36qmq.d.cts} +17 -1
- package/package.json +1 -1
- package/dist/chunk-H2OYWLOA.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mcpToolName, errorResult, jsonResult, mcpResourceUri, mcpPromptName } from '../../chunk-
|
|
1
|
+
import { mcpToolName, errorResult, jsonResult, mcpResourceUri, mcpPromptName } from '../../chunk-YOSQUY3M.js';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
4
|
// src/modules/hookmovies/operations.ts
|
|
@@ -18,20 +18,6 @@ var McpInternalError = class extends Error {
|
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
// src/core/result.ts
|
|
22
|
-
function jsonResult(data, structured) {
|
|
23
|
-
const result = {
|
|
24
|
-
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
25
|
-
};
|
|
26
|
-
return result;
|
|
27
|
-
}
|
|
28
|
-
function errorResult(message, hint) {
|
|
29
|
-
const text = hint ? `${message}
|
|
30
|
-
|
|
31
|
-
Hint: ${hint}` : message;
|
|
32
|
-
return { content: [{ type: "text", text }], isError: true };
|
|
33
|
-
}
|
|
34
|
-
|
|
35
21
|
// src/core/tool-name.ts
|
|
36
22
|
var MAX_TOOL_NAME_LENGTH = 63;
|
|
37
23
|
function assertSafeName(name, kind) {
|
|
@@ -62,6 +48,20 @@ function mcpPromptName(productName, ...parts) {
|
|
|
62
48
|
return [productName, ...parts].filter(Boolean).join("-");
|
|
63
49
|
}
|
|
64
50
|
|
|
51
|
+
// src/core/result.ts
|
|
52
|
+
function jsonResult(data, structured) {
|
|
53
|
+
const result = {
|
|
54
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
55
|
+
};
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
function errorResult(message, hint) {
|
|
59
|
+
const text = hint ? `${message}
|
|
60
|
+
|
|
61
|
+
Hint: ${hint}` : message;
|
|
62
|
+
return { content: [{ type: "text", text }], isError: true };
|
|
63
|
+
}
|
|
64
|
+
|
|
65
65
|
// src/modules/housingvista/operations.ts
|
|
66
66
|
var PROPERTY_FIELDS = `
|
|
67
67
|
id title description category type status price totalArea bedrooms bathrooms
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/result.ts","../../../src/core/tool-name.ts","../../../src/modules/housingvista/operations.ts","../../../src/modules/housingvista/tools/shared.ts","../../../src/modules/housingvista/tools/properties.ts","../../../src/modules/housingvista/tools/investments.ts","../../../src/modules/housingvista/tools/transactions.ts","../../../src/modules/housingvista/tools/leasing.ts","../../../src/modules/housingvista/tools/assets.ts","../../../src/modules/housingvista/tools/marketplace.ts","../../../src/modules/housingvista/tools/market.ts","../../../src/modules/housingvista/tools/verification.ts","../../../src/modules/housingvista/tools/analytics.ts","../../../src/modules/housingvista/resources.ts","../../../src/modules/housingvista/prompts.ts","../../../src/modules/housingvista/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 HousingVista MCP module.\n *\n * HousingVista is the real-estate platform (future-products ecosystem): property\n * listings, transactions, investments, rentals & AMC contracts, a services\n * marketplace, market intelligence, and verification queues. Backend subgraph:\n * ~/products/wspace/housingvista/wspace-housingvista-svc/ (Hive service name\n * `housingvista`).\n *\n * All operations run against the WORKSPACE gateway. Workspace scoping is carried\n * by the gateway headers (x-workspace-id / X-Workspace-Authorization) issued by\n * the auth module — HousingVista inputs do NOT carry a workspaceId.\n *\n * The list queries take a `pagination: HousingVistaPaginationInput` ({ limit,\n * offset }); the property list also takes a `filter:\n * HousingVistaPropertyFilterInput`. The Property mutations carry the\n * inconsistent server prefix (createHousingvistaProperty /\n * updateHousingvistaProperty / deleteHousingvistaProperty) while the queries are\n * prefixed `housingvista*` — both are called by their REAL names below.\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical kadaikodi / vibecontrols modules' operations files.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const PROPERTY_FIELDS = `\n id title description category type status price totalArea bedrooms bathrooms\n city state imageUrl context workspaceId createdAt updatedAt\n`;\n\nconst PROPERTY_REF_FIELDS = `id title city state price status type`;\n\nexport const INVESTMENT_FIELDS = `\n id title investmentType totalValue riskLevel status investors returns\n propertyId workspaceId createdAt updatedAt\n property { ${PROPERTY_REF_FIELDS} }\n`;\n\nexport const TRANSACTION_FIELDS = `\n id title type status amount currency parties milestones escrow documents\n propertyId workspaceId createdAt updatedAt\n property { ${PROPERTY_REF_FIELDS} }\n`;\n\nexport const RENTAL_UNIT_FIELDS = `\n id unitNumber propertyId propertyTitle tenantName tenantEmail tenantPhone\n monthlyRent securityDeposit leaseStart leaseEnd status paymentStatus lastPaymentAt\n`;\n\nexport const AMC_CONTRACT_FIELDS = `\n id packageName providerName propertyTitle status monthlyCost startDate endDate\n nextServiceDate servicesIncluded\n`;\n\nexport const ASSET_FIELDS = `\n id title type category status location currentValue purchasePrice\n appreciationPercent rentalYield imageUrl\n`;\n\nexport const MARKETPLACE_SERVICE_FIELDS = `\n id name category description providerName rating reviewCount priceRange\n responseTime availableAreas featured verified imageUrl\n`;\n\nexport const LEGAL_SERVICE_FIELDS = `\n id title category description providerName providerRating status consultationFee\n priceRange estimatedDuration documentsRequired features\n`;\n\nexport const AREA_INSIGHT_FIELDS = `\n id areaName city avgPropertyPrice avgRentalYield appreciationRate population\n safetyScore connectivityScore amenitiesScore greenCoverPercent schoolsNearby\n hospitalsNearby upcomingProjects\n`;\n\nexport const MARKET_TREND_FIELDS = `\n id monthLabel avgPrice avgRent priceChangePercent demandIndex supplyIndex\n`;\n\nexport const HOME_LOAN_OFFER_FIELDS = `\n id bankName interestRate maxAmount maxTenure processingFee prepaymentCharges\n emiPerLakh rating specialOffer features\n`;\n\nexport const VERIFICATION_ITEM_FIELDS = `\n id entityType entityLabel status priority notes submittedAt\n`;\n\nexport const DASHBOARD_STATS_FIELDS = `\n totalProperties totalValue totalPortfolioValue totalInvestments investmentReturns\n monthlyRevenue occupancyRate totalTenants activeTransactions pendingVerifications\n maintenanceRequests upcomingViewings unreadMessages\n`;\n\n// ---------------------------------------------------------------------------\n// Properties\n// ---------------------------------------------------------------------------\n\nexport const GET_PROPERTY = `\n query HousingVistaProperty($id: ID!) {\n housingvistaProperty(id: $id) {\n ${PROPERTY_FIELDS}\n }\n }\n`;\n\nexport const LIST_PROPERTIES = `\n query HousingVistaProperties(\n $filter: HousingVistaPropertyFilterInput\n $pagination: HousingVistaPaginationInput\n ) {\n housingvistaProperties(filter: $filter, pagination: $pagination) {\n ${PROPERTY_FIELDS}\n }\n }\n`;\n\nexport const CREATE_PROPERTY = `\n mutation HousingVistaCreateProperty($input: CreatePropertyInput!) {\n createHousingvistaProperty(input: $input) {\n ${PROPERTY_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_PROPERTY = `\n mutation HousingVistaUpdateProperty($id: ID!, $input: UpdatePropertyInput!) {\n updateHousingvistaProperty(id: $id, input: $input) {\n ${PROPERTY_FIELDS}\n }\n }\n`;\n\nexport const DELETE_PROPERTY = `\n mutation HousingVistaDeleteProperty($id: ID!) {\n deleteHousingvistaProperty(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Investments\n// ---------------------------------------------------------------------------\n\nexport const GET_INVESTMENT = `\n query HousingVistaInvestment($id: ID!) {\n housingvistaInvestment(id: $id) {\n ${INVESTMENT_FIELDS}\n }\n }\n`;\n\nexport const LIST_INVESTMENTS = `\n query HousingVistaInvestments($pagination: HousingVistaPaginationInput) {\n housingvistaInvestments(pagination: $pagination) {\n ${INVESTMENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Transactions\n// ---------------------------------------------------------------------------\n\nexport const GET_TRANSACTION = `\n query HousingVistaTransaction($id: ID!) {\n housingvistaTransaction(id: $id) {\n ${TRANSACTION_FIELDS}\n }\n }\n`;\n\nexport const LIST_TRANSACTIONS = `\n query HousingVistaTransactions($pagination: HousingVistaPaginationInput) {\n housingvistaTransactions(pagination: $pagination) {\n ${TRANSACTION_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Rentals + AMC contracts\n// ---------------------------------------------------------------------------\n\nexport const LIST_RENTAL_UNITS = `\n query HousingVistaRentalUnits($pagination: HousingVistaPaginationInput) {\n housingvistaRentalUnits(pagination: $pagination) {\n ${RENTAL_UNIT_FIELDS}\n }\n }\n`;\n\nexport const LIST_AMC_CONTRACTS = `\n query HousingVistaAmcContracts($pagination: HousingVistaPaginationInput) {\n housingvistaAmcContracts(pagination: $pagination) {\n ${AMC_CONTRACT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Assets\n// ---------------------------------------------------------------------------\n\nexport const LIST_ASSETS = `\n query HousingVistaAssets($pagination: HousingVistaPaginationInput) {\n housingvistaAssets(pagination: $pagination) {\n ${ASSET_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Services marketplace (marketplace + legal)\n// ---------------------------------------------------------------------------\n\nexport const LIST_MARKETPLACE_SERVICES = `\n query HousingVistaMarketplaceServices($pagination: HousingVistaPaginationInput) {\n housingvistaMarketplaceServices(pagination: $pagination) {\n ${MARKETPLACE_SERVICE_FIELDS}\n }\n }\n`;\n\nexport const LIST_LEGAL_SERVICES = `\n query HousingVistaLegalServices($pagination: HousingVistaPaginationInput) {\n housingvistaLegalServices(pagination: $pagination) {\n ${LEGAL_SERVICE_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Market intelligence (area insights, trends, home loans)\n// ---------------------------------------------------------------------------\n\nexport const LIST_AREA_INSIGHTS = `\n query HousingVistaAreaInsights($pagination: HousingVistaPaginationInput) {\n housingvistaAreaInsights(pagination: $pagination) {\n ${AREA_INSIGHT_FIELDS}\n }\n }\n`;\n\nexport const LIST_MARKET_TRENDS = `\n query HousingVistaMarketTrends($pagination: HousingVistaPaginationInput) {\n housingvistaMarketTrends(pagination: $pagination) {\n ${MARKET_TREND_FIELDS}\n }\n }\n`;\n\nexport const LIST_HOME_LOAN_OFFERS = `\n query HousingVistaHomeLoanOffers($pagination: HousingVistaPaginationInput) {\n housingvistaHomeLoanOffers(pagination: $pagination) {\n ${HOME_LOAN_OFFER_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Verification queue\n// ---------------------------------------------------------------------------\n\nexport const LIST_VERIFICATION_ITEMS = `\n query HousingVistaVerificationItems($pagination: HousingVistaPaginationInput) {\n housingvistaVerificationItems(pagination: $pagination) {\n ${VERIFICATION_ITEM_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Dashboard\n// ---------------------------------------------------------------------------\n\nexport const DASHBOARD_STATS = `\n query HousingVistaDashboardStats {\n housingvistaDashboardStats {\n ${DASHBOARD_STATS_FIELDS}\n }\n }\n`;\n","/**\n * Shared zod schemas for the HousingVista tool surface.\n *\n * The two backend enums (PropertyStatus, PropertyType) are mirrored as tight\n * zod enums so Claude Desktop grounds tool calls against the exact allowed\n * values. The `context` JSON scalar on Property is modelled as a permissive\n * object record — the backend accepts arbitrary JSON, but a record shape gives\n * the LLM a typed hint.\n */\n\nimport { z } from 'zod';\n\nexport const PropertyStatusEnum = z\n .enum(['for_rent', 'for_sale', 'off_market', 'rented', 'sold', 'under_contract'])\n .describe('Listing/market status of a property');\n\nexport const PropertyTypeEnum = z\n .enum(['agricultural', 'commercial', 'industrial', 'mixed_use', 'residential'])\n .describe('Physical use-class of a property');\n\n/** Permissive JSON-object schema for `JSON` scalar inputs (e.g. Property.context). */\nexport const JsonObject = z.record(z.string(), z.unknown());\n","/**\n * HousingVista property tools — the core listing entity (full CRUD).\n *\n * Surface (5): properties_{get,list,create,update,delete}.\n * The queries are prefixed `housingvistaProperty` / `housingvistaProperties`\n * while the mutations carry the inconsistent server prefix\n * (createHousingvistaProperty / updateHousingvistaProperty /\n * deleteHousingvistaProperty) — all are called by their REAL names in\n * operations.ts.\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 { PropertyStatusEnum, PropertyTypeEnum, 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 HousingVista property 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 housingvistaProperty: Record<string, unknown> | null;\n }>(ops.GET_PROPERTY, { id });\n if (!data.housingvistaProperty) return errorResult(`Property ${id} not found`);\n return jsonResult(data.housingvistaProperty);\n } catch (error) {\n ctx.logger.error('housingvista 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:\n 'List property listings in the bound workspace with optional city/status/type/text filters and pagination.',\n inputSchema: {\n city: z.string().optional().describe('Filter by city'),\n status: PropertyStatusEnum.optional().describe('Filter by listing status'),\n type: PropertyTypeEnum.optional().describe('Filter by property use-class'),\n search: z.string().optional().describe('Free-text search across title/description'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ city, status, type, search, limit, offset }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (city !== undefined) filter.city = city;\n if (status !== undefined) filter.status = status;\n if (type !== undefined) filter.type = type;\n if (search !== undefined) filter.search = search;\n\n const data = await ctx.gql.workspace.request<{\n housingvistaProperties: Array<Record<string, unknown>>;\n }>(ops.LIST_PROPERTIES, {\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaProperties);\n } catch (error) {\n ctx.logger.error('housingvista 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 'Create a new property listing. `type` and `status` are required enums; `category` is a free-form label (e.g. \"Apartment\", \"Villa\", \"Plot\").',\n inputSchema: {\n title: z.string().min(1).describe('Listing title'),\n category: z.string().min(1).describe('Free-form category label, e.g. \"Apartment\", \"Villa\"'),\n type: PropertyTypeEnum.describe('Property use-class'),\n status: PropertyStatusEnum.describe('Initial listing status'),\n price: z.number().describe('Asking / listed price'),\n totalArea: z.number().describe('Total area (e.g. sq ft)'),\n bedrooms: z.number().int().describe('Number of bedrooms'),\n bathrooms: z.number().int().describe('Number of bathrooms'),\n city: z.string().min(1).describe('City'),\n state: z.string().min(1).describe('State'),\n description: z.string().optional().describe('Listing description'),\n imageUrl: z.string().optional().describe('Primary image URL'),\n context: JsonObject.optional().describe(\n 'Arbitrary context JSON (amenities, metadata, etc.)',\n ),\n },\n },\n async ({\n title,\n category,\n type,\n status,\n price,\n totalArea,\n bedrooms,\n bathrooms,\n city,\n state,\n description,\n imageUrl,\n context,\n }) => {\n try {\n const input: Record<string, unknown> = {\n title,\n category,\n type,\n status,\n price,\n totalArea,\n bedrooms,\n bathrooms,\n city,\n state,\n };\n if (description !== undefined) input.description = description;\n if (imageUrl !== undefined) input.imageUrl = imageUrl;\n if (context !== undefined) input.context = context;\n\n const data = await ctx.gql.workspace.request<{\n createHousingvistaProperty: Record<string, unknown>;\n }>(ops.CREATE_PROPERTY, { input });\n return jsonResult(data.createHousingvistaProperty);\n } catch (error) {\n ctx.logger.error('housingvista 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 server.registerTool(\n track(mcpToolName(ctx.productName, 'properties_update')),\n {\n title: 'Update Property',\n description:\n 'Update a property listing. At least one mutable field must be provided. Use `status` to move a listing through its market lifecycle.',\n inputSchema: {\n id: z.string().describe('Property ID'),\n title: z.string().optional().describe('Updated title'),\n category: z.string().optional().describe('Updated category label'),\n type: PropertyTypeEnum.optional().describe('Updated use-class'),\n status: PropertyStatusEnum.optional().describe('Updated listing status'),\n price: z.number().optional().describe('Updated price'),\n totalArea: z.number().optional().describe('Updated total area'),\n bedrooms: z.number().int().optional().describe('Updated bedroom count'),\n bathrooms: z.number().int().optional().describe('Updated bathroom count'),\n city: z.string().optional().describe('Updated city'),\n state: z.string().optional().describe('Updated state'),\n description: z.string().optional().describe('Updated description'),\n imageUrl: z.string().optional().describe('Updated primary image URL'),\n context: JsonObject.optional().describe('Updated context JSON'),\n },\n },\n async ({\n id,\n title,\n category,\n type,\n status,\n price,\n totalArea,\n bedrooms,\n bathrooms,\n city,\n state,\n description,\n imageUrl,\n context,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (title !== undefined) input.title = title;\n if (category !== undefined) input.category = category;\n if (type !== undefined) input.type = type;\n if (status !== undefined) input.status = status;\n if (price !== undefined) input.price = price;\n if (totalArea !== undefined) input.totalArea = totalArea;\n if (bedrooms !== undefined) input.bedrooms = bedrooms;\n if (bathrooms !== undefined) input.bathrooms = bathrooms;\n if (city !== undefined) input.city = city;\n if (state !== undefined) input.state = state;\n if (description !== undefined) input.description = description;\n if (imageUrl !== undefined) input.imageUrl = imageUrl;\n if (context !== undefined) input.context = context;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable property field (title/category/type/status/price/totalArea/bedrooms/bathrooms/city/state/description/imageUrl/context)',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n updateHousingvistaProperty: Record<string, unknown>;\n }>(ops.UPDATE_PROPERTY, { id, input });\n return jsonResult(data.updateHousingvistaProperty);\n } catch (error) {\n ctx.logger.error('housingvista properties_update failed', { error: String(error) });\n return errorResult(\n `Failed to update property: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'properties_delete')),\n {\n title: 'Delete Property',\n description: 'Delete a property listing by ID. Returns true on success.',\n inputSchema: { id: z.string().describe('Property ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n deleteHousingvistaProperty: boolean;\n }>(ops.DELETE_PROPERTY, { id });\n return jsonResult({ deleted: data.deleteHousingvistaProperty, id });\n } catch (error) {\n ctx.logger.error('housingvista properties_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete property: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista investment tools — property-investment vehicles.\n *\n * Surface (2): investments_{get,list}. Each Investment carries its embedded\n * property, investors JSON, and returns JSON.\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 registerInvestmentTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'investments_get')),\n {\n title: 'Get Investment',\n description:\n 'Fetch a single HousingVista property investment by ID, including its property, investors, and returns.',\n inputSchema: { id: z.string().describe('Investment ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaInvestment: Record<string, unknown> | null;\n }>(ops.GET_INVESTMENT, { id });\n if (!data.housingvistaInvestment) return errorResult(`Investment ${id} not found`);\n return jsonResult(data.housingvistaInvestment);\n } catch (error) {\n ctx.logger.error('housingvista investments_get failed', { error: String(error) });\n return errorResult(\n `Failed to get investment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'investments_list')),\n {\n title: 'List Investments',\n description: 'List property-investment vehicles in the bound workspace with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaInvestments: Array<Record<string, unknown>>;\n }>(ops.LIST_INVESTMENTS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaInvestments);\n } catch (error) {\n ctx.logger.error('housingvista investments_list failed', { error: String(error) });\n return errorResult(\n `Failed to list investments: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista transaction tools — property deal pipeline.\n *\n * Surface (2): transactions_{get,list}. Each transaction carries its embedded\n * property plus parties/milestones/escrow/documents JSON.\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 registerTransactionTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'transactions_get')),\n {\n title: 'Get Transaction',\n description:\n 'Fetch a single HousingVista property transaction by ID, including its property, parties, milestones, escrow, and documents.',\n inputSchema: { id: z.string().describe('Transaction ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaTransaction: Record<string, unknown> | null;\n }>(ops.GET_TRANSACTION, { id });\n if (!data.housingvistaTransaction) return errorResult(`Transaction ${id} not found`);\n return jsonResult(data.housingvistaTransaction);\n } catch (error) {\n ctx.logger.error('housingvista transactions_get failed', { error: String(error) });\n return errorResult(\n `Failed to get transaction: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'transactions_list')),\n {\n title: 'List Transactions',\n description:\n 'List property transactions (deal pipeline) in the bound workspace with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaTransactions: Array<Record<string, unknown>>;\n }>(ops.LIST_TRANSACTIONS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaTransactions);\n } catch (error) {\n ctx.logger.error('housingvista transactions_list failed', { error: String(error) });\n return errorResult(\n `Failed to list transactions: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista leasing tools — rental tenancy + annual maintenance contracts.\n *\n * Surface (2): rentals_list (RentalUnit tenancies), amc_list (AmcContract\n * maintenance packages). Both are workspace-scoped read lists with pagination.\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 registerLeasingTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'rentals_list')),\n {\n title: 'List Rental Units',\n description:\n 'List rental units (tenancies) in the bound workspace — tenant, lease window, monthly rent, and payment status — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaRentalUnits: Array<Record<string, unknown>>;\n }>(ops.LIST_RENTAL_UNITS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaRentalUnits);\n } catch (error) {\n ctx.logger.error('housingvista rentals_list failed', { error: String(error) });\n return errorResult(\n `Failed to list rental units: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'amc_list')),\n {\n title: 'List AMC Contracts',\n description:\n 'List annual maintenance contracts (AMC) in the bound workspace — package, provider, cost, and next service date — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaAmcContracts: Array<Record<string, unknown>>;\n }>(ops.LIST_AMC_CONTRACTS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaAmcContracts);\n } catch (error) {\n ctx.logger.error('housingvista amc_list failed', { error: String(error) });\n return errorResult(\n `Failed to list AMC contracts: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista asset tools — owned-asset portfolio.\n *\n * Surface (1): assets_list. Workspace-scoped read list of owned real-estate\n * assets (current value, purchase price, appreciation, rental yield).\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 registerAssetTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'assets_list')),\n {\n title: 'List Assets',\n description:\n 'List owned real-estate assets in the bound workspace — current value, purchase price, appreciation, and rental yield — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaAssets: Array<Record<string, unknown>>;\n }>(ops.LIST_ASSETS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaAssets);\n } catch (error) {\n ctx.logger.error('housingvista assets_list failed', { error: String(error) });\n return errorResult(\n `Failed to list assets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista services-marketplace tools — vendor services + legal services.\n *\n * Surface (2): marketplace_services_list (general vendor marketplace),\n * legal_services_list (legal/conveyancing services). Both are workspace-scoped\n * read lists with pagination.\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 registerMarketplaceTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'marketplace_services_list')),\n {\n title: 'List Marketplace Services',\n description:\n 'List vendor marketplace services in the bound workspace — provider, rating, price range, coverage areas, and verification flag — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaMarketplaceServices: Array<Record<string, unknown>>;\n }>(ops.LIST_MARKETPLACE_SERVICES, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaMarketplaceServices);\n } catch (error) {\n ctx.logger.error('housingvista marketplace_services_list failed', { error: String(error) });\n return errorResult(\n `Failed to list marketplace services: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'legal_services_list')),\n {\n title: 'List Legal Services',\n description:\n 'List legal/conveyancing services in the bound workspace — provider, rating, consultation fee, required documents, and estimated duration — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaLegalServices: Array<Record<string, unknown>>;\n }>(ops.LIST_LEGAL_SERVICES, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaLegalServices);\n } catch (error) {\n ctx.logger.error('housingvista legal_services_list failed', { error: String(error) });\n return errorResult(\n `Failed to list legal services: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista market-intelligence tools — area insights, market trends, and\n * home-loan offers.\n *\n * Surface (3): market_area_insights, market_trends, market_home_loans. All are\n * workspace-scoped read lists with pagination.\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 registerMarketTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'market_area_insights')),\n {\n title: 'List Area Insights',\n description:\n 'List per-area market insights in the bound workspace — average price, rental yield, appreciation rate, and liveability scores — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaAreaInsights: Array<Record<string, unknown>>;\n }>(ops.LIST_AREA_INSIGHTS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaAreaInsights);\n } catch (error) {\n ctx.logger.error('housingvista market_area_insights failed', { error: String(error) });\n return errorResult(\n `Failed to list area insights: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'market_trends')),\n {\n title: 'List Market Trends',\n description:\n 'List time-series market trends in the bound workspace — average price/rent, price change percent, and demand/supply indices by month — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaMarketTrends: Array<Record<string, unknown>>;\n }>(ops.LIST_MARKET_TRENDS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaMarketTrends);\n } catch (error) {\n ctx.logger.error('housingvista market_trends failed', { error: String(error) });\n return errorResult(\n `Failed to list market trends: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'market_home_loans')),\n {\n title: 'List Home Loan Offers',\n description:\n 'List home-loan offers in the bound workspace — bank, interest rate, max amount/tenure, processing fee, and EMI per lakh — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaHomeLoanOffers: Array<Record<string, unknown>>;\n }>(ops.LIST_HOME_LOAN_OFFERS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaHomeLoanOffers);\n } catch (error) {\n ctx.logger.error('housingvista market_home_loans failed', { error: String(error) });\n return errorResult(\n `Failed to list home loan offers: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista verification tools — the moderation/verification queue.\n *\n * Surface (1): verification_list. Workspace-scoped read list of pending\n * verification items (entity type/label, status, priority).\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 registerVerificationTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'verification_list')),\n {\n title: 'List Verification Items',\n description:\n 'List items in the verification/moderation queue for the bound workspace — entity type/label, status, and priority — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaVerificationItems: Array<Record<string, unknown>>;\n }>(ops.LIST_VERIFICATION_ITEMS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaVerificationItems);\n } catch (error) {\n ctx.logger.error('housingvista verification_list failed', { error: String(error) });\n return errorResult(\n `Failed to list verification items: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista analytics tools — portfolio dashboard.\n *\n * Surface (1): analytics_dashboard. Maps to the @rbac wspace-scoped\n * housingvistaDashboardStats query (headline portfolio KPIs).\n *\n * NOTE: the HousingVista subgraph exposes no @public health probe (only the\n * `_empty` placeholder), so this module ships no `health` tool.\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_dashboard')),\n {\n title: 'HousingVista Dashboard Stats',\n description:\n 'Headline portfolio KPIs: total properties/value/portfolio-value, investments + returns, monthly revenue, occupancy rate, tenants, active transactions, pending verifications, maintenance requests, upcoming viewings, and unread messages.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaDashboardStats: Record<string, unknown>;\n }>(ops.DASHBOARD_STATS, {});\n return jsonResult(data.housingvistaDashboardStats);\n } catch (error) {\n ctx.logger.error('housingvista analytics_dashboard failed', { error: String(error) });\n return errorResult(\n `Failed to get dashboard 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 { DASHBOARD_STATS, LIST_PROPERTIES, LIST_MARKET_TRENDS } from './operations.js';\n\n/**\n * Read-only HousingVista 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 registerHousingVistaResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const dashboardUri = track(mcpResourceUri(ctx.productName, 'dashboard'));\n const propertiesUri = track(mcpResourceUri(ctx.productName, 'properties'));\n const marketUri = track(mcpResourceUri(ctx.productName, 'market'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'housingvista-schema',\n schemaUri,\n {\n title: 'HousingVista Domain Schema',\n description:\n 'Overview of the HousingVista real-estate 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 = `# HousingVista Domain (Overview)\n\nEnd-to-end real-estate platform: listings, transactions, investments, rentals,\nmaintenance contracts, a services marketplace, market intelligence, and a\nverification queue.\n\n## Entities\n- Property — a property listing (the core entity; full CRUD)\n- Investment — a property-investment vehicle (embeds property, investors, returns)\n- HousingVistaTransaction — a property deal (parties, milestones, escrow, documents)\n- RentalUnit — a rental tenancy (tenant, lease window, rent, payment status)\n- AmcContract — an annual maintenance contract (package, provider, service date)\n- HousingVistaAsset — an owned real-estate asset (value, appreciation, yield)\n- MarketplaceService — a vendor marketplace service\n- LegalService — a legal/conveyancing service\n- AreaInsight — per-area market intelligence (price, yield, liveability scores)\n- MarketTrend — time-series market trends (price/rent, demand/supply indices)\n- HomeLoanOffer — a bank home-loan offer\n- VerificationItem — an item in the verification/moderation queue\n\n## Enums\n- PropertyStatus: for_rent, for_sale, off_market, rented, sold, under_contract\n- PropertyType: agricultural, commercial, industrial, mixed_use, residential\n\n## Tool groups\nproperties (CRUD), investments, transactions, leasing (rentals + amc), assets,\nmarketplace (marketplace + legal services), market (area insights + trends +\nhome loans), verification, analytics. All run against the WORKSPACE gateway\n(workspace-scoped).\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://dashboard — headline KPIs\n server.registerResource(\n 'housingvista-dashboard',\n dashboardUri,\n {\n title: 'HousingVista Dashboard Stats',\n description:\n 'Live headline portfolio KPIs (properties, value, investments, occupancy, tenants, transactions).',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${dashboardUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ housingvistaDashboardStats: unknown }>(\n DASHBOARD_STATS,\n {},\n );\n return {\n contents: [\n {\n uri: dashboardUri,\n text: JSON.stringify(data.housingvistaDashboardStats, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: dashboardUri,\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 — recent listings\n server.registerResource(\n 'housingvista-properties',\n propertiesUri,\n {\n title: 'HousingVista Property Listings',\n description: 'The first 50 property listings 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<{ housingvistaProperties: unknown }>(\n LIST_PROPERTIES,\n { pagination: { limit: 50, offset: 0 } },\n );\n return {\n contents: [\n {\n uri: propertiesUri,\n text: JSON.stringify(data.housingvistaProperties, 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 // <product>://market — market trends\n server.registerResource(\n 'housingvista-market',\n marketUri,\n {\n title: 'HousingVista Market Trends',\n description:\n 'Time-series market trends (price/rent, demand/supply indices) for the workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${marketUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ housingvistaMarketTrends: unknown }>(\n LIST_MARKET_TRENDS,\n { pagination: { limit: 50, offset: 0 } },\n );\n return {\n contents: [\n {\n uri: marketUri,\n text: JSON.stringify(data.housingvistaMarketTrends, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: marketUri,\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 * HousingVista MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerHousingVistaPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const listingName = track(mcpPromptName(p, 'property-listing'));\n const portfolioName = track(mcpPromptName(p, 'portfolio-review'));\n\n // <product>-property-listing — create + verify a listing\n server.registerPrompt(\n listingName,\n {\n title: 'Property Listing',\n description:\n 'Guide for listing a new HousingVista property end to end: create the listing, enrich it, cross-check the local market, and move it to market.',\n argsSchema: {\n city: z.string().optional().describe('Target city'),\n type: z.string().optional().describe('Property type (use-class)'),\n },\n },\n ({ city, type }) => {\n ctx.logger.debug(`Prompt ${listingName} called`, { city, type });\n const cityNote = city ? `Target city is \"${city}\".` : 'Ask the user for the city.';\n const typeNote = type\n ? `Use property type ${type}.`\n : 'Help the user pick a PropertyType (residential/commercial/industrial/agricultural/mixed_use).';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me list a new HousingVista property.\n\n1. **Market Check**: Use ${p}_market_area_insights and ${p}_market_trends to ground pricing for the area. ${cityNote}\n2. **Create Listing**: Use ${p}_properties_create. ${typeNote} Provide title, category, price, totalArea, bedrooms, bathrooms, city, and state. Set status=for_sale or for_rent.\n3. **Review**: Use ${p}_properties_get to confirm the created listing, then ${p}_properties_update to refine description/imageUrl/context if needed.\n4. **Finance Options**: Use ${p}_market_home_loans to surface relevant home-loan offers for prospective buyers.\n5. **Verify Catalog**: Use ${p}_properties_list filtered by city/type/status to confirm the listing appears.\n\nShow results at each step and confirm before publishing.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-portfolio-review — review the portfolio\n server.registerPrompt(\n portfolioName,\n {\n title: 'Portfolio Review',\n description:\n 'Review workflow for a real-estate portfolio: headline KPIs, owned assets, active transactions, investments, rental income, maintenance contracts, and the verification queue.',\n argsSchema: {},\n },\n () => {\n ctx.logger.debug(`Prompt ${portfolioName} called`);\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run a HousingVista portfolio review.\n\n1. **KPIs**: Use ${p}_analytics_dashboard for headline portfolio numbers (value, occupancy, returns).\n2. **Assets**: Use ${p}_assets_list to review owned assets — current value, appreciation, and rental yield.\n3. **Deal Pipeline**: Use ${p}_transactions_list to check active transactions and their milestones/escrow status.\n4. **Investments**: Use ${p}_investments_list to review investment vehicles and their returns.\n5. **Rental Income**: Use ${p}_rentals_list to check tenancies and payment status; flag overdue rents.\n6. **Maintenance**: Use ${p}_amc_list to review AMC contracts and upcoming service dates.\n7. **Verification**: Use ${p}_verification_list to clear the moderation/verification queue, prioritising high-priority items.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * HousingVista module — domain module for the future-products ecosystem program.\n *\n * Covers all 12 @key entities (+ the dashboard stats object) of\n * wspace-housingvista-svc grouped into per-entity sub-APIs: properties,\n * investments, transactions, leasing (rentals + amc), assets, marketplace\n * (marketplace + legal services), market (area insights + trends + home loans),\n * verification, analytics. Mirrors the kadaikodi module's structure\n * (tools/<entity>.ts + resources.ts + prompts.ts) and the canonical tags\n * module's typing discipline.\n *\n * Backend: ~/products/wspace/housingvista/wspace-housingvista-svc/\n * (Hive service name `housingvista`). All operations run against the WORKSPACE\n * gateway. The subgraph exposes no @public health probe, so this module ships\n * no `health` tool.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerPropertyTools } from './tools/properties.js';\nimport { registerInvestmentTools } from './tools/investments.js';\nimport { registerTransactionTools } from './tools/transactions.js';\nimport { registerLeasingTools } from './tools/leasing.js';\nimport { registerAssetTools } from './tools/assets.js';\nimport { registerMarketplaceTools } from './tools/marketplace.js';\nimport { registerMarketTools } from './tools/market.js';\nimport { registerVerificationTools } from './tools/verification.js';\nimport { registerAnalyticsTools } from './tools/analytics.js';\nimport { registerHousingVistaResources } from './resources.js';\nimport { registerHousingVistaPrompts } from './prompts.js';\n\nconst housingvistaModule: McpModule = {\n id: 'housingvista',\n version: '0.0.1',\n displayName: 'HousingVista',\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 registerPropertyTools(server, ctx, trackTool);\n registerInvestmentTools(server, ctx, trackTool);\n registerTransactionTools(server, ctx, trackTool);\n registerLeasingTools(server, ctx, trackTool);\n registerAssetTools(server, ctx, trackTool);\n registerMarketplaceTools(server, ctx, trackTool);\n registerMarketTools(server, ctx, trackTool);\n registerVerificationTools(server, ctx, trackTool);\n registerAnalyticsTools(server, ctx, trackTool);\n\n registerHousingVistaResources(server, ctx, trackResource);\n registerHousingVistaPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default housingvistaModule;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/tool-name.ts","../../../src/core/result.ts","../../../src/modules/housingvista/operations.ts","../../../src/modules/housingvista/tools/shared.ts","../../../src/modules/housingvista/tools/properties.ts","../../../src/modules/housingvista/tools/investments.ts","../../../src/modules/housingvista/tools/transactions.ts","../../../src/modules/housingvista/tools/leasing.ts","../../../src/modules/housingvista/tools/assets.ts","../../../src/modules/housingvista/tools/marketplace.ts","../../../src/modules/housingvista/tools/market.ts","../../../src/modules/housingvista/tools/verification.ts","../../../src/modules/housingvista/tools/analytics.ts","../../../src/modules/housingvista/resources.ts","../../../src/modules/housingvista/prompts.ts","../../../src/modules/housingvista/index.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Error classes for MCP SDK.\n *\n * Modules MUST throw these instead of throwing raw Errors. The registerTool\n * wrapper in result.ts catches and maps them to MCP-protocol-compliant\n * `{ isError: true, content: [...] }` responses.\n *\n * Throwing past the wrapper to the protocol surfaces as JSON-RPC -32603 to\n * the client and is a protocol bug.\n */\n\nexport class McpUserError extends Error {\n public readonly hint: string | undefined;\n\n constructor(message: string, opts?: { hint?: string }) {\n super(message);\n this.name = 'McpUserError';\n this.hint = opts?.hint;\n }\n}\n\nexport class McpAuthError extends McpUserError {\n constructor(message: string, opts?: { hint?: string }) {\n super(message, {\n hint: opts?.hint ?? 'Run the auth_login tool to authenticate.',\n });\n this.name = 'McpAuthError';\n }\n}\n\nexport class McpInternalError extends Error {\n public override readonly cause: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'McpInternalError';\n this.cause = cause;\n }\n}\n","/**\n * Tool / resource / prompt naming helpers.\n *\n * Mandatory product prefix avoids collisions when Claude Desktop runs\n * multiple MCP servers concurrently (typical setup is ~6).\n *\n * Tool names are capped at 63 characters — Claude Desktop pre-1.x\n * truncated at 64 in some versions.\n */\n\nimport { McpInternalError } from './errors.js';\n\nconst MAX_TOOL_NAME_LENGTH = 63;\n\nfunction assertSafeName(name: string, kind: 'tool' | 'resource' | 'prompt'): string {\n if (kind === 'tool' && name.length > MAX_TOOL_NAME_LENGTH) {\n throw new McpInternalError(\n `Tool name '${name}' exceeds ${MAX_TOOL_NAME_LENGTH} characters (some MCP clients truncate at 64).`,\n );\n }\n return name;\n}\n\n/**\n * Build a tool name. Format: `<productName>_<...parts>` (snake_case).\n * Example: mcpToolName('vibecontrols', 'vibes', 'list') -> 'vibecontrols_vibes_list'\n */\nexport function mcpToolName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpToolName: productName is required');\n }\n const name = [productName, ...parts].filter(Boolean).join('_');\n return assertSafeName(name, 'tool');\n}\n\n/**\n * Build a resource URI. Format: `<productName>://<...parts>`.\n * Example: mcpResourceUri('vibecontrols', 'schema') -> 'vibecontrols://schema'\n */\nexport function mcpResourceUri(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpResourceUri: productName is required');\n }\n return `${productName}://${parts.filter(Boolean).join('/')}`;\n}\n\n/**\n * Build a prompt name. Format: `<productName>-<...parts>` (kebab-case).\n * Example: mcpPromptName('vibecontrols', 'setup') -> 'vibecontrols-setup'\n */\nexport function mcpPromptName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpPromptName: productName is required');\n }\n return [productName, ...parts].filter(Boolean).join('-');\n}\n\nexport const TOOL_NAME_LIMIT = MAX_TOOL_NAME_LENGTH;\n\n/**\n * Name-based hint heuristics for MCP `annotations` (readOnlyHint /\n * destructiveHint). Used by tool-governance.ts to auto-fill annotations for\n * the fleet of product modules that call `server.registerTool` directly\n * (bypassing the `registerTool()` core helper) and so never set them\n * explicitly today (BOFF-3903). Deliberately conservative — matched against\n * whole `_`-delimited segments so e.g. `timeentries_delete` and\n * `pomodoro_delete_goal` match, but a hypothetical `undeletable_check`\n * would not.\n *\n * A module can always override the inference by passing an explicit\n * `annotations` object to `registerTool()` / `server.registerTool()`.\n */\nconst DESTRUCTIVE_NAME_SEGMENT = /(?:^|_)delete(?:_|$)/i;\nconst READ_ONLY_NAME_SEGMENT = /(?:^|_)(?:list|get|search|check|read|count|stats|by_date)(?:_|$)/i;\n\n/** True when a tool name looks destructive (irreversibly deletes data) by naming convention. */\nexport function inferDestructiveHint(toolName: string): boolean {\n return DESTRUCTIVE_NAME_SEGMENT.test(toolName);\n}\n\n/**\n * True when a tool name looks read-only by naming convention. Never true for\n * a name that also looks destructive (a tool can't be both).\n */\nexport function inferReadOnlyHint(toolName: string): boolean {\n return !inferDestructiveHint(toolName) && READ_ONLY_NAME_SEGMENT.test(toolName);\n}\n","/**\n * MCP tool result helpers + central handler.\n *\n * Modules NEVER call server.registerTool directly — they use registerTool()\n * from this module so the central try/catch wraps the handler and:\n * - maps thrown McpUserError / McpAuthError / McpInternalError to\n * MCP-protocol-compliant `{ isError: true, content: [...] }` shapes\n * - threads `_meta.progressToken` into ctx.progress for long ops\n * - emits a structured log line on every error\n * - never leaks `cause` from McpInternalError to the client\n *\n * This is the analog of cli-sdk's createProgram() central error handler.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { ZodRawShape } from 'zod';\nimport type { McpContext } from './context.js';\nimport { McpAuthError, McpInternalError, McpUserError } from './errors.js';\nimport type { ToolAnnotations } from './tool-governance.js';\n\nexport interface ToolTextContent {\n type: 'text';\n text: string;\n [k: string]: unknown;\n}\n\nexport interface ToolResult {\n content: ToolTextContent[];\n isError?: boolean;\n structuredContent?: Record<string, unknown>;\n [k: string]: unknown;\n}\n\nexport interface ToolMeta {\n progressToken?: string | number;\n}\n\n/**\n * Build a successful tool result with JSON content (pretty-printed).\n */\nexport function jsonResult(data: unknown, structured?: Record<string, unknown>): ToolResult {\n const result: ToolResult = {\n content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],\n };\n if (structured !== undefined) {\n result.structuredContent = structured;\n }\n return result;\n}\n\n/**\n * Build a successful tool result with plain text content.\n */\nexport function textResult(text: string): ToolResult {\n return { content: [{ type: 'text', text }] };\n}\n\n/**\n * Build an error tool result. Honors MCP's `{ isError: true, content }` shape.\n * Optional hint is appended on a new line so the LLM can react.\n */\nexport function errorResult(message: string, hint?: string): ToolResult {\n const text = hint ? `${message}\\n\\nHint: ${hint}` : message;\n return { content: [{ type: 'text', text }], isError: true };\n}\n\nexport interface ToolMetadata {\n title: string;\n description: string;\n inputSchema?: ZodRawShape;\n /**\n * Explicit MCP annotations (readOnlyHint / destructiveHint / ...). Optional\n * — when omitted, `wrapServerWithToolGovernance` (applied centrally in\n * `createMcpServer`) infers them from the tool name. Set this to override\n * the inference for a tool whose name doesn't match the naming convention.\n */\n annotations?: ToolAnnotations;\n}\n\nexport type ToolHandler<TArgs = Record<string, unknown>> = (\n args: TArgs,\n ctx: McpContext,\n meta: ToolMeta,\n) => Promise<unknown>;\n\n/**\n * Register a tool with the central error wrapper.\n *\n * The handler returns a plain value or void. The wrapper:\n * - wraps non-undefined returns in jsonResult()\n * - if the value already looks like a ToolResult (has `content`), passes through\n * - catches McpAuthError / McpUserError / McpInternalError / generic Error\n * - logs every error via ctx.logger.error\n */\nexport function registerTool<TArgs extends Record<string, unknown>>(\n server: McpServer,\n ctx: McpContext,\n name: string,\n metadata: ToolMetadata,\n handler: ToolHandler<TArgs>,\n): void {\n const sdkConfig = {\n title: metadata.title,\n description: metadata.description,\n ...(metadata.inputSchema ? { inputSchema: metadata.inputSchema } : {}),\n ...(metadata.annotations ? { annotations: metadata.annotations } : {}),\n };\n\n // The MCP SDK's registerTool signature is `(name, config, handler)`. The\n // handler arity depends on whether inputSchema is present (1-arg without,\n // 2-arg with). We accept a unified handler shape and dispatch at runtime.\n // The SDK's typing is strict and conditional on the inputSchema generic;\n // bypass with a cast since runtime acceptance is unconditional.\n const wrapped = async (...callbackArgs: unknown[]): Promise<ToolResult> => {\n const hasArgs = callbackArgs.length === 2;\n const args = (hasArgs ? callbackArgs[0] : {}) as TArgs;\n const extra = (hasArgs ? callbackArgs[1] : callbackArgs[0]) as\n | { _meta?: { progressToken?: string | number } }\n | undefined;\n\n const progressToken = extra?._meta?.progressToken;\n const meta: ToolMeta = progressToken !== undefined ? { progressToken } : {};\n\n try {\n const result = await handler(args, ctx, meta);\n if (isToolResult(result)) return result;\n if (result === undefined) return textResult('OK');\n return jsonResult(result);\n } catch (error) {\n return mapErrorToResult(error, ctx, name);\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (server as any).registerTool(name, sdkConfig, wrapped);\n}\n\nfunction isToolResult(value: unknown): value is ToolResult {\n return (\n !!value &&\n typeof value === 'object' &&\n 'content' in value &&\n Array.isArray((value as ToolResult).content)\n );\n}\n\nfunction mapErrorToResult(error: unknown, ctx: McpContext, toolName: string): ToolResult {\n if (error instanceof McpAuthError) {\n ctx.logger.warn(`${toolName}: auth required`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpUserError) {\n ctx.logger.info(`${toolName}: user error`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpInternalError) {\n ctx.logger.error(`${toolName}: internal error`, {\n message: error.message,\n cause: stringifyCause(error.cause),\n });\n return errorResult(`Internal error in ${toolName}.`);\n }\n const message = error instanceof Error ? error.message : String(error);\n ctx.logger.error(`${toolName}: unhandled error`, { message });\n return errorResult(`${toolName}: ${message}`);\n}\n\nfunction stringifyCause(cause: unknown): string | undefined {\n if (cause === undefined || cause === null) return undefined;\n if (cause instanceof Error) return cause.message;\n try {\n return JSON.stringify(cause);\n } catch {\n return String(cause);\n }\n}\n","/**\n * Centralized GraphQL operations for the HousingVista MCP module.\n *\n * HousingVista is the real-estate platform (future-products ecosystem): property\n * listings, transactions, investments, rentals & AMC contracts, a services\n * marketplace, market intelligence, and verification queues. Backend subgraph:\n * ~/products/wspace/housingvista/wspace-housingvista-svc/ (Hive service name\n * `housingvista`).\n *\n * All operations run against the WORKSPACE gateway. Workspace scoping is carried\n * by the gateway headers (x-workspace-id / X-Workspace-Authorization) issued by\n * the auth module — HousingVista inputs do NOT carry a workspaceId.\n *\n * The list queries take a `pagination: HousingVistaPaginationInput` ({ limit,\n * offset }); the property list also takes a `filter:\n * HousingVistaPropertyFilterInput`. The Property mutations carry the\n * inconsistent server prefix (createHousingvistaProperty /\n * updateHousingvistaProperty / deleteHousingvistaProperty) while the queries are\n * prefixed `housingvista*` — both are called by their REAL names below.\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical kadaikodi / vibecontrols modules' operations files.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const PROPERTY_FIELDS = `\n id title description category type status price totalArea bedrooms bathrooms\n city state imageUrl context workspaceId createdAt updatedAt\n`;\n\nconst PROPERTY_REF_FIELDS = `id title city state price status type`;\n\nexport const INVESTMENT_FIELDS = `\n id title investmentType totalValue riskLevel status investors returns\n propertyId workspaceId createdAt updatedAt\n property { ${PROPERTY_REF_FIELDS} }\n`;\n\nexport const TRANSACTION_FIELDS = `\n id title type status amount currency parties milestones escrow documents\n propertyId workspaceId createdAt updatedAt\n property { ${PROPERTY_REF_FIELDS} }\n`;\n\nexport const RENTAL_UNIT_FIELDS = `\n id unitNumber propertyId propertyTitle tenantName tenantEmail tenantPhone\n monthlyRent securityDeposit leaseStart leaseEnd status paymentStatus lastPaymentAt\n`;\n\nexport const AMC_CONTRACT_FIELDS = `\n id packageName providerName propertyTitle status monthlyCost startDate endDate\n nextServiceDate servicesIncluded\n`;\n\nexport const ASSET_FIELDS = `\n id title type category status location currentValue purchasePrice\n appreciationPercent rentalYield imageUrl\n`;\n\nexport const MARKETPLACE_SERVICE_FIELDS = `\n id name category description providerName rating reviewCount priceRange\n responseTime availableAreas featured verified imageUrl\n`;\n\nexport const LEGAL_SERVICE_FIELDS = `\n id title category description providerName providerRating status consultationFee\n priceRange estimatedDuration documentsRequired features\n`;\n\nexport const AREA_INSIGHT_FIELDS = `\n id areaName city avgPropertyPrice avgRentalYield appreciationRate population\n safetyScore connectivityScore amenitiesScore greenCoverPercent schoolsNearby\n hospitalsNearby upcomingProjects\n`;\n\nexport const MARKET_TREND_FIELDS = `\n id monthLabel avgPrice avgRent priceChangePercent demandIndex supplyIndex\n`;\n\nexport const HOME_LOAN_OFFER_FIELDS = `\n id bankName interestRate maxAmount maxTenure processingFee prepaymentCharges\n emiPerLakh rating specialOffer features\n`;\n\nexport const VERIFICATION_ITEM_FIELDS = `\n id entityType entityLabel status priority notes submittedAt\n`;\n\nexport const DASHBOARD_STATS_FIELDS = `\n totalProperties totalValue totalPortfolioValue totalInvestments investmentReturns\n monthlyRevenue occupancyRate totalTenants activeTransactions pendingVerifications\n maintenanceRequests upcomingViewings unreadMessages\n`;\n\n// ---------------------------------------------------------------------------\n// Properties\n// ---------------------------------------------------------------------------\n\nexport const GET_PROPERTY = `\n query HousingVistaProperty($id: ID!) {\n housingvistaProperty(id: $id) {\n ${PROPERTY_FIELDS}\n }\n }\n`;\n\nexport const LIST_PROPERTIES = `\n query HousingVistaProperties(\n $filter: HousingVistaPropertyFilterInput\n $pagination: HousingVistaPaginationInput\n ) {\n housingvistaProperties(filter: $filter, pagination: $pagination) {\n ${PROPERTY_FIELDS}\n }\n }\n`;\n\nexport const CREATE_PROPERTY = `\n mutation HousingVistaCreateProperty($input: CreatePropertyInput!) {\n createHousingvistaProperty(input: $input) {\n ${PROPERTY_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_PROPERTY = `\n mutation HousingVistaUpdateProperty($id: ID!, $input: UpdatePropertyInput!) {\n updateHousingvistaProperty(id: $id, input: $input) {\n ${PROPERTY_FIELDS}\n }\n }\n`;\n\nexport const DELETE_PROPERTY = `\n mutation HousingVistaDeleteProperty($id: ID!) {\n deleteHousingvistaProperty(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Investments\n// ---------------------------------------------------------------------------\n\nexport const GET_INVESTMENT = `\n query HousingVistaInvestment($id: ID!) {\n housingvistaInvestment(id: $id) {\n ${INVESTMENT_FIELDS}\n }\n }\n`;\n\nexport const LIST_INVESTMENTS = `\n query HousingVistaInvestments($pagination: HousingVistaPaginationInput) {\n housingvistaInvestments(pagination: $pagination) {\n ${INVESTMENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Transactions\n// ---------------------------------------------------------------------------\n\nexport const GET_TRANSACTION = `\n query HousingVistaTransaction($id: ID!) {\n housingvistaTransaction(id: $id) {\n ${TRANSACTION_FIELDS}\n }\n }\n`;\n\nexport const LIST_TRANSACTIONS = `\n query HousingVistaTransactions($pagination: HousingVistaPaginationInput) {\n housingvistaTransactions(pagination: $pagination) {\n ${TRANSACTION_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Rentals + AMC contracts\n// ---------------------------------------------------------------------------\n\nexport const LIST_RENTAL_UNITS = `\n query HousingVistaRentalUnits($pagination: HousingVistaPaginationInput) {\n housingvistaRentalUnits(pagination: $pagination) {\n ${RENTAL_UNIT_FIELDS}\n }\n }\n`;\n\nexport const LIST_AMC_CONTRACTS = `\n query HousingVistaAmcContracts($pagination: HousingVistaPaginationInput) {\n housingvistaAmcContracts(pagination: $pagination) {\n ${AMC_CONTRACT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Assets\n// ---------------------------------------------------------------------------\n\nexport const LIST_ASSETS = `\n query HousingVistaAssets($pagination: HousingVistaPaginationInput) {\n housingvistaAssets(pagination: $pagination) {\n ${ASSET_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Services marketplace (marketplace + legal)\n// ---------------------------------------------------------------------------\n\nexport const LIST_MARKETPLACE_SERVICES = `\n query HousingVistaMarketplaceServices($pagination: HousingVistaPaginationInput) {\n housingvistaMarketplaceServices(pagination: $pagination) {\n ${MARKETPLACE_SERVICE_FIELDS}\n }\n }\n`;\n\nexport const LIST_LEGAL_SERVICES = `\n query HousingVistaLegalServices($pagination: HousingVistaPaginationInput) {\n housingvistaLegalServices(pagination: $pagination) {\n ${LEGAL_SERVICE_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Market intelligence (area insights, trends, home loans)\n// ---------------------------------------------------------------------------\n\nexport const LIST_AREA_INSIGHTS = `\n query HousingVistaAreaInsights($pagination: HousingVistaPaginationInput) {\n housingvistaAreaInsights(pagination: $pagination) {\n ${AREA_INSIGHT_FIELDS}\n }\n }\n`;\n\nexport const LIST_MARKET_TRENDS = `\n query HousingVistaMarketTrends($pagination: HousingVistaPaginationInput) {\n housingvistaMarketTrends(pagination: $pagination) {\n ${MARKET_TREND_FIELDS}\n }\n }\n`;\n\nexport const LIST_HOME_LOAN_OFFERS = `\n query HousingVistaHomeLoanOffers($pagination: HousingVistaPaginationInput) {\n housingvistaHomeLoanOffers(pagination: $pagination) {\n ${HOME_LOAN_OFFER_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Verification queue\n// ---------------------------------------------------------------------------\n\nexport const LIST_VERIFICATION_ITEMS = `\n query HousingVistaVerificationItems($pagination: HousingVistaPaginationInput) {\n housingvistaVerificationItems(pagination: $pagination) {\n ${VERIFICATION_ITEM_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Dashboard\n// ---------------------------------------------------------------------------\n\nexport const DASHBOARD_STATS = `\n query HousingVistaDashboardStats {\n housingvistaDashboardStats {\n ${DASHBOARD_STATS_FIELDS}\n }\n }\n`;\n","/**\n * Shared zod schemas for the HousingVista tool surface.\n *\n * The two backend enums (PropertyStatus, PropertyType) are mirrored as tight\n * zod enums so Claude Desktop grounds tool calls against the exact allowed\n * values. The `context` JSON scalar on Property is modelled as a permissive\n * object record — the backend accepts arbitrary JSON, but a record shape gives\n * the LLM a typed hint.\n */\n\nimport { z } from 'zod';\n\nexport const PropertyStatusEnum = z\n .enum(['for_rent', 'for_sale', 'off_market', 'rented', 'sold', 'under_contract'])\n .describe('Listing/market status of a property');\n\nexport const PropertyTypeEnum = z\n .enum(['agricultural', 'commercial', 'industrial', 'mixed_use', 'residential'])\n .describe('Physical use-class of a property');\n\n/** Permissive JSON-object schema for `JSON` scalar inputs (e.g. Property.context). */\nexport const JsonObject = z.record(z.string(), z.unknown());\n","/**\n * HousingVista property tools — the core listing entity (full CRUD).\n *\n * Surface (5): properties_{get,list,create,update,delete}.\n * The queries are prefixed `housingvistaProperty` / `housingvistaProperties`\n * while the mutations carry the inconsistent server prefix\n * (createHousingvistaProperty / updateHousingvistaProperty /\n * deleteHousingvistaProperty) — all are called by their REAL names in\n * operations.ts.\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 { PropertyStatusEnum, PropertyTypeEnum, 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 HousingVista property 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 housingvistaProperty: Record<string, unknown> | null;\n }>(ops.GET_PROPERTY, { id });\n if (!data.housingvistaProperty) return errorResult(`Property ${id} not found`);\n return jsonResult(data.housingvistaProperty);\n } catch (error) {\n ctx.logger.error('housingvista 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:\n 'List property listings in the bound workspace with optional city/status/type/text filters and pagination.',\n inputSchema: {\n city: z.string().optional().describe('Filter by city'),\n status: PropertyStatusEnum.optional().describe('Filter by listing status'),\n type: PropertyTypeEnum.optional().describe('Filter by property use-class'),\n search: z.string().optional().describe('Free-text search across title/description'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ city, status, type, search, limit, offset }) => {\n try {\n const filter: Record<string, unknown> = {};\n if (city !== undefined) filter.city = city;\n if (status !== undefined) filter.status = status;\n if (type !== undefined) filter.type = type;\n if (search !== undefined) filter.search = search;\n\n const data = await ctx.gql.workspace.request<{\n housingvistaProperties: Array<Record<string, unknown>>;\n }>(ops.LIST_PROPERTIES, {\n filter: Object.keys(filter).length > 0 ? filter : undefined,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaProperties);\n } catch (error) {\n ctx.logger.error('housingvista 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 'Create a new property listing. `type` and `status` are required enums; `category` is a free-form label (e.g. \"Apartment\", \"Villa\", \"Plot\").',\n inputSchema: {\n title: z.string().min(1).describe('Listing title'),\n category: z.string().min(1).describe('Free-form category label, e.g. \"Apartment\", \"Villa\"'),\n type: PropertyTypeEnum.describe('Property use-class'),\n status: PropertyStatusEnum.describe('Initial listing status'),\n price: z.number().describe('Asking / listed price'),\n totalArea: z.number().describe('Total area (e.g. sq ft)'),\n bedrooms: z.number().int().describe('Number of bedrooms'),\n bathrooms: z.number().int().describe('Number of bathrooms'),\n city: z.string().min(1).describe('City'),\n state: z.string().min(1).describe('State'),\n description: z.string().optional().describe('Listing description'),\n imageUrl: z.string().optional().describe('Primary image URL'),\n context: JsonObject.optional().describe(\n 'Arbitrary context JSON (amenities, metadata, etc.)',\n ),\n },\n },\n async ({\n title,\n category,\n type,\n status,\n price,\n totalArea,\n bedrooms,\n bathrooms,\n city,\n state,\n description,\n imageUrl,\n context,\n }) => {\n try {\n const input: Record<string, unknown> = {\n title,\n category,\n type,\n status,\n price,\n totalArea,\n bedrooms,\n bathrooms,\n city,\n state,\n };\n if (description !== undefined) input.description = description;\n if (imageUrl !== undefined) input.imageUrl = imageUrl;\n if (context !== undefined) input.context = context;\n\n const data = await ctx.gql.workspace.request<{\n createHousingvistaProperty: Record<string, unknown>;\n }>(ops.CREATE_PROPERTY, { input });\n return jsonResult(data.createHousingvistaProperty);\n } catch (error) {\n ctx.logger.error('housingvista 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 server.registerTool(\n track(mcpToolName(ctx.productName, 'properties_update')),\n {\n title: 'Update Property',\n description:\n 'Update a property listing. At least one mutable field must be provided. Use `status` to move a listing through its market lifecycle.',\n inputSchema: {\n id: z.string().describe('Property ID'),\n title: z.string().optional().describe('Updated title'),\n category: z.string().optional().describe('Updated category label'),\n type: PropertyTypeEnum.optional().describe('Updated use-class'),\n status: PropertyStatusEnum.optional().describe('Updated listing status'),\n price: z.number().optional().describe('Updated price'),\n totalArea: z.number().optional().describe('Updated total area'),\n bedrooms: z.number().int().optional().describe('Updated bedroom count'),\n bathrooms: z.number().int().optional().describe('Updated bathroom count'),\n city: z.string().optional().describe('Updated city'),\n state: z.string().optional().describe('Updated state'),\n description: z.string().optional().describe('Updated description'),\n imageUrl: z.string().optional().describe('Updated primary image URL'),\n context: JsonObject.optional().describe('Updated context JSON'),\n },\n },\n async ({\n id,\n title,\n category,\n type,\n status,\n price,\n totalArea,\n bedrooms,\n bathrooms,\n city,\n state,\n description,\n imageUrl,\n context,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (title !== undefined) input.title = title;\n if (category !== undefined) input.category = category;\n if (type !== undefined) input.type = type;\n if (status !== undefined) input.status = status;\n if (price !== undefined) input.price = price;\n if (totalArea !== undefined) input.totalArea = totalArea;\n if (bedrooms !== undefined) input.bedrooms = bedrooms;\n if (bathrooms !== undefined) input.bathrooms = bathrooms;\n if (city !== undefined) input.city = city;\n if (state !== undefined) input.state = state;\n if (description !== undefined) input.description = description;\n if (imageUrl !== undefined) input.imageUrl = imageUrl;\n if (context !== undefined) input.context = context;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one mutable property field (title/category/type/status/price/totalArea/bedrooms/bathrooms/city/state/description/imageUrl/context)',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n updateHousingvistaProperty: Record<string, unknown>;\n }>(ops.UPDATE_PROPERTY, { id, input });\n return jsonResult(data.updateHousingvistaProperty);\n } catch (error) {\n ctx.logger.error('housingvista properties_update failed', { error: String(error) });\n return errorResult(\n `Failed to update property: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'properties_delete')),\n {\n title: 'Delete Property',\n description: 'Delete a property listing by ID. Returns true on success.',\n inputSchema: { id: z.string().describe('Property ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n deleteHousingvistaProperty: boolean;\n }>(ops.DELETE_PROPERTY, { id });\n return jsonResult({ deleted: data.deleteHousingvistaProperty, id });\n } catch (error) {\n ctx.logger.error('housingvista properties_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete property: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista investment tools — property-investment vehicles.\n *\n * Surface (2): investments_{get,list}. Each Investment carries its embedded\n * property, investors JSON, and returns JSON.\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 registerInvestmentTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'investments_get')),\n {\n title: 'Get Investment',\n description:\n 'Fetch a single HousingVista property investment by ID, including its property, investors, and returns.',\n inputSchema: { id: z.string().describe('Investment ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaInvestment: Record<string, unknown> | null;\n }>(ops.GET_INVESTMENT, { id });\n if (!data.housingvistaInvestment) return errorResult(`Investment ${id} not found`);\n return jsonResult(data.housingvistaInvestment);\n } catch (error) {\n ctx.logger.error('housingvista investments_get failed', { error: String(error) });\n return errorResult(\n `Failed to get investment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'investments_list')),\n {\n title: 'List Investments',\n description: 'List property-investment vehicles in the bound workspace with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaInvestments: Array<Record<string, unknown>>;\n }>(ops.LIST_INVESTMENTS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaInvestments);\n } catch (error) {\n ctx.logger.error('housingvista investments_list failed', { error: String(error) });\n return errorResult(\n `Failed to list investments: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista transaction tools — property deal pipeline.\n *\n * Surface (2): transactions_{get,list}. Each transaction carries its embedded\n * property plus parties/milestones/escrow/documents JSON.\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 registerTransactionTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'transactions_get')),\n {\n title: 'Get Transaction',\n description:\n 'Fetch a single HousingVista property transaction by ID, including its property, parties, milestones, escrow, and documents.',\n inputSchema: { id: z.string().describe('Transaction ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaTransaction: Record<string, unknown> | null;\n }>(ops.GET_TRANSACTION, { id });\n if (!data.housingvistaTransaction) return errorResult(`Transaction ${id} not found`);\n return jsonResult(data.housingvistaTransaction);\n } catch (error) {\n ctx.logger.error('housingvista transactions_get failed', { error: String(error) });\n return errorResult(\n `Failed to get transaction: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'transactions_list')),\n {\n title: 'List Transactions',\n description:\n 'List property transactions (deal pipeline) in the bound workspace with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaTransactions: Array<Record<string, unknown>>;\n }>(ops.LIST_TRANSACTIONS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaTransactions);\n } catch (error) {\n ctx.logger.error('housingvista transactions_list failed', { error: String(error) });\n return errorResult(\n `Failed to list transactions: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista leasing tools — rental tenancy + annual maintenance contracts.\n *\n * Surface (2): rentals_list (RentalUnit tenancies), amc_list (AmcContract\n * maintenance packages). Both are workspace-scoped read lists with pagination.\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 registerLeasingTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'rentals_list')),\n {\n title: 'List Rental Units',\n description:\n 'List rental units (tenancies) in the bound workspace — tenant, lease window, monthly rent, and payment status — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaRentalUnits: Array<Record<string, unknown>>;\n }>(ops.LIST_RENTAL_UNITS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaRentalUnits);\n } catch (error) {\n ctx.logger.error('housingvista rentals_list failed', { error: String(error) });\n return errorResult(\n `Failed to list rental units: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'amc_list')),\n {\n title: 'List AMC Contracts',\n description:\n 'List annual maintenance contracts (AMC) in the bound workspace — package, provider, cost, and next service date — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaAmcContracts: Array<Record<string, unknown>>;\n }>(ops.LIST_AMC_CONTRACTS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaAmcContracts);\n } catch (error) {\n ctx.logger.error('housingvista amc_list failed', { error: String(error) });\n return errorResult(\n `Failed to list AMC contracts: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista asset tools — owned-asset portfolio.\n *\n * Surface (1): assets_list. Workspace-scoped read list of owned real-estate\n * assets (current value, purchase price, appreciation, rental yield).\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 registerAssetTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'assets_list')),\n {\n title: 'List Assets',\n description:\n 'List owned real-estate assets in the bound workspace — current value, purchase price, appreciation, and rental yield — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaAssets: Array<Record<string, unknown>>;\n }>(ops.LIST_ASSETS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaAssets);\n } catch (error) {\n ctx.logger.error('housingvista assets_list failed', { error: String(error) });\n return errorResult(\n `Failed to list assets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista services-marketplace tools — vendor services + legal services.\n *\n * Surface (2): marketplace_services_list (general vendor marketplace),\n * legal_services_list (legal/conveyancing services). Both are workspace-scoped\n * read lists with pagination.\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 registerMarketplaceTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'marketplace_services_list')),\n {\n title: 'List Marketplace Services',\n description:\n 'List vendor marketplace services in the bound workspace — provider, rating, price range, coverage areas, and verification flag — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaMarketplaceServices: Array<Record<string, unknown>>;\n }>(ops.LIST_MARKETPLACE_SERVICES, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaMarketplaceServices);\n } catch (error) {\n ctx.logger.error('housingvista marketplace_services_list failed', { error: String(error) });\n return errorResult(\n `Failed to list marketplace services: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'legal_services_list')),\n {\n title: 'List Legal Services',\n description:\n 'List legal/conveyancing services in the bound workspace — provider, rating, consultation fee, required documents, and estimated duration — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaLegalServices: Array<Record<string, unknown>>;\n }>(ops.LIST_LEGAL_SERVICES, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaLegalServices);\n } catch (error) {\n ctx.logger.error('housingvista legal_services_list failed', { error: String(error) });\n return errorResult(\n `Failed to list legal services: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista market-intelligence tools — area insights, market trends, and\n * home-loan offers.\n *\n * Surface (3): market_area_insights, market_trends, market_home_loans. All are\n * workspace-scoped read lists with pagination.\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 registerMarketTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'market_area_insights')),\n {\n title: 'List Area Insights',\n description:\n 'List per-area market insights in the bound workspace — average price, rental yield, appreciation rate, and liveability scores — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaAreaInsights: Array<Record<string, unknown>>;\n }>(ops.LIST_AREA_INSIGHTS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaAreaInsights);\n } catch (error) {\n ctx.logger.error('housingvista market_area_insights failed', { error: String(error) });\n return errorResult(\n `Failed to list area insights: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'market_trends')),\n {\n title: 'List Market Trends',\n description:\n 'List time-series market trends in the bound workspace — average price/rent, price change percent, and demand/supply indices by month — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaMarketTrends: Array<Record<string, unknown>>;\n }>(ops.LIST_MARKET_TRENDS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaMarketTrends);\n } catch (error) {\n ctx.logger.error('housingvista market_trends failed', { error: String(error) });\n return errorResult(\n `Failed to list market trends: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'market_home_loans')),\n {\n title: 'List Home Loan Offers',\n description:\n 'List home-loan offers in the bound workspace — bank, interest rate, max amount/tenure, processing fee, and EMI per lakh — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaHomeLoanOffers: Array<Record<string, unknown>>;\n }>(ops.LIST_HOME_LOAN_OFFERS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaHomeLoanOffers);\n } catch (error) {\n ctx.logger.error('housingvista market_home_loans failed', { error: String(error) });\n return errorResult(\n `Failed to list home loan offers: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista verification tools — the moderation/verification queue.\n *\n * Surface (1): verification_list. Workspace-scoped read list of pending\n * verification items (entity type/label, status, priority).\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 registerVerificationTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'verification_list')),\n {\n title: 'List Verification Items',\n description:\n 'List items in the verification/moderation queue for the bound workspace — entity type/label, status, and priority — with pagination.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n },\n },\n async ({ limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaVerificationItems: Array<Record<string, unknown>>;\n }>(ops.LIST_VERIFICATION_ITEMS, {\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.housingvistaVerificationItems);\n } catch (error) {\n ctx.logger.error('housingvista verification_list failed', { error: String(error) });\n return errorResult(\n `Failed to list verification items: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * HousingVista analytics tools — portfolio dashboard.\n *\n * Surface (1): analytics_dashboard. Maps to the @rbac wspace-scoped\n * housingvistaDashboardStats query (headline portfolio KPIs).\n *\n * NOTE: the HousingVista subgraph exposes no @public health probe (only the\n * `_empty` placeholder), so this module ships no `health` tool.\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_dashboard')),\n {\n title: 'HousingVista Dashboard Stats',\n description:\n 'Headline portfolio KPIs: total properties/value/portfolio-value, investments + returns, monthly revenue, occupancy rate, tenants, active transactions, pending verifications, maintenance requests, upcoming viewings, and unread messages.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{\n housingvistaDashboardStats: Record<string, unknown>;\n }>(ops.DASHBOARD_STATS, {});\n return jsonResult(data.housingvistaDashboardStats);\n } catch (error) {\n ctx.logger.error('housingvista analytics_dashboard failed', { error: String(error) });\n return errorResult(\n `Failed to get dashboard 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 { DASHBOARD_STATS, LIST_PROPERTIES, LIST_MARKET_TRENDS } from './operations.js';\n\n/**\n * Read-only HousingVista 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 registerHousingVistaResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const dashboardUri = track(mcpResourceUri(ctx.productName, 'dashboard'));\n const propertiesUri = track(mcpResourceUri(ctx.productName, 'properties'));\n const marketUri = track(mcpResourceUri(ctx.productName, 'market'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'housingvista-schema',\n schemaUri,\n {\n title: 'HousingVista Domain Schema',\n description:\n 'Overview of the HousingVista real-estate 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 = `# HousingVista Domain (Overview)\n\nEnd-to-end real-estate platform: listings, transactions, investments, rentals,\nmaintenance contracts, a services marketplace, market intelligence, and a\nverification queue.\n\n## Entities\n- Property — a property listing (the core entity; full CRUD)\n- Investment — a property-investment vehicle (embeds property, investors, returns)\n- HousingVistaTransaction — a property deal (parties, milestones, escrow, documents)\n- RentalUnit — a rental tenancy (tenant, lease window, rent, payment status)\n- AmcContract — an annual maintenance contract (package, provider, service date)\n- HousingVistaAsset — an owned real-estate asset (value, appreciation, yield)\n- MarketplaceService — a vendor marketplace service\n- LegalService — a legal/conveyancing service\n- AreaInsight — per-area market intelligence (price, yield, liveability scores)\n- MarketTrend — time-series market trends (price/rent, demand/supply indices)\n- HomeLoanOffer — a bank home-loan offer\n- VerificationItem — an item in the verification/moderation queue\n\n## Enums\n- PropertyStatus: for_rent, for_sale, off_market, rented, sold, under_contract\n- PropertyType: agricultural, commercial, industrial, mixed_use, residential\n\n## Tool groups\nproperties (CRUD), investments, transactions, leasing (rentals + amc), assets,\nmarketplace (marketplace + legal services), market (area insights + trends +\nhome loans), verification, analytics. All run against the WORKSPACE gateway\n(workspace-scoped).\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://dashboard — headline KPIs\n server.registerResource(\n 'housingvista-dashboard',\n dashboardUri,\n {\n title: 'HousingVista Dashboard Stats',\n description:\n 'Live headline portfolio KPIs (properties, value, investments, occupancy, tenants, transactions).',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${dashboardUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ housingvistaDashboardStats: unknown }>(\n DASHBOARD_STATS,\n {},\n );\n return {\n contents: [\n {\n uri: dashboardUri,\n text: JSON.stringify(data.housingvistaDashboardStats, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: dashboardUri,\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 — recent listings\n server.registerResource(\n 'housingvista-properties',\n propertiesUri,\n {\n title: 'HousingVista Property Listings',\n description: 'The first 50 property listings 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<{ housingvistaProperties: unknown }>(\n LIST_PROPERTIES,\n { pagination: { limit: 50, offset: 0 } },\n );\n return {\n contents: [\n {\n uri: propertiesUri,\n text: JSON.stringify(data.housingvistaProperties, 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 // <product>://market — market trends\n server.registerResource(\n 'housingvista-market',\n marketUri,\n {\n title: 'HousingVista Market Trends',\n description:\n 'Time-series market trends (price/rent, demand/supply indices) for the workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${marketUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ housingvistaMarketTrends: unknown }>(\n LIST_MARKET_TRENDS,\n { pagination: { limit: 50, offset: 0 } },\n );\n return {\n contents: [\n {\n uri: marketUri,\n text: JSON.stringify(data.housingvistaMarketTrends, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: marketUri,\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 * HousingVista MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerHousingVistaPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const listingName = track(mcpPromptName(p, 'property-listing'));\n const portfolioName = track(mcpPromptName(p, 'portfolio-review'));\n\n // <product>-property-listing — create + verify a listing\n server.registerPrompt(\n listingName,\n {\n title: 'Property Listing',\n description:\n 'Guide for listing a new HousingVista property end to end: create the listing, enrich it, cross-check the local market, and move it to market.',\n argsSchema: {\n city: z.string().optional().describe('Target city'),\n type: z.string().optional().describe('Property type (use-class)'),\n },\n },\n ({ city, type }) => {\n ctx.logger.debug(`Prompt ${listingName} called`, { city, type });\n const cityNote = city ? `Target city is \"${city}\".` : 'Ask the user for the city.';\n const typeNote = type\n ? `Use property type ${type}.`\n : 'Help the user pick a PropertyType (residential/commercial/industrial/agricultural/mixed_use).';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me list a new HousingVista property.\n\n1. **Market Check**: Use ${p}_market_area_insights and ${p}_market_trends to ground pricing for the area. ${cityNote}\n2. **Create Listing**: Use ${p}_properties_create. ${typeNote} Provide title, category, price, totalArea, bedrooms, bathrooms, city, and state. Set status=for_sale or for_rent.\n3. **Review**: Use ${p}_properties_get to confirm the created listing, then ${p}_properties_update to refine description/imageUrl/context if needed.\n4. **Finance Options**: Use ${p}_market_home_loans to surface relevant home-loan offers for prospective buyers.\n5. **Verify Catalog**: Use ${p}_properties_list filtered by city/type/status to confirm the listing appears.\n\nShow results at each step and confirm before publishing.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-portfolio-review — review the portfolio\n server.registerPrompt(\n portfolioName,\n {\n title: 'Portfolio Review',\n description:\n 'Review workflow for a real-estate portfolio: headline KPIs, owned assets, active transactions, investments, rental income, maintenance contracts, and the verification queue.',\n argsSchema: {},\n },\n () => {\n ctx.logger.debug(`Prompt ${portfolioName} called`);\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run a HousingVista portfolio review.\n\n1. **KPIs**: Use ${p}_analytics_dashboard for headline portfolio numbers (value, occupancy, returns).\n2. **Assets**: Use ${p}_assets_list to review owned assets — current value, appreciation, and rental yield.\n3. **Deal Pipeline**: Use ${p}_transactions_list to check active transactions and their milestones/escrow status.\n4. **Investments**: Use ${p}_investments_list to review investment vehicles and their returns.\n5. **Rental Income**: Use ${p}_rentals_list to check tenancies and payment status; flag overdue rents.\n6. **Maintenance**: Use ${p}_amc_list to review AMC contracts and upcoming service dates.\n7. **Verification**: Use ${p}_verification_list to clear the moderation/verification queue, prioritising high-priority items.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * HousingVista module — domain module for the future-products ecosystem program.\n *\n * Covers all 12 @key entities (+ the dashboard stats object) of\n * wspace-housingvista-svc grouped into per-entity sub-APIs: properties,\n * investments, transactions, leasing (rentals + amc), assets, marketplace\n * (marketplace + legal services), market (area insights + trends + home loans),\n * verification, analytics. Mirrors the kadaikodi module's structure\n * (tools/<entity>.ts + resources.ts + prompts.ts) and the canonical tags\n * module's typing discipline.\n *\n * Backend: ~/products/wspace/housingvista/wspace-housingvista-svc/\n * (Hive service name `housingvista`). All operations run against the WORKSPACE\n * gateway. The subgraph exposes no @public health probe, so this module ships\n * no `health` tool.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerPropertyTools } from './tools/properties.js';\nimport { registerInvestmentTools } from './tools/investments.js';\nimport { registerTransactionTools } from './tools/transactions.js';\nimport { registerLeasingTools } from './tools/leasing.js';\nimport { registerAssetTools } from './tools/assets.js';\nimport { registerMarketplaceTools } from './tools/marketplace.js';\nimport { registerMarketTools } from './tools/market.js';\nimport { registerVerificationTools } from './tools/verification.js';\nimport { registerAnalyticsTools } from './tools/analytics.js';\nimport { registerHousingVistaResources } from './resources.js';\nimport { registerHousingVistaPrompts } from './prompts.js';\n\nconst housingvistaModule: McpModule = {\n id: 'housingvista',\n version: '0.0.1',\n displayName: 'HousingVista',\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 registerPropertyTools(server, ctx, trackTool);\n registerInvestmentTools(server, ctx, trackTool);\n registerTransactionTools(server, ctx, trackTool);\n registerLeasingTools(server, ctx, trackTool);\n registerAssetTools(server, ctx, trackTool);\n registerMarketplaceTools(server, ctx, trackTool);\n registerMarketTools(server, ctx, trackTool);\n registerVerificationTools(server, ctx, trackTool);\n registerAnalyticsTools(server, ctx, trackTool);\n\n registerHousingVistaResources(server, ctx, trackResource);\n registerHousingVistaPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default housingvistaModule;\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mcpToolName, errorResult, jsonResult, mcpResourceUri, mcpPromptName } from '../../chunk-
|
|
1
|
+
import { mcpToolName, errorResult, jsonResult, mcpResourceUri, mcpPromptName } from '../../chunk-YOSQUY3M.js';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
4
|
// src/modules/housingvista/operations.ts
|
|
@@ -18,20 +18,6 @@ var McpInternalError = class extends Error {
|
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
// src/core/result.ts
|
|
22
|
-
function jsonResult(data, structured) {
|
|
23
|
-
const result = {
|
|
24
|
-
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
25
|
-
};
|
|
26
|
-
return result;
|
|
27
|
-
}
|
|
28
|
-
function errorResult(message, hint) {
|
|
29
|
-
const text = hint ? `${message}
|
|
30
|
-
|
|
31
|
-
Hint: ${hint}` : message;
|
|
32
|
-
return { content: [{ type: "text", text }], isError: true };
|
|
33
|
-
}
|
|
34
|
-
|
|
35
21
|
// src/core/tool-name.ts
|
|
36
22
|
var MAX_TOOL_NAME_LENGTH = 63;
|
|
37
23
|
function assertSafeName(name, kind) {
|
|
@@ -50,6 +36,20 @@ function mcpToolName(productName, ...parts) {
|
|
|
50
36
|
return assertSafeName(name);
|
|
51
37
|
}
|
|
52
38
|
|
|
39
|
+
// src/core/result.ts
|
|
40
|
+
function jsonResult(data, structured) {
|
|
41
|
+
const result = {
|
|
42
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
43
|
+
};
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
function errorResult(message, hint) {
|
|
47
|
+
const text = hint ? `${message}
|
|
48
|
+
|
|
49
|
+
Hint: ${hint}` : message;
|
|
50
|
+
return { content: [{ type: "text", text }], isError: true };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
53
|
// src/modules/integrations/operations.ts
|
|
54
54
|
var GET_PROVIDERS = `
|
|
55
55
|
query GetProviders($filter: ProviderFilterInput, $pagination: IntegrationsPaginationInput) {
|