@burdenoff/mcp-libs 2026.704.1 → 2026.719.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +16 -42
- package/dist/modules/movethewheels/index.cjs.map +1 -1
- package/dist/modules/movethewheels/index.js +3 -29
- package/dist/modules/movethewheels/index.js.map +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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/result.ts","../../../src/core/tool-name.ts","../../../src/modules/semanticfed/operations.ts","../../../src/modules/semanticfed/tools/shared.ts","../../../src/modules/semanticfed/tools/connectors.ts","../../../src/modules/semanticfed/tools/datasources.ts","../../../src/modules/semanticfed/tools/connections.ts","../../../src/modules/semanticfed/tools/models.ts","../../../src/modules/semanticfed/tools/entities.ts","../../../src/modules/semanticfed/tools/dimensions.ts","../../../src/modules/semanticfed/tools/metrics.ts","../../../src/modules/semanticfed/tools/relationships.ts","../../../src/modules/semanticfed/tools/queries.ts","../../../src/modules/semanticfed/tools/runs.ts","../../../src/modules/semanticfed/tools/policies.ts","../../../src/modules/semanticfed/tools/health.ts","../../../src/modules/semanticfed/resources.ts","../../../src/modules/semanticfed/prompts.ts","../../../src/modules/semanticfed/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 SemanticFed MCP module.\n *\n * SemanticFed is the data-federation platform that unifies databases,\n * warehouses, lakes, and APIs behind one governed semantic layer so teams can\n * query everything in place without moving it. Backend subgraph:\n * ~/products/wspace/semanticfed/wspace-semanticfed-svc/\n * (Hive service name `semanticfed`).\n *\n * All operations run against the WORKSPACE gateway. Workspace scoping is\n * carried by the gateway headers (x-workspace-id / X-Workspace-Authorization)\n * issued by the auth module — SemanticFed inputs do NOT carry a workspaceId.\n *\n * Every root field is prefixed `sem*` and every type/input/enum is prefixed\n * `Sem*` per the service's GraphQL naming contract; the operations below call\n * them by their EXACT real names. Connection list queries return cursor-less\n * connections (`{ items, pageInfo { cursor, hasMore } }`) driven by the shared\n * `PaginationInput` ({ cursor, limit, offset }); the smaller lists return a\n * plain `[T!]!` array.\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical kadaikodi/proserviceworld module operations files.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const CONNECTOR_FIELDS = `\n id name description kind isActive capabilities workspaceId createdAt updatedAt\n`;\n\nexport const CONNECTION_FIELDS = `\n id dataSourceId health latencyMs message probedAt workspaceId createdAt updatedAt\n`;\n\nexport const DATA_SOURCE_FIELDS = `\n id connectorId name description endpoint status pushdownEnabled secretRef tags\n lastIntrospectedAt workspaceId createdAt updatedAt\n`;\n\nexport const DIMENSION_FIELDS = `\n id entityId name description dataType expression isPrimary workspaceId createdAt updatedAt\n`;\n\nexport const METRIC_FIELDS = `\n id entityId name description aggregation expression format workspaceId createdAt updatedAt\n`;\n\nexport const ENTITY_FIELDS = `\n id modelId dataSourceId name description kind physicalName primaryKey sqlDefinition\n workspaceId createdAt updatedAt\n`;\n\nexport const RELATIONSHIP_FIELDS = `\n id modelId name description kind fromEntityId fromField toEntityId toField\n workspaceId createdAt updatedAt\n`;\n\nexport const MODEL_FIELDS = `\n id name description status version tags publishedAt workspaceId createdAt updatedAt\n`;\n\nexport const QUERY_FIELDS = `\n id modelId name description queryText parameters status cacheable cacheTtlSeconds\n tags workspaceId createdAt updatedAt\n`;\n\nexport const QUERY_RUN_FIELDS = `\n id queryId status fromCache rowCount sourcesTouched durationMs planSummary\n errorMessage runById startedAt finishedAt workspaceId createdAt updatedAt\n`;\n\nexport const ACCESS_POLICY_FIELDS = `\n id name description modelId entityId principal effect scope rule isActive\n workspaceId createdAt updatedAt\n`;\n\nconst PAGE_INFO = `pageInfo { cursor hasMore }`;\n\n// ---------------------------------------------------------------------------\n// Connectors\n// ---------------------------------------------------------------------------\n\nexport const GET_CONNECTOR = `\n query SemGetConnector($id: ID!) {\n semConnector(id: $id) {\n ${CONNECTOR_FIELDS}\n dataSources { ${DATA_SOURCE_FIELDS} }\n }\n }\n`;\n\nexport const LIST_CONNECTORS = `\n query SemListConnectors($kind: SemConnectorKind, $pagination: PaginationInput) {\n semListConnectors(kind: $kind, pagination: $pagination) {\n items { ${CONNECTOR_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_CONNECTOR = `\n mutation SemCreateConnector($input: SemCreateConnectorInput!) {\n semCreateConnector(input: $input) {\n ${CONNECTOR_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_CONNECTOR = `\n mutation SemUpdateConnector($id: ID!, $input: SemUpdateConnectorInput!) {\n semUpdateConnector(id: $id, input: $input) {\n ${CONNECTOR_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_CONNECTOR = `\n mutation SemArchiveConnector($id: ID!) {\n semArchiveConnector(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Data sources\n// ---------------------------------------------------------------------------\n\nexport const GET_DATA_SOURCE = `\n query SemGetDataSource($id: ID!) {\n semDataSource(id: $id) {\n ${DATA_SOURCE_FIELDS}\n connector { ${CONNECTOR_FIELDS} }\n connections { ${CONNECTION_FIELDS} }\n }\n }\n`;\n\nexport const LIST_DATA_SOURCES = `\n query SemListDataSources(\n $connectorId: ID\n $status: SemDataSourceStatus\n $pagination: PaginationInput\n ) {\n semListDataSources(connectorId: $connectorId, status: $status, pagination: $pagination) {\n items { ${DATA_SOURCE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_DATA_SOURCE = `\n mutation SemCreateDataSource($input: SemCreateDataSourceInput!) {\n semCreateDataSource(input: $input) {\n ${DATA_SOURCE_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_DATA_SOURCE = `\n mutation SemUpdateDataSource($id: ID!, $input: SemUpdateDataSourceInput!) {\n semUpdateDataSource(id: $id, input: $input) {\n ${DATA_SOURCE_FIELDS}\n }\n }\n`;\n\nexport const TRANSITION_DATA_SOURCE = `\n mutation SemTransitionDataSource($id: ID!, $status: SemDataSourceStatus!) {\n semTransitionDataSource(id: $id, status: $status) {\n ${DATA_SOURCE_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_DATA_SOURCE = `\n mutation SemArchiveDataSource($id: ID!) {\n semArchiveDataSource(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Connections (health probes)\n// ---------------------------------------------------------------------------\n\nexport const LIST_CONNECTIONS = `\n query SemListConnections($dataSourceId: ID!) {\n semListConnections(dataSourceId: $dataSourceId) {\n ${CONNECTION_FIELDS}\n }\n }\n`;\n\nexport const RECORD_CONNECTION = `\n mutation SemRecordConnection($input: SemRecordConnectionInput!) {\n semRecordConnection(input: $input) {\n ${CONNECTION_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Semantic models\n// ---------------------------------------------------------------------------\n\nexport const GET_MODEL = `\n query SemGetModel($id: ID!) {\n semModel(id: $id) {\n ${MODEL_FIELDS}\n entities { ${ENTITY_FIELDS} }\n relationships { ${RELATIONSHIP_FIELDS} }\n }\n }\n`;\n\nexport const LIST_MODELS = `\n query SemListModels($status: SemModelStatus, $pagination: PaginationInput) {\n semListModels(status: $status, pagination: $pagination) {\n items { ${MODEL_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_MODEL = `\n mutation SemCreateModel($input: SemCreateModelInput!) {\n semCreateModel(input: $input) {\n ${MODEL_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_MODEL = `\n mutation SemUpdateModel($id: ID!, $input: SemUpdateModelInput!) {\n semUpdateModel(id: $id, input: $input) {\n ${MODEL_FIELDS}\n }\n }\n`;\n\nexport const PUBLISH_MODEL = `\n mutation SemPublishModel($id: ID!) {\n semPublishModel(id: $id) {\n ${MODEL_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_MODEL = `\n mutation SemArchiveModel($id: ID!) {\n semArchiveModel(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Entities (+ dimensions + metrics)\n// ---------------------------------------------------------------------------\n\nexport const GET_ENTITY = `\n query SemGetEntity($id: ID!) {\n semEntity(id: $id) {\n ${ENTITY_FIELDS}\n dimensions { ${DIMENSION_FIELDS} }\n metrics { ${METRIC_FIELDS} }\n }\n }\n`;\n\nexport const LIST_ENTITIES = `\n query SemListEntities($modelId: ID!) {\n semListEntities(modelId: $modelId) {\n ${ENTITY_FIELDS}\n }\n }\n`;\n\nexport const CREATE_ENTITY = `\n mutation SemCreateEntity($input: SemCreateEntityInput!) {\n semCreateEntity(input: $input) {\n ${ENTITY_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_ENTITY = `\n mutation SemUpdateEntity($id: ID!, $input: SemUpdateEntityInput!) {\n semUpdateEntity(id: $id, input: $input) {\n ${ENTITY_FIELDS}\n }\n }\n`;\n\nexport const DELETE_ENTITY = `\n mutation SemDeleteEntity($id: ID!) {\n semDeleteEntity(id: $id)\n }\n`;\n\nexport const CREATE_DIMENSION = `\n mutation SemCreateDimension($input: SemCreateDimensionInput!) {\n semCreateDimension(input: $input) {\n ${DIMENSION_FIELDS}\n }\n }\n`;\n\nexport const CREATE_METRIC = `\n mutation SemCreateMetric($input: SemCreateMetricInput!) {\n semCreateMetric(input: $input) {\n ${METRIC_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Relationships\n// ---------------------------------------------------------------------------\n\nexport const LIST_RELATIONSHIPS = `\n query SemListRelationships($modelId: ID!) {\n semListRelationships(modelId: $modelId) {\n ${RELATIONSHIP_FIELDS}\n }\n }\n`;\n\nexport const CREATE_RELATIONSHIP = `\n mutation SemCreateRelationship($input: SemCreateRelationshipInput!) {\n semCreateRelationship(input: $input) {\n ${RELATIONSHIP_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Saved federated queries\n// ---------------------------------------------------------------------------\n\nexport const GET_QUERY = `\n query SemGetQuery($id: ID!) {\n semQuery(id: $id) {\n ${QUERY_FIELDS}\n runs { ${QUERY_RUN_FIELDS} }\n }\n }\n`;\n\nexport const LIST_QUERIES = `\n query SemListQueries(\n $modelId: ID\n $status: SemQueryStatus\n $pagination: PaginationInput\n ) {\n semListQueries(modelId: $modelId, status: $status, pagination: $pagination) {\n items { ${QUERY_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_QUERY = `\n mutation SemCreateQuery($input: SemCreateQueryInput!) {\n semCreateQuery(input: $input) {\n ${QUERY_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_QUERY = `\n mutation SemUpdateQuery($id: ID!, $input: SemUpdateQueryInput!) {\n semUpdateQuery(id: $id, input: $input) {\n ${QUERY_FIELDS}\n }\n }\n`;\n\nexport const PUBLISH_QUERY = `\n mutation SemPublishQuery($id: ID!) {\n semPublishQuery(id: $id) {\n ${QUERY_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_QUERY = `\n mutation SemArchiveQuery($id: ID!) {\n semArchiveQuery(id: $id)\n }\n`;\n\nexport const RUN_QUERY = `\n mutation SemRunQuery($id: ID!) {\n semRunQuery(id: $id) {\n ${QUERY_RUN_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Query runs\n// ---------------------------------------------------------------------------\n\nexport const LIST_QUERY_RUNS = `\n query SemListQueryRuns(\n $queryId: ID!\n $status: SemQueryRunStatus\n $pagination: PaginationInput\n ) {\n semListQueryRuns(queryId: $queryId, status: $status, pagination: $pagination) {\n items { ${QUERY_RUN_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Access policies (governance)\n// ---------------------------------------------------------------------------\n\nexport const LIST_ACCESS_POLICIES = `\n query SemListAccessPolicies($modelId: ID, $entityId: ID) {\n semListAccessPolicies(modelId: $modelId, entityId: $entityId) {\n ${ACCESS_POLICY_FIELDS}\n }\n }\n`;\n\nexport const CREATE_ACCESS_POLICY = `\n mutation SemCreateAccessPolicy($input: SemCreateAccessPolicyInput!) {\n semCreateAccessPolicy(input: $input) {\n ${ACCESS_POLICY_FIELDS}\n }\n }\n`;\n\nexport const SET_ACCESS_POLICY_ACTIVE = `\n mutation SemSetAccessPolicyActive($id: ID!, $isActive: Boolean!) {\n semSetAccessPolicyActive(id: $id, isActive: $isActive) {\n ${ACCESS_POLICY_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Health\n// ---------------------------------------------------------------------------\n\nexport const HEALTH = `\n query SemHealth {\n semHealth\n }\n`;\n","/**\n * Shared zod schemas for the SemanticFed tool surface.\n *\n * Every backend enum is mirrored as a tight zod enum so Claude Desktop grounds\n * tool calls against the exact allowed values. JSON scalar inputs (connector\n * `capabilities`, data-source `endpoint`, query `parameters`, policy `rule`)\n * are modelled as permissive object records — the backend accepts arbitrary\n * JSON, but a record shape gives the LLM a typed hint. `DateTime` scalar\n * inputs are accepted as ISO-8601 strings.\n */\n\nimport { z } from 'zod';\n\nexport const ConnectorKindEnum = z\n .enum([\n 'BIGQUERY',\n 'CLICKHOUSE',\n 'DATABRICKS',\n 'GRAPHQL_API',\n 'MONGODB',\n 'MYSQL',\n 'OTHER',\n 'POSTGRES',\n 'REDSHIFT',\n 'REST_API',\n 'S3_PARQUET',\n 'SNOWFLAKE',\n ])\n .describe('Backing technology of a connector');\n\nexport const DataSourceStatusEnum = z\n .enum(['CONNECTED', 'DEGRADED', 'DISABLED', 'DISCONNECTED', 'DRAFT'])\n .describe('Connectivity lifecycle status of a data source');\n\nexport const ConnectionHealthEnum = z\n .enum(['DEGRADED', 'HEALTHY', 'UNKNOWN', 'UNREACHABLE'])\n .describe('Health classification reported by a connection probe');\n\nexport const ModelStatusEnum = z\n .enum(['ARCHIVED', 'DEPRECATED', 'DRAFT', 'PUBLISHED'])\n .describe('Lifecycle status of a semantic model');\n\nexport const EntityKindEnum = z\n .enum(['DERIVED', 'EXTERNAL', 'TABLE', 'VIEW'])\n .describe('Physical/logical kind of a semantic entity');\n\nexport const DataTypeEnum = z\n .enum(['BOOLEAN', 'DATE', 'DECIMAL', 'GEO', 'INTEGER', 'JSON', 'STRING', 'TIMESTAMP'])\n .describe('Data type of a dimension');\n\nexport const AggregationEnum = z\n .enum(['AVG', 'COUNT', 'COUNT_DISTINCT', 'CUSTOM', 'MAX', 'MEDIAN', 'MIN', 'SUM'])\n .describe('Aggregation function of a metric');\n\nexport const RelationshipKindEnum = z\n .enum(['MANY_TO_MANY', 'MANY_TO_ONE', 'ONE_TO_MANY', 'ONE_TO_ONE'])\n .describe('Cardinality of a relationship between entities');\n\nexport const QueryStatusEnum = z\n .enum(['ARCHIVED', 'DRAFT', 'PUBLISHED'])\n .describe('Lifecycle status of a saved federated query');\n\nexport const QueryRunStatusEnum = z\n .enum(['CANCELLED', 'FAILED', 'PLANNING', 'QUEUED', 'RUNNING', 'SUCCEEDED'])\n .describe('Execution status of a query run');\n\nexport const PolicyEffectEnum = z\n .enum(['ALLOW', 'DENY'])\n .describe('Whether an access policy ALLOWs or DENYs');\n\nexport const PolicyScopeEnum = z\n .enum(['COLUMN', 'ENTITY', 'ROW'])\n .describe('Governance scope an access policy applies at');\n\n/** Permissive JSON-object schema for `JSON` scalar inputs. */\nexport const JsonObject = z.record(z.string(), z.unknown());\n","/**\n * SemanticFed connector tools — connection-technology registry.\n *\n * Surface (5): connectors_{get,list,create,update,archive}. Maps to the real\n * root fields semConnector / semListConnectors / semCreateConnector /\n * semUpdateConnector / semArchiveConnector.\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 { ConnectorKindEnum, JsonObject } from './shared.js';\n\nexport function registerConnectorTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'connectors_get')),\n {\n title: 'Get Connector',\n description: 'Fetch a single SemanticFed connector by ID, including its data sources.',\n inputSchema: { id: z.string().describe('Connector ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semConnector: Record<string, unknown> | null;\n }>(ops.GET_CONNECTOR, { id });\n if (!data.semConnector) return errorResult(`Connector ${id} not found`);\n return jsonResult(data.semConnector);\n } catch (error) {\n ctx.logger.error('semanticfed connectors_get failed', { error: String(error) });\n return errorResult(\n `Failed to get connector: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'connectors_list')),\n {\n title: 'List Connectors',\n description:\n 'List connectors in the bound workspace, optionally filtered by kind, with limit/offset pagination.',\n inputSchema: {\n kind: ConnectorKindEnum.optional().describe('Filter by backing technology'),\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 ({ kind, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListConnectors: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_CONNECTORS, {\n kind,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.semListConnectors);\n } catch (error) {\n ctx.logger.error('semanticfed connectors_list failed', { error: String(error) });\n return errorResult(\n `Failed to list connectors: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'connectors_create')),\n {\n title: 'Create Connector',\n description:\n 'Register a new connector. `name` is required; `kind` defaults to POSTGRES. `capabilities` is optional JSON describing supported pushdown/features.',\n inputSchema: {\n name: z.string().min(1).describe('Connector display name'),\n kind: ConnectorKindEnum.optional().describe('Backing technology (default POSTGRES)'),\n description: z.string().optional().describe('Description'),\n capabilities: JsonObject.optional().describe('Capabilities JSON (pushdown/features)'),\n },\n },\n async ({ name, kind, description, capabilities }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (kind !== undefined) input.kind = kind;\n if (description !== undefined) input.description = description;\n if (capabilities !== undefined) input.capabilities = capabilities;\n\n const data = await ctx.gql.workspace.request<{\n semCreateConnector: Record<string, unknown>;\n }>(ops.CREATE_CONNECTOR, { input });\n return jsonResult(data.semCreateConnector);\n } catch (error) {\n ctx.logger.error('semanticfed connectors_create failed', { error: String(error) });\n return errorResult(\n `Failed to create connector: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'connectors_update')),\n {\n title: 'Update Connector',\n description:\n 'Update a connector. At least one mutable field must be provided. Use `isActive` to enable/disable it.',\n inputSchema: {\n id: z.string().describe('Connector ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n kind: ConnectorKindEnum.optional().describe('Updated backing technology'),\n isActive: z.boolean().optional().describe('Updated active flag'),\n capabilities: JsonObject.optional().describe('Updated capabilities JSON'),\n },\n },\n async ({ id, name, description, kind, isActive, capabilities }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (description !== undefined) input.description = description;\n if (kind !== undefined) input.kind = kind;\n if (isActive !== undefined) input.isActive = isActive;\n if (capabilities !== undefined) input.capabilities = capabilities;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/description/kind/isActive/capabilities',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n semUpdateConnector: Record<string, unknown>;\n }>(ops.UPDATE_CONNECTOR, { id, input });\n return jsonResult(data.semUpdateConnector);\n } catch (error) {\n ctx.logger.error('semanticfed connectors_update failed', { error: String(error) });\n return errorResult(\n `Failed to update connector: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'connectors_archive')),\n {\n title: 'Archive Connector',\n description: 'Archive (soft-delete) a connector by ID. Returns true on success.',\n inputSchema: { id: z.string().describe('Connector ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ semArchiveConnector: boolean }>(\n ops.ARCHIVE_CONNECTOR,\n { id },\n );\n return jsonResult({ archived: data.semArchiveConnector });\n } catch (error) {\n ctx.logger.error('semanticfed connectors_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive connector: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed data-source tools — physical/logical sources behind a connector.\n *\n * Surface (6): data_sources_{get,list,create,update,transition,archive}. Maps to\n * semDataSource / semListDataSources / semCreateDataSource / semUpdateDataSource\n * / semTransitionDataSource / semArchiveDataSource.\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 { DataSourceStatusEnum, JsonObject } from './shared.js';\n\nexport function registerDataSourceTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'data_sources_get')),\n {\n title: 'Get Data Source',\n description:\n 'Fetch a single SemanticFed data source by ID, including its connector and connection probes.',\n inputSchema: { id: z.string().describe('Data source ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semDataSource: Record<string, unknown> | null;\n }>(ops.GET_DATA_SOURCE, { id });\n if (!data.semDataSource) return errorResult(`Data source ${id} not found`);\n return jsonResult(data.semDataSource);\n } catch (error) {\n ctx.logger.error('semanticfed data_sources_get failed', { error: String(error) });\n return errorResult(\n `Failed to get data source: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'data_sources_list')),\n {\n title: 'List Data Sources',\n description:\n 'List data sources, optionally filtered by connector and/or status, with limit/offset pagination.',\n inputSchema: {\n connectorId: z.string().optional().describe('Filter by connector ID'),\n status: DataSourceStatusEnum.optional().describe('Filter by connectivity status'),\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 ({ connectorId, status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListDataSources: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_DATA_SOURCES, {\n connectorId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.semListDataSources);\n } catch (error) {\n ctx.logger.error('semanticfed data_sources_list failed', { error: String(error) });\n return errorResult(\n `Failed to list data sources: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'data_sources_create')),\n {\n title: 'Create Data Source',\n description:\n 'Register a new data source against a connector. `connectorId` and `name` are required; `endpoint` is connection JSON and `pushdownEnabled` defaults to true.',\n inputSchema: {\n connectorId: z.string().min(1).describe('Parent connector ID'),\n name: z.string().min(1).describe('Data source display name'),\n description: z.string().optional().describe('Description'),\n endpoint: JsonObject.optional().describe('Endpoint/connection JSON'),\n secretRef: z.string().optional().describe('Key Vault secret reference for credentials'),\n pushdownEnabled: z\n .boolean()\n .optional()\n .describe('Whether query pushdown is enabled (default true)'),\n tags: z.array(z.string()).optional().describe('Tag labels'),\n },\n },\n async ({ connectorId, name, description, endpoint, secretRef, pushdownEnabled, tags }) => {\n try {\n const input: Record<string, unknown> = { connectorId, name };\n if (description !== undefined) input.description = description;\n if (endpoint !== undefined) input.endpoint = endpoint;\n if (secretRef !== undefined) input.secretRef = secretRef;\n if (pushdownEnabled !== undefined) input.pushdownEnabled = pushdownEnabled;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n semCreateDataSource: Record<string, unknown>;\n }>(ops.CREATE_DATA_SOURCE, { input });\n return jsonResult(data.semCreateDataSource);\n } catch (error) {\n ctx.logger.error('semanticfed data_sources_create failed', { error: String(error) });\n return errorResult(\n `Failed to create data source: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'data_sources_update')),\n {\n title: 'Update Data Source',\n description:\n 'Update a data source. At least one mutable field must be provided. Use `data_sources_transition` to change connectivity status.',\n inputSchema: {\n id: z.string().describe('Data source ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n endpoint: JsonObject.optional().describe('Updated endpoint/connection JSON'),\n secretRef: z.string().optional().describe('Updated secret reference'),\n pushdownEnabled: z.boolean().optional().describe('Updated pushdown flag'),\n tags: z.array(z.string()).optional().describe('Updated tag labels'),\n },\n },\n async ({ id, name, description, endpoint, secretRef, pushdownEnabled, tags }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (description !== undefined) input.description = description;\n if (endpoint !== undefined) input.endpoint = endpoint;\n if (secretRef !== undefined) input.secretRef = secretRef;\n if (pushdownEnabled !== undefined) input.pushdownEnabled = pushdownEnabled;\n if (tags !== undefined) input.tags = tags;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/description/endpoint/secretRef/pushdownEnabled/tags',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n semUpdateDataSource: Record<string, unknown>;\n }>(ops.UPDATE_DATA_SOURCE, { id, input });\n return jsonResult(data.semUpdateDataSource);\n } catch (error) {\n ctx.logger.error('semanticfed data_sources_update failed', { error: String(error) });\n return errorResult(\n `Failed to update data source: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'data_sources_transition')),\n {\n title: 'Transition Data Source',\n description:\n 'Move a data source through its connectivity lifecycle via a validated transition (DRAFT → CONNECTED → DEGRADED/DISCONNECTED/DISABLED).',\n inputSchema: {\n id: z.string().describe('Data source ID'),\n status: DataSourceStatusEnum.describe('Target connectivity status'),\n },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semTransitionDataSource: Record<string, unknown>;\n }>(ops.TRANSITION_DATA_SOURCE, { id, status });\n return jsonResult(data.semTransitionDataSource);\n } catch (error) {\n ctx.logger.error('semanticfed data_sources_transition failed', { error: String(error) });\n return errorResult(\n `Failed to transition data source: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'data_sources_archive')),\n {\n title: 'Archive Data Source',\n description: 'Archive (soft-delete) a data source by ID. Returns true on success.',\n inputSchema: { id: z.string().describe('Data source ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ semArchiveDataSource: boolean }>(\n ops.ARCHIVE_DATA_SOURCE,\n { id },\n );\n return jsonResult({ archived: data.semArchiveDataSource });\n } catch (error) {\n ctx.logger.error('semanticfed data_sources_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive data source: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed connection tools — data-source health-probe ledger.\n *\n * Surface (2): connections_list, connections_record. Maps to semListConnections\n * and semRecordConnection. Recording a probe also reconciles the data source's\n * connectivity status server-side.\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 { ConnectionHealthEnum } from './shared.js';\n\nexport function registerConnectionTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'connections_list')),\n {\n title: 'List Connection Probes',\n description: 'List the recorded connection health probes for a data source.',\n inputSchema: { dataSourceId: z.string().describe('Data source ID') },\n },\n async ({ dataSourceId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListConnections: Array<Record<string, unknown>>;\n }>(ops.LIST_CONNECTIONS, { dataSourceId });\n return jsonResult(data.semListConnections);\n } catch (error) {\n ctx.logger.error('semanticfed connections_list failed', { error: String(error) });\n return errorResult(\n `Failed to list connections: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'connections_record')),\n {\n title: 'Record Connection Probe',\n description:\n 'Record a connection health probe for a data source and reconcile its status. `dataSourceId` and `health` are required.',\n inputSchema: {\n dataSourceId: z.string().min(1).describe('Data source ID'),\n health: ConnectionHealthEnum.describe('Observed health'),\n latencyMs: z.number().int().optional().describe('Probe round-trip latency in ms'),\n message: z.string().optional().describe('Probe message / diagnostic detail'),\n },\n },\n async ({ dataSourceId, health, latencyMs, message }) => {\n try {\n const input: Record<string, unknown> = { dataSourceId, health };\n if (latencyMs !== undefined) input.latencyMs = latencyMs;\n if (message !== undefined) input.message = message;\n\n const data = await ctx.gql.workspace.request<{\n semRecordConnection: Record<string, unknown>;\n }>(ops.RECORD_CONNECTION, { input });\n return jsonResult(data.semRecordConnection);\n } catch (error) {\n ctx.logger.error('semanticfed connections_record failed', { error: String(error) });\n return errorResult(\n `Failed to record connection: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed semantic-model tools — the versioned modelling unit.\n *\n * Surface (6): models_{get,list,create,update,publish,archive}. Maps to\n * semModel / semListModels / semCreateModel / semUpdateModel / semPublishModel\n * / semArchiveModel.\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 { ModelStatusEnum } from './shared.js';\n\nexport function registerModelTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'models_get')),\n {\n title: 'Get Semantic Model',\n description: 'Fetch a single semantic model by ID, including its entities and relationships.',\n inputSchema: { id: z.string().describe('Semantic model ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semModel: Record<string, unknown> | null;\n }>(ops.GET_MODEL, { id });\n if (!data.semModel) return errorResult(`Semantic model ${id} not found`);\n return jsonResult(data.semModel);\n } catch (error) {\n ctx.logger.error('semanticfed models_get failed', { error: String(error) });\n return errorResult(\n `Failed to get semantic model: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'models_list')),\n {\n title: 'List Semantic Models',\n description:\n 'List semantic models in the bound workspace, optionally filtered by status, with limit/offset pagination.',\n inputSchema: {\n status: ModelStatusEnum.optional().describe('Filter by model status'),\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 ({ status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListModels: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_MODELS, {\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.semListModels);\n } catch (error) {\n ctx.logger.error('semanticfed models_list failed', { error: String(error) });\n return errorResult(\n `Failed to list semantic models: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'models_create')),\n {\n title: 'Create Semantic Model',\n description:\n 'Create a new draft semantic model. `name` is required; entities/relationships are added separately.',\n inputSchema: {\n name: z.string().min(1).describe('Model display name'),\n description: z.string().optional().describe('Description'),\n tags: z.array(z.string()).optional().describe('Tag labels'),\n },\n },\n async ({ name, description, tags }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (description !== undefined) input.description = description;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n semCreateModel: Record<string, unknown>;\n }>(ops.CREATE_MODEL, { input });\n return jsonResult(data.semCreateModel);\n } catch (error) {\n ctx.logger.error('semanticfed models_create failed', { error: String(error) });\n return errorResult(\n `Failed to create semantic model: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'models_update')),\n {\n title: 'Update Semantic Model',\n description:\n 'Update a semantic model. At least one mutable field must be provided. Use `models_publish` to publish a draft.',\n inputSchema: {\n id: z.string().describe('Semantic model ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n tags: z.array(z.string()).optional().describe('Updated tag labels'),\n },\n },\n async ({ id, name, description, tags }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (description !== undefined) input.description = description;\n if (tags !== undefined) input.tags = tags;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/description/tags',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n semUpdateModel: Record<string, unknown>;\n }>(ops.UPDATE_MODEL, { id, input });\n return jsonResult(data.semUpdateModel);\n } catch (error) {\n ctx.logger.error('semanticfed models_update failed', { error: String(error) });\n return errorResult(\n `Failed to update semantic model: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'models_publish')),\n {\n title: 'Publish Semantic Model',\n description:\n 'Publish a draft model — bumps its version and flips status to PUBLISHED. Returns the published model.',\n inputSchema: { id: z.string().describe('Semantic model ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semPublishModel: Record<string, unknown>;\n }>(ops.PUBLISH_MODEL, { id });\n return jsonResult(data.semPublishModel);\n } catch (error) {\n ctx.logger.error('semanticfed models_publish failed', { error: String(error) });\n return errorResult(\n `Failed to publish semantic model: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'models_archive')),\n {\n title: 'Archive Semantic Model',\n description: 'Archive (soft-delete) a semantic model by ID. Returns true on success.',\n inputSchema: { id: z.string().describe('Semantic model ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ semArchiveModel: boolean }>(\n ops.ARCHIVE_MODEL,\n { id },\n );\n return jsonResult({ archived: data.semArchiveModel });\n } catch (error) {\n ctx.logger.error('semanticfed models_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive semantic model: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed entity tools — tables/views/derived entities within a model.\n *\n * Surface (5): entities_{get,list,create,update,delete}. Maps to semEntity /\n * semListEntities / semCreateEntity / semUpdateEntity / semDeleteEntity.\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 { EntityKindEnum } from './shared.js';\n\nexport function registerEntityTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'entities_get')),\n {\n title: 'Get Entity',\n description: 'Fetch a single entity by ID, including its dimensions and metrics.',\n inputSchema: { id: z.string().describe('Entity ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semEntity: Record<string, unknown> | null;\n }>(ops.GET_ENTITY, { id });\n if (!data.semEntity) return errorResult(`Entity ${id} not found`);\n return jsonResult(data.semEntity);\n } catch (error) {\n ctx.logger.error('semanticfed entities_get failed', { error: String(error) });\n return errorResult(\n `Failed to get entity: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'entities_list')),\n {\n title: 'List Entities',\n description: 'List the entities that belong to a semantic model.',\n inputSchema: { modelId: z.string().describe('Owning semantic model ID') },\n },\n async ({ modelId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListEntities: Array<Record<string, unknown>>;\n }>(ops.LIST_ENTITIES, { modelId });\n return jsonResult(data.semListEntities);\n } catch (error) {\n ctx.logger.error('semanticfed entities_list failed', { error: String(error) });\n return errorResult(\n `Failed to list entities: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'entities_create')),\n {\n title: 'Create Entity',\n description:\n 'Create an entity in a model. `modelId` and `name` are required; `kind` defaults to TABLE. Bind it to a `dataSourceId` or define it with `sqlDefinition` for derived entities.',\n inputSchema: {\n modelId: z.string().min(1).describe('Owning semantic model ID'),\n name: z.string().min(1).describe('Entity display name'),\n kind: EntityKindEnum.optional().describe('Entity kind (default TABLE)'),\n dataSourceId: z.string().optional().describe('Backing data source ID'),\n description: z.string().optional().describe('Description'),\n physicalName: z.string().optional().describe('Physical table/view name'),\n primaryKey: z.string().optional().describe('Primary-key column'),\n sqlDefinition: z.string().optional().describe('SQL definition (for DERIVED/VIEW entities)'),\n },\n },\n async ({\n modelId,\n name,\n kind,\n dataSourceId,\n description,\n physicalName,\n primaryKey,\n sqlDefinition,\n }) => {\n try {\n const input: Record<string, unknown> = { modelId, name };\n if (kind !== undefined) input.kind = kind;\n if (dataSourceId !== undefined) input.dataSourceId = dataSourceId;\n if (description !== undefined) input.description = description;\n if (physicalName !== undefined) input.physicalName = physicalName;\n if (primaryKey !== undefined) input.primaryKey = primaryKey;\n if (sqlDefinition !== undefined) input.sqlDefinition = sqlDefinition;\n\n const data = await ctx.gql.workspace.request<{\n semCreateEntity: Record<string, unknown>;\n }>(ops.CREATE_ENTITY, { input });\n return jsonResult(data.semCreateEntity);\n } catch (error) {\n ctx.logger.error('semanticfed entities_create failed', { error: String(error) });\n return errorResult(\n `Failed to create entity: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'entities_update')),\n {\n title: 'Update Entity',\n description: 'Update an entity. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Entity ID'),\n name: z.string().optional().describe('Updated name'),\n kind: EntityKindEnum.optional().describe('Updated entity kind'),\n dataSourceId: z.string().optional().describe('Updated backing data source ID'),\n description: z.string().optional().describe('Updated description'),\n physicalName: z.string().optional().describe('Updated physical table/view name'),\n primaryKey: z.string().optional().describe('Updated primary-key column'),\n sqlDefinition: z.string().optional().describe('Updated SQL definition'),\n },\n },\n async ({\n id,\n name,\n kind,\n dataSourceId,\n description,\n physicalName,\n primaryKey,\n sqlDefinition,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (kind !== undefined) input.kind = kind;\n if (dataSourceId !== undefined) input.dataSourceId = dataSourceId;\n if (description !== undefined) input.description = description;\n if (physicalName !== undefined) input.physicalName = physicalName;\n if (primaryKey !== undefined) input.primaryKey = primaryKey;\n if (sqlDefinition !== undefined) input.sqlDefinition = sqlDefinition;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/kind/dataSourceId/description/physicalName/primaryKey/sqlDefinition',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n semUpdateEntity: Record<string, unknown>;\n }>(ops.UPDATE_ENTITY, { id, input });\n return jsonResult(data.semUpdateEntity);\n } catch (error) {\n ctx.logger.error('semanticfed entities_update failed', { error: String(error) });\n return errorResult(\n `Failed to update entity: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'entities_delete')),\n {\n title: 'Delete Entity',\n description:\n 'Delete an entity by ID (also removes its dimensions/metrics). Returns true on success.',\n inputSchema: { id: z.string().describe('Entity ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ semDeleteEntity: boolean }>(\n ops.DELETE_ENTITY,\n { id },\n );\n return jsonResult({ deleted: data.semDeleteEntity });\n } catch (error) {\n ctx.logger.error('semanticfed entities_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete entity: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed dimension tools — descriptive attributes on an entity.\n *\n * Surface (1): dimensions_create. Maps to semCreateDimension. Dimensions are\n * read back via `entities_get` (entity.dimensions), so there is no standalone\n * list/get root field.\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 { DataTypeEnum } from './shared.js';\n\nexport function registerDimensionTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'dimensions_create')),\n {\n title: 'Create Dimension',\n description:\n 'Add a dimension (descriptive attribute) to an entity. `entityId` and `name` are required; `dataType` defaults to STRING and `isPrimary` to false.',\n inputSchema: {\n entityId: z.string().min(1).describe('Owning entity ID'),\n name: z.string().min(1).describe('Dimension display name'),\n dataType: DataTypeEnum.optional().describe('Data type (default STRING)'),\n description: z.string().optional().describe('Description'),\n expression: z.string().optional().describe('SQL expression backing the dimension'),\n isPrimary: z\n .boolean()\n .optional()\n .describe('Whether this is the primary dimension (default false)'),\n },\n },\n async ({ entityId, name, dataType, description, expression, isPrimary }) => {\n try {\n const input: Record<string, unknown> = { entityId, name };\n if (dataType !== undefined) input.dataType = dataType;\n if (description !== undefined) input.description = description;\n if (expression !== undefined) input.expression = expression;\n if (isPrimary !== undefined) input.isPrimary = isPrimary;\n\n const data = await ctx.gql.workspace.request<{\n semCreateDimension: Record<string, unknown>;\n }>(ops.CREATE_DIMENSION, { input });\n return jsonResult(data.semCreateDimension);\n } catch (error) {\n ctx.logger.error('semanticfed dimensions_create failed', { error: String(error) });\n return errorResult(\n `Failed to create dimension: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed metric tools — aggregated measures on an entity.\n *\n * Surface (1): metrics_create. Maps to semCreateMetric. Metrics are read back\n * via `entities_get` (entity.metrics), so there is no standalone list/get root\n * field.\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 { AggregationEnum } from './shared.js';\n\nexport function registerMetricTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'metrics_create')),\n {\n title: 'Create Metric',\n description:\n 'Add a metric (aggregated measure) to an entity. `entityId` and `name` are required; `aggregation` defaults to SUM. Use `expression` for a custom SQL measure and `format` for display formatting.',\n inputSchema: {\n entityId: z.string().min(1).describe('Owning entity ID'),\n name: z.string().min(1).describe('Metric display name'),\n aggregation: AggregationEnum.optional().describe('Aggregation function (default SUM)'),\n description: z.string().optional().describe('Description'),\n expression: z.string().optional().describe('SQL expression backing the metric'),\n format: z.string().optional().describe('Display format hint (e.g. currency, percent)'),\n },\n },\n async ({ entityId, name, aggregation, description, expression, format }) => {\n try {\n const input: Record<string, unknown> = { entityId, name };\n if (aggregation !== undefined) input.aggregation = aggregation;\n if (description !== undefined) input.description = description;\n if (expression !== undefined) input.expression = expression;\n if (format !== undefined) input.format = format;\n\n const data = await ctx.gql.workspace.request<{\n semCreateMetric: Record<string, unknown>;\n }>(ops.CREATE_METRIC, { input });\n return jsonResult(data.semCreateMetric);\n } catch (error) {\n ctx.logger.error('semanticfed metrics_create failed', { error: String(error) });\n return errorResult(\n `Failed to create metric: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed relationship tools — joins between entities in a model.\n *\n * Surface (2): relationships_list, relationships_create. Maps to\n * semListRelationships and semCreateRelationship.\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 { RelationshipKindEnum } from './shared.js';\n\nexport function registerRelationshipTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'relationships_list')),\n {\n title: 'List Relationships',\n description: 'List the relationships (entity joins) that belong to a semantic model.',\n inputSchema: { modelId: z.string().describe('Owning semantic model ID') },\n },\n async ({ modelId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListRelationships: Array<Record<string, unknown>>;\n }>(ops.LIST_RELATIONSHIPS, { modelId });\n return jsonResult(data.semListRelationships);\n } catch (error) {\n ctx.logger.error('semanticfed relationships_list failed', { error: String(error) });\n return errorResult(\n `Failed to list relationships: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'relationships_create')),\n {\n title: 'Create Relationship',\n description:\n 'Define a join between two entities in a model. `modelId`, `name`, `fromEntityId`, `fromField`, `toEntityId`, and `toField` are required; `kind` defaults to MANY_TO_ONE.',\n inputSchema: {\n modelId: z.string().min(1).describe('Owning semantic model ID'),\n name: z.string().min(1).describe('Relationship display name'),\n fromEntityId: z.string().min(1).describe('Source entity ID'),\n fromField: z.string().min(1).describe('Source join field'),\n toEntityId: z.string().min(1).describe('Target entity ID'),\n toField: z.string().min(1).describe('Target join field'),\n kind: RelationshipKindEnum.optional().describe('Cardinality (default MANY_TO_ONE)'),\n description: z.string().optional().describe('Description'),\n },\n },\n async ({ modelId, name, fromEntityId, fromField, toEntityId, toField, kind, description }) => {\n try {\n const input: Record<string, unknown> = {\n modelId,\n name,\n fromEntityId,\n fromField,\n toEntityId,\n toField,\n };\n if (kind !== undefined) input.kind = kind;\n if (description !== undefined) input.description = description;\n\n const data = await ctx.gql.workspace.request<{\n semCreateRelationship: Record<string, unknown>;\n }>(ops.CREATE_RELATIONSHIP, { input });\n return jsonResult(data.semCreateRelationship);\n } catch (error) {\n ctx.logger.error('semanticfed relationships_create failed', { error: String(error) });\n return errorResult(\n `Failed to create relationship: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed saved-query tools — saved federated queries + execution.\n *\n * Surface (7): queries_{get,list,create,update,publish,archive,run}. Maps to\n * semQuery / semListQueries / semCreateQuery / semUpdateQuery / semPublishQuery\n * / semArchiveQuery / semRunQuery. `queries_run` enqueues a federated execution\n * and returns the new run record (poll with `runs_list`).\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 { QueryStatusEnum, JsonObject } from './shared.js';\n\nexport function registerQueryTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'queries_get')),\n {\n title: 'Get Query',\n description: 'Fetch a single saved query by ID, including its run history.',\n inputSchema: { id: z.string().describe('Query ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semQuery: Record<string, unknown> | null;\n }>(ops.GET_QUERY, { id });\n if (!data.semQuery) return errorResult(`Query ${id} not found`);\n return jsonResult(data.semQuery);\n } catch (error) {\n ctx.logger.error('semanticfed queries_get failed', { error: String(error) });\n return errorResult(\n `Failed to get query: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'queries_list')),\n {\n title: 'List Queries',\n description:\n 'List saved queries, optionally filtered by model and/or status, with limit/offset pagination.',\n inputSchema: {\n modelId: z.string().optional().describe('Filter by semantic model ID'),\n status: QueryStatusEnum.optional().describe('Filter by query status'),\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 ({ modelId, status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListQueries: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_QUERIES, {\n modelId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.semListQueries);\n } catch (error) {\n ctx.logger.error('semanticfed queries_list failed', { error: String(error) });\n return errorResult(\n `Failed to list queries: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'queries_create')),\n {\n title: 'Create Query',\n description:\n 'Create a new draft saved query. `name` and `queryText` are required; `cacheable` defaults to true. Bind to a `modelId` to resolve entities/metrics by name.',\n inputSchema: {\n name: z.string().min(1).describe('Query display name'),\n queryText: z.string().min(1).describe('Federated query text'),\n modelId: z.string().optional().describe('Semantic model ID the query resolves against'),\n description: z.string().optional().describe('Description'),\n parameters: JsonObject.optional().describe('Parameter defaults/schema JSON'),\n cacheable: z.boolean().optional().describe('Whether results are cacheable (default true)'),\n cacheTtlSeconds: z.number().int().optional().describe('Cache TTL in seconds'),\n tags: z.array(z.string()).optional().describe('Tag labels'),\n },\n },\n async ({\n name,\n queryText,\n modelId,\n description,\n parameters,\n cacheable,\n cacheTtlSeconds,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { name, queryText };\n if (modelId !== undefined) input.modelId = modelId;\n if (description !== undefined) input.description = description;\n if (parameters !== undefined) input.parameters = parameters;\n if (cacheable !== undefined) input.cacheable = cacheable;\n if (cacheTtlSeconds !== undefined) input.cacheTtlSeconds = cacheTtlSeconds;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n semCreateQuery: Record<string, unknown>;\n }>(ops.CREATE_QUERY, { input });\n return jsonResult(data.semCreateQuery);\n } catch (error) {\n ctx.logger.error('semanticfed queries_create failed', { error: String(error) });\n return errorResult(\n `Failed to create query: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'queries_update')),\n {\n title: 'Update Query',\n description:\n 'Update a saved query. At least one mutable field must be provided. Use `queries_publish` to publish a draft.',\n inputSchema: {\n id: z.string().describe('Query ID'),\n name: z.string().optional().describe('Updated name'),\n queryText: z.string().optional().describe('Updated query text'),\n modelId: z.string().optional().describe('Updated semantic model ID'),\n description: z.string().optional().describe('Updated description'),\n parameters: JsonObject.optional().describe('Updated parameter JSON'),\n cacheable: z.boolean().optional().describe('Updated cacheable flag'),\n cacheTtlSeconds: z.number().int().optional().describe('Updated cache TTL in seconds'),\n tags: z.array(z.string()).optional().describe('Updated tag labels'),\n },\n },\n async ({\n id,\n name,\n queryText,\n modelId,\n description,\n parameters,\n cacheable,\n cacheTtlSeconds,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (queryText !== undefined) input.queryText = queryText;\n if (modelId !== undefined) input.modelId = modelId;\n if (description !== undefined) input.description = description;\n if (parameters !== undefined) input.parameters = parameters;\n if (cacheable !== undefined) input.cacheable = cacheable;\n if (cacheTtlSeconds !== undefined) input.cacheTtlSeconds = cacheTtlSeconds;\n if (tags !== undefined) input.tags = tags;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/queryText/modelId/description/parameters/cacheable/cacheTtlSeconds/tags',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n semUpdateQuery: Record<string, unknown>;\n }>(ops.UPDATE_QUERY, { id, input });\n return jsonResult(data.semUpdateQuery);\n } catch (error) {\n ctx.logger.error('semanticfed queries_update failed', { error: String(error) });\n return errorResult(\n `Failed to update query: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'queries_publish')),\n {\n title: 'Publish Query',\n description:\n 'Publish a draft query (flips status to PUBLISHED). Returns the published query.',\n inputSchema: { id: z.string().describe('Query ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semPublishQuery: Record<string, unknown>;\n }>(ops.PUBLISH_QUERY, { id });\n return jsonResult(data.semPublishQuery);\n } catch (error) {\n ctx.logger.error('semanticfed queries_publish failed', { error: String(error) });\n return errorResult(\n `Failed to publish query: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'queries_archive')),\n {\n title: 'Archive Query',\n description: 'Archive (soft-delete) a saved query by ID. Returns true on success.',\n inputSchema: { id: z.string().describe('Query ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ semArchiveQuery: boolean }>(\n ops.ARCHIVE_QUERY,\n { id },\n );\n return jsonResult({ archived: data.semArchiveQuery });\n } catch (error) {\n ctx.logger.error('semanticfed queries_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive query: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'queries_run')),\n {\n title: 'Run Query',\n description:\n 'Enqueue a federated execution of a saved query. Returns the new run record; poll it with `runs_list`.',\n inputSchema: { id: z.string().describe('Query ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semRunQuery: Record<string, unknown>;\n }>(ops.RUN_QUERY, { id });\n return jsonResult(data.semRunQuery);\n } catch (error) {\n ctx.logger.error('semanticfed queries_run failed', { error: String(error) });\n return errorResult(\n `Failed to run query: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed query-run tools — execution history for a saved query.\n *\n * Surface (1): query_runs_list. Maps to semListQueryRuns. New runs are enqueued via\n * `queries_run`; this lists/polls their progress and results.\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 { QueryRunStatusEnum } from './shared.js';\n\nexport function registerRunTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'query_runs_list')),\n {\n title: 'List Query Runs',\n description:\n 'List the execution runs for a saved query, optionally filtered by status, with limit/offset pagination.',\n inputSchema: {\n queryId: z.string().describe('Owning query ID'),\n status: QueryRunStatusEnum.optional().describe('Filter by run status'),\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 ({ queryId, status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListQueryRuns: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_QUERY_RUNS, {\n queryId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.semListQueryRuns);\n } catch (error) {\n ctx.logger.error('semanticfed query_runs_list failed', { error: String(error) });\n return errorResult(\n `Failed to list query runs: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed access-policy tools — row/column/entity governance.\n *\n * Surface (3): access_policies_list, access_policies_create, access_policies_set_active. Maps to\n * semListAccessPolicies / semCreateAccessPolicy / semSetAccessPolicyActive.\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 { PolicyEffectEnum, PolicyScopeEnum, JsonObject } from './shared.js';\n\nexport function registerPolicyTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'access_policies_list')),\n {\n title: 'List Access Policies',\n description: 'List access policies, optionally scoped to a specific model and/or entity.',\n inputSchema: {\n modelId: z.string().optional().describe('Filter by semantic model ID'),\n entityId: z.string().optional().describe('Filter by entity ID'),\n },\n },\n async ({ modelId, entityId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListAccessPolicies: Array<Record<string, unknown>>;\n }>(ops.LIST_ACCESS_POLICIES, { modelId, entityId });\n return jsonResult(data.semListAccessPolicies);\n } catch (error) {\n ctx.logger.error('semanticfed access_policies_list failed', { error: String(error) });\n return errorResult(\n `Failed to list access policies: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'access_policies_create')),\n {\n title: 'Create Access Policy',\n description:\n 'Create a governance policy. `name` and `principal` are required; `effect` defaults to ALLOW and `scope` to ROW. Scope it to a model and/or entity, and supply a `rule` JSON for ROW/COLUMN predicates.',\n inputSchema: {\n name: z.string().min(1).describe('Policy display name'),\n principal: z\n .string()\n .min(1)\n .describe('Principal the policy applies to (role/group/user expression)'),\n effect: PolicyEffectEnum.optional().describe('ALLOW or DENY (default ALLOW)'),\n scope: PolicyScopeEnum.optional().describe('ROW, COLUMN, or ENTITY (default ROW)'),\n modelId: z.string().optional().describe('Semantic model ID the policy applies to'),\n entityId: z.string().optional().describe('Entity ID the policy applies to'),\n description: z.string().optional().describe('Description'),\n rule: JsonObject.optional().describe('Rule JSON (predicate / column mask)'),\n },\n },\n async ({ name, principal, effect, scope, modelId, entityId, description, rule }) => {\n try {\n const input: Record<string, unknown> = { name, principal };\n if (effect !== undefined) input.effect = effect;\n if (scope !== undefined) input.scope = scope;\n if (modelId !== undefined) input.modelId = modelId;\n if (entityId !== undefined) input.entityId = entityId;\n if (description !== undefined) input.description = description;\n if (rule !== undefined) input.rule = rule;\n\n const data = await ctx.gql.workspace.request<{\n semCreateAccessPolicy: Record<string, unknown>;\n }>(ops.CREATE_ACCESS_POLICY, { input });\n return jsonResult(data.semCreateAccessPolicy);\n } catch (error) {\n ctx.logger.error('semanticfed access_policies_create failed', { error: String(error) });\n return errorResult(\n `Failed to create access policy: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'access_policies_set_active')),\n {\n title: 'Set Access Policy Active',\n description: 'Enable or disable an access policy by ID. Returns the updated policy.',\n inputSchema: {\n id: z.string().describe('Access policy ID'),\n isActive: z.boolean().describe('Whether the policy should be active'),\n },\n },\n async ({ id, isActive }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semSetAccessPolicyActive: Record<string, unknown>;\n }>(ops.SET_ACCESS_POLICY_ACTIVE, { id, isActive });\n return jsonResult(data.semSetAccessPolicyActive);\n } catch (error) {\n ctx.logger.error('semanticfed access_policies_set_active failed', { error: String(error) });\n return errorResult(\n `Failed to set access policy active state: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed health tool.\n *\n * Surface (1): health — maps to the @public `semHealth` query (no auth\n * required), a liveness/identity probe for the SemanticFed subgraph.\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 registerHealthTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'health_check')),\n {\n title: 'SemanticFed Health Check',\n description:\n 'Public health probe for the SemanticFed subgraph (semHealth). Requires no authentication.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{ semHealth: string }>(ops.HEALTH, {});\n return jsonResult({ ok: true, status: data.semHealth });\n } catch (error) {\n ctx.logger.error('semanticfed health failed', { error: String(error) });\n return errorResult(\n `SemanticFed health check failed: ${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 { LIST_CONNECTORS, LIST_DATA_SOURCES, LIST_MODELS } from './operations.js';\n\n/**\n * Read-only SemanticFed 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 registerSemanticfedResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const connectorsUri = track(mcpResourceUri(ctx.productName, 'connectors'));\n const dataSourcesUri = track(mcpResourceUri(ctx.productName, 'data-sources'));\n const modelsUri = track(mcpResourceUri(ctx.productName, 'models'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'semanticfed-schema',\n schemaUri,\n {\n title: 'SemanticFed Domain Schema',\n description:\n 'Overview of the SemanticFed data-federation 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 = `# SemanticFed Domain (Overview)\n\nThe data-federation platform — unifies databases, warehouses, lakes, and APIs\nbehind one governed semantic layer so teams can query everything in place\nwithout moving it. System of record for data sources & connectors, the\nversioned semantic model, saved federated queries with run history, and access\ngovernance.\n\n## Entities\n- SemConnector — a connection-technology registry entry (has data sources)\n- SemDataSource — a physical/logical source behind a connector (has connections)\n- SemConnection — a recorded health probe for a data source\n- SemSemanticModel — the versioned modelling unit (has entities + relationships)\n- SemEntity — a table/view/derived entity (has dimensions + metrics)\n- SemDimension — a descriptive attribute on an entity\n- SemMetric — an aggregated measure on an entity\n- SemRelationship — a join between two entities\n- SemQuery — a saved federated query (has runs)\n- SemQueryRun — an execution of a saved query\n- SemAccessPolicy — a row/column/entity governance policy\n\n## Enums\n- SemConnectorKind: BIGQUERY, CLICKHOUSE, DATABRICKS, GRAPHQL_API, MONGODB, MYSQL, OTHER, POSTGRES, REDSHIFT, REST_API, S3_PARQUET, SNOWFLAKE\n- SemDataSourceStatus: DRAFT, CONNECTED, DEGRADED, DISCONNECTED, DISABLED\n- SemConnectionHealth: HEALTHY, DEGRADED, UNREACHABLE, UNKNOWN\n- SemModelStatus: DRAFT, PUBLISHED, DEPRECATED, ARCHIVED\n- SemEntityKind: TABLE, VIEW, DERIVED, EXTERNAL\n- SemDataType: STRING, INTEGER, DECIMAL, BOOLEAN, DATE, TIMESTAMP, JSON, GEO\n- SemAggregation: SUM, AVG, COUNT, COUNT_DISTINCT, MIN, MAX, MEDIAN, CUSTOM\n- SemRelationshipKind: ONE_TO_ONE, ONE_TO_MANY, MANY_TO_ONE, MANY_TO_MANY\n- SemQueryStatus: DRAFT, PUBLISHED, ARCHIVED\n- SemQueryRunStatus: QUEUED, PLANNING, RUNNING, SUCCEEDED, FAILED, CANCELLED\n- SemPolicyEffect: ALLOW, DENY\n- SemPolicyScope: ROW, COLUMN, ENTITY\n\n## Tool groups\nconnectors, data_sources, connections, models, entities, dimensions, metrics,\nrelationships, queries, query_runs, access_policies, health. All run against the WORKSPACE\ngateway (workspace-scoped) except the public health probe.\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://connectors — connector registry\n server.registerResource(\n 'semanticfed-connectors',\n connectorsUri,\n {\n title: 'SemanticFed Connectors',\n description: 'The first 50 connectors in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${connectorsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ semListConnectors: unknown }>(\n LIST_CONNECTORS,\n { pagination: { limit: 50, offset: 0 } },\n );\n return {\n contents: [\n {\n uri: connectorsUri,\n text: JSON.stringify(data.semListConnectors, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: connectorsUri,\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>://data-sources — data-source directory\n server.registerResource(\n 'semanticfed-data-sources',\n dataSourcesUri,\n {\n title: 'SemanticFed Data Sources',\n description: 'The first 50 data sources in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${dataSourcesUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ semListDataSources: unknown }>(\n LIST_DATA_SOURCES,\n { pagination: { limit: 50, offset: 0 } },\n );\n return {\n contents: [\n {\n uri: dataSourcesUri,\n text: JSON.stringify(data.semListDataSources, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: dataSourcesUri,\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>://models — semantic-model catalog\n server.registerResource(\n 'semanticfed-models',\n modelsUri,\n {\n title: 'SemanticFed Semantic Models',\n description: 'The first 50 semantic models in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${modelsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ semListModels: unknown }>(LIST_MODELS, {\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: modelsUri,\n text: JSON.stringify(data.semListModels, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: modelsUri,\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 * SemanticFed MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerSemanticfedPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const modellingName = track(mcpPromptName(p, 'model-build'));\n const federationName = track(mcpPromptName(p, 'query-federation'));\n\n // <product>-model-build — stand up a connector → source → model\n server.registerPrompt(\n modellingName,\n {\n title: 'Build Semantic Model',\n description:\n 'Guide for building a SemanticFed semantic model end to end: register a connector, attach a data source, create the model, add entities with dimensions/metrics, define relationships, and publish.',\n argsSchema: {\n name: z.string().optional().describe('Semantic model name'),\n connectorKind: z.string().optional().describe('Connector technology (e.g. POSTGRES)'),\n },\n },\n ({ name, connectorKind }) => {\n ctx.logger.debug(`Prompt ${modellingName} called`, { name, connectorKind });\n const nameNote = name ? `Use the model name \"${name}\".` : 'Ask the user for the model name.';\n const kindNote = connectorKind\n ? `Use connector kind ${connectorKind}.`\n : 'Help the user pick a SemConnectorKind (e.g. POSTGRES, SNOWFLAKE, BIGQUERY).';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me build a new SemanticFed semantic model.\n\n1. **Register Connector**: Use ${p}_connectors_create. ${kindNote}\n2. **Attach Data Source**: Use ${p}_data_sources_create with the new connectorId, an endpoint JSON, and a secretRef for credentials; then ${p}_data_sources_transition to CONNECTED once reachable (optionally record a probe with ${p}_connections_record).\n3. **Create Model**: Use ${p}_models_create. ${nameNote}\n4. **Add Entities**: Use ${p}_entities_create (modelId + kind TABLE/VIEW/DERIVED) for each table/view; bind to the dataSourceId.\n5. **Dimensions + Metrics**: Use ${p}_dimensions_create and ${p}_metrics_create on each entity.\n6. **Relationships**: Use ${p}_relationships_create to join entities (fromEntityId/fromField → toEntityId/toField, kind MANY_TO_ONE etc.).\n7. **Publish**: Use ${p}_models_publish to bump the version and flip status to PUBLISHED.\n\nShow results at each step and confirm before publishing.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-query-federation — author, run, and govern a federated query\n server.registerPrompt(\n federationName,\n {\n title: 'Federated Query',\n description:\n 'Workflow to author a saved federated query against a published model, govern it with an access policy, publish it, execute it, and inspect run results.',\n argsSchema: {\n modelId: z.string().optional().describe('Published model ID to query'),\n },\n },\n ({ modelId }) => {\n ctx.logger.debug(`Prompt ${federationName} called`, { modelId });\n const modelNote = modelId\n ? `Query against model \"${modelId}\".`\n : `First list published models with ${p}_models_list (status=PUBLISHED) and pick one.`;\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run a SemanticFed federated query workflow. ${modelNote}\n\n1. **Author**: Use ${p}_queries_create with the modelId, a queryText, and optional parameters; set cacheable + cacheTtlSeconds.\n2. **Govern**: Use ${p}_access_policies_create to add a row/column access policy (principal, effect, scope) and ${p}_access_policies_set_active to enable it.\n3. **Publish**: Use ${p}_queries_publish to move the query to PUBLISHED.\n4. **Execute**: Use ${p}_queries_run to enqueue a federated execution; it returns a run record.\n5. **Inspect**: Poll ${p}_query_runs_list (filter by status) to watch QUEUED → PLANNING → RUNNING → SUCCEEDED and read rowCount / sourcesTouched / planSummary.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * SemanticFed module — domain module for the future-products ecosystem program.\n *\n * Covers every queryable/mutable @key entity of wspace-semanticfed-svc grouped\n * into per-entity sub-APIs: connectors, data sources, connections, semantic\n * models, entities, dimensions, metrics, relationships, saved queries, query\n * runs, access policies, and a public health probe. Mirrors the\n * proserviceworld/kadaikodi module structure (tools/<entity>.ts + resources.ts\n * + prompts.ts) and the canonical tags module's typing discipline.\n *\n * Backend: ~/products/wspace/semanticfed/wspace-semanticfed-svc/\n * (Hive service name `semanticfed`). All operations run against the WORKSPACE\n * gateway. Every root field is prefixed `sem*` / every type `Sem*` per the\n * service's GraphQL naming contract; the @public `semHealth` probe is exposed\n * as `<product>_health`.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerConnectorTools } from './tools/connectors.js';\nimport { registerDataSourceTools } from './tools/datasources.js';\nimport { registerConnectionTools } from './tools/connections.js';\nimport { registerModelTools } from './tools/models.js';\nimport { registerEntityTools } from './tools/entities.js';\nimport { registerDimensionTools } from './tools/dimensions.js';\nimport { registerMetricTools } from './tools/metrics.js';\nimport { registerRelationshipTools } from './tools/relationships.js';\nimport { registerQueryTools } from './tools/queries.js';\nimport { registerRunTools } from './tools/runs.js';\nimport { registerPolicyTools } from './tools/policies.js';\nimport { registerHealthTools } from './tools/health.js';\nimport { registerSemanticfedResources } from './resources.js';\nimport { registerSemanticfedPrompts } from './prompts.js';\n\nconst semanticfedModule: McpModule = {\n id: 'semanticfed',\n version: '0.0.1',\n displayName: 'SemanticFed',\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 registerConnectorTools(server, ctx, trackTool);\n registerDataSourceTools(server, ctx, trackTool);\n registerConnectionTools(server, ctx, trackTool);\n registerModelTools(server, ctx, trackTool);\n registerEntityTools(server, ctx, trackTool);\n registerDimensionTools(server, ctx, trackTool);\n registerMetricTools(server, ctx, trackTool);\n registerRelationshipTools(server, ctx, trackTool);\n registerQueryTools(server, ctx, trackTool);\n registerRunTools(server, ctx, trackTool);\n registerPolicyTools(server, ctx, trackTool);\n registerHealthTools(server, ctx, trackTool);\n\n registerSemanticfedResources(server, ctx, trackResource);\n registerSemanticfedPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default semanticfedModule;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/tool-name.ts","../../../src/core/result.ts","../../../src/modules/semanticfed/operations.ts","../../../src/modules/semanticfed/tools/shared.ts","../../../src/modules/semanticfed/tools/connectors.ts","../../../src/modules/semanticfed/tools/datasources.ts","../../../src/modules/semanticfed/tools/connections.ts","../../../src/modules/semanticfed/tools/models.ts","../../../src/modules/semanticfed/tools/entities.ts","../../../src/modules/semanticfed/tools/dimensions.ts","../../../src/modules/semanticfed/tools/metrics.ts","../../../src/modules/semanticfed/tools/relationships.ts","../../../src/modules/semanticfed/tools/queries.ts","../../../src/modules/semanticfed/tools/runs.ts","../../../src/modules/semanticfed/tools/policies.ts","../../../src/modules/semanticfed/tools/health.ts","../../../src/modules/semanticfed/resources.ts","../../../src/modules/semanticfed/prompts.ts","../../../src/modules/semanticfed/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 SemanticFed MCP module.\n *\n * SemanticFed is the data-federation platform that unifies databases,\n * warehouses, lakes, and APIs behind one governed semantic layer so teams can\n * query everything in place without moving it. Backend subgraph:\n * ~/products/wspace/semanticfed/wspace-semanticfed-svc/\n * (Hive service name `semanticfed`).\n *\n * All operations run against the WORKSPACE gateway. Workspace scoping is\n * carried by the gateway headers (x-workspace-id / X-Workspace-Authorization)\n * issued by the auth module — SemanticFed inputs do NOT carry a workspaceId.\n *\n * Every root field is prefixed `sem*` and every type/input/enum is prefixed\n * `Sem*` per the service's GraphQL naming contract; the operations below call\n * them by their EXACT real names. Connection list queries return cursor-less\n * connections (`{ items, pageInfo { cursor, hasMore } }`) driven by the shared\n * `PaginationInput` ({ cursor, limit, offset }); the smaller lists return a\n * plain `[T!]!` array.\n *\n * Uses template-string interpolation (not gql tagged fragments) to match the\n * canonical kadaikodi/proserviceworld module operations files.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const CONNECTOR_FIELDS = `\n id name description kind isActive capabilities workspaceId createdAt updatedAt\n`;\n\nexport const CONNECTION_FIELDS = `\n id dataSourceId health latencyMs message probedAt workspaceId createdAt updatedAt\n`;\n\nexport const DATA_SOURCE_FIELDS = `\n id connectorId name description endpoint status pushdownEnabled secretRef tags\n lastIntrospectedAt workspaceId createdAt updatedAt\n`;\n\nexport const DIMENSION_FIELDS = `\n id entityId name description dataType expression isPrimary workspaceId createdAt updatedAt\n`;\n\nexport const METRIC_FIELDS = `\n id entityId name description aggregation expression format workspaceId createdAt updatedAt\n`;\n\nexport const ENTITY_FIELDS = `\n id modelId dataSourceId name description kind physicalName primaryKey sqlDefinition\n workspaceId createdAt updatedAt\n`;\n\nexport const RELATIONSHIP_FIELDS = `\n id modelId name description kind fromEntityId fromField toEntityId toField\n workspaceId createdAt updatedAt\n`;\n\nexport const MODEL_FIELDS = `\n id name description status version tags publishedAt workspaceId createdAt updatedAt\n`;\n\nexport const QUERY_FIELDS = `\n id modelId name description queryText parameters status cacheable cacheTtlSeconds\n tags workspaceId createdAt updatedAt\n`;\n\nexport const QUERY_RUN_FIELDS = `\n id queryId status fromCache rowCount sourcesTouched durationMs planSummary\n errorMessage runById startedAt finishedAt workspaceId createdAt updatedAt\n`;\n\nexport const ACCESS_POLICY_FIELDS = `\n id name description modelId entityId principal effect scope rule isActive\n workspaceId createdAt updatedAt\n`;\n\nconst PAGE_INFO = `pageInfo { cursor hasMore }`;\n\n// ---------------------------------------------------------------------------\n// Connectors\n// ---------------------------------------------------------------------------\n\nexport const GET_CONNECTOR = `\n query SemGetConnector($id: ID!) {\n semConnector(id: $id) {\n ${CONNECTOR_FIELDS}\n dataSources { ${DATA_SOURCE_FIELDS} }\n }\n }\n`;\n\nexport const LIST_CONNECTORS = `\n query SemListConnectors($kind: SemConnectorKind, $pagination: PaginationInput) {\n semListConnectors(kind: $kind, pagination: $pagination) {\n items { ${CONNECTOR_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_CONNECTOR = `\n mutation SemCreateConnector($input: SemCreateConnectorInput!) {\n semCreateConnector(input: $input) {\n ${CONNECTOR_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_CONNECTOR = `\n mutation SemUpdateConnector($id: ID!, $input: SemUpdateConnectorInput!) {\n semUpdateConnector(id: $id, input: $input) {\n ${CONNECTOR_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_CONNECTOR = `\n mutation SemArchiveConnector($id: ID!) {\n semArchiveConnector(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Data sources\n// ---------------------------------------------------------------------------\n\nexport const GET_DATA_SOURCE = `\n query SemGetDataSource($id: ID!) {\n semDataSource(id: $id) {\n ${DATA_SOURCE_FIELDS}\n connector { ${CONNECTOR_FIELDS} }\n connections { ${CONNECTION_FIELDS} }\n }\n }\n`;\n\nexport const LIST_DATA_SOURCES = `\n query SemListDataSources(\n $connectorId: ID\n $status: SemDataSourceStatus\n $pagination: PaginationInput\n ) {\n semListDataSources(connectorId: $connectorId, status: $status, pagination: $pagination) {\n items { ${DATA_SOURCE_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_DATA_SOURCE = `\n mutation SemCreateDataSource($input: SemCreateDataSourceInput!) {\n semCreateDataSource(input: $input) {\n ${DATA_SOURCE_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_DATA_SOURCE = `\n mutation SemUpdateDataSource($id: ID!, $input: SemUpdateDataSourceInput!) {\n semUpdateDataSource(id: $id, input: $input) {\n ${DATA_SOURCE_FIELDS}\n }\n }\n`;\n\nexport const TRANSITION_DATA_SOURCE = `\n mutation SemTransitionDataSource($id: ID!, $status: SemDataSourceStatus!) {\n semTransitionDataSource(id: $id, status: $status) {\n ${DATA_SOURCE_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_DATA_SOURCE = `\n mutation SemArchiveDataSource($id: ID!) {\n semArchiveDataSource(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Connections (health probes)\n// ---------------------------------------------------------------------------\n\nexport const LIST_CONNECTIONS = `\n query SemListConnections($dataSourceId: ID!) {\n semListConnections(dataSourceId: $dataSourceId) {\n ${CONNECTION_FIELDS}\n }\n }\n`;\n\nexport const RECORD_CONNECTION = `\n mutation SemRecordConnection($input: SemRecordConnectionInput!) {\n semRecordConnection(input: $input) {\n ${CONNECTION_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Semantic models\n// ---------------------------------------------------------------------------\n\nexport const GET_MODEL = `\n query SemGetModel($id: ID!) {\n semModel(id: $id) {\n ${MODEL_FIELDS}\n entities { ${ENTITY_FIELDS} }\n relationships { ${RELATIONSHIP_FIELDS} }\n }\n }\n`;\n\nexport const LIST_MODELS = `\n query SemListModels($status: SemModelStatus, $pagination: PaginationInput) {\n semListModels(status: $status, pagination: $pagination) {\n items { ${MODEL_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_MODEL = `\n mutation SemCreateModel($input: SemCreateModelInput!) {\n semCreateModel(input: $input) {\n ${MODEL_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_MODEL = `\n mutation SemUpdateModel($id: ID!, $input: SemUpdateModelInput!) {\n semUpdateModel(id: $id, input: $input) {\n ${MODEL_FIELDS}\n }\n }\n`;\n\nexport const PUBLISH_MODEL = `\n mutation SemPublishModel($id: ID!) {\n semPublishModel(id: $id) {\n ${MODEL_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_MODEL = `\n mutation SemArchiveModel($id: ID!) {\n semArchiveModel(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Entities (+ dimensions + metrics)\n// ---------------------------------------------------------------------------\n\nexport const GET_ENTITY = `\n query SemGetEntity($id: ID!) {\n semEntity(id: $id) {\n ${ENTITY_FIELDS}\n dimensions { ${DIMENSION_FIELDS} }\n metrics { ${METRIC_FIELDS} }\n }\n }\n`;\n\nexport const LIST_ENTITIES = `\n query SemListEntities($modelId: ID!) {\n semListEntities(modelId: $modelId) {\n ${ENTITY_FIELDS}\n }\n }\n`;\n\nexport const CREATE_ENTITY = `\n mutation SemCreateEntity($input: SemCreateEntityInput!) {\n semCreateEntity(input: $input) {\n ${ENTITY_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_ENTITY = `\n mutation SemUpdateEntity($id: ID!, $input: SemUpdateEntityInput!) {\n semUpdateEntity(id: $id, input: $input) {\n ${ENTITY_FIELDS}\n }\n }\n`;\n\nexport const DELETE_ENTITY = `\n mutation SemDeleteEntity($id: ID!) {\n semDeleteEntity(id: $id)\n }\n`;\n\nexport const CREATE_DIMENSION = `\n mutation SemCreateDimension($input: SemCreateDimensionInput!) {\n semCreateDimension(input: $input) {\n ${DIMENSION_FIELDS}\n }\n }\n`;\n\nexport const CREATE_METRIC = `\n mutation SemCreateMetric($input: SemCreateMetricInput!) {\n semCreateMetric(input: $input) {\n ${METRIC_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Relationships\n// ---------------------------------------------------------------------------\n\nexport const LIST_RELATIONSHIPS = `\n query SemListRelationships($modelId: ID!) {\n semListRelationships(modelId: $modelId) {\n ${RELATIONSHIP_FIELDS}\n }\n }\n`;\n\nexport const CREATE_RELATIONSHIP = `\n mutation SemCreateRelationship($input: SemCreateRelationshipInput!) {\n semCreateRelationship(input: $input) {\n ${RELATIONSHIP_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Saved federated queries\n// ---------------------------------------------------------------------------\n\nexport const GET_QUERY = `\n query SemGetQuery($id: ID!) {\n semQuery(id: $id) {\n ${QUERY_FIELDS}\n runs { ${QUERY_RUN_FIELDS} }\n }\n }\n`;\n\nexport const LIST_QUERIES = `\n query SemListQueries(\n $modelId: ID\n $status: SemQueryStatus\n $pagination: PaginationInput\n ) {\n semListQueries(modelId: $modelId, status: $status, pagination: $pagination) {\n items { ${QUERY_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\nexport const CREATE_QUERY = `\n mutation SemCreateQuery($input: SemCreateQueryInput!) {\n semCreateQuery(input: $input) {\n ${QUERY_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_QUERY = `\n mutation SemUpdateQuery($id: ID!, $input: SemUpdateQueryInput!) {\n semUpdateQuery(id: $id, input: $input) {\n ${QUERY_FIELDS}\n }\n }\n`;\n\nexport const PUBLISH_QUERY = `\n mutation SemPublishQuery($id: ID!) {\n semPublishQuery(id: $id) {\n ${QUERY_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_QUERY = `\n mutation SemArchiveQuery($id: ID!) {\n semArchiveQuery(id: $id)\n }\n`;\n\nexport const RUN_QUERY = `\n mutation SemRunQuery($id: ID!) {\n semRunQuery(id: $id) {\n ${QUERY_RUN_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Query runs\n// ---------------------------------------------------------------------------\n\nexport const LIST_QUERY_RUNS = `\n query SemListQueryRuns(\n $queryId: ID!\n $status: SemQueryRunStatus\n $pagination: PaginationInput\n ) {\n semListQueryRuns(queryId: $queryId, status: $status, pagination: $pagination) {\n items { ${QUERY_RUN_FIELDS} }\n ${PAGE_INFO}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Access policies (governance)\n// ---------------------------------------------------------------------------\n\nexport const LIST_ACCESS_POLICIES = `\n query SemListAccessPolicies($modelId: ID, $entityId: ID) {\n semListAccessPolicies(modelId: $modelId, entityId: $entityId) {\n ${ACCESS_POLICY_FIELDS}\n }\n }\n`;\n\nexport const CREATE_ACCESS_POLICY = `\n mutation SemCreateAccessPolicy($input: SemCreateAccessPolicyInput!) {\n semCreateAccessPolicy(input: $input) {\n ${ACCESS_POLICY_FIELDS}\n }\n }\n`;\n\nexport const SET_ACCESS_POLICY_ACTIVE = `\n mutation SemSetAccessPolicyActive($id: ID!, $isActive: Boolean!) {\n semSetAccessPolicyActive(id: $id, isActive: $isActive) {\n ${ACCESS_POLICY_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Health\n// ---------------------------------------------------------------------------\n\nexport const HEALTH = `\n query SemHealth {\n semHealth\n }\n`;\n","/**\n * Shared zod schemas for the SemanticFed tool surface.\n *\n * Every backend enum is mirrored as a tight zod enum so Claude Desktop grounds\n * tool calls against the exact allowed values. JSON scalar inputs (connector\n * `capabilities`, data-source `endpoint`, query `parameters`, policy `rule`)\n * are modelled as permissive object records — the backend accepts arbitrary\n * JSON, but a record shape gives the LLM a typed hint. `DateTime` scalar\n * inputs are accepted as ISO-8601 strings.\n */\n\nimport { z } from 'zod';\n\nexport const ConnectorKindEnum = z\n .enum([\n 'BIGQUERY',\n 'CLICKHOUSE',\n 'DATABRICKS',\n 'GRAPHQL_API',\n 'MONGODB',\n 'MYSQL',\n 'OTHER',\n 'POSTGRES',\n 'REDSHIFT',\n 'REST_API',\n 'S3_PARQUET',\n 'SNOWFLAKE',\n ])\n .describe('Backing technology of a connector');\n\nexport const DataSourceStatusEnum = z\n .enum(['CONNECTED', 'DEGRADED', 'DISABLED', 'DISCONNECTED', 'DRAFT'])\n .describe('Connectivity lifecycle status of a data source');\n\nexport const ConnectionHealthEnum = z\n .enum(['DEGRADED', 'HEALTHY', 'UNKNOWN', 'UNREACHABLE'])\n .describe('Health classification reported by a connection probe');\n\nexport const ModelStatusEnum = z\n .enum(['ARCHIVED', 'DEPRECATED', 'DRAFT', 'PUBLISHED'])\n .describe('Lifecycle status of a semantic model');\n\nexport const EntityKindEnum = z\n .enum(['DERIVED', 'EXTERNAL', 'TABLE', 'VIEW'])\n .describe('Physical/logical kind of a semantic entity');\n\nexport const DataTypeEnum = z\n .enum(['BOOLEAN', 'DATE', 'DECIMAL', 'GEO', 'INTEGER', 'JSON', 'STRING', 'TIMESTAMP'])\n .describe('Data type of a dimension');\n\nexport const AggregationEnum = z\n .enum(['AVG', 'COUNT', 'COUNT_DISTINCT', 'CUSTOM', 'MAX', 'MEDIAN', 'MIN', 'SUM'])\n .describe('Aggregation function of a metric');\n\nexport const RelationshipKindEnum = z\n .enum(['MANY_TO_MANY', 'MANY_TO_ONE', 'ONE_TO_MANY', 'ONE_TO_ONE'])\n .describe('Cardinality of a relationship between entities');\n\nexport const QueryStatusEnum = z\n .enum(['ARCHIVED', 'DRAFT', 'PUBLISHED'])\n .describe('Lifecycle status of a saved federated query');\n\nexport const QueryRunStatusEnum = z\n .enum(['CANCELLED', 'FAILED', 'PLANNING', 'QUEUED', 'RUNNING', 'SUCCEEDED'])\n .describe('Execution status of a query run');\n\nexport const PolicyEffectEnum = z\n .enum(['ALLOW', 'DENY'])\n .describe('Whether an access policy ALLOWs or DENYs');\n\nexport const PolicyScopeEnum = z\n .enum(['COLUMN', 'ENTITY', 'ROW'])\n .describe('Governance scope an access policy applies at');\n\n/** Permissive JSON-object schema for `JSON` scalar inputs. */\nexport const JsonObject = z.record(z.string(), z.unknown());\n","/**\n * SemanticFed connector tools — connection-technology registry.\n *\n * Surface (5): connectors_{get,list,create,update,archive}. Maps to the real\n * root fields semConnector / semListConnectors / semCreateConnector /\n * semUpdateConnector / semArchiveConnector.\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 { ConnectorKindEnum, JsonObject } from './shared.js';\n\nexport function registerConnectorTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'connectors_get')),\n {\n title: 'Get Connector',\n description: 'Fetch a single SemanticFed connector by ID, including its data sources.',\n inputSchema: { id: z.string().describe('Connector ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semConnector: Record<string, unknown> | null;\n }>(ops.GET_CONNECTOR, { id });\n if (!data.semConnector) return errorResult(`Connector ${id} not found`);\n return jsonResult(data.semConnector);\n } catch (error) {\n ctx.logger.error('semanticfed connectors_get failed', { error: String(error) });\n return errorResult(\n `Failed to get connector: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'connectors_list')),\n {\n title: 'List Connectors',\n description:\n 'List connectors in the bound workspace, optionally filtered by kind, with limit/offset pagination.',\n inputSchema: {\n kind: ConnectorKindEnum.optional().describe('Filter by backing technology'),\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 ({ kind, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListConnectors: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_CONNECTORS, {\n kind,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.semListConnectors);\n } catch (error) {\n ctx.logger.error('semanticfed connectors_list failed', { error: String(error) });\n return errorResult(\n `Failed to list connectors: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'connectors_create')),\n {\n title: 'Create Connector',\n description:\n 'Register a new connector. `name` is required; `kind` defaults to POSTGRES. `capabilities` is optional JSON describing supported pushdown/features.',\n inputSchema: {\n name: z.string().min(1).describe('Connector display name'),\n kind: ConnectorKindEnum.optional().describe('Backing technology (default POSTGRES)'),\n description: z.string().optional().describe('Description'),\n capabilities: JsonObject.optional().describe('Capabilities JSON (pushdown/features)'),\n },\n },\n async ({ name, kind, description, capabilities }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (kind !== undefined) input.kind = kind;\n if (description !== undefined) input.description = description;\n if (capabilities !== undefined) input.capabilities = capabilities;\n\n const data = await ctx.gql.workspace.request<{\n semCreateConnector: Record<string, unknown>;\n }>(ops.CREATE_CONNECTOR, { input });\n return jsonResult(data.semCreateConnector);\n } catch (error) {\n ctx.logger.error('semanticfed connectors_create failed', { error: String(error) });\n return errorResult(\n `Failed to create connector: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'connectors_update')),\n {\n title: 'Update Connector',\n description:\n 'Update a connector. At least one mutable field must be provided. Use `isActive` to enable/disable it.',\n inputSchema: {\n id: z.string().describe('Connector ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n kind: ConnectorKindEnum.optional().describe('Updated backing technology'),\n isActive: z.boolean().optional().describe('Updated active flag'),\n capabilities: JsonObject.optional().describe('Updated capabilities JSON'),\n },\n },\n async ({ id, name, description, kind, isActive, capabilities }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (description !== undefined) input.description = description;\n if (kind !== undefined) input.kind = kind;\n if (isActive !== undefined) input.isActive = isActive;\n if (capabilities !== undefined) input.capabilities = capabilities;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/description/kind/isActive/capabilities',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n semUpdateConnector: Record<string, unknown>;\n }>(ops.UPDATE_CONNECTOR, { id, input });\n return jsonResult(data.semUpdateConnector);\n } catch (error) {\n ctx.logger.error('semanticfed connectors_update failed', { error: String(error) });\n return errorResult(\n `Failed to update connector: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'connectors_archive')),\n {\n title: 'Archive Connector',\n description: 'Archive (soft-delete) a connector by ID. Returns true on success.',\n inputSchema: { id: z.string().describe('Connector ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ semArchiveConnector: boolean }>(\n ops.ARCHIVE_CONNECTOR,\n { id },\n );\n return jsonResult({ archived: data.semArchiveConnector });\n } catch (error) {\n ctx.logger.error('semanticfed connectors_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive connector: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed data-source tools — physical/logical sources behind a connector.\n *\n * Surface (6): data_sources_{get,list,create,update,transition,archive}. Maps to\n * semDataSource / semListDataSources / semCreateDataSource / semUpdateDataSource\n * / semTransitionDataSource / semArchiveDataSource.\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 { DataSourceStatusEnum, JsonObject } from './shared.js';\n\nexport function registerDataSourceTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'data_sources_get')),\n {\n title: 'Get Data Source',\n description:\n 'Fetch a single SemanticFed data source by ID, including its connector and connection probes.',\n inputSchema: { id: z.string().describe('Data source ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semDataSource: Record<string, unknown> | null;\n }>(ops.GET_DATA_SOURCE, { id });\n if (!data.semDataSource) return errorResult(`Data source ${id} not found`);\n return jsonResult(data.semDataSource);\n } catch (error) {\n ctx.logger.error('semanticfed data_sources_get failed', { error: String(error) });\n return errorResult(\n `Failed to get data source: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'data_sources_list')),\n {\n title: 'List Data Sources',\n description:\n 'List data sources, optionally filtered by connector and/or status, with limit/offset pagination.',\n inputSchema: {\n connectorId: z.string().optional().describe('Filter by connector ID'),\n status: DataSourceStatusEnum.optional().describe('Filter by connectivity status'),\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 ({ connectorId, status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListDataSources: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_DATA_SOURCES, {\n connectorId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.semListDataSources);\n } catch (error) {\n ctx.logger.error('semanticfed data_sources_list failed', { error: String(error) });\n return errorResult(\n `Failed to list data sources: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'data_sources_create')),\n {\n title: 'Create Data Source',\n description:\n 'Register a new data source against a connector. `connectorId` and `name` are required; `endpoint` is connection JSON and `pushdownEnabled` defaults to true.',\n inputSchema: {\n connectorId: z.string().min(1).describe('Parent connector ID'),\n name: z.string().min(1).describe('Data source display name'),\n description: z.string().optional().describe('Description'),\n endpoint: JsonObject.optional().describe('Endpoint/connection JSON'),\n secretRef: z.string().optional().describe('Key Vault secret reference for credentials'),\n pushdownEnabled: z\n .boolean()\n .optional()\n .describe('Whether query pushdown is enabled (default true)'),\n tags: z.array(z.string()).optional().describe('Tag labels'),\n },\n },\n async ({ connectorId, name, description, endpoint, secretRef, pushdownEnabled, tags }) => {\n try {\n const input: Record<string, unknown> = { connectorId, name };\n if (description !== undefined) input.description = description;\n if (endpoint !== undefined) input.endpoint = endpoint;\n if (secretRef !== undefined) input.secretRef = secretRef;\n if (pushdownEnabled !== undefined) input.pushdownEnabled = pushdownEnabled;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n semCreateDataSource: Record<string, unknown>;\n }>(ops.CREATE_DATA_SOURCE, { input });\n return jsonResult(data.semCreateDataSource);\n } catch (error) {\n ctx.logger.error('semanticfed data_sources_create failed', { error: String(error) });\n return errorResult(\n `Failed to create data source: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'data_sources_update')),\n {\n title: 'Update Data Source',\n description:\n 'Update a data source. At least one mutable field must be provided. Use `data_sources_transition` to change connectivity status.',\n inputSchema: {\n id: z.string().describe('Data source ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n endpoint: JsonObject.optional().describe('Updated endpoint/connection JSON'),\n secretRef: z.string().optional().describe('Updated secret reference'),\n pushdownEnabled: z.boolean().optional().describe('Updated pushdown flag'),\n tags: z.array(z.string()).optional().describe('Updated tag labels'),\n },\n },\n async ({ id, name, description, endpoint, secretRef, pushdownEnabled, tags }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (description !== undefined) input.description = description;\n if (endpoint !== undefined) input.endpoint = endpoint;\n if (secretRef !== undefined) input.secretRef = secretRef;\n if (pushdownEnabled !== undefined) input.pushdownEnabled = pushdownEnabled;\n if (tags !== undefined) input.tags = tags;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/description/endpoint/secretRef/pushdownEnabled/tags',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n semUpdateDataSource: Record<string, unknown>;\n }>(ops.UPDATE_DATA_SOURCE, { id, input });\n return jsonResult(data.semUpdateDataSource);\n } catch (error) {\n ctx.logger.error('semanticfed data_sources_update failed', { error: String(error) });\n return errorResult(\n `Failed to update data source: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'data_sources_transition')),\n {\n title: 'Transition Data Source',\n description:\n 'Move a data source through its connectivity lifecycle via a validated transition (DRAFT → CONNECTED → DEGRADED/DISCONNECTED/DISABLED).',\n inputSchema: {\n id: z.string().describe('Data source ID'),\n status: DataSourceStatusEnum.describe('Target connectivity status'),\n },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semTransitionDataSource: Record<string, unknown>;\n }>(ops.TRANSITION_DATA_SOURCE, { id, status });\n return jsonResult(data.semTransitionDataSource);\n } catch (error) {\n ctx.logger.error('semanticfed data_sources_transition failed', { error: String(error) });\n return errorResult(\n `Failed to transition data source: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'data_sources_archive')),\n {\n title: 'Archive Data Source',\n description: 'Archive (soft-delete) a data source by ID. Returns true on success.',\n inputSchema: { id: z.string().describe('Data source ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ semArchiveDataSource: boolean }>(\n ops.ARCHIVE_DATA_SOURCE,\n { id },\n );\n return jsonResult({ archived: data.semArchiveDataSource });\n } catch (error) {\n ctx.logger.error('semanticfed data_sources_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive data source: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed connection tools — data-source health-probe ledger.\n *\n * Surface (2): connections_list, connections_record. Maps to semListConnections\n * and semRecordConnection. Recording a probe also reconciles the data source's\n * connectivity status server-side.\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 { ConnectionHealthEnum } from './shared.js';\n\nexport function registerConnectionTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'connections_list')),\n {\n title: 'List Connection Probes',\n description: 'List the recorded connection health probes for a data source.',\n inputSchema: { dataSourceId: z.string().describe('Data source ID') },\n },\n async ({ dataSourceId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListConnections: Array<Record<string, unknown>>;\n }>(ops.LIST_CONNECTIONS, { dataSourceId });\n return jsonResult(data.semListConnections);\n } catch (error) {\n ctx.logger.error('semanticfed connections_list failed', { error: String(error) });\n return errorResult(\n `Failed to list connections: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'connections_record')),\n {\n title: 'Record Connection Probe',\n description:\n 'Record a connection health probe for a data source and reconcile its status. `dataSourceId` and `health` are required.',\n inputSchema: {\n dataSourceId: z.string().min(1).describe('Data source ID'),\n health: ConnectionHealthEnum.describe('Observed health'),\n latencyMs: z.number().int().optional().describe('Probe round-trip latency in ms'),\n message: z.string().optional().describe('Probe message / diagnostic detail'),\n },\n },\n async ({ dataSourceId, health, latencyMs, message }) => {\n try {\n const input: Record<string, unknown> = { dataSourceId, health };\n if (latencyMs !== undefined) input.latencyMs = latencyMs;\n if (message !== undefined) input.message = message;\n\n const data = await ctx.gql.workspace.request<{\n semRecordConnection: Record<string, unknown>;\n }>(ops.RECORD_CONNECTION, { input });\n return jsonResult(data.semRecordConnection);\n } catch (error) {\n ctx.logger.error('semanticfed connections_record failed', { error: String(error) });\n return errorResult(\n `Failed to record connection: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed semantic-model tools — the versioned modelling unit.\n *\n * Surface (6): models_{get,list,create,update,publish,archive}. Maps to\n * semModel / semListModels / semCreateModel / semUpdateModel / semPublishModel\n * / semArchiveModel.\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 { ModelStatusEnum } from './shared.js';\n\nexport function registerModelTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'models_get')),\n {\n title: 'Get Semantic Model',\n description: 'Fetch a single semantic model by ID, including its entities and relationships.',\n inputSchema: { id: z.string().describe('Semantic model ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semModel: Record<string, unknown> | null;\n }>(ops.GET_MODEL, { id });\n if (!data.semModel) return errorResult(`Semantic model ${id} not found`);\n return jsonResult(data.semModel);\n } catch (error) {\n ctx.logger.error('semanticfed models_get failed', { error: String(error) });\n return errorResult(\n `Failed to get semantic model: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'models_list')),\n {\n title: 'List Semantic Models',\n description:\n 'List semantic models in the bound workspace, optionally filtered by status, with limit/offset pagination.',\n inputSchema: {\n status: ModelStatusEnum.optional().describe('Filter by model status'),\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 ({ status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListModels: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_MODELS, {\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.semListModels);\n } catch (error) {\n ctx.logger.error('semanticfed models_list failed', { error: String(error) });\n return errorResult(\n `Failed to list semantic models: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'models_create')),\n {\n title: 'Create Semantic Model',\n description:\n 'Create a new draft semantic model. `name` is required; entities/relationships are added separately.',\n inputSchema: {\n name: z.string().min(1).describe('Model display name'),\n description: z.string().optional().describe('Description'),\n tags: z.array(z.string()).optional().describe('Tag labels'),\n },\n },\n async ({ name, description, tags }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (description !== undefined) input.description = description;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n semCreateModel: Record<string, unknown>;\n }>(ops.CREATE_MODEL, { input });\n return jsonResult(data.semCreateModel);\n } catch (error) {\n ctx.logger.error('semanticfed models_create failed', { error: String(error) });\n return errorResult(\n `Failed to create semantic model: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'models_update')),\n {\n title: 'Update Semantic Model',\n description:\n 'Update a semantic model. At least one mutable field must be provided. Use `models_publish` to publish a draft.',\n inputSchema: {\n id: z.string().describe('Semantic model ID'),\n name: z.string().optional().describe('Updated name'),\n description: z.string().optional().describe('Updated description'),\n tags: z.array(z.string()).optional().describe('Updated tag labels'),\n },\n },\n async ({ id, name, description, tags }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (description !== undefined) input.description = description;\n if (tags !== undefined) input.tags = tags;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/description/tags',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n semUpdateModel: Record<string, unknown>;\n }>(ops.UPDATE_MODEL, { id, input });\n return jsonResult(data.semUpdateModel);\n } catch (error) {\n ctx.logger.error('semanticfed models_update failed', { error: String(error) });\n return errorResult(\n `Failed to update semantic model: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'models_publish')),\n {\n title: 'Publish Semantic Model',\n description:\n 'Publish a draft model — bumps its version and flips status to PUBLISHED. Returns the published model.',\n inputSchema: { id: z.string().describe('Semantic model ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semPublishModel: Record<string, unknown>;\n }>(ops.PUBLISH_MODEL, { id });\n return jsonResult(data.semPublishModel);\n } catch (error) {\n ctx.logger.error('semanticfed models_publish failed', { error: String(error) });\n return errorResult(\n `Failed to publish semantic model: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'models_archive')),\n {\n title: 'Archive Semantic Model',\n description: 'Archive (soft-delete) a semantic model by ID. Returns true on success.',\n inputSchema: { id: z.string().describe('Semantic model ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ semArchiveModel: boolean }>(\n ops.ARCHIVE_MODEL,\n { id },\n );\n return jsonResult({ archived: data.semArchiveModel });\n } catch (error) {\n ctx.logger.error('semanticfed models_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive semantic model: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed entity tools — tables/views/derived entities within a model.\n *\n * Surface (5): entities_{get,list,create,update,delete}. Maps to semEntity /\n * semListEntities / semCreateEntity / semUpdateEntity / semDeleteEntity.\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 { EntityKindEnum } from './shared.js';\n\nexport function registerEntityTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'entities_get')),\n {\n title: 'Get Entity',\n description: 'Fetch a single entity by ID, including its dimensions and metrics.',\n inputSchema: { id: z.string().describe('Entity ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semEntity: Record<string, unknown> | null;\n }>(ops.GET_ENTITY, { id });\n if (!data.semEntity) return errorResult(`Entity ${id} not found`);\n return jsonResult(data.semEntity);\n } catch (error) {\n ctx.logger.error('semanticfed entities_get failed', { error: String(error) });\n return errorResult(\n `Failed to get entity: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'entities_list')),\n {\n title: 'List Entities',\n description: 'List the entities that belong to a semantic model.',\n inputSchema: { modelId: z.string().describe('Owning semantic model ID') },\n },\n async ({ modelId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListEntities: Array<Record<string, unknown>>;\n }>(ops.LIST_ENTITIES, { modelId });\n return jsonResult(data.semListEntities);\n } catch (error) {\n ctx.logger.error('semanticfed entities_list failed', { error: String(error) });\n return errorResult(\n `Failed to list entities: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'entities_create')),\n {\n title: 'Create Entity',\n description:\n 'Create an entity in a model. `modelId` and `name` are required; `kind` defaults to TABLE. Bind it to a `dataSourceId` or define it with `sqlDefinition` for derived entities.',\n inputSchema: {\n modelId: z.string().min(1).describe('Owning semantic model ID'),\n name: z.string().min(1).describe('Entity display name'),\n kind: EntityKindEnum.optional().describe('Entity kind (default TABLE)'),\n dataSourceId: z.string().optional().describe('Backing data source ID'),\n description: z.string().optional().describe('Description'),\n physicalName: z.string().optional().describe('Physical table/view name'),\n primaryKey: z.string().optional().describe('Primary-key column'),\n sqlDefinition: z.string().optional().describe('SQL definition (for DERIVED/VIEW entities)'),\n },\n },\n async ({\n modelId,\n name,\n kind,\n dataSourceId,\n description,\n physicalName,\n primaryKey,\n sqlDefinition,\n }) => {\n try {\n const input: Record<string, unknown> = { modelId, name };\n if (kind !== undefined) input.kind = kind;\n if (dataSourceId !== undefined) input.dataSourceId = dataSourceId;\n if (description !== undefined) input.description = description;\n if (physicalName !== undefined) input.physicalName = physicalName;\n if (primaryKey !== undefined) input.primaryKey = primaryKey;\n if (sqlDefinition !== undefined) input.sqlDefinition = sqlDefinition;\n\n const data = await ctx.gql.workspace.request<{\n semCreateEntity: Record<string, unknown>;\n }>(ops.CREATE_ENTITY, { input });\n return jsonResult(data.semCreateEntity);\n } catch (error) {\n ctx.logger.error('semanticfed entities_create failed', { error: String(error) });\n return errorResult(\n `Failed to create entity: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'entities_update')),\n {\n title: 'Update Entity',\n description: 'Update an entity. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Entity ID'),\n name: z.string().optional().describe('Updated name'),\n kind: EntityKindEnum.optional().describe('Updated entity kind'),\n dataSourceId: z.string().optional().describe('Updated backing data source ID'),\n description: z.string().optional().describe('Updated description'),\n physicalName: z.string().optional().describe('Updated physical table/view name'),\n primaryKey: z.string().optional().describe('Updated primary-key column'),\n sqlDefinition: z.string().optional().describe('Updated SQL definition'),\n },\n },\n async ({\n id,\n name,\n kind,\n dataSourceId,\n description,\n physicalName,\n primaryKey,\n sqlDefinition,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (kind !== undefined) input.kind = kind;\n if (dataSourceId !== undefined) input.dataSourceId = dataSourceId;\n if (description !== undefined) input.description = description;\n if (physicalName !== undefined) input.physicalName = physicalName;\n if (primaryKey !== undefined) input.primaryKey = primaryKey;\n if (sqlDefinition !== undefined) input.sqlDefinition = sqlDefinition;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/kind/dataSourceId/description/physicalName/primaryKey/sqlDefinition',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n semUpdateEntity: Record<string, unknown>;\n }>(ops.UPDATE_ENTITY, { id, input });\n return jsonResult(data.semUpdateEntity);\n } catch (error) {\n ctx.logger.error('semanticfed entities_update failed', { error: String(error) });\n return errorResult(\n `Failed to update entity: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'entities_delete')),\n {\n title: 'Delete Entity',\n description:\n 'Delete an entity by ID (also removes its dimensions/metrics). Returns true on success.',\n inputSchema: { id: z.string().describe('Entity ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ semDeleteEntity: boolean }>(\n ops.DELETE_ENTITY,\n { id },\n );\n return jsonResult({ deleted: data.semDeleteEntity });\n } catch (error) {\n ctx.logger.error('semanticfed entities_delete failed', { error: String(error) });\n return errorResult(\n `Failed to delete entity: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed dimension tools — descriptive attributes on an entity.\n *\n * Surface (1): dimensions_create. Maps to semCreateDimension. Dimensions are\n * read back via `entities_get` (entity.dimensions), so there is no standalone\n * list/get root field.\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 { DataTypeEnum } from './shared.js';\n\nexport function registerDimensionTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'dimensions_create')),\n {\n title: 'Create Dimension',\n description:\n 'Add a dimension (descriptive attribute) to an entity. `entityId` and `name` are required; `dataType` defaults to STRING and `isPrimary` to false.',\n inputSchema: {\n entityId: z.string().min(1).describe('Owning entity ID'),\n name: z.string().min(1).describe('Dimension display name'),\n dataType: DataTypeEnum.optional().describe('Data type (default STRING)'),\n description: z.string().optional().describe('Description'),\n expression: z.string().optional().describe('SQL expression backing the dimension'),\n isPrimary: z\n .boolean()\n .optional()\n .describe('Whether this is the primary dimension (default false)'),\n },\n },\n async ({ entityId, name, dataType, description, expression, isPrimary }) => {\n try {\n const input: Record<string, unknown> = { entityId, name };\n if (dataType !== undefined) input.dataType = dataType;\n if (description !== undefined) input.description = description;\n if (expression !== undefined) input.expression = expression;\n if (isPrimary !== undefined) input.isPrimary = isPrimary;\n\n const data = await ctx.gql.workspace.request<{\n semCreateDimension: Record<string, unknown>;\n }>(ops.CREATE_DIMENSION, { input });\n return jsonResult(data.semCreateDimension);\n } catch (error) {\n ctx.logger.error('semanticfed dimensions_create failed', { error: String(error) });\n return errorResult(\n `Failed to create dimension: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed metric tools — aggregated measures on an entity.\n *\n * Surface (1): metrics_create. Maps to semCreateMetric. Metrics are read back\n * via `entities_get` (entity.metrics), so there is no standalone list/get root\n * field.\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 { AggregationEnum } from './shared.js';\n\nexport function registerMetricTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'metrics_create')),\n {\n title: 'Create Metric',\n description:\n 'Add a metric (aggregated measure) to an entity. `entityId` and `name` are required; `aggregation` defaults to SUM. Use `expression` for a custom SQL measure and `format` for display formatting.',\n inputSchema: {\n entityId: z.string().min(1).describe('Owning entity ID'),\n name: z.string().min(1).describe('Metric display name'),\n aggregation: AggregationEnum.optional().describe('Aggregation function (default SUM)'),\n description: z.string().optional().describe('Description'),\n expression: z.string().optional().describe('SQL expression backing the metric'),\n format: z.string().optional().describe('Display format hint (e.g. currency, percent)'),\n },\n },\n async ({ entityId, name, aggregation, description, expression, format }) => {\n try {\n const input: Record<string, unknown> = { entityId, name };\n if (aggregation !== undefined) input.aggregation = aggregation;\n if (description !== undefined) input.description = description;\n if (expression !== undefined) input.expression = expression;\n if (format !== undefined) input.format = format;\n\n const data = await ctx.gql.workspace.request<{\n semCreateMetric: Record<string, unknown>;\n }>(ops.CREATE_METRIC, { input });\n return jsonResult(data.semCreateMetric);\n } catch (error) {\n ctx.logger.error('semanticfed metrics_create failed', { error: String(error) });\n return errorResult(\n `Failed to create metric: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed relationship tools — joins between entities in a model.\n *\n * Surface (2): relationships_list, relationships_create. Maps to\n * semListRelationships and semCreateRelationship.\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 { RelationshipKindEnum } from './shared.js';\n\nexport function registerRelationshipTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'relationships_list')),\n {\n title: 'List Relationships',\n description: 'List the relationships (entity joins) that belong to a semantic model.',\n inputSchema: { modelId: z.string().describe('Owning semantic model ID') },\n },\n async ({ modelId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListRelationships: Array<Record<string, unknown>>;\n }>(ops.LIST_RELATIONSHIPS, { modelId });\n return jsonResult(data.semListRelationships);\n } catch (error) {\n ctx.logger.error('semanticfed relationships_list failed', { error: String(error) });\n return errorResult(\n `Failed to list relationships: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'relationships_create')),\n {\n title: 'Create Relationship',\n description:\n 'Define a join between two entities in a model. `modelId`, `name`, `fromEntityId`, `fromField`, `toEntityId`, and `toField` are required; `kind` defaults to MANY_TO_ONE.',\n inputSchema: {\n modelId: z.string().min(1).describe('Owning semantic model ID'),\n name: z.string().min(1).describe('Relationship display name'),\n fromEntityId: z.string().min(1).describe('Source entity ID'),\n fromField: z.string().min(1).describe('Source join field'),\n toEntityId: z.string().min(1).describe('Target entity ID'),\n toField: z.string().min(1).describe('Target join field'),\n kind: RelationshipKindEnum.optional().describe('Cardinality (default MANY_TO_ONE)'),\n description: z.string().optional().describe('Description'),\n },\n },\n async ({ modelId, name, fromEntityId, fromField, toEntityId, toField, kind, description }) => {\n try {\n const input: Record<string, unknown> = {\n modelId,\n name,\n fromEntityId,\n fromField,\n toEntityId,\n toField,\n };\n if (kind !== undefined) input.kind = kind;\n if (description !== undefined) input.description = description;\n\n const data = await ctx.gql.workspace.request<{\n semCreateRelationship: Record<string, unknown>;\n }>(ops.CREATE_RELATIONSHIP, { input });\n return jsonResult(data.semCreateRelationship);\n } catch (error) {\n ctx.logger.error('semanticfed relationships_create failed', { error: String(error) });\n return errorResult(\n `Failed to create relationship: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed saved-query tools — saved federated queries + execution.\n *\n * Surface (7): queries_{get,list,create,update,publish,archive,run}. Maps to\n * semQuery / semListQueries / semCreateQuery / semUpdateQuery / semPublishQuery\n * / semArchiveQuery / semRunQuery. `queries_run` enqueues a federated execution\n * and returns the new run record (poll with `runs_list`).\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 { QueryStatusEnum, JsonObject } from './shared.js';\n\nexport function registerQueryTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'queries_get')),\n {\n title: 'Get Query',\n description: 'Fetch a single saved query by ID, including its run history.',\n inputSchema: { id: z.string().describe('Query ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semQuery: Record<string, unknown> | null;\n }>(ops.GET_QUERY, { id });\n if (!data.semQuery) return errorResult(`Query ${id} not found`);\n return jsonResult(data.semQuery);\n } catch (error) {\n ctx.logger.error('semanticfed queries_get failed', { error: String(error) });\n return errorResult(\n `Failed to get query: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'queries_list')),\n {\n title: 'List Queries',\n description:\n 'List saved queries, optionally filtered by model and/or status, with limit/offset pagination.',\n inputSchema: {\n modelId: z.string().optional().describe('Filter by semantic model ID'),\n status: QueryStatusEnum.optional().describe('Filter by query status'),\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 ({ modelId, status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListQueries: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_QUERIES, {\n modelId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.semListQueries);\n } catch (error) {\n ctx.logger.error('semanticfed queries_list failed', { error: String(error) });\n return errorResult(\n `Failed to list queries: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'queries_create')),\n {\n title: 'Create Query',\n description:\n 'Create a new draft saved query. `name` and `queryText` are required; `cacheable` defaults to true. Bind to a `modelId` to resolve entities/metrics by name.',\n inputSchema: {\n name: z.string().min(1).describe('Query display name'),\n queryText: z.string().min(1).describe('Federated query text'),\n modelId: z.string().optional().describe('Semantic model ID the query resolves against'),\n description: z.string().optional().describe('Description'),\n parameters: JsonObject.optional().describe('Parameter defaults/schema JSON'),\n cacheable: z.boolean().optional().describe('Whether results are cacheable (default true)'),\n cacheTtlSeconds: z.number().int().optional().describe('Cache TTL in seconds'),\n tags: z.array(z.string()).optional().describe('Tag labels'),\n },\n },\n async ({\n name,\n queryText,\n modelId,\n description,\n parameters,\n cacheable,\n cacheTtlSeconds,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { name, queryText };\n if (modelId !== undefined) input.modelId = modelId;\n if (description !== undefined) input.description = description;\n if (parameters !== undefined) input.parameters = parameters;\n if (cacheable !== undefined) input.cacheable = cacheable;\n if (cacheTtlSeconds !== undefined) input.cacheTtlSeconds = cacheTtlSeconds;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n semCreateQuery: Record<string, unknown>;\n }>(ops.CREATE_QUERY, { input });\n return jsonResult(data.semCreateQuery);\n } catch (error) {\n ctx.logger.error('semanticfed queries_create failed', { error: String(error) });\n return errorResult(\n `Failed to create query: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'queries_update')),\n {\n title: 'Update Query',\n description:\n 'Update a saved query. At least one mutable field must be provided. Use `queries_publish` to publish a draft.',\n inputSchema: {\n id: z.string().describe('Query ID'),\n name: z.string().optional().describe('Updated name'),\n queryText: z.string().optional().describe('Updated query text'),\n modelId: z.string().optional().describe('Updated semantic model ID'),\n description: z.string().optional().describe('Updated description'),\n parameters: JsonObject.optional().describe('Updated parameter JSON'),\n cacheable: z.boolean().optional().describe('Updated cacheable flag'),\n cacheTtlSeconds: z.number().int().optional().describe('Updated cache TTL in seconds'),\n tags: z.array(z.string()).optional().describe('Updated tag labels'),\n },\n },\n async ({\n id,\n name,\n queryText,\n modelId,\n description,\n parameters,\n cacheable,\n cacheTtlSeconds,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (queryText !== undefined) input.queryText = queryText;\n if (modelId !== undefined) input.modelId = modelId;\n if (description !== undefined) input.description = description;\n if (parameters !== undefined) input.parameters = parameters;\n if (cacheable !== undefined) input.cacheable = cacheable;\n if (cacheTtlSeconds !== undefined) input.cacheTtlSeconds = cacheTtlSeconds;\n if (tags !== undefined) input.tags = tags;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/queryText/modelId/description/parameters/cacheable/cacheTtlSeconds/tags',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n semUpdateQuery: Record<string, unknown>;\n }>(ops.UPDATE_QUERY, { id, input });\n return jsonResult(data.semUpdateQuery);\n } catch (error) {\n ctx.logger.error('semanticfed queries_update failed', { error: String(error) });\n return errorResult(\n `Failed to update query: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'queries_publish')),\n {\n title: 'Publish Query',\n description:\n 'Publish a draft query (flips status to PUBLISHED). Returns the published query.',\n inputSchema: { id: z.string().describe('Query ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semPublishQuery: Record<string, unknown>;\n }>(ops.PUBLISH_QUERY, { id });\n return jsonResult(data.semPublishQuery);\n } catch (error) {\n ctx.logger.error('semanticfed queries_publish failed', { error: String(error) });\n return errorResult(\n `Failed to publish query: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'queries_archive')),\n {\n title: 'Archive Query',\n description: 'Archive (soft-delete) a saved query by ID. Returns true on success.',\n inputSchema: { id: z.string().describe('Query ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ semArchiveQuery: boolean }>(\n ops.ARCHIVE_QUERY,\n { id },\n );\n return jsonResult({ archived: data.semArchiveQuery });\n } catch (error) {\n ctx.logger.error('semanticfed queries_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive query: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'queries_run')),\n {\n title: 'Run Query',\n description:\n 'Enqueue a federated execution of a saved query. Returns the new run record; poll it with `runs_list`.',\n inputSchema: { id: z.string().describe('Query ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semRunQuery: Record<string, unknown>;\n }>(ops.RUN_QUERY, { id });\n return jsonResult(data.semRunQuery);\n } catch (error) {\n ctx.logger.error('semanticfed queries_run failed', { error: String(error) });\n return errorResult(\n `Failed to run query: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed query-run tools — execution history for a saved query.\n *\n * Surface (1): query_runs_list. Maps to semListQueryRuns. New runs are enqueued via\n * `queries_run`; this lists/polls their progress and results.\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 { QueryRunStatusEnum } from './shared.js';\n\nexport function registerRunTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'query_runs_list')),\n {\n title: 'List Query Runs',\n description:\n 'List the execution runs for a saved query, optionally filtered by status, with limit/offset pagination.',\n inputSchema: {\n queryId: z.string().describe('Owning query ID'),\n status: QueryRunStatusEnum.optional().describe('Filter by run status'),\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 ({ queryId, status, limit, offset }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListQueryRuns: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_QUERY_RUNS, {\n queryId,\n status,\n pagination: { limit: limit ?? 50, offset: offset ?? 0 },\n });\n return jsonResult(data.semListQueryRuns);\n } catch (error) {\n ctx.logger.error('semanticfed query_runs_list failed', { error: String(error) });\n return errorResult(\n `Failed to list query runs: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed access-policy tools — row/column/entity governance.\n *\n * Surface (3): access_policies_list, access_policies_create, access_policies_set_active. Maps to\n * semListAccessPolicies / semCreateAccessPolicy / semSetAccessPolicyActive.\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 { PolicyEffectEnum, PolicyScopeEnum, JsonObject } from './shared.js';\n\nexport function registerPolicyTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'access_policies_list')),\n {\n title: 'List Access Policies',\n description: 'List access policies, optionally scoped to a specific model and/or entity.',\n inputSchema: {\n modelId: z.string().optional().describe('Filter by semantic model ID'),\n entityId: z.string().optional().describe('Filter by entity ID'),\n },\n },\n async ({ modelId, entityId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semListAccessPolicies: Array<Record<string, unknown>>;\n }>(ops.LIST_ACCESS_POLICIES, { modelId, entityId });\n return jsonResult(data.semListAccessPolicies);\n } catch (error) {\n ctx.logger.error('semanticfed access_policies_list failed', { error: String(error) });\n return errorResult(\n `Failed to list access policies: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'access_policies_create')),\n {\n title: 'Create Access Policy',\n description:\n 'Create a governance policy. `name` and `principal` are required; `effect` defaults to ALLOW and `scope` to ROW. Scope it to a model and/or entity, and supply a `rule` JSON for ROW/COLUMN predicates.',\n inputSchema: {\n name: z.string().min(1).describe('Policy display name'),\n principal: z\n .string()\n .min(1)\n .describe('Principal the policy applies to (role/group/user expression)'),\n effect: PolicyEffectEnum.optional().describe('ALLOW or DENY (default ALLOW)'),\n scope: PolicyScopeEnum.optional().describe('ROW, COLUMN, or ENTITY (default ROW)'),\n modelId: z.string().optional().describe('Semantic model ID the policy applies to'),\n entityId: z.string().optional().describe('Entity ID the policy applies to'),\n description: z.string().optional().describe('Description'),\n rule: JsonObject.optional().describe('Rule JSON (predicate / column mask)'),\n },\n },\n async ({ name, principal, effect, scope, modelId, entityId, description, rule }) => {\n try {\n const input: Record<string, unknown> = { name, principal };\n if (effect !== undefined) input.effect = effect;\n if (scope !== undefined) input.scope = scope;\n if (modelId !== undefined) input.modelId = modelId;\n if (entityId !== undefined) input.entityId = entityId;\n if (description !== undefined) input.description = description;\n if (rule !== undefined) input.rule = rule;\n\n const data = await ctx.gql.workspace.request<{\n semCreateAccessPolicy: Record<string, unknown>;\n }>(ops.CREATE_ACCESS_POLICY, { input });\n return jsonResult(data.semCreateAccessPolicy);\n } catch (error) {\n ctx.logger.error('semanticfed access_policies_create failed', { error: String(error) });\n return errorResult(\n `Failed to create access policy: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'access_policies_set_active')),\n {\n title: 'Set Access Policy Active',\n description: 'Enable or disable an access policy by ID. Returns the updated policy.',\n inputSchema: {\n id: z.string().describe('Access policy ID'),\n isActive: z.boolean().describe('Whether the policy should be active'),\n },\n },\n async ({ id, isActive }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n semSetAccessPolicyActive: Record<string, unknown>;\n }>(ops.SET_ACCESS_POLICY_ACTIVE, { id, isActive });\n return jsonResult(data.semSetAccessPolicyActive);\n } catch (error) {\n ctx.logger.error('semanticfed access_policies_set_active failed', { error: String(error) });\n return errorResult(\n `Failed to set access policy active state: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * SemanticFed health tool.\n *\n * Surface (1): health — maps to the @public `semHealth` query (no auth\n * required), a liveness/identity probe for the SemanticFed subgraph.\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 registerHealthTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'health_check')),\n {\n title: 'SemanticFed Health Check',\n description:\n 'Public health probe for the SemanticFed subgraph (semHealth). Requires no authentication.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{ semHealth: string }>(ops.HEALTH, {});\n return jsonResult({ ok: true, status: data.semHealth });\n } catch (error) {\n ctx.logger.error('semanticfed health failed', { error: String(error) });\n return errorResult(\n `SemanticFed health check failed: ${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 { LIST_CONNECTORS, LIST_DATA_SOURCES, LIST_MODELS } from './operations.js';\n\n/**\n * Read-only SemanticFed 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 registerSemanticfedResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const connectorsUri = track(mcpResourceUri(ctx.productName, 'connectors'));\n const dataSourcesUri = track(mcpResourceUri(ctx.productName, 'data-sources'));\n const modelsUri = track(mcpResourceUri(ctx.productName, 'models'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'semanticfed-schema',\n schemaUri,\n {\n title: 'SemanticFed Domain Schema',\n description:\n 'Overview of the SemanticFed data-federation 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 = `# SemanticFed Domain (Overview)\n\nThe data-federation platform — unifies databases, warehouses, lakes, and APIs\nbehind one governed semantic layer so teams can query everything in place\nwithout moving it. System of record for data sources & connectors, the\nversioned semantic model, saved federated queries with run history, and access\ngovernance.\n\n## Entities\n- SemConnector — a connection-technology registry entry (has data sources)\n- SemDataSource — a physical/logical source behind a connector (has connections)\n- SemConnection — a recorded health probe for a data source\n- SemSemanticModel — the versioned modelling unit (has entities + relationships)\n- SemEntity — a table/view/derived entity (has dimensions + metrics)\n- SemDimension — a descriptive attribute on an entity\n- SemMetric — an aggregated measure on an entity\n- SemRelationship — a join between two entities\n- SemQuery — a saved federated query (has runs)\n- SemQueryRun — an execution of a saved query\n- SemAccessPolicy — a row/column/entity governance policy\n\n## Enums\n- SemConnectorKind: BIGQUERY, CLICKHOUSE, DATABRICKS, GRAPHQL_API, MONGODB, MYSQL, OTHER, POSTGRES, REDSHIFT, REST_API, S3_PARQUET, SNOWFLAKE\n- SemDataSourceStatus: DRAFT, CONNECTED, DEGRADED, DISCONNECTED, DISABLED\n- SemConnectionHealth: HEALTHY, DEGRADED, UNREACHABLE, UNKNOWN\n- SemModelStatus: DRAFT, PUBLISHED, DEPRECATED, ARCHIVED\n- SemEntityKind: TABLE, VIEW, DERIVED, EXTERNAL\n- SemDataType: STRING, INTEGER, DECIMAL, BOOLEAN, DATE, TIMESTAMP, JSON, GEO\n- SemAggregation: SUM, AVG, COUNT, COUNT_DISTINCT, MIN, MAX, MEDIAN, CUSTOM\n- SemRelationshipKind: ONE_TO_ONE, ONE_TO_MANY, MANY_TO_ONE, MANY_TO_MANY\n- SemQueryStatus: DRAFT, PUBLISHED, ARCHIVED\n- SemQueryRunStatus: QUEUED, PLANNING, RUNNING, SUCCEEDED, FAILED, CANCELLED\n- SemPolicyEffect: ALLOW, DENY\n- SemPolicyScope: ROW, COLUMN, ENTITY\n\n## Tool groups\nconnectors, data_sources, connections, models, entities, dimensions, metrics,\nrelationships, queries, query_runs, access_policies, health. All run against the WORKSPACE\ngateway (workspace-scoped) except the public health probe.\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://connectors — connector registry\n server.registerResource(\n 'semanticfed-connectors',\n connectorsUri,\n {\n title: 'SemanticFed Connectors',\n description: 'The first 50 connectors in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${connectorsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ semListConnectors: unknown }>(\n LIST_CONNECTORS,\n { pagination: { limit: 50, offset: 0 } },\n );\n return {\n contents: [\n {\n uri: connectorsUri,\n text: JSON.stringify(data.semListConnectors, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: connectorsUri,\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>://data-sources — data-source directory\n server.registerResource(\n 'semanticfed-data-sources',\n dataSourcesUri,\n {\n title: 'SemanticFed Data Sources',\n description: 'The first 50 data sources in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${dataSourcesUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ semListDataSources: unknown }>(\n LIST_DATA_SOURCES,\n { pagination: { limit: 50, offset: 0 } },\n );\n return {\n contents: [\n {\n uri: dataSourcesUri,\n text: JSON.stringify(data.semListDataSources, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: dataSourcesUri,\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>://models — semantic-model catalog\n server.registerResource(\n 'semanticfed-models',\n modelsUri,\n {\n title: 'SemanticFed Semantic Models',\n description: 'The first 50 semantic models in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${modelsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ semListModels: unknown }>(LIST_MODELS, {\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: modelsUri,\n text: JSON.stringify(data.semListModels, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: modelsUri,\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 * SemanticFed MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerSemanticfedPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const modellingName = track(mcpPromptName(p, 'model-build'));\n const federationName = track(mcpPromptName(p, 'query-federation'));\n\n // <product>-model-build — stand up a connector → source → model\n server.registerPrompt(\n modellingName,\n {\n title: 'Build Semantic Model',\n description:\n 'Guide for building a SemanticFed semantic model end to end: register a connector, attach a data source, create the model, add entities with dimensions/metrics, define relationships, and publish.',\n argsSchema: {\n name: z.string().optional().describe('Semantic model name'),\n connectorKind: z.string().optional().describe('Connector technology (e.g. POSTGRES)'),\n },\n },\n ({ name, connectorKind }) => {\n ctx.logger.debug(`Prompt ${modellingName} called`, { name, connectorKind });\n const nameNote = name ? `Use the model name \"${name}\".` : 'Ask the user for the model name.';\n const kindNote = connectorKind\n ? `Use connector kind ${connectorKind}.`\n : 'Help the user pick a SemConnectorKind (e.g. POSTGRES, SNOWFLAKE, BIGQUERY).';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me build a new SemanticFed semantic model.\n\n1. **Register Connector**: Use ${p}_connectors_create. ${kindNote}\n2. **Attach Data Source**: Use ${p}_data_sources_create with the new connectorId, an endpoint JSON, and a secretRef for credentials; then ${p}_data_sources_transition to CONNECTED once reachable (optionally record a probe with ${p}_connections_record).\n3. **Create Model**: Use ${p}_models_create. ${nameNote}\n4. **Add Entities**: Use ${p}_entities_create (modelId + kind TABLE/VIEW/DERIVED) for each table/view; bind to the dataSourceId.\n5. **Dimensions + Metrics**: Use ${p}_dimensions_create and ${p}_metrics_create on each entity.\n6. **Relationships**: Use ${p}_relationships_create to join entities (fromEntityId/fromField → toEntityId/toField, kind MANY_TO_ONE etc.).\n7. **Publish**: Use ${p}_models_publish to bump the version and flip status to PUBLISHED.\n\nShow results at each step and confirm before publishing.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-query-federation — author, run, and govern a federated query\n server.registerPrompt(\n federationName,\n {\n title: 'Federated Query',\n description:\n 'Workflow to author a saved federated query against a published model, govern it with an access policy, publish it, execute it, and inspect run results.',\n argsSchema: {\n modelId: z.string().optional().describe('Published model ID to query'),\n },\n },\n ({ modelId }) => {\n ctx.logger.debug(`Prompt ${federationName} called`, { modelId });\n const modelNote = modelId\n ? `Query against model \"${modelId}\".`\n : `First list published models with ${p}_models_list (status=PUBLISHED) and pick one.`;\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run a SemanticFed federated query workflow. ${modelNote}\n\n1. **Author**: Use ${p}_queries_create with the modelId, a queryText, and optional parameters; set cacheable + cacheTtlSeconds.\n2. **Govern**: Use ${p}_access_policies_create to add a row/column access policy (principal, effect, scope) and ${p}_access_policies_set_active to enable it.\n3. **Publish**: Use ${p}_queries_publish to move the query to PUBLISHED.\n4. **Execute**: Use ${p}_queries_run to enqueue a federated execution; it returns a run record.\n5. **Inspect**: Poll ${p}_query_runs_list (filter by status) to watch QUEUED → PLANNING → RUNNING → SUCCEEDED and read rowCount / sourcesTouched / planSummary.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * SemanticFed module — domain module for the future-products ecosystem program.\n *\n * Covers every queryable/mutable @key entity of wspace-semanticfed-svc grouped\n * into per-entity sub-APIs: connectors, data sources, connections, semantic\n * models, entities, dimensions, metrics, relationships, saved queries, query\n * runs, access policies, and a public health probe. Mirrors the\n * proserviceworld/kadaikodi module structure (tools/<entity>.ts + resources.ts\n * + prompts.ts) and the canonical tags module's typing discipline.\n *\n * Backend: ~/products/wspace/semanticfed/wspace-semanticfed-svc/\n * (Hive service name `semanticfed`). All operations run against the WORKSPACE\n * gateway. Every root field is prefixed `sem*` / every type `Sem*` per the\n * service's GraphQL naming contract; the @public `semHealth` probe is exposed\n * as `<product>_health`.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerConnectorTools } from './tools/connectors.js';\nimport { registerDataSourceTools } from './tools/datasources.js';\nimport { registerConnectionTools } from './tools/connections.js';\nimport { registerModelTools } from './tools/models.js';\nimport { registerEntityTools } from './tools/entities.js';\nimport { registerDimensionTools } from './tools/dimensions.js';\nimport { registerMetricTools } from './tools/metrics.js';\nimport { registerRelationshipTools } from './tools/relationships.js';\nimport { registerQueryTools } from './tools/queries.js';\nimport { registerRunTools } from './tools/runs.js';\nimport { registerPolicyTools } from './tools/policies.js';\nimport { registerHealthTools } from './tools/health.js';\nimport { registerSemanticfedResources } from './resources.js';\nimport { registerSemanticfedPrompts } from './prompts.js';\n\nconst semanticfedModule: McpModule = {\n id: 'semanticfed',\n version: '0.0.1',\n displayName: 'SemanticFed',\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 registerConnectorTools(server, ctx, trackTool);\n registerDataSourceTools(server, ctx, trackTool);\n registerConnectionTools(server, ctx, trackTool);\n registerModelTools(server, ctx, trackTool);\n registerEntityTools(server, ctx, trackTool);\n registerDimensionTools(server, ctx, trackTool);\n registerMetricTools(server, ctx, trackTool);\n registerRelationshipTools(server, ctx, trackTool);\n registerQueryTools(server, ctx, trackTool);\n registerRunTools(server, ctx, trackTool);\n registerPolicyTools(server, ctx, trackTool);\n registerHealthTools(server, ctx, trackTool);\n\n registerSemanticfedResources(server, ctx, trackResource);\n registerSemanticfedPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default semanticfedModule;\n"]}
|