sdap
MCP server for the Super Duper Admin Portal that enables AI agents to chat with LLMs, trigger admin actions, and make Okta API requests.
README
Super Duper Admin Portal
🤖 Setting this up with an AI coding agent? Point it at README-AGENT.md — a phased, verification-driven runbook written for agents.
Chat-first admin interface for Okta administrators (example org: sledai.oktapreview.com — substitute your own)
Dark theme with orange accent. Built for demo / internal use. Chat with LLMs that understand your Okta org, trigger safe admin actions (via approval workflows), and expose everything via REST + MCP.
Ports
Defaults:
- Web (SPA):
3200 - API:
3201
If these conflict with other services on your host, just change PORT and API_PORT in .env.local (and restart).
All internal calls from the frontend use relative URLs (/api/...), so no other code changes are needed when you change ports.
Features (v0.1)
- Enhanced chat with conversation history (localStorage), model selector (GPT-4o / Claude 3.5 / Grok), markdown, copy buttons, suggested Okta prompts
- LLM proxy (server-side keys) with a strong Okta admin system prompt
- Quick Actions panel that calls backend REST endpoints (list users, failed logins, suspend, MFA reset)
- Okta Management API proxy at
/api/okta/*(SSWS token stays on server) - pm2 deployment with separate resilient web + api processes
- MCP server so agents (Claude Desktop, Cursor, etc.) can call the same tools
- SAML 2.0 ready (placeholder) – intended to be launched from the Okta dashboard with JIT provisioning
Quick Start
cd super-duper-admin-portal
# 1. Configure environment
cp .env.example .env.local
# Edit .env.local and add at least one LLM key + OKTA_API_TOKEN
# 2. Install (already done, but if needed)
npm install
# 3. Development (two terminals or use the helper)
npm run dev # Vite frontend on 5173
npm run dev:api # API on 3201 (API_PORT)
# Or everything together:
npm run dev:full
# 4. Production build + pm2
npm run build
npm run pm2:start
# Useful pm2 commands
npm run pm2:status
npm run pm2:logs
npm run pm2:restart
npm run pm2:stop
The web UI will be on http://your-host:3200 (API on 3201).
Both are configurable via PORT / API_PORT in .env.local.
Environment Variables (.env.local)
See .env.example. Minimum for chat to work:
OPENAI_API_KEY(or ANTHROPIC_API_KEY / GROK_API_KEY)OKTA_API_TOKEN(SSWS token with at least read users + logs)OKTA_ORG_URL=https://sledai.oktapreview.com
DEMO_AUTH_BYPASS=true lets you use the portal immediately without SAML.
SAML 2.0 Integration (Okta Dashboard Launch + JIT)
Goal: Users assigned the app in Okta get automatically logged into the portal as full admins (via SAML JIT).
High-level steps
-
In sledai.oktapreview.com admin console:
- Applications → Create App Integration → SAML 2.0
- App name:
Super Duper Admin Portal - Single sign-on URL (ACS):
https://your-portal-host:3201/api/saml/acs(POST) - Audience URI (SP Entity ID):
super-duper-admin-portal(or your choice) - Attribute statements (example):
email→user.emailfirstName→user.firstNamelastName→user.lastNamelogin→user.login
-
After saving, download the Identity Provider metadata (or copy the X.509 cert + SSO URL).
-
Update
.env.local:SAML_ENTRY_POINT=... SAML_ISSUER=... SAML_CERT=-----BEGIN CERTIFICATE-----... -
Implement the ACS handler in
api-server.jsusingsamlify(package already installed). The current endpoint returns 501. -
In the Okta app assignment, turn on SAML JIT provisioning (or use a separate provisioning integration).
-
Set
DEMO_AUTH_BYPASS=falseand restart the api process.
When complete, the app will appear in users' Okta dashboard and they will land already authenticated.
Architecture
Browser (SPA - Vite React)
↓
web-server.js (port 3200) ← serves dist/, SPA fallback
↓ (same origin calls)
api-server.js (port 3201)
├── /api/chat → LLM proxy (OpenAI/Anthropic/Grok)
├── /api/okta/* → Okta Mgmt API (SSWS)
├── /api/actions/* → Fire approval webhooks / workflows
└── /api/saml/acs → SAML handler (future)
+ express-session (demo + future real auth)
pm2 (ecosystem.config.cjs)
├── sdap-web
└── sdap-api (both autorestart, resilient)
mcp-server/ (stdio MCP tools for agents)
Adding Real Destructive Action Approvals
In api-server.js the /api/actions/:actionId endpoint already accepts an APPROVAL_WEBHOOK_URL.
Point it at an Okta Workflow (or any HTTPS endpoint) that:
- Receives the action + user + reason
- Creates an access request / approval task in Okta
- Only on approval does it call back or use the SSWS token to perform the real change
MCP Usage (Claude Desktop example)
{
"mcpServers": {
"sdap": {
"command": "node",
"args": ["/path/to/super-duper-admin-portal/mcp-server/index.js"],
"cwd": "/path/to/super-duper-admin-portal"
}
}
}
Tools exposed: sdap_chat, sdap_trigger_action, sdap_okta_request.
Deploy Notes (pm2)
- Always run
npm run buildbeforepm2 start - The two processes are independent — you can restart just the api when you change keys
- Logs:
npm run pm2:logs - To run on a real server, put an nginx reverse proxy in front (example configs exist in sibling projects)
Next Steps / Roadmap
- Full SAML + proper session + SLO
- Streaming LLM responses (SSE)
- Real Okta data in the Users tab
- Function calling in the chat so the LLM can directly propose actions
- Audit logging of all admin actions
This is a demo application. Treat the Okta token and LLM keys with care. Do not expose publicly without proper auth + network controls.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。