Skip to content

Add npm/PyPI package publishing access management (config + drift detection) - #169

Draft
claude[bot] wants to merge 2 commits into
mainfrom
claude/npm-pypi-package-access
Draft

Add npm/PyPI package publishing access management (config + drift detection)#169
claude[bot] wants to merge 2 commits into
mainfrom
claude/npm-pypi-package-access

Conversation

@claude

@claude claude Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Requested by Den Delimarsky · Slack thread

Before / After

Before: who can publish @modelcontextprotocol/* npm packages and the MCP PyPI projects is managed ad hoc in the registry web UIs — invisible to this repo, unreviewed, and unaudited. After: expected registry access is declared here next to the GitHub/Google/Discord config, a weekly CI job surfaces drift between the declared state and the live npm registry, and changes are applied by a maintainer from a generated command plan. PyPI state is declared for audit with a manual runbook.

How

  • src/config/utils.tsMember gains optional npm / pypi identity fields (documented like discord), populated in src/config/users.ts only where the mapping was verified (see below).
  • src/config/packageAccess.ts — npm org name, expected org membership (derived from members' npm fields plus an explicit UNMAPPED_NPM_USERS list), per-package maintainers + trusted publisher (repo/workflow taken from npm provenance attestations) for sdk, inspector, and server-everything, and a default policy for the org's other ~50 packages (base maintainer set, publish via trusted publishing). PyPI: declared rosters for mcp, mcp-server-git, mcp-server-fetch, mcp-server-time. Import-safe for the validation scripts — pure data + helpers, no network.
  • scripts/check-package-drift.ts (npm run check-package-drift) — read-only npm drift check using NPM_TOKEN: org roster, org package enumeration, per-package maintainers, trusted-publisher config (GET /-/package/{pkg}/trust, degrading to a warning when the token can't read it). Prints a drift report and a remediation plan of exact npm org / npm owner commands to paste into one 2FA-approved session. Exits 1 on drift; prints a skip notice and exits 0 without a token.
  • .github/workflows/package-drift.yml — weekly + workflow_dispatch; no-ops gracefully when the NPM_READ_TOKEN secret is absent (same optional-credential pattern as Discord). deploy.yml/preview.yml untouched.
  • scripts/validate-config.ts / test-config.ts — validate the new config (usernames referenced by packages must exist on a member or the unmapped list, no duplicate npm/pypi usernames, no stale unmapped entries, org-scoped package names, org-owned trusted-publisher repos).
  • README — runbook: npm apply procedure (npm's documented pattern of scripting CLI calls inside the website's 5-minute 2FA-skip window), PyPI manual procedures (maintainer invite + email acceptance, trusted publisher via UI), and follow-up recommendations.

Why no Pulumi resources: since August 2026 every npm governance mutation (org/team membership, maintainer add/remove, trusted publishing, token management) requires an interactive 2FA challenge — tokens with "bypass 2FA" get 403, and write-capable tokens are capped at 90-day lifetime anyway. Only reads are headless-automatable, hence config + read-only drift detection + human-applied plan. PyPI has no management API at all (web-UI only, maintainer invites accepted by email), so PyPI automation is deliberately out of scope.

Verified identity mappings (populated in users.ts):

Registry Username Member Evidence
npm jspahrsummers jspahrsummers identical username; known lead maintainer
npm pcarleton pcarleton registry email paul@modelcontextprotocol.io matches member's GWS prefix
npm thedsp dsp-ant registry email david@modelcontextprotocol.io matches member's email
npm fweinberger felixweinberger registry email fweinberger@anthropic.com matches name
npm ochafik-ant ochafik registry email ochafik@anthropic.com matches GitHub username + name
npm cliffhall cliffhall identical username; registry email cliff@futurescale.com matches member's email
PyPI dsp dsp identical username; known mcp project account
PyPI jspahrsummers jspahrsummers identical username; known mcp project account
PyPI Kludex Kludex identical username; known mcp project account
PyPI maxisbey maxisbey identical username; known mcp project account

Not mapped (left out rather than guessed):

  • npm ashwin-ant (registry email ashwin@anthropic.com) — current maintainer on all three key packages but no matching entry in users.ts; declared in UNMAPPED_NPM_USERS so the drift check doesn't propose removing them.
  • PyPI rosters for mcp-server-git / mcp-server-fetch / mcp-server-time — PyPI exposes rosters only in the web UI and the pages sit behind a client challenge; declared empty with a note asking a project owner to fill them in from the Manage → Collaborators page.

Open questions

  1. Unverified mappings — is ashwin-ant on npm one of our members (and under which GitHub account)? Who holds roles on the mcp-server-* PyPI projects?
  2. npm teams — should we mirror the role structure with npm org teams (npm team + per-team package grants) instead of flat per-package maintainer lists? Left out for now to keep the declared model matching what the registry actually shows.
  3. Token provisioning — someone with npm org access needs to create the read-only granular access token (organization read access, no write, longest allowed expiry) and add it as the NPM_READ_TOKEN Actions secret; note it also becomes visible to same-repo PR preview runs if ever added to those workflows (it isn't in this PR). Token creation itself requires interactive 2FA, so rotation is a manual calendar item.
  4. PyPI organization — apply for a free PyPI community organization (org-owned projects, team-based access)? Recommended in the README; needs an owner to file the request. Related naming constraint: the PyPI project name modelcontextprotocol is registered by an unrelated party, so Python packages stay under mcp* names unless a PEP 541 transfer is ever pursued.

…ection)

Declare expected npm org membership, per-package maintainers and trusted
publishers, and PyPI project rosters in src/config/packageAccess.ts, with
npm/pypi identity fields on members in users.ts.

Deliberately outside the Pulumi resource graph: npm governance writes
require an interactive 2FA challenge since August 2026 (read endpoints
still work with a granular access token), and PyPI has no management API
at all. Drift against the live npm registry is detected read-only by
scripts/check-package-drift.ts (weekly via package-drift.yml, no-op when
the NPM_READ_TOKEN secret is absent), which emits a remediation plan of
npm CLI commands for a maintainer to run in one 2FA-approved session.
PyPI procedures are documented as a manual runbook in the README.
@claude
claude Bot deployed to production August 11, 2026 22:00 Active
Comment thread scripts/check-package-drift.ts Fixed
Comment thread scripts/check-package-drift.ts Fixed
@github-actions

github-actions Bot commented Aug 11, 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]
    ~ 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: "/"
    ~ 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=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=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"
    ~ 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=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=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=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=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"
    --outputs:--
  ~ 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 interest group (synced)            : {
            guildId : "1358869848138059966"
            id      : "1460760693585215508"
            roleId  : "1460760693585215508"
            roleName: "agents interest group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-agents-ig"
        }
      ~ 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"
        }
      ~ 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"
        }
      ~ 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"
        }
      ~ 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"
        }
      ~ 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"
        }
      ~ server identity working group (synced)    : {
            guildId : "1358869848138059966"
            id      : "1460760759024750644"
            roleId  : "1460760759024750644"
            roleName: "server identity working group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-server-identity-wg"
        }
      ~ skills over mcp interest group (synced)   : {
            guildId : "1358869848138059966"
            id      : "1483146569464156412"
            roleId  : "1483146569464156412"
            roleName: "skills over mcp interest group (synced)"
            token   : [secret]
            urn     : "urn:pulumi:prod::mcp-access::pulumi-nodejs:dynamic:Resource::discord-role-skills-over-mcp-ig"
        }
      ~ 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/\"c5b5df3d164d7c60d023cb65d473ecebe347e53d94b84866eb72b5be46b764bb\""
            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/\"7ec4f76af45d0ecd155644a412cc3424ac3cc4e3e2fe94c8e6947008cd6ab91b\""
            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"
        }
      ~ core-maintainers             : {
            createDefaultMaintainer: false
            description            : "Core maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"93ece707dc7e7cb952d4cc028172efd3e6d805f1c7be465d9eb76c4cdca36676\""
            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"
        }
      ~ csharp-sdk                   : {
            createDefaultMaintainer: false
            description            : "Official C# SDK maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"f4f685e0698d688fc63505584ba909ea1de367d4584f5b2174370aa065aa6020\""
            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/\"a9c3c6c0c2c1a94865c6b5e3f89ac23487d51badeada72ce4a5c76855e6bc5d3\""
            id                     : "16644883"
            membersCount           : 6
            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/\"de3b7c3f0eaa7686311854c930621f0175161916d9c7ab20fd97ab411b58a989\""
            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/\"aa4da392b38d4919e573d019fa4a1b89b9f457843d7e57554d4080270bed71d2\""
            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"
        }
      ~ go-sdk                       : {
            createDefaultMaintainer: false
            description            : "The Go SDK Team \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"3cd14315dd4af07bdae98fbb1029054000318036e429950dca35e2200b781cf4\""
            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/\"864aff03703373b5bcbe8895c3a3921ec53ebfaee2484d4e46dc4d8e680789cf\""
            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"
        }
      ~ inspector-maintainers        : {
            createDefaultMaintainer: false
            description            : "MCP Inspector maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"b71ecd350d863bc1192947735e8b42a34001bc5cadfc16e3037f47bd4b7c4b8a\""
            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/\"c4d680642a74591b1d3876181dc367987b3e23902dea704df77f65de1040cc1b\""
            id                     : "17218506"
            membersCount           : 5
            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/\"9ad07920680e6857d5aea890f502998b7517ab434e69094a41e4acaf2174be34\""
            id                     : "14435869"
            membersCount           : 21
            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/\"295e1ca454a3de65c54e7df90d238fa6776dd48cca411276eaa41e0ff55c7984\""
            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/\"dc8a621dcae9def5f07609b47a5f874ea4093efa8d481b0c607e255b0563f5be\""
            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/\"15748b6e084cf440d47705bf53cdb07402495eb641183d904be1d9aea4c9bfb6\""
            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"
        }
      ~ mcp-apps-sdk                 : {
            createDefaultMaintainer: false
            description            : "Official MCP Apps SDK maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"2f1c61ce242bee9d28b02b32f62cc60e399a5a090f501490e0e64cc4edc79db3\""
            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/\"585cd3b525693418e37ee006a8eb71188d094feb0df21731cc74975d3c78d24d\""
            id                     : "15826444"
            membersCount           : 2
            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/\"36c5b052fa2d30aa4fdd605930218b075a632e13a41ec9a7328fd3d7a41ed3a8\""
            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/\"726a71c0fbaa6b59c82df10547f24f6bb3bfd031f528a9ef0bf916fd2c670f49\""
            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/\"6f8fc6142cc9ec66fe083ca65d6ed21afcf610b7534fa3fa188a663bd61d776e\""
            id                     : "14435889"
            membersCount           : 10
            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/\"fb71ce9ade003cf445f13382843b93051e315d442761c5bec5e4c3ee62c55865\""
            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 \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"c5ed0529acbf11f86941aaf2e6851d0d63bb87d377c0e34c622243023e327ea7\""
            id                     : "14435893"
            membersCount           : 10
            name                   : "python-sdk"
            nodeId                 : "T_kwDOCt2Azc4A3EY1"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435871"
            parentTeamReadId       : "14435871"
            parentTeamReadSlug     : "sdk-maintainers"
            privacy                : "closed"
            slug                   : "python-sdk"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::python-sdk"
        }
      ~ python-sdk-auth              : {
            createDefaultMaintainer: false
            description            : "Python SDK auth code owners \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"3ce9cf17c3653ea7535f1dea7b9666e3b3c1adf634036cd6a3ee5b6d4c90024d\""
            id                     : "14435945"
            membersCount           : 2
            name                   : "python-sdk-auth"
            nodeId                 : "T_kwDOCt2Azc4A3EZp"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435893"
            parentTeamReadId       : "14435893"
            parentTeamReadSlug     : "python-sdk"
            privacy                : "closed"
            slug                   : "python-sdk-auth"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::python-sdk-auth"
        }
      ~ reference-servers-maintainers: {
            createDefaultMaintainer: false
            description            : "Reference servers maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"6d27717c82254f43630ec44236b66119fc5b6bf869d63b1afac1c7f4806ce889\""
            id                     : "16791801"
            membersCount           : 3
            name                   : "reference-servers-maintainers"
            nodeId                 : "T_kwDOCt2Azc4BADj5"
            notificationSetting    : "notifications_enabled"
            privacy                : "closed"
            slug                   : "reference-servers-maintainers"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::reference-servers-maintainers"
        }
      ~ registry-collaborators       : {
            createDefaultMaintainer: false
            description            : "Registry working group collaborators \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"0a300ccdcbf657a12e65e70b91ada9fb7c40aee7a80877eb6d995933b79e7815\""
            id                     : "17849690"
            membersCount           : 1
            name                   : "registry-collaborators"
            nodeId                 : "T_kwDOCt2Azc4BEF1a"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435879"
            parentTeamReadId       : "14435879"
            parentTeamReadSlug     : "registry-wg"
            privacy                : "closed"
            slug                   : "registry-collaborators"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::registry-collaborators"
        }
      ~ registry-wg                  : {
            createDefaultMaintainer: false
            description            : "Official registry builders and maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"0f2f4ce943138f084d952729df3b446a57772e9dc12076835b49d08422457adb\""
            id                     : "14435879"
            membersCount           : 4
            name                   : "registry-wg"
            nodeId                 : "T_kwDOCt2Azc4A3EYn"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "registry-wg"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::registry-wg"
        }
      ~ ruby-sdk                     : {
            createDefaultMaintainer: false
            description            : "Official Ruby SDK maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"3514a6dbee5d805af38dadb701b20a9a0e5c1078001b0d3224240915bd3b75ad\""
            id                     : "14435891"
            membersCount           : 4
            name                   : "ruby-sdk"
            nodeId                 : "T_kwDOCt2Azc4A3EYz"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435871"
            parentTeamReadId       : "14435871"
            parentTeamReadSlug     : "sdk-maintainers"
            privacy                : "closed"
            slug                   : "ruby-sdk"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::ruby-sdk"
        }
      ~ rust-sdk                     : {
            createDefaultMaintainer: false
            description            : "Official Rust SDK maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"37ea10f956d5b2feff100d933683d4d3e1478b73030f0d170c0a86698e518984\""
            id                     : "14435894"
            membersCount           : 7
            name                   : "rust-sdk"
            nodeId                 : "T_kwDOCt2Azc4A3EY2"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435871"
            parentTeamReadId       : "14435871"
            parentTeamReadSlug     : "sdk-maintainers"
            privacy                : "closed"
            slug                   : "rust-sdk"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::rust-sdk"
        }
      ~ sdk-maintainers              : {
            createDefaultMaintainer: false
            description            : "Authors and maintainers of official MCP SDKs \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"99c81f50c78d7a4fa8a17168f96b4b76e9b3bfdd9025a229c4669f722cf56444\""
            id                     : "14435871"
            membersCount           : 62
            name                   : "sdk-maintainers"
            nodeId                 : "T_kwDOCt2Azc4A3EYf"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435861"
            parentTeamReadId       : "14435861"
            parentTeamReadSlug     : "steering-committee"
            privacy                : "closed"
            slug                   : "sdk-maintainers"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::sdk-maintainers"
        }
      ~ security-managers            : {
            createDefaultMaintainer: false
            description            : "Organization security managers (security_manager org role via orgRoles.ts) \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"41178a7eb2a78d89f96bde9f31d85a89d5d259933f746105070fd74a9bdc8b11\""
            id                     : "18394080"
            membersCount           : 2
            name                   : "security-managers"
            nodeId                 : "T_kwDOCt2Azc4BGKvg"
            notificationSetting    : "notifications_enabled"
            privacy                : "closed"
            slug                   : "security-managers"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::security-managers"
        }
      ~ security-wg                  : {
            createDefaultMaintainer: false
            description            : "Security Working Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"7a18e16ce21ebc1644652cabf88f93bd8d7213d30642de0538876431ca719682\""
            id                     : "14435877"
            membersCount           : 8
            name                   : "security-wg"
            nodeId                 : "T_kwDOCt2Azc4A3EYl"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "security-wg"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::security-wg"
        }
      ~ server-card-wg               : {
            createDefaultMaintainer: false
            description            : "Server Card Working Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"a5d44648cf45788700b43c13a27d25e581becbcbab8d1aa59f2b572d33432869\""
            id                     : "17071826"
            membersCount           : 3
            name                   : "server-card-wg"
            nodeId                 : "T_kwDOCt2Azc4BBH7S"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "server-card-wg"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::server-card-wg"
        }
      ~ skills-over-mcp-ig           : {
            createDefaultMaintainer: false
            description            : "Skills Over MCP Interest Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"51a75a9bcfbc0b8890f168977771ea289198236c8ea6cd08396660d7a27ab1c6\""
            id                     : "16111788"
            membersCount           : 13
            name                   : "skills-over-mcp-ig"
            nodeId                 : "T_kwDOCt2Azc4A9dis"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435869"
            parentTeamReadId       : "14435869"
            parentTeamReadSlug     : "interest-groups"
            privacy                : "closed"
            slug                   : "skills-over-mcp-ig"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::skills-over-mcp-ig"
        }
      ~ steering-committee           : {
            createDefaultMaintainer: false
            description            : "MCP Steering Committee \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"51de71f7679ad72dba30012a70625450269d0be2cc61028bc86aa9e7cf37c41b\""
            id                     : "14435861"
            membersCount           : 104
            name                   : "steering-committee"
            nodeId                 : "T_kwDOCt2Azc4A3EYV"
            notificationSetting    : "notifications_enabled"
            privacy                : "closed"
            slug                   : "steering-committee"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::steering-committee"
        }
      ~ swift-sdk                    : {
            createDefaultMaintainer: false
            description            : "Official Swift SDK maintainers \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"23f11ad123959a7a316649de5e28a5a4480e618ef258e4fbe46443eaf2db8876\""
            id                     : "14435887"
            membersCount           : 2
            name                   : "swift-sdk"
            nodeId                 : "T_kwDOCt2Azc4A3EYv"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435871"
            parentTeamReadId       : "14435871"
            parentTeamReadSlug     : "sdk-maintainers"
            privacy                : "closed"
            slug                   : "swift-sdk"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::swift-sdk"
        }
      ~ tool-annotations-ig          : {
            createDefaultMaintainer: false
            description            : "Tool Annotations Interest Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"c91a1ea0549bb9467ed5508561c52d48e759b703c3171278b5abd6a65875e77f\""
            id                     : "16689017"
            membersCount           : 3
            name                   : "tool-annotations-ig"
            nodeId                 : "T_kwDOCt2Azc4A_qd5"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435869"
            parentTeamReadId       : "14435869"
            parentTeamReadSlug     : "interest-groups"
            privacy                : "closed"
            slug                   : "tool-annotations-ig"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::tool-annotations-ig"
        }
      ~ transport-wg                 : {
            createDefaultMaintainer: false
            description            : "Transport Working Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"ea10ad86b2e3a4fec54cb93babff7addaeb5994b0da73e9d7053029ae98027d4\""
            id                     : "14435882"
            membersCount           : 10
            name                   : "transport-wg"
            nodeId                 : "T_kwDOCt2Azc4A3EYq"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "transport-wg"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::transport-wg"
        }
      ~ triggers-events-wg           : {
            createDefaultMaintainer: false
            description            : "Triggers & Events Working Group \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"e67424bdddd2e1abb73e0d5f938a30b827bd8a10265d43e492e16530f46a4cac\""
            id                     : "16811719"
            membersCount           : 2
            name                   : "triggers-events-wg"
            nodeId                 : "T_kwDOCt2Azc4BAIbH"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435868"
            parentTeamReadId       : "14435868"
            parentTeamReadSlug     : "working-groups"
            privacy                : "closed"
            slug                   : "triggers-events-wg"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::triggers-events-wg"
        }
      ~ typescript-sdk               : {
            createDefaultMaintainer: false
            description            : "Official TypeScript SDK \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"923752f55ba49ea8e81c7b414eb1ce15bfff719a3be8e2c996b73b03aa5452ca\""
            id                     : "14435886"
            membersCount           : 12
            name                   : "typescript-sdk"
            nodeId                 : "T_kwDOCt2Azc4A3EYu"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435871"
            parentTeamReadId       : "14435871"
            parentTeamReadSlug     : "sdk-maintainers"
            privacy                : "closed"
            slug                   : "typescript-sdk"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::typescript-sdk"
        }
      ~ typescript-sdk-auth          : {
            createDefaultMaintainer: false
            description            : "Code owners for auth in Typescript SDK \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"d25336638a55581307fb8ea35037baa4aee6496da391be73f3548fd83f77cc19\""
            id                     : "14435946"
            membersCount           : 3
            name                   : "typescript-sdk-auth"
            nodeId                 : "T_kwDOCt2Azc4A3EZq"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435886"
            parentTeamReadId       : "14435886"
            parentTeamReadSlug     : "typescript-sdk"
            privacy                : "closed"
            slug                   : "typescript-sdk-auth"
            urn                    : "urn:pulumi:prod::mcp-access::github:index/team:Team::typescript-sdk-auth"
        }
      ~ typescript-sdk-collaborators : {
            createDefaultMaintainer: false
            description            : "TypeScript SDK collaborators \n(Managed by github.com/modelcontextprotocol/access)"
            etag                   : "W/\"9507e87cb720686bcc0a4e642fa47b9d408381827d320a51d9fe61e2d33c5609\""
            id                     : "16792537"
            membersCount           : 2
            name                   : "typescript-sdk-collaborators"
            nodeId                 : "T_kwDOCt2Azc4BADvZ"
            notificationSetting    : "notifications_enabled"
            parentTeamId           : "14435886"
            parentTeamReadId       : "14435886"
            parentTeamReadSlug     : "typescript-sdk"
            privacy 

... (truncated)

Fixes the CodeQL finding: String.replace with a string pattern only
replaces the first occurrence. Use a shared helper with a global regex,
following the npm CLI convention (keep '@' literal, encode every '/').
@claude
claude Bot deployed to production August 11, 2026 22:03 Active
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