Mirror of https://github.com/modelcontextprotocol/access — Infrastructure as Code for MCP access management
  • TypeScript 99.1%
  • Makefile 0.8%
  • Nix 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-07-29 10:23:09 -07:00
.github Skip Preview workflow for Dependabot PRs (#144) 2026-07-02 19:22:26 -07:00
scripts feat: provision GWS accounts for implicit maintainers (SDK teams, WGs) 2026-07-27 10:17:46 +01:00
sdks/googleworkspace Commit stub SDK manifest so Dependabot can resolve the file: dependency (#142) 2026-07-02 19:04:10 -07:00
src Add email details for Ido Salomon (#154) 2026-07-29 10:23:09 -07:00
.gitignore Commit stub SDK manifest so Dependabot can resolve the file: dependency (#142) 2026-07-02 19:04:10 -07:00
.pre-commit-config.yaml Add prettier formatting and CI validation checks 2025-12-13 10:01:28 +00:00
.prettierignore Add prettier formatting and CI validation checks 2025-12-13 10:01:28 +00:00
.prettierrc Add prettier formatting and CI validation checks 2025-12-13 10:01:28 +00:00
devenv.nix add devenv 2026-02-19 23:02:53 +00:00
Makefile fix(ci): reserialize dynamic providers before refresh 2026-03-21 20:41:55 +00:00
package-lock.json Bump the npm_and_yarn group across 1 directory with 8 updates (#143) 2026-07-02 19:23:50 -07:00
package.json Add Google Workspace user account provisioning (#66) 2026-02-19 22:17:25 +00:00
Pulumi.prod.yaml remove unecessary delegation 2026-02-19 23:33:27 +00:00
Pulumi.yaml Repair corrupted GroupMember state so deploys stop failing (#139) 2026-07-02 15:12:31 -07:00
README.md feat: provision GWS accounts for implicit maintainers (SDK teams, WGs) 2026-07-27 10:17:46 +01:00
tsconfig.json Add prettier formatting and CI validation checks 2025-12-13 10:01:28 +00:00

MCP Access Management

Infrastructure as Code for managing access to MCP community resources using Pulumi.

What This Manages

  • GitHub Teams: Automatically syncs team memberships in the MCP GitHub organization
  • Google Workspace Groups: Automatically syncs group memberships for @modelcontextprotocol.io email accounts
    • Email Groups: Groups with isEmailGroup: true accept emails from anyone (including external users) and notify all members. External posts are moderated for security.
  • Google Workspace User Accounts: Provisions @modelcontextprotocol.io accounts for members of roles with provisionUser: true (directly, or via a role nested under one through github.parent — e.g. SDK teams under sdk-maintainers, working groups under working-groups)

Opting in to a Google Workspace account (maintainers)

If you're a maintainer — explicitly or implicitly (SDK maintainers, working group members, etc.) — and want an @modelcontextprotocol.io account, open a PR adding the following fields to your entry in src/config/users.ts:

{
  github: 'your-github-username',
  // ...
  firstName: 'Your',
  lastName: 'Name',
  googleEmailPrefix: 'yourname', // -> yourname@modelcontextprotocol.io
  memberOf: [ROLE_IDS.MAINTAINERS /* , ... */],
},

Once merged, Pulumi provisions the account. An admin will share your initial password (retrievable via pulumi stack output --show-secrets newGWSUserPasswords).

Deployment

Production Deployment (Automated)

Note: Production deployment is automatically handled by GitHub Actions. All merges to the main branch trigger an automatic deployment via the configured GitHub Actions workflow.

Manual Deployment

Pre-requisites:

  1. Authenticate with GCP: gcloud auth application-default login
  2. Get the passphrase file passphrase.prod.txt from the maintainers
  3. Preview changes: make preview
  4. Deploy changes: make up

Key Management

Required GitHub Secrets (for CI/CD)

The following secrets must be configured in GitHub Actions for automated deployments:

  • GCP_PROD_SERVICE_ACCOUNT_KEY: GCP service account key

    • Used to authenticate with Google Cloud Storage for Pulumi state (gs://mcp-access-prod-pulumi-state)
    • Should be a JSON key file for a service account with Storage Admin permissions
    • See "Setting Up GCS Backend" below for setup instructions
  • PULUMI_PROD_PASSPHRASE: Passphrase for encrypting Pulumi state

    • Used to decrypt encrypted values in Pulumi stack configuration
    • Keep this secure - if lost, you cannot decrypt your Pulumi state

Initial Setup

If setting up this infrastructure for the first time:

1. Set Up Service Account

# Create project and enable APIs
gcloud projects create mcp-access-prod
gcloud config set project mcp-access-prod
gcloud services enable storage.googleapis.com
gcloud services enable admin.googleapis.com
gcloud services enable groupssettings.googleapis.com

# Create service account
gcloud iam service-accounts create pulumi-svc \
  --display-name="MCP Access Management Service Account" \
  --description="Service account for Pulumi state and Google Workspace management"

# Grant storage admin permissions (for Pulumi state)
gcloud projects add-iam-policy-binding mcp-access-prod \
  --member="serviceAccount:pulumi-svc@mcp-access-prod.iam.gserviceaccount.com" \
  --role="roles/storage.admin"

# Create key
gcloud iam service-accounts keys create sa-key.json \
  --iam-account=pulumi-svc@mcp-access-prod.iam.gserviceaccount.com

# Create GCS bucket for Pulumi state
gsutil mb gs://mcp-access-prod-pulumi-state

Then:

  1. In Google Workspace Admin Console, go to Account → Admin roles
  2. Select Groups Admin role (or create a custom role with these privileges):
    • Read, create, update, and delete groups
    • Read and update group members
  3. Click Assign service accounts
  4. Add your service account email: pulumi-svc@mcp-access-prod.iam.gserviceaccount.com

2. Initialize Pulumi Stack

# Login to Pulumi backend (GCS)
pulumi login gs://mcp-access-prod-pulumi-state

# Create production stack
export PULUMI_CONFIG_PASSPHRASE_FILE=passphrase.prod.txt
pulumi stack init prod

# Configure application secrets in Pulumi
pulumi config set --secret googleworkspace:credentials "$(cat sa-key.json)"
pulumi config set --secret github:token "ghp_your_github_token_here"

3. Configure GitHub Actions Secrets

Add the CI/CD secrets to GitHub Actions (repository settings → Secrets and variables → Actions):

  • GCP_PROD_SERVICE_ACCOUNT_KEY: Content of sa-key.json
  • PULUMI_PROD_PASSPHRASE: The passphrase you set above