Skip to content

Manage the security-room Cloudflare Access policy from config via a security-team GitHub team - #195

Merged
localden merged 3 commits into
mainfrom
claude/cloudflare-access-policy
Sep 29, 2026
Merged

localden merged 3 commits into
mainfrom
claude/cloudflare-access-policy

Conversation

@claude

@claude claude Bot commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Den Delimarsky, Max Isbey · Slack thread

Before: The Cloudflare Zero Trust Access policy (Maintainers) protecting https://securityroom.modelcontextprotocol.io was hand-edited in the Cloudflare dashboard. It allowed only four GitHub teams: core-maintainers, lead-maintainers, security-managers and sdk-maintainers. Cloudflare matches direct GitHub team membership only, so SDK maintainers, who sit in child teams such as python-sdk and typescript-sdk, were denied.

After: The policy is declared in src/config/accessPolicies.ts and synced by Pulumi (src/cloudflare.ts, using @pulumi/cloudflare). A new security-team GitHub team represents the MCP Security Team (SDK security leads who coordinate advisories across SDKs) and is managed in users.ts like every other team; the policy allows it alongside core-maintainers, lead-maintainers and security-managers (4 include rules; sdk-maintainers is dropped since it never matched anyone in a child team). The team has no parent team, so it grants no repository permissions by itself; security-room sign-in is its first use. The initial roster is the per-SDK leads named in the thread: maxisbey, Kludex (Python); felixweinberger, mattzcarey, KKonstantinov (TypeScript); yarolegovich, guglielmo-san (Go); daleseo (Rust); halter73 (C#); koic (Ruby). Java, Kotlin, PHP, Swift and MCP Apps leads are still to be decided and will be added in follow-up PRs.

How: src/cloudflare.ts follows the optional-provider pattern from discord.ts: if cloudflare:roleManagementToken is not set it logs "Cloudflare integration disabled: roleManagementToken not configured" and creates nothing, so previews stay green until the secret exists. Otherwise it creates an explicit cloudflare.Provider and one ZeroTrustAccessPolicy per ACCESS_POLICIES entry, rendering each role's GitHub team into a github-organization include rule (identity provider and account ID come from Pulumi.prod.yaml). The token is deliberately named for what it is, a role-management token (CLOUDFLARE_ROLE_MANAGEMENT_TOKEN secret, cloudflare:roleManagementToken config), scoped only to Access policy edits, not a generic Cloudflare API token. npm run validate checks that every role in a policy exists, has a GitHub team and is not duplicated; npm test checks the rendered include-rule list. The existing Maintainers policy (11a6814e-…) is adopted with Pulumi's import option (format <account_id>/<policy_id>, per the provider docs) gated by cloudflare:importExistingPolicies. Because Pulumi refuses an import whose inputs differ from the live resource, the import pass ignores the rule fields; a follow-up PR flipping the flag to "false" then applies the include-rule change, and its preview shows exactly that diff. connectionRules and sessionDuration are always ignored since the API sets defaults we do not model. The README has a new "Cloudflare Access (security-room)" section with the grant procedure and one-time setup.

Before merging

  • Den: in the Cloudflare dashboard for the MCP Domain Account, create a token dedicated to Access policy role management with a descriptive name (e.g. mcp-access: Access policy role management), scoped only to Account → Access: Apps and Policies → Edit, not reused for anything else, and add it as the GitHub Actions secret CLOUDFLARE_ROLE_MANAGEMENT_TOKEN in the production environment.
  • The Pulumi preview on this PR should then show: one github.Team create (security-team) plus its 10 TeamMembership creates, and an import of the Maintainers ZeroTrustAccessPolicy, and nothing else.
  • After this merges and deploys, open the follow-up PR setting cloudflare:importExistingPolicies: "false" in Pulumi.prod.yaml; its preview should show only the policy update replacing the sdk-maintainers include rule with security-team.
  • After that deploy, users who were previously denied must revoke the "Cloudflare Access" OAuth app in their GitHub settings (Applications → Authorized OAuth Apps) and sign in again, so Cloudflare re-reads their team list.

Not verified here: npm run build fails locally only on the pre-existing @pulumi/googleworkspace generated SDK (needs pulumi install, which is unavailable in this environment); the new files typecheck clean under the repo's strict tsconfig settings, and npm run check (prettier, validate, 40 tests) passes. No pulumi preview was run, so any spurious diff on excludes/requires after import would only show up in CI.

🤖 Generated with Claude Code

https://claude.ai/code/session_01YBarRtzEtwT2HvfcEvRbW7

The Cloudflare Zero Trust Access policy protecting
securityroom.modelcontextprotocol.io was hand-edited in the Cloudflare
dashboard and allowed four GitHub teams: core-maintainers,
lead-maintainers, security-managers and sdk-maintainers. Cloudflare
matches direct GitHub team membership only, so SDK maintainers, who sit
in child teams such as python-sdk, were denied.

Declare the policy in src/config/accessPolicies.ts and sync it with
@pulumi/cloudflare (src/cloudflare.ts, optional like the Discord module
until cloudflare:apiToken is configured). Add a dedicated `security-room`
GitHub team (no parent, so it grants no repository permissions) that the
policy allows alongside core-maintainers, lead-maintainers and
security-managers, and seed it with the per-SDK leads named in the
thread. Validation and tests cover the new config; the deploy and
preview workflows pass CLOUDFLARE_API_TOKEN when the secret exists.

The existing `Maintainers` policy is adopted via the `import` resource
option behind cloudflare:importExistingPolicies, since Pulumi requires
imported inputs to match the live resource; a follow-up flips the flag
off so the include-rule change is applied.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YBarRtzEtwT2HvfcEvRbW7
@claude
claude Bot deployed to production September 29, 2026 19:10 Active
@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Pulumi Preview

Click to expand preview output
Previewing update (prod):
  pulumi:pulumi:Stack: (same)
    [urn=urn:pulumi:prod::mcp-access::pulumi:pulumi:Stack::mcp-access-prod]
    + pulumi:providers:cloudflare: (create)
        [urn=urn:pulumi:prod::mcp-access::pulumi:providers:cloudflare::cloudflare]
        apiToken               : [secret]
        userAgentOperatorSuffix: "pulumi/6.21.0"
        version                : "6.21.0"
    = cloudflare:index/zeroTrustAccessPolicy:ZeroTrustAccessPolicy: (import)
        [id=11a6814e-bb85-4ea2-aa12-6b081b09aa56]
        [urn=urn:pulumi:prod::mcp-access::cloudflare:index/zeroTrustAccessPolicy:ZeroTrustAccessPolicy::access-policy-security-room-maintainers]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:cloudflare::cloudflare::04da6b54-80e4-46f7-96ec-b56ff0331ba9]
        accountId: "c39d6379ccfdb20a3627eeddffa80ec9"
        decision : "allow"
        includes : [
            [0]: {
                githubOrganization: {
                    identityProviderId: "1e53bc11-a504-4572-92d1-4c8d56fc198b"
                    name              : "modelcontextprotocol"
                    team              : "core-maintainers"
                }
            }
            [1]: {
                githubOrganization: {
                    identityProviderId: "1e53bc11-a504-4572-92d1-4c8d56fc198b"
                    name              : "modelcontextprotocol"
                    team              : "lead-maintainers"
                }
            }
            [2]: {
                githubOrganization: {
                    identityProviderId: "1e53bc11-a504-4572-92d1-4c8d56fc198b"
                    name              : "modelcontextprotocol"
                    team              : "security-managers"
                }
            }
            [3]: {
                githubOrganization: {
                    identityProviderId: "1e53bc11-a504-4572-92d1-4c8d56fc198b"
                    name              : "modelcontextprotocol"
                    team              : "sdk-maintainers"
                }
            }
        ]
        name     : "Maintainers"
    + github:index/team:Team: (create)
        [urn=urn:pulumi:prod::mcp-access::github:index/team:Team::security-team]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:github::default_6_12_1::9dc4cfd7-8c80-477f-9406-ba2b0eddff00]
        description        : "MCP Security Team: SDK security leads who coordinate advisories across SDKs \n(Managed by github.com/modelcontextprotocol/access)"
        name               : "security-team"
        notificationSetting: "notifications_enabled"
        parentTeamId       : ""
        privacy            : "closed"
    ~ googleworkspace:index/orgUnit:OrgUnit: (update)
        [id=id:03ph8a2z0nc6rsr]
        [urn=urn:pulumi:prod::mcp-access::googleworkspace:index/orgUnit:OrgUnit::mcp-org-unit]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:googleworkspace::default_0_11_2::2a78e29b-bbb9-425e-a8de-1a161a6a7d9f]
        description      : "Model Context Protocol"
        name             : "Model Context Protocol"
        parentOrgUnitPath: "/"
    + github:index/teamMembership:TeamMembership: (create)
        [urn=urn:pulumi:prod::mcp-access::github:index/teamMembership:TeamMembership::yarolegovich-security-team]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:github::default_6_12_1::9dc4cfd7-8c80-477f-9406-ba2b0eddff00]
        role      : "member"
        teamId    : [unknown]
        username  : "yarolegovich"
    + github:index/teamMembership:TeamMembership: (create)
        [urn=urn:pulumi:prod::mcp-access::github:index/teamMembership:TeamMembership::daleseo-security-team]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:github::default_6_12_1::9dc4cfd7-8c80-477f-9406-ba2b0eddff00]
        role      : "member"
        teamId    : [unknown]
        username  : "daleseo"
    + github:index/teamMembership:TeamMembership: (create)
        [urn=urn:pulumi:prod::mcp-access::github:index/teamMembership:TeamMembership::felixweinberger-security-team]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:github::default_6_12_1::9dc4cfd7-8c80-477f-9406-ba2b0eddff00]
        role      : "member"
        teamId    : [unknown]
        username  : "felixweinberger"
    + github:index/teamMembership:TeamMembership: (create)
        [urn=urn:pulumi:prod::mcp-access::github:index/teamMembership:TeamMembership::guglielmo-san-security-team]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:github::default_6_12_1::9dc4cfd7-8c80-477f-9406-ba2b0eddff00]
        role      : "member"
        teamId    : [unknown]
        username  : "guglielmo-san"
    + github:index/teamMembership:TeamMembership: (create)
        [urn=urn:pulumi:prod::mcp-access::github:index/teamMembership:TeamMembership::halter73-security-team]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:github::default_6_12_1::9dc4cfd7-8c80-477f-9406-ba2b0eddff00]
        role      : "member"
        teamId    : [unknown]
        username  : "halter73"
    + github:index/teamMembership:TeamMembership: (create)
        [urn=urn:pulumi:prod::mcp-access::github:index/teamMembership:TeamMembership::KKonstantinov-security-team]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:github::default_6_12_1::9dc4cfd7-8c80-477f-9406-ba2b0eddff00]
        role      : "member"
        teamId    : [unknown]
        username  : "KKonstantinov"
    + github:index/teamMembership:TeamMembership: (create)
        [urn=urn:pulumi:prod::mcp-access::github:index/teamMembership:TeamMembership::koic-security-team]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:github::default_6_12_1::9dc4cfd7-8c80-477f-9406-ba2b0eddff00]
        role      : "member"
        teamId    : [unknown]
        username  : "koic"
    + github:index/teamMembership:TeamMembership: (create)
        [urn=urn:pulumi:prod::mcp-access::github:index/teamMembership:TeamMembership::Kludex-security-team]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:github::default_6_12_1::9dc4cfd7-8c80-477f-9406-ba2b0eddff00]
        role      : "member"
        teamId    : [unknown]
        username  : "Kludex"
    + github:index/teamMembership:TeamMembership: (create)
        [urn=urn:pulumi:prod::mcp-access::github:index/teamMembership:TeamMembership::mattzcarey-security-team]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:github::default_6_12_1::9dc4cfd7-8c80-477f-9406-ba2b0eddff00]
        role      : "member"
        teamId    : [unknown]
        username  : "mattzcarey"
    + github:index/teamMembership:TeamMembership: (create)
        [urn=urn:pulumi:prod::mcp-access::github:index/teamMembership:TeamMembership::maxisbey-security-team]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:github::default_6_12_1::9dc4cfd7-8c80-477f-9406-ba2b0eddff00]
        role      : "member"
        teamId    : [unknown]
        username  : "maxisbey"
    ~ googleworkspace:index/groupSettings:GroupSettings: (update)
        [id=catch-all@modelcontextprotocol.io]
        [urn=urn:pulumi:prod::mcp-access::googleworkspace:index/groupSettings:GroupSettings::catch-all]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:googleworkspace::default_0_11_2::2a78e29b-bbb9-425e-a8de-1a161a6a7d9f]
        allowExternalMembers : true
        email                : "catch-all@modelcontextprotocol.io"
        whoCanContactOwner   : "ALL_OWNERS_CAN_CONTACT"
        whoCanJoin           : "INVITED_CAN_JOIN"
        whoCanLeaveGroup     : "NONE_CAN_LEAVE"
        whoCanModerateMembers: "NONE"
        whoCanPostMessage    : "ANYONE_CAN_POST"
        whoCanViewGroup      : "ALL_MEMBERS_CAN_VIEW"
        whoCanViewMembership : "ALL_IN_DOMAIN_CAN_VIEW"
    ~ googleworkspace:index/groupSettings:GroupSettings: (update)
        [id=core-maintainers@modelcontextprotocol.io]
        [urn=urn:pulumi:prod::mcp-access::googleworkspace:index/groupSettings:GroupSettings::core-maintainers]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:googleworkspace::default_0_11_2::2a78e29b-bbb9-425e-a8de-1a161a6a7d9f]
        allowExternalMembers : false
        email                : "core-maintainers@modelcontextprotocol.io"
        whoCanContactOwner   : "ALL_OWNERS_CAN_CONTACT"
        whoCanJoin           : "INVITED_CAN_JOIN"
        whoCanLeaveGroup     : "NONE_CAN_LEAVE"
        whoCanModerateMembers: "NONE"
        whoCanPostMessage    : "ALL_OWNERS_CAN_POST"
        whoCanViewGroup      : "ALL_OWNERS_CAN_VIEW"
        whoCanViewMembership : "ALL_IN_DOMAIN_CAN_VIEW"
    ~ googleworkspace:index/groupSettings:GroupSettings: (update)
        [id=lead-maintainers@modelcontextprotocol.io]
        [urn=urn:pulumi:prod::mcp-access::googleworkspace:index/groupSettings:GroupSettings::lead-maintainers]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:googleworkspace::default_0_11_2::2a78e29b-bbb9-425e-a8de-1a161a6a7d9f]
        allowExternalMembers : false
        email                : "lead-maintainers@modelcontextprotocol.io"
        whoCanContactOwner   : "ALL_OWNERS_CAN_CONTACT"
        whoCanJoin           : "INVITED_CAN_JOIN"
        whoCanLeaveGroup     : "NONE_CAN_LEAVE"
        whoCanModerateMembers: "NONE"
        whoCanPostMessage    : "ALL_OWNERS_CAN_POST"
        whoCanViewGroup      : "ALL_OWNERS_CAN_VIEW"
        whoCanViewMembership : "ALL_IN_DOMAIN_CAN_VIEW"
    ~ googleworkspace:index/groupSettings:GroupSettings: (update)
        [id=appeals@modelcontextprotocol.io]
        [urn=urn:pulumi:prod::mcp-access::googleworkspace:index/groupSettings:GroupSettings::appeals]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:googleworkspace::default_0_11_2::2a78e29b-bbb9-425e-a8de-1a161a6a7d9f]
        allowExternalMembers : false
        email                : "appeals@modelcontextprotocol.io"
        whoCanContactOwner   : "ALL_OWNERS_CAN_CONTACT"
        whoCanJoin           : "INVITED_CAN_JOIN"
        whoCanLeaveGroup     : "NONE_CAN_LEAVE"
        whoCanModerateMembers: "NONE"
        whoCanPostMessage    : "ANYONE_CAN_POST"
        whoCanViewGroup      : "ALL_MEMBERS_CAN_VIEW"
        whoCanViewMembership : "ALL_IN_DOMAIN_CAN_VIEW"
    ~ googleworkspace:index/groupSettings:GroupSettings: (update)
        [id=moderators@modelcontextprotocol.io]
        [urn=urn:pulumi:prod::mcp-access::googleworkspace:index/groupSettings:GroupSettings::moderators]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:googleworkspace::default_0_11_2::2a78e29b-bbb9-425e-a8de-1a161a6a7d9f]
        allowExternalMembers : false
        email                : "moderators@modelcontextprotocol.io"
        whoCanContactOwner   : "ALL_OWNERS_CAN_CONTACT"
        whoCanJoin           : "INVITED_CAN_JOIN"
        whoCanLeaveGroup     : "NONE_CAN_LEAVE"
        whoCanModerateMembers: "NONE"
        whoCanPostMessage    : "ALL_OWNERS_CAN_POST"
        whoCanViewGroup      : "ALL_OWNERS_CAN_VIEW"
        whoCanViewMembership : "ALL_IN_DOMAIN_CAN_VIEW"
    ~ googleworkspace:index/groupSettings:GroupSettings: (update)
        [id=antitrust@modelcontextprotocol.io]
        [urn=urn:pulumi:prod::mcp-access::googleworkspace:index/groupSettings:GroupSettings::antitrust]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:googleworkspace::default_0_11_2::2a78e29b-bbb9-425e-a8de-1a161a6a7d9f]
        allowExternalMembers : true
        email                : "antitrust@modelcontextprotocol.io"
        whoCanContactOwner   : "ALL_OWNERS_CAN_CONTACT"
        whoCanJoin           : "INVITED_CAN_JOIN"
        whoCanLeaveGroup     : "NONE_CAN_LEAVE"
        whoCanModerateMembers: "NONE"
        whoCanPostMessage    : "ANYONE_CAN_POST"
        whoCanViewGroup      : "ALL_MEMBERS_CAN_VIEW"
        whoCanViewMembership : "ALL_IN_DOMAIN_CAN_VIEW"
    ~ googleworkspace:index/groupSettings:GroupSettings: (update)
        [id=maintainers@modelcontextprotocol.io]
        [urn=urn:pulumi:prod::mcp-access::googleworkspace:index/groupSettings:GroupSettings::maintainers]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:googleworkspace::default_0_11_2::2a78e29b-bbb9-425e-a8de-1a161a6a7d9f]
        allowExternalMembers : true
        email                : "maintainers@modelcontextprotocol.io"
        whoCanContactOwner   : "ALL_OWNERS_CAN_CONTACT"
        whoCanJoin           : "INVITED_CAN_JOIN"
        whoCanLeaveGroup     : "NONE_CAN_LEAVE"
        whoCanModerateMembers: "NONE"
        whoCanPostMessage    : "ALL_OWNERS_CAN_POST"
        whoCanViewGroup      : "ALL_OWNERS_CAN_VIEW"
        whoCanViewMembership : "ALL_IN_DOMAIN_CAN_VIEW"
    ~ googleworkspace:index/groupSettings:GroupSettings: (update)
        [id=registry-wg@modelcontextprotocol.io]
        [urn=urn:pulumi:prod::mcp-access::googleworkspace:index/groupSettings:GroupSettings::registry-wg]
        [provider=urn:pulumi:prod::mcp-access::pulumi:providers:googleworkspace::default_0_11_2::2a78e29b-bbb9-425e-a8de-1a161a6a7d9f]
        allowExternalMembers : true
        email                : "registry-wg@modelcontextprotocol.io"
        whoCanContactOwner   : "ALL_OWNERS_CAN_CONTACT"
        whoCanJoin           : "INVITED_CAN_JOIN"
        whoCanLeaveGroup     : "NONE_CAN_LEAVE"
        whoCanModerateMembers: "NONE"
        whoCanPostMessage    : "ALL_OWNERS_CAN_POST"
        whoCanViewGroup      : "ALL_OWNERS_CAN_VIEW"
        whoCanViewMembership : "ALL_IN_DOMAIN_CAN_VIEW"
    --outputs:--
  + cloudflareAccessPolicies : {
      + security-room-maintainers: {
          + accountId                   : "c39d6379ccfdb20a3627eeddffa80ec9"
          + appCount                    : 1
          + approvalGroups              : [unknown]
          + approvalRequired            : [unknown]
          + connectionRules             : {
              + rdp: {}
            }
          + createdAt                   : "2026-08-30T07:04:32Z"
          + decision                    : "allow"
          + excludes                    : [unknown]
          + id                          : "11a6814e-bb85-4ea2-aa12-6b081b09aa56"
          + includes                    : [
          +     [0]: {
                  + githubOrganization: {
                      + identityProviderId: "1e53bc11-a504-4572-92d1-4c8d56fc198b"
                      + name              : "modelcontextprotocol"
                      + team              : "core-maintainers"
                    }
                }
          +     [1]: {
                  + githubOrganization: {
                      + identityProviderId: "1e53bc11-a504-4572-92d1-4c8d56fc198b"
                      + name              : "modelcontextprotocol"
                      + team              : "lead-maintainers"
                    }
                }
          +     [2]: {
                  + githubOrganization: {
                      + identityProviderId: "1e53bc11-a504-4572-92d1-4c8d56fc198b"
                      + name              : "modelcontextprotocol"
                      + team              : "security-managers"
                    }
                }
          +     [3]: {
                  + githubOrganization: {
                      + identityProviderId: "1e53bc11-a504-4572-92d1-4c8d56fc198b"
                      + name              : "modelcontextprotocol"
                      + team              : "sdk-maintainers"
                    }
                }
            ]
          + isolationRequired           : [unknown]
          + mfaConfig                   : [unknown]
          + name                        : "Maintainers"
          + purposeJustificationPrompt  : [unknown]
          + purposeJustificationRequired: [unknown]
          + requires                    : [unknown]
          + reusable                    : true
          + sessionDuration             : [unknown]
          + updatedAt                   : "2026-09-10T06:23:41Z"
          + urn                         : "urn:pulumi:prod::mcp-access::cloudflare:index/zeroTrustAccessPolicy:ZeroTrustAccessPolicy::access-policy-security-room-maintainers"
        }
    }
  + cloudflareAccessPolicyIds: {
      + security-room-maintainers: "11a6814e-bb85-4ea2-aa12-6b081b09aa56"
    }
  ~ discordRoles             : {
      ~ administrators (synced)                                 : {
            guildId : "1358869848138059966"
            id      : "1460760673498959945"
            roleId  : "1460760673498959945"
            roleName: "administrators (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-administrators"
        }
      ~ agents working group (synced)                           : {
            guildId : "1358869848138059966"
            id      : "1539652800403996692"
            roleId  : "1539652800403996692"
            roleName: "agents working group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-agents-wg"
        }
      ~ auth fine-grained authorization working group (synced)  : {
            guildId : "1358869848138059966"
            id      : "1539652788047577128"
            roleId  : "1539652788047577128"
            roleName: "auth fine-grained authorization working group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-auth-wg-fine-grained-authz"
        }
      ~ auth interest group (synced)                            : {
            guildId : "1358869848138059966"
            id      : "1460760779107209370"
            roleId  : "1460760779107209370"
            roleName: "auth interest group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-auth-ig"
        }
      ~ auth tool scopes working group (synced)                 : {
            guildId : "1358869848138059966"
            id      : "1539652784092090369"
            roleId  : "1539652784092090369"
            roleName: "auth tool scopes working group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-auth-wg-tool-scopes"
        }
      ~ c# sdk maintainers (synced)                             : {
            guildId : "1358869848138059966"
            id      : "1460760658848252036"
            roleId  : "1460760658848252036"
            roleName: "c# sdk maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-csharp-sdk"
        }
      ~ client implementor interest group (synced)              : {
            guildId : "1358869848138059966"
            id      : "1460760806584094783"
            roleId  : "1460760806584094783"
            roleName: "client implementor interest group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-client-implementor-ig"
        }
      ~ community managers (synced)                             : {
            guildId : "1358869848138059966"
            id      : "1461488567162503189"
            roleId  : "1461488567162503189"
            roleName: "community managers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-community-managers"
        }
      ~ community moderators (synced)                           : {
            guildId : "1358869848138059966"
            id      : "1460760656226680903"
            roleId  : "1460760656226680903"
            roleName: "community moderators (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-moderators"
        }
      ~ core maintainers (synced)                               : {
            guildId : "1358869848138059966"
            id      : "1460760682076307516"
            roleId  : "1460760682076307516"
            roleName: "core maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-core-maintainers"
        }
      ~ core primitive working group (synced)                   : {
            guildId : "1358869848138059966"
            id      : "1540128486218539018"
            roleId  : "1540128486218539018"
            roleName: "core primitive working group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-core-primitive-wg"
        }
      ~ enterprise-managed authorization interest group (synced): {
            guildId : "1358869848138059966"
            id      : "1539652812743381082"
            roleId  : "1539652812743381082"
            roleName: "enterprise-managed authorization interest group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-enterprise-managed-authorization-ig"
        }
      ~ file uploads working group (synced)                     : {
            guildId : "1358869848138059966"
            id      : "1497125934359249018"
            roleId  : "1497125934359249018"
            roleName: "file uploads working group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-file-uploads-wg"
        }
      ~ filesystems working group (synced)                      : {
            guildId : "1358869848138059966"
            id      : "1547367326343630958"
            roleId  : "1547367326343630958"
            roleName: "filesystems working group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-filesystems-wg"
        }
      ~ financial services interest group (synced)              : {
            guildId : "1358869848138059966"
            id      : "1460760782605123726"
            roleId  : "1460760782605123726"
            roleName: "financial services interest group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-financial-services-ig"
        }
      ~ gateways interest group (synced)                        : {
            guildId : "1358869848138059966"
            id      : "1461148028646854859"
            roleId  : "1461148028646854859"
            roleName: "gateways interest group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-gateways-ig"
        }
      ~ go sdk maintainers (synced)                             : {
            guildId : "1358869848138059966"
            id      : "1460760804134752443"
            roleId  : "1460760804134752443"
            roleName: "go sdk maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-go-sdk"
        }
      ~ infrastructure working group (synced)                   : {
            guildId : "1358869848138059966"
            id      : "1551964002974830692"
            roleId  : "1551964002974830692"
            roleName: "infrastructure working group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-infrastructure-wg"
        }
      ~ inspector maintainers (synced)                          : {
            guildId : "1358869848138059966"
            id      : "1460760676367597740"
            roleId  : "1460760676367597740"
            roleName: "inspector maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-inspector-maintainers"
        }
      ~ interceptors working group (synced)                     : {
            guildId : "1358869848138059966"
            id      : "1496277766046355539"
            roleId  : "1496277766046355539"
            roleName: "interceptors working group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-interceptors-wg"
        }
      ~ java sdk maintainers (synced)                           : {
            guildId : "1358869848138059966"
            id      : "1460760695821041767"
            roleId  : "1460760695821041767"
            roleName: "java sdk maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-java-sdk"
        }
      ~ kotlin sdk maintainers (synced)                         : {
            guildId : "1358869848138059966"
            id      : "1460760698316652557"
            roleId  : "1460760698316652557"
            roleName: "kotlin sdk maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-kotlin-sdk"
        }
      ~ lead maintainers (synced)                               : {
            guildId : "1358869848138059966"
            id      : "1460760679064535238"
            roleId  : "1460760679064535238"
            roleName: "lead maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-lead-maintainers"
        }
      ~ maintainers (synced)                                    : {
            guildId : "1358869848138059966"
            id      : "1460760670395039755"
            roleId  : "1460760670395039755"
            roleName: "maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-maintainers"
        }
      ~ mcp apps working group (synced)                         : {
            guildId : "1358869848138059966"
            id      : "1461149104573907161"
            roleId  : "1461149104573907161"
            roleName: "mcp apps working group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-mcp-apps-wg"
        }
      ~ php sdk maintainers (synced)                            : {
            guildId : "1358869848138059966"
            id      : "1460760711796887821"
            roleId  : "1460760711796887821"
            roleName: "php sdk maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-php-sdk"
        }
      ~ primitive grouping interest group (synced)              : {
            guildId : "1358869848138059966"
            id      : "1471155142358339685"
            roleId  : "1471155142358339685"
            roleName: "primitive grouping interest group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-primitive-grouping-ig"
        }
      ~ python sdk maintainers (synced)                         : {
            guildId : "1358869848138059966"
            id      : "1460760717434163281"
            roleId  : "1460760717434163281"
            roleName: "python sdk maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-python-sdk"
        }
      ~ reference servers maintainers (synced)                  : {
            guildId : "1358869848138059966"
            id      : "1460760661985464506"
            roleId  : "1460760661985464506"
            roleName: "reference servers maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-reference-servers-maintainers"
        }
      ~ registry maintainers (synced)                           : {
            guildId : "1358869848138059966"
            id      : "1460760690611720404"
            roleId  : "1460760690611720404"
            roleName: "registry maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-registry-maintainers"
        }
      ~ ruby sdk maintainers (synced)                           : {
            guildId : "1358869848138059966"
            id      : "1460760769758101595"
            roleId  : "1460760769758101595"
            roleName: "ruby sdk maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-ruby-sdk"
        }
      ~ rust sdk maintainers (synced)                           : {
            guildId : "1358869848138059966"
            id      : "1460760775705493770"
            roleId  : "1460760775705493770"
            roleName: "rust sdk maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-rust-sdk"
        }
      ~ sdk maintainers (synced)                                : {
            guildId : "1358869848138059966"
            id      : "1460760687444758623"
            roleId  : "1460760687444758623"
            roleName: "sdk maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-sdk-maintainers"
        }
      ~ server card working group (synced)                      : {
            guildId : "1358869848138059966"
            id      : "1493598979357671554"
            roleId  : "1493598979357671554"
            roleName: "server card working group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-server-card-wg"
        }
      ~ skills over mcp working group (synced)                  : {
            guildId : "1358869848138059966"
            id      : "1539652804610621562"
            roleId  : "1539652804610621562"
            roleName: "skills over mcp working group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-skills-over-mcp-wg"
        }
      ~ swift sdk maintainers (synced)                          : {
            guildId : "1358869848138059966"
            id      : "1460760701344813136"
            roleId  : "1460760701344813136"
            roleName: "swift sdk maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-swift-sdk"
        }
      ~ tool annotations interest group (synced)                : {
            guildId : "1358869848138059966"
            id      : "1483420327001329685"
            roleId  : "1483420327001329685"
            roleName: "tool annotations interest group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-tool-annotations-ig"
        }
      ~ transports working group (synced)                       : {
            guildId : "1358869848138059966"
            id      : "1460760773134651505"
            roleId  : "1460760773134651505"
            roleName: "transports working group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-transport-wg"
        }
      ~ triggers & events working group (synced)                : {
            guildId : "1358869848138059966"
            id      : "1486488186405392518"
            roleId  : "1486488186405392518"
            roleName: "triggers & events working group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-triggers-events-wg"
        }
      ~ typescript sdk maintainers (synced)                     : {
            guildId : "1358869848138059966"
            id      : "1460760714607071465"
            roleId  : "1460760714607071465"
            roleName: "typescript sdk maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-typescript-sdk"
        }
      ~ use-mcp maintainers (synced)                            : {
            guildId : "1358869848138059966"
            id      : "1460760684643221556"
            roleId  : "1460760684643221556"
            roleName: "use-mcp maintainers (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-use-mcp-maintainers"
        }
      ~ wg/ig facilitators (synced)                             : {
            guildId : "1358869848138059966"
            id      : "1466097565048246467"
            roleId  : "1466097565048246467"
            roleName: "wg/ig facilitators (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-wg-ig-facilitators"
        }
    }
  ~ githubTeams              : {
      ~ agents-wg                    : {
            createDefaultMaintainer: false
            description            : "Agents Working Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"6cb522b881ca38256fac257761873f59a35890b963ca723a3a03cb619299662f\""
            id                     : "17337325"
            membersCount           : 4
            name                   : "agents-wg"
            nodeId                 : "T_kwDOCt2Azc4BCIvt"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "agents-wg"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::agents-wg"
        }
      ~ auth-maintainers             : {
            createDefaultMaintainer: false
            description            : "Auth Maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"4a8112a37f5c821d4e68178894b8930a0cf28c827c51264689fd4d0ab3df3cec\""
            id                     : "16083315"
            membersCount           : 7
            name                   : "auth-maintainers"
            nodeId                 : "T_kwDOCt2Azc4A9Wlz"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "auth-maintainers"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::auth-maintainers"
        }
      ~ auth-wg-fine-grained-authz   : {
            createDefaultMaintainer: false
            description            : "Auth Fine-Grained Authorization Working Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"79fb8df5303795c041302c1fdebc40ffc9be5814afb788057136ca626fcf82fc\""
            id                     : "19051555"
            membersCount           : 0
            name                   : "auth-wg-fine-grained-authz"
            nodeId                 : "T_kwDOCt2Azc4BIrQj"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "auth-wg-fine-grained-authz"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::auth-wg-fine-grained-authz"
        }
      ~ auth-wg-tool-scopes          : {
            createDefaultMaintainer: false
            description            : "Auth Tool Scopes Working Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"60723634ba8b9ffcc2d45c694fc764ccc94f563d918dc50e0abd5521beacab66\""
            id                     : "19051557"
            membersCount           : 0
            name                   : "auth-wg-tool-scopes"
            nodeId                 : "T_kwDOCt2Azc4BIrQl"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "auth-wg-tool-scopes"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::auth-wg-tool-scopes"
        }
      ~ conformance-auth             : {
            createDefaultMaintainer: false
            description            : "Conformance authorization-server code owners \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"0a1f9b514c31b1733f06a7ea4f1ea11f89697d94226393be74a6a6cadb5cbf06\""
            id                     : "19337897"
            membersCount           : 2
            name                   : "conformance-auth"
            nodeId                 : "T_kwDOCt2Azc4BJxKp"
            notificationSetting    : "notifications_enabled"
            privacy                : "closed"
            slug                   : "conformance-auth"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::conformance-auth"
        }
      ~ core-maintainers             : {
            createDefaultMaintainer: false
            description            : "Core maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"cb32398e3d7852a1190123938b817a9b4d1a641609f4c197604d0da500152446\""
            id                     : "14435865"
            membersCount           : 11
            name                   : "core-maintainers"
            nodeId                 : "T_kwDOCt2Azc4A3EYZ"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435861"
            parentTeamReadId       : "14435861"
            parentTeamReadSlug     : "steering-committee"
            privacy                : "closed"
            slug                   : "core-maintainers"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::core-maintainers"
        }
      ~ core-primitive-wg            : {
            createDefaultMaintainer: false
            description            : "Core Primitive Working Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"b1525b7465593536feba31cc8303bd37cd49a0e7007d32c1a6b256fc7ee5b612\""
            id                     : "19087061"
            membersCount           : 2
            name                   : "core-primitive-wg"
            nodeId                 : "T_kwDOCt2Azc4BIz7V"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "core-primitive-wg"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::core-primitive-wg"
        }
      ~ csharp-sdk                   : {
            createDefaultMaintainer: false
            description            : "Official C# SDK maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"580685136ad2ce59c38e487d82e5baa87337ba53072d167683ce0c98571b9fd6\""
            id                     : "14435898"
            membersCount           : 10
            name                   : "csharp-sdk"
            nodeId                 : "T_kwDOCt2Azc4A3EY6"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435871"
            parentTeamReadId       : "14435871"
            parentTeamReadSlug     : "sdk-maintainers"
            privacy                : "closed"
            slug                   : "csharp-sdk"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::csharp-sdk"
        }
      ~ csharp-sdk-admin             : {
            createDefaultMaintainer: false
            description            : "C# SDK repository admins \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"5d559da480c0975de105f028bc3ff8a98decdaa0106bc69f0c3031b9512bada6\""
            id                     : "16644883"
            membersCount           : 8
            name                   : "csharp-sdk-admin"
            nodeId                 : "T_kwDOCt2Azc4A_fsT"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435898"
            parentTeamReadId       : "14435898"
            parentTeamReadSlug     : "csharp-sdk"
            privacy                : "closed"
            slug                   : "csharp-sdk-admin"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::csharp-sdk-admin"
        }
      ~ docs-maintainers             : {
            createDefaultMaintainer: false
            description            : "MCP docs maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"7aa907ee69831fc2b2e84fbb30a391c343dfeca8213748ba10bed7362aa8bf44\""
            id                     : "15811679"
            membersCount           : 13
            name                   : "docs-maintainers"
            nodeId                 : "T_kwDOCt2Azc4A8URf"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435861"
            parentTeamReadId       : "14435861"
            parentTeamReadSlug     : "steering-committee"
            privacy                : "closed"
            slug                   : "docs-maintainers"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::docs-maintainers"
        }
      ~ file-uploads-wg              : {
            createDefaultMaintainer: false
            description            : "File Uploads Working Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"02ac36a5acc5f635bfda61484b4b193a1cc1ae8af56193307eaa92ec3880d7dd\""
            id                     : "17260661"
            membersCount           : 4
            name                   : "file-uploads-wg"
            nodeId                 : "T_kwDOCt2Azc4BB2B1"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "file-uploads-wg"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::file-uploads-wg"
        }
      ~ filesystems-wg               : {
            createDefaultMaintainer: false
            description            : "Filesystems Working Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"c904f7cdfe0bd65900f4faa019d19193c6e86648f28bb5b776a573ef1446d714\""
            id                     : "19423521"
            membersCount           : 4
            name                   : "filesystems-wg"
            nodeId                 : "T_kwDOCt2Azc4BKGEh"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "filesystems-wg"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::filesystems-wg"
        }
      ~ go-sdk                       : {
            createDefaultMaintainer: false
            description            : "The Go SDK Team \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"eef143fb1a1ede4b1825488a860025f1ce0124ac366458d740688a0e64284b31\""
            id                     : "14435896"
            membersCount           : 10
            name                   : "go-sdk"
            nodeId                 : "T_kwDOCt2Azc4A3EY4"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435871"
            parentTeamReadId       : "14435871"
            parentTeamReadSlug     : "sdk-maintainers"
            privacy                : "closed"
            slug                   : "go-sdk"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::go-sdk"
        }
      ~ ig-financial-services        : {
            createDefaultMaintainer: false
            description            : "Financial Services Interest Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"b7217fcaf157d3dbbab3a3edcbc6ced50c8454affa6b277261cebf4097e5f15d\""
            id                     : "14435884"
            membersCount           : 5
            name                   : "ig-financial-services"
            nodeId                 : "T_kwDOCt2Azc4A3EYs"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435869"
            parentTeamReadId       : "14435869"
            parentTeamReadSlug     : "interest-groups"
            privacy                : "closed"
            slug                   : "ig-financial-services"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::ig-financial-services"
        }
      ~ infrastructure-wg            : {
            createDefaultMaintainer: false
            description            : "Infrastructure Working Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"a2bedb691be7c96e536850cf09dbf6a0e21f84b1aea9d2379d337f17a63c2b54\""
            id                     : "19662960"
            membersCount           : 4
            name                   : "infrastructure-wg"
            nodeId                 : "T_kwDOCt2Azc4BLAhw"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "infrastructure-wg"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::infrastructure-wg"
        }
      ~ inspector-maintainers        : {
            createDefaultMaintainer: false
            description            : "MCP Inspector maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"94fada70c4aa66cf9f836d1c947a1a245df4f90b5ab8c49c3f5afbd12a2c6e28\""
            id                     : "14642559"
            membersCount           : 4
            name                   : "inspector-maintainers"
            nodeId                 : "T_kwDOCt2Azc4A321_"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435861"
            parentTeamReadId       : "14435861"
            parentTeamReadSlug     : "steering-committee"
            privacy                : "closed"
            slug                   : "inspector-maintainers"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::inspector-maintainers"
        }
      ~ interceptors-wg              : {
            createDefaultMaintainer: false
            description            : "Interceptors Working Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"1770f355c5576a385fa99df03b3f03d463ceb1864ad45fcf40b25be33f3e30f2\""
            id                     : "17218506"
            membersCount           : 9
            name                   : "interceptors-wg"
            nodeId                 : "T_kwDOCt2Azc4BBrvK"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "interceptors-wg"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::interceptors-wg"
        }
      ~ interest-groups              : {
            createDefaultMaintainer: false
            description            : "Interest Groups \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"53f7c9461bb60402ba8560f6f1a5a8dd440b5be03a8f0ec3fcac27eba4945516\""
            id                     : "14435869"
            membersCount           : 18
            name                   : "interest-groups"
            nodeId                 : "T_kwDOCt2Azc4A3EYd"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435861"
            parentTeamReadId       : "14435861"
            parentTeamReadSlug     : "steering-committee"
            privacy                : "closed"
            slug                   : "interest-groups"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::interest-groups"
        }
      ~ java-sdk                     : {
            createDefaultMaintainer: false
            description            : "Official Java SDK maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"af9732146199266f4862e535cef08553cc785c0d41de7cc852f6de70fbb614b5\""
            id                     : "14435899"
            membersCount           : 4
            name                   : "java-sdk"
            nodeId                 : "T_kwDOCt2Azc4A3EY7"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435871"
            parentTeamReadId       : "14435871"
            parentTeamReadSlug     : "sdk-maintainers"
            privacy                : "closed"
            slug                   : "java-sdk"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::java-sdk"
        }
      ~ kotlin-sdk                   : {
            createDefaultMaintainer: false
            description            : "Official Kotlin SDK maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"c440d414c74e1a35b7aaa0ba0f818ae70cfde9f41e5fa26e672a471b0e72d2b2\""
            id                     : "14435895"
            membersCount           : 6
            name                   : "kotlin-sdk"
            nodeId                 : "T_kwDOCt2Azc4A3EY3"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435871"
            parentTeamReadId       : "14435871"
            parentTeamReadSlug     : "sdk-maintainers"
            privacy                : "closed"
            slug                   : "kotlin-sdk"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::kotlin-sdk"
        }
      ~ lead-maintainers             : {
            createDefaultMaintainer: false
            description            : "Lead core maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"d3f561950e2fd457b6048fb1dcc535865e1199cb9168c9f3f2f073c6756db624\""
            id                     : "15811944"
            membersCount           : 5
            name                   : "lead-maintainers"
            nodeId                 : "T_kwDOCt2Azc4A8UVo"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435861"
            parentTeamReadId       : "14435861"
            parentTeamReadSlug     : "steering-committee"
            privacy                : "closed"
            slug                   : "lead-maintainers"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::lead-maintainers"
        }
      ~ maintainers                  : {
            createDefaultMaintainer: false
            description            : "General maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"c8d14bc60b0b0bf4dbdfdedf963f4f811bf37241969d1264ce998172ddac6ea1\""
            id                     : "19344364"
            membersCount           : 22
            name                   : "maintainers"
            nodeId                 : "T_kwDOCt2Azc4BJyvs"
            notificationSetting    : "notifications_enabled"
            privacy                : "closed"
            slug                   : "maintainers"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::maintainers"
        }
      ~ mcp-apps-sdk                 : {
            createDefaultMaintainer: false
            description            : "Official MCP Apps SDK maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"29efb1b0a7aba868f37c013a3290cd763491a2d2c96fdc1207db7a13c1c97856\""
            id                     : "15826445"
            membersCount           : 5
            name                   : "mcp-apps-sdk"
            nodeId                 : "T_kwDOCt2Azc4A8X4N"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435871"
            parentTeamReadId       : "14435871"
            parentTeamReadSlug     : "sdk-maintainers"
            privacy                : "closed"
            slug                   : "mcp-apps-sdk"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::mcp-apps-sdk"
        }
      ~ mcp-apps-wg                  : {
            createDefaultMaintainer: false
            description            : "MCP Apps Working Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"8654237e292b6c5f8f27cfe6ebca975557317283d4cb14b8054ee3271ed2df05\""
            id                     : "15826444"
            membersCount           : 3
            name                   : "mcp-apps-wg"
            nodeId                 : "T_kwDOCt2Azc4A8X4M"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "mcp-apps-wg"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::mcp-apps-wg"
        }
      ~ mcpb-maintainers             : {
            createDefaultMaintainer: false
            description            : "MCPB (Model Context Protocol Bundle) maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"186aaa7d971ab809d1f1e7ab9a7c2d6a65ca6f287c98d43d8465e3eee4e3a07d\""
            id                     : "14899069"
            membersCount           : 5
            name                   : "mcpb-maintainers"
            nodeId                 : "T_kwDOCt2Azc4A41d9"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435861"
            parentTeamReadId       : "14435861"
            parentTeamReadSlug     : "steering-committee"
            privacy                : "closed"
            slug                   : "mcpb-maintainers"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::mcpb-maintainers"
        }
      ~ moderators                   : {
            createDefaultMaintainer: false
            description            : "Community moderators \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"dd7c498b1bfb601605dbe38d655abc36e7a44bafa4bbc743195a29f343c448e7\""
            id                     : "14435866"
            membersCount           : 12
            name                   : "moderators"
            nodeId                 : "T_kwDOCt2Azc4A3EYa"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435861"
            parentTeamReadId       : "14435861"
            parentTeamReadSlug     : "steering-committee"
            privacy                : "closed"
            slug                   : "moderators"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::moderators"
        }
      ~ php-sdk                      : {
            createDefaultMaintainer: false
            description            : "Official PHP SDK maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"b13e08420eaf776b17c9d66ebf4ef6bcd8d7e30ef78e7415152e3224adebfb13\""
            id                     : "14435889"
            membersCount           : 9
            name                   : "php-sdk"
            nodeId                 : "T_kwDOCt2Azc4A3EYx"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435871"
            parentTeamReadId       : "14435871"
            parentTeamReadSlug     : "sdk-maintainers"
            privacy                : "closed"
            slug                   : "php-sdk"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::php-sdk"
        }
      ~ primitive-grouping-ig        : {
            createDefaultMaintainer: false
            description            : "Primitive Grouping Interest Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"a5296a6a2d1b424cf5659fd8c229e9aea7c7b5e31d5c6f27c4f0cfe5ce0dadbe\""
            id                     : "16220576"
            membersCount           : 3
            name                   : "primitive-grouping-ig"
            nodeId                 : "T_kwDOCt2Azc4A94Gg"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435869"
            parentTeamReadId       : "14435869"
            parentTeamReadSlug     : "interest-groups"
            privacy                : "closed"
            slug                   : "primitive-grouping-ig"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::primitive-grouping-ig"
        }
      ~ python-sdk                   : {
            createDefaultMaintainer: false
            description            : "Official Python SDK maintainers 

... (truncated)

The team allowed through the Cloudflare Access policy represents the
MCP Security Team as a whole (SDK security leads who coordinate
advisories across SDKs), not only sign-in to the security room, so name
the role and GitHub team `security-team`. It stays parentless so it
inherits no repository permissions.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YBarRtzEtwT2HvfcEvRbW7
@claude
claude Bot deployed to production September 29, 2026 19:17 Active
@claude claude Bot changed the title Manage the security-room Cloudflare Access policy from config Manage the security-room Cloudflare Access policy from config via a security-team GitHub team Sep 29, 2026
…oken

The secret and Pulumi config key are dedicated to Access policy role
management (Account > Access: Apps and Policies > Edit only), so name
them CLOUDFLARE_ROLE_MANAGEMENT_TOKEN / cloudflare:roleManagementToken.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YBarRtzEtwT2HvfcEvRbW7
@claude
claude Bot deployed to production September 29, 2026 20:35 Active
@localden
localden marked this pull request as ready for review September 29, 2026 22:25
@localden
localden requested a review from a team as a code owner September 29, 2026 22:25
@claude
claude Bot deployed to production September 29, 2026 22:26 Active
@localden
localden merged commit 542e95c into main Sep 29, 2026
6 checks passed
@localden
localden deleted the claude/cloudflare-access-policy branch September 29, 2026 22:27
localden pushed a commit that referenced this pull request Sep 29, 2026
#198)

The first deploy of #195 adopted the live policy as-is. Turning off the
import lets Pulumi replace sdk-maintainers with security-team.


Claude-Session: https://claude.ai/code/session_01YBarRtzEtwT2HvfcEvRbW7

Co-authored-by: Claude <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
production — 73dd1097 Deployed Sep 29, 2026 by claude[bot] via Preview Changes #318
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants