| name | connect |
| description | Connect, authenticate, and verify any SaaS CLI tool. Reads credentials from `.env`. Never prints secrets. |
| category | data |
| tier | on-demand |
| slash_command | /connect |
| model | haiku |
Connect โ SaaS CLI Connection Manager
Usage
/connect # status dashboard โ all services
/connect <service> # install + authenticate + test one service
/connect <service> test # test existing auth only (no re-auth)
Supported services: github ยท aws ยท gcp ยท azure ยท vercel ยท netlify ยท railway ยท heroku ยท flyio ยท supabase ยท planetscale ยท firebase ยท stripe ยท cloudflare ยท docker ยท terraform ยท sentry ยท datadog ยท jira ยท linear ยท slack ยท notion ยท npm ยท pypi ยท digitalocean ยท render ยท mongodb
Do NOT ask for permission. Do NOT print credential values. Do NOT skip checks.
Phase 0 โ Bootstrap
PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || echo "$PWD")
ENV_FILE="$PROJECT_ROOT/.env"
if [ -f "$ENV_FILE" ]; then
set -a; source "$ENV_FILE"; set +a
echo ".env loaded from $ENV_FILE"
else
echo "No .env found at $ENV_FILE"
echo "โ Copy .env.example to .env and fill in your credentials:"
echo " cp .env.example .env && \$EDITOR .env"
fi
Detect SERVICE from the argument (e.g. /connect github โ SERVICE=github). If no argument, run Phase 3 (status dashboard) for ALL services.
Phase 1 โ Helper functions (reference, do not run)
These patterns are used in each service section below.
check_cli() { command -v "$1" &>/dev/null && echo "โ
$1 installed" || echo "โ $1 not found"; }
check_env() { [ -n "${!1}" ] && echo "โ
$1 set" || echo "โ $1 missing โ add to .env"; }
brew_install() { brew install "$1" && echo "โ
$1 installed" || echo "โ install failed"; }
Phase 2 โ Service sections
Run ONLY the section matching the requested SERVICE.
SERVICE: github
Required env vars: GITHUB_TOKEN
check_cli gh
check_env GITHUB_TOKEN
if ! command -v gh &>/dev/null; then
echo "Installing GitHub CLI..."
brew install gh
fi
if [ -n "$GITHUB_TOKEN" ]; then
echo "$GITHUB_TOKEN" | gh auth login --with-token
gh auth status
else
echo "โ GITHUB_TOKEN not set in .env"
echo "โ Create a token at: https://github.com/settings/tokens"
echo "โ Add to .env: GITHUB_TOKEN=ghp_..."
fi
SERVICE: aws
Required env vars: AWS_ACCESS_KEY_ID ยท AWS_SECRET_ACCESS_KEY ยท AWS_DEFAULT_REGION
check_cli aws
check_env AWS_ACCESS_KEY_ID
check_env AWS_SECRET_ACCESS_KEY
check_env AWS_DEFAULT_REGION
if ! command -v aws &>/dev/null; then
brew install awscli
fi
if [ -n "$AWS_ACCESS_KEY_ID" ] && [ -n "$AWS_SECRET_ACCESS_KEY" ]; then
aws configure set aws_access_key_id "$AWS_ACCESS_KEY_ID"
aws configure set aws_secret_access_key "$AWS_SECRET_ACCESS_KEY"
aws configure set default.region "${AWS_DEFAULT_REGION:-us-east-1}"
echo "Testing connection..."
aws sts get-caller-identity
else
echo "โ AWS credentials not set in .env"
echo "โ Create at: https://console.aws.amazon.com/iam/home#/security_credentials"
echo "โ Add to .env: AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... AWS_DEFAULT_REGION=us-east-1"
fi
SERVICE: gcp
Required env vars: GCP_PROJECT_ID ยท GOOGLE_APPLICATION_CREDENTIALS (path to service account JSON)
Optional: GCP_REGION
check_cli gcloud
check_env GCP_PROJECT_ID
check_env GOOGLE_APPLICATION_CREDENTIALS
if ! command -v gcloud &>/dev/null; then
brew install google-cloud-sdk
fi
if [ -n "$GOOGLE_APPLICATION_CREDENTIALS" ] && [ -f "$GOOGLE_APPLICATION_CREDENTIALS" ]; then
gcloud auth activate-service-account --key-file="$GOOGLE_APPLICATION_CREDENTIALS"
gcloud config set project "${GCP_PROJECT_ID}"
gcloud auth list
echo "โ
GCP authenticated as service account"
elif [ -n "$GCP_PROJECT_ID" ]; then
echo "No service account key found โ falling back to Application Default Credentials"
gcloud auth application-default login
gcloud config set project "$GCP_PROJECT_ID"
else
echo "โ GCP credentials not set in .env"
echo "โ Create service account at: https://console.cloud.google.com/iam-admin/serviceaccounts"
echo "โ Download JSON key, then add to .env:"
echo " GCP_PROJECT_ID=my-project"
echo " GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json"
fi
SERVICE: azure
Required env vars: AZURE_CLIENT_ID ยท AZURE_CLIENT_SECRET ยท AZURE_TENANT_ID ยท AZURE_SUBSCRIPTION_ID
check_cli az
check_env AZURE_CLIENT_ID
check_env AZURE_CLIENT_SECRET
check_env AZURE_TENANT_ID
check_env AZURE_SUBSCRIPTION_ID
if ! command -v az &>/dev/null; then
brew install azure-cli
fi
if [ -n "$AZURE_CLIENT_ID" ] && [ -n "$AZURE_CLIENT_SECRET" ] && [ -n "$AZURE_TENANT_ID" ]; then
az login --service-principal \
--username "$AZURE_CLIENT_ID" \
--password "$AZURE_CLIENT_SECRET" \
--tenant "$AZURE_TENANT_ID"
az account set --subscription "$AZURE_SUBSCRIPTION_ID"
az account show
else
echo "โ Azure service principal credentials not set in .env"
echo "โ Create at: https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps"
echo "โ Add to .env: AZURE_CLIENT_ID=... AZURE_CLIENT_SECRET=... AZURE_TENANT_ID=... AZURE_SUBSCRIPTION_ID=..."
fi
SERVICE: vercel
Required env vars: VERCEL_TOKEN
Optional: VERCEL_ORG_ID ยท VERCEL_PROJECT_ID
check_cli vercel
check_env VERCEL_TOKEN
if ! command -v vercel &>/dev/null; then
npm install -g vercel
fi
if [ -n "$VERCEL_TOKEN" ]; then
vercel whoami
echo "โ
Vercel authenticated"
else
echo "โ VERCEL_TOKEN not set in .env"
echo "โ Create at: https://vercel.com/account/tokens"
echo "โ Add to .env: VERCEL_TOKEN=..."
fi
SERVICE: netlify
Required env vars: NETLIFY_AUTH_TOKEN
Optional: NETLIFY_SITE_ID
check_cli netlify
check_env NETLIFY_AUTH_TOKEN
if ! command -v netlify &>/dev/null; then
npm install -g netlify-cli
fi
if [ -n "$NETLIFY_AUTH_TOKEN" ]; then
NETLIFY_AUTH_TOKEN="$NETLIFY_AUTH_TOKEN" netlify status
echo "โ
Netlify authenticated"
else
echo "โ NETLIFY_AUTH_TOKEN not set in .env"
echo "โ Create at: https://app.netlify.com/user/applications#personal-access-tokens"
echo "โ Add to .env: NETLIFY_AUTH_TOKEN=..."
fi
SERVICE: railway
Required env vars: RAILWAY_TOKEN
check_cli railway
check_env RAILWAY_TOKEN
if ! command -v railway &>/dev/null; then
brew install railway
fi
if [ -n "$RAILWAY_TOKEN" ]; then
RAILWAY_TOKEN="$RAILWAY_TOKEN" railway whoami
echo "โ
Railway authenticated"
else
echo "โ RAILWAY_TOKEN not set in .env"
echo "โ Create at: https://railway.app/account/tokens"
echo "โ Add to .env: RAILWAY_TOKEN=..."
fi
SERVICE: heroku
Required env vars: HEROKU_API_KEY
check_cli heroku
check_env HEROKU_API_KEY
if ! command -v heroku &>/dev/null; then
brew tap heroku/brew && brew install heroku
fi
if [ -n "$HEROKU_API_KEY" ]; then
HEROKU_API_KEY="$HEROKU_API_KEY" heroku auth:whoami
echo "โ
Heroku authenticated"
else
echo "โ HEROKU_API_KEY not set in .env"
echo "โ Get at: https://dashboard.heroku.com/account (API Key section)"
echo "โ Add to .env: HEROKU_API_KEY=..."
fi
SERVICE: flyio
Required env vars: FLY_API_TOKEN
check_cli fly
check_env FLY_API_TOKEN
if ! command -v fly &>/dev/null; then
brew install flyctl
fi
if [ -n "$FLY_API_TOKEN" ]; then
FLY_API_TOKEN="$FLY_API_TOKEN" fly auth whoami
echo "โ
Fly.io authenticated"
else
echo "โ FLY_API_TOKEN not set in .env"
echo "โ Create at: https://fly.io/user/personal_access_tokens"
echo "โ Add to .env: FLY_API_TOKEN=..."
fi
SERVICE: supabase
Required env vars: SUPABASE_ACCESS_TOKEN
Optional: SUPABASE_PROJECT_REF ยท SUPABASE_DB_PASSWORD
check_cli supabase
check_env SUPABASE_ACCESS_TOKEN
if ! command -v supabase &>/dev/null; then
brew install supabase/tap/supabase
fi
if [ -n "$SUPABASE_ACCESS_TOKEN" ]; then
supabase login --token "$SUPABASE_ACCESS_TOKEN"
supabase projects list
echo "โ
Supabase authenticated"
else
echo "โ SUPABASE_ACCESS_TOKEN not set in .env"
echo "โ Create at: https://supabase.com/dashboard/account/tokens"
echo "โ Add to .env: SUPABASE_ACCESS_TOKEN=..."
fi
SERVICE: planetscale
Required env vars: PLANETSCALE_SERVICE_TOKEN ยท PLANETSCALE_SERVICE_TOKEN_ID ยท PLANETSCALE_ORG
check_cli pscale
check_env PLANETSCALE_SERVICE_TOKEN
check_env PLANETSCALE_SERVICE_TOKEN_ID
check_env PLANETSCALE_ORG
if ! command -v pscale &>/dev/null; then
brew install planetscale/tap/pscale
fi
if [ -n "$PLANETSCALE_SERVICE_TOKEN" ] && [ -n "$PLANETSCALE_SERVICE_TOKEN_ID" ]; then
pscale org list \
--service-token "$PLANETSCALE_SERVICE_TOKEN" \
--service-token-id "$PLANETSCALE_SERVICE_TOKEN_ID"
echo "โ
PlanetScale authenticated"
else
echo "โ PlanetScale credentials not set in .env"
echo "โ Create service token at: https://app.planetscale.com/[org]/settings/service-tokens"
echo "โ Add to .env: PLANETSCALE_SERVICE_TOKEN=... PLANETSCALE_SERVICE_TOKEN_ID=... PLANETSCALE_ORG=..."
fi
SERVICE: firebase
Required env vars: FIREBASE_TOKEN ยท FIREBASE_PROJECT_ID
check_cli firebase
check_env FIREBASE_TOKEN
check_env FIREBASE_PROJECT_ID
if ! command -v firebase &>/dev/null; then
npm install -g firebase-tools
fi
if [ -n "$FIREBASE_TOKEN" ]; then
firebase projects:list --token "$FIREBASE_TOKEN"
firebase use "$FIREBASE_PROJECT_ID" --token "$FIREBASE_TOKEN"
echo "โ
Firebase authenticated"
else
echo "โ FIREBASE_TOKEN not set in .env"
echo "โ Generate with: firebase login:ci"
echo "โ Add to .env: FIREBASE_TOKEN=... FIREBASE_PROJECT_ID=..."
fi
SERVICE: stripe
Required env vars: STRIPE_SECRET_KEY
Optional: STRIPE_PUBLISHABLE_KEY ยท STRIPE_WEBHOOK_SECRET
check_cli stripe
check_env STRIPE_SECRET_KEY
if ! command -v stripe &>/dev/null; then
brew install stripe/stripe-cli/stripe
fi
if [ -n "$STRIPE_SECRET_KEY" ]; then
stripe config --api-key "$STRIPE_SECRET_KEY"
stripe whoami
echo "โ
Stripe authenticated"
else
echo "โ STRIPE_SECRET_KEY not set in .env"
echo "โ Get at: https://dashboard.stripe.com/apikeys"
echo "โ Add to .env: STRIPE_SECRET_KEY=sk_live_... (or sk_test_... for dev)"
fi
SERVICE: cloudflare
Required env vars: CLOUDFLARE_API_TOKEN
Optional: CLOUDFLARE_ACCOUNT_ID ยท CLOUDFLARE_ZONE_ID
check_cli wrangler
check_env CLOUDFLARE_API_TOKEN
check_env CLOUDFLARE_ACCOUNT_ID
if ! command -v wrangler &>/dev/null; then
npm install -g wrangler
fi
if [ -n "$CLOUDFLARE_API_TOKEN" ]; then
CLOUDFLARE_API_TOKEN="$CLOUDFLARE_API_TOKEN" wrangler whoami
echo "โ
Cloudflare authenticated"
else
echo "โ CLOUDFLARE_API_TOKEN not set in .env"
echo "โ Create at: https://dash.cloudflare.com/profile/api-tokens"
echo "โ Add to .env: CLOUDFLARE_API_TOKEN=... CLOUDFLARE_ACCOUNT_ID=..."
fi
SERVICE: docker
Required env vars: DOCKER_USERNAME ยท DOCKER_TOKEN
Optional: DOCKER_REGISTRY (defaults to Docker Hub)
check_cli docker
check_env DOCKER_USERNAME
check_env DOCKER_TOKEN
if ! command -v docker &>/dev/null; then
echo "Docker Desktop not found โ install from: https://www.docker.com/products/docker-desktop"
exit 1
fi
if [ -n "$DOCKER_USERNAME" ] && [ -n "$DOCKER_TOKEN" ]; then
REGISTRY="${DOCKER_REGISTRY:-docker.io}"
echo "$DOCKER_TOKEN" | docker login "$REGISTRY" --username "$DOCKER_USERNAME" --password-stdin
echo "โ
Docker authenticated to $REGISTRY"
else
echo "โ Docker credentials not set in .env"
echo "โ Create access token at: https://hub.docker.com/settings/security"
echo "โ Add to .env: DOCKER_USERNAME=... DOCKER_TOKEN=..."
fi
SERVICE: terraform
Required env vars: none (uses cloud provider creds already configured)
Optional: TF_TOKEN_app_terraform_io (for Terraform Cloud)
check_cli terraform
if ! command -v terraform &>/dev/null; then
brew install terraform
fi
terraform version
terraform validate 2>/dev/null && echo "โ
Terraform config valid" || echo "No terraform config in current directory"
if [ -n "$TF_TOKEN_app_terraform_io" ]; then
echo "Terraform Cloud token detected โ writing to ~/.terraform.d/credentials.tfrc.json"
mkdir -p ~/.terraform.d
cat > ~/.terraform.d/credentials.tfrc.json <<EOF
{
"credentials": {
"app.terraform.io": {
"token": "$TF_TOKEN_app_terraform_io"
}
}
}
EOF
echo "โ
Terraform Cloud authenticated"
fi
SERVICE: sentry
Required env vars: SENTRY_AUTH_TOKEN ยท SENTRY_ORG
Optional: SENTRY_PROJECT ยท SENTRY_URL (for self-hosted)
check_cli sentry-cli
check_env SENTRY_AUTH_TOKEN
check_env SENTRY_ORG
if ! command -v sentry-cli &>/dev/null; then
brew install getsentry/tools/sentry-cli
fi
if [ -n "$SENTRY_AUTH_TOKEN" ]; then
SENTRY_AUTH_TOKEN="$SENTRY_AUTH_TOKEN" sentry-cli info
echo "โ
Sentry authenticated"
else
echo "โ SENTRY_AUTH_TOKEN not set in .env"
echo "โ Create at: https://sentry.io/settings/account/api/auth-tokens/"
echo "โ Add to .env: SENTRY_AUTH_TOKEN=... SENTRY_ORG=my-org SENTRY_PROJECT=my-project"
fi
SERVICE: datadog
Required env vars: DD_API_KEY ยท DD_APP_KEY
Optional: DD_SITE (defaults to datadoghq.com)
check_cli datadog-ci
check_env DD_API_KEY
check_env DD_APP_KEY
if ! command -v datadog-ci &>/dev/null; then
npm install -g @datadog/datadog-ci
fi
if [ -n "$DD_API_KEY" ]; then
DD_API_KEY="$DD_API_KEY" DD_APP_KEY="$DD_APP_KEY" \
datadog-ci synthetics run-tests --help &>/dev/null \
&& echo "โ
Datadog CI authenticated" \
|| echo "โ
Datadog credentials set (validation requires a test suite)"
else
echo "โ DD_API_KEY not set in .env"
echo "โ Get at: https://app.datadoghq.com/organization-settings/api-keys"
echo "โ Add to .env: DD_API_KEY=... DD_APP_KEY=... DD_SITE=datadoghq.com"
fi
SERVICE: jira
Required env vars: JIRA_URL ยท JIRA_USER_EMAIL ยท JIRA_API_TOKEN
Optional: JIRA_PROJECT_KEY
check_env JIRA_URL
check_env JIRA_USER_EMAIL
check_env JIRA_API_TOKEN
if ! command -v jira &>/dev/null; then
brew install go-jira
fi
if [ -n "$JIRA_URL" ] && [ -n "$JIRA_API_TOKEN" ]; then
mkdir -p ~/.jira.d
cat > ~/.jira.d/config.yml <<EOF
endpoint: ${JIRA_URL}
user: ${JIRA_USER_EMAIL}
login: ${JIRA_USER_EMAIL}
password-source: keyring
EOF
curl -sf -u "${JIRA_USER_EMAIL}:${JIRA_API_TOKEN}" \
"${JIRA_URL}/rest/api/3/myself" | python3 -c "import sys,json; u=json.load(sys.stdin); print('โ
Jira authenticated as', u['displayName'])"
else
echo "โ Jira credentials not set in .env"
echo "โ Create API token at: https://id.atlassian.com/manage-profile/security/api-tokens"
echo "โ Add to .env: JIRA_URL=https://your-org.atlassian.net JIRA_USER_EMAIL=... JIRA_API_TOKEN=..."
fi
SERVICE: linear
Required env vars: LINEAR_API_KEY
check_env LINEAR_API_KEY
if [ -n "$LINEAR_API_KEY" ]; then
RESULT=$(curl -sf -X POST https://api.linear.app/graphql \
-H "Authorization: $LINEAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"{ viewer { name email } }"}')
echo "$RESULT" | python3 -c "import sys,json; d=json.load(sys.stdin); v=d['data']['viewer']; print('โ
Linear authenticated as', v['name'], '(' + v['email'] + ')')"
else
echo "โ LINEAR_API_KEY not set in .env"
echo "โ Create at: https://linear.app/settings/api"
echo "โ Add to .env: LINEAR_API_KEY=lin_api_..."
fi
SERVICE: slack
Required env vars: SLACK_BOT_TOKEN
Optional: SLACK_TEAM_ID ยท SLACK_SIGNING_SECRET
check_env SLACK_BOT_TOKEN
if [ -n "$SLACK_BOT_TOKEN" ]; then
RESULT=$(curl -sf -X POST https://slack.com/api/auth.test \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-Type: application/json")
echo "$RESULT" | python3 -c "import sys,json; d=json.load(sys.stdin); print('โ
Slack authenticated โ team:', d.get('team','?'), '| bot:', d.get('user','?')) if d.get('ok') else print('โ Slack auth failed:', d.get('error','unknown'))"
else
echo "โ SLACK_BOT_TOKEN not set in .env"
echo "โ Create a Slack app and get Bot Token at: https://api.slack.com/apps"
echo "โ Add to .env: SLACK_BOT_TOKEN=xoxb-..."
fi
SERVICE: notion
Required env vars: NOTION_TOKEN
Optional: NOTION_DATABASE_ID
check_env NOTION_TOKEN
if [ -n "$NOTION_TOKEN" ]; then
RESULT=$(curl -sf https://api.notion.com/v1/users/me \
-H "Authorization: Bearer $NOTION_TOKEN" \
-H "Notion-Version: 2022-06-28")
echo "$RESULT" | python3 -c "import sys,json; d=json.load(sys.stdin); print('โ
Notion authenticated as', d.get('name','?'))" 2>/dev/null || echo "$RESULT" | python3 -c "import sys,json; d=json.load(sys.stdin); print('โ
Notion authenticated โ bot:', d.get('bot',{}).get('workspace_name','?'))"
else
echo "โ NOTION_TOKEN not set in .env"
echo "โ Create an integration at: https://www.notion.so/my-integrations"
echo "โ Add to .env: NOTION_TOKEN=secret_..."
fi
SERVICE: npm
Required env vars: NPM_TOKEN
check_cli npm
check_env NPM_TOKEN
if [ -n "$NPM_TOKEN" ]; then
npm set //registry.npmjs.org/:_authToken "$NPM_TOKEN"
npm whoami
echo "โ
npm authenticated"
else
echo "โ NPM_TOKEN not set in .env"
echo "โ Create at: https://www.npmjs.com/settings/[username]/tokens"
echo "โ Add to .env: NPM_TOKEN=npm_..."
fi
SERVICE: pypi
Required env vars: PYPI_TOKEN
Optional: PYPI_USERNAME (defaults to token)
check_cli twine
check_env PYPI_TOKEN
if ! command -v twine &>/dev/null; then
pip install twine --quiet
fi
if [ -n "$PYPI_TOKEN" ]; then
cat > ~/.pypirc <<EOF
[distutils]
index-servers = pypi
[pypi]
username = __token__
password = ${PYPI_TOKEN}
EOF
chmod 600 ~/.pypirc
echo "โ
PyPI credentials written to ~/.pypirc"
twine check --help &>/dev/null && echo "โ
twine available"
else
echo "โ PYPI_TOKEN not set in .env"
echo "โ Create at: https://pypi.org/manage/account/token/"
echo "โ Add to .env: PYPI_TOKEN=pypi-..."
fi
SERVICE: digitalocean
Required env vars: DIGITALOCEAN_ACCESS_TOKEN
check_cli doctl
check_env DIGITALOCEAN_ACCESS_TOKEN
if ! command -v doctl &>/dev/null; then
brew install doctl
fi
if [ -n "$DIGITALOCEAN_ACCESS_TOKEN" ]; then
doctl auth init --access-token "$DIGITALOCEAN_ACCESS_TOKEN"
doctl account get
echo "โ
DigitalOcean authenticated"
else
echo "โ DIGITALOCEAN_ACCESS_TOKEN not set in .env"
echo "โ Create at: https://cloud.digitalocean.com/account/api/tokens"
echo "โ Add to .env: DIGITALOCEAN_ACCESS_TOKEN=dop_v1_..."
fi
SERVICE: render
Required env vars: RENDER_API_KEY
check_env RENDER_API_KEY
if [ -n "$RENDER_API_KEY" ]; then
RESULT=$(curl -sf https://api.render.com/v1/owners \
-H "Accept: application/json" \
-H "Authorization: Bearer $RENDER_API_KEY")
echo "$RESULT" | python3 -c "import sys,json; d=json.load(sys.stdin); print('โ
Render authenticated โ owners:', ', '.join(o['owner']['name'] for o in d))" 2>/dev/null || echo "โ
Render API key accepted"
else
echo "โ RENDER_API_KEY not set in .env"
echo "โ Create at: https://dashboard.render.com/u/settings#api-keys"
echo "โ Add to .env: RENDER_API_KEY=rnd_..."
fi
SERVICE: mongodb
Required env vars: MONGODB_ATLAS_PUBLIC_KEY ยท MONGODB_ATLAS_PRIVATE_KEY ยท MONGODB_ATLAS_ORG_ID
check_cli atlas
check_env MONGODB_ATLAS_PUBLIC_KEY
check_env MONGODB_ATLAS_PRIVATE_KEY
if ! command -v atlas &>/dev/null; then
brew install mongodb-atlas-cli
fi
if [ -n "$MONGODB_ATLAS_PUBLIC_KEY" ] && [ -n "$MONGODB_ATLAS_PRIVATE_KEY" ]; then
atlas config set public_api_key "$MONGODB_ATLAS_PUBLIC_KEY"
atlas config set private_api_key "$MONGODB_ATLAS_PRIVATE_KEY"
[ -n "$MONGODB_ATLAS_ORG_ID" ] && atlas config set org_id "$MONGODB_ATLAS_ORG_ID"
atlas auth whoami
echo "โ
MongoDB Atlas authenticated"
else
echo "โ MongoDB Atlas credentials not set in .env"
echo "โ Create programmatic API keys at: https://cloud.mongodb.com/v2#/org/[orgId]/settings/apiKeys"
echo "โ Add to .env: MONGODB_ATLAS_PUBLIC_KEY=... MONGODB_ATLAS_PRIVATE_KEY=... MONGODB_ATLAS_ORG_ID=..."
fi
Phase 3 โ Status Dashboard (no-arg mode)
Run status checks for ALL services and print this summary:
echo ""
echo "โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ"
echo "โ SAAS CONNECTION STATUS โ"
echo "โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ"
check_service() {
local name="$1"; local cli="$2"; local envvar="$3"
local cli_ok=false; local env_ok=false
command -v "$cli" &>/dev/null 2>&1 && cli_ok=true
[ -n "${!envvar}" ] && env_ok=true
if $cli_ok && $env_ok; then
printf "โ โ
%-18s CLI: %-8s Token: %-20s โ\n" "$name" "ok" "set"
elif $env_ok; then
printf "โ โ ๏ธ %-18s CLI: %-8s Token: %-20s โ\n" "$name" "missing" "set"
elif $cli_ok; then
printf "โ โ ๏ธ %-18s CLI: %-8s Token: %-20s โ\n" "$name" "ok" "not set"
else
printf "โ โ %-18s CLI: %-8s Token: %-20s โ\n" "$name" "missing" "not set"
fi
}
check_service "GitHub" gh GITHUB_TOKEN
check_service "AWS" aws AWS_ACCESS_KEY_ID
check_service "GCP" gcloud GCP_PROJECT_ID
check_service "Azure" az AZURE_CLIENT_ID
check_service "Vercel" vercel VERCEL_TOKEN
check_service "Netlify" netlify NETLIFY_AUTH_TOKEN
check_service "Railway" railway RAILWAY_TOKEN
check_service "Heroku" heroku HEROKU_API_KEY
check_service "Fly.io" fly FLY_API_TOKEN
check_service "Supabase" supabase SUPABASE_ACCESS_TOKEN
check_service "PlanetScale" pscale PLANETSCALE_SERVICE_TOKEN
check_service "Firebase" firebase FIREBASE_TOKEN
check_service "Stripe" stripe STRIPE_SECRET_KEY
check_service "Cloudflare" wrangler CLOUDFLARE_API_TOKEN
check_service "Docker" docker DOCKER_TOKEN
check_service "Terraform" terraform TF_TOKEN_app_terraform_io
check_service "Sentry" sentry-cli SENTRY_AUTH_TOKEN
check_service "Datadog" datadog-ci DD_API_KEY
check_service "Jira" jira JIRA_API_TOKEN
check_service "Linear" curl LINEAR_API_KEY
check_service "Slack" curl SLACK_BOT_TOKEN
check_service "Notion" curl NOTION_TOKEN
check_service "npm" npm NPM_TOKEN
check_service "PyPI" twine PYPI_TOKEN
check_service "DigitalOcean" doctl DIGITALOCEAN_ACCESS_TOKEN
check_service "Render" curl RENDER_API_KEY
check_service "MongoDB Atlas" atlas MONGODB_ATLAS_PUBLIC_KEY
echo "โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ"
echo "โ Run: /connect <service> to connect any service โ"
echo "โ Edit .env to add missing credentials โ"
echo "โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ"
Phase 4 โ Hook guidance
After a successful connection, suggest adding this to the shell profile to auto-load .env on project entry:
autoload_env() {
local env_file="$PWD/.env"
[ -f "$env_file" ] && [ -r "$env_file" ] && set -a && source "$env_file" && set +a
}
And suggest this Claude Code hook in .claude/settings.json to warn on missing credentials:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash -c 'if [ ! -f .env ] && grep -qE \"(aws|gcloud|stripe|supabase|vercel)\" <<< \"$CLAUDE_TOOL_INPUT\" 2>/dev/null; then echo \"WARNING: No .env file found. Run /connect to set up credentials.\"; fi'"
}
]
}
]
}
}