{
  "name": "mcp-grid",
  "displayName": "MCP Grid",
  "description": "Dynamic MCP server bridge manager - monitor, configure, and control MCP servers on demand",
  "version": "1.0.0-beta-rc",
  "publisher": "IBQA",
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "https://github.com/IB-QA/mcp-grid-ws"
  },
  "engines": {
    "vscode": "^1.96.0"
  },
  "categories": [
    "Other",
    "Machine Learning",
    "Debuggers"
  ],
  "keywords": [
    "mcp",
    "model-context-protocol",
    "ai",
    "agents",
    "tools"
  ],
  "activationEvents": [
    "onStartupFinished"
  ],
  "main": "./dist/extension.js",
  "contributes": {
    "viewsContainers": {
      "activitybar": [
        {
          "id": "mcp-grid-sidebar",
          "title": "MCP Grid",
          "icon": "media/icons/grid.svg"
        }
      ]
    },
    "views": {
      "mcp-grid-sidebar": [
        {
          "id": "mcpGrid.servers",
          "name": "Servers",
          "contextualTitle": "MCP Grid Servers"
        },
        {
          "id": "mcpGrid.instances",
          "name": "Active Instances",
          "contextualTitle": "MCP Grid Instances"
        },
        {
          "id": "mcpGrid.metrics",
          "name": "Metrics",
          "contextualTitle": "MCP Grid Metrics"
        },
        {
          "id": "mcpGrid.marketplace",
          "name": "Marketplace",
          "contextualTitle": "MCP Grid Marketplace"
        }
      ]
    },
    "commands": [
      {
        "command": "mcpGrid.startBridge",
        "title": "MCP Grid: Start Bridge",
        "icon": "$(play)"
      },
      {
        "command": "mcpGrid.stopBridge",
        "title": "MCP Grid: Stop Bridge",
        "icon": "$(debug-stop)"
      },
      {
        "command": "mcpGrid.refreshServers",
        "title": "MCP Grid: Refresh Servers",
        "icon": "$(refresh)"
      },
      {
        "command": "mcpGrid.openDashboard",
        "title": "MCP Grid: Open Dashboard",
        "icon": "$(dashboard)"
      },
      {
        "command": "mcpGrid.activateServer",
        "title": "MCP Grid: Activate Server",
        "icon": "$(play)"
      },
      {
        "command": "mcpGrid.deactivateServer",
        "title": "MCP Grid: Deactivate Server",
        "icon": "$(debug-stop)"
      },
      {
        "command": "mcpGrid.configureServer",
        "title": "MCP Grid: Configure Server",
        "icon": "$(gear)"
      },
      {
        "command": "mcpGrid.importConfig",
        "title": "MCP Grid: Import MCP Config",
        "icon": "$(file-add)"
      },
      {
        "command": "mcpGrid.enableServer",
        "title": "MCP Grid: Enable Server",
        "icon": "$(check)"
      },
      {
        "command": "mcpGrid.disableServer",
        "title": "MCP Grid: Disable Server",
        "icon": "$(close)"
      },
      {
        "command": "mcpGrid.viewServerDetails",
        "title": "MCP Grid: View Server Details",
        "icon": "$(info)"
      },
      {
        "command": "mcpGrid.refreshMetrics",
        "title": "MCP Grid: Refresh Metrics",
        "icon": "$(refresh)"
      },
      {
        "command": "mcpGrid.registerMcpServer",
        "title": "MCP Grid: Register as MCP Server",
        "icon": "$(plug)"
      },
      {
        "command": "mcpGrid.unregisterMcpServer",
        "title": "MCP Grid: Unregister MCP Server",
        "icon": "$(debug-disconnect)"
      },
      {
        "command": "mcpGrid.addServerFromOpenAPI",
        "title": "MCP Grid: Add Server from OpenAPI Spec",
        "icon": "$(file-code)"
      },
      {
        "command": "mcpGrid.addServerManual",
        "title": "MCP Grid: Add Server Manually",
        "icon": "$(add)"
      },
      {
        "command": "mcpGrid.addServerFromMarketplace",
        "title": "MCP Grid: Install from Marketplace",
        "icon": "$(extensions)"
      },
      {
        "command": "mcpGrid.refreshMarketplace",
        "title": "MCP Grid: Refresh Marketplace",
        "icon": "$(refresh)"
      }
    ],
    "menus": {
      "view/title": [
        {
          "command": "mcpGrid.startBridge",
          "when": "view == mcpGrid.servers",
          "group": "navigation@1"
        },
        {
          "command": "mcpGrid.openDashboard",
          "when": "view == mcpGrid.servers",
          "group": "navigation@2"
        },
        {
          "command": "mcpGrid.refreshServers",
          "when": "view == mcpGrid.servers",
          "group": "navigation@3"
        },
        {
          "command": "mcpGrid.importConfig",
          "when": "view == mcpGrid.servers",
          "group": "1_import"
        },
        {
          "command": "mcpGrid.addServerFromOpenAPI",
          "when": "view == mcpGrid.servers",
          "group": "2_add"
        },
        {
          "command": "mcpGrid.addServerManual",
          "when": "view == mcpGrid.servers",
          "group": "2_add"
        },
        {
          "command": "mcpGrid.refreshMetrics",
          "when": "view == mcpGrid.metrics",
          "group": "navigation"
        },
        {
          "command": "mcpGrid.openDashboard",
          "when": "view == mcpGrid.metrics",
          "group": "navigation"
        },
        {
          "command": "mcpGrid.refreshMarketplace",
          "when": "view == mcpGrid.marketplace",
          "group": "navigation"
        },
        {
          "command": "mcpGrid.addServerFromOpenAPI",
          "when": "view == mcpGrid.marketplace",
          "group": "2_add"
        },
        {
          "command": "mcpGrid.addServerManual",
          "when": "view == mcpGrid.marketplace",
          "group": "2_add"
        }
      ],
      "view/item/context": [
        {
          "command": "mcpGrid.activateServer",
          "when": "view == mcpGrid.servers && viewItem == server-enabled",
          "group": "inline"
        },
        {
          "command": "mcpGrid.configureServer",
          "when": "view == mcpGrid.servers && viewItem =~ /^server/",
          "group": "inline"
        },
        {
          "command": "mcpGrid.enableServer",
          "when": "view == mcpGrid.servers && viewItem == server-disabled"
        },
        {
          "command": "mcpGrid.disableServer",
          "when": "view == mcpGrid.servers && viewItem == server-enabled"
        },
        {
          "command": "mcpGrid.deactivateServer",
          "when": "view == mcpGrid.instances && viewItem == instance",
          "group": "inline"
        },
        {
          "command": "mcpGrid.addServerFromMarketplace",
          "when": "view == mcpGrid.marketplace && viewItem == marketplace-server",
          "group": "inline"
        },
        {
          "command": "mcpGrid.configureServer",
          "when": "view == mcpGrid.marketplace && viewItem == marketplace-server",
          "group": "inline"
        },
        {
          "command": "mcpGrid.viewServerDetails",
          "when": "view == mcpGrid.marketplace && viewItem == marketplace-server"
        }
      ]
    },
    "configuration": {
      "title": "MCP Grid",
      "properties": {
        "mcpGrid.bridgeHost": {
          "type": "string",
          "default": "127.0.0.1",
          "description": "Host address for the MCP Grid bridge management API"
        },
        "mcpGrid.bridgePort": {
          "type": "number",
          "default": 19420,
          "description": "Port for the MCP Grid bridge management API"
        },
        "mcpGrid.autoStart": {
          "type": "boolean",
          "default": true,
          "description": "Automatically start the bridge when the extension activates"
        },
        "mcpGrid.pollingInterval": {
          "type": "number",
          "default": 5000,
          "description": "Polling interval (ms) for refreshing data when WebSocket is unavailable"
        },
        "mcpGrid.pythonPath": {
          "type": "string",
          "default": "python3",
          "description": "Path to the Python interpreter for starting the bridge"
        },
        "mcpGrid.metricsEnabled": {
          "type": "boolean",
          "default": true,
          "markdownDescription": "Enable local performance metrics collection (tool call counts and latencies only). No tool call content, arguments, results, or user data is ever collected. See [Data Collection Disclosure](https://github.com/IB-QA/MCPServerGridStudio/wiki/VerifiedMCPServerMarketplace#data-collection-disclosure)."
        },
        "mcpGrid.metricsRetentionDays": {
          "type": "number",
          "default": 30,
          "minimum": 1,
          "maximum": 365,
          "description": "Number of days to retain local performance metrics before automatic cleanup"
        }
      }
    }
  },
  "scripts": {
    "vscode:prepublish": "npm run package",
    "compile": "webpack",
    "watch": "webpack --watch",
    "package": "webpack --mode production --devtool hidden-source-map",
    "lint": "eslint src/",
    "test": "vscode-test"
  },
  "devDependencies": {
    "@types/node": "^22.13.4",
    "@types/vscode": "^1.96.0",
    "@types/ws": "^8.18.1",
    "@typescript-eslint/eslint-plugin": "^8.24.0",
    "@typescript-eslint/parser": "^8.24.0",
    "@vscode/test-cli": "^0.0.10",
    "@vscode/test-electron": "^2.4.1",
    "eslint": "^9.20.0",
    "ts-loader": "^9.5.2",
    "typescript": "^5.7.3",
    "webpack": "^5.98.0",
    "webpack-cli": "^6.0.1"
  },
  "dependencies": {
    "ws": "^8.19.0"
  }
}
