1. Infrastructure
One Linux VM with a public IP. We run the install over SSH.
| Size | Standard_D8s_v5 or Standard_D8as_v5 (8 vCPU, 32 GB)m7i.2xlarge or m7a.2xlarge (8 vCPU, 32 GB)8 vCPU, 32 GB RAM, x86-64 |
| Image | Ubuntu Server 24.04 LTS |
| Disk | 256 GB Premium SSD256 GB gp3256 GB SSD |
| Public IP | StaticElastic IPStatic IPv4 |
How to
- portal.azure.com → Virtual machines → Create → Azure virtual machine.
- Image: Ubuntu Server 24.04 LTS - x64 Gen2. Size:
Standard_D8s_v5. - Authentication type: SSH public key. SSH public key source: Use existing public key, and paste our key from the last item below.
- Disks tab: OS disk size 256 GiB, type Premium SSD.
- Networking tab: Public IP → Create new, assignment Static.
- Review + create. Then copy the Public IP address from the VM's Overview page.
How to
- EC2 console → Key pairs → Actions → Import key pair. Paste our key from the last item below.
- Instances → Launch instances.
- AMI: Ubuntu Server 24.04 LTS, 64-bit (x86). Instance type:
m7i.2xlarge. - Key pair: the one you imported.
- Configure storage: 256 GiB, gp3.
- Launch instance.
- Elastic IPs → Allocate Elastic IP address, then Actions → Associate with the instance. Copy that address.
How to
- Order a VM with the size, image and disk from the table above.
- Make sure it has a public IPv4 address that does not change.
- If the provider asks for an SSH key, paste our key from the last item below.
- 443 and 80 from anywhere
- 22 from our IP address (we send it to you)
- Everything else closed
How to
- Open the VM → Networking → Network settings → Create port rule → Inbound port rule.
- Rule 1: Source Any, Service HTTPS, Action Allow.
- Rule 2: Source Any, Service HTTP, Action Allow.
- Rule 3: Source IP Addresses with our address, Service SSH, Action Allow.
- If Azure already made an SSH rule open to Any, delete it.
How to
- Open the instance → Security tab → its security group → Edit inbound rules.
- Rule 1: Type HTTPS, Source Anywhere-IPv4.
- Rule 2: Type HTTP, Source Anywhere-IPv4.
- Rule 3: Type SSH, Source Custom with our address.
- Delete any other inbound rule, then Save rules.
How to
- Set these rules in your provider's firewall.
- If the provider has no firewall, skip this. We set one up on the VM during the install.
How to
This depends on where the domain is hosted (Azure DNS, Cloudflare, GoDaddy, Route 53 and so on). In general:
- Open the DNS zone of your company domain.
- Add a record of type A. Name: the portal hostname. Value: the VM public IP.
- Add a second A record. Name: the same hostname with
*.in front. Value: the same IP. - Most providers want the name without the company domain, for example
ai-portaland*.ai-portal. - If the provider offers a proxy option (the orange cloud in Cloudflare), turn it off for both records.
sudo and this key in ~/.ssh/authorized_keys:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHOrGKWq5jXr85BV3C0uFNuDCBxbgr5+zELmMI6lqA5B Dmitriy Alergant
2. Single sign-on
Users sign in through your identity provider. Only the users and groups you assign to the app get in.
How to
- Open entra.microsoft.com → App registrations → New registration.
- Name: anything, for example
AI Portal. - Supported account types: Accounts in this organizational directory only.
- Redirect URI: platform Web, with this value:
- Select Register. On the Overview page, copy the Application (client) ID and the Directory (tenant) ID.
How to
- In the app: Certificates & secrets → New client secret.
- Pick the longest expiry your policy allows, then Add.
- Copy the Value column now. Entra shows it only once.
User and AdminHow to
- In the app: App roles → Create app role.
- Display name
User, allowed member types Users/Groups, valueUser, any description. Apply. - Repeat with
Admin.
acct token claimHow to
- In the app: Token configuration → Add optional claim.
- Token type ID, tick
acct, Add.
How to
- In the app: API permissions → Add a permission → Microsoft Graph → Application permissions.
- Add these five:
Application.Read.AllGroup.Read.AllGroupMember.Read.AllUser.Read.AllUser.EnableDisableAccount.All
- Select Grant admin consent. This needs a Global Administrator or Privileged Role Administrator.
How to
- Open Enterprise applications and select the same app.
- Properties → set Assignment required? to Yes → Save.
- Users and groups → Add user/group. Select the pilot users or a group, with the role
User. - Do the same for the platform admins, with the role
Admin.
3. Sources of intelligence
The platform has no models of its own. It calls the providers with your keys and they bill you directly. Tick each source you plan to use.
Models via API billing
How to
- In the Azure portal, create an Azure OpenAI resource, or open the one you have.
- Select Go to Azure AI Foundry portal → Deployments → Deploy model. Deploy each model you want and note the deployment names.
- Back in the Azure portal, open the resource → Keys and Endpoint. Copy the Endpoint and KEY 1.
Subscriptions
Recommended extras
4. Integrations
Agents act in these systems as the signed-in user, with that user's permissions. Tick the ones you want in the pilot. More can be added after the install.
How to
- entra.microsoft.com → App registrations → New registration.
- Supported account types: Accounts in this organizational directory only.
- Redirect URI: platform Web, with this value:
- Certificates & secrets → New client secret. Copy the Value.
How to
- In the app: API permissions → Add a permission → Microsoft Graph → Delegated permissions.
- Add what you want agents to reach:
- Mail:
Mail.ReadWrite,Mail.Send - Calendar:
Calendars.ReadWrite - Files:
Files.ReadWrite.All - SharePoint:
Sites.ReadWrite.All - Always:
openid,profile,email,offline_access
- Mail:
- For read-only access, use the
.Readversions. - If your tenant does not let users consent, select Grant admin consent.
How to
- console.cloud.google.com → create a project.
- APIs & Services → Library. Enable: Gmail API, Google Drive API, Google Calendar API, Google Docs API, Google Sheets API.
- OAuth consent screen: user type Internal.
How to
- APIs & Services → Credentials → Create credentials → OAuth client ID.
- Application type: Web application.
- Authorized redirect URI:
How to
- admin.atlassian.com → Connectors → Atlassian MCP server → Add domain.
- Enter:
- Your email domain must be verified in Atlassian.
How to
- Organization Settings → Developer settings → GitHub Apps → New GitHub App.
- Callback URL:
- Tick Expire user authorization tokens. Leave Request user authorization (OAuth) during installation unticked.
- Setup URL, with Redirect on update ticked:
- Webhook: untick Active.
- Repository permissions: Contents and Pull requests Read and write; Metadata, Actions and Checks Read-only.
- Create the app. Then generate a client secret and a private key.
Handover
Generated from what you entered on the other tabs. Items still open are listed as well.