Azure Dev Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Azure Dev Server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
⚠️ DEPRECATED — This repository has been consolidated into thedatacoremonorepo atpackages/dev-server. This repo is archived and no longer maintained. All future development happens in the monorepo.
Remote MCP server that gives Claude Desktop full filesystem and shell access over HTTPS — a cloud-hosted Desktop Commander running on Azure Container Apps.
Exposes 8 MCP tools so Claude Desktop can read, write, edit, search, and run commands on a remote machine:
| Tool | Description |
|---|---|
ping | Health check |
read_file | Read a file with line numbers |
write_file | Write or append to a file |
edit_file | Surgical find-and-replace (single occurrence) |
search_files | Grep across a directory with optional file pattern |
list_directory | List files/dirs with recursion depth |
run_command | Execute a shell command, returns stdout/stderr |
get_file_info | File metadata (size, type, modified time) |
Claude Desktop's built-in Desktop Commander only works locally. This project gives Claude Desktop the same capabilities on a remote Azure machine — useful when the workspace lives in the cloud or needs to be shared across devices.
git clone https://github.com/david3xu/azure-dev-server.git
cd azure-dev-server
pnpm install
pnpm run build
MCP_API_KEY=your-key WORKSPACE=/path/to/your/workspace pnpm startHealth check:
curl http://localhost:3001/healthThe server runs at:
https://ca-dev-server.purplegrass-77b8c839.australiaeast.azurecontainerapps.ioAdd to ~/.cursor/mcp.json:
{
"mcpServers": {
"azure-dev": {
"url": "https://ca-dev-server.purplegrass-77b8c839.australiaeast.azurecontainerapps.io/mcp",
"headers": {
"x-api-key": "<your-api-key>"
}
}
}
}Reload the window (Cmd+Shift+P → "Reload Window") — the 8 tools appear in the MCP panel.
Add to .vscode/mcp.json (per workspace) or user settings.json:
{
"mcp": {
"servers": {
"azure-dev": {
"type": "http",
"url": "https://ca-dev-server.purplegrass-77b8c839.australiaeast.azurecontainerapps.io/mcp",
"headers": {
"x-api-key": "<your-api-key>"
}
}
}
}
}Claude Desktop only supports stdio transport, so use mcp-remote as an HTTP bridge.
Create ~/Library/Application Support/Claude/azure-dev-mcp-bridge.sh:
#!/bin/zsh
set -euo pipefail
exec /opt/homebrew/bin/npx -y mcp-remote \
"https://ca-dev-server.purplegrass-77b8c839.australiaeast.azurecontainerapps.io/mcp" \
--transport http-first \
--header "x-api-key:<your-api-key>"Then add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"azure-dev": {
"command": "/bin/zsh",
"args": ["/Users/<you>/Library/Application Support/Claude/azure-dev-mcp-bridge.sh"]
}
}
}Restart Claude Desktop (Cmd+Q, reopen).
Requires Azure CLI.
Step 1 — Add the alias to your shell profile (once):
echo "alias azure-dev-shell='az containerapp exec \\
--name ca-dev-server \\
--resource-group rg-datacore \\
--command bash'" >> ~/.zshrcStep 2 — Load it in your current terminal:
source ~/.zshrcStep 3 — Connect:
azure-dev-shellYou will see INFO: Successfully connected to container: 'ca-dev-server' and a shell prompt.
Tips inside the container: -clearis not available — use `Ctrl+L` instead - The prompt may showsh-5.2#— runbashto switch to a full Bash session -/workspaceis the Azure Files mount — files written here persist across restarts - Exit with `Ctrl+D`
After connecting via any client, run these tools in order:
ping — should return "alive — workspace: /workspace"list_directory with path: "/" — lists the workspace rootwrite_file then read_file — confirms read/write access| Variable | Required | Default | Description |
|---|---|---|---|
MCP_API_KEY | Yes | dev-key-change-me | API key sent in x-api-key header |
WORKSPACE | No | process.cwd() | Root directory for all file operations |
PORT | No | 3001 | HTTP port |
Requires Azure CLI. No local Docker needed — image is built in the cloud:
# One-time setup
az group create --name rg-datacore --location australiaeast
az acr create --name acrdevserver --resource-group rg-datacore --sku Basic --admin-enabled true
az containerapp env create --name cae-dev-server --resource-group rg-datacore --location australiaeast
# Build + deploy
az acr build --registry acrdevserver --image azure-dev-server:latest --file Dockerfile .
ACR_PASS=$(az acr credential show --name acrdevserver --query "passwords[0].value" -o tsv)
az containerapp create \
--name ca-dev-server \
--resource-group rg-datacore \
--environment cae-dev-server \
--image acrdevserver.azurecr.io/azure-dev-server:latest \
--registry-server acrdevserver.azurecr.io \
--registry-username acrdevserver \
--registry-password "$ACR_PASS" \
--target-port 3001 --ingress external \
--min-replicas 1 --max-replicas 3 \
--cpu 0.5 --memory 1.0Gi \
--env-vars "MCP_API_KEY=<your-key>" "NODE_ENV=production" "PORT=3001" "WORKSPACE=/workspace"Re-deploy after code changes:
az acr build --registry acrdevserver --image azure-dev-server:latest --file Dockerfile .
az containerapp update --name ca-dev-server --resource-group rg-datacore \
--image acrdevserver.azurecr.io/azure-dev-server:latestpnpm run check # format + lint + type-check + build + test (all layers)
pnpm run test # tests only
pnpm run format # auto-format src/ and tests/All 7 constraint layers active: CI → pre-commit hook → ESLint → TypeScript strict → tests → Prettier → Zod schemas.
@modelcontextprotocol/sdk — Streamable HTTP transportMIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.