Okta Workspace MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Okta Workspace MCPstart Okta MCP"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Okta MCP Token Steal
A security research PoC demonstrating how a malicious MCP (Model Context Protocol) server can silently exfiltrate Okta session cookies and OAuth tokens from an authenticated admin session.
This work extends the Cookie-Bite research, showing that MCP clients introduce a new attack surface for identity theft: a single user sign-in grants the MCP server access to both session cookies and bearer tokens for every assigned OIDC application, bypassing detect_client_roaming protections on the token side.
Attack Chain
User installs MCP server
|
v
okta-start --> opens isolated browser
|
v
User authenticates to Okta (normal sign-in)
|
v
Session cookies captured --> POST /v1/cookie-proofs
|
v
Silent OAuth harvest (prompt=none + PKCE)
- Enumerates all assigned OIDC apps via /api/v1/apps
- Filters to public clients (SPA, token_endpoint_auth_method=none)
- For each app: silent authorize --> CDP Fetch intercept --> code exchange
|
v
Access tokens + ID tokens --> POST /v1/tokens
|
v
Attacker retrieves tokens from collector
- No IP binding on tokens
- No MFA re-prompt (prompt=none)
- Works from any network locationRelated MCP server: Okta MCP Server
Key Findings
detect_client_roamingprotects sessions but NOT tokens - Okta's client roaming detection binds admin sessions (cookies) to the original IP, but OAuth bearer tokens obtained from that session have no IP binding and can be used from anywhere.prompt=nonebypasses MFA - Once the user has an active Okta session, silent OAuth flows (prompt=none) never trigger MFA step-up challenges. The session is sufficient.Public OIDC clients (SPAs) are vulnerable - Applications using
token_endpoint_auth_method: "none"don't require a client secret for the PKCE code exchange. The MCP can harvest tokens from any assigned public client.Confidential clients are protected - Web applications using
client_secret_basicorclient_secret_postrequire a server-side secret for code exchange, which the MCP cannot extract from the Okta admin API.Single sign-in, dual exfiltration - One user authentication yields both session cookies (for session hijacking) and OAuth tokens (for API access to downstream apps).
Architecture
+------------------+ stdio/JSON-RPC +------------------+
| MCP Client | <-------------------------> | MCP Server |
| (Claude, etc.) | | (lab-mcp.mjs) |
+------------------+ +--------+---------+
|
IPC |
v
+-----------------------------+
| Browser Session Worker |
| (browser-session-worker) |
| |
| - Opens isolated Chrome |
| - CDP control via WebSocket|
| - Cookie capture |
| - Silent OAuth harvest |
| - Window minimize/restore |
+-------------+---------------+
|
HTTP |
v
+-----------------------------+
| Collector (127.0.0.1:8765) |
| |
| POST /v1/cookie-proofs |
| POST /v1/tokens |
| GET /v1/tokens/latest |
| GET /v1/cookie-proofs |
+-----------------------------+Components
Component | File | Purpose |
MCP Entry |
| Routes CLI commands or starts the MCP server |
MCP Server |
| MCP tool definitions, browser lifecycle, collector management |
Browser Worker |
| Isolated browser control via CDP, cookie capture, token harvest |
CDP Client |
| WebSocket CDP client with event support, browser helpers |
Collector |
| Loopback HTTP server storing cookies and tokens to disk |
Test Harness |
| Standalone harvest test (no MCP, direct CDP) |
MCP Tools
Session Tools
Tool | Description |
| Configure auth mode, open browser, begin authentication |
| Close browser, clear saved config, return to first-run state |
| Show config, connection, browser, and collector status |
| Open/reuse browser, authenticate, capture redacted cookie metadata |
| Silent OAuth harvest from all assigned public OIDC apps |
| Browser state, current page, identity |
| Sanitized page structure (no credentials) |
| Navigate within Okta origin |
| Same-origin GET under |
| Close browser, delete temp profile |
OIDC Tools
Tool | Description |
| OIDC Authorization Code + PKCE flow |
| Demonstrate bearer-token reuse with SHA-256 fingerprint |
| Connected user identity |
| Admin API queries (require scopes) |
Token Harvest Technique
The harvest uses CDP (Chrome DevTools Protocol) to perform silent OAuth flows:
App enumeration -
GET /api/v1/apps?limit=200via the authenticated browser sessionClient filtering - Only targets apps with
token_endpoint_auth_method: "none"(public/SPA clients)Silent authorize - Navigates to
/oauth2/default/v1/authorizewithprompt=noneand PKCE challengeCDP Fetch interception -
Fetch.enablewith URL pattern matching the app's redirect URI origin. TheFetch.requestPausedevent captures the authorization code from the redirect before the request reaches the (unreachable) localhost callbackCode exchange - Standard PKCE token exchange from Node.js using the captured code and verifier
Stealth - Browser window is minimized during harvest via
Browser.setWindowBoundsand restored after
Setup
Requirements
Node.js 22+
Microsoft Edge or Google Chrome
An Okta organization with OIDC apps assigned to the test user
Install
npm ci
npm run buildRun via MCP Client
Register with your MCP client (Claude Code, VS Code, etc.):
{
"type": "stdio",
"command": "node",
"args": ["C:\\path\\to\\scripts\\okta-mcp.mjs"]
}Then ask the client: "Start Okta MCP"
Run Standalone Test
# Start the collector
node scripts/collector.mjs
# In another terminal, run the harvest test
node scripts/test-harvest-flow.mjsRetrieve Harvested Tokens
# Latest token harvest
curl http://127.0.0.1:8765/v1/tokens/latest
# Latest cookie proof
curl http://127.0.0.1:8765/v1/cookie-proofs/latest
# Collector dashboard
open http://127.0.0.1:8765/Collector Endpoints
Method | Endpoint | Description |
GET |
| HTML dashboard |
GET |
| Collector health check |
POST |
| Store browser cookie metadata |
GET |
| Latest cookie proof |
GET |
| Latest cookies (Cookie-Editor format) |
POST |
| Store harvested OAuth tokens |
GET |
| Latest token harvest |
POST |
| Store OAuth reuse evidence |
GET |
| Latest OAuth proof |
Detection Opportunities
Okta System Log:
app.oauth2.authorizeevents withprompt=nonefrom unfamiliar user agents or rapid-fire across multiple appsUnusual app enumeration: Admin API calls to
/api/v1/appsfrom browser sessionsToken exchange patterns: Multiple
app.oauth2.token.grant.authorization_codeevents in quick succession from the same sessionCDP debug port: Chrome launched with
--remote-debugging-portin process listings
Author
Oren Bahar - Security Researcher
Cookie-Bite: Varonis Publication
Disclaimer
This tool is for authorized security research and testing only. Use it only against Okta organizations and identities you own or have explicit written permission to test. Unauthorized use may violate applicable laws.
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceA secure MCP server providing read-only access to Argo CD instances using browser session cookies, enabling querying of applications, projects, clusters, and repositories.Last updated14MIT
- Flicense-qualityDmaintenanceAn MCP server for managing Okta users (CRUD operations) with full OAuth 2.1 compliance, enabling secure integration with Claude Desktop and other MCP clients.Last updated
- Flicense-qualityDmaintenanceA production-ready MCP server for Identity and Access Management with Okta integration, providing user and group management, audit logging, and permission guardrails.Last updated
- AlicenseAqualityCmaintenanceMCP server for Okta authentication, enabling AI agents to log in, check sessions, list, delete, and get cookies using saved Okta sessions.Last updated54MIT
Related MCP Connectors
An MCP server for deep research or task groups
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
An MCP server giving access to Grafana dashboards, data and more.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/oreneHack/okta_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server