Documentation
Get SecureContext running in your environment in under an hour.
Installation
For most business deployments, a single server is enough. On AWS, the simplest remote path is one EC2 instance plus Systems Manager.
From your laptop, deploy to an EC2 instance with one AWS CLI command. Assumes Docker is installed and /opt/securecontext/securecontext.yaml already exists on the instance.
aws ssm send-command \--instance-ids i-0123456789abcdef0 \--document-name "AWS-RunShellScript" \--comment "Deploy SecureContext" \--parameters 'commands=["docker pull ghcr.io/secure-context/gateway:latest","docker rm -f securecontext || true","docker run -d --name securecontext --restart unless-stopped -p 8080:8080 -v /opt/securecontext:/config:ro -e SC_CONFIG_PATH=/config/securecontext.yaml ghcr.io/secure-context/gateway:latest"]'
Generic single-host deploy for any Linux VM when you are already on the server.
# On the server, with /opt/securecontext/securecontext.yaml already in placedocker pull ghcr.io/secure-context/gateway:latestdocker run -d \--name securecontext \--restart unless-stopped \-p 8080:8080 \-v /opt/securecontext:/config:ro \-e SC_CONFIG_PATH=/config/securecontext.yaml \ghcr.io/secure-context/gateway:latest
Good for local testing on your own machine.
docker pull ghcr.io/secure-context/gateway:latestdocker run -d \--name securecontext \--restart unless-stopped \-p 8080:8080 \-v /path/to/config:/config:ro \-e SC_CONFIG_PATH=/config/securecontext.yaml \ghcr.io/secure-context/gateway:latest
# Add the Helm repositoryhelm repo add securecontext https://charts.securecontext.orghelm repo update# Install with custom valueshelm install securecontext securecontext/gateway \--namespace securecontext \--create-namespace \-f values.yaml
# Download the latest releasecurl -LO https://releases.securecontext.org/latest/securecontext-linux-amd64# Make executable and runchmod +x securecontext-linux-amd64./securecontext-linux-amd64 --config /path/to/securecontext.yaml
Cloud Deployment Guides
Step-by-step cloud deployment playbooks for SecureContext.
Deploy to Cloud Run with GitHub Actions, Workload Identity Federation, manual sandbox approval, and production-grade checks.
Open GCP deployment guideDeploy to ECS Fargate with ECR and GitHub OIDC (no static AWS keys).
Open AWS deployment guideDeploy to Azure Container Apps with ACR and GitHub federated credentials.
Open Azure deployment guideConfiguration
Configure your tenant name, tool prefix, and basic settings.
# securecontext.yamltenant:# The display name shown to usersdisplay_name: "Atlas"# Prefix for all MCP tools (e.g., Atlas.ask, Atlas.searchSlack)mcp_prefix: "Atlas"# Optional: Custom brandingbranding:logo_url: "https://internal.acme.com/Atlas-logo.svg"primary_color: "#0ea5e9"server:host: "0.0.0.0"port: 8080# TLS configuration (recommended for production)tls:enabled: truecert_file: "/certs/server.crt"key_file: "/certs/server.key"logging:level: "info"format: "json"# Audit logging for complianceaudit:enabled: truedestination: "stdout" # or file path, or syslog URL
Connectors
Add connectors to expose your company's knowledge systems.
AWS Bedrock
Use IAM role assumption for secure access.
connectors:- type: bedrockname: "AI Models"config:region: "us-east-1"model_id: "anthropic.claude-v2"# IAM role to assume (recommended)assume_role_arn: "arn:aws:iam::123456789:role/SecureContextBedrock"# Or use instance profile / environment credentials# use_default_credentials: true
Amazon Q Business
Use Q as an aggregated knowledge connector.
connectors:- type: amazon-q-businessname: "Company Knowledge"config:application_id: "your-q-application-id"region: "us-east-1"# IAM role with Q Business permissionsassume_role_arn: "arn:aws:iam::123456789:role/SecureContextQ"
Slack
Configure OAuth token for Slack access.
connectors:- type: slackname: "Slack"config:# Bot OAuth token (xoxb-...)token: "${SLACK_BOT_TOKEN}"# Restrict to specific channels (optional)allowed_channels:- "engineering"- "incidents"- "product"# Enable search and postingcapabilities:- search- read_messages- post_messages # optional
Jira
Connect to Jira Cloud or Server.
connectors:- type: jiraname: "Jira"config:base_url: "https://acme.atlassian.net"# API token authenticationemail: "${JIRA_EMAIL}"api_token: "${JIRA_API_TOKEN}"# Restrict to specific projectsallowed_projects:- "PAYMENTS"- "PLATFORM"- "INFRA"capabilities:- search- read_issues- create_issues- update_issues
Authentication
SecureContext supports API tokens and enterprise SSO via OIDC.
Need help setting up Google SSO end-to-end? Follow the SSO Setup guide for exact Google Console labels and a field-by-field mapping for `securecontext.yaml`.
API Token
Simple authentication for internal deployments.
auth:mode: api_tokenapi_token: "${SECURECONTEXT_API_TOKEN}"
SSO (OIDC)
For SecureContext gateway config, use the `oauth` section in your YAML.
oauth:oauth_issuer_url: "https://accounts.google.com"oauth_client_id: "${OAUTH_CLIENT_ID}"oauth_client_secret: "${OAUTH_CLIENT_SECRET}"oauth_scopes: "openid profile email"oauth_token_ttl_seconds: 3600
Full step-by-step instructions: SSO Setup
mTLS
Certificate-based authentication for high-security environments. Planned.
auth:mode: mtlsmtls:# CA certificate for client validationca_cert_file: "/certs/ca.crt"# Map certificate CNs to permissionscn_mappings:"developer-workstation":- "*""ci-runner":- "jira:read"- "jira:create"
IDE Setup
Generate client-specific install actions for Cursor, GitHub Copilot, Claude Code, Codex, and other MCP-compatible tools.
Quick action
Cursor
Use Cursor's MCP deeplink or drop the same config into its local mcp.json.
- Config location
~/.cursor/mcp.json or .cursor/mcp.json- Auth expectation
- Remote SecureContext should expose OAuth metadata so the client can complete sign-in when first used.
- Note
- Cursor supports one-click OAuth install for remote HTTP MCP servers.
Manual config
.cursor/mcp.json
{"mcpServers": {"securecontext": {"url": "https://securecontext.example.com/mcp"}}}
Recommended path: use OAuth for remote SecureContext installs. The install links and commands above assume the gateway publishes MCP and OAuth metadata on the same base URL.
If you haven't configured OAuth yet, start with SSO Setup. After the server is connected, your client should auto-discover tools like Atlas.ask, Atlas.searchSlack, and Atlas.createJiraTicket.
SSO Setup
Configure Google Sign-In for SecureContext in a way that non-technical teams can repeat reliably.
SecureContext uses Google as an identity provider so admins can sign in with existing company accounts. You will create a Google OAuth client once, then copy values into the `oauth` block in `securecontext.yaml`.
- Google handles identity verification (who the user is).
- SecureContext handles authorization (what that user can do).
- Your SecureContext user table still controls actual access.
Before You Start
- A Google Cloud project where you can manage OAuth clients.
- Your SecureContext base URL (local and/or production).
- An admin email that is already registered in SecureContext.
Redirect URIs to prepare
# Local developmenthttp://localhost:8080/admin/login/callback# Production examplehttps://securecontext.example.com/admin/login/callback
The callback URL must match exactly in Google and in your browser entrypoint domain.
Google Console Steps
1. Open Google Auth Platform
In Google Cloud Console, open Google Auth Platform - Clients.
If your project is not fully configured yet, Google may first prompt for Branding/Audience details.
2. Configure Branding and Audience
Complete the Branding and Audience pages. Typical required fields are app name, support email, and test users (while your app is in testing mode).
Non-technical rule: if sign-in is blocked for a teammate, they are usually missing from your app's allowed audience/test users.
3. Create OAuth client
On the Clients page, click Create client. Set application type to Web application.
Under Authorized redirect URIs, add your callback URL(s):
http://localhost:8080/admin/login/callbackhttps://securecontext.example.com/admin/login/callback
After saving, copy both Client ID and Client secret.
YAML Value Mapping
oauth:oauth_issuer_url: "https://accounts.google.com"oauth_client_id: "<from Google Auth Platform > Clients > Client ID>"oauth_client_secret: "<from Google Auth Platform > Clients > Client secret>"oauth_scopes: "openid profile email"oauth_token_ttl_seconds: 3600
What each field means
oauth_issuer_url: Google's OpenID issuer. For Google Sign-In this is alwayshttps://accounts.google.com.oauth_client_id: copy the OAuth client's Client ID from the Google Auth Platform Clients page.oauth_client_secret: copy the OAuth client's Client secret from the same client details.oauth_scopes: requested identity claims. Keepopenid profile emailunless you have a specific compliance requirement.oauth_token_ttl_seconds: session duration inside SecureContext. Common values:3600(1 hour) or28800(8 hours).
Apply Config
Save the `oauth` block in your active config file and restart SecureContext. Do not commit real client secrets to git.
# ExampleCONFIG_PATH=./examples/securecontext.local.yaml ./securecontext
Verify & Troubleshoot
- Open `/admin/` and click Sign in with SSO.
- Complete Google sign-in.
- Confirm you return to admin UI successfully.
Common issues
- redirect_uri_mismatch: callback URI in Google does not exactly match your SecureContext URL.
- access denied / not registered: user email is not present in SecureContext user table.
- OAuth app blocked for teammates: add users to your Google app audience/test users.
Reference: Google OAuth 2.0 documentation.
GCP Deployment Guide
Deploy SecureContext to Google Cloud Run with GitHub Actions and a manual sandbox approval step.
This setup uses GitHub Actions release workflow, native GitHub environment approval for sandbox, Google Workload Identity Federation (no static JSON key), and Cloud Run deployment.
Prerequisites
- GCP project with billing enabled.
- GitHub repo admin access (for vars, secrets, environments).
- Cloud Run region selected (example: us-central1).
- A container image source. If using GHCR, configure Artifact Registry remote repo.
GitHub Config
Repository variables
GCP_PROJECT_ID=project-c28a9970-8bef-4119-a7bGCP_REGION=us-central1GCP_CLOUD_RUN_SERVICE=securecontext-gatewayGCP_SANDBOX_ENVIRONMENT=sandboxGCP_ALLOW_UNAUTHENTICATED=true# Use one of the following image variables:# A) Versioned deploys from Artifact Registry repoGCP_DEPLOY_IMAGE_REPO=us-central1-docker.pkg.dev/<PROJECT_ID>/ghcr-remote/secure-context/gateway# B) Fixed image tag (simple starter setup)GCP_DEPLOY_IMAGE=us-central1-docker.pkg.dev/<PROJECT_ID>/ghcr-remote/secure-context/gateway:latest
Repository secrets
GCP_WORKLOAD_IDENTITY_PROVIDER=projects/<PROJECT_NUMBER>/locations/global/workloadIdentityPools/<POOL>/providers/<PROVIDER>GCP_SERVICE_ACCOUNT=<SERVICE_ACCOUNT_EMAIL>
GCP Setup
1. Enable required APIs
gcloud services enable \iam.googleapis.com \iamcredentials.googleapis.com \run.googleapis.com \artifactregistry.googleapis.com \serviceusage.googleapis.com \--project <PROJECT_ID>
2. Workload Identity Federation + deploy service account
Create a workload identity pool/provider for GitHub OIDC, create deploy service account, then grant:
roles/run.adminroles/iam.serviceAccountUserroles/artifactregistry.readerroles/iam.workloadIdentityUser (binding on the deploy service account)
3. Optional: Artifact Registry remote repo for GHCR
gcloud artifacts repositories create ghcr-remote \--project <PROJECT_ID> \--location us-central1 \--repository-format docker \--mode remote-repository \--remote-docker-repo https://ghcr.io
Sandbox Approval Gate
Use GitHub native environment approval so deploy waits for Approve and deploy from the UI.
- Go to GitHub: Settings → Environments.
- Create environment:
sandbox. - Add required reviewers for that environment.
- Ensure workflow deploy job targets sandbox environment.
Deploy
- Push to
main(or run workflow_dispatch). - Wait for build, publish, and release verification steps.
- Approve sandbox deployment in the pending deployment modal.
- Wait for Cloud Run deploy and health check completion.
Verify
# Service statusgcloud run services describe securecontext-gateway \--project <PROJECT_ID> \--region us-central1# Deploy workflow health check endpointcurl -fsS https://<cloud-run-url>/admin/api/public
Troubleshooting
- IAMCredentials API disabled: enable
iamcredentials.googleapis.com. - Image pull/deploy failed: set
GCP_DEPLOY_IMAGE_REPOorGCP_DEPLOY_IMAGEto a valid Artifact Registry image. - Artifact read denied: grant deploy service account
roles/artifactregistry.reader. - Container failed to start: ensure runtime config exists and stdio is disabled for Cloud Run.
What Next
Next cloud guides to add in this docs section:
- AWS deployment guide (ECR/ECS or App Runner + GitHub OIDC).
- Azure deployment guide (Container Apps + federated credentials).
AWS Deployment Guide
Deploy SecureContext to AWS ECS Fargate with ECR and GitHub OIDC. This is a minimal starter path.
No built-in AWS workflow ships with SecureContext yet. Use the template below as your baseline and adapt for your account.
Prerequisites
- AWS account with permissions for IAM, ECR, ECS, and CloudWatch Logs.
- GitHub repo admin access for vars and secrets.
- An ECS cluster and service (Fargate) created.
- A task definition template committed in your repo.
GitHub Config
Repository variables
AWS_REGION=us-east-1AWS_ECR_REPOSITORY=securecontext-gatewayAWS_ECS_CLUSTER=securecontextAWS_ECS_SERVICE=securecontext-gatewayAWS_ECS_TASK_DEFINITION=.github/ecs-task-definition.jsonAWS_ECS_CONTAINER_NAME=securecontext
Repository secrets
AWS_ROLE_TO_ASSUME=arn:aws:iam::<ACCOUNT_ID>:role/github-securecontext-deploy
AWS Setup
1. Create ECR repository
aws ecr create-repository \--repository-name securecontext-gateway \--region us-east-1
2. Create GitHub OIDC IAM role
Trust GitHub OIDC and grant least-privilege permissions for ECR push + ECS deploy.
Required permissions (minimum):- ecr:GetAuthorizationToken- ecr:BatchCheckLayerAvailability- ecr:CompleteLayerUpload- ecr:InitiateLayerUpload- ecr:PutImage- ecr:UploadLayerPart- ecs:DescribeServices- ecs:DescribeTaskDefinition- ecs:RegisterTaskDefinition- ecs:UpdateService- iam:PassRole
Deploy
Minimal GitHub Actions job (`.github/workflows/deploy-aws.yml`):
name: Deploy AWSon:workflow_dispatch:push:branches: [main]jobs:deploy:runs-on: ubuntu-latestpermissions:id-token: writecontents: readsteps:- uses: actions/checkout@v4- name: Configure AWS credentialsuses: aws-actions/configure-aws-credentials@v4with:role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}aws-region: ${{ vars.AWS_REGION }}- id: login-ecruses: aws-actions/amazon-ecr-login@v2- name: Build and push imageenv:ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}ECR_REPOSITORY: ${{ vars.AWS_ECR_REPOSITORY }}IMAGE_TAG: ${{ github.sha }}run: |docker build -t "$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" .docker push "$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"- name: Force new ECS deploymentrun: |aws ecs update-service \--cluster "${{ vars.AWS_ECS_CLUSTER }}" \--service "${{ vars.AWS_ECS_SERVICE }}" \--force-new-deployment
Verify
aws ecs describe-services \--cluster <ECS_CLUSTER> \--services <ECS_SERVICE> \--region <AWS_REGION>curl -fsS https://<service-url>/admin/api/public
Troubleshooting
- OIDC auth denied: verify trust policy on
AWS_ROLE_TO_ASSUME. - ECR push denied: add missing ECR actions to the role policy.
- Task won't start: check CloudWatch logs and container env/config path.
Azure Deployment Guide
Deploy SecureContext to Azure Container Apps with Azure Container Registry and GitHub federated credentials.
No built-in Azure workflow ships with SecureContext yet. Use this section as a minimal deploy starter.
Prerequisites
- Azure subscription with permissions for ACR and Container Apps.
- GitHub repo admin access for vars and secrets.
- Resource group and Container Apps environment created.
- Federated credential configured for GitHub OIDC.
GitHub Config
Repository variables
AZURE_LOCATION=eastusAZURE_RESOURCE_GROUP=securecontext-rgAZURE_CONTAINER_APP_ENV=securecontext-envAZURE_CONTAINER_APP=securecontext-gatewayAZURE_ACR_NAME=securecontextacr
Repository secrets
AZURE_CLIENT_ID=<app-registration-client-id>AZURE_TENANT_ID=<azure-ad-tenant-id>AZURE_SUBSCRIPTION_ID=<subscription-id>
Azure Setup
1. Create Container Registry
az acr create \--name <ACR_NAME> \--resource-group <RESOURCE_GROUP> \--sku Basic
2. Create Container Apps environment + app
az containerapp env create \--name <ENV_NAME> \--resource-group <RESOURCE_GROUP> \--location <LOCATION>az containerapp create \--name <APP_NAME> \--resource-group <RESOURCE_GROUP> \--environment <ENV_NAME> \--image <ACR_NAME>.azurecr.io/securecontext-gateway:latest \--target-port 8080 \--ingress external
Deploy
Minimal GitHub Actions job (`.github/workflows/deploy-azure.yml`):
name: Deploy Azureon:workflow_dispatch:push:branches: [main]jobs:deploy:runs-on: ubuntu-latestpermissions:id-token: writecontents: readsteps:- uses: actions/checkout@v4- name: Azure login (OIDC)uses: azure/login@v2with:client-id: ${{ secrets.AZURE_CLIENT_ID }}tenant-id: ${{ secrets.AZURE_TENANT_ID }}subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}- name: Build and push imagerun: |az acr login --name "${{ vars.AZURE_ACR_NAME }}"docker build -t "${{ vars.AZURE_ACR_NAME }}.azurecr.io/securecontext-gateway:${{ github.sha }}" .docker push "${{ vars.AZURE_ACR_NAME }}.azurecr.io/securecontext-gateway:${{ github.sha }}"- name: Update container apprun: |az containerapp update \--name "${{ vars.AZURE_CONTAINER_APP }}" \--resource-group "${{ vars.AZURE_RESOURCE_GROUP }}" \--image "${{ vars.AZURE_ACR_NAME }}.azurecr.io/securecontext-gateway:${{ github.sha }}"
Verify
az containerapp show \--name <APP_NAME> \--resource-group <RESOURCE_GROUP> \--query properties.configuration.ingress.fqdn -o tsvcurl -fsS https://<container-app-fqdn>/admin/api/public
Troubleshooting
- OIDC login failed: verify federated credentials for branch/repo in Entra app.
- ACR push denied: grant
AcrPushrole to deployment identity. - App unhealthy: inspect revision logs with
az containerapp logs show.
Next Steps
- Review our security documentation for best practices
- Check the knowledge base for tutorials and advanced configurations
- for custom connector development
Search docs
Jump to any section in documentation.