@spacelr/mcp 0.0.4 → 0.0.5

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../libs/mcp-server/src/index.ts","../../../../libs/mcp-server/src/config.ts","../../../../libs/mcp-server/src/api-client.ts","../../../../libs/mcp-server/src/tools/auth.ts","../../../../libs/mcp-server/src/utils.ts","../../../../libs/mcp-server/src/tools/projects.ts","../../../../libs/mcp-server/src/tools/clients.ts","../../../../libs/mcp-server/src/tools/database.ts","../../../../libs/mcp-server/src/tools/hosting.ts","../../../../libs/mcp-server/src/tools/storage.ts","../../../../libs/mcp-server/src/tools/functions.ts","../../../../libs/mcp-server/src/tools/index.ts","../../../../libs/mcp-server/src/prompts/database.ts","../../../../libs/mcp-server/src/prompts/functions.ts","../../../../libs/mcp-server/src/prompts/index.ts"],"sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { loadConfig } from './config';\nimport { ApiClient } from './api-client';\nimport { registerAllTools } from './tools';\nimport { registerAllPrompts } from './prompts';\n\nasync function main() {\n const config = await loadConfig();\n const api = new ApiClient(config);\n\n const server = new McpServer({\n name: 'spacelr',\n version: '0.1.0',\n });\n\n registerAllTools(server, api);\n registerAllPrompts(server);\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n const shutdown = async () => {\n console.error('Shutting down MCP server...');\n await server.close();\n process.exit(0);\n };\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n process.on('SIGPIPE', shutdown);\n\n console.error('Spacelr MCP server running on stdio');\n}\n\nmain().catch((error: unknown) => {\n console.error('Fatal error:', error);\n process.exit(1);\n});\n","import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\n\nexport interface Config {\n apiBaseUrl: string;\n authToken: string;\n clientId: string | undefined;\n projectId: string | undefined;\n}\n\ninterface StoredCredentials {\n accessToken: string;\n refreshToken?: string;\n expiresAt: number;\n apiUrl: string;\n}\n\ninterface TokenResponse {\n access_token: string;\n refresh_token?: string;\n expires_in?: number;\n}\n\nconst REFRESH_TIMEOUT_MS = 10_000;\n\nfunction getCredentialsFile(): string {\n const home = os.homedir();\n return path.join(home, '.spacelr', 'credentials.json');\n}\n\nfunction readStoredCredentials(): StoredCredentials | null {\n try {\n const file = getCredentialsFile();\n if (!fs.existsSync(file)) return null;\n const content = fs.readFileSync(file, 'utf-8');\n const parsed: unknown = JSON.parse(content);\n if (\n typeof parsed !== 'object' ||\n parsed === null ||\n typeof (parsed as Record<string, unknown>).accessToken !== 'string' ||\n !Number.isFinite((parsed as Record<string, unknown>).expiresAt) ||\n typeof (parsed as Record<string, unknown>).apiUrl !== 'string'\n ) {\n return null;\n }\n return parsed as StoredCredentials;\n } catch {\n return null;\n }\n}\n\nfunction storeCredentials(credentials: StoredCredentials): void {\n const file = getCredentialsFile();\n fs.mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 });\n fs.writeFileSync(file, JSON.stringify(credentials, null, 2), {\n mode: 0o600,\n });\n}\n\nasync function refreshToken(\n credentials: StoredCredentials,\n): Promise<string | null> {\n if (!credentials.refreshToken || !credentials.apiUrl) return null;\n\n const apiUrl = credentials.apiUrl.replace(/\\/+$/, '');\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), REFRESH_TIMEOUT_MS);\n\n try {\n console.error('Refreshing access token...');\n const response = await fetch(`${apiUrl}/auth/refresh`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ refreshToken: credentials.refreshToken }),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n console.error(`Token refresh failed (HTTP ${response.status})`);\n return null;\n }\n\n const data = (await response.json()) as TokenResponse;\n if (typeof data.access_token !== 'string') {\n console.error('Token refresh returned unexpected response shape');\n return null;\n }\n const updated: StoredCredentials = {\n accessToken: data.access_token,\n refreshToken: data.refresh_token ?? credentials.refreshToken,\n expiresAt: Date.now() + (data.expires_in ?? 3600) * 1000,\n apiUrl: credentials.apiUrl,\n };\n storeCredentials(updated);\n console.error('Token refreshed successfully');\n return data.access_token;\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') {\n console.error('Token refresh timed out');\n } else {\n console.error('Token refresh error');\n }\n return null;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function resolveAuthToken(): Promise<string | null> {\n // 1. Environment variable takes priority (CI/automation)\n const envToken = process.env['SPACELR_AUTH_TOKEN'];\n if (envToken) return envToken;\n\n // 2. Read from CLI credentials file (~/.spacelr/credentials.json)\n const credentials = readStoredCredentials();\n if (!credentials) return null;\n\n // 3. Check if token is still valid (60s buffer)\n const isExpired = Date.now() >= credentials.expiresAt - 60_000;\n if (!isExpired) return credentials.accessToken;\n\n // 4. Try to refresh expired token\n return refreshToken(credentials);\n}\n\nfunction warnIfInsecureUrl(url: string): void {\n if (\n url.startsWith('http://') &&\n !url.includes('localhost') &&\n !/^http:\\/\\/(127\\.|10\\.|192\\.168\\.|172\\.(1[6-9]|2\\d|3[01])\\.|0\\.0\\.0\\.0|(\\[::1\\]))(\\/|:|$)/.test(url)\n ) {\n console.error(`Warning: API URL uses plain HTTP (${url}). Credentials will be transmitted unencrypted.`);\n }\n}\n\nfunction resolveApiUrl(credentials: StoredCredentials | null): string {\n const envUrl = process.env['SPACELR_API_URL'];\n if (envUrl) {\n try {\n const parsed = new URL(envUrl);\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new Error(`Unsupported protocol: ${parsed.protocol}`);\n }\n } catch (err) {\n throw new Error(`Invalid SPACELR_API_URL: ${envUrl} — ${err instanceof Error ? err.message : String(err)}`);\n }\n const resolved = envUrl.replace(/\\/+$/, '');\n warnIfInsecureUrl(resolved);\n return resolved;\n }\n\n // Derive admin API URL from stored credentials apiUrl\n // CLI stores the public gateway URL (e.g. https://api.spacelr.com/api/v1)\n // In production, admin gateway runs on a separate host (api-console.spacelr.com)\n // In local dev, admin gateway runs on a separate port (localhost:3003)\n if (credentials?.apiUrl) {\n const base = credentials.apiUrl.replace(/\\/+$/, '');\n // Already an admin URL\n if (base.includes('/api/v1/admin')) return base;\n // Local dev: derive admin port from public gateway\n if (base.includes('localhost') || base.includes('127.0.0.1') || base.includes('[::1]')) {\n return 'http://localhost:3003/api/v1/admin';\n }\n // Production: cannot safely derive admin host from public host\n throw new Error(\n `SPACELR_API_URL is required for production. The CLI credentials point to ${base} (public gateway), ` +\n 'but the admin gateway runs on a separate host. ' +\n 'Set SPACELR_API_URL to the admin gateway URL (e.g. https://api-console.spacelr.com/api/v1/admin).',\n );\n }\n\n const defaultUrl = 'http://localhost:3003/api/v1/admin';\n console.error(`Warning: No API URL configured, using default: ${defaultUrl}`);\n return defaultUrl;\n}\n\nexport async function loadConfig(): Promise<Config> {\n const credentials = readStoredCredentials();\n const authToken = await resolveAuthToken();\n\n if (!authToken) {\n throw new Error(\n 'No auth token found. Either set SPACELR_AUTH_TOKEN or run \"spacelr login\" first.',\n );\n }\n\n return {\n apiBaseUrl: resolveApiUrl(credentials),\n authToken,\n clientId: process.env['SPACELR_CLIENT_ID'],\n projectId: process.env['SPACELR_PROJECT_ID'],\n };\n}\n","import { Config, resolveAuthToken } from './config';\n\ninterface RequestOptions {\n params?: Record<string, string | number | boolean | undefined>;\n body?: unknown;\n}\n\ntype HttpMethod = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';\n\nconst REQUEST_TIMEOUT_MS = 30_000;\n\nexport class ApiError extends Error {\n constructor(\n public readonly status: number,\n public readonly statusText: string,\n responseBody: string,\n ) {\n const truncated =\n responseBody.length > 500\n ? responseBody.slice(0, 500) + '...'\n : responseBody;\n super(`HTTP ${status} ${statusText}: ${truncated}`);\n this.name = 'ApiError';\n }\n}\n\nexport class ApiClient {\n private readonly baseUrl: string;\n private readonly headers: Record<string, string>;\n private refreshPromise: Promise<string | null> | null = null;\n\n constructor(config: Config) {\n this.baseUrl = config.apiBaseUrl;\n this.headers = {\n Authorization: `Bearer ${config.authToken}`,\n };\n if (config.clientId) {\n this.headers['x-client-id'] = config.clientId;\n }\n if (config.projectId) {\n this.headers['x-project-id'] = config.projectId;\n }\n }\n\n async get(path: string, opts?: RequestOptions): Promise<unknown> {\n return this.requestWithRetry('GET', path, opts);\n }\n\n async post(path: string, opts?: RequestOptions): Promise<unknown> {\n return this.requestWithRetry('POST', path, opts);\n }\n\n async patch(path: string, opts?: RequestOptions): Promise<unknown> {\n return this.requestWithRetry('PATCH', path, opts);\n }\n\n async put(path: string, opts?: RequestOptions): Promise<unknown> {\n return this.requestWithRetry('PUT', path, opts);\n }\n\n async delete(path: string, opts?: RequestOptions): Promise<unknown> {\n return this.requestWithRetry('DELETE', path, opts);\n }\n\n private async refreshAuthToken(): Promise<string | null> {\n if (!this.refreshPromise) {\n this.refreshPromise = resolveAuthToken().finally(() => {\n this.refreshPromise = null;\n });\n }\n return this.refreshPromise;\n }\n\n private async requestWithRetry(\n method: HttpMethod,\n path: string,\n opts?: RequestOptions,\n ): Promise<unknown> {\n try {\n return await this.request(method, path, opts);\n } catch (error) {\n if (error instanceof ApiError && error.status === 401) {\n const currentToken = this.headers['Authorization'];\n const newToken = await this.refreshAuthToken();\n if (newToken && `Bearer ${newToken}` !== currentToken) {\n this.headers['Authorization'] = `Bearer ${newToken}`;\n return this.request(method, path, opts);\n }\n }\n throw error;\n }\n }\n\n private async request(\n method: HttpMethod,\n path: string,\n opts?: RequestOptions,\n ): Promise<unknown> {\n let url = `${this.baseUrl}${path}`;\n\n if (opts?.params) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(opts.params)) {\n if (value !== undefined) {\n searchParams.set(key, String(value));\n }\n }\n const qs = searchParams.toString();\n if (qs) {\n url += `?${qs}`;\n }\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n\n try {\n const headers: Record<string, string> = { ...this.headers };\n if (opts?.body !== undefined) {\n headers['Content-Type'] = 'application/json';\n }\n\n const response = await fetch(url, {\n method,\n headers,\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined,\n signal: controller.signal,\n });\n\n const text = await response.text();\n\n if (!response.ok) {\n throw new ApiError(response.status, response.statusText, text);\n }\n\n if (!text) {\n return undefined;\n }\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n } finally {\n clearTimeout(timer);\n }\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\nimport { redactTokens } from '../utils';\n\nexport function registerAuthTools(server: McpServer, api: ApiClient): void {\n server.registerTool(\n 'auth_login',\n {\n description: 'Authenticate with email and password. WARNING: The password will be visible in the conversation context. Token values are redacted in the response.',\n inputSchema: {\n email: z.string().email(),\n password: z.string().min(1),\n },\n },\n async ({ email, password }) => {\n try {\n const result = await api.post('/auth/login', {\n body: { email, password },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(redactTokens(result), null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Login failed: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'auth_me',\n {\n description: 'Get the currently authenticated user profile',\n },\n async () => {\n try {\n const result = await api.get('/auth/me');\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(redactTokens(result), null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get profile: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'auth_update_profile',\n {\n description: 'Update the currently authenticated user profile',\n inputSchema: {\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n displayName: z.string().optional(),\n },\n },\n async ({ firstName, lastName, displayName }) => {\n try {\n const body: Record<string, string> = {};\n if (firstName !== undefined) body.firstName = firstName;\n if (lastName !== undefined) body.lastName = lastName;\n if (displayName !== undefined) body.displayName = displayName;\n\n if (Object.keys(body).length === 0) {\n return {\n content: [{ type: 'text' as const, text: 'At least one field must be provided' }],\n isError: true as const,\n };\n }\n\n const result = await api.patch('/auth/me', { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(redactTokens(result), null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Profile update failed: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","const TOKEN_KEYS = new Set([\n 'access_token', 'refresh_token', 'id_token',\n 'accessToken', 'refreshToken', 'idToken',\n]);\n\n/**\n * Recursively redact token fields from API responses.\n * Handles both snake_case and camelCase token field names.\n */\nexport function redactTokens(data: unknown): unknown {\n if (typeof data !== 'object' || data === null) return data;\n if (Array.isArray(data)) return data.map(redactTokens);\n const record = data as Record<string, unknown>;\n const redacted: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n if (TOKEN_KEYS.has(key)) {\n redacted[key] = '[REDACTED]';\n } else {\n redacted[key] = redactTokens(value);\n }\n }\n return redacted;\n}\n\n/**\n * Recursively redact secret fields from API responses.\n * Replaces clientSecret and secret values with '[REDACTED]'.\n */\nexport function redactSecrets(data: unknown): unknown {\n if (typeof data !== 'object' || data === null) return data;\n if (Array.isArray(data)) return data.map(redactSecrets);\n const record = data as Record<string, unknown>;\n const redacted: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n if (key === 'clientSecret' || key === 'secret') {\n redacted[key] = '[REDACTED]';\n } else {\n redacted[key] = redactSecrets(value);\n }\n }\n return redacted;\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\n\nexport function registerProjectTools(server: McpServer, api: ApiClient): void {\n server.registerTool(\n 'projects_list',\n {\n description: 'List all projects, optionally filtered by role',\n inputSchema: {\n role: z.string().optional(),\n },\n },\n async ({ role }) => {\n try {\n const result = await api.get('/projects', {\n params: { role },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list projects: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_get',\n {\n description: 'Get a project by its ID',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/projects/${encodeURIComponent(projectId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get project: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_get_by_slug',\n {\n description: 'Get a project by its slug',\n inputSchema: {\n slug: z.string(),\n },\n },\n async ({ slug }) => {\n try {\n const result = await api.get(`/projects/slug/${encodeURIComponent(slug)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get project by slug: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_create',\n {\n description: 'Create a new project',\n inputSchema: {\n name: z.string(),\n slug: z.string(),\n description: z.string().optional(),\n logoUrl: z.string().url().optional(),\n websiteUrl: z.string().url().optional(),\n },\n },\n async ({ name, slug, description, logoUrl, websiteUrl }) => {\n try {\n const body: Record<string, string> = { name, slug };\n if (description !== undefined) body.description = description;\n if (logoUrl !== undefined) body.logoUrl = logoUrl;\n if (websiteUrl !== undefined) body.websiteUrl = websiteUrl;\n\n const result = await api.post('/projects', { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create project: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_update',\n {\n description: 'Update an existing project',\n inputSchema: {\n projectId: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n logoUrl: z.string().url().optional(),\n websiteUrl: z.string().url().optional(),\n },\n },\n async ({ projectId, name, description, logoUrl, websiteUrl }) => {\n try {\n const body: Record<string, string> = {};\n if (name !== undefined) body.name = name;\n if (description !== undefined) body.description = description;\n if (logoUrl !== undefined) body.logoUrl = logoUrl;\n if (websiteUrl !== undefined) body.websiteUrl = websiteUrl;\n\n if (Object.keys(body).length === 0) {\n return {\n content: [{ type: 'text' as const, text: 'At least one field must be provided' }],\n isError: true as const,\n };\n }\n\n const result = await api.patch(`/projects/${encodeURIComponent(projectId)}`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update project: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_delete',\n {\n description: 'Delete a project by its ID',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.delete(`/projects/${encodeURIComponent(projectId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Project deleted', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete project: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_members_list',\n {\n description: 'List members of a project with optional pagination',\n inputSchema: {\n projectId: z.string(),\n limit: z.number().int().min(1).max(100).optional(),\n offset: z.number().int().min(0).optional(),\n },\n },\n async ({ projectId, limit, offset }) => {\n try {\n const result = await api.get(`/projects/${encodeURIComponent(projectId)}/members`, {\n params: { limit, offset },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list members: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_members_add',\n {\n description: 'Add a member to a project by email with a specified role',\n inputSchema: {\n projectId: z.string(),\n email: z.string().email(),\n role: z.enum(['owner', 'admin', 'developer', 'member', 'viewer']),\n permissions: z.array(z.string()).optional(),\n },\n },\n async ({ projectId, email, role, permissions }) => {\n try {\n const body: Record<string, unknown> = { email, role };\n if (permissions !== undefined) body.permissions = permissions;\n const result = await api.post(`/projects/${encodeURIComponent(projectId)}/members`, {\n body,\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to add member: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_members_update',\n {\n description: 'Update a project member\\'s role, permissions, or console access',\n inputSchema: {\n projectId: z.string(),\n memberId: z.string(),\n role: z.enum(['owner', 'admin', 'developer', 'member', 'viewer']).optional(),\n permissions: z.array(z.string()).optional(),\n grantConsoleAccess: z.boolean().optional(),\n },\n },\n async ({ projectId, memberId, role, permissions, grantConsoleAccess }) => {\n try {\n const body: Record<string, unknown> = {};\n if (role !== undefined) body.role = role;\n if (permissions !== undefined) body.permissions = permissions;\n if (grantConsoleAccess !== undefined) body.grantConsoleAccess = grantConsoleAccess;\n\n if (Object.keys(body).length === 0) {\n return {\n content: [{ type: 'text' as const, text: 'At least one field must be provided' }],\n isError: true as const,\n };\n }\n\n const result = await api.patch(`/projects/${encodeURIComponent(projectId)}/members/${encodeURIComponent(memberId)}`, {\n body,\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update member: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_members_remove',\n {\n description: 'Remove a member from a project',\n inputSchema: {\n projectId: z.string(),\n memberId: z.string(),\n },\n },\n async ({ projectId, memberId }) => {\n try {\n const result = await api.delete(`/projects/${encodeURIComponent(projectId)}/members/${encodeURIComponent(memberId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Member removed', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to remove member: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_users_create',\n {\n description: 'Create a new user within a project. WARNING: The password will be visible in the conversation context.',\n inputSchema: {\n projectId: z.string(),\n username: z.string(),\n email: z.string().email(),\n password: z.string().min(1),\n role: z.enum(['owner', 'admin', 'developer', 'member', 'viewer']),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n displayName: z.string().optional(),\n permissions: z.array(z.string()).optional(),\n grantConsoleAccess: z.boolean().optional(),\n },\n },\n async ({ projectId, username, email, password, role, firstName, lastName, displayName, permissions, grantConsoleAccess }) => {\n try {\n const body: Record<string, unknown> = { username, email, password, role };\n if (firstName !== undefined) body.firstName = firstName;\n if (lastName !== undefined) body.lastName = lastName;\n if (displayName !== undefined) body.displayName = displayName;\n if (permissions !== undefined) body.permissions = permissions;\n if (grantConsoleAccess !== undefined) body.grantConsoleAccess = grantConsoleAccess;\n\n const result = await api.post(`/projects/${encodeURIComponent(projectId)}/users`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create user: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_role',\n {\n description: 'Get the current user\\'s role in a project',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/projects/${encodeURIComponent(projectId)}/role`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get role: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\nimport { redactSecrets } from '../utils';\n\nexport function registerClientTools(server: McpServer, api: ApiClient): void {\n server.registerTool(\n 'clients_list',\n {\n description: 'List all OAuth clients for a project',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/clients/project/${encodeURIComponent(projectId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(redactSecrets(result), null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list clients: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'clients_get',\n {\n description: 'Get details of a specific OAuth client',\n inputSchema: {\n clientId: z.string(),\n },\n },\n async ({ clientId }) => {\n try {\n const result = await api.get(`/clients/${encodeURIComponent(clientId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(redactSecrets(result), null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get client: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'clients_create',\n {\n description: 'Create a new OAuth client for a project',\n inputSchema: {\n projectId: z.string(),\n name: z.string(),\n grantTypes: z.array(z.string()),\n redirectUris: z.array(z.string().url()).optional(),\n scopes: z.array(z.string()).optional(),\n isConfidential: z.boolean().optional(),\n corsOrigins: z.array(z.string()).optional(),\n accessTokenTtl: z.number().optional(),\n },\n },\n async ({ projectId, name, grantTypes, redirectUris, scopes, isConfidential, corsOrigins, accessTokenTtl }) => {\n try {\n const body: Record<string, unknown> = { projectId, name, grantTypes };\n if (redirectUris !== undefined) body.redirectUris = redirectUris;\n if (scopes !== undefined) body.scopes = scopes;\n if (isConfidential !== undefined) body.isConfidential = isConfidential;\n if (corsOrigins !== undefined) body.corsOrigins = corsOrigins;\n if (accessTokenTtl !== undefined) body.accessTokenTtl = accessTokenTtl;\n\n const result = await api.post('/clients', { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(redactSecrets(result), null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create client: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'clients_update',\n {\n description: 'Update an existing OAuth client',\n inputSchema: {\n clientId: z.string(),\n name: z.string().optional(),\n redirectUris: z.array(z.string().url()).optional(),\n scopes: z.array(z.string()).optional(),\n grantTypes: z.array(z.string()).optional(),\n isActive: z.boolean().optional(),\n corsOrigins: z.array(z.string()).optional(),\n accessTokenTtl: z.number().optional(),\n },\n },\n async ({ clientId, name, redirectUris, scopes, grantTypes, isActive, corsOrigins, accessTokenTtl }) => {\n try {\n const body: Record<string, unknown> = {};\n if (name !== undefined) body.name = name;\n if (redirectUris !== undefined) body.redirectUris = redirectUris;\n if (scopes !== undefined) body.scopes = scopes;\n if (grantTypes !== undefined) body.grantTypes = grantTypes;\n if (isActive !== undefined) body.isActive = isActive;\n if (corsOrigins !== undefined) body.corsOrigins = corsOrigins;\n if (accessTokenTtl !== undefined) body.accessTokenTtl = accessTokenTtl;\n\n if (Object.keys(body).length === 0) {\n return {\n content: [{ type: 'text' as const, text: 'At least one field must be provided' }],\n isError: true as const,\n };\n }\n\n const result = await api.patch(`/clients/${encodeURIComponent(clientId)}`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(redactSecrets(result), null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update client: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'clients_delete',\n {\n description: 'Delete an OAuth client',\n inputSchema: {\n clientId: z.string(),\n },\n },\n async ({ clientId }) => {\n try {\n const result = await api.delete(`/clients/${encodeURIComponent(clientId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Client deleted', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete client: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // Intentionally NOT redacted — the new secret can only be retrieved once.\n // Other clients_* tools use redactSecrets() to hide stored secrets.\n server.registerTool(\n 'clients_regenerate_secret',\n {\n description: 'Regenerate the secret for an OAuth client. WARNING: The new secret will be visible in the conversation context. This is the only time the secret can be retrieved.',\n inputSchema: {\n clientId: z.string(),\n },\n },\n async ({ clientId }) => {\n try {\n const result = await api.post(`/clients/${encodeURIComponent(clientId)}/regenerate-secret`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to regenerate client secret: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\n\nexport function registerDatabaseTools(server: McpServer, api: ApiClient): void {\n // --- Collections ---\n\n server.registerTool(\n 'database_collections_list',\n {\n description: 'List all collections in a project database',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/databases/${encodeURIComponent(projectId)}/collections`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list collections: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_collections_create',\n {\n description: 'Create a new collection in a project database',\n inputSchema: {\n projectId: z.string(),\n name: z.string(),\n description: z.string().optional(),\n },\n },\n async ({ projectId, name, description }) => {\n try {\n const body: Record<string, unknown> = { name };\n if (description !== undefined) body.description = description;\n\n const result = await api.post(`/databases/${encodeURIComponent(projectId)}/collections`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create collection: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_collections_delete',\n {\n description: 'Delete a collection from a project database',\n inputSchema: {\n projectId: z.string(),\n name: z.string(),\n },\n },\n async ({ projectId, name }) => {\n try {\n const result = await api.delete(`/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(name)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Collection deleted', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete collection: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // --- Security Rules ---\n\n server.registerTool(\n 'database_rules_get',\n {\n description: 'Get the security rules for a project database',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/databases/${encodeURIComponent(projectId)}/rules`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get rules: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_rules_set',\n {\n description: 'Set security rules for a project database',\n inputSchema: {\n projectId: z.string(),\n rules: z.record(z.string(), z.unknown()),\n expectedVersion: z.number().optional(),\n },\n },\n async ({ projectId, rules, expectedVersion }) => {\n try {\n const body: Record<string, unknown> = { rules };\n if (expectedVersion !== undefined) body.expectedVersion = expectedVersion;\n\n const result = await api.put(`/databases/${encodeURIComponent(projectId)}/rules`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to set rules: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_rules_validate',\n {\n description: 'Validate security rules without applying them',\n inputSchema: {\n projectId: z.string(),\n rules: z.record(z.string(), z.unknown()),\n },\n },\n async ({ projectId, rules }) => {\n try {\n const result = await api.post(`/databases/${encodeURIComponent(projectId)}/rules/validate`, {\n body: { rules },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to validate rules: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // --- Index Rules ---\n\n server.registerTool(\n 'database_index_rules_get',\n {\n description: 'Get the index rules for a project database',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/databases/${encodeURIComponent(projectId)}/index-rules`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get index rules: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_index_rules_sync',\n {\n description: 'Sync index rules for a project database',\n inputSchema: {\n projectId: z.string(),\n indexRules: z.record(z.string(), z.unknown()),\n },\n },\n async ({ projectId, indexRules }) => {\n try {\n const result = await api.put(`/databases/${encodeURIComponent(projectId)}/index-rules`, {\n body: { indexRules },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to sync index rules: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // --- Indexes ---\n\n server.registerTool(\n 'database_indexes_list',\n {\n description: 'List all indexes for a collection',\n inputSchema: {\n projectId: z.string(),\n collectionName: z.string(),\n },\n },\n async ({ projectId, collectionName }) => {\n try {\n const result = await api.get(`/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(collectionName)}/indexes`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list indexes: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_indexes_create',\n {\n description: 'Create a new index on a collection',\n inputSchema: {\n projectId: z.string(),\n collectionName: z.string(),\n fields: z.record(z.string(), z.union([z.literal(1), z.literal(-1), z.literal('text')])),\n unique: z.boolean().optional(),\n sparse: z.boolean().optional(),\n ttlSeconds: z.number().optional(),\n },\n },\n async ({ projectId, collectionName, fields, unique, sparse, ttlSeconds }) => {\n try {\n const body: Record<string, unknown> = { fields };\n if (unique !== undefined) body.unique = unique;\n if (sparse !== undefined) body.sparse = sparse;\n if (ttlSeconds !== undefined) body.ttlSeconds = ttlSeconds;\n\n const result = await api.post(`/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(collectionName)}/indexes`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create index: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_indexes_delete',\n {\n description: 'Delete an index from a collection',\n inputSchema: {\n projectId: z.string(),\n collectionName: z.string(),\n indexName: z.string(),\n },\n },\n async ({ projectId, collectionName, indexName }) => {\n try {\n const result = await api.delete(\n `/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(collectionName)}/indexes/${encodeURIComponent(indexName)}`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Index deleted', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete index: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // --- Documents ---\n\n server.registerTool(\n 'database_documents_find',\n {\n description: 'Query documents in a collection with optional filter, sort, field projection, limit (max 100), and offset',\n inputSchema: {\n projectId: z.string(),\n collectionName: z.string(),\n filter: z.record(z.string(), z.unknown()).optional(),\n sort: z.record(z.string(), z.union([z.literal(1), z.literal(-1)])).optional(),\n fields: z.array(z.string()).optional(),\n limit: z.number().int().min(1).max(100).optional(),\n offset: z.number().int().min(0).optional(),\n },\n },\n async ({ projectId, collectionName, filter, sort, fields, limit, offset }) => {\n try {\n const params: Record<string, string | number | boolean | undefined> = {};\n if (filter !== undefined) params.filter = JSON.stringify(filter);\n if (sort !== undefined) params.sort = JSON.stringify(sort);\n if (fields !== undefined) params.fields = JSON.stringify(fields);\n if (limit !== undefined) params.limit = limit;\n if (offset !== undefined) params.offset = offset;\n\n const result = await api.get(\n `/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(collectionName)}/documents`,\n { params },\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to find documents: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_documents_insert',\n {\n description: 'Insert one or more documents into a collection',\n inputSchema: {\n projectId: z.string(),\n collectionName: z.string(),\n documents: z.array(z.record(z.string(), z.unknown())).min(1).max(500),\n },\n },\n async ({ projectId, collectionName, documents }) => {\n try {\n const result = await api.post(\n `/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(collectionName)}/documents`,\n { body: { documents } },\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to insert documents: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_documents_update',\n {\n description: 'Update a specific document in a collection',\n inputSchema: {\n projectId: z.string(),\n collectionName: z.string(),\n docId: z.string(),\n update: z.record(z.string(), z.unknown()),\n },\n },\n async ({ projectId, collectionName, docId, update }) => {\n try {\n const result = await api.patch(\n `/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(collectionName)}/documents/${encodeURIComponent(docId)}`,\n { body: { update } },\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update document: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_documents_delete',\n {\n description: 'Delete a specific document from a collection',\n inputSchema: {\n projectId: z.string(),\n collectionName: z.string(),\n docId: z.string(),\n },\n },\n async ({ projectId, collectionName, docId }) => {\n try {\n const result = await api.delete(\n `/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(collectionName)}/documents/${encodeURIComponent(docId)}`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Document deleted', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete document: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // --- Stats ---\n\n server.registerTool(\n 'database_stats',\n {\n description: 'Get database statistics for a project',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/databases/${encodeURIComponent(projectId)}/stats`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get database stats: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\n\nexport function registerHostingTools(server: McpServer, api: ApiClient): void {\n server.registerTool(\n 'hosting_deployments_list',\n {\n description: 'List deployments for a hosting project',\n inputSchema: {\n projectId: z.string(),\n limit: z.number().int().min(1).max(100).optional(),\n offset: z.number().int().min(0).optional(),\n },\n },\n async ({ projectId, limit, offset }) => {\n try {\n const result = await api.get(`/hosting/projects/${encodeURIComponent(projectId)}/deployments`, {\n params: { limit, offset },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list deployments: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_deployments_get',\n {\n description: 'Get details of a specific deployment',\n inputSchema: {\n projectId: z.string(),\n deploymentId: z.string(),\n },\n },\n async ({ projectId, deploymentId }) => {\n try {\n const result = await api.get(`/hosting/projects/${encodeURIComponent(projectId)}/deployments/${encodeURIComponent(deploymentId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get deployment: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // Note: create and activate use /hosting/deployments (flat route) — intentional,\n // matches the admin gateway controller which scopes these by projectId in the body.\n server.registerTool(\n 'hosting_deployments_create',\n {\n description: 'Create a new deployment for a hosting project',\n inputSchema: {\n projectId: z.string(),\n description: z.string().optional(),\n framework: z.string().optional(),\n },\n },\n async ({ projectId, description, framework }) => {\n try {\n const body: Record<string, unknown> = { projectId };\n if (description !== undefined) body.description = description;\n if (framework !== undefined) body.framework = framework;\n\n const result = await api.post('/hosting/deployments', { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create deployment: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_deployments_activate',\n {\n description: 'Activate a specific deployment',\n inputSchema: {\n projectId: z.string(),\n deploymentId: z.string(),\n },\n },\n async ({ projectId, deploymentId }) => {\n try {\n const result = await api.post(`/hosting/deployments/${encodeURIComponent(deploymentId)}/activate`, {\n body: { projectId },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to activate deployment: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_deployments_delete',\n {\n description: 'Delete a specific deployment',\n inputSchema: {\n projectId: z.string(),\n deploymentId: z.string(),\n },\n },\n async ({ projectId, deploymentId }) => {\n try {\n const result = await api.delete(`/hosting/projects/${encodeURIComponent(projectId)}/deployments/${encodeURIComponent(deploymentId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Deployment deleted', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete deployment: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_deployments_status',\n {\n description: 'Get the status of a specific deployment',\n inputSchema: {\n projectId: z.string(),\n deploymentId: z.string(),\n },\n },\n async ({ projectId, deploymentId }) => {\n try {\n const result = await api.get(`/hosting/projects/${encodeURIComponent(projectId)}/deployments/${encodeURIComponent(deploymentId)}/status`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get deployment status: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_config_get',\n {\n description: 'Get hosting configuration for a project',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/hosting/projects/${encodeURIComponent(projectId)}/config`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get hosting config: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_config_update',\n {\n description: 'Update hosting configuration for a project',\n inputSchema: {\n projectId: z.string(),\n spaMode: z.boolean().optional(),\n defaultFile: z.string().optional(),\n headers: z.record(z.string(), z.string()).optional(),\n enabled: z.boolean().optional(),\n },\n },\n async ({ projectId, spaMode, defaultFile, headers, enabled }) => {\n try {\n const body: Record<string, unknown> = {};\n if (spaMode !== undefined) body.spaMode = spaMode;\n if (defaultFile !== undefined) body.defaultFile = defaultFile;\n if (headers !== undefined) body.headers = headers;\n if (enabled !== undefined) body.enabled = enabled;\n\n if (Object.keys(body).length === 0) {\n return {\n content: [{ type: 'text' as const, text: 'At least one config field must be provided' }],\n isError: true as const,\n };\n }\n\n const result = await api.patch(`/hosting/projects/${encodeURIComponent(projectId)}/config`, {\n body,\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update hosting config: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_domains_list',\n {\n description: 'List custom domains for a hosting project',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/hosting/projects/${encodeURIComponent(projectId)}/domains`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list domains: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_domains_get',\n {\n description: 'Get details of a specific custom domain',\n inputSchema: {\n projectId: z.string(),\n domain: z.string(),\n },\n },\n async ({ projectId, domain }) => {\n try {\n const result = await api.get(`/hosting/projects/${encodeURIComponent(projectId)}/domains/${encodeURIComponent(domain)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get domain: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_domains_add',\n {\n description: 'Add a custom domain to a hosting project',\n inputSchema: {\n projectId: z.string(),\n domain: z.string(),\n projectSlug: z.string(),\n verificationMethod: z.enum(['cname', 'txt']).optional(),\n },\n },\n async ({ projectId, domain, projectSlug, verificationMethod }) => {\n try {\n const body: Record<string, unknown> = { domain, projectSlug };\n if (verificationMethod !== undefined) body.verificationMethod = verificationMethod;\n\n const result = await api.post(`/hosting/projects/${encodeURIComponent(projectId)}/domains`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to add domain: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_domains_verify',\n {\n description: 'Verify a custom domain for a hosting project',\n inputSchema: {\n projectId: z.string(),\n domain: z.string(),\n },\n },\n async ({ projectId, domain }) => {\n try {\n const result = await api.post(`/hosting/projects/${encodeURIComponent(projectId)}/domains/${encodeURIComponent(domain)}/verify`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to verify domain: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_domains_remove',\n {\n description: 'Remove a custom domain from a hosting project',\n inputSchema: {\n projectId: z.string(),\n domain: z.string(),\n },\n },\n async ({ projectId, domain }) => {\n try {\n const result = await api.delete(`/hosting/projects/${encodeURIComponent(projectId)}/domains/${encodeURIComponent(domain)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Domain removed', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to remove domain: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_domains_set_primary',\n {\n description: 'Set a custom domain as the primary domain for a hosting project',\n inputSchema: {\n projectId: z.string(),\n domain: z.string(),\n },\n },\n async ({ projectId, domain }) => {\n try {\n const result = await api.patch(`/hosting/projects/${encodeURIComponent(projectId)}/domains/${encodeURIComponent(domain)}/primary`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to set primary domain: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\n\nexport function registerStorageTools(server: McpServer, api: ApiClient): void {\n server.registerTool(\n 'storage_files_list',\n {\n description: 'List files in storage for a project and user',\n inputSchema: {\n projectId: z.string(),\n userId: z.string(),\n limit: z.number().int().min(1).max(100).optional(),\n offset: z.number().int().min(0).optional(),\n },\n },\n async ({ projectId, userId, limit, offset }) => {\n try {\n const result = await api.get('/storage/files', {\n params: { projectId, userId, limit, offset },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list files: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_files_get',\n {\n description: 'Get details of a specific file in storage',\n inputSchema: {\n projectId: z.string(),\n userId: z.string(),\n fileId: z.string(),\n },\n },\n async ({ projectId, userId, fileId }) => {\n try {\n const result = await api.get(`/storage/files/${encodeURIComponent(fileId)}`, {\n params: { projectId, userId },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get file: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_files_delete',\n {\n description: 'Delete a specific file from storage',\n inputSchema: {\n projectId: z.string(),\n userId: z.string(),\n fileId: z.string(),\n },\n },\n async ({ projectId, userId, fileId }) => {\n try {\n const result = await api.delete(`/storage/files/${encodeURIComponent(fileId)}`, {\n params: { projectId, userId },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'File deleted', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete file: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_files_visibility',\n {\n description: 'Update the visibility of a specific file',\n inputSchema: {\n projectId: z.string(),\n userId: z.string(),\n fileId: z.string(),\n visibility: z.enum(['public', 'private']),\n },\n },\n async ({ projectId, userId, fileId, visibility }) => {\n try {\n const result = await api.patch(`/storage/files/${encodeURIComponent(fileId)}/visibility`, {\n params: { projectId, userId },\n body: { visibility },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update file visibility: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_files_share',\n {\n description: 'Share a file with other users',\n inputSchema: {\n projectId: z.string(),\n userId: z.string(),\n fileId: z.string(),\n userIds: z.array(z.string()),\n permission: z.enum(['read', 'write']).optional(),\n },\n },\n async ({ projectId, userId, fileId, userIds, permission }) => {\n try {\n const result = await api.post(`/storage/files/${encodeURIComponent(fileId)}/share`, {\n params: { projectId, userId },\n body: { userIds, permission },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to share file: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_files_unshare',\n {\n description: 'Remove file sharing for specific users',\n inputSchema: {\n projectId: z.string(),\n userId: z.string(),\n fileId: z.string(),\n userIds: z.array(z.string()),\n },\n },\n async ({ projectId, userId, fileId, userIds }) => {\n try {\n const result = await api.post(`/storage/files/${encodeURIComponent(fileId)}/unshare`, {\n params: { projectId, userId },\n body: { userIds },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to unshare file: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_quota_get',\n {\n description: 'Get storage quota information for a user in a project',\n inputSchema: {\n projectId: z.string(),\n userId: z.string(),\n },\n },\n async ({ projectId, userId }) => {\n try {\n const result = await api.get('/storage/quota', {\n params: { projectId, userId },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get quota: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_quota_set',\n {\n description: 'Set storage quota for a user in a project',\n inputSchema: {\n projectId: z.string(),\n targetUserId: z.string(),\n quotaBytes: z.number().int().min(0),\n },\n },\n async ({ projectId, targetUserId, quotaBytes }) => {\n try {\n const result = await api.put('/storage/quota', {\n body: { projectId, targetUserId, quotaBytes },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to set quota: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_project_stats',\n {\n description: 'Get storage statistics for a project',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get('/storage/project-stats', {\n params: { projectId },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get project stats: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\n\nexport function registerFunctionTools(server: McpServer, api: ApiClient): void {\n // ─── CRUD ────────────────────────────────────────────────────\n\n server.registerTool(\n 'functions_list',\n {\n description: 'List all functions for a project',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(\n `/projects/${encodeURIComponent(projectId)}/functions`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list functions: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_get',\n {\n description: 'Get details of a specific function',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.get(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get function: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_create',\n {\n description: 'Create a new serverless function in a project',\n inputSchema: {\n projectId: z.string(),\n name: z.string().min(1).max(255),\n description: z.string().max(1000).optional(),\n entryPoint: z.string().max(255).optional(),\n cronExpression: z.string().optional(),\n cronTimezone: z.string().optional(),\n timeout: z.number().int().min(1000).max(120000).optional(),\n memoryLimitMb: z.number().int().min(16).max(512).optional(),\n enabled: z.boolean().optional(),\n },\n },\n async ({ projectId, ...body }) => {\n try {\n const result = await api.post(\n `/projects/${encodeURIComponent(projectId)}/functions`,\n { body },\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create function: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_update',\n {\n description: 'Update an existing function',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n name: z.string().min(1).max(255).optional(),\n description: z.string().max(1000).optional(),\n entryPoint: z.string().max(255).optional(),\n cronExpression: z.string().optional(),\n cronTimezone: z.string().optional(),\n timeout: z.number().int().min(1000).max(120000).optional(),\n memoryLimitMb: z.number().int().min(16).max(512).optional(),\n enabled: z.boolean().optional(),\n },\n },\n async ({ projectId, functionId, ...body }) => {\n try {\n const result = await api.patch(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}`,\n { body },\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update function: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_delete',\n {\n description: 'Delete a function and its associated cron job',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.delete(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete function: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // ─── Code & Deployments ──────────────────────────────────────\n\n server.registerTool(\n 'functions_get_code',\n {\n description: 'Get the deployed source code of a function with syntax-highlighted file contents',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.get(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/code`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get function code: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_deployments_list',\n {\n description: 'List all deployments (versions) of a function',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.get(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/deployments`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list deployments: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // ─── Execution ───────────────────────────────────────────────\n\n server.registerTool(\n 'functions_trigger',\n {\n description: 'Manually trigger a function execution',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.post(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/trigger`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to trigger function: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_executions_list',\n {\n description: 'List recent executions of a function with status, duration, and logs',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n limit: z.number().int().min(1).max(100).optional(),\n offset: z.number().int().min(0).optional(),\n },\n },\n async ({ projectId, functionId, limit, offset }) => {\n try {\n const result = await api.get(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/executions`,\n { params: { limit, offset } },\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list executions: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // ─── Webhooks ────────────────────────────────────────────────\n\n server.registerTool(\n 'functions_enable_webhook',\n {\n description: 'Enable webhook trigger for a function. Returns a one-time webhook secret.',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.post(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/webhook/enable`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to enable webhook: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_regenerate_webhook_secret',\n {\n description: 'Regenerate the webhook secret for a function. Old secret stops working immediately.',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.post(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/webhook/regenerate-secret`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to regenerate webhook secret: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_disable_webhook',\n {\n description: 'Disable webhook trigger for a function. The webhook secret is deleted.',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.post(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/webhook/disable`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to disable webhook: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // ─── KV Store ────────────────────────────────────────────────\n\n server.registerTool(\n 'functions_kv_list',\n {\n description: 'List KV store keys for a function',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.get(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/kv`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list KV keys: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { ApiClient } from '../api-client';\nimport { registerAuthTools } from './auth';\nimport { registerProjectTools } from './projects';\nimport { registerClientTools } from './clients';\nimport { registerDatabaseTools } from './database';\nimport { registerHostingTools } from './hosting';\nimport { registerStorageTools } from './storage';\nimport { registerFunctionTools } from './functions';\n\nexport function registerAllTools(server: McpServer, api: ApiClient): void {\n registerAuthTools(server, api);\n registerProjectTools(server, api);\n registerClientTools(server, api);\n registerDatabaseTools(server, api);\n registerHostingTools(server, api);\n registerStorageTools(server, api);\n registerFunctionTools(server, api);\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\n\nexport function registerDatabasePrompts(server: McpServer): void {\n server.registerPrompt(\n 'setup-collection',\n {\n title: 'Setup Database Collection',\n description:\n 'Guide for creating a new database collection with proper security rules. ' +\n 'Collections MUST have rules defined before data can be inserted.',\n argsSchema: {\n projectId: z.string().describe('Project ID'),\n collectionName: z.string().describe('Name of the collection to create'),\n access: z\n .enum(['public-read', 'authenticated', 'admin-only'])\n .optional()\n .describe('Access level (default: admin-only)'),\n },\n },\n async ({ projectId, collectionName, access }) => {\n const accessLevel = access || 'admin-only';\n\n const rules: Record<string, Record<string, string>> = {\n 'public-read': {\n '.create': 'true',\n '.read': 'true',\n '.update': 'false',\n '.delete': \"auth.role === 'owner' || auth.role === 'admin'\",\n },\n authenticated: {\n '.create': '!!auth.uid',\n '.read': '!!auth.uid',\n '.update': '!!auth.uid',\n '.delete': \"auth.role === 'owner' || auth.role === 'admin'\",\n },\n 'admin-only': {\n '.create': \"auth.role === 'owner' || auth.role === 'admin'\",\n '.read': \"auth.role === 'owner' || auth.role === 'admin'\",\n '.update': \"auth.role === 'owner' || auth.role === 'admin'\",\n '.delete': \"auth.role === 'owner' || auth.role === 'admin'\",\n },\n };\n\n const collectionRules = rules[accessLevel];\n const rulesJson = JSON.stringify(collectionRules, null, 2);\n\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: [\n `Set up a new database collection \"${collectionName}\" in project ${projectId}.`,\n '',\n 'IMPORTANT WORKFLOW:',\n '1. First, get the current rules with database_rules_get',\n '2. Add the new collection rules to the existing rules object',\n '3. Set the updated rules with database_rules_set — this automatically creates the collection',\n '4. Do NOT try to insert documents before the rules are set — it will fail with \"Rule denied\"',\n '',\n `Suggested rules for \"${collectionName}\" (${accessLevel}):`,\n rulesJson,\n '',\n 'The $other catch-all rule should deny access to undefined collections:',\n ' \"$other\": { \".read\": \"false\", \".write\": \"false\" }',\n '',\n 'After rules are set, the collection is ready for use via:',\n '- database_documents_insert',\n '- database_documents_find',\n '- Serverless functions using spacelr.db.collection(\"' + collectionName + '\")',\n ].join('\\n'),\n },\n },\n ],\n };\n },\n );\n\n server.registerPrompt(\n 'database-workflow',\n {\n title: 'Database Workflow Guide',\n description:\n 'Explains how the Spacelr database system works: rules-first approach, ' +\n 'collection lifecycle, and security model.',\n argsSchema: {\n projectId: z.string().describe('Project ID'),\n },\n },\n async ({ projectId }) => {\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: [\n `Guide me through the Spacelr database system for project ${projectId}.`,\n '',\n 'CORE CONCEPTS:',\n '',\n '1. RULES-FIRST: Collections are defined through security rules.',\n ' - Use database_rules_get to see current rules',\n ' - Use database_rules_set to add/modify collection rules',\n ' - Setting rules automatically creates the collection definition',\n ' - Without rules, all operations are denied by the $other catch-all',\n '',\n '2. SECURITY RULES SYNTAX:',\n ' - \".create\": Expression that must evaluate to true for inserts',\n ' - \".read\": Expression for reads/queries',\n ' - \".update\": Expression for document updates',\n ' - \".delete\": Expression for document deletion',\n ' - \".validate\": Per-field validation expressions',\n ' - \".schema\": Field type declarations',\n ' Available context: auth.uid, auth.role, newData (for validation)',\n '',\n '3. WORKFLOW:',\n ' a) Define rules for the collection',\n ' b) Optionally create indexes (database_indexes_create)',\n ' c) Insert/query documents',\n '',\n '4. DATA ISOLATION:',\n ' - Each project has its own database (project_{projectId})',\n ' - Collections are scoped to the project automatically',\n ' - No cross-project data access is possible',\n ].join('\\n'),\n },\n },\n ],\n };\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\n\nexport function registerFunctionPrompts(server: McpServer): void {\n server.registerPrompt(\n 'deploy-function',\n {\n title: 'Deploy a Serverless Function',\n description:\n 'Step-by-step guide for creating, deploying, and testing a serverless function. ' +\n 'Covers the full lifecycle from creation to execution.',\n argsSchema: {\n projectId: z.string().describe('Project ID'),\n name: z.string().describe('Function name'),\n useCase: z\n .string()\n .optional()\n .describe('What the function should do (e.g. \"fetch data from API and store in DB\")'),\n },\n },\n async ({ projectId, name, useCase }) => {\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: [\n `Deploy a serverless function \"${name}\" in project ${projectId}.`,\n useCase ? `Use case: ${useCase}` : '',\n '',\n 'DEPLOYMENT WORKFLOW:',\n '',\n '1. CREATE the function:',\n ' Use functions_create with name, entryPoint (default: index.js),',\n ' timeout (ms, default: 30000), memoryLimitMb (default: 128)',\n ' Optional: cronExpression for scheduled execution',\n '',\n '2. WRITE the code:',\n ' Create an index.js file. Available APIs inside the sandbox:',\n '',\n ' - console.log/warn/error/info() — captured to execution logs',\n ' - await fetch(url, options) — HTTP client (10s timeout, 5MB limit)',\n ' Response: { status, headers, body } where body is a STRING',\n ' Use JSON.parse(response.body) for JSON APIs',\n ' - env.get(key) — read environment variables',\n ' - await kv.get/set/delete/list() — Redis KV store (256KB values, 1000 keys)',\n ' - await spacelr.db.collection(name).find/insertOne/insertMany()',\n ' - await spacelr.storage.list/getInfo/getDownloadUrl()',\n '',\n ' IMPORTANT: Top-level await is supported. No imports/require available.',\n '',\n '3. IF USING spacelr.db:',\n ' Database rules MUST be set BEFORE the function writes to a collection.',\n ' Use the setup-collection prompt or manually set rules via database_rules_set.',\n ' Without rules, inserts will fail with \"Rule denied\".',\n '',\n '4. DEPLOY the code:',\n ' Zip the file(s) and upload via the CLI:',\n ' spacelr functions deploy ./my-function --name ' + name,\n ' Or use the admin API: POST /projects/{projectId}/functions/{id}/deploy',\n '',\n '5. TRIGGER:',\n ' Functions support multiple trigger types:',\n '',\n ' a) Manual: Use functions_trigger to execute on demand.',\n ' b) Cron: Set cronExpression when creating/updating the function.',\n ' c) Webhook: Enable with functions_enable_webhook to get a secret,',\n ' then POST to /api/v1/functions/{projectId}/{functionId}/invoke',\n ' with the X-Webhook-Secret header. Use functions_regenerate_webhook_secret',\n ' to rotate the secret (old secret stops working immediately).',\n ' d) Event: Configure event triggers to run the function in response',\n ' to platform events (e.g. database changes, storage uploads).',\n '',\n ' Check results with functions_executions_list.',\n '',\n '6. VERIFY:',\n ' Check execution status, logs, and duration.',\n ' Use functions_get_code to review the deployed source.',\n ].join('\\n'),\n },\n },\n ],\n };\n },\n );\n\n server.registerPrompt(\n 'function-sandbox-reference',\n {\n title: 'Function Sandbox API Reference',\n description:\n 'Complete reference for all APIs available inside a serverless function sandbox.',\n argsSchema: {},\n },\n async () => {\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: [\n 'Show me the complete API reference for the Spacelr function sandbox.',\n '',\n '═══ CONSOLE ═══',\n 'console.log(...args) — log level',\n 'console.info(...args) — info level',\n 'console.warn(...args) — warn level',\n 'console.error(...args) — error level',\n 'All logs are captured and stored in the execution record.',\n 'Log buffer is capped at 1MB.',\n '',\n '═══ FETCH ═══',\n 'const response = await fetch(url, options?)',\n ' options: { method, headers, body }',\n ' returns: { status: number, headers: Record<string,string>, body: string }',\n ' NOTE: body is always a string — use JSON.parse(response.body) for JSON',\n ' Limits: 10s timeout, 5MB response, no private/internal URLs (SSRF blocked)',\n '',\n '═══ ENV ═══',\n 'env.get(key) → string | undefined',\n 'Read-only access to function environment variables.',\n '',\n '═══ KV STORE ═══',\n 'await kv.get(key) → string | null',\n 'await kv.set(key, value, ttlSeconds?) → void',\n 'await kv.delete(key) → boolean',\n 'await kv.list(prefix?) → string[]',\n 'Backed by Redis. Scoped per function.',\n 'Limits: 256KB per value, 1000 keys per function, 30-day default TTL.',\n '',\n '═══ DATABASE ═══',\n 'const docs = await spacelr.db.collection(name).find(filter?, options?)',\n ' options: { sort, limit, offset }',\n 'await spacelr.db.collection(name).insertOne(doc)',\n 'await spacelr.db.collection(name).insertMany(docs)',\n 'Scoped to the function\\'s project. Requires database rules to be set first.',\n '',\n '═══ STORAGE ═══',\n 'await spacelr.storage.list(options?) → FileInfo[]',\n 'await spacelr.storage.getInfo(fileId) → FileInfo',\n 'await spacelr.storage.getDownloadUrl(fileId) → string',\n 'Scoped to the function\\'s project.',\n '',\n '═══ RESOURCE LIMITS ═══',\n 'Execution timeout: 30s default, 120s max',\n 'Memory: 128MB default, 512MB max',\n 'Code bundle: 10MB max (zip)',\n 'Concurrent executions: 10 per project',\n 'CPU time: limited by watchdog (equals timeout)',\n ].join('\\n'),\n },\n },\n ],\n };\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { registerDatabasePrompts } from './database';\nimport { registerFunctionPrompts } from './functions';\n\nexport function registerAllPrompts(server: McpServer): void {\n registerDatabasePrompts(server);\n registerFunctionPrompts(server);\n}\n"],"mappings":"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","names":["path","z","z","z","z","z","z","z","z","z"]}
1
+ {"version":3,"sources":["../../../../libs/mcp-server/src/index.ts","../../../../libs/mcp-server/src/config.ts","../../../../libs/mcp-server/src/api-client.ts","../../../../libs/mcp-server/src/tools/auth.ts","../../../../libs/mcp-server/src/utils.ts","../../../../libs/mcp-server/src/tools/projects.ts","../../../../libs/mcp-server/src/tools/clients.ts","../../../../libs/mcp-server/src/tools/database.ts","../../../../libs/mcp-server/src/tools/hosting.ts","../../../../libs/mcp-server/src/tools/storage.ts","../../../../libs/mcp-server/src/tools/functions.ts","../../../../libs/mcp-server/src/tools/emailTemplates.ts","../../../../libs/mcp-server/src/tools/index.ts","../../../../libs/mcp-server/src/prompts/database.ts","../../../../libs/mcp-server/src/prompts/functions.ts","../../../../libs/mcp-server/src/prompts/index.ts"],"sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { loadConfig } from './config';\nimport { ApiClient } from './api-client';\nimport { registerAllTools } from './tools';\nimport { registerAllPrompts } from './prompts';\n\nasync function main() {\n const config = await loadConfig();\n const api = new ApiClient(config);\n\n const server = new McpServer({\n name: 'spacelr',\n version: '0.1.0',\n });\n\n registerAllTools(server, api);\n registerAllPrompts(server);\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n const shutdown = async () => {\n console.error('Shutting down MCP server...');\n await server.close();\n process.exit(0);\n };\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n process.on('SIGPIPE', shutdown);\n\n console.error('Spacelr MCP server running on stdio');\n}\n\nmain().catch((error: unknown) => {\n console.error('Fatal error:', error);\n process.exit(1);\n});\n","import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\n\nexport interface Config {\n apiBaseUrl: string;\n authToken: string;\n clientId: string | undefined;\n projectId: string | undefined;\n}\n\ninterface StoredCredentials {\n accessToken: string;\n refreshToken?: string;\n expiresAt: number;\n apiUrl: string;\n}\n\ninterface TokenResponse {\n access_token: string;\n refresh_token?: string;\n expires_in?: number;\n}\n\nconst REFRESH_TIMEOUT_MS = 10_000;\n\nfunction getCredentialsFile(): string {\n const home = os.homedir();\n return path.join(home, '.spacelr', 'credentials.json');\n}\n\nfunction readStoredCredentials(): StoredCredentials | null {\n try {\n const file = getCredentialsFile();\n if (!fs.existsSync(file)) return null;\n const content = fs.readFileSync(file, 'utf-8');\n const parsed: unknown = JSON.parse(content);\n if (\n typeof parsed !== 'object' ||\n parsed === null ||\n typeof (parsed as Record<string, unknown>).accessToken !== 'string' ||\n !Number.isFinite((parsed as Record<string, unknown>).expiresAt) ||\n typeof (parsed as Record<string, unknown>).apiUrl !== 'string'\n ) {\n return null;\n }\n return parsed as StoredCredentials;\n } catch {\n return null;\n }\n}\n\nfunction storeCredentials(credentials: StoredCredentials): void {\n const file = getCredentialsFile();\n fs.mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 });\n fs.writeFileSync(file, JSON.stringify(credentials, null, 2), {\n mode: 0o600,\n });\n}\n\nasync function refreshToken(\n credentials: StoredCredentials,\n): Promise<string | null> {\n if (!credentials.refreshToken || !credentials.apiUrl) return null;\n\n const apiUrl = credentials.apiUrl.replace(/\\/+$/, '');\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), REFRESH_TIMEOUT_MS);\n\n try {\n console.error('Refreshing access token...');\n const response = await fetch(`${apiUrl}/auth/refresh`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ refreshToken: credentials.refreshToken }),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n console.error(`Token refresh failed (HTTP ${response.status})`);\n return null;\n }\n\n const data = (await response.json()) as TokenResponse;\n if (typeof data.access_token !== 'string') {\n console.error('Token refresh returned unexpected response shape');\n return null;\n }\n const updated: StoredCredentials = {\n accessToken: data.access_token,\n refreshToken: data.refresh_token ?? credentials.refreshToken,\n expiresAt: Date.now() + (data.expires_in ?? 3600) * 1000,\n apiUrl: credentials.apiUrl,\n };\n storeCredentials(updated);\n console.error('Token refreshed successfully');\n return data.access_token;\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') {\n console.error('Token refresh timed out');\n } else {\n console.error('Token refresh error');\n }\n return null;\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function resolveAuthToken(forceRefresh = false): Promise<string | null> {\n // 1. Environment variable takes priority (CI/automation)\n const envToken = process.env['SPACELR_AUTH_TOKEN'];\n if (envToken) return envToken;\n\n // 2. Read from CLI credentials file (~/.spacelr/credentials.json)\n const credentials = readStoredCredentials();\n if (!credentials) return null;\n\n // 3. Check if token is still valid (60s buffer) — skip when forced\n const isExpired = Date.now() >= credentials.expiresAt - 60_000;\n if (!forceRefresh && !isExpired) return credentials.accessToken;\n\n // 4. Try to refresh expired (or force-refreshed) token\n return refreshToken(credentials);\n}\n\nfunction warnIfInsecureUrl(url: string): void {\n if (\n url.startsWith('http://') &&\n !url.includes('localhost') &&\n !/^http:\\/\\/(127\\.|10\\.|192\\.168\\.|172\\.(1[6-9]|2\\d|3[01])\\.|0\\.0\\.0\\.0|(\\[::1\\]))(\\/|:|$)/.test(url)\n ) {\n console.error(`Warning: API URL uses plain HTTP (${url}). Credentials will be transmitted unencrypted.`);\n }\n}\n\nfunction resolveApiUrl(credentials: StoredCredentials | null): string {\n const envUrl = process.env['SPACELR_API_URL'];\n if (envUrl) {\n try {\n const parsed = new URL(envUrl);\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new Error(`Unsupported protocol: ${parsed.protocol}`);\n }\n } catch (err) {\n throw new Error(`Invalid SPACELR_API_URL: ${envUrl} — ${err instanceof Error ? err.message : String(err)}`);\n }\n const resolved = envUrl.replace(/\\/+$/, '');\n warnIfInsecureUrl(resolved);\n return resolved;\n }\n\n // Derive admin API URL from stored credentials apiUrl\n // CLI stores the public gateway URL (e.g. https://api.spacelr.com/api/v1)\n // In production, admin gateway runs on a separate host (api-console.spacelr.com)\n // In local dev, admin gateway runs on a separate port (localhost:3003)\n if (credentials?.apiUrl) {\n const base = credentials.apiUrl.replace(/\\/+$/, '');\n // Already an admin URL\n if (base.includes('/api/v1/admin')) return base;\n // Local dev: derive admin port from public gateway\n if (base.includes('localhost') || base.includes('127.0.0.1') || base.includes('[::1]')) {\n return 'http://localhost:3003/api/v1/admin';\n }\n // Production: cannot safely derive admin host from public host\n throw new Error(\n `SPACELR_API_URL is required for production. The CLI credentials point to ${base} (public gateway), ` +\n 'but the admin gateway runs on a separate host. ' +\n 'Set SPACELR_API_URL to the admin gateway URL (e.g. https://api-console.spacelr.com/api/v1/admin).',\n );\n }\n\n const defaultUrl = 'http://localhost:3003/api/v1/admin';\n console.error(`Warning: No API URL configured, using default: ${defaultUrl}`);\n return defaultUrl;\n}\n\nexport function resolveApiBaseUrl(): string | null {\n try {\n const credentials = readStoredCredentials();\n return resolveApiUrl(credentials);\n } catch {\n return null;\n }\n}\n\nexport async function loadConfig(): Promise<Config> {\n const credentials = readStoredCredentials();\n const authToken = await resolveAuthToken();\n\n if (!authToken) {\n throw new Error(\n 'No auth token found. Either set SPACELR_AUTH_TOKEN or run \"spacelr login\" first.',\n );\n }\n\n return {\n apiBaseUrl: resolveApiUrl(credentials),\n authToken,\n clientId: process.env['SPACELR_CLIENT_ID'],\n projectId: process.env['SPACELR_PROJECT_ID'],\n };\n}\n","import { Config, resolveAuthToken, resolveApiBaseUrl } from './config';\n\ninterface RequestOptions {\n params?: Record<string, string | number | boolean | undefined>;\n body?: unknown;\n}\n\ntype HttpMethod = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';\n\nconst REQUEST_TIMEOUT_MS = 30_000;\n\nexport class ApiError extends Error {\n constructor(\n public readonly status: number,\n public readonly statusText: string,\n responseBody: string,\n ) {\n const truncated =\n responseBody.length > 500\n ? responseBody.slice(0, 500) + '...'\n : responseBody;\n super(`HTTP ${status} ${statusText}: ${truncated}`);\n this.name = 'ApiError';\n }\n}\n\nexport class ApiClient {\n private baseUrl: string;\n private readonly headers: Record<string, string>;\n private refreshPromise: Promise<string | null> | null = null;\n\n constructor(config: Config) {\n this.baseUrl = config.apiBaseUrl;\n this.headers = {\n Authorization: `Bearer ${config.authToken}`,\n };\n if (config.clientId) {\n this.headers['x-client-id'] = config.clientId;\n }\n if (config.projectId) {\n this.headers['x-project-id'] = config.projectId;\n }\n }\n\n async get(path: string, opts?: RequestOptions): Promise<unknown> {\n return this.requestWithRetry('GET', path, opts);\n }\n\n async post(path: string, opts?: RequestOptions): Promise<unknown> {\n return this.requestWithRetry('POST', path, opts);\n }\n\n async patch(path: string, opts?: RequestOptions): Promise<unknown> {\n return this.requestWithRetry('PATCH', path, opts);\n }\n\n async put(path: string, opts?: RequestOptions): Promise<unknown> {\n return this.requestWithRetry('PUT', path, opts);\n }\n\n async delete(path: string, opts?: RequestOptions): Promise<unknown> {\n return this.requestWithRetry('DELETE', path, opts);\n }\n\n private async refreshAuthToken(force = false): Promise<string | null> {\n if (!this.refreshPromise) {\n this.refreshPromise = resolveAuthToken(force).finally(() => {\n this.refreshPromise = null;\n });\n }\n return this.refreshPromise;\n }\n\n private async requestWithRetry(\n method: HttpMethod,\n path: string,\n opts?: RequestOptions,\n ): Promise<unknown> {\n try {\n return await this.request(method, path, opts);\n } catch (error) {\n if (error instanceof ApiError && error.status === 401) {\n const currentToken = this.headers['Authorization'];\n // First try: read credentials file (token may have changed via re-login)\n let newToken = await this.refreshAuthToken();\n const newBaseUrl = resolveApiBaseUrl();\n if (newBaseUrl && newBaseUrl !== this.baseUrl) {\n this.baseUrl = newBaseUrl;\n }\n // If file token is the same, force a refresh via the refresh-token endpoint\n if (newToken && `Bearer ${newToken}` === currentToken) {\n newToken = await resolveAuthToken(true);\n }\n if (newToken && `Bearer ${newToken}` !== currentToken) {\n this.headers['Authorization'] = `Bearer ${newToken}`;\n return this.request(method, path, opts);\n }\n }\n throw error;\n }\n }\n\n private async request(\n method: HttpMethod,\n path: string,\n opts?: RequestOptions,\n ): Promise<unknown> {\n let url = `${this.baseUrl}${path}`;\n\n if (opts?.params) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(opts.params)) {\n if (value !== undefined) {\n searchParams.set(key, String(value));\n }\n }\n const qs = searchParams.toString();\n if (qs) {\n url += `?${qs}`;\n }\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n\n try {\n const headers: Record<string, string> = { ...this.headers };\n if (opts?.body !== undefined) {\n headers['Content-Type'] = 'application/json';\n }\n\n const response = await fetch(url, {\n method,\n headers,\n body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined,\n signal: controller.signal,\n });\n\n const text = await response.text();\n\n if (!response.ok) {\n throw new ApiError(response.status, response.statusText, text);\n }\n\n if (!text) {\n return undefined;\n }\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n } finally {\n clearTimeout(timer);\n }\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\nimport { redactTokens } from '../utils';\n\nexport function registerAuthTools(server: McpServer, api: ApiClient): void {\n server.registerTool(\n 'auth_login',\n {\n description: 'Authenticate with email and password. WARNING: The password will be visible in the conversation context. Token values are redacted in the response.',\n inputSchema: {\n email: z.string().email(),\n password: z.string().min(1),\n },\n },\n async ({ email, password }) => {\n try {\n const result = await api.post('/auth/login', {\n body: { email, password },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(redactTokens(result), null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Login failed: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'auth_me',\n {\n description: 'Get the currently authenticated user profile',\n },\n async () => {\n try {\n const result = await api.get('/auth/me');\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(redactTokens(result), null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get profile: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'auth_update_profile',\n {\n description: 'Update the currently authenticated user profile',\n inputSchema: {\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n displayName: z.string().optional(),\n },\n },\n async ({ firstName, lastName, displayName }) => {\n try {\n const body: Record<string, string> = {};\n if (firstName !== undefined) body.firstName = firstName;\n if (lastName !== undefined) body.lastName = lastName;\n if (displayName !== undefined) body.displayName = displayName;\n\n if (Object.keys(body).length === 0) {\n return {\n content: [{ type: 'text' as const, text: 'At least one field must be provided' }],\n isError: true as const,\n };\n }\n\n const result = await api.patch('/auth/me', { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(redactTokens(result), null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Profile update failed: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","const TOKEN_KEYS = new Set([\n 'access_token', 'refresh_token', 'id_token',\n 'accessToken', 'refreshToken', 'idToken',\n]);\n\n/**\n * Recursively redact token fields from API responses.\n * Handles both snake_case and camelCase token field names.\n */\nexport function redactTokens(data: unknown): unknown {\n if (typeof data !== 'object' || data === null) return data;\n if (Array.isArray(data)) return data.map(redactTokens);\n const record = data as Record<string, unknown>;\n const redacted: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n if (TOKEN_KEYS.has(key)) {\n redacted[key] = '[REDACTED]';\n } else {\n redacted[key] = redactTokens(value);\n }\n }\n return redacted;\n}\n\n/**\n * Recursively redact secret fields from API responses.\n * Replaces clientSecret and secret values with '[REDACTED]'.\n */\nexport function redactSecrets(data: unknown): unknown {\n if (typeof data !== 'object' || data === null) return data;\n if (Array.isArray(data)) return data.map(redactSecrets);\n const record = data as Record<string, unknown>;\n const redacted: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n if (key === 'clientSecret' || key === 'secret') {\n redacted[key] = '[REDACTED]';\n } else {\n redacted[key] = redactSecrets(value);\n }\n }\n return redacted;\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\n\nexport function registerProjectTools(server: McpServer, api: ApiClient): void {\n server.registerTool(\n 'projects_list',\n {\n description: 'List all projects, optionally filtered by role',\n inputSchema: {\n role: z.string().optional(),\n },\n },\n async ({ role }) => {\n try {\n const result = await api.get('/projects', {\n params: { role },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list projects: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_get',\n {\n description: 'Get a project by its ID',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/projects/${encodeURIComponent(projectId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get project: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_get_by_slug',\n {\n description: 'Get a project by its slug',\n inputSchema: {\n slug: z.string(),\n },\n },\n async ({ slug }) => {\n try {\n const result = await api.get(`/projects/slug/${encodeURIComponent(slug)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get project by slug: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_create',\n {\n description: 'Create a new project',\n inputSchema: {\n name: z.string(),\n slug: z.string(),\n description: z.string().optional(),\n logoUrl: z.string().url().optional(),\n websiteUrl: z.string().url().optional(),\n },\n },\n async ({ name, slug, description, logoUrl, websiteUrl }) => {\n try {\n const body: Record<string, string> = { name, slug };\n if (description !== undefined) body.description = description;\n if (logoUrl !== undefined) body.logoUrl = logoUrl;\n if (websiteUrl !== undefined) body.websiteUrl = websiteUrl;\n\n const result = await api.post('/projects', { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create project: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_update',\n {\n description: 'Update an existing project',\n inputSchema: {\n projectId: z.string(),\n name: z.string().optional(),\n description: z.string().optional(),\n logoUrl: z.string().url().optional(),\n websiteUrl: z.string().url().optional(),\n },\n },\n async ({ projectId, name, description, logoUrl, websiteUrl }) => {\n try {\n const body: Record<string, string> = {};\n if (name !== undefined) body.name = name;\n if (description !== undefined) body.description = description;\n if (logoUrl !== undefined) body.logoUrl = logoUrl;\n if (websiteUrl !== undefined) body.websiteUrl = websiteUrl;\n\n if (Object.keys(body).length === 0) {\n return {\n content: [{ type: 'text' as const, text: 'At least one field must be provided' }],\n isError: true as const,\n };\n }\n\n const result = await api.patch(`/projects/${encodeURIComponent(projectId)}`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update project: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_delete',\n {\n description: 'Delete a project by its ID',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.delete(`/projects/${encodeURIComponent(projectId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Project deleted', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete project: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_members_list',\n {\n description: 'List members of a project with optional pagination',\n inputSchema: {\n projectId: z.string(),\n limit: z.number().int().min(1).max(100).optional(),\n offset: z.number().int().min(0).optional(),\n },\n },\n async ({ projectId, limit, offset }) => {\n try {\n const result = await api.get(`/projects/${encodeURIComponent(projectId)}/members`, {\n params: { limit, offset },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list members: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_members_add',\n {\n description: 'Add a member to a project by email with a specified role',\n inputSchema: {\n projectId: z.string(),\n email: z.string().email(),\n role: z.enum(['owner', 'admin', 'developer', 'member', 'viewer']),\n permissions: z.array(z.string()).optional(),\n },\n },\n async ({ projectId, email, role, permissions }) => {\n try {\n const body: Record<string, unknown> = { email, role };\n if (permissions !== undefined) body.permissions = permissions;\n const result = await api.post(`/projects/${encodeURIComponent(projectId)}/members`, {\n body,\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to add member: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_members_update',\n {\n description: 'Update a project member\\'s role, permissions, or console access',\n inputSchema: {\n projectId: z.string(),\n memberId: z.string(),\n role: z.enum(['owner', 'admin', 'developer', 'member', 'viewer']).optional(),\n permissions: z.array(z.string()).optional(),\n grantConsoleAccess: z.boolean().optional(),\n },\n },\n async ({ projectId, memberId, role, permissions, grantConsoleAccess }) => {\n try {\n const body: Record<string, unknown> = {};\n if (role !== undefined) body.role = role;\n if (permissions !== undefined) body.permissions = permissions;\n if (grantConsoleAccess !== undefined) body.grantConsoleAccess = grantConsoleAccess;\n\n if (Object.keys(body).length === 0) {\n return {\n content: [{ type: 'text' as const, text: 'At least one field must be provided' }],\n isError: true as const,\n };\n }\n\n const result = await api.patch(`/projects/${encodeURIComponent(projectId)}/members/${encodeURIComponent(memberId)}`, {\n body,\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update member: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_members_remove',\n {\n description: 'Remove a member from a project',\n inputSchema: {\n projectId: z.string(),\n memberId: z.string(),\n },\n },\n async ({ projectId, memberId }) => {\n try {\n const result = await api.delete(`/projects/${encodeURIComponent(projectId)}/members/${encodeURIComponent(memberId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Member removed', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to remove member: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_users_create',\n {\n description: 'Create a new user within a project. WARNING: The password will be visible in the conversation context.',\n inputSchema: {\n projectId: z.string(),\n username: z.string(),\n email: z.string().email(),\n password: z.string().min(1),\n role: z.enum(['owner', 'admin', 'developer', 'member', 'viewer']),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n displayName: z.string().optional(),\n permissions: z.array(z.string()).optional(),\n grantConsoleAccess: z.boolean().optional(),\n },\n },\n async ({ projectId, username, email, password, role, firstName, lastName, displayName, permissions, grantConsoleAccess }) => {\n try {\n const body: Record<string, unknown> = { username, email, password, role };\n if (firstName !== undefined) body.firstName = firstName;\n if (lastName !== undefined) body.lastName = lastName;\n if (displayName !== undefined) body.displayName = displayName;\n if (permissions !== undefined) body.permissions = permissions;\n if (grantConsoleAccess !== undefined) body.grantConsoleAccess = grantConsoleAccess;\n\n const result = await api.post(`/projects/${encodeURIComponent(projectId)}/users`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create user: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'projects_role',\n {\n description: 'Get the current user\\'s role in a project',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/projects/${encodeURIComponent(projectId)}/role`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get role: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\nimport { redactSecrets } from '../utils';\n\nexport function registerClientTools(server: McpServer, api: ApiClient): void {\n server.registerTool(\n 'clients_list',\n {\n description: 'List all OAuth clients for a project',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/clients/project/${encodeURIComponent(projectId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(redactSecrets(result), null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list clients: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'clients_get',\n {\n description: 'Get details of a specific OAuth client',\n inputSchema: {\n clientId: z.string(),\n },\n },\n async ({ clientId }) => {\n try {\n const result = await api.get(`/clients/${encodeURIComponent(clientId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(redactSecrets(result), null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get client: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'clients_create',\n {\n description: 'Create a new OAuth client for a project',\n inputSchema: {\n projectId: z.string(),\n name: z.string(),\n grantTypes: z.array(z.string()),\n redirectUris: z.array(z.string().url()).optional(),\n scopes: z.array(z.string()).optional(),\n isConfidential: z.boolean().optional(),\n corsOrigins: z.array(z.string()).optional(),\n accessTokenTtl: z.number().optional(),\n },\n },\n async ({ projectId, name, grantTypes, redirectUris, scopes, isConfidential, corsOrigins, accessTokenTtl }) => {\n try {\n const body: Record<string, unknown> = { projectId, name, grantTypes };\n if (redirectUris !== undefined) body.redirectUris = redirectUris;\n if (scopes !== undefined) body.scopes = scopes;\n if (isConfidential !== undefined) body.isConfidential = isConfidential;\n if (corsOrigins !== undefined) body.corsOrigins = corsOrigins;\n if (accessTokenTtl !== undefined) body.accessTokenTtl = accessTokenTtl;\n\n const result = await api.post('/clients', { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(redactSecrets(result), null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create client: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'clients_update',\n {\n description: 'Update an existing OAuth client',\n inputSchema: {\n clientId: z.string(),\n name: z.string().optional(),\n redirectUris: z.array(z.string().url()).optional(),\n scopes: z.array(z.string()).optional(),\n grantTypes: z.array(z.string()).optional(),\n isActive: z.boolean().optional(),\n corsOrigins: z.array(z.string()).optional(),\n accessTokenTtl: z.number().optional(),\n },\n },\n async ({ clientId, name, redirectUris, scopes, grantTypes, isActive, corsOrigins, accessTokenTtl }) => {\n try {\n const body: Record<string, unknown> = {};\n if (name !== undefined) body.name = name;\n if (redirectUris !== undefined) body.redirectUris = redirectUris;\n if (scopes !== undefined) body.scopes = scopes;\n if (grantTypes !== undefined) body.grantTypes = grantTypes;\n if (isActive !== undefined) body.isActive = isActive;\n if (corsOrigins !== undefined) body.corsOrigins = corsOrigins;\n if (accessTokenTtl !== undefined) body.accessTokenTtl = accessTokenTtl;\n\n if (Object.keys(body).length === 0) {\n return {\n content: [{ type: 'text' as const, text: 'At least one field must be provided' }],\n isError: true as const,\n };\n }\n\n const result = await api.patch(`/clients/${encodeURIComponent(clientId)}`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(redactSecrets(result), null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update client: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'clients_delete',\n {\n description: 'Delete an OAuth client',\n inputSchema: {\n clientId: z.string(),\n },\n },\n async ({ clientId }) => {\n try {\n const result = await api.delete(`/clients/${encodeURIComponent(clientId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Client deleted', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete client: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // Intentionally NOT redacted — the new secret can only be retrieved once.\n // Other clients_* tools use redactSecrets() to hide stored secrets.\n server.registerTool(\n 'clients_regenerate_secret',\n {\n description: 'Regenerate the secret for an OAuth client. WARNING: The new secret will be visible in the conversation context. This is the only time the secret can be retrieved.',\n inputSchema: {\n clientId: z.string(),\n },\n },\n async ({ clientId }) => {\n try {\n const result = await api.post(`/clients/${encodeURIComponent(clientId)}/regenerate-secret`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to regenerate client secret: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\n\nexport function registerDatabaseTools(server: McpServer, api: ApiClient): void {\n // --- Collections ---\n\n server.registerTool(\n 'database_collections_list',\n {\n description: 'List all collections in a project database',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/databases/${encodeURIComponent(projectId)}/collections`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list collections: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_collections_create',\n {\n description: 'Create a new collection in a project database',\n inputSchema: {\n projectId: z.string(),\n name: z.string(),\n description: z.string().optional(),\n },\n },\n async ({ projectId, name, description }) => {\n try {\n const body: Record<string, unknown> = { name };\n if (description !== undefined) body.description = description;\n\n const result = await api.post(`/databases/${encodeURIComponent(projectId)}/collections`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create collection: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_collections_delete',\n {\n description: 'Delete a collection from a project database',\n inputSchema: {\n projectId: z.string(),\n name: z.string(),\n },\n },\n async ({ projectId, name }) => {\n try {\n const result = await api.delete(`/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(name)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Collection deleted', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete collection: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // --- Security Rules ---\n\n server.registerTool(\n 'database_rules_get',\n {\n description: 'Get the security rules for a project database',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/databases/${encodeURIComponent(projectId)}/rules`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get rules: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_rules_set',\n {\n description: 'Set security rules for a project database',\n inputSchema: {\n projectId: z.string(),\n rules: z.record(z.string(), z.unknown()),\n expectedVersion: z.number().optional(),\n },\n },\n async ({ projectId, rules, expectedVersion }) => {\n try {\n const body: Record<string, unknown> = { rules };\n if (expectedVersion !== undefined) body.expectedVersion = expectedVersion;\n\n const result = await api.put(`/databases/${encodeURIComponent(projectId)}/rules`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to set rules: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_rules_validate',\n {\n description: 'Validate security rules without applying them',\n inputSchema: {\n projectId: z.string(),\n rules: z.record(z.string(), z.unknown()),\n },\n },\n async ({ projectId, rules }) => {\n try {\n const result = await api.post(`/databases/${encodeURIComponent(projectId)}/rules/validate`, {\n body: { rules },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to validate rules: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // --- Index Rules ---\n\n server.registerTool(\n 'database_index_rules_get',\n {\n description: 'Get the index rules for a project database',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/databases/${encodeURIComponent(projectId)}/index-rules`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get index rules: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_index_rules_sync',\n {\n description: 'Sync index rules for a project database',\n inputSchema: {\n projectId: z.string(),\n indexRules: z.record(z.string(), z.unknown()),\n },\n },\n async ({ projectId, indexRules }) => {\n try {\n const result = await api.put(`/databases/${encodeURIComponent(projectId)}/index-rules`, {\n body: { indexRules },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to sync index rules: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // --- Indexes ---\n\n server.registerTool(\n 'database_indexes_list',\n {\n description: 'List all indexes for a collection',\n inputSchema: {\n projectId: z.string(),\n collectionName: z.string(),\n },\n },\n async ({ projectId, collectionName }) => {\n try {\n const result = await api.get(`/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(collectionName)}/indexes`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list indexes: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_indexes_create',\n {\n description: 'Create a new index on a collection',\n inputSchema: {\n projectId: z.string(),\n collectionName: z.string(),\n fields: z.record(z.string(), z.union([z.literal(1), z.literal(-1), z.literal('text')])),\n unique: z.boolean().optional(),\n sparse: z.boolean().optional(),\n ttlSeconds: z.number().optional(),\n },\n },\n async ({ projectId, collectionName, fields, unique, sparse, ttlSeconds }) => {\n try {\n const body: Record<string, unknown> = { fields };\n if (unique !== undefined) body.unique = unique;\n if (sparse !== undefined) body.sparse = sparse;\n if (ttlSeconds !== undefined) body.ttlSeconds = ttlSeconds;\n\n const result = await api.post(`/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(collectionName)}/indexes`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create index: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_indexes_delete',\n {\n description: 'Delete an index from a collection',\n inputSchema: {\n projectId: z.string(),\n collectionName: z.string(),\n indexName: z.string(),\n },\n },\n async ({ projectId, collectionName, indexName }) => {\n try {\n const result = await api.delete(\n `/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(collectionName)}/indexes/${encodeURIComponent(indexName)}`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Index deleted', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete index: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // --- Documents ---\n\n server.registerTool(\n 'database_documents_find',\n {\n description: 'Query documents in a collection with optional filter, sort, field projection, limit (max 100), and offset',\n inputSchema: {\n projectId: z.string(),\n collectionName: z.string(),\n filter: z.record(z.string(), z.unknown()).optional(),\n sort: z.record(z.string(), z.union([z.literal(1), z.literal(-1)])).optional(),\n fields: z.array(z.string()).optional(),\n limit: z.number().int().min(1).max(100).optional(),\n offset: z.number().int().min(0).optional(),\n },\n },\n async ({ projectId, collectionName, filter, sort, fields, limit, offset }) => {\n try {\n const params: Record<string, string | number | boolean | undefined> = {};\n if (filter !== undefined) params.filter = JSON.stringify(filter);\n if (sort !== undefined) params.sort = JSON.stringify(sort);\n if (fields !== undefined) params.fields = JSON.stringify(fields);\n if (limit !== undefined) params.limit = limit;\n if (offset !== undefined) params.offset = offset;\n\n const result = await api.get(\n `/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(collectionName)}/documents`,\n { params },\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to find documents: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_documents_insert',\n {\n description: 'Insert one or more documents into a collection',\n inputSchema: {\n projectId: z.string(),\n collectionName: z.string(),\n documents: z.array(z.record(z.string(), z.unknown())).min(1).max(500),\n },\n },\n async ({ projectId, collectionName, documents }) => {\n try {\n const result = await api.post(\n `/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(collectionName)}/documents`,\n { body: { documents } },\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to insert documents: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_documents_update',\n {\n description: 'Update a specific document in a collection',\n inputSchema: {\n projectId: z.string(),\n collectionName: z.string(),\n docId: z.string(),\n update: z.record(z.string(), z.unknown()),\n },\n },\n async ({ projectId, collectionName, docId, update }) => {\n try {\n const result = await api.patch(\n `/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(collectionName)}/documents/${encodeURIComponent(docId)}`,\n { body: { update } },\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update document: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'database_documents_delete',\n {\n description: 'Delete a specific document from a collection',\n inputSchema: {\n projectId: z.string(),\n collectionName: z.string(),\n docId: z.string(),\n },\n },\n async ({ projectId, collectionName, docId }) => {\n try {\n const result = await api.delete(\n `/databases/${encodeURIComponent(projectId)}/collections/${encodeURIComponent(collectionName)}/documents/${encodeURIComponent(docId)}`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Document deleted', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete document: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // --- Stats ---\n\n server.registerTool(\n 'database_stats',\n {\n description: 'Get database statistics for a project',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/databases/${encodeURIComponent(projectId)}/stats`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get database stats: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\n\nexport function registerHostingTools(server: McpServer, api: ApiClient): void {\n server.registerTool(\n 'hosting_deployments_list',\n {\n description: 'List deployments for a hosting project',\n inputSchema: {\n projectId: z.string(),\n limit: z.number().int().min(1).max(100).optional(),\n offset: z.number().int().min(0).optional(),\n },\n },\n async ({ projectId, limit, offset }) => {\n try {\n const result = await api.get(`/hosting/projects/${encodeURIComponent(projectId)}/deployments`, {\n params: { limit, offset },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list deployments: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_deployments_get',\n {\n description: 'Get details of a specific deployment',\n inputSchema: {\n projectId: z.string(),\n deploymentId: z.string(),\n },\n },\n async ({ projectId, deploymentId }) => {\n try {\n const result = await api.get(`/hosting/projects/${encodeURIComponent(projectId)}/deployments/${encodeURIComponent(deploymentId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get deployment: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // Note: create and activate use /hosting/deployments (flat route) — intentional,\n // matches the admin gateway controller which scopes these by projectId in the body.\n server.registerTool(\n 'hosting_deployments_create',\n {\n description: 'Create a new deployment for a hosting project',\n inputSchema: {\n projectId: z.string(),\n description: z.string().optional(),\n framework: z.string().optional(),\n },\n },\n async ({ projectId, description, framework }) => {\n try {\n const body: Record<string, unknown> = { projectId };\n if (description !== undefined) body.description = description;\n if (framework !== undefined) body.framework = framework;\n\n const result = await api.post('/hosting/deployments', { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create deployment: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_deployments_activate',\n {\n description: 'Activate a specific deployment',\n inputSchema: {\n projectId: z.string(),\n deploymentId: z.string(),\n },\n },\n async ({ projectId, deploymentId }) => {\n try {\n const result = await api.post(`/hosting/deployments/${encodeURIComponent(deploymentId)}/activate`, {\n body: { projectId },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to activate deployment: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_deployments_delete',\n {\n description: 'Delete a specific deployment',\n inputSchema: {\n projectId: z.string(),\n deploymentId: z.string(),\n },\n },\n async ({ projectId, deploymentId }) => {\n try {\n const result = await api.delete(`/hosting/projects/${encodeURIComponent(projectId)}/deployments/${encodeURIComponent(deploymentId)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Deployment deleted', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete deployment: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_deployments_status',\n {\n description: 'Get the status of a specific deployment',\n inputSchema: {\n projectId: z.string(),\n deploymentId: z.string(),\n },\n },\n async ({ projectId, deploymentId }) => {\n try {\n const result = await api.get(`/hosting/projects/${encodeURIComponent(projectId)}/deployments/${encodeURIComponent(deploymentId)}/status`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get deployment status: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_config_get',\n {\n description: 'Get hosting configuration for a project',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/hosting/projects/${encodeURIComponent(projectId)}/config`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get hosting config: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_config_update',\n {\n description: 'Update hosting configuration for a project',\n inputSchema: {\n projectId: z.string(),\n spaMode: z.boolean().optional(),\n defaultFile: z.string().optional(),\n headers: z.record(z.string(), z.string()).optional(),\n enabled: z.boolean().optional(),\n },\n },\n async ({ projectId, spaMode, defaultFile, headers, enabled }) => {\n try {\n const body: Record<string, unknown> = {};\n if (spaMode !== undefined) body.spaMode = spaMode;\n if (defaultFile !== undefined) body.defaultFile = defaultFile;\n if (headers !== undefined) body.headers = headers;\n if (enabled !== undefined) body.enabled = enabled;\n\n if (Object.keys(body).length === 0) {\n return {\n content: [{ type: 'text' as const, text: 'At least one config field must be provided' }],\n isError: true as const,\n };\n }\n\n const result = await api.patch(`/hosting/projects/${encodeURIComponent(projectId)}/config`, {\n body,\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update hosting config: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_domains_list',\n {\n description: 'List custom domains for a hosting project',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/hosting/projects/${encodeURIComponent(projectId)}/domains`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list domains: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_domains_get',\n {\n description: 'Get details of a specific custom domain',\n inputSchema: {\n projectId: z.string(),\n domain: z.string(),\n },\n },\n async ({ projectId, domain }) => {\n try {\n const result = await api.get(`/hosting/projects/${encodeURIComponent(projectId)}/domains/${encodeURIComponent(domain)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get domain: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_domains_add',\n {\n description: 'Add a custom domain to a hosting project',\n inputSchema: {\n projectId: z.string(),\n domain: z.string(),\n projectSlug: z.string(),\n verificationMethod: z.enum(['cname', 'txt']).optional(),\n },\n },\n async ({ projectId, domain, projectSlug, verificationMethod }) => {\n try {\n const body: Record<string, unknown> = { domain, projectSlug };\n if (verificationMethod !== undefined) body.verificationMethod = verificationMethod;\n\n const result = await api.post(`/hosting/projects/${encodeURIComponent(projectId)}/domains`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to add domain: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_domains_verify',\n {\n description: 'Verify a custom domain for a hosting project',\n inputSchema: {\n projectId: z.string(),\n domain: z.string(),\n },\n },\n async ({ projectId, domain }) => {\n try {\n const result = await api.post(`/hosting/projects/${encodeURIComponent(projectId)}/domains/${encodeURIComponent(domain)}/verify`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to verify domain: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_domains_remove',\n {\n description: 'Remove a custom domain from a hosting project',\n inputSchema: {\n projectId: z.string(),\n domain: z.string(),\n },\n },\n async ({ projectId, domain }) => {\n try {\n const result = await api.delete(`/hosting/projects/${encodeURIComponent(projectId)}/domains/${encodeURIComponent(domain)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'Domain removed', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to remove domain: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'hosting_domains_set_primary',\n {\n description: 'Set a custom domain as the primary domain for a hosting project',\n inputSchema: {\n projectId: z.string(),\n domain: z.string(),\n },\n },\n async ({ projectId, domain }) => {\n try {\n const result = await api.patch(`/hosting/projects/${encodeURIComponent(projectId)}/domains/${encodeURIComponent(domain)}/primary`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to set primary domain: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\n\nexport function registerStorageTools(server: McpServer, api: ApiClient): void {\n server.registerTool(\n 'storage_files_list',\n {\n description: 'List files in storage for a project and user',\n inputSchema: {\n projectId: z.string(),\n userId: z.string(),\n limit: z.number().int().min(1).max(100).optional(),\n offset: z.number().int().min(0).optional(),\n },\n },\n async ({ projectId, userId, limit, offset }) => {\n try {\n const result = await api.get('/storage/files', {\n params: { projectId, userId, limit, offset },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list files: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_files_get',\n {\n description: 'Get details of a specific file in storage',\n inputSchema: {\n projectId: z.string(),\n userId: z.string(),\n fileId: z.string(),\n },\n },\n async ({ projectId, userId, fileId }) => {\n try {\n const result = await api.get(`/storage/files/${encodeURIComponent(fileId)}`, {\n params: { projectId, userId },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get file: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_files_delete',\n {\n description: 'Delete a specific file from storage',\n inputSchema: {\n projectId: z.string(),\n userId: z.string(),\n fileId: z.string(),\n },\n },\n async ({ projectId, userId, fileId }) => {\n try {\n const result = await api.delete(`/storage/files/${encodeURIComponent(fileId)}`, {\n params: { projectId, userId },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result ?? 'File deleted', null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete file: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_files_visibility',\n {\n description: 'Update the visibility of a specific file',\n inputSchema: {\n projectId: z.string(),\n userId: z.string(),\n fileId: z.string(),\n visibility: z.enum(['public', 'private']),\n },\n },\n async ({ projectId, userId, fileId, visibility }) => {\n try {\n const result = await api.patch(`/storage/files/${encodeURIComponent(fileId)}/visibility`, {\n params: { projectId, userId },\n body: { visibility },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update file visibility: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_files_share',\n {\n description: 'Share a file with other users',\n inputSchema: {\n projectId: z.string(),\n userId: z.string(),\n fileId: z.string(),\n userIds: z.array(z.string()),\n permission: z.enum(['read', 'write']).optional(),\n },\n },\n async ({ projectId, userId, fileId, userIds, permission }) => {\n try {\n const result = await api.post(`/storage/files/${encodeURIComponent(fileId)}/share`, {\n params: { projectId, userId },\n body: { userIds, permission },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to share file: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_files_unshare',\n {\n description: 'Remove file sharing for specific users',\n inputSchema: {\n projectId: z.string(),\n userId: z.string(),\n fileId: z.string(),\n userIds: z.array(z.string()),\n },\n },\n async ({ projectId, userId, fileId, userIds }) => {\n try {\n const result = await api.post(`/storage/files/${encodeURIComponent(fileId)}/unshare`, {\n params: { projectId, userId },\n body: { userIds },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to unshare file: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_quota_get',\n {\n description: 'Get storage quota information for a user in a project',\n inputSchema: {\n projectId: z.string(),\n userId: z.string(),\n },\n },\n async ({ projectId, userId }) => {\n try {\n const result = await api.get('/storage/quota', {\n params: { projectId, userId },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get quota: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_quota_set',\n {\n description: 'Set storage quota for a user in a project',\n inputSchema: {\n projectId: z.string(),\n targetUserId: z.string(),\n quotaBytes: z.number().int().min(0),\n },\n },\n async ({ projectId, targetUserId, quotaBytes }) => {\n try {\n const result = await api.put('/storage/quota', {\n body: { projectId, targetUserId, quotaBytes },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to set quota: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'storage_project_stats',\n {\n description: 'Get storage statistics for a project',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get('/storage/project-stats', {\n params: { projectId },\n });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get project stats: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\n\nexport function registerFunctionTools(server: McpServer, api: ApiClient): void {\n // ─── CRUD ────────────────────────────────────────────────────\n\n server.registerTool(\n 'functions_list',\n {\n description: 'List all functions for a project',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(\n `/projects/${encodeURIComponent(projectId)}/functions`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list functions: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_get',\n {\n description: 'Get details of a specific function',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.get(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get function: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_create',\n {\n description: 'Create a new serverless function in a project',\n inputSchema: {\n projectId: z.string(),\n name: z.string().min(1).max(255),\n description: z.string().max(1000).optional(),\n entryPoint: z.string().max(255).optional(),\n cronExpression: z.string().optional(),\n cronTimezone: z.string().optional(),\n timeout: z.number().int().min(1000).max(120000).optional(),\n memoryLimitMb: z.number().int().min(16).max(512).optional(),\n enabled: z.boolean().optional(),\n },\n },\n async ({ projectId, ...body }) => {\n try {\n const result = await api.post(\n `/projects/${encodeURIComponent(projectId)}/functions`,\n { body },\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create function: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_update',\n {\n description: 'Update an existing function',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n name: z.string().min(1).max(255).optional(),\n description: z.string().max(1000).optional(),\n entryPoint: z.string().max(255).optional(),\n cronExpression: z.string().optional(),\n cronTimezone: z.string().optional(),\n timeout: z.number().int().min(1000).max(120000).optional(),\n memoryLimitMb: z.number().int().min(16).max(512).optional(),\n enabled: z.boolean().optional(),\n },\n },\n async ({ projectId, functionId, ...body }) => {\n try {\n const result = await api.patch(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}`,\n { body },\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update function: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_delete',\n {\n description: 'Delete a function and its associated cron job',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.delete(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete function: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // ─── Code & Deployments ──────────────────────────────────────\n\n server.registerTool(\n 'functions_get_code',\n {\n description: 'Get the deployed source code of a function with syntax-highlighted file contents',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.get(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/code`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get function code: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_deployments_list',\n {\n description: 'List all deployments (versions) of a function',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.get(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/deployments`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list deployments: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // ─── Execution ───────────────────────────────────────────────\n\n server.registerTool(\n 'functions_trigger',\n {\n description: 'Manually trigger a function execution',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.post(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/trigger`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to trigger function: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_executions_list',\n {\n description: 'List recent executions of a function with status, duration, and logs',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n limit: z.number().int().min(1).max(100).optional(),\n offset: z.number().int().min(0).optional(),\n },\n },\n async ({ projectId, functionId, limit, offset }) => {\n try {\n const result = await api.get(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/executions`,\n { params: { limit, offset } },\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list executions: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // ─── Webhooks ────────────────────────────────────────────────\n\n server.registerTool(\n 'functions_enable_webhook',\n {\n description: 'Enable webhook trigger for a function. Returns a one-time webhook secret.',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.post(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/webhook/enable`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to enable webhook: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_regenerate_webhook_secret',\n {\n description: 'Regenerate the webhook secret for a function. Old secret stops working immediately.',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.post(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/webhook/regenerate-secret`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to regenerate webhook secret: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_disable_webhook',\n {\n description: 'Disable webhook trigger for a function. The webhook secret is deleted.',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.post(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/webhook/disable`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to disable webhook: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // ─── Environment Variables ───────────────────────────────────\n\n server.registerTool(\n 'functions_get_env_vars',\n {\n description: 'Get environment variables for a function (decrypted). Use these to store API keys and secrets.',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.get(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/env`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get env vars: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'functions_set_env_vars',\n {\n description: 'Set environment variables for a function. Merges with existing vars. Values are encrypted at rest.',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n variables: z.record(z.string(), z.string()),\n },\n },\n async ({ projectId, functionId, variables }) => {\n try {\n // Get existing vars first, merge, then update\n const existing = await api.get(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/env`,\n ) as Record<string, string>;\n\n const merged = { ...existing, ...variables };\n\n await api.patch(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}`,\n { body: { environmentVariables: merged } },\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify({ success: true, keys: Object.keys(merged) }, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to set env vars: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n // ─── KV Store ────────────────────────────────────────────────\n\n server.registerTool(\n 'functions_kv_list',\n {\n description: 'List KV store keys for a function',\n inputSchema: {\n projectId: z.string(),\n functionId: z.string(),\n },\n },\n async ({ projectId, functionId }) => {\n try {\n const result = await api.get(\n `/projects/${encodeURIComponent(projectId)}/functions/${encodeURIComponent(functionId)}/kv`,\n );\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list KV keys: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiClient } from '../api-client';\n\nexport function registerEmailTemplateTools(server: McpServer, api: ApiClient): void {\n server.registerTool(\n 'email_templates_list',\n {\n description: 'List all email templates for a project (includes system defaults)',\n inputSchema: {\n projectId: z.string(),\n },\n },\n async ({ projectId }) => {\n try {\n const result = await api.get(`/projects/${encodeURIComponent(projectId)}/email-templates`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to list email templates: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'email_templates_get',\n {\n description: 'Get a single email template by ID',\n inputSchema: {\n id: z.string(),\n },\n },\n async ({ id }) => {\n try {\n const result = await api.get(`/email-templates/${encodeURIComponent(id)}`);\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to get email template: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'email_templates_create',\n {\n description: 'Create a new project-specific email template. The type identifies the template purpose (e.g. \"verify-email\", \"welcome\", \"invoice\").',\n inputSchema: {\n projectId: z.string(),\n type: z.string(),\n name: z.string(),\n subject: z.string(),\n mjmlSource: z.string(),\n variables: z.array(z.string()).optional(),\n isActive: z.boolean().optional(),\n },\n },\n async ({ projectId, type, name, subject, mjmlSource, variables, isActive }) => {\n try {\n const body: Record<string, unknown> = { projectId, type, name, subject, mjmlSource };\n if (variables !== undefined) body.variables = variables;\n if (isActive !== undefined) body.isActive = isActive;\n\n const result = await api.post(`/projects/${encodeURIComponent(projectId)}/email-templates`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to create email template: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'email_templates_update',\n {\n description: 'Update an existing email template',\n inputSchema: {\n id: z.string(),\n name: z.string().optional(),\n subject: z.string().optional(),\n mjmlSource: z.string().optional(),\n variables: z.array(z.string()).optional(),\n isActive: z.boolean().optional(),\n },\n },\n async ({ id, name, subject, mjmlSource, variables, isActive }) => {\n try {\n const body: Record<string, unknown> = {};\n if (name !== undefined) body.name = name;\n if (subject !== undefined) body.subject = subject;\n if (mjmlSource !== undefined) body.mjmlSource = mjmlSource;\n if (variables !== undefined) body.variables = variables;\n if (isActive !== undefined) body.isActive = isActive;\n\n if (Object.keys(body).length === 0) {\n return {\n content: [{ type: 'text' as const, text: 'At least one field must be provided' }],\n isError: true as const,\n };\n }\n\n const result = await api.patch(`/email-templates/${encodeURIComponent(id)}`, { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to update email template: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'email_templates_delete',\n {\n description: 'Delete an email template. System default templates cannot be deleted.',\n inputSchema: {\n id: z.string(),\n },\n },\n async ({ id }) => {\n try {\n const result = await api.delete(`/email-templates/${encodeURIComponent(id)}`);\n return {\n content: [{ type: 'text' as const, text: result ? JSON.stringify(result, null, 2) : 'Email template deleted' }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to delete email template: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n\n server.registerTool(\n 'email_templates_preview',\n {\n description: 'Preview a compiled email template. Renders MJML to HTML and applies Handlebars variables.',\n inputSchema: {\n mjmlSource: z.string(),\n variables: z.record(z.string(), z.unknown()).optional(),\n },\n },\n async ({ mjmlSource, variables }) => {\n try {\n const body: Record<string, unknown> = { mjmlSource };\n if (variables !== undefined) body.variables = variables;\n\n const result = await api.post('/email-templates/preview', { body });\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text' as const, text: `Failed to preview email template: ${message}` }],\n isError: true as const,\n };\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { ApiClient } from '../api-client';\nimport { registerAuthTools } from './auth';\nimport { registerProjectTools } from './projects';\nimport { registerClientTools } from './clients';\nimport { registerDatabaseTools } from './database';\nimport { registerHostingTools } from './hosting';\nimport { registerStorageTools } from './storage';\nimport { registerFunctionTools } from './functions';\nimport { registerEmailTemplateTools } from './emailTemplates';\n\nexport function registerAllTools(server: McpServer, api: ApiClient): void {\n registerAuthTools(server, api);\n registerProjectTools(server, api);\n registerClientTools(server, api);\n registerDatabaseTools(server, api);\n registerHostingTools(server, api);\n registerStorageTools(server, api);\n registerFunctionTools(server, api);\n registerEmailTemplateTools(server, api);\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\n\nexport function registerDatabasePrompts(server: McpServer): void {\n server.registerPrompt(\n 'setup-collection',\n {\n title: 'Setup Database Collection',\n description:\n 'Guide for creating a new database collection with proper security rules. ' +\n 'Collections MUST have rules defined before data can be inserted.',\n argsSchema: {\n projectId: z.string().describe('Project ID'),\n collectionName: z.string().describe('Name of the collection to create'),\n access: z\n .enum(['public-read', 'authenticated', 'admin-only'])\n .optional()\n .describe('Access level (default: admin-only)'),\n },\n },\n async ({ projectId, collectionName, access }) => {\n const accessLevel = access || 'admin-only';\n\n const rules: Record<string, Record<string, string>> = {\n 'public-read': {\n '.create': 'true',\n '.read': 'true',\n '.update': 'false',\n '.delete': \"auth.role === 'owner' || auth.role === 'admin'\",\n },\n authenticated: {\n '.create': '!!auth.uid',\n '.read': '!!auth.uid',\n '.update': '!!auth.uid',\n '.delete': \"auth.role === 'owner' || auth.role === 'admin'\",\n },\n 'admin-only': {\n '.create': \"auth.role === 'owner' || auth.role === 'admin'\",\n '.read': \"auth.role === 'owner' || auth.role === 'admin'\",\n '.update': \"auth.role === 'owner' || auth.role === 'admin'\",\n '.delete': \"auth.role === 'owner' || auth.role === 'admin'\",\n },\n };\n\n const collectionRules = rules[accessLevel];\n const rulesJson = JSON.stringify(collectionRules, null, 2);\n\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: [\n `Set up a new database collection \"${collectionName}\" in project ${projectId}.`,\n '',\n 'IMPORTANT WORKFLOW:',\n '1. First, get the current rules with database_rules_get',\n '2. Add the new collection rules to the existing rules object',\n '3. Set the updated rules with database_rules_set — this automatically creates the collection',\n '4. Do NOT try to insert documents before the rules are set — it will fail with \"Rule denied\"',\n '',\n `Suggested rules for \"${collectionName}\" (${accessLevel}):`,\n rulesJson,\n '',\n 'The $other catch-all rule should deny access to undefined collections:',\n ' \"$other\": { \".read\": \"false\", \".write\": \"false\" }',\n '',\n 'After rules are set, the collection is ready for use via:',\n '- database_documents_insert',\n '- database_documents_find',\n '- Serverless functions using spacelr.db.collection(\"' + collectionName + '\")',\n ].join('\\n'),\n },\n },\n ],\n };\n },\n );\n\n server.registerPrompt(\n 'database-workflow',\n {\n title: 'Database Workflow Guide',\n description:\n 'Explains how the Spacelr database system works: rules-first approach, ' +\n 'collection lifecycle, and security model.',\n argsSchema: {\n projectId: z.string().describe('Project ID'),\n },\n },\n async ({ projectId }) => {\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: [\n `Guide me through the Spacelr database system for project ${projectId}.`,\n '',\n 'CORE CONCEPTS:',\n '',\n '1. RULES-FIRST: Collections are defined through security rules.',\n ' - Use database_rules_get to see current rules',\n ' - Use database_rules_set to add/modify collection rules',\n ' - Setting rules automatically creates the collection definition',\n ' - Without rules, all operations are denied by the $other catch-all',\n '',\n '2. SECURITY RULES SYNTAX:',\n ' - \".create\": Expression that must evaluate to true for inserts',\n ' - \".read\": Expression for reads/queries',\n ' - \".update\": Expression for document updates',\n ' - \".delete\": Expression for document deletion',\n ' - \".validate\": Per-field validation expressions',\n ' - \".schema\": Field type declarations',\n ' Available context: auth.uid, auth.role, newData (for validation)',\n '',\n '3. WORKFLOW:',\n ' a) Define rules for the collection',\n ' b) Optionally create indexes (database_indexes_create)',\n ' c) Insert/query documents',\n '',\n '4. DATA ISOLATION:',\n ' - Each project has its own database (project_{projectId})',\n ' - Collections are scoped to the project automatically',\n ' - No cross-project data access is possible',\n ].join('\\n'),\n },\n },\n ],\n };\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\n\nexport function registerFunctionPrompts(server: McpServer): void {\n server.registerPrompt(\n 'deploy-function',\n {\n title: 'Deploy a Serverless Function',\n description:\n 'Step-by-step guide for creating, deploying, and testing a serverless function. ' +\n 'Covers the full lifecycle from creation to execution.',\n argsSchema: {\n projectId: z.string().describe('Project ID'),\n name: z.string().describe('Function name'),\n useCase: z\n .string()\n .optional()\n .describe('What the function should do (e.g. \"fetch data from API and store in DB\")'),\n },\n },\n async ({ projectId, name, useCase }) => {\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: [\n `Deploy a serverless function \"${name}\" in project ${projectId}.`,\n useCase ? `Use case: ${useCase}` : '',\n '',\n 'DEPLOYMENT WORKFLOW:',\n '',\n '1. CREATE the function:',\n ' Use functions_create with name, entryPoint (default: index.js),',\n ' timeout (ms, default: 30000), memoryLimitMb (default: 128)',\n ' Optional: cronExpression for scheduled execution',\n '',\n '2. WRITE the code:',\n ' Create an index.js file. Available APIs inside the sandbox:',\n '',\n ' - console.log/warn/error/info() — captured to execution logs',\n ' - await fetch(url, options) — HTTP client (10s timeout, 5MB limit)',\n ' Response: { status, headers, body } where body is a STRING',\n ' Use JSON.parse(response.body) for JSON APIs',\n ' - env.get(key) — read environment variables (API keys, secrets — set via Console UI or CLI)',\n ' - await kv.get/set/delete/list() — Redis KV store (256KB values, 1000 keys)',\n ' - await spacelr.db.collection(name).find/insertOne/insertMany()',\n ' - await spacelr.storage.list/getInfo/getDownloadUrl()',\n ' - await spacelr.email.send/sendRaw() — send template or raw emails',\n ' - await spacelr.notifications.send/sendMany() — push notifications',\n '',\n ' IMPORTANT: Top-level await is supported. No imports/require available.',\n '',\n '3. IF USING spacelr.db:',\n ' Database rules MUST be set BEFORE the function writes to a collection.',\n ' Use the setup-collection prompt or manually set rules via database_rules_set.',\n ' Without rules, inserts will fail with \"Rule denied\".',\n '',\n '4. DEPLOY the code:',\n ' Zip the file(s) and upload via the CLI:',\n ' spacelr functions deploy ./my-function --name ' + name,\n ' Or use the admin API: POST /projects/{projectId}/functions/{id}/deploy',\n '',\n '5. TRIGGER:',\n ' Functions support multiple trigger types:',\n '',\n ' a) Manual: Use functions_trigger to execute on demand.',\n ' b) Cron: Set cronExpression when creating/updating the function.',\n ' c) Webhook: Enable with functions_enable_webhook to get a secret,',\n ' then POST to /api/v1/functions/{projectId}/{functionId}/invoke',\n ' with the X-Webhook-Secret header. Use functions_regenerate_webhook_secret',\n ' to rotate the secret (old secret stops working immediately).',\n ' d) Event: Configure event triggers to run the function in response',\n ' to platform events (e.g. database changes, storage uploads).',\n '',\n ' Check results with functions_executions_list.',\n '',\n '6. VERIFY:',\n ' Check execution status, logs, and duration.',\n ' Use functions_get_code to review the deployed source.',\n ].join('\\n'),\n },\n },\n ],\n };\n },\n );\n\n server.registerPrompt(\n 'function-sandbox-reference',\n {\n title: 'Function Sandbox API Reference',\n description:\n 'Complete reference for all APIs available inside a serverless function sandbox.',\n argsSchema: {},\n },\n async () => {\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: [\n 'Show me the complete API reference for the Spacelr function sandbox.',\n '',\n '═══ CONSOLE ═══',\n 'console.log(...args) — log level',\n 'console.info(...args) — info level',\n 'console.warn(...args) — warn level',\n 'console.error(...args) — error level',\n 'All logs are captured and stored in the execution record.',\n 'Log buffer is capped at 1MB.',\n '',\n '═══ FETCH ═══',\n 'const response = await fetch(url, options?)',\n ' options: { method, headers, body }',\n ' returns: { status: number, headers: Record<string,string>, body: string }',\n ' NOTE: body is always a string — use JSON.parse(response.body) for JSON',\n ' Limits: 10s timeout, 5MB response, no private/internal URLs (SSRF blocked)',\n '',\n '═══ ENV (Environment Variables) ═══',\n 'env.get(key) → string | undefined',\n 'Read-only access to function environment variables.',\n 'Use env vars to store API keys, secrets, and configuration — never hardcode them in function code.',\n 'Set via Console UI (Function Detail → Environment Variables) or CLI (spacelr functions env set).',\n 'Values are encrypted at rest and only decrypted when the function executes.',\n '',\n '═══ KV STORE ═══',\n 'await kv.get(key) → string | null',\n 'await kv.set(key, value, ttlSeconds?) → void',\n 'await kv.delete(key) → boolean',\n 'await kv.list(prefix?) → string[]',\n 'Backed by Redis. Scoped per function.',\n 'Limits: 256KB per value, 1000 keys per function, 30-day default TTL.',\n '',\n '═══ DATABASE ═══',\n 'const docs = await spacelr.db.collection(name).find(filter?, options?)',\n ' options: { sort, limit, offset }',\n 'await spacelr.db.collection(name).insertOne(doc)',\n 'await spacelr.db.collection(name).insertMany(docs)',\n 'Scoped to the function\\'s project. Requires database rules to be set first.',\n '',\n '═══ STORAGE ═══',\n 'await spacelr.storage.list(options?) → FileInfo[]',\n 'await spacelr.storage.getInfo(fileId) → FileInfo',\n 'await spacelr.storage.getDownloadUrl(fileId) → string',\n 'Scoped to the function\\'s project.',\n '',\n '═══ EMAIL ═══',\n 'await spacelr.email.send({ to, template, variables })',\n ' Sends a template-based email using project templates (MJML + Handlebars).',\n ' template: template name (must exist in the project)',\n ' variables: Record<string, string> of template variables',\n ' Returns: { messageId }',\n 'await spacelr.email.sendRaw({ to, subject, html })',\n ' Sends a raw HTML email directly. Max 500KB HTML.',\n ' Returns: { messageId }',\n 'Rate limit: 100 emails/hour per project (configurable via FUNCTION_EMAIL_HOURLY_LIMIT).',\n '',\n '═══ NOTIFICATIONS ═══',\n 'await spacelr.notifications.send({ userId, title, body, data? })',\n ' Sends a push notification to a specific user in the project.',\n 'await spacelr.notifications.sendMany({ userIds, title, body, data? })',\n ' Sends to multiple users. Deduplicates userIds automatically.',\n 'Rate limit: 500 notifications/hour per project (configurable via FUNCTION_NOTIFICATION_HOURLY_LIMIT). Scoped to the function\\'s project.',\n '',\n '═══ RESOURCE LIMITS ═══',\n 'Execution timeout: 30s default, 120s max',\n 'Memory: 128MB default, 512MB max',\n 'Code bundle: 10MB max (zip)',\n 'Concurrent executions: 10 per project',\n 'CPU time: limited by watchdog (equals timeout)',\n ].join('\\n'),\n },\n },\n ],\n };\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { registerDatabasePrompts } from './database';\nimport { registerFunctionPrompts } from './functions';\n\nexport function registerAllPrompts(server: McpServer): void {\n registerDatabasePrompts(server);\n registerFunctionPrompts(server);\n}\n"],"mappings":"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","names":["path","z","z","z","z","z","z","z","z","z","z"]}