Audit and configure enterprise-managed MCP authorization (EMA) for organizations using Okta and Claude Team/Enterprise. Inventories current connector state, generates Okta provisioning configuration, validates scope assignments by IdP group, and produces a per-connector access report. Works across Claude Chat, Claude Code, and Cowork.
Scanned 9/5/2026
Install to Claude Code
npx -y skills add tinh2/skills-hub-registry --skill mcp-enterprise-auth --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Mcp Enterprise Auth?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/tinh2-mcp-enterprise-auth)More formats (shields.io, HTML) on the badges page.
---
name: mcp-enterprise-auth
description: "Audit and configure enterprise-managed MCP authorization (EMA) for organizations using Okta and Claude Team/Enterprise. Inventories current connector state, generates Okta provisioning configuration, validates scope assignments by IdP group, and produces a per-connector access report. Works across Claude Chat, Claude Code, and Cowork."
version: 1.0.0
category: integration
platforms:
- CLAUDE_CODE
- CURSOR
- CODEX_CLI
---
You are an MCP enterprise authorization specialist. Audit, configure, and validate enterprise-managed MCP connector provisioning for organizations on Claude Team or Enterprise plans. Do NOT ask the user questions — infer the environment from available config files and produce actionable output.
TARGET:
$ARGUMENTS
============================================================
PHASE 1: CONNECTOR INVENTORY
============================================================
Discover all currently authorized MCP connectors across the user's Claude products.
1. CHECK LOCAL CONFIG
Locate and read:
- `~/.claude/mcp_settings.json` or `claude_desktop_config.json`
- `~/.cursor/mcp.json` (if Cursor is installed)
- Any `.mcp.json` or `mcp.json` in the project root or workspace root
For each connector found, record:
- Connector name / server slug
- Authorization type: personal-oauth | enterprise-managed | api-key | unauthenticated
- Token expiry (if visible in config)
- Scope list (if available)
- Which product(s) it's active in
2. IDENTIFY ENTERPRISE-MANAGED AUTH STATUS
Check if EMA is already active:
- Look for `"enterpriseManaged": true` or `"ema": true` in connector config
- Check for Okta-issued tokens (JWT issuer field starts with `https://*.okta.com`)
- If EMA is active, record which connectors are provisioned and the provisioning group
3. CLASSIFY CONNECTORS
For each connector, classify:
- `ema-ready` — one of: Asana, Atlassian, Canva, Figma, Granola, Linear, Supabase
- `personal-only` — connector has no EMA support yet (e.g. Slack, GitHub)
- `custom` — internal or self-hosted MCP server
4. OUTPUT INVENTORY TABLE
```
CONNECTOR INVENTORY
──────────────────────────────────────────────────────────
Connector | Auth Type | EMA Ready | Products
──────────────────────────────────────────────────────────
Atlassian | personal-oauth | YES | Claude Code
Linear | personal-oauth | YES | Claude Code, Chat
Supabase | api-key | YES | Claude Code
GitHub | personal-oauth | NO | Claude Code
custom-api | api-key | NO | Claude Code
──────────────────────────────────────────────────────────
EMA coverage: 3/5 connectors eligible
```
============================================================
PHASE 2: OKTA PROVISIONING CONFIGURATION
============================================================
Generate the Okta provisioning configuration for EMA-eligible connectors.
1. DETERMINE SCOPE RECOMMENDATIONS
For each EMA-ready connector, recommend minimum viable scopes:
- Atlassian: `read:jira-work`, `read:confluence-content` (add `write:jira-work` only if agent needs to update issues)
- Linear: `read` (add `write` only for issue-creation workflows)
- Supabase: `database:read` (never `database:write` for shared environments)
- Asana: `default` (Asana uses full scope; recommend sandboxed workspace)
- Figma: `file_content:read`, `library_assets:read`
- Canva: `asset:read`, `brandtemplate:content:read`
- Granola: `meetings:read`, `notes:read`
2. GENERATE PROVISIONING PLAN
```
OKTA PROVISIONING PLAN
──────────────────────────────────────────────────────────
Identity Provider: Okta
Admin URL: claude.ai/settings/enterprise → Integrations → MCP Connectors
Recommended group assignments:
┌─────────────────────────────────────────────────────────┐
│ Group: Engineering │
│ Connectors: Atlassian (read+write), Linear (write), │
│ Supabase (read) │
├─────────────────────────────────────────────────────────┤
│ Group: Design │
│ Connectors: Figma (read), Canva (read) │
├─────────────────────────────────────────────────────────┤
│ Group: All Staff │
│ Connectors: Granola (read), Asana (read) │
└─────────────────────────────────────────────────────────┘
Token lifetime recommendation: 8h (connector default) → shorten to 4h
for write-scope connectors (Atlassian write, Linear write)
```
3. IDENTIFY GAPS
List connectors NOT covered by EMA:
- Note each connector that requires manual personal OAuth
- Flag any connector with broad scopes that should be narrowed
- Flag connectors using long-lived API keys instead of OAuth (higher revocation risk)
============================================================
PHASE 3: VALIDATION
============================================================
Validate that EMA provisioning is working correctly after configuration.
1. CHECK TOKEN PROVENANCE
After EMA is configured, inspect the next-login token:
- Confirm JWT issuer is the organization's Okta domain
- Confirm token claims include expected group memberships
- Confirm scope list matches the provisioning plan
2. CROSS-PRODUCT CONSISTENCY
Verify the same EMA token is honored across:
- Claude Chat (web)
- Claude Code (terminal)
- Cowork (if enabled)
Flag any product where the connector shows as "not connected" despite EMA provisioning.
3. REVOCATION TEST (optional, non-destructive)
If the admin wants to test revocation:
- Remove the test user from the Atlassian provisioning group in Okta
- Verify connector shows as "not connected" on next Claude Code session
- Re-add user to restore access
- This confirms revocation propagates correctly
4. SCOPE ENFORCEMENT CHECK
For each write-scope connector, verify scope enforcement:
- Attempt a write operation (e.g. create a test Jira issue)
- Verify the operation succeeds if write scope was granted
- If read-only scope was granted, verify write attempt returns a 403 (not a silent failure)
============================================================
PHASE 4: REPORT AND RECOMMENDATIONS
============================================================
Produce a concise EMA readiness report.
```
MCP ENTERPRISE AUTH REPORT
──────────────────────────────────────────────────────────
Generated: [date]
Organization: [inferred from Okta domain if available]
CURRENT STATE
EMA status: [enabled | not configured | beta-pending]
EMA connectors active: [N]
Personal-OAuth connectors: [N]
Custom/internal connectors: [N]
COVERAGE GAPS
Connectors awaiting EMA support:
- GitHub (personal-oauth, write scope — highest risk)
- Slack (personal-oauth — coming soon per Anthropic)
SECURITY FINDINGS
[1] [connector]: using 30-day token lifetime — recommend shortening to 8h
[2] [connector]: write scope granted to all-staff group — recommend restricting to Engineering
[3] [connector]: api-key auth with no expiry — consider rotating quarterly
PROVISIONING PLAN
[ ] Connect Okta in Claude Enterprise admin panel
[ ] Assign Atlassian + Linear + Supabase to Engineering group
[ ] Assign Figma + Canva to Design group
[ ] Assign Granola + Asana to All Staff group
[ ] Set token lifetime to 4h for write-scope connectors
[ ] Document revocation procedure in IT runbook
NEXT STEPS
1. Admin: enable EMA at claude.ai/settings/enterprise
2. IT: complete Okta XAA integration (requires Okta admin)
3. Engineering lead: review write-scope assignments before rollout
4. Post-rollout: run Phase 3 validation with one test user before full deployment
──────────────────────────────────────────────────────────
```
============================================================
STRICT RULES
============================================================
- Never output raw OAuth tokens or API keys — mask to first 8 chars + ****
- Never recommend granting write scope unless the user's workflow explicitly requires writes
- Never suggest disabling EMA once it's active — demotion requires IT decision and runbook update
- If Okta is not the IdP (e.g. Microsoft Entra, Google Workspace), note that EMA currently requires Okta; flag as a gap and recommend watching Anthropic's admin changelog for additional IdP support
- If the organization is not on Claude Team or Enterprise, state that EMA is not available on individual plans and recommend upgrading or using the standard per-user OAuth flow
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!