{"version":3,"sources":["../src/index.ts","../src/tools/getPublicIpTool.ts","../src/tools/getPublicIpTool.schema.ts","../src/tools/getInterfacesTool.ts","../src/tools/getInterfacesTool.schema.ts","../src/tools/downloadTool.ts","../src/tools/downloadTool.schema.ts","../src/tools/fetchTool.ts","../src/tools/fetchTool.schema.ts"],"sourcesContent":["// src/index.ts for @sylphlab/mcp-net-core\n\n// --- Get Public IP Tool ---\nexport { getPublicIpTool } from './tools/getPublicIpTool.js';\nexport { GetPublicIpToolInputSchema } from './tools/getPublicIpTool.schema.js'; // Export schema from schema file\nexport type { GetPublicIpToolInput, GetPublicIpResult } from './tools/getPublicIpTool.js';\n\n// --- Get Interfaces Tool ---\nexport { getInterfacesTool } from './tools/getInterfacesTool.js';\nexport { GetInterfacesToolInputSchema } from './tools/getInterfacesTool.schema.js'; // Export schema from schema file\nexport type {\n  GetInterfacesToolInput,\n  GetInterfacesResult,\n  NetworkInterfaces,\n} from './tools/getInterfacesTool.js';\n\n// --- Download Tool ---\nexport { downloadTool } from './tools/downloadTool.js';\nexport { downloadToolInputSchema } from './tools/downloadTool.schema.js';\nexport type { DownloadResultItem } from './tools/downloadTool.types.js'; // Correct path for output interface\n\n// --- Fetch Tool ---\nexport { fetchTool } from './tools/fetchTool.js';\nexport type {\n  FetchToolInput,\n  FetchResultItem,\n  FetchInputItem,\n} from './tools/fetchTool.js';\n","import { defineTool } from '@sylphlab/mcp-core';\nimport { jsonPart } from '@sylphlab/mcp-core';\nimport type { McpToolExecuteOptions, Part } from '@sylphlab/mcp-core';\nimport { z } from 'zod';\nimport { GetPublicIpToolInputSchema } from './getPublicIpTool.schema.js';\n\n// --- TypeScript Types ---\nexport type GetPublicIpToolInput = z.infer<typeof GetPublicIpToolInputSchema>;\n\n// --- Output Types ---\nexport interface GetPublicIpResult {\n  /** Optional ID from the input. */\n  id?: string;\n  /** Whether retrieving the public IP was successful. */\n  success: boolean;\n  /** The public IP address string, if successful. */\n  ip?: string;\n  /** Error message, if retrieval failed. */\n  error?: string;\n  /** Suggestion for fixing the error. */\n  suggestion?: string;\n}\n\n// Zod Schema for the individual result\nconst GetPublicIpResultSchema = z.object({\n  id: z.string().optional(),\n  success: z.boolean(),\n  ip: z.string().optional(),\n  error: z.string().optional(),\n  suggestion: z.string().optional(),\n});\n\n// Define the output schema instance as a constant array\nconst GetPublicIpOutputSchema = z.array(GetPublicIpResultSchema);\n\n// --- Helper Function ---\n\n// Helper to fetch public IP with fallback\nasync function fetchPublicIp(): Promise<{ ip: string | null; error: string | null }> {\n  try {\n    const response = await fetch('https://ipinfo.io/json');\n    if (!response.ok) throw new Error(`ipinfo.io HTTP error! status: ${response.status}`);\n    const data = await response.json();\n    if (typeof data?.ip !== 'string')\n      throw new Error('IP address not found or invalid in response from ipinfo.io');\n    return { ip: data.ip, error: null };\n  } catch (e: unknown) {\n    const errorMsg = `Failed to fetch public IP from ipinfo.io: ${e instanceof Error ? e.message : String(e)}`;\n    // Attempt fallback\n    try {\n      const fallbackResponse = await fetch('https://api.ipify.org?format=json');\n      if (!fallbackResponse.ok)\n        throw new Error(`api.ipify.org HTTP error! status: ${fallbackResponse.status}`);\n      const fallbackData = await fallbackResponse.json();\n      if (typeof fallbackData?.ip !== 'string')\n        throw new Error('IP address not found or invalid in fallback response from api.ipify.org');\n      return { ip: fallbackData.ip, error: null };\n    } catch (fallbackError: unknown) {\n      const fallbackErrorMsg = `Fallback failed: ${fallbackError instanceof Error ? fallbackError.message : String(fallbackError)}`;\n      return { ip: null, error: `${errorMsg}. ${fallbackErrorMsg}` }; // Combine errors\n    }\n  }\n}\n\n// --- Tool Definition using defineTool ---\nexport const getPublicIpTool = defineTool({\n  name: 'getPublicIp',\n  description: 'Retrieves the public IP address of the machine running the MCP server.',\n  inputSchema: GetPublicIpToolInputSchema,\n  outputSchema: GetPublicIpOutputSchema, // Use the array schema\n\n  execute: async (\n    input: GetPublicIpToolInput,\n    _options: McpToolExecuteOptions,\n  ): Promise<Part[]> => {\n    // Return Part[]\n\n    // Zod validation (throw error on failure)\n    const parsed = GetPublicIpToolInputSchema.safeParse(input);\n    if (!parsed.success) {\n      const errorMessages = Object.entries(parsed.error.flatten().fieldErrors)\n        .map(([field, messages]) => `${field}: ${messages.join(', ')}`)\n        .join('; ');\n      throw new Error(`Input validation failed: ${errorMessages}`);\n    }\n    const { id } = parsed.data; // Input schema might be empty\n\n    const results: GetPublicIpResult[] = [];\n    let ip: string | undefined;\n    let error: string | undefined;\n    let suggestion: string | undefined;\n    let success = false;\n\n    try {\n      const publicIpInfo = await fetchPublicIp();\n\n      if (publicIpInfo.error) {\n        // If helper returned an error (primary and fallback failed)\n        throw new Error(publicIpInfo.error);\n      }\n\n      // If helper returned an IP (should always happen if no error)\n      if (publicIpInfo.ip) {\n        ip = publicIpInfo.ip;\n        success = true;\n      } else {\n        // This case should theoretically not be reached if fetchPublicIp is correct\n        throw new Error('Public IP could not be determined despite no specific error reported.');\n      }\n    } catch (e: unknown) {\n      success = false;\n      error = e instanceof Error ? e.message : 'Unknown error retrieving public IP';\n      suggestion =\n        'Check network connectivity and reachability of public IP services (ipinfo.io, api.ipify.org).';\n      ip = undefined;\n    }\n\n    // Push the single result\n    results.push({\n      id,\n      success,\n      ip,\n      error,\n      suggestion,\n    });\n\n    // Return the result wrapped in jsonPart\n    return [jsonPart(results, GetPublicIpOutputSchema)];\n  },\n});\n\n// Export necessary types\n","import { z } from 'zod';\n\n// Input schema - no parameters needed for this specific tool\nexport const GetPublicIpToolInputSchema = z.object({\n  id: z.string().optional(), // Keep id for correlation if used in batch by server\n});\n","import os from 'node:os';\nimport { defineTool } from '@sylphlab/mcp-core';\nimport { jsonPart } from '@sylphlab/mcp-core';\nimport type { McpToolExecuteOptions, Part } from '@sylphlab/mcp-core';\nimport { z } from 'zod';\nimport { GetInterfacesToolInputSchema } from './getInterfacesTool.schema.js';\n\n// --- TypeScript Types ---\nexport type GetInterfacesToolInput = z.infer<typeof GetInterfacesToolInputSchema>;\n\n// Define a more specific type for the result based on os.networkInterfaces()\nexport type NetworkInterfaces = { [key: string]: os.NetworkInterfaceInfo[] | undefined };\n\n// --- Output Types ---\nexport interface GetInterfacesResult {\n  /** Optional ID from the input. */\n  id?: string;\n  /** Whether retrieving interfaces was successful. */\n  success: boolean;\n  /** The network interfaces object, if successful. */\n  result?: NetworkInterfaces;\n  /** Error message, if retrieval failed. */\n  error?: string;\n  /** Suggestion for fixing the error. */\n  suggestion?: string;\n}\n\n// Zod Schema for the individual result\nconst GetInterfacesResultSchema = z.object({\n  id: z.string().optional(),\n  success: z.boolean(),\n  // Using z.custom for complex os types, refine if needed\n  result: z.custom<NetworkInterfaces>().optional(),\n  error: z.string().optional(),\n  suggestion: z.string().optional(),\n});\n\n// Define the output schema instance as a constant array\nconst GetInterfacesOutputSchema = z.array(GetInterfacesResultSchema);\n\n// --- Tool Definition using defineTool ---\nexport const getInterfacesTool = defineTool({\n  name: 'getInterfaces',\n  description: 'Retrieves details about the network interfaces on the machine.',\n  inputSchema: GetInterfacesToolInputSchema,\n  outputSchema: GetInterfacesOutputSchema, // Use the array schema\n\n  execute: async (\n    input: GetInterfacesToolInput,\n    _options: McpToolExecuteOptions,\n  ): Promise<Part[]> => {\n    // Return Part[]\n\n    // Zod validation (throw error on failure)\n    const parsed = GetInterfacesToolInputSchema.safeParse(input);\n    if (!parsed.success) {\n      const errorMessages = Object.entries(parsed.error.flatten().fieldErrors)\n        .map(([field, messages]) => `${field}: ${messages.join(', ')}`)\n        .join('; ');\n      throw new Error(`Input validation failed: ${errorMessages}`);\n    }\n    const { id } = parsed.data; // Input schema might be empty, handle accordingly\n\n    const results: GetInterfacesResult[] = [];\n    let interfaces: NetworkInterfaces | undefined;\n    let error: string | undefined;\n    let suggestion: string | undefined;\n    let success = false;\n\n    try {\n      interfaces = os.networkInterfaces();\n      if (!interfaces || Object.keys(interfaces).length === 0) {\n        // Consider it an error if no interfaces are found, as it's unusual\n        throw new Error('No network interfaces found on the system.');\n      }\n      success = true;\n      suggestion = 'Result contains local network interface details.';\n    } catch (e: unknown) {\n      success = false;\n      error = e instanceof Error ? e.message : 'Unknown error retrieving network interfaces';\n      suggestion = 'Check system permissions or if network interfaces are available.';\n      interfaces = undefined;\n    }\n\n    // Push the single result\n    results.push({\n      id,\n      success,\n      result: interfaces,\n      error,\n      suggestion,\n    });\n\n    // Return the result wrapped in jsonPart\n    return [jsonPart(results, GetInterfacesOutputSchema)];\n  },\n});\n\n// Export necessary types\n","import { z } from 'zod';\n\n// Input schema - no parameters needed for this specific tool\nexport const GetInterfacesToolInputSchema = z.object({\n  id: z.string().optional(), // Keep id for correlation if used in batch by server\n});\n","import { defineTool } from '@sylphlab/mcp-core';\nimport { jsonPart, validateAndResolvePath } from '@sylphlab/mcp-core';\nimport type { McpToolExecuteOptions, Part } from '@sylphlab/mcp-core';\nimport { z } from 'zod';\nimport { downloadToolInputSchema } from './downloadTool.schema.js';\nimport type {\n  DownloadInputItem,\n  // DownloadResultItem is defined below\n  DownloadToolInput,\n  // DownloadToolOutput is inferred from schema\n} from './downloadTool.types';\n\nimport * as fs from 'node:fs';\nimport * as fsp from 'node:fs/promises';\nimport type { IncomingMessage } from 'node:http';\nimport * as https from 'node:https';\nimport * as path from 'node:path';\nimport { pipeline } from 'node:stream/promises';\n\n// --- Output Types ---\nexport interface DownloadResultItem {\n  /** Optional ID from the input item. */\n  id?: string;\n  /** The destination path provided in the input. */\n  path: string;\n  /** Whether the download operation for this item was successful. */\n  success: boolean;\n  /** Optional message providing more details (e.g., success message). */\n  message?: string;\n  /** Optional error message if the operation failed for this item. */\n  error?: string;\n  /** Optional suggestion for fixing the error. */\n  suggestion?: string;\n}\n\n// Zod Schema for the individual result\nconst DownloadResultItemSchema = z.object({\n  id: z.string().optional(),\n  path: z.string(),\n  success: z.boolean(),\n  message: z.string().optional(),\n  error: z.string().optional(),\n  suggestion: z.string().optional(),\n});\n\n// Define the output schema instance as a constant array\nconst DownloadToolOutputSchema = z.array(DownloadResultItemSchema);\n\n// --- Helper Function for Single Download ---\n\nasync function processSingleDownload(\n  item: DownloadInputItem,\n  options: McpToolExecuteOptions,\n): Promise<DownloadResultItem> {\n  const { id, url, destinationPath, overwrite } = item;\n  const { workspaceRoot, allowOutsideWorkspace } = options;\n\n  let absoluteDestPath: string | undefined;\n  try {\n    // 1. Validate and Resolve destinationPath\n    const validationResult = validateAndResolvePath(\n      destinationPath,\n      workspaceRoot,\n      allowOutsideWorkspace,\n    );\n    if (typeof validationResult !== 'string') {\n      const error = validationResult?.error ?? 'Unknown path validation error';\n      const suggestion = validationResult?.suggestion ?? 'Review path and workspace settings.';\n      throw new Error(`Path validation failed: ${error} ${suggestion}`);\n    }\n    absoluteDestPath = validationResult;\n\n    // Ensure target directory exists\n    const destDir = path.dirname(absoluteDestPath);\n    await fsp.mkdir(destDir, { recursive: true });\n\n    // 2. Check file existence and overwrite flag\n    try {\n      await fsp.access(absoluteDestPath);\n      if (!overwrite) {\n        throw new Error(\n          `File already exists at '${destinationPath}'. Use overwrite: true to replace.`,\n        );\n      }\n      // If overwrite is true, attempt to delete existing file before download\n      await fsp.unlink(absoluteDestPath);\n    } catch (error: unknown) {\n      const isEnoent =\n        error && typeof error === 'object' && 'code' in error && error.code === 'ENOENT';\n      if (!isEnoent) {\n        // Re-throw if it's not a 'file not found' error (includes the 'File already exists' error if overwrite is false)\n        throw error;\n      }\n      // If ENOENT, proceed (file doesn't exist or was just deleted)\n    }\n\n    // 3. Fetch and Stream (with basic redirect handling)\n    const response = await new Promise<IncomingMessage>((resolve, reject) => {\n      let redirectCount = 0;\n      const maxRedirects = 5;\n\n      const makeRequest = (currentUrl: string) => {\n        const request = https.get(currentUrl, (res) => {\n          const statusCode = res.statusCode ?? 0;\n\n          if (statusCode >= 300 && statusCode < 400 && res.headers.location) {\n            redirectCount++;\n            if (redirectCount > maxRedirects) {\n              reject(new Error('Exceeded maximum redirects (5).'));\n              res.resume();\n              return;\n            }\n            res.resume();\n            makeRequest(res.headers.location);\n            return;\n          }\n\n          if (statusCode < 200 || statusCode >= 300) {\n            let errorBody = '';\n            res.on('data', (chunk) => {\n              if (errorBody.length < 500) errorBody += chunk.toString();\n            });\n            res.on('end', () => {\n              reject(\n                new Error(\n                  `Download failed. Status Code: ${statusCode}. ${errorBody.substring(0, 100)}`,\n                ),\n              );\n            });\n            res.resume();\n            return;\n          }\n          resolve(res);\n        });\n\n        request.on('error', (err) => {\n          reject(new Error(`Network request failed: ${err.message}`));\n        });\n        request.setTimeout(30000, () => {\n          request.destroy(new Error('Request timed out after 30 seconds'));\n        });\n        request.end();\n      };\n      makeRequest(url);\n    });\n\n    // 4. Pipe to file\n    const fileStream = fs.createWriteStream(absoluteDestPath);\n    try {\n      await pipeline(response, fileStream);\n    } catch (pipeError: unknown) {\n      throw new Error(\n        `File write failed: ${pipeError instanceof Error ? pipeError.message : String(pipeError)}`,\n      );\n    }\n\n    // 5. Report success\n    const successMsg = `Successfully downloaded '${url}' to '${destinationPath}'.`;\n    return { id, path: destinationPath, success: true, message: successMsg };\n  } catch (error: unknown) {\n    const errorMsg = `Download failed for item ${id ?? url}: ${error instanceof Error ? error.message : String(error)}`;\n\n    // Attempt cleanup only if path was resolved\n    if (absoluteDestPath) {\n      try {\n        await fsp.unlink(absoluteDestPath);\n      } catch (cleanupError: unknown) {\n        if (\n          cleanupError &&\n          typeof cleanupError === 'object' &&\n          'code' in cleanupError &&\n          cleanupError.code !== 'ENOENT'\n        ) {\n          // Log or handle cleanup error if needed, but don't obscure original error\n        }\n      }\n    }\n\n    let suggestion: string | undefined;\n    if (error instanceof Error) {\n      if (\n        error.message?.includes('ENOTFOUND') ||\n        error.message?.includes('ECONNREFUSED') ||\n        error.message?.includes('Network request failed') ||\n        error.message?.includes('timed out')\n      ) {\n        suggestion = 'Check the URL and network connectivity.';\n      } else if (error.message?.includes('EACCES')) {\n        suggestion = 'Check file system write permissions for the destination directory.';\n      } else if (error.message?.includes('File already exists')) {\n        suggestion = 'Set overwrite: true if you want to replace the existing file.';\n      } else if (error.message?.includes('Path validation failed')) {\n        // Extract suggestion from the validation error message itself\n        suggestion =\n          error.message.split('Path validation failed: ')[1]?.split('Suggestion: ')[1] ??\n          'Check path validity and workspace settings.';\n      } else if (error.message?.includes('File write failed')) {\n        suggestion = 'Check disk space and file system permissions.';\n      } else {\n        suggestion = 'Review the error message and input parameters.';\n      }\n    }\n\n    return {\n      id,\n      path: destinationPath,\n      success: false,\n      error: errorMsg,\n      // message: errorMsg, // Keep message for success only\n      suggestion,\n    };\n  }\n}\n\n// --- Tool Definition using defineTool ---\n\nexport const downloadTool = defineTool({\n  name: 'downloadTool',\n  description: 'Downloads one or more files from URLs to specified paths within the workspace.',\n  inputSchema: downloadToolInputSchema,\n  outputSchema: DownloadToolOutputSchema, // Use the array schema\n\n  execute: async (input: DownloadToolInput, options: McpToolExecuteOptions): Promise<Part[]> => {\n    // Return Part[]\n\n    // Zod validation (throw error on failure)\n    const parsed = downloadToolInputSchema.safeParse(input);\n    if (!parsed.success) {\n      const errorMessages = Object.entries(parsed.error.flatten().fieldErrors)\n        .map(([field, messages]) => `${field}: ${messages.join(', ')}`)\n        .join('; ');\n      throw new Error(`Input validation failed: ${errorMessages}`);\n    }\n\n    // Add upfront check for workspaceRoot within options\n    if (!options?.workspaceRoot) {\n      throw new Error('Workspace root is not available in options.');\n    }\n\n    const { items } = parsed.data;\n    const results: DownloadResultItem[] = [];\n\n    // Process downloads (could be parallelized with Promise.all for performance)\n    for (const item of items) {\n      const result = await processSingleDownload(item, options);\n      results.push(result);\n    }\n\n    // Return the results wrapped in jsonPart\n    return [jsonPart(results, DownloadToolOutputSchema)];\n  },\n});\n\n// Ensure necessary types are still exported\n","import { z } from 'zod';\n\n// Schema for a single download item\nexport const DownloadItemSchema = z.object({\n  id: z.string().optional(),\n  url: z.string().url('Invalid URL format.'),\n  destinationPath: z.string().min(1, 'Destination path cannot be empty.'),\n  overwrite: z.boolean().default(false),\n});\n\n// Main input schema: an array of download items\nexport const downloadToolInputSchema = z.object({\n  items: z.array(DownloadItemSchema).min(1, 'At least one download item is required.'),\n});\n","import { defineTool } from '@sylphlab/mcp-core';\nimport { jsonPart } from '@sylphlab/mcp-core';\nimport type { McpToolExecuteOptions, Part } from '@sylphlab/mcp-core';\nimport { z } from 'zod';\nimport { type FetchItemSchema, fetchToolInputSchema } from './fetchTool.schema.js';\n\n// --- TypeScript Types ---\nexport type FetchInputItem = z.infer<typeof FetchItemSchema>;\nexport type FetchToolInput = z.infer<typeof fetchToolInputSchema>;\n\n// --- Output Types ---\n// Interface for a single fetch result item\nexport interface FetchResultItem {\n  /** Optional ID from the input item. */\n  id?: string;\n  /** Whether the fetch operation for this item was successful (HTTP status 2xx). */\n  success: boolean;\n  /** HTTP status code of the response. */\n  status?: number;\n  /** HTTP status text of the response. */\n  statusText?: string;\n  /** Response headers. */\n  headers?: Record<string, string>;\n  /** Parsed response body (string, JSON object, or null if ignored), if successful. */\n  body?: unknown;\n  /** Error message, if the operation failed. */\n  error?: string;\n  /** Suggestion for fixing the error. */\n  suggestion?: string;\n}\n\n// Zod Schema for the individual result\nconst FetchResultItemSchema = z.object({\n  id: z.string().optional(),\n  success: z.boolean(),\n  status: z.number().optional(),\n  statusText: z.string().optional(),\n  headers: z.record(z.string()).optional(),\n  body: z.unknown().optional(),\n  error: z.string().optional(),\n  suggestion: z.string().optional(),\n});\n\n// Define the output schema instance as a constant array\nconst FetchToolOutputSchema = z.array(FetchResultItemSchema);\n\n// --- Helper Function ---\n\n// Helper function to process a single fetch item\nasync function processSingleFetch(item: FetchInputItem): Promise<FetchResultItem> {\n  const { id, url, method = 'GET', headers = {}, body, responseType = 'text' } = item;\n  const resultItem: FetchResultItem = { id, success: false };\n\n  try {\n    const requestOptions: RequestInit = {\n      method,\n      headers: headers as HeadersInit, // Cast headers\n    };\n\n    // Only add body for relevant methods and if body is provided\n    if (body && ['POST', 'PUT', 'PATCH'].includes(method)) {\n      requestOptions.body = body;\n      // Default Content-Type if not provided\n      if (\n        !requestOptions.headers ||\n        (!(requestOptions.headers as Record<string, string>)['Content-Type'] &&\n          !(requestOptions.headers as Record<string, string>)['content-type'])\n      ) {\n        // Ensure headers is an object before assigning\n        if (\n          typeof requestOptions.headers !== 'object' ||\n          requestOptions.headers === null ||\n          Array.isArray(requestOptions.headers)\n        ) {\n          requestOptions.headers = {};\n        }\n        (requestOptions.headers as Record<string, string>)['Content-Type'] = 'application/json';\n      }\n    }\n\n    const response = await fetch(url, requestOptions);\n\n    resultItem.status = response.status;\n    resultItem.statusText = response.statusText;\n    const responseHeaders: Record<string, string> = {};\n    response.headers.forEach((value, key) => {\n      responseHeaders[key] = value;\n    });\n    resultItem.headers = responseHeaders;\n\n    let responseBody: unknown = null;\n    let bodyForError: string | null = null;\n\n    // Try reading body text first for potential error messages\n    try {\n      bodyForError = await response.clone().text(); // Clone to read text\n    } catch {\n      // Ignore error reading body text for error reporting\n    }\n\n    if (!response.ok) {\n      let errorDetail = '';\n      if (typeof bodyForError === 'string' && bodyForError.length > 0) {\n        errorDetail = ` - Body: ${bodyForError.substring(0, 150)}`; // Limit error body length\n      }\n      throw new Error(`HTTP error! Status: ${response.status}${errorDetail}`);\n    }\n\n    // If response is OK, parse body based on responseType\n    try {\n      if (responseType === 'json') {\n        // Use the original response stream for JSON parsing\n        responseBody = await response.json();\n      } else if (responseType === 'text') {\n        // We already read the text into bodyForError\n        responseBody = bodyForError;\n      } else {\n        // 'ignore' or unknown - body is null\n        responseBody = null;\n      }\n    } catch (parseError: unknown) {\n      // Handle JSON parsing error specifically\n      throw new Error(\n        `Failed to parse response body as ${responseType}: ${parseError instanceof Error ? parseError.message : String(parseError)}`,\n      );\n    }\n\n    resultItem.body = responseBody;\n    resultItem.success = true;\n  } catch (e: unknown) {\n    const errorMsg = e instanceof Error ? e.message : 'Unknown error';\n    resultItem.error = `Fetch failed for ${url}: ${errorMsg}`;\n    // Provide suggestions based on error type\n    if (errorMsg.includes('Failed to parse response body')) {\n      resultItem.suggestion = `The server responded with status ${resultItem.status}, but the response body was not valid ${responseType}. Check the 'responseType' parameter or the server's response format.`;\n    } else if (errorMsg.includes('HTTP error')) {\n      resultItem.suggestion =\n        'The server returned an error status code. Check the error message body (if available) and the request details (URL, method, headers, body).';\n    } else if (errorMsg.includes('fetch') || errorMsg.includes('Network request failed')) {\n      // More generic network errors\n      resultItem.suggestion =\n        'Check URL, network connection, DNS resolution, and potential CORS issues if running in a browser.';\n    } else {\n      resultItem.suggestion =\n        'Check URL, network connection, method, headers, body, and potential CORS issues.';\n    }\n    resultItem.success = false;\n  }\n  return resultItem;\n}\n\n// --- Tool Definition using defineTool ---\nexport const fetchTool = defineTool({\n  name: 'fetch', // Keep tool name simple\n  description: 'Performs one or more HTTP fetch requests sequentially.',\n  inputSchema: fetchToolInputSchema,\n  outputSchema: FetchToolOutputSchema, // Use the array schema\n\n  execute: async (input: FetchToolInput, _options: McpToolExecuteOptions): Promise<Part[]> => {\n    // Return Part[]\n\n    // Zod validation (throw error on failure)\n    const parsed = fetchToolInputSchema.safeParse(input);\n    if (!parsed.success) {\n      const errorMessages = Object.entries(parsed.error.flatten().fieldErrors)\n        .map(([field, messages]) => `${field}: ${messages.join(', ')}`)\n        .join('; ');\n      throw new Error(`Input validation failed: ${errorMessages}`);\n    }\n    const { items } = parsed.data;\n\n    const results: FetchResultItem[] = [];\n\n    // Process requests sequentially\n    for (const item of items) {\n      const result = await processSingleFetch(item);\n      results.push(result);\n    }\n\n    // Return the results wrapped in jsonPart\n    return [jsonPart(results, FetchToolOutputSchema)];\n  },\n});\n","import { z } from 'zod';\n\n// Define allowed HTTP methods\nconst HttpMethodSchema = z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']);\n\n// Define allowed response types\nconst ResponseTypeSchema = z.enum(['text', 'json', 'ignore']);\n\n// Schema for a single fetch item\nexport const FetchItemSchema = z.object({\n  id: z.string().optional(),\n  url: z.string().url('Invalid URL format.'),\n  method: HttpMethodSchema.default('GET'),\n  headers: z.record(z.string()).optional(), // Record<string, string>\n  body: z.string().optional(), // Body is expected as a string\n  responseType: ResponseTypeSchema.default('text'),\n});\n\n// Main input schema: an array of fetch items\nexport const fetchToolInputSchema = z.object({\n  items: z.array(FetchItemSchema).min(1, 'At least one fetch item is required.'),\n});\n"],"mappings":"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","names":["import_mcp_core","import_zod","import_mcp_core","import_zod","import_zod","os","import_mcp_core","import_zod","import_zod","import_mcp_core","import_zod","import_zod"]}