@runpod/mcp-server 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +19 -51
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +21 -18
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# @runpod/mcp-server
|
|
2
|
+
|
|
3
|
+
## 1.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- c49b2cc: Add npx support for running the MCP server directly without installation. Includes bin field in package.json, shebang in build output, and updated README with npx command. Also fixes branding consistency (RunPod -> Runpod) and adds development conventions documentation.
|
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Runpod MCP Server
|
|
2
2
|
[](https://smithery.ai/server/@runpod/runpod-mcp-ts)
|
|
3
3
|
|
|
4
|
-
This Model Context Protocol (MCP) server enables you to interact with the
|
|
4
|
+
This Model Context Protocol (MCP) server enables you to interact with the Runpod REST API through Claude or other MCP-compatible clients.
|
|
5
5
|
|
|
6
6
|
## Features
|
|
7
7
|
|
|
@@ -13,71 +13,43 @@ The server provides tools for managing:
|
|
|
13
13
|
- **Network Volumes**: Create, list, get details, update, and delete network volumes
|
|
14
14
|
- **Container Registry Authentications**: Create, list, get details, and delete authentications
|
|
15
15
|
|
|
16
|
-
##
|
|
16
|
+
## Quick Start
|
|
17
17
|
|
|
18
18
|
### Prerequisites
|
|
19
19
|
|
|
20
20
|
- Node.js 18 or higher
|
|
21
|
-
- A
|
|
22
|
-
- Claude for Desktop or another MCP-compatible client
|
|
21
|
+
- A Runpod account and API key ([get your API key](https://www.runpod.io/console/user/settings))
|
|
23
22
|
|
|
24
|
-
###
|
|
25
|
-
|
|
26
|
-
To install runpod-mcp-ts for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@runpod/runpod-mcp-ts):
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
npx -y @smithery/cli install @runpod/runpod-mcp-ts --client claude
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### Installation
|
|
33
|
-
|
|
34
|
-
1. Clone the repository
|
|
35
|
-
2. Install dependencies:
|
|
36
|
-
```
|
|
37
|
-
pnpm install
|
|
38
|
-
```
|
|
39
|
-
3. Build the server:
|
|
40
|
-
```
|
|
41
|
-
pnpm build
|
|
42
|
-
```
|
|
23
|
+
### Running with npx
|
|
43
24
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
Set your RunPod API key as an environment variable:
|
|
25
|
+
You can run the server directly without installation:
|
|
47
26
|
|
|
48
27
|
```bash
|
|
49
|
-
|
|
50
|
-
export RUNPOD_API_KEY=your_api_key_here
|
|
51
|
-
|
|
52
|
-
# Windows (Command Prompt)
|
|
53
|
-
set RUNPOD_API_KEY=your_api_key_here
|
|
54
|
-
|
|
55
|
-
# Windows (PowerShell)
|
|
56
|
-
$env:RUNPOD_API_KEY="your_api_key_here"
|
|
28
|
+
RUNPOD_API_KEY=your_api_key_here npx @runpod/mcp-server@latest
|
|
57
29
|
```
|
|
58
30
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
### Running the Server
|
|
31
|
+
### Installing via Smithery
|
|
62
32
|
|
|
63
|
-
|
|
33
|
+
To install for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@runpod/runpod-mcp-ts):
|
|
64
34
|
|
|
65
35
|
```bash
|
|
66
|
-
|
|
36
|
+
npx -y @smithery/cli install @runpod/runpod-mcp-ts --client claude
|
|
67
37
|
```
|
|
68
38
|
|
|
69
39
|
## Setting up with Claude for Desktop
|
|
70
40
|
|
|
71
41
|
1. Open Claude for Desktop
|
|
72
|
-
2. Edit the config file:
|
|
42
|
+
2. Edit the config file:
|
|
43
|
+
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
44
|
+
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
73
45
|
3. Add the server configuration:
|
|
74
46
|
|
|
75
47
|
```json
|
|
76
48
|
{
|
|
77
49
|
"mcpServers": {
|
|
78
50
|
"runpod": {
|
|
79
|
-
"command": "
|
|
80
|
-
"args": ["/
|
|
51
|
+
"command": "npx",
|
|
52
|
+
"args": ["@runpod/mcp-server@latest"],
|
|
81
53
|
"env": {
|
|
82
54
|
"RUNPOD_API_KEY": "your_api_key_here"
|
|
83
55
|
}
|
|
@@ -86,24 +58,20 @@ pnpm start
|
|
|
86
58
|
}
|
|
87
59
|
```
|
|
88
60
|
|
|
89
|
-
Make sure to replace the `"args": ["/path/to/mcp-server/dist/index.js"]` with the path to the dist folder in the repository.
|
|
90
|
-
|
|
91
61
|
4. Restart Claude for Desktop
|
|
92
62
|
|
|
93
63
|
## Usage Examples
|
|
94
64
|
|
|
95
|
-
Here are some examples of how to use the server with Claude:
|
|
96
|
-
|
|
97
65
|
### List all pods
|
|
98
66
|
|
|
99
67
|
```
|
|
100
|
-
Can you list all my
|
|
68
|
+
Can you list all my Runpod pods?
|
|
101
69
|
```
|
|
102
70
|
|
|
103
71
|
### Create a new pod
|
|
104
72
|
|
|
105
73
|
```
|
|
106
|
-
Create a new
|
|
74
|
+
Create a new Runpod pod with the following specifications:
|
|
107
75
|
- Name: test-pod
|
|
108
76
|
- Image: runpod/pytorch:2.1.0-py3.10-cuda11.8.0-devel-ubuntu22.04
|
|
109
77
|
- GPU Type: NVIDIA GeForce RTX 4090
|
|
@@ -113,7 +81,7 @@ Create a new RunPod pod with the following specifications:
|
|
|
113
81
|
### Create a serverless endpoint
|
|
114
82
|
|
|
115
83
|
```
|
|
116
|
-
Create a
|
|
84
|
+
Create a Runpod serverless endpoint with the following configuration:
|
|
117
85
|
- Name: my-endpoint
|
|
118
86
|
- Template ID: 30zmvf89kd
|
|
119
87
|
- Minimum workers: 0
|
|
@@ -122,7 +90,7 @@ Create a RunPod serverless endpoint with the following configuration:
|
|
|
122
90
|
|
|
123
91
|
## Security Considerations
|
|
124
92
|
|
|
125
|
-
This server requires your
|
|
93
|
+
This server requires your Runpod API key, which grants full access to your Runpod account. For security:
|
|
126
94
|
|
|
127
95
|
- Never share your API key
|
|
128
96
|
- Be cautious about what operations you perform
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport fetch, { type RequestInit as NodeFetchRequestInit } from 'node-fetch';\n\n// Base URL for RunPod API\nconst API_BASE_URL = 'https://rest.runpod.io/v1';\n\n// Get API key from environment variable\nconst API_KEY = process.env.RUNPOD_API_KEY;\nif (!API_KEY) {\n console.error('RUNPOD_API_KEY environment variable is required');\n process.exit(1);\n}\n\n// Create an MCP server\nconst server = new McpServer({\n name: 'RunPod API Server',\n version: '1.0.0',\n capabilities: {\n resources: {},\n tools: {},\n },\n});\n\n// Helper function to make authenticated API requests to RunPod\nasync function runpodRequest(\n endpoint: string,\n method: string = 'GET',\n body?: Record<string, unknown>\n) {\n const url = `${API_BASE_URL}${endpoint}`;\n const headers = {\n Authorization: `Bearer ${API_KEY}`,\n 'Content-Type': 'application/json',\n };\n\n const options: NodeFetchRequestInit = {\n method,\n headers,\n };\n\n if (body && (method === 'POST' || method === 'PATCH')) {\n options.body = JSON.stringify(body);\n }\n\n try {\n const response = await fetch(url, options);\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`RunPod API Error: ${response.status} - ${errorText}`);\n }\n\n // Some endpoints might not return JSON\n const contentType = response.headers.get('content-type');\n if (contentType && contentType.includes('application/json')) {\n return await response.json();\n }\n\n return { success: true, status: response.status };\n } catch (error) {\n console.error('Error calling RunPod API:', error);\n throw error;\n }\n}\n\n// ============== POD MANAGEMENT TOOLS ==============\n\n// List Pods\nserver.tool(\n 'list-pods',\n {\n computeType: z\n .enum(['GPU', 'CPU'])\n .optional()\n .describe('Filter to only GPU or only CPU Pods'),\n gpuTypeId: z\n .array(z.string())\n .optional()\n .describe('Filter to Pods with any of the listed GPU types'),\n dataCenterId: z\n .array(z.string())\n .optional()\n .describe('Filter to Pods in any of the provided data centers'),\n name: z\n .string()\n .optional()\n .describe('Filter to Pods with the provided name'),\n includeMachine: z\n .boolean()\n .optional()\n .describe('Include information about the machine'),\n includeNetworkVolume: z\n .boolean()\n .optional()\n .describe('Include information about attached network volumes'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.computeType)\n queryParams.append('computeType', params.computeType);\n if (params.gpuTypeId)\n params.gpuTypeId.forEach((type) => queryParams.append('gpuTypeId', type));\n if (params.dataCenterId)\n params.dataCenterId.forEach((dc) =>\n queryParams.append('dataCenterId', dc)\n );\n if (params.name) queryParams.append('name', params.name);\n if (params.includeMachine)\n queryParams.append('includeMachine', params.includeMachine.toString());\n if (params.includeNetworkVolume)\n queryParams.append(\n 'includeNetworkVolume',\n params.includeNetworkVolume.toString()\n );\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(`/pods${queryString}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Get Pod Details\nserver.tool(\n 'get-pod',\n {\n podId: z.string().describe('ID of the pod to retrieve'),\n includeMachine: z\n .boolean()\n .optional()\n .describe('Include information about the machine'),\n includeNetworkVolume: z\n .boolean()\n .optional()\n .describe('Include information about attached network volumes'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.includeMachine)\n queryParams.append('includeMachine', params.includeMachine.toString());\n if (params.includeNetworkVolume)\n queryParams.append(\n 'includeNetworkVolume',\n params.includeNetworkVolume.toString()\n );\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(`/pods/${params.podId}${queryString}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Pod\nserver.tool(\n 'create-pod',\n {\n name: z.string().optional().describe('Name for the pod'),\n imageName: z.string().describe('Docker image to use'),\n cloudType: z\n .enum(['SECURE', 'COMMUNITY'])\n .optional()\n .describe('SECURE or COMMUNITY cloud'),\n gpuTypeIds: z\n .array(z.string())\n .optional()\n .describe('List of acceptable GPU types'),\n gpuCount: z.number().optional().describe('Number of GPUs'),\n containerDiskInGb: z\n .number()\n .optional()\n .describe('Container disk size in GB'),\n volumeInGb: z.number().optional().describe('Volume size in GB'),\n volumeMountPath: z.string().optional().describe('Path to mount the volume'),\n ports: z\n .array(z.string())\n .optional()\n .describe(\"Ports to expose (e.g., '8888/http', '22/tcp')\"),\n env: z.record(z.string()).optional().describe('Environment variables'),\n dataCenterIds: z\n .array(z.string())\n .optional()\n .describe('List of data centers'),\n },\n async (params) => {\n const result = await runpodRequest('/pods', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Pod\nserver.tool(\n 'update-pod',\n {\n podId: z.string().describe('ID of the pod to update'),\n name: z.string().optional().describe('New name for the pod'),\n imageName: z.string().optional().describe('New Docker image'),\n containerDiskInGb: z\n .number()\n .optional()\n .describe('New container disk size in GB'),\n volumeInGb: z.number().optional().describe('New volume size in GB'),\n volumeMountPath: z\n .string()\n .optional()\n .describe('New path to mount the volume'),\n ports: z.array(z.string()).optional().describe('New ports to expose'),\n env: z.record(z.string()).optional().describe('New environment variables'),\n },\n async (params) => {\n const { podId, ...updateParams } = params;\n const result = await runpodRequest(`/pods/${podId}`, 'PATCH', updateParams);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Start Pod\nserver.tool(\n 'start-pod',\n {\n podId: z.string().describe('ID of the pod to start'),\n },\n async (params) => {\n const result = await runpodRequest(`/pods/${params.podId}/start`, 'POST');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Stop Pod\nserver.tool(\n 'stop-pod',\n {\n podId: z.string().describe('ID of the pod to stop'),\n },\n async (params) => {\n const result = await runpodRequest(`/pods/${params.podId}/stop`, 'POST');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Pod\nserver.tool(\n 'delete-pod',\n {\n podId: z.string().describe('ID of the pod to delete'),\n },\n async (params) => {\n const result = await runpodRequest(`/pods/${params.podId}`, 'DELETE');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== ENDPOINT MANAGEMENT TOOLS ==============\n\n// List Endpoints\nserver.tool(\n 'list-endpoints',\n {\n includeTemplate: z\n .boolean()\n .optional()\n .describe('Include template information'),\n includeWorkers: z\n .boolean()\n .optional()\n .describe('Include information about workers'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.includeTemplate)\n queryParams.append('includeTemplate', params.includeTemplate.toString());\n if (params.includeWorkers)\n queryParams.append('includeWorkers', params.includeWorkers.toString());\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(`/endpoints${queryString}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Get Endpoint Details\nserver.tool(\n 'get-endpoint',\n {\n endpointId: z.string().describe('ID of the endpoint to retrieve'),\n includeTemplate: z\n .boolean()\n .optional()\n .describe('Include template information'),\n includeWorkers: z\n .boolean()\n .optional()\n .describe('Include information about workers'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.includeTemplate)\n queryParams.append('includeTemplate', params.includeTemplate.toString());\n if (params.includeWorkers)\n queryParams.append('includeWorkers', params.includeWorkers.toString());\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(\n `/endpoints/${params.endpointId}${queryString}`\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Endpoint\nserver.tool(\n 'create-endpoint',\n {\n name: z.string().optional().describe('Name for the endpoint'),\n templateId: z.string().describe('Template ID to use'),\n computeType: z\n .enum(['GPU', 'CPU'])\n .optional()\n .describe('GPU or CPU endpoint'),\n gpuTypeIds: z\n .array(z.string())\n .optional()\n .describe('List of acceptable GPU types'),\n gpuCount: z.number().optional().describe('Number of GPUs per worker'),\n workersMin: z.number().optional().describe('Minimum number of workers'),\n workersMax: z.number().optional().describe('Maximum number of workers'),\n dataCenterIds: z\n .array(z.string())\n .optional()\n .describe('List of data centers'),\n },\n async (params) => {\n const result = await runpodRequest('/endpoints', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Endpoint\nserver.tool(\n 'update-endpoint',\n {\n endpointId: z.string().describe('ID of the endpoint to update'),\n name: z.string().optional().describe('New name for the endpoint'),\n workersMin: z.number().optional().describe('New minimum number of workers'),\n workersMax: z.number().optional().describe('New maximum number of workers'),\n idleTimeout: z.number().optional().describe('New idle timeout in seconds'),\n scalerType: z\n .enum(['QUEUE_DELAY', 'REQUEST_COUNT'])\n .optional()\n .describe('Scaler type'),\n scalerValue: z.number().optional().describe('Scaler value'),\n },\n async (params) => {\n const { endpointId, ...updateParams } = params;\n const result = await runpodRequest(\n `/endpoints/${endpointId}`,\n 'PATCH',\n updateParams\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Endpoint\nserver.tool(\n 'delete-endpoint',\n {\n endpointId: z.string().describe('ID of the endpoint to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/endpoints/${params.endpointId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== TEMPLATE MANAGEMENT TOOLS ==============\n\n// List Templates\nserver.tool('list-templates', {}, async () => {\n const result = await runpodRequest('/templates');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n});\n\n// Get Template Details\nserver.tool(\n 'get-template',\n {\n templateId: z.string().describe('ID of the template to retrieve'),\n },\n async (params) => {\n const result = await runpodRequest(`/templates/${params.templateId}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Template\nserver.tool(\n 'create-template',\n {\n name: z.string().describe('Name for the template'),\n imageName: z.string().describe('Docker image to use'),\n isServerless: z\n .boolean()\n .optional()\n .describe('Is this a serverless template'),\n ports: z.array(z.string()).optional().describe('Ports to expose'),\n dockerEntrypoint: z\n .array(z.string())\n .optional()\n .describe('Docker entrypoint commands'),\n dockerStartCmd: z\n .array(z.string())\n .optional()\n .describe('Docker start commands'),\n env: z.record(z.string()).optional().describe('Environment variables'),\n containerDiskInGb: z\n .number()\n .optional()\n .describe('Container disk size in GB'),\n volumeInGb: z.number().optional().describe('Volume size in GB'),\n volumeMountPath: z.string().optional().describe('Path to mount the volume'),\n readme: z.string().optional().describe('README content in markdown format'),\n },\n async (params) => {\n const result = await runpodRequest('/templates', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Template\nserver.tool(\n 'update-template',\n {\n templateId: z.string().describe('ID of the template to update'),\n name: z.string().optional().describe('New name for the template'),\n imageName: z.string().optional().describe('New Docker image'),\n ports: z.array(z.string()).optional().describe('New ports to expose'),\n env: z.record(z.string()).optional().describe('New environment variables'),\n readme: z\n .string()\n .optional()\n .describe('New README content in markdown format'),\n },\n async (params) => {\n const { templateId, ...updateParams } = params;\n const result = await runpodRequest(\n `/templates/${templateId}`,\n 'PATCH',\n updateParams\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Template\nserver.tool(\n 'delete-template',\n {\n templateId: z.string().describe('ID of the template to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/templates/${params.templateId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== NETWORK VOLUME MANAGEMENT TOOLS ==============\n\n// List Network Volumes\nserver.tool('list-network-volumes', {}, async () => {\n const result = await runpodRequest('/networkvolumes');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n});\n\n// Get Network Volume Details\nserver.tool(\n 'get-network-volume',\n {\n networkVolumeId: z\n .string()\n .describe('ID of the network volume to retrieve'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/networkvolumes/${params.networkVolumeId}`\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Network Volume\nserver.tool(\n 'create-network-volume',\n {\n name: z.string().describe('Name for the network volume'),\n size: z.number().describe('Size in GB (1-4000)'),\n dataCenterId: z.string().describe('Data center ID'),\n },\n async (params) => {\n const result = await runpodRequest('/networkvolumes', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Network Volume\nserver.tool(\n 'update-network-volume',\n {\n networkVolumeId: z.string().describe('ID of the network volume to update'),\n name: z.string().optional().describe('New name for the network volume'),\n size: z\n .number()\n .optional()\n .describe('New size in GB (must be larger than current)'),\n },\n async (params) => {\n const { networkVolumeId, ...updateParams } = params;\n const result = await runpodRequest(\n `/networkvolumes/${networkVolumeId}`,\n 'PATCH',\n updateParams\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Network Volume\nserver.tool(\n 'delete-network-volume',\n {\n networkVolumeId: z.string().describe('ID of the network volume to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/networkvolumes/${params.networkVolumeId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== CONTAINER REGISTRY AUTH TOOLS ==============\n\n// List Container Registry Auths\nserver.tool('list-container-registry-auths', {}, async () => {\n const result = await runpodRequest('/containerregistryauth');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n});\n\n// Get Container Registry Auth Details\nserver.tool(\n 'get-container-registry-auth',\n {\n containerRegistryAuthId: z\n .string()\n .describe('ID of the container registry auth to retrieve'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/containerregistryauth/${params.containerRegistryAuthId}`\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Container Registry Auth\nserver.tool(\n 'create-container-registry-auth',\n {\n name: z.string().describe('Name for the container registry auth'),\n username: z.string().describe('Registry username'),\n password: z.string().describe('Registry password'),\n },\n async (params) => {\n const result = await runpodRequest(\n '/containerregistryauth',\n 'POST',\n params\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Container Registry Auth\nserver.tool(\n 'delete-container-registry-auth',\n {\n containerRegistryAuthId: z\n .string()\n .describe('ID of the container registry auth to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/containerregistryauth/${params.containerRegistryAuthId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Start receiving messages on stdin and sending messages on stdout\nconst transport = new StdioServerTransport();\nserver.connect(transport);\n"],"mappings":"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","names":["fetch"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport fetch, { type RequestInit as NodeFetchRequestInit } from 'node-fetch';\n\n// Base URL for RunPod API\nconst API_BASE_URL = 'https://rest.runpod.io/v1';\n\n// Get API key from environment variable\nconst API_KEY = process.env.RUNPOD_API_KEY;\nif (!API_KEY) {\n console.error('RUNPOD_API_KEY environment variable is required');\n process.exit(1);\n}\n\n// Create an MCP server\nconst server = new McpServer({\n name: 'RunPod API Server',\n version: '1.0.0',\n capabilities: {\n resources: {},\n tools: {},\n },\n});\n\n// Helper function to make authenticated API requests to RunPod\nasync function runpodRequest(\n endpoint: string,\n method: string = 'GET',\n body?: Record<string, unknown>\n) {\n const url = `${API_BASE_URL}${endpoint}`;\n const headers = {\n Authorization: `Bearer ${API_KEY}`,\n 'Content-Type': 'application/json',\n };\n\n const options: NodeFetchRequestInit = {\n method,\n headers,\n };\n\n if (body && (method === 'POST' || method === 'PATCH')) {\n options.body = JSON.stringify(body);\n }\n\n try {\n const response = await fetch(url, options);\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`RunPod API Error: ${response.status} - ${errorText}`);\n }\n\n // Some endpoints might not return JSON\n const contentType = response.headers.get('content-type');\n if (contentType && contentType.includes('application/json')) {\n return await response.json();\n }\n\n return { success: true, status: response.status };\n } catch (error) {\n console.error('Error calling RunPod API:', error);\n throw error;\n }\n}\n\n// ============== POD MANAGEMENT TOOLS ==============\n\n// List Pods\nserver.tool(\n 'list-pods',\n {\n computeType: z\n .enum(['GPU', 'CPU'])\n .optional()\n .describe('Filter to only GPU or only CPU Pods'),\n gpuTypeId: z\n .array(z.string())\n .optional()\n .describe('Filter to Pods with any of the listed GPU types'),\n dataCenterId: z\n .array(z.string())\n .optional()\n .describe('Filter to Pods in any of the provided data centers'),\n name: z\n .string()\n .optional()\n .describe('Filter to Pods with the provided name'),\n includeMachine: z\n .boolean()\n .optional()\n .describe('Include information about the machine'),\n includeNetworkVolume: z\n .boolean()\n .optional()\n .describe('Include information about attached network volumes'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.computeType)\n queryParams.append('computeType', params.computeType);\n if (params.gpuTypeId)\n params.gpuTypeId.forEach((type) => queryParams.append('gpuTypeId', type));\n if (params.dataCenterId)\n params.dataCenterId.forEach((dc) =>\n queryParams.append('dataCenterId', dc)\n );\n if (params.name) queryParams.append('name', params.name);\n if (params.includeMachine)\n queryParams.append('includeMachine', params.includeMachine.toString());\n if (params.includeNetworkVolume)\n queryParams.append(\n 'includeNetworkVolume',\n params.includeNetworkVolume.toString()\n );\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(`/pods${queryString}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Get Pod Details\nserver.tool(\n 'get-pod',\n {\n podId: z.string().describe('ID of the pod to retrieve'),\n includeMachine: z\n .boolean()\n .optional()\n .describe('Include information about the machine'),\n includeNetworkVolume: z\n .boolean()\n .optional()\n .describe('Include information about attached network volumes'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.includeMachine)\n queryParams.append('includeMachine', params.includeMachine.toString());\n if (params.includeNetworkVolume)\n queryParams.append(\n 'includeNetworkVolume',\n params.includeNetworkVolume.toString()\n );\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(`/pods/${params.podId}${queryString}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Pod\nserver.tool(\n 'create-pod',\n {\n name: z.string().optional().describe('Name for the pod'),\n imageName: z.string().describe('Docker image to use'),\n cloudType: z\n .enum(['SECURE', 'COMMUNITY'])\n .optional()\n .describe('SECURE or COMMUNITY cloud'),\n gpuTypeIds: z\n .array(z.string())\n .optional()\n .describe('List of acceptable GPU types'),\n gpuCount: z.number().optional().describe('Number of GPUs'),\n containerDiskInGb: z\n .number()\n .optional()\n .describe('Container disk size in GB'),\n volumeInGb: z.number().optional().describe('Volume size in GB'),\n volumeMountPath: z.string().optional().describe('Path to mount the volume'),\n ports: z\n .array(z.string())\n .optional()\n .describe(\"Ports to expose (e.g., '8888/http', '22/tcp')\"),\n env: z.record(z.string()).optional().describe('Environment variables'),\n dataCenterIds: z\n .array(z.string())\n .optional()\n .describe('List of data centers'),\n },\n async (params) => {\n const result = await runpodRequest('/pods', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Pod\nserver.tool(\n 'update-pod',\n {\n podId: z.string().describe('ID of the pod to update'),\n name: z.string().optional().describe('New name for the pod'),\n imageName: z.string().optional().describe('New Docker image'),\n containerDiskInGb: z\n .number()\n .optional()\n .describe('New container disk size in GB'),\n volumeInGb: z.number().optional().describe('New volume size in GB'),\n volumeMountPath: z\n .string()\n .optional()\n .describe('New path to mount the volume'),\n ports: z.array(z.string()).optional().describe('New ports to expose'),\n env: z.record(z.string()).optional().describe('New environment variables'),\n },\n async (params) => {\n const { podId, ...updateParams } = params;\n const result = await runpodRequest(`/pods/${podId}`, 'PATCH', updateParams);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Start Pod\nserver.tool(\n 'start-pod',\n {\n podId: z.string().describe('ID of the pod to start'),\n },\n async (params) => {\n const result = await runpodRequest(`/pods/${params.podId}/start`, 'POST');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Stop Pod\nserver.tool(\n 'stop-pod',\n {\n podId: z.string().describe('ID of the pod to stop'),\n },\n async (params) => {\n const result = await runpodRequest(`/pods/${params.podId}/stop`, 'POST');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Pod\nserver.tool(\n 'delete-pod',\n {\n podId: z.string().describe('ID of the pod to delete'),\n },\n async (params) => {\n const result = await runpodRequest(`/pods/${params.podId}`, 'DELETE');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== ENDPOINT MANAGEMENT TOOLS ==============\n\n// List Endpoints\nserver.tool(\n 'list-endpoints',\n {\n includeTemplate: z\n .boolean()\n .optional()\n .describe('Include template information'),\n includeWorkers: z\n .boolean()\n .optional()\n .describe('Include information about workers'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.includeTemplate)\n queryParams.append('includeTemplate', params.includeTemplate.toString());\n if (params.includeWorkers)\n queryParams.append('includeWorkers', params.includeWorkers.toString());\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(`/endpoints${queryString}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Get Endpoint Details\nserver.tool(\n 'get-endpoint',\n {\n endpointId: z.string().describe('ID of the endpoint to retrieve'),\n includeTemplate: z\n .boolean()\n .optional()\n .describe('Include template information'),\n includeWorkers: z\n .boolean()\n .optional()\n .describe('Include information about workers'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.includeTemplate)\n queryParams.append('includeTemplate', params.includeTemplate.toString());\n if (params.includeWorkers)\n queryParams.append('includeWorkers', params.includeWorkers.toString());\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(\n `/endpoints/${params.endpointId}${queryString}`\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Endpoint\nserver.tool(\n 'create-endpoint',\n {\n name: z.string().optional().describe('Name for the endpoint'),\n templateId: z.string().describe('Template ID to use'),\n computeType: z\n .enum(['GPU', 'CPU'])\n .optional()\n .describe('GPU or CPU endpoint'),\n gpuTypeIds: z\n .array(z.string())\n .optional()\n .describe('List of acceptable GPU types'),\n gpuCount: z.number().optional().describe('Number of GPUs per worker'),\n workersMin: z.number().optional().describe('Minimum number of workers'),\n workersMax: z.number().optional().describe('Maximum number of workers'),\n dataCenterIds: z\n .array(z.string())\n .optional()\n .describe('List of data centers'),\n },\n async (params) => {\n const result = await runpodRequest('/endpoints', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Endpoint\nserver.tool(\n 'update-endpoint',\n {\n endpointId: z.string().describe('ID of the endpoint to update'),\n name: z.string().optional().describe('New name for the endpoint'),\n workersMin: z.number().optional().describe('New minimum number of workers'),\n workersMax: z.number().optional().describe('New maximum number of workers'),\n idleTimeout: z.number().optional().describe('New idle timeout in seconds'),\n scalerType: z\n .enum(['QUEUE_DELAY', 'REQUEST_COUNT'])\n .optional()\n .describe('Scaler type'),\n scalerValue: z.number().optional().describe('Scaler value'),\n },\n async (params) => {\n const { endpointId, ...updateParams } = params;\n const result = await runpodRequest(\n `/endpoints/${endpointId}`,\n 'PATCH',\n updateParams\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Endpoint\nserver.tool(\n 'delete-endpoint',\n {\n endpointId: z.string().describe('ID of the endpoint to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/endpoints/${params.endpointId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== TEMPLATE MANAGEMENT TOOLS ==============\n\n// List Templates\nserver.tool('list-templates', {}, async () => {\n const result = await runpodRequest('/templates');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n});\n\n// Get Template Details\nserver.tool(\n 'get-template',\n {\n templateId: z.string().describe('ID of the template to retrieve'),\n },\n async (params) => {\n const result = await runpodRequest(`/templates/${params.templateId}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Template\nserver.tool(\n 'create-template',\n {\n name: z.string().describe('Name for the template'),\n imageName: z.string().describe('Docker image to use'),\n isServerless: z\n .boolean()\n .optional()\n .describe('Is this a serverless template'),\n ports: z.array(z.string()).optional().describe('Ports to expose'),\n dockerEntrypoint: z\n .array(z.string())\n .optional()\n .describe('Docker entrypoint commands'),\n dockerStartCmd: z\n .array(z.string())\n .optional()\n .describe('Docker start commands'),\n env: z.record(z.string()).optional().describe('Environment variables'),\n containerDiskInGb: z\n .number()\n .optional()\n .describe('Container disk size in GB'),\n volumeInGb: z.number().optional().describe('Volume size in GB'),\n volumeMountPath: z.string().optional().describe('Path to mount the volume'),\n readme: z.string().optional().describe('README content in markdown format'),\n },\n async (params) => {\n const result = await runpodRequest('/templates', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Template\nserver.tool(\n 'update-template',\n {\n templateId: z.string().describe('ID of the template to update'),\n name: z.string().optional().describe('New name for the template'),\n imageName: z.string().optional().describe('New Docker image'),\n ports: z.array(z.string()).optional().describe('New ports to expose'),\n env: z.record(z.string()).optional().describe('New environment variables'),\n readme: z\n .string()\n .optional()\n .describe('New README content in markdown format'),\n },\n async (params) => {\n const { templateId, ...updateParams } = params;\n const result = await runpodRequest(\n `/templates/${templateId}`,\n 'PATCH',\n updateParams\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Template\nserver.tool(\n 'delete-template',\n {\n templateId: z.string().describe('ID of the template to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/templates/${params.templateId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== NETWORK VOLUME MANAGEMENT TOOLS ==============\n\n// List Network Volumes\nserver.tool('list-network-volumes', {}, async () => {\n const result = await runpodRequest('/networkvolumes');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n});\n\n// Get Network Volume Details\nserver.tool(\n 'get-network-volume',\n {\n networkVolumeId: z\n .string()\n .describe('ID of the network volume to retrieve'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/networkvolumes/${params.networkVolumeId}`\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Network Volume\nserver.tool(\n 'create-network-volume',\n {\n name: z.string().describe('Name for the network volume'),\n size: z.number().describe('Size in GB (1-4000)'),\n dataCenterId: z.string().describe('Data center ID'),\n },\n async (params) => {\n const result = await runpodRequest('/networkvolumes', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Network Volume\nserver.tool(\n 'update-network-volume',\n {\n networkVolumeId: z.string().describe('ID of the network volume to update'),\n name: z.string().optional().describe('New name for the network volume'),\n size: z\n .number()\n .optional()\n .describe('New size in GB (must be larger than current)'),\n },\n async (params) => {\n const { networkVolumeId, ...updateParams } = params;\n const result = await runpodRequest(\n `/networkvolumes/${networkVolumeId}`,\n 'PATCH',\n updateParams\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Network Volume\nserver.tool(\n 'delete-network-volume',\n {\n networkVolumeId: z.string().describe('ID of the network volume to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/networkvolumes/${params.networkVolumeId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== CONTAINER REGISTRY AUTH TOOLS ==============\n\n// List Container Registry Auths\nserver.tool('list-container-registry-auths', {}, async () => {\n const result = await runpodRequest('/containerregistryauth');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n});\n\n// Get Container Registry Auth Details\nserver.tool(\n 'get-container-registry-auth',\n {\n containerRegistryAuthId: z\n .string()\n .describe('ID of the container registry auth to retrieve'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/containerregistryauth/${params.containerRegistryAuthId}`\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Container Registry Auth\nserver.tool(\n 'create-container-registry-auth',\n {\n name: z.string().describe('Name for the container registry auth'),\n username: z.string().describe('Registry username'),\n password: z.string().describe('Registry password'),\n },\n async (params) => {\n const result = await runpodRequest(\n '/containerregistryauth',\n 'POST',\n params\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Container Registry Auth\nserver.tool(\n 'delete-container-registry-auth',\n {\n containerRegistryAuthId: z\n .string()\n .describe('ID of the container registry auth to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/containerregistryauth/${params.containerRegistryAuthId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Start receiving messages on stdin and sending messages on stdout\nconst transport = new StdioServerTransport();\nserver.connect(transport);\n"],"mappings":"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","names":["fetch"]}
|
package/dist/index.mjs
CHANGED
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport fetch, { type RequestInit as NodeFetchRequestInit } from 'node-fetch';\n\n// Base URL for RunPod API\nconst API_BASE_URL = 'https://rest.runpod.io/v1';\n\n// Get API key from environment variable\nconst API_KEY = process.env.RUNPOD_API_KEY;\nif (!API_KEY) {\n console.error('RUNPOD_API_KEY environment variable is required');\n process.exit(1);\n}\n\n// Create an MCP server\nconst server = new McpServer({\n name: 'RunPod API Server',\n version: '1.0.0',\n capabilities: {\n resources: {},\n tools: {},\n },\n});\n\n// Helper function to make authenticated API requests to RunPod\nasync function runpodRequest(\n endpoint: string,\n method: string = 'GET',\n body?: Record<string, unknown>\n) {\n const url = `${API_BASE_URL}${endpoint}`;\n const headers = {\n Authorization: `Bearer ${API_KEY}`,\n 'Content-Type': 'application/json',\n };\n\n const options: NodeFetchRequestInit = {\n method,\n headers,\n };\n\n if (body && (method === 'POST' || method === 'PATCH')) {\n options.body = JSON.stringify(body);\n }\n\n try {\n const response = await fetch(url, options);\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`RunPod API Error: ${response.status} - ${errorText}`);\n }\n\n // Some endpoints might not return JSON\n const contentType = response.headers.get('content-type');\n if (contentType && contentType.includes('application/json')) {\n return await response.json();\n }\n\n return { success: true, status: response.status };\n } catch (error) {\n console.error('Error calling RunPod API:', error);\n throw error;\n }\n}\n\n// ============== POD MANAGEMENT TOOLS ==============\n\n// List Pods\nserver.tool(\n 'list-pods',\n {\n computeType: z\n .enum(['GPU', 'CPU'])\n .optional()\n .describe('Filter to only GPU or only CPU Pods'),\n gpuTypeId: z\n .array(z.string())\n .optional()\n .describe('Filter to Pods with any of the listed GPU types'),\n dataCenterId: z\n .array(z.string())\n .optional()\n .describe('Filter to Pods in any of the provided data centers'),\n name: z\n .string()\n .optional()\n .describe('Filter to Pods with the provided name'),\n includeMachine: z\n .boolean()\n .optional()\n .describe('Include information about the machine'),\n includeNetworkVolume: z\n .boolean()\n .optional()\n .describe('Include information about attached network volumes'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.computeType)\n queryParams.append('computeType', params.computeType);\n if (params.gpuTypeId)\n params.gpuTypeId.forEach((type) => queryParams.append('gpuTypeId', type));\n if (params.dataCenterId)\n params.dataCenterId.forEach((dc) =>\n queryParams.append('dataCenterId', dc)\n );\n if (params.name) queryParams.append('name', params.name);\n if (params.includeMachine)\n queryParams.append('includeMachine', params.includeMachine.toString());\n if (params.includeNetworkVolume)\n queryParams.append(\n 'includeNetworkVolume',\n params.includeNetworkVolume.toString()\n );\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(`/pods${queryString}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Get Pod Details\nserver.tool(\n 'get-pod',\n {\n podId: z.string().describe('ID of the pod to retrieve'),\n includeMachine: z\n .boolean()\n .optional()\n .describe('Include information about the machine'),\n includeNetworkVolume: z\n .boolean()\n .optional()\n .describe('Include information about attached network volumes'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.includeMachine)\n queryParams.append('includeMachine', params.includeMachine.toString());\n if (params.includeNetworkVolume)\n queryParams.append(\n 'includeNetworkVolume',\n params.includeNetworkVolume.toString()\n );\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(`/pods/${params.podId}${queryString}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Pod\nserver.tool(\n 'create-pod',\n {\n name: z.string().optional().describe('Name for the pod'),\n imageName: z.string().describe('Docker image to use'),\n cloudType: z\n .enum(['SECURE', 'COMMUNITY'])\n .optional()\n .describe('SECURE or COMMUNITY cloud'),\n gpuTypeIds: z\n .array(z.string())\n .optional()\n .describe('List of acceptable GPU types'),\n gpuCount: z.number().optional().describe('Number of GPUs'),\n containerDiskInGb: z\n .number()\n .optional()\n .describe('Container disk size in GB'),\n volumeInGb: z.number().optional().describe('Volume size in GB'),\n volumeMountPath: z.string().optional().describe('Path to mount the volume'),\n ports: z\n .array(z.string())\n .optional()\n .describe(\"Ports to expose (e.g., '8888/http', '22/tcp')\"),\n env: z.record(z.string()).optional().describe('Environment variables'),\n dataCenterIds: z\n .array(z.string())\n .optional()\n .describe('List of data centers'),\n },\n async (params) => {\n const result = await runpodRequest('/pods', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Pod\nserver.tool(\n 'update-pod',\n {\n podId: z.string().describe('ID of the pod to update'),\n name: z.string().optional().describe('New name for the pod'),\n imageName: z.string().optional().describe('New Docker image'),\n containerDiskInGb: z\n .number()\n .optional()\n .describe('New container disk size in GB'),\n volumeInGb: z.number().optional().describe('New volume size in GB'),\n volumeMountPath: z\n .string()\n .optional()\n .describe('New path to mount the volume'),\n ports: z.array(z.string()).optional().describe('New ports to expose'),\n env: z.record(z.string()).optional().describe('New environment variables'),\n },\n async (params) => {\n const { podId, ...updateParams } = params;\n const result = await runpodRequest(`/pods/${podId}`, 'PATCH', updateParams);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Start Pod\nserver.tool(\n 'start-pod',\n {\n podId: z.string().describe('ID of the pod to start'),\n },\n async (params) => {\n const result = await runpodRequest(`/pods/${params.podId}/start`, 'POST');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Stop Pod\nserver.tool(\n 'stop-pod',\n {\n podId: z.string().describe('ID of the pod to stop'),\n },\n async (params) => {\n const result = await runpodRequest(`/pods/${params.podId}/stop`, 'POST');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Pod\nserver.tool(\n 'delete-pod',\n {\n podId: z.string().describe('ID of the pod to delete'),\n },\n async (params) => {\n const result = await runpodRequest(`/pods/${params.podId}`, 'DELETE');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== ENDPOINT MANAGEMENT TOOLS ==============\n\n// List Endpoints\nserver.tool(\n 'list-endpoints',\n {\n includeTemplate: z\n .boolean()\n .optional()\n .describe('Include template information'),\n includeWorkers: z\n .boolean()\n .optional()\n .describe('Include information about workers'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.includeTemplate)\n queryParams.append('includeTemplate', params.includeTemplate.toString());\n if (params.includeWorkers)\n queryParams.append('includeWorkers', params.includeWorkers.toString());\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(`/endpoints${queryString}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Get Endpoint Details\nserver.tool(\n 'get-endpoint',\n {\n endpointId: z.string().describe('ID of the endpoint to retrieve'),\n includeTemplate: z\n .boolean()\n .optional()\n .describe('Include template information'),\n includeWorkers: z\n .boolean()\n .optional()\n .describe('Include information about workers'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.includeTemplate)\n queryParams.append('includeTemplate', params.includeTemplate.toString());\n if (params.includeWorkers)\n queryParams.append('includeWorkers', params.includeWorkers.toString());\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(\n `/endpoints/${params.endpointId}${queryString}`\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Endpoint\nserver.tool(\n 'create-endpoint',\n {\n name: z.string().optional().describe('Name for the endpoint'),\n templateId: z.string().describe('Template ID to use'),\n computeType: z\n .enum(['GPU', 'CPU'])\n .optional()\n .describe('GPU or CPU endpoint'),\n gpuTypeIds: z\n .array(z.string())\n .optional()\n .describe('List of acceptable GPU types'),\n gpuCount: z.number().optional().describe('Number of GPUs per worker'),\n workersMin: z.number().optional().describe('Minimum number of workers'),\n workersMax: z.number().optional().describe('Maximum number of workers'),\n dataCenterIds: z\n .array(z.string())\n .optional()\n .describe('List of data centers'),\n },\n async (params) => {\n const result = await runpodRequest('/endpoints', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Endpoint\nserver.tool(\n 'update-endpoint',\n {\n endpointId: z.string().describe('ID of the endpoint to update'),\n name: z.string().optional().describe('New name for the endpoint'),\n workersMin: z.number().optional().describe('New minimum number of workers'),\n workersMax: z.number().optional().describe('New maximum number of workers'),\n idleTimeout: z.number().optional().describe('New idle timeout in seconds'),\n scalerType: z\n .enum(['QUEUE_DELAY', 'REQUEST_COUNT'])\n .optional()\n .describe('Scaler type'),\n scalerValue: z.number().optional().describe('Scaler value'),\n },\n async (params) => {\n const { endpointId, ...updateParams } = params;\n const result = await runpodRequest(\n `/endpoints/${endpointId}`,\n 'PATCH',\n updateParams\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Endpoint\nserver.tool(\n 'delete-endpoint',\n {\n endpointId: z.string().describe('ID of the endpoint to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/endpoints/${params.endpointId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== TEMPLATE MANAGEMENT TOOLS ==============\n\n// List Templates\nserver.tool('list-templates', {}, async () => {\n const result = await runpodRequest('/templates');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n});\n\n// Get Template Details\nserver.tool(\n 'get-template',\n {\n templateId: z.string().describe('ID of the template to retrieve'),\n },\n async (params) => {\n const result = await runpodRequest(`/templates/${params.templateId}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Template\nserver.tool(\n 'create-template',\n {\n name: z.string().describe('Name for the template'),\n imageName: z.string().describe('Docker image to use'),\n isServerless: z\n .boolean()\n .optional()\n .describe('Is this a serverless template'),\n ports: z.array(z.string()).optional().describe('Ports to expose'),\n dockerEntrypoint: z\n .array(z.string())\n .optional()\n .describe('Docker entrypoint commands'),\n dockerStartCmd: z\n .array(z.string())\n .optional()\n .describe('Docker start commands'),\n env: z.record(z.string()).optional().describe('Environment variables'),\n containerDiskInGb: z\n .number()\n .optional()\n .describe('Container disk size in GB'),\n volumeInGb: z.number().optional().describe('Volume size in GB'),\n volumeMountPath: z.string().optional().describe('Path to mount the volume'),\n readme: z.string().optional().describe('README content in markdown format'),\n },\n async (params) => {\n const result = await runpodRequest('/templates', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Template\nserver.tool(\n 'update-template',\n {\n templateId: z.string().describe('ID of the template to update'),\n name: z.string().optional().describe('New name for the template'),\n imageName: z.string().optional().describe('New Docker image'),\n ports: z.array(z.string()).optional().describe('New ports to expose'),\n env: z.record(z.string()).optional().describe('New environment variables'),\n readme: z\n .string()\n .optional()\n .describe('New README content in markdown format'),\n },\n async (params) => {\n const { templateId, ...updateParams } = params;\n const result = await runpodRequest(\n `/templates/${templateId}`,\n 'PATCH',\n updateParams\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Template\nserver.tool(\n 'delete-template',\n {\n templateId: z.string().describe('ID of the template to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/templates/${params.templateId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== NETWORK VOLUME MANAGEMENT TOOLS ==============\n\n// List Network Volumes\nserver.tool('list-network-volumes', {}, async () => {\n const result = await runpodRequest('/networkvolumes');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n});\n\n// Get Network Volume Details\nserver.tool(\n 'get-network-volume',\n {\n networkVolumeId: z\n .string()\n .describe('ID of the network volume to retrieve'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/networkvolumes/${params.networkVolumeId}`\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Network Volume\nserver.tool(\n 'create-network-volume',\n {\n name: z.string().describe('Name for the network volume'),\n size: z.number().describe('Size in GB (1-4000)'),\n dataCenterId: z.string().describe('Data center ID'),\n },\n async (params) => {\n const result = await runpodRequest('/networkvolumes', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Network Volume\nserver.tool(\n 'update-network-volume',\n {\n networkVolumeId: z.string().describe('ID of the network volume to update'),\n name: z.string().optional().describe('New name for the network volume'),\n size: z\n .number()\n .optional()\n .describe('New size in GB (must be larger than current)'),\n },\n async (params) => {\n const { networkVolumeId, ...updateParams } = params;\n const result = await runpodRequest(\n `/networkvolumes/${networkVolumeId}`,\n 'PATCH',\n updateParams\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Network Volume\nserver.tool(\n 'delete-network-volume',\n {\n networkVolumeId: z.string().describe('ID of the network volume to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/networkvolumes/${params.networkVolumeId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== CONTAINER REGISTRY AUTH TOOLS ==============\n\n// List Container Registry Auths\nserver.tool('list-container-registry-auths', {}, async () => {\n const result = await runpodRequest('/containerregistryauth');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n});\n\n// Get Container Registry Auth Details\nserver.tool(\n 'get-container-registry-auth',\n {\n containerRegistryAuthId: z\n .string()\n .describe('ID of the container registry auth to retrieve'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/containerregistryauth/${params.containerRegistryAuthId}`\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Container Registry Auth\nserver.tool(\n 'create-container-registry-auth',\n {\n name: z.string().describe('Name for the container registry auth'),\n username: z.string().describe('Registry username'),\n password: z.string().describe('Registry password'),\n },\n async (params) => {\n const result = await runpodRequest(\n '/containerregistryauth',\n 'POST',\n params\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Container Registry Auth\nserver.tool(\n 'delete-container-registry-auth',\n {\n containerRegistryAuthId: z\n .string()\n .describe('ID of the container registry auth to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/containerregistryauth/${params.containerRegistryAuthId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Start receiving messages on stdin and sending messages on stdout\nconst transport = new StdioServerTransport();\nserver.connect(transport);\n"],"mappings":";AAAA,SAAS,iBAAiB;AAC1B,SAAS,4BAA4B;AACrC,SAAS,SAAS;AAClB,OAAO,WAAyD;AAGhE,IAAM,eAAe;AAGrB,IAAM,UAAU,QAAQ,IAAI;AAC5B,IAAI,CAAC,SAAS;AACZ,UAAQ,MAAM,iDAAiD;AAC/D,UAAQ,KAAK,CAAC;AAChB;AAGA,IAAM,SAAS,IAAI,UAAU;AAAA,EAC3B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,cAAc;AAAA,IACZ,WAAW,CAAC;AAAA,IACZ,OAAO,CAAC;AAAA,EACV;AACF,CAAC;AAGD,eAAe,cACb,UACA,SAAiB,OACjB,MACA;AACA,QAAM,MAAM,GAAG,YAAY,GAAG,QAAQ;AACtC,QAAM,UAAU;AAAA,IACd,eAAe,UAAU,OAAO;AAAA,IAChC,gBAAgB;AAAA,EAClB;AAEA,QAAM,UAAgC;AAAA,IACpC;AAAA,IACA;AAAA,EACF;AAEA,MAAI,SAAS,WAAW,UAAU,WAAW,UAAU;AACrD,YAAQ,OAAO,KAAK,UAAU,IAAI;AAAA,EACpC;AAEA,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,KAAK,OAAO;AAEzC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAY,MAAM,SAAS,KAAK;AACtC,YAAM,IAAI,MAAM,qBAAqB,SAAS,MAAM,MAAM,SAAS,EAAE;AAAA,IACvE;AAGA,UAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AACvD,QAAI,eAAe,YAAY,SAAS,kBAAkB,GAAG;AAC3D,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B;AAEA,WAAO,EAAE,SAAS,MAAM,QAAQ,SAAS,OAAO;AAAA,EAClD,SAAS,OAAO;AACd,YAAQ,MAAM,6BAA6B,KAAK;AAChD,UAAM;AAAA,EACR;AACF;AAKA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,aAAa,EACV,KAAK,CAAC,OAAO,KAAK,CAAC,EACnB,SAAS,EACT,SAAS,qCAAqC;AAAA,IACjD,WAAW,EACR,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,iDAAiD;AAAA,IAC7D,cAAc,EACX,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,oDAAoD;AAAA,IAChE,MAAM,EACH,OAAO,EACP,SAAS,EACT,SAAS,uCAAuC;AAAA,IACnD,gBAAgB,EACb,QAAQ,EACR,SAAS,EACT,SAAS,uCAAuC;AAAA,IACnD,sBAAsB,EACnB,QAAQ,EACR,SAAS,EACT,SAAS,oDAAoD;AAAA,EAClE;AAAA,EACA,OAAO,WAAW;AAEhB,UAAM,cAAc,IAAI,gBAAgB;AAExC,QAAI,OAAO;AACT,kBAAY,OAAO,eAAe,OAAO,WAAW;AACtD,QAAI,OAAO;AACT,aAAO,UAAU,QAAQ,CAAC,SAAS,YAAY,OAAO,aAAa,IAAI,CAAC;AAC1E,QAAI,OAAO;AACT,aAAO,aAAa;AAAA,QAAQ,CAAC,OAC3B,YAAY,OAAO,gBAAgB,EAAE;AAAA,MACvC;AACF,QAAI,OAAO,KAAM,aAAY,OAAO,QAAQ,OAAO,IAAI;AACvD,QAAI,OAAO;AACT,kBAAY,OAAO,kBAAkB,OAAO,eAAe,SAAS,CAAC;AACvE,QAAI,OAAO;AACT,kBAAY;AAAA,QACV;AAAA,QACA,OAAO,qBAAqB,SAAS;AAAA,MACvC;AAEF,UAAM,cAAc,YAAY,SAAS,IACrC,IAAI,YAAY,SAAS,CAAC,KAC1B;AACJ,UAAM,SAAS,MAAM,cAAc,QAAQ,WAAW,EAAE;AAExD,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,OAAO,EAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,IACtD,gBAAgB,EACb,QAAQ,EACR,SAAS,EACT,SAAS,uCAAuC;AAAA,IACnD,sBAAsB,EACnB,QAAQ,EACR,SAAS,EACT,SAAS,oDAAoD;AAAA,EAClE;AAAA,EACA,OAAO,WAAW;AAEhB,UAAM,cAAc,IAAI,gBAAgB;AAExC,QAAI,OAAO;AACT,kBAAY,OAAO,kBAAkB,OAAO,eAAe,SAAS,CAAC;AACvE,QAAI,OAAO;AACT,kBAAY;AAAA,QACV;AAAA,QACA,OAAO,qBAAqB,SAAS;AAAA,MACvC;AAEF,UAAM,cAAc,YAAY,SAAS,IACrC,IAAI,YAAY,SAAS,CAAC,KAC1B;AACJ,UAAM,SAAS,MAAM,cAAc,SAAS,OAAO,KAAK,GAAG,WAAW,EAAE;AAExE,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kBAAkB;AAAA,IACvD,WAAW,EAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,IACpD,WAAW,EACR,KAAK,CAAC,UAAU,WAAW,CAAC,EAC5B,SAAS,EACT,SAAS,2BAA2B;AAAA,IACvC,YAAY,EACT,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,8BAA8B;AAAA,IAC1C,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gBAAgB;AAAA,IACzD,mBAAmB,EAChB,OAAO,EACP,SAAS,EACT,SAAS,2BAA2B;AAAA,IACvC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAAA,IAC9D,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,0BAA0B;AAAA,IAC1E,OAAO,EACJ,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,+CAA+C;AAAA,IAC3D,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,IACrE,eAAe,EACZ,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,SAAS,QAAQ,MAAM;AAE1D,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,OAAO,EAAE,OAAO,EAAE,SAAS,yBAAyB;AAAA,IACpD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,sBAAsB;AAAA,IAC3D,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kBAAkB;AAAA,IAC5D,mBAAmB,EAChB,OAAO,EACP,SAAS,EACT,SAAS,+BAA+B;AAAA,IAC3C,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,IAClE,iBAAiB,EACd,OAAO,EACP,SAAS,EACT,SAAS,8BAA8B;AAAA,IAC1C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,qBAAqB;AAAA,IACpE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,EAC3E;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,EAAE,OAAO,GAAG,aAAa,IAAI;AACnC,UAAM,SAAS,MAAM,cAAc,SAAS,KAAK,IAAI,SAAS,YAAY;AAE1E,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,OAAO,EAAE,OAAO,EAAE,SAAS,wBAAwB;AAAA,EACrD;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,SAAS,OAAO,KAAK,UAAU,MAAM;AAExE,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,OAAO,EAAE,OAAO,EAAE,SAAS,uBAAuB;AAAA,EACpD;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,SAAS,OAAO,KAAK,SAAS,MAAM;AAEvE,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,OAAO,EAAE,OAAO,EAAE,SAAS,yBAAyB;AAAA,EACtD;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,SAAS,OAAO,KAAK,IAAI,QAAQ;AAEpE,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAKA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,iBAAiB,EACd,QAAQ,EACR,SAAS,EACT,SAAS,8BAA8B;AAAA,IAC1C,gBAAgB,EACb,QAAQ,EACR,SAAS,EACT,SAAS,mCAAmC;AAAA,EACjD;AAAA,EACA,OAAO,WAAW;AAEhB,UAAM,cAAc,IAAI,gBAAgB;AAExC,QAAI,OAAO;AACT,kBAAY,OAAO,mBAAmB,OAAO,gBAAgB,SAAS,CAAC;AACzE,QAAI,OAAO;AACT,kBAAY,OAAO,kBAAkB,OAAO,eAAe,SAAS,CAAC;AAEvE,UAAM,cAAc,YAAY,SAAS,IACrC,IAAI,YAAY,SAAS,CAAC,KAC1B;AACJ,UAAM,SAAS,MAAM,cAAc,aAAa,WAAW,EAAE;AAE7D,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,YAAY,EAAE,OAAO,EAAE,SAAS,gCAAgC;AAAA,IAChE,iBAAiB,EACd,QAAQ,EACR,SAAS,EACT,SAAS,8BAA8B;AAAA,IAC1C,gBAAgB,EACb,QAAQ,EACR,SAAS,EACT,SAAS,mCAAmC;AAAA,EACjD;AAAA,EACA,OAAO,WAAW;AAEhB,UAAM,cAAc,IAAI,gBAAgB;AAExC,QAAI,OAAO;AACT,kBAAY,OAAO,mBAAmB,OAAO,gBAAgB,SAAS,CAAC;AACzE,QAAI,OAAO;AACT,kBAAY,OAAO,kBAAkB,OAAO,eAAe,SAAS,CAAC;AAEvE,UAAM,cAAc,YAAY,SAAS,IACrC,IAAI,YAAY,SAAS,CAAC,KAC1B;AACJ,UAAM,SAAS,MAAM;AAAA,MACnB,cAAc,OAAO,UAAU,GAAG,WAAW;AAAA,IAC/C;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,IAC5D,YAAY,EAAE,OAAO,EAAE,SAAS,oBAAoB;AAAA,IACpD,aAAa,EACV,KAAK,CAAC,OAAO,KAAK,CAAC,EACnB,SAAS,EACT,SAAS,qBAAqB;AAAA,IACjC,YAAY,EACT,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,8BAA8B;AAAA,IAC1C,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,IACpE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,IACtE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,IACtE,eAAe,EACZ,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,cAAc,QAAQ,MAAM;AAE/D,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,YAAY,EAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,IAC9D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,IAChE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,+BAA+B;AAAA,IAC1E,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,+BAA+B;AAAA,IAC1E,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,6BAA6B;AAAA,IACzE,YAAY,EACT,KAAK,CAAC,eAAe,eAAe,CAAC,EACrC,SAAS,EACT,SAAS,aAAa;AAAA,IACzB,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,cAAc;AAAA,EAC5D;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,EAAE,YAAY,GAAG,aAAa,IAAI;AACxC,UAAM,SAAS,MAAM;AAAA,MACnB,cAAc,UAAU;AAAA,MACxB;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,YAAY,EAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,EAChE;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM;AAAA,MACnB,cAAc,OAAO,UAAU;AAAA,MAC/B;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAKA,OAAO,KAAK,kBAAkB,CAAC,GAAG,YAAY;AAC5C,QAAM,SAAS,MAAM,cAAc,YAAY;AAE/C,SAAO;AAAA,IACL,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAGD,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,YAAY,EAAE,OAAO,EAAE,SAAS,gCAAgC;AAAA,EAClE;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,cAAc,OAAO,UAAU,EAAE;AAEpE,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,MAAM,EAAE,OAAO,EAAE,SAAS,uBAAuB;AAAA,IACjD,WAAW,EAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,IACpD,cAAc,EACX,QAAQ,EACR,SAAS,EACT,SAAS,+BAA+B;AAAA,IAC3C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,iBAAiB;AAAA,IAChE,kBAAkB,EACf,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,4BAA4B;AAAA,IACxC,gBAAgB,EACb,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,uBAAuB;AAAA,IACnC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,IACrE,mBAAmB,EAChB,OAAO,EACP,SAAS,EACT,SAAS,2BAA2B;AAAA,IACvC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAAA,IAC9D,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,0BAA0B;AAAA,IAC1E,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mCAAmC;AAAA,EAC5E;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,cAAc,QAAQ,MAAM;AAE/D,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,YAAY,EAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,IAC9D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,IAChE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kBAAkB;AAAA,IAC5D,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,qBAAqB;AAAA,IACpE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,IACzE,QAAQ,EACL,OAAO,EACP,SAAS,EACT,SAAS,uCAAuC;AAAA,EACrD;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,EAAE,YAAY,GAAG,aAAa,IAAI;AACxC,UAAM,SAAS,MAAM;AAAA,MACnB,cAAc,UAAU;AAAA,MACxB;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,YAAY,EAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,EAChE;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM;AAAA,MACnB,cAAc,OAAO,UAAU;AAAA,MAC/B;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAKA,OAAO,KAAK,wBAAwB,CAAC,GAAG,YAAY;AAClD,QAAM,SAAS,MAAM,cAAc,iBAAiB;AAEpD,SAAO;AAAA,IACL,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAGD,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,iBAAiB,EACd,OAAO,EACP,SAAS,sCAAsC;AAAA,EACpD;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM;AAAA,MACnB,mBAAmB,OAAO,eAAe;AAAA,IAC3C;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,MAAM,EAAE,OAAO,EAAE,SAAS,6BAA6B;AAAA,IACvD,MAAM,EAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,IAC/C,cAAc,EAAE,OAAO,EAAE,SAAS,gBAAgB;AAAA,EACpD;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,mBAAmB,QAAQ,MAAM;AAEpE,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,iBAAiB,EAAE,OAAO,EAAE,SAAS,oCAAoC;AAAA,IACzE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,iCAAiC;AAAA,IACtE,MAAM,EACH,OAAO,EACP,SAAS,EACT,SAAS,8CAA8C;AAAA,EAC5D;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,EAAE,iBAAiB,GAAG,aAAa,IAAI;AAC7C,UAAM,SAAS,MAAM;AAAA,MACnB,mBAAmB,eAAe;AAAA,MAClC;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,iBAAiB,EAAE,OAAO,EAAE,SAAS,oCAAoC;AAAA,EAC3E;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM;AAAA,MACnB,mBAAmB,OAAO,eAAe;AAAA,MACzC;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAKA,OAAO,KAAK,iCAAiC,CAAC,GAAG,YAAY;AAC3D,QAAM,SAAS,MAAM,cAAc,wBAAwB;AAE3D,SAAO;AAAA,IACL,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAGD,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,yBAAyB,EACtB,OAAO,EACP,SAAS,+CAA+C;AAAA,EAC7D;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM;AAAA,MACnB,0BAA0B,OAAO,uBAAuB;AAAA,IAC1D;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,MAAM,EAAE,OAAO,EAAE,SAAS,sCAAsC;AAAA,IAChE,UAAU,EAAE,OAAO,EAAE,SAAS,mBAAmB;AAAA,IACjD,UAAU,EAAE,OAAO,EAAE,SAAS,mBAAmB;AAAA,EACnD;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,yBAAyB,EACtB,OAAO,EACP,SAAS,6CAA6C;AAAA,EAC3D;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM;AAAA,MACnB,0BAA0B,OAAO,uBAAuB;AAAA,MACxD;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,IAAM,YAAY,IAAI,qBAAqB;AAC3C,OAAO,QAAQ,SAAS;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport fetch, { type RequestInit as NodeFetchRequestInit } from 'node-fetch';\n\n// Base URL for RunPod API\nconst API_BASE_URL = 'https://rest.runpod.io/v1';\n\n// Get API key from environment variable\nconst API_KEY = process.env.RUNPOD_API_KEY;\nif (!API_KEY) {\n console.error('RUNPOD_API_KEY environment variable is required');\n process.exit(1);\n}\n\n// Create an MCP server\nconst server = new McpServer({\n name: 'RunPod API Server',\n version: '1.0.0',\n capabilities: {\n resources: {},\n tools: {},\n },\n});\n\n// Helper function to make authenticated API requests to RunPod\nasync function runpodRequest(\n endpoint: string,\n method: string = 'GET',\n body?: Record<string, unknown>\n) {\n const url = `${API_BASE_URL}${endpoint}`;\n const headers = {\n Authorization: `Bearer ${API_KEY}`,\n 'Content-Type': 'application/json',\n };\n\n const options: NodeFetchRequestInit = {\n method,\n headers,\n };\n\n if (body && (method === 'POST' || method === 'PATCH')) {\n options.body = JSON.stringify(body);\n }\n\n try {\n const response = await fetch(url, options);\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`RunPod API Error: ${response.status} - ${errorText}`);\n }\n\n // Some endpoints might not return JSON\n const contentType = response.headers.get('content-type');\n if (contentType && contentType.includes('application/json')) {\n return await response.json();\n }\n\n return { success: true, status: response.status };\n } catch (error) {\n console.error('Error calling RunPod API:', error);\n throw error;\n }\n}\n\n// ============== POD MANAGEMENT TOOLS ==============\n\n// List Pods\nserver.tool(\n 'list-pods',\n {\n computeType: z\n .enum(['GPU', 'CPU'])\n .optional()\n .describe('Filter to only GPU or only CPU Pods'),\n gpuTypeId: z\n .array(z.string())\n .optional()\n .describe('Filter to Pods with any of the listed GPU types'),\n dataCenterId: z\n .array(z.string())\n .optional()\n .describe('Filter to Pods in any of the provided data centers'),\n name: z\n .string()\n .optional()\n .describe('Filter to Pods with the provided name'),\n includeMachine: z\n .boolean()\n .optional()\n .describe('Include information about the machine'),\n includeNetworkVolume: z\n .boolean()\n .optional()\n .describe('Include information about attached network volumes'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.computeType)\n queryParams.append('computeType', params.computeType);\n if (params.gpuTypeId)\n params.gpuTypeId.forEach((type) => queryParams.append('gpuTypeId', type));\n if (params.dataCenterId)\n params.dataCenterId.forEach((dc) =>\n queryParams.append('dataCenterId', dc)\n );\n if (params.name) queryParams.append('name', params.name);\n if (params.includeMachine)\n queryParams.append('includeMachine', params.includeMachine.toString());\n if (params.includeNetworkVolume)\n queryParams.append(\n 'includeNetworkVolume',\n params.includeNetworkVolume.toString()\n );\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(`/pods${queryString}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Get Pod Details\nserver.tool(\n 'get-pod',\n {\n podId: z.string().describe('ID of the pod to retrieve'),\n includeMachine: z\n .boolean()\n .optional()\n .describe('Include information about the machine'),\n includeNetworkVolume: z\n .boolean()\n .optional()\n .describe('Include information about attached network volumes'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.includeMachine)\n queryParams.append('includeMachine', params.includeMachine.toString());\n if (params.includeNetworkVolume)\n queryParams.append(\n 'includeNetworkVolume',\n params.includeNetworkVolume.toString()\n );\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(`/pods/${params.podId}${queryString}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Pod\nserver.tool(\n 'create-pod',\n {\n name: z.string().optional().describe('Name for the pod'),\n imageName: z.string().describe('Docker image to use'),\n cloudType: z\n .enum(['SECURE', 'COMMUNITY'])\n .optional()\n .describe('SECURE or COMMUNITY cloud'),\n gpuTypeIds: z\n .array(z.string())\n .optional()\n .describe('List of acceptable GPU types'),\n gpuCount: z.number().optional().describe('Number of GPUs'),\n containerDiskInGb: z\n .number()\n .optional()\n .describe('Container disk size in GB'),\n volumeInGb: z.number().optional().describe('Volume size in GB'),\n volumeMountPath: z.string().optional().describe('Path to mount the volume'),\n ports: z\n .array(z.string())\n .optional()\n .describe(\"Ports to expose (e.g., '8888/http', '22/tcp')\"),\n env: z.record(z.string()).optional().describe('Environment variables'),\n dataCenterIds: z\n .array(z.string())\n .optional()\n .describe('List of data centers'),\n },\n async (params) => {\n const result = await runpodRequest('/pods', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Pod\nserver.tool(\n 'update-pod',\n {\n podId: z.string().describe('ID of the pod to update'),\n name: z.string().optional().describe('New name for the pod'),\n imageName: z.string().optional().describe('New Docker image'),\n containerDiskInGb: z\n .number()\n .optional()\n .describe('New container disk size in GB'),\n volumeInGb: z.number().optional().describe('New volume size in GB'),\n volumeMountPath: z\n .string()\n .optional()\n .describe('New path to mount the volume'),\n ports: z.array(z.string()).optional().describe('New ports to expose'),\n env: z.record(z.string()).optional().describe('New environment variables'),\n },\n async (params) => {\n const { podId, ...updateParams } = params;\n const result = await runpodRequest(`/pods/${podId}`, 'PATCH', updateParams);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Start Pod\nserver.tool(\n 'start-pod',\n {\n podId: z.string().describe('ID of the pod to start'),\n },\n async (params) => {\n const result = await runpodRequest(`/pods/${params.podId}/start`, 'POST');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Stop Pod\nserver.tool(\n 'stop-pod',\n {\n podId: z.string().describe('ID of the pod to stop'),\n },\n async (params) => {\n const result = await runpodRequest(`/pods/${params.podId}/stop`, 'POST');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Pod\nserver.tool(\n 'delete-pod',\n {\n podId: z.string().describe('ID of the pod to delete'),\n },\n async (params) => {\n const result = await runpodRequest(`/pods/${params.podId}`, 'DELETE');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== ENDPOINT MANAGEMENT TOOLS ==============\n\n// List Endpoints\nserver.tool(\n 'list-endpoints',\n {\n includeTemplate: z\n .boolean()\n .optional()\n .describe('Include template information'),\n includeWorkers: z\n .boolean()\n .optional()\n .describe('Include information about workers'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.includeTemplate)\n queryParams.append('includeTemplate', params.includeTemplate.toString());\n if (params.includeWorkers)\n queryParams.append('includeWorkers', params.includeWorkers.toString());\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(`/endpoints${queryString}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Get Endpoint Details\nserver.tool(\n 'get-endpoint',\n {\n endpointId: z.string().describe('ID of the endpoint to retrieve'),\n includeTemplate: z\n .boolean()\n .optional()\n .describe('Include template information'),\n includeWorkers: z\n .boolean()\n .optional()\n .describe('Include information about workers'),\n },\n async (params) => {\n // Construct query parameters\n const queryParams = new URLSearchParams();\n\n if (params.includeTemplate)\n queryParams.append('includeTemplate', params.includeTemplate.toString());\n if (params.includeWorkers)\n queryParams.append('includeWorkers', params.includeWorkers.toString());\n\n const queryString = queryParams.toString()\n ? `?${queryParams.toString()}`\n : '';\n const result = await runpodRequest(\n `/endpoints/${params.endpointId}${queryString}`\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Endpoint\nserver.tool(\n 'create-endpoint',\n {\n name: z.string().optional().describe('Name for the endpoint'),\n templateId: z.string().describe('Template ID to use'),\n computeType: z\n .enum(['GPU', 'CPU'])\n .optional()\n .describe('GPU or CPU endpoint'),\n gpuTypeIds: z\n .array(z.string())\n .optional()\n .describe('List of acceptable GPU types'),\n gpuCount: z.number().optional().describe('Number of GPUs per worker'),\n workersMin: z.number().optional().describe('Minimum number of workers'),\n workersMax: z.number().optional().describe('Maximum number of workers'),\n dataCenterIds: z\n .array(z.string())\n .optional()\n .describe('List of data centers'),\n },\n async (params) => {\n const result = await runpodRequest('/endpoints', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Endpoint\nserver.tool(\n 'update-endpoint',\n {\n endpointId: z.string().describe('ID of the endpoint to update'),\n name: z.string().optional().describe('New name for the endpoint'),\n workersMin: z.number().optional().describe('New minimum number of workers'),\n workersMax: z.number().optional().describe('New maximum number of workers'),\n idleTimeout: z.number().optional().describe('New idle timeout in seconds'),\n scalerType: z\n .enum(['QUEUE_DELAY', 'REQUEST_COUNT'])\n .optional()\n .describe('Scaler type'),\n scalerValue: z.number().optional().describe('Scaler value'),\n },\n async (params) => {\n const { endpointId, ...updateParams } = params;\n const result = await runpodRequest(\n `/endpoints/${endpointId}`,\n 'PATCH',\n updateParams\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Endpoint\nserver.tool(\n 'delete-endpoint',\n {\n endpointId: z.string().describe('ID of the endpoint to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/endpoints/${params.endpointId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== TEMPLATE MANAGEMENT TOOLS ==============\n\n// List Templates\nserver.tool('list-templates', {}, async () => {\n const result = await runpodRequest('/templates');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n});\n\n// Get Template Details\nserver.tool(\n 'get-template',\n {\n templateId: z.string().describe('ID of the template to retrieve'),\n },\n async (params) => {\n const result = await runpodRequest(`/templates/${params.templateId}`);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Template\nserver.tool(\n 'create-template',\n {\n name: z.string().describe('Name for the template'),\n imageName: z.string().describe('Docker image to use'),\n isServerless: z\n .boolean()\n .optional()\n .describe('Is this a serverless template'),\n ports: z.array(z.string()).optional().describe('Ports to expose'),\n dockerEntrypoint: z\n .array(z.string())\n .optional()\n .describe('Docker entrypoint commands'),\n dockerStartCmd: z\n .array(z.string())\n .optional()\n .describe('Docker start commands'),\n env: z.record(z.string()).optional().describe('Environment variables'),\n containerDiskInGb: z\n .number()\n .optional()\n .describe('Container disk size in GB'),\n volumeInGb: z.number().optional().describe('Volume size in GB'),\n volumeMountPath: z.string().optional().describe('Path to mount the volume'),\n readme: z.string().optional().describe('README content in markdown format'),\n },\n async (params) => {\n const result = await runpodRequest('/templates', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Template\nserver.tool(\n 'update-template',\n {\n templateId: z.string().describe('ID of the template to update'),\n name: z.string().optional().describe('New name for the template'),\n imageName: z.string().optional().describe('New Docker image'),\n ports: z.array(z.string()).optional().describe('New ports to expose'),\n env: z.record(z.string()).optional().describe('New environment variables'),\n readme: z\n .string()\n .optional()\n .describe('New README content in markdown format'),\n },\n async (params) => {\n const { templateId, ...updateParams } = params;\n const result = await runpodRequest(\n `/templates/${templateId}`,\n 'PATCH',\n updateParams\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Template\nserver.tool(\n 'delete-template',\n {\n templateId: z.string().describe('ID of the template to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/templates/${params.templateId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== NETWORK VOLUME MANAGEMENT TOOLS ==============\n\n// List Network Volumes\nserver.tool('list-network-volumes', {}, async () => {\n const result = await runpodRequest('/networkvolumes');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n});\n\n// Get Network Volume Details\nserver.tool(\n 'get-network-volume',\n {\n networkVolumeId: z\n .string()\n .describe('ID of the network volume to retrieve'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/networkvolumes/${params.networkVolumeId}`\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Network Volume\nserver.tool(\n 'create-network-volume',\n {\n name: z.string().describe('Name for the network volume'),\n size: z.number().describe('Size in GB (1-4000)'),\n dataCenterId: z.string().describe('Data center ID'),\n },\n async (params) => {\n const result = await runpodRequest('/networkvolumes', 'POST', params);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Update Network Volume\nserver.tool(\n 'update-network-volume',\n {\n networkVolumeId: z.string().describe('ID of the network volume to update'),\n name: z.string().optional().describe('New name for the network volume'),\n size: z\n .number()\n .optional()\n .describe('New size in GB (must be larger than current)'),\n },\n async (params) => {\n const { networkVolumeId, ...updateParams } = params;\n const result = await runpodRequest(\n `/networkvolumes/${networkVolumeId}`,\n 'PATCH',\n updateParams\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Network Volume\nserver.tool(\n 'delete-network-volume',\n {\n networkVolumeId: z.string().describe('ID of the network volume to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/networkvolumes/${params.networkVolumeId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// ============== CONTAINER REGISTRY AUTH TOOLS ==============\n\n// List Container Registry Auths\nserver.tool('list-container-registry-auths', {}, async () => {\n const result = await runpodRequest('/containerregistryauth');\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n});\n\n// Get Container Registry Auth Details\nserver.tool(\n 'get-container-registry-auth',\n {\n containerRegistryAuthId: z\n .string()\n .describe('ID of the container registry auth to retrieve'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/containerregistryauth/${params.containerRegistryAuthId}`\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Create Container Registry Auth\nserver.tool(\n 'create-container-registry-auth',\n {\n name: z.string().describe('Name for the container registry auth'),\n username: z.string().describe('Registry username'),\n password: z.string().describe('Registry password'),\n },\n async (params) => {\n const result = await runpodRequest(\n '/containerregistryauth',\n 'POST',\n params\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Delete Container Registry Auth\nserver.tool(\n 'delete-container-registry-auth',\n {\n containerRegistryAuthId: z\n .string()\n .describe('ID of the container registry auth to delete'),\n },\n async (params) => {\n const result = await runpodRequest(\n `/containerregistryauth/${params.containerRegistryAuthId}`,\n 'DELETE'\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n);\n\n// Start receiving messages on stdin and sending messages on stdout\nconst transport = new StdioServerTransport();\nserver.connect(transport);\n"],"mappings":";;;AAAA,SAAS,iBAAiB;AAC1B,SAAS,4BAA4B;AACrC,SAAS,SAAS;AAClB,OAAO,WAAyD;AAGhE,IAAM,eAAe;AAGrB,IAAM,UAAU,QAAQ,IAAI;AAC5B,IAAI,CAAC,SAAS;AACZ,UAAQ,MAAM,iDAAiD;AAC/D,UAAQ,KAAK,CAAC;AAChB;AAGA,IAAM,SAAS,IAAI,UAAU;AAAA,EAC3B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,cAAc;AAAA,IACZ,WAAW,CAAC;AAAA,IACZ,OAAO,CAAC;AAAA,EACV;AACF,CAAC;AAGD,eAAe,cACb,UACA,SAAiB,OACjB,MACA;AACA,QAAM,MAAM,GAAG,YAAY,GAAG,QAAQ;AACtC,QAAM,UAAU;AAAA,IACd,eAAe,UAAU,OAAO;AAAA,IAChC,gBAAgB;AAAA,EAClB;AAEA,QAAM,UAAgC;AAAA,IACpC;AAAA,IACA;AAAA,EACF;AAEA,MAAI,SAAS,WAAW,UAAU,WAAW,UAAU;AACrD,YAAQ,OAAO,KAAK,UAAU,IAAI;AAAA,EACpC;AAEA,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,KAAK,OAAO;AAEzC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAY,MAAM,SAAS,KAAK;AACtC,YAAM,IAAI,MAAM,qBAAqB,SAAS,MAAM,MAAM,SAAS,EAAE;AAAA,IACvE;AAGA,UAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AACvD,QAAI,eAAe,YAAY,SAAS,kBAAkB,GAAG;AAC3D,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B;AAEA,WAAO,EAAE,SAAS,MAAM,QAAQ,SAAS,OAAO;AAAA,EAClD,SAAS,OAAO;AACd,YAAQ,MAAM,6BAA6B,KAAK;AAChD,UAAM;AAAA,EACR;AACF;AAKA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,aAAa,EACV,KAAK,CAAC,OAAO,KAAK,CAAC,EACnB,SAAS,EACT,SAAS,qCAAqC;AAAA,IACjD,WAAW,EACR,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,iDAAiD;AAAA,IAC7D,cAAc,EACX,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,oDAAoD;AAAA,IAChE,MAAM,EACH,OAAO,EACP,SAAS,EACT,SAAS,uCAAuC;AAAA,IACnD,gBAAgB,EACb,QAAQ,EACR,SAAS,EACT,SAAS,uCAAuC;AAAA,IACnD,sBAAsB,EACnB,QAAQ,EACR,SAAS,EACT,SAAS,oDAAoD;AAAA,EAClE;AAAA,EACA,OAAO,WAAW;AAEhB,UAAM,cAAc,IAAI,gBAAgB;AAExC,QAAI,OAAO;AACT,kBAAY,OAAO,eAAe,OAAO,WAAW;AACtD,QAAI,OAAO;AACT,aAAO,UAAU,QAAQ,CAAC,SAAS,YAAY,OAAO,aAAa,IAAI,CAAC;AAC1E,QAAI,OAAO;AACT,aAAO,aAAa;AAAA,QAAQ,CAAC,OAC3B,YAAY,OAAO,gBAAgB,EAAE;AAAA,MACvC;AACF,QAAI,OAAO,KAAM,aAAY,OAAO,QAAQ,OAAO,IAAI;AACvD,QAAI,OAAO;AACT,kBAAY,OAAO,kBAAkB,OAAO,eAAe,SAAS,CAAC;AACvE,QAAI,OAAO;AACT,kBAAY;AAAA,QACV;AAAA,QACA,OAAO,qBAAqB,SAAS;AAAA,MACvC;AAEF,UAAM,cAAc,YAAY,SAAS,IACrC,IAAI,YAAY,SAAS,CAAC,KAC1B;AACJ,UAAM,SAAS,MAAM,cAAc,QAAQ,WAAW,EAAE;AAExD,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,OAAO,EAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,IACtD,gBAAgB,EACb,QAAQ,EACR,SAAS,EACT,SAAS,uCAAuC;AAAA,IACnD,sBAAsB,EACnB,QAAQ,EACR,SAAS,EACT,SAAS,oDAAoD;AAAA,EAClE;AAAA,EACA,OAAO,WAAW;AAEhB,UAAM,cAAc,IAAI,gBAAgB;AAExC,QAAI,OAAO;AACT,kBAAY,OAAO,kBAAkB,OAAO,eAAe,SAAS,CAAC;AACvE,QAAI,OAAO;AACT,kBAAY;AAAA,QACV;AAAA,QACA,OAAO,qBAAqB,SAAS;AAAA,MACvC;AAEF,UAAM,cAAc,YAAY,SAAS,IACrC,IAAI,YAAY,SAAS,CAAC,KAC1B;AACJ,UAAM,SAAS,MAAM,cAAc,SAAS,OAAO,KAAK,GAAG,WAAW,EAAE;AAExE,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kBAAkB;AAAA,IACvD,WAAW,EAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,IACpD,WAAW,EACR,KAAK,CAAC,UAAU,WAAW,CAAC,EAC5B,SAAS,EACT,SAAS,2BAA2B;AAAA,IACvC,YAAY,EACT,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,8BAA8B;AAAA,IAC1C,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gBAAgB;AAAA,IACzD,mBAAmB,EAChB,OAAO,EACP,SAAS,EACT,SAAS,2BAA2B;AAAA,IACvC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAAA,IAC9D,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,0BAA0B;AAAA,IAC1E,OAAO,EACJ,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,+CAA+C;AAAA,IAC3D,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,IACrE,eAAe,EACZ,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,SAAS,QAAQ,MAAM;AAE1D,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,OAAO,EAAE,OAAO,EAAE,SAAS,yBAAyB;AAAA,IACpD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,sBAAsB;AAAA,IAC3D,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kBAAkB;AAAA,IAC5D,mBAAmB,EAChB,OAAO,EACP,SAAS,EACT,SAAS,+BAA+B;AAAA,IAC3C,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,IAClE,iBAAiB,EACd,OAAO,EACP,SAAS,EACT,SAAS,8BAA8B;AAAA,IAC1C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,qBAAqB;AAAA,IACpE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,EAC3E;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,EAAE,OAAO,GAAG,aAAa,IAAI;AACnC,UAAM,SAAS,MAAM,cAAc,SAAS,KAAK,IAAI,SAAS,YAAY;AAE1E,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,OAAO,EAAE,OAAO,EAAE,SAAS,wBAAwB;AAAA,EACrD;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,SAAS,OAAO,KAAK,UAAU,MAAM;AAExE,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,OAAO,EAAE,OAAO,EAAE,SAAS,uBAAuB;AAAA,EACpD;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,SAAS,OAAO,KAAK,SAAS,MAAM;AAEvE,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,OAAO,EAAE,OAAO,EAAE,SAAS,yBAAyB;AAAA,EACtD;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,SAAS,OAAO,KAAK,IAAI,QAAQ;AAEpE,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAKA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,iBAAiB,EACd,QAAQ,EACR,SAAS,EACT,SAAS,8BAA8B;AAAA,IAC1C,gBAAgB,EACb,QAAQ,EACR,SAAS,EACT,SAAS,mCAAmC;AAAA,EACjD;AAAA,EACA,OAAO,WAAW;AAEhB,UAAM,cAAc,IAAI,gBAAgB;AAExC,QAAI,OAAO;AACT,kBAAY,OAAO,mBAAmB,OAAO,gBAAgB,SAAS,CAAC;AACzE,QAAI,OAAO;AACT,kBAAY,OAAO,kBAAkB,OAAO,eAAe,SAAS,CAAC;AAEvE,UAAM,cAAc,YAAY,SAAS,IACrC,IAAI,YAAY,SAAS,CAAC,KAC1B;AACJ,UAAM,SAAS,MAAM,cAAc,aAAa,WAAW,EAAE;AAE7D,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,YAAY,EAAE,OAAO,EAAE,SAAS,gCAAgC;AAAA,IAChE,iBAAiB,EACd,QAAQ,EACR,SAAS,EACT,SAAS,8BAA8B;AAAA,IAC1C,gBAAgB,EACb,QAAQ,EACR,SAAS,EACT,SAAS,mCAAmC;AAAA,EACjD;AAAA,EACA,OAAO,WAAW;AAEhB,UAAM,cAAc,IAAI,gBAAgB;AAExC,QAAI,OAAO;AACT,kBAAY,OAAO,mBAAmB,OAAO,gBAAgB,SAAS,CAAC;AACzE,QAAI,OAAO;AACT,kBAAY,OAAO,kBAAkB,OAAO,eAAe,SAAS,CAAC;AAEvE,UAAM,cAAc,YAAY,SAAS,IACrC,IAAI,YAAY,SAAS,CAAC,KAC1B;AACJ,UAAM,SAAS,MAAM;AAAA,MACnB,cAAc,OAAO,UAAU,GAAG,WAAW;AAAA,IAC/C;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,IAC5D,YAAY,EAAE,OAAO,EAAE,SAAS,oBAAoB;AAAA,IACpD,aAAa,EACV,KAAK,CAAC,OAAO,KAAK,CAAC,EACnB,SAAS,EACT,SAAS,qBAAqB;AAAA,IACjC,YAAY,EACT,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,8BAA8B;AAAA,IAC1C,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,IACpE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,IACtE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,IACtE,eAAe,EACZ,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,cAAc,QAAQ,MAAM;AAE/D,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,YAAY,EAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,IAC9D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,IAChE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,+BAA+B;AAAA,IAC1E,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,+BAA+B;AAAA,IAC1E,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,6BAA6B;AAAA,IACzE,YAAY,EACT,KAAK,CAAC,eAAe,eAAe,CAAC,EACrC,SAAS,EACT,SAAS,aAAa;AAAA,IACzB,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,cAAc;AAAA,EAC5D;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,EAAE,YAAY,GAAG,aAAa,IAAI;AACxC,UAAM,SAAS,MAAM;AAAA,MACnB,cAAc,UAAU;AAAA,MACxB;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,YAAY,EAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,EAChE;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM;AAAA,MACnB,cAAc,OAAO,UAAU;AAAA,MAC/B;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAKA,OAAO,KAAK,kBAAkB,CAAC,GAAG,YAAY;AAC5C,QAAM,SAAS,MAAM,cAAc,YAAY;AAE/C,SAAO;AAAA,IACL,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAGD,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,YAAY,EAAE,OAAO,EAAE,SAAS,gCAAgC;AAAA,EAClE;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,cAAc,OAAO,UAAU,EAAE;AAEpE,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,MAAM,EAAE,OAAO,EAAE,SAAS,uBAAuB;AAAA,IACjD,WAAW,EAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,IACpD,cAAc,EACX,QAAQ,EACR,SAAS,EACT,SAAS,+BAA+B;AAAA,IAC3C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,iBAAiB;AAAA,IAChE,kBAAkB,EACf,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,4BAA4B;AAAA,IACxC,gBAAgB,EACb,MAAM,EAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,uBAAuB;AAAA,IACnC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,IACrE,mBAAmB,EAChB,OAAO,EACP,SAAS,EACT,SAAS,2BAA2B;AAAA,IACvC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAAA,IAC9D,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,0BAA0B;AAAA,IAC1E,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mCAAmC;AAAA,EAC5E;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,cAAc,QAAQ,MAAM;AAE/D,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,YAAY,EAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,IAC9D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,IAChE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,kBAAkB;AAAA,IAC5D,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,qBAAqB;AAAA,IACpE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,2BAA2B;AAAA,IACzE,QAAQ,EACL,OAAO,EACP,SAAS,EACT,SAAS,uCAAuC;AAAA,EACrD;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,EAAE,YAAY,GAAG,aAAa,IAAI;AACxC,UAAM,SAAS,MAAM;AAAA,MACnB,cAAc,UAAU;AAAA,MACxB;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,YAAY,EAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,EAChE;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM;AAAA,MACnB,cAAc,OAAO,UAAU;AAAA,MAC/B;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAKA,OAAO,KAAK,wBAAwB,CAAC,GAAG,YAAY;AAClD,QAAM,SAAS,MAAM,cAAc,iBAAiB;AAEpD,SAAO;AAAA,IACL,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAGD,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,iBAAiB,EACd,OAAO,EACP,SAAS,sCAAsC;AAAA,EACpD;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM;AAAA,MACnB,mBAAmB,OAAO,eAAe;AAAA,IAC3C;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,MAAM,EAAE,OAAO,EAAE,SAAS,6BAA6B;AAAA,IACvD,MAAM,EAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,IAC/C,cAAc,EAAE,OAAO,EAAE,SAAS,gBAAgB;AAAA,EACpD;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM,cAAc,mBAAmB,QAAQ,MAAM;AAEpE,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,iBAAiB,EAAE,OAAO,EAAE,SAAS,oCAAoC;AAAA,IACzE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,iCAAiC;AAAA,IACtE,MAAM,EACH,OAAO,EACP,SAAS,EACT,SAAS,8CAA8C;AAAA,EAC5D;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,EAAE,iBAAiB,GAAG,aAAa,IAAI;AAC7C,UAAM,SAAS,MAAM;AAAA,MACnB,mBAAmB,eAAe;AAAA,MAClC;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,iBAAiB,EAAE,OAAO,EAAE,SAAS,oCAAoC;AAAA,EAC3E;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM;AAAA,MACnB,mBAAmB,OAAO,eAAe;AAAA,MACzC;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAKA,OAAO,KAAK,iCAAiC,CAAC,GAAG,YAAY;AAC3D,QAAM,SAAS,MAAM,cAAc,wBAAwB;AAE3D,SAAO;AAAA,IACL,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAGD,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,yBAAyB,EACtB,OAAO,EACP,SAAS,+CAA+C;AAAA,EAC7D;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM;AAAA,MACnB,0BAA0B,OAAO,uBAAuB;AAAA,IAC1D;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,MAAM,EAAE,OAAO,EAAE,SAAS,sCAAsC;AAAA,IAChE,UAAU,EAAE,OAAO,EAAE,SAAS,mBAAmB;AAAA,IACjD,UAAU,EAAE,OAAO,EAAE,SAAS,mBAAmB;AAAA,EACnD;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,OAAO;AAAA,EACL;AAAA,EACA;AAAA,IACE,yBAAyB,EACtB,OAAO,EACP,SAAS,6CAA6C;AAAA,EAC3D;AAAA,EACA,OAAO,WAAW;AAChB,UAAM,SAAS,MAAM;AAAA,MACnB,0BAA0B,OAAO,uBAAuB;AAAA,MACxD;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,IAAM,YAAY,IAAI,qBAAqB;AAC3C,OAAO,QAAQ,SAAS;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,29 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runpod/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "MCP server for interacting with RunPod API",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|
|
8
8
|
"module": "./dist/index.mjs",
|
|
9
9
|
"types": "./dist/index.d.ts",
|
|
10
|
+
"bin": {
|
|
11
|
+
"runpod-mcp": "./dist/index.mjs"
|
|
12
|
+
},
|
|
10
13
|
"files": [
|
|
11
14
|
"dist/**/*",
|
|
12
15
|
"CHANGELOG.md"
|
|
13
16
|
],
|
|
14
|
-
"scripts": {
|
|
15
|
-
"build": "pnpm clean && tsup --tsconfig tsconfig.build.json",
|
|
16
|
-
"build:watch": "pnpm clean && tsup --watch",
|
|
17
|
-
"clean": "rm -rf dist *.tsbuildinfo",
|
|
18
|
-
"lint": "eslint \"./**/*.ts*\"",
|
|
19
|
-
"type-check": "tsc --build",
|
|
20
|
-
"prettier-check": "prettier --check \"./**/*.ts*\"",
|
|
21
|
-
"start": "node dist/index.js",
|
|
22
|
-
"dev": "tsx src/index.ts",
|
|
23
|
-
"changeset": "changeset",
|
|
24
|
-
"changeset:version": "changeset version",
|
|
25
|
-
"changeset:publish": "changeset publish"
|
|
26
|
-
},
|
|
27
17
|
"exports": {
|
|
28
18
|
"./package.json": "./package.json",
|
|
29
19
|
".": {
|
|
@@ -57,10 +47,10 @@
|
|
|
57
47
|
"homepage": "https://runpod.io",
|
|
58
48
|
"repository": {
|
|
59
49
|
"type": "git",
|
|
60
|
-
"url": "git+https://github.com/runpod/mcp
|
|
50
|
+
"url": "git+https://github.com/runpod/runpod-mcp.git"
|
|
61
51
|
},
|
|
62
52
|
"bugs": {
|
|
63
|
-
"url": "https://github.com/runpod/mcp
|
|
53
|
+
"url": "https://github.com/runpod/runpod-mcp/issues"
|
|
64
54
|
},
|
|
65
55
|
"keywords": [
|
|
66
56
|
"mcp",
|
|
@@ -68,5 +58,18 @@
|
|
|
68
58
|
"runpod",
|
|
69
59
|
"server",
|
|
70
60
|
"api"
|
|
71
|
-
]
|
|
72
|
-
|
|
61
|
+
],
|
|
62
|
+
"scripts": {
|
|
63
|
+
"build": "pnpm clean && tsup --tsconfig tsconfig.build.json",
|
|
64
|
+
"build:watch": "pnpm clean && tsup --watch",
|
|
65
|
+
"clean": "rm -rf dist *.tsbuildinfo",
|
|
66
|
+
"lint": "eslint \"./**/*.ts*\"",
|
|
67
|
+
"type-check": "tsc --build",
|
|
68
|
+
"prettier-check": "prettier --check \"./**/*.ts*\"",
|
|
69
|
+
"start": "node dist/index.js",
|
|
70
|
+
"dev": "tsx src/index.ts",
|
|
71
|
+
"changeset": "changeset",
|
|
72
|
+
"changeset:version": "changeset version",
|
|
73
|
+
"changeset:publish": "changeset publish"
|
|
74
|
+
}
|
|
75
|
+
}
|