{
  "name": "johny-vm-mcp",
  "version": "1.0.0",
  "mcp_url": "private",
  "auth": "No auth",
  "allowed_google_emails": [
    "jonathanstanley004@gmail.com"
  ],
  "tools": [
    {
      "name": "vm_manifest",
      "description": "Use this when you need to understand what this VM MCP server can do and which Jonathan-specific surfaces exist.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "vm_contract",
      "description": "Use this when you need the operating contract and boundaries for Jonathan's VM MCP.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true
      }
    },
    {
      "name": "vm_exec",
      "description": "Use this when you need to execute a foreground shell command on Jonathan's VM and collect stdout/stderr.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "command": {
            "type": "string",
            "description": "Shell command executed with /bin/bash -lc."
          },
          "cwd": {
            "type": "string",
            "description": "Working directory. Defaults to /home/ubuntu."
          },
          "timeoutMs": {
            "type": "integer",
            "description": "Timeout in milliseconds.",
            "default": 60000
          },
          "maxOutputBytes": {
            "type": "integer",
            "description": "Maximum trailing stdout/stderr bytes to keep.",
            "default": 262144
          },
          "env": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Extra environment variables."
          },
          "sudo": {
            "type": "boolean",
            "description": "Run through passwordless sudo.",
            "default": false
          }
        },
        "required": [
          "command"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "vm_start_job",
      "description": "Use this when a command may take longer than a normal MCP call and should continue in the background on the VM.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "command": {
            "type": "string",
            "description": "Shell command executed with /bin/bash -lc."
          },
          "cwd": {
            "type": "string",
            "description": "Working directory. Defaults to /home/ubuntu."
          },
          "env": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Extra environment variables."
          },
          "sudo": {
            "type": "boolean",
            "description": "Run through passwordless sudo.",
            "default": false
          }
        },
        "required": [
          "command"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "vm_job_status",
      "description": "Use this when you need to inspect a background job, including whether its process is still running and its log tail.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string"
          },
          "tailBytes": {
            "type": "integer",
            "default": 65536
          }
        },
        "required": [
          "jobId"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "vm_cancel_job",
      "description": "Use this when you need to terminate a background job started through vm_start_job.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string"
          },
          "signal": {
            "type": "string",
            "default": "TERM"
          }
        },
        "required": [
          "jobId"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "vm_list_jobs",
      "description": "Use this when you need to see background jobs known to the MCP server.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true
      }
    },
    {
      "name": "vm_read_file",
      "description": "Use this when you need to read a file from Jonathan's VM.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "cwd": {
            "type": "string",
            "default": "/home/ubuntu"
          },
          "maxBytes": {
            "type": "integer",
            "default": 262144
          },
          "encoding": {
            "type": "string",
            "enum": [
              "utf8",
              "base64"
            ],
            "default": "utf8"
          }
        },
        "required": [
          "path"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true
      }
    },
    {
      "name": "vm_write_file",
      "description": "Use this when you need to create or overwrite a file on Jonathan's VM.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "cwd": {
            "type": "string",
            "default": "/home/ubuntu"
          },
          "encoding": {
            "type": "string",
            "enum": [
              "utf8",
              "base64"
            ],
            "default": "utf8"
          },
          "mode": {
            "type": "string",
            "description": "Optional octal mode such as 0644."
          },
          "createDirs": {
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "path",
          "content"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": true
      }
    },
    {
      "name": "vm_list_directory",
      "description": "Use this when you need directory entries and basic file metadata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "default": "."
          },
          "cwd": {
            "type": "string",
            "default": "/home/ubuntu"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true
      }
    },
    {
      "name": "vm_stat_path",
      "description": "Use this when you need file, directory, or symlink metadata.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "cwd": {
            "type": "string",
            "default": "/home/ubuntu"
          }
        },
        "required": [
          "path"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true
      }
    },
    {
      "name": "vm_apply_unified_diff",
      "description": "Use this when you need to apply a unified diff patch inside a repo or directory.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "diff": {
            "type": "string"
          },
          "cwd": {
            "type": "string",
            "default": "/home/ubuntu"
          },
          "strip": {
            "type": "integer",
            "default": 0,
            "description": "patch -p value used if git apply fails."
          }
        },
        "required": [
          "diff"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": true
      }
    },
    {
      "name": "vm_repo_status",
      "description": "Use this when you need git status, branch, remotes, and recent commit context for a repository.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "cwd": {
            "type": "string",
            "default": "/home/ubuntu"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true
      }
    },
    {
      "name": "vm_repo_diff",
      "description": "Use this when you need git diff output from a repository.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "cwd": {
            "type": "string",
            "default": "/home/ubuntu"
          },
          "staged": {
            "type": "boolean",
            "default": false
          },
          "pathspec": {
            "type": "string",
            "description": "Optional pathspec."
          },
          "maxOutputBytes": {
            "type": "integer",
            "default": 262144
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true
      }
    },
    {
      "name": "vm_repo_search",
      "description": "Use this when you need fast text search in a repo or directory.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "pattern": {
            "type": "string"
          },
          "cwd": {
            "type": "string",
            "default": "/home/ubuntu"
          },
          "glob": {
            "type": "string",
            "description": "Optional rg glob."
          },
          "maxOutputBytes": {
            "type": "integer",
            "default": 262144
          }
        },
        "required": [
          "pattern"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true
      }
    },
    {
      "name": "vm_service_check",
      "description": "Use this when you need systemd service status on Jonathan's VM.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "service": {
            "type": "string"
          }
        },
        "required": [
          "service"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "vm_logs",
      "description": "Use this when you need journal logs for a systemd service or a plain file tail.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "service": {
            "type": "string",
            "description": "Systemd service name."
          },
          "file": {
            "type": "string",
            "description": "Plain log file path."
          },
          "lines": {
            "type": "integer",
            "default": 200
          },
          "since": {
            "type": "string",
            "description": "Optional journalctl --since value."
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "vm_port_usage",
      "description": "Use this when you need listening ports and owning processes.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "vm_http_request",
      "description": "Use this when you need the VM to make an HTTP request and report status, headers, and a clipped body.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string"
          },
          "method": {
            "type": "string",
            "default": "GET"
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "body": {
            "type": "string"
          },
          "timeoutMs": {
            "type": "integer",
            "default": 30000
          },
          "maxBodyBytes": {
            "type": "integer",
            "default": 65536
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "vm_dependency_health",
      "description": "Use this when you need a quick health snapshot of core VM dependencies and disk space.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "vm_hermes_check",
      "description": "Use this when you need a Jonathan Hermes-specific status check without assuming Jacob's Hermes environment.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": true
      }
    }
  ]
}