mcp-platform is the shared deployment platform for independent MCP services such as outlook.mcpar.is, kronan.mcpar.is, and future *.mcpar.is repositories.
This repository intentionally keeps application code out of the platform layer. It centralizes reusable GitHub Actions workflows, deployment conventions, onboarding guidance, shared Azure platform infrastructure, and reusable Terraform modules for MCP services.
- Reusable GitHub Actions workflows for building containers, deploying Azure Container Apps, and running Terraform
- Shared deployment and authentication conventions
- Shared Azure platform Terraform for MCP services
- Reusable Terraform modules for shared platform infrastructure and per-service Container Apps
- Onboarding documentation for new MCP services
- MCP server implementations
.NETapplication projects- Application Dockerfiles
- Thin application-specific Terraform roots that live in consuming repositories and call the shared modules from this repository
- Application-specific secrets
The shared Terraform code lives under:
infra/terraform/platform— shared Azure platform rootinfra/terraform/modules/mcp-platform— shared resource group / Log Analytics / Container Apps Environment / Key Vault moduleinfra/terraform/modules/mcp-container-app— one-service Azure Container App module
A consuming repository can keep its own application code, Dockerfile, and Terraform while delegating deployment logic to this repository.
Production callers should pin to a tag or commit SHA instead of
@mainto avoid unexpected changes. For example:heidarj/mcp-platform/.github/workflows/build-container.yml@v0.1.0
name: deploy
on:
push:
branches:
- main
concurrency:
group: production
cancel-in-progress: false
permissions:
contents: read
packages: write
id-token: write
jobs:
build:
uses: heidarj/mcp-platform/.github/workflows/build-container.yml@main
with:
image_name: kronan.mcpar.is
dotnet_version: 9.0.x
dockerfile_path: ./Dockerfile
context_path: .
run_tests: true
secrets:
GHCR_PAT: ${{ secrets.GHCR_PAT }}
deploy:
needs: build
uses: heidarj/mcp-platform/.github/workflows/deploy-container-app.yml@main
with:
container_app_name: ${{ vars.CONTAINER_APP_NAME }}
resource_group_name: ${{ vars.RESOURCE_GROUP_NAME }}
image: ${{ needs.build.outputs.image }}Note: If your repositories are in the same GitHub organization or enterprise, you can use
secrets: inheritas a shortcut instead of mapping each secret explicitly.
Additional workflow guidance is available in:
docs/onboarding.mddocs/platform-iac.mddocs/service-onboarding.mddocs/github-oidc.mddocs/key-vault.mddocs/container-apps.mddocs/terraform-state.mddocs/terraform-backend.md
This repository is licensed under the GNU General Public License v3.0 or later. See LICENSE for the full text.
If you need to use this platform under terms other than GPL v3, commercial licenses can be purchased separately.