From c1ac80449e377c652ecc24f323ed4f438708cde2 Mon Sep 17 00:00:00 2001 From: Pranesh Date: Tue, 26 May 2026 14:45:34 +0530 Subject: [PATCH 01/15] chore(docs): sync agent connector pages from prod catalog - Added 8 new connector pages: BioRender MCP, Candid MCP, Carta MCP, Gainsight, OtterAI MCP, Revealed AI MCP, Salesloft, Webflow MCP - Regenerated all 114 connector MDX pages and TS data files from production catalog (3409 tools) - Fixed stale duplicate artifacts from prior sync run --- .../authentication/token-management-0.svg | 2 +- .../agentkit/mcp/configure-mcp-server-0.svg | 2 +- .../agentkit/mcp/configure-mcp-server-1.svg | 2 +- .../agentkit/mcp/configure-mcp-server-2.svg | 2 +- public/d2/docs/agentkit/openclaw-0.svg | 2 +- public/d2/docs/agentkit/overview-0.svg | 2 +- .../d2/docs/agentkit/user-verification-0.svg | 2 +- .../implement-webhooks-0.svg | 2 +- .../interceptors/auth-flow-interceptors-0.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-0.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-1.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-2.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-3.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-4.svg | 2 +- .../docs/authenticate/mcp/custom-auth-0.svg | 2 +- .../mcp/expressjs-quickstart-0.svg | 2 +- .../mcp/fastapi-fastmcp-quickstart-0.svg | 2 +- .../authenticate/mcp/fastmcp-quickstart-0.svg | 2 +- .../authenticate/mcp/intro-to-mcp-auth-0.svg | 2 +- .../authenticate/mcp/intro-to-mcp-auth-1.svg | 2 +- .../authenticate/mcp/intro-to-mcp-auth-2.svg | 2 +- .../d2/docs/authenticate/mcp/overview-0.svg | 2 +- .../d2/docs/authenticate/mcp/overview-1.svg | 2 +- .../d2/docs/authenticate/mcp/overview-2.svg | 2 +- .../d2/docs/authenticate/mcp/overview-3.svg | 2 +- .../mcp/topologies/agent-mcp-0.svg | 2 +- .../mcp/topologies/human-mcp-0.svg | 2 +- .../authenticate/mcp/topologies/mcp-api-0.svg | 2 +- .../authenticate/mcp/topologies/mcp-api-1.svg | 2 +- .../authenticate/mcp/topologies/mcp-api-2.svg | 2 +- .../authenticate/mcp/xmcp-quickstart-0.svg | 238 +- .../tools/use-scalekit-credentials-0.svg | 2 +- .../guides/group-based-role-assignment-0.svg | 2 +- public/d2/docs/fsa/guides/manage-users-0.svg | 2 +- .../d2/docs/fsa/guides/user-invitations-0.svg | 2 +- .../integrations/auth-systems/firebase-0.svg | 2 +- .../integrations/auth-systems/firebase-1.svg | 2 +- .../guides/sso/sso-migration-strategy-0.svg | 2 +- .../guides/sso/sso-migration-strategy-1.svg | 2 +- .../docs/mcp/auth-methods/custom-auth-0.svg | 2 +- .../d2/docs/mcp/auth-methods/enterprise-0.svg | 2 +- public/d2/docs/passwordless/oidc-0.svg | 2 +- public/d2/docs/sso/guides/idp-init-sso-0.svg | 2 +- public/d2/docs/sso/guides/idp-init-sso-1.svg | 2 +- .../docs/agentkit/connectors/biorendermcp.mdx | 68 + .../docs/agentkit/connectors/candidmcp.mdx | 72 + .../docs/agentkit/connectors/cartamcp.mdx | 72 + .../docs/agentkit/connectors/gainsight.mdx | 72 + .../docs/agentkit/connectors/otteraimcp.mdx | 69 + .../agentkit/connectors/revealedaimcp.mdx | 72 + .../docs/agentkit/connectors/salesloft.mdx | 71 + .../docs/agentkit/connectors/webflowmcp.mdx | 70 + src/data/agent-connectors/biorendermcp.ts | 23 + src/data/agent-connectors/candidmcp.ts | 75 + src/data/agent-connectors/cartamcp.ts | 185 + src/data/agent-connectors/catalog.ts | 40 + src/data/agent-connectors/clickhouse 3.ts | 221 ++ src/data/agent-connectors/gainsight.ts | 772 +++++ src/data/agent-connectors/hubspot.ts | 1855 ++++++++-- src/data/agent-connectors/otteraimcp.ts | 87 + src/data/agent-connectors/revealedaimcp.ts | 223 ++ src/data/agent-connectors/salesloft.ts | 2993 +++++++++++++++++ src/data/agent-connectors/webflowmcp.ts | 389 +++ 63 files changed, 7362 insertions(+), 391 deletions(-) create mode 100644 src/content/docs/agentkit/connectors/biorendermcp.mdx create mode 100644 src/content/docs/agentkit/connectors/candidmcp.mdx create mode 100644 src/content/docs/agentkit/connectors/cartamcp.mdx create mode 100644 src/content/docs/agentkit/connectors/gainsight.mdx create mode 100644 src/content/docs/agentkit/connectors/otteraimcp.mdx create mode 100644 src/content/docs/agentkit/connectors/revealedaimcp.mdx create mode 100644 src/content/docs/agentkit/connectors/salesloft.mdx create mode 100644 src/content/docs/agentkit/connectors/webflowmcp.mdx create mode 100644 src/data/agent-connectors/biorendermcp.ts create mode 100644 src/data/agent-connectors/candidmcp.ts create mode 100644 src/data/agent-connectors/cartamcp.ts create mode 100644 src/data/agent-connectors/clickhouse 3.ts create mode 100644 src/data/agent-connectors/gainsight.ts create mode 100644 src/data/agent-connectors/otteraimcp.ts create mode 100644 src/data/agent-connectors/revealedaimcp.ts create mode 100644 src/data/agent-connectors/salesloft.ts create mode 100644 src/data/agent-connectors/webflowmcp.ts diff --git a/public/d2/docs/agentkit/authentication/token-management-0.svg b/public/d2/docs/agentkit/authentication/token-management-0.svg index e658be0fa..36ba4c950 100644 --- a/public/d2/docs/agentkit/authentication/token-management-0.svg +++ b/public/d2/docs/agentkit/authentication/token-management-0.svg @@ -1,4 +1,4 @@ - + .d2-3395174332 .fill-N1{fill:#0A0F25;} + .d2-3395174332 .fill-N2{fill:#676C7E;} + .d2-3395174332 .fill-N3{fill:#9499AB;} + .d2-3395174332 .fill-N4{fill:#CFD2DD;} + .d2-3395174332 .fill-N5{fill:#DEE1EB;} + .d2-3395174332 .fill-N6{fill:#EEF1F8;} + .d2-3395174332 .fill-N7{fill:#FFFFFF;} + .d2-3395174332 .fill-B1{fill:#0A0F25;} + .d2-3395174332 .fill-B2{fill:#676C7E;} + .d2-3395174332 .fill-B3{fill:#9499AB;} + .d2-3395174332 .fill-B4{fill:#CFD2DD;} + .d2-3395174332 .fill-B5{fill:#DEE1EB;} + .d2-3395174332 .fill-B6{fill:#EEF1F8;} + .d2-3395174332 .fill-AA2{fill:#676C7E;} + .d2-3395174332 .fill-AA4{fill:#CFD2DD;} + .d2-3395174332 .fill-AA5{fill:#DEE1EB;} + .d2-3395174332 .fill-AB4{fill:#CFD2DD;} + .d2-3395174332 .fill-AB5{fill:#DEE1EB;} + .d2-3395174332 .stroke-N1{stroke:#0A0F25;} + .d2-3395174332 .stroke-N2{stroke:#676C7E;} + .d2-3395174332 .stroke-N3{stroke:#9499AB;} + .d2-3395174332 .stroke-N4{stroke:#CFD2DD;} + .d2-3395174332 .stroke-N5{stroke:#DEE1EB;} + .d2-3395174332 .stroke-N6{stroke:#EEF1F8;} + .d2-3395174332 .stroke-N7{stroke:#FFFFFF;} + .d2-3395174332 .stroke-B1{stroke:#0A0F25;} + .d2-3395174332 .stroke-B2{stroke:#676C7E;} + .d2-3395174332 .stroke-B3{stroke:#9499AB;} + .d2-3395174332 .stroke-B4{stroke:#CFD2DD;} + .d2-3395174332 .stroke-B5{stroke:#DEE1EB;} + .d2-3395174332 .stroke-B6{stroke:#EEF1F8;} + .d2-3395174332 .stroke-AA2{stroke:#676C7E;} + .d2-3395174332 .stroke-AA4{stroke:#CFD2DD;} + .d2-3395174332 .stroke-AA5{stroke:#DEE1EB;} + .d2-3395174332 .stroke-AB4{stroke:#CFD2DD;} + .d2-3395174332 .stroke-AB5{stroke:#DEE1EB;} + .d2-3395174332 .background-color-N1{background-color:#0A0F25;} + .d2-3395174332 .background-color-N2{background-color:#676C7E;} + .d2-3395174332 .background-color-N3{background-color:#9499AB;} + .d2-3395174332 .background-color-N4{background-color:#CFD2DD;} + .d2-3395174332 .background-color-N5{background-color:#DEE1EB;} + .d2-3395174332 .background-color-N6{background-color:#EEF1F8;} + .d2-3395174332 .background-color-N7{background-color:#FFFFFF;} + .d2-3395174332 .background-color-B1{background-color:#0A0F25;} + .d2-3395174332 .background-color-B2{background-color:#676C7E;} + .d2-3395174332 .background-color-B3{background-color:#9499AB;} + .d2-3395174332 .background-color-B4{background-color:#CFD2DD;} + .d2-3395174332 .background-color-B5{background-color:#DEE1EB;} + .d2-3395174332 .background-color-B6{background-color:#EEF1F8;} + .d2-3395174332 .background-color-AA2{background-color:#676C7E;} + .d2-3395174332 .background-color-AA4{background-color:#CFD2DD;} + .d2-3395174332 .background-color-AA5{background-color:#DEE1EB;} + .d2-3395174332 .background-color-AB4{background-color:#CFD2DD;} + .d2-3395174332 .background-color-AB5{background-color:#DEE1EB;} + .d2-3395174332 .color-N1{color:#0A0F25;} + .d2-3395174332 .color-N2{color:#676C7E;} + .d2-3395174332 .color-N3{color:#9499AB;} + .d2-3395174332 .color-N4{color:#CFD2DD;} + .d2-3395174332 .color-N5{color:#DEE1EB;} + .d2-3395174332 .color-N6{color:#EEF1F8;} + .d2-3395174332 .color-N7{color:#FFFFFF;} + .d2-3395174332 .color-B1{color:#0A0F25;} + .d2-3395174332 .color-B2{color:#676C7E;} + .d2-3395174332 .color-B3{color:#9499AB;} + .d2-3395174332 .color-B4{color:#CFD2DD;} + .d2-3395174332 .color-B5{color:#DEE1EB;} + .d2-3395174332 .color-B6{color:#EEF1F8;} + .d2-3395174332 .color-AA2{color:#676C7E;} + .d2-3395174332 .color-AA4{color:#CFD2DD;} + .d2-3395174332 .color-AA5{color:#DEE1EB;} + .d2-3395174332 .color-AB4{color:#CFD2DD;} + .d2-3395174332 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-3395174332);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-3395174332);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-3395174332);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-3395174332);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-3395174332);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-3395174332);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-3395174332);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-3395174332);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-3395174332);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-3395174332);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-3395174332);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-3395174332);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-3395174332);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-3395174332);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-3395174332);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-3395174332);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-3395174332);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-3395174332);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}@media screen and (prefers-color-scheme:dark){ + .d2-3395174332 .fill-N1{fill:#0A0F25;} + .d2-3395174332 .fill-N2{fill:#676C7E;} + .d2-3395174332 .fill-N3{fill:#9499AB;} + .d2-3395174332 .fill-N4{fill:#CFD2DD;} + .d2-3395174332 .fill-N5{fill:#DEE1EB;} + .d2-3395174332 .fill-N6{fill:#EEF1F8;} + .d2-3395174332 .fill-N7{fill:#FFFFFF;} + .d2-3395174332 .fill-B1{fill:#0A0F25;} + .d2-3395174332 .fill-B2{fill:#676C7E;} + .d2-3395174332 .fill-B3{fill:#9499AB;} + .d2-3395174332 .fill-B4{fill:#CFD2DD;} + .d2-3395174332 .fill-B5{fill:#DEE1EB;} + .d2-3395174332 .fill-B6{fill:#EEF1F8;} + .d2-3395174332 .fill-AA2{fill:#676C7E;} + .d2-3395174332 .fill-AA4{fill:#CFD2DD;} + .d2-3395174332 .fill-AA5{fill:#DEE1EB;} + .d2-3395174332 .fill-AB4{fill:#CFD2DD;} + .d2-3395174332 .fill-AB5{fill:#DEE1EB;} + .d2-3395174332 .stroke-N1{stroke:#0A0F25;} + .d2-3395174332 .stroke-N2{stroke:#676C7E;} + .d2-3395174332 .stroke-N3{stroke:#9499AB;} + .d2-3395174332 .stroke-N4{stroke:#CFD2DD;} + .d2-3395174332 .stroke-N5{stroke:#DEE1EB;} + .d2-3395174332 .stroke-N6{stroke:#EEF1F8;} + .d2-3395174332 .stroke-N7{stroke:#FFFFFF;} + .d2-3395174332 .stroke-B1{stroke:#0A0F25;} + .d2-3395174332 .stroke-B2{stroke:#676C7E;} + .d2-3395174332 .stroke-B3{stroke:#9499AB;} + .d2-3395174332 .stroke-B4{stroke:#CFD2DD;} + .d2-3395174332 .stroke-B5{stroke:#DEE1EB;} + .d2-3395174332 .stroke-B6{stroke:#EEF1F8;} + .d2-3395174332 .stroke-AA2{stroke:#676C7E;} + .d2-3395174332 .stroke-AA4{stroke:#CFD2DD;} + .d2-3395174332 .stroke-AA5{stroke:#DEE1EB;} + .d2-3395174332 .stroke-AB4{stroke:#CFD2DD;} + .d2-3395174332 .stroke-AB5{stroke:#DEE1EB;} + .d2-3395174332 .background-color-N1{background-color:#0A0F25;} + .d2-3395174332 .background-color-N2{background-color:#676C7E;} + .d2-3395174332 .background-color-N3{background-color:#9499AB;} + .d2-3395174332 .background-color-N4{background-color:#CFD2DD;} + .d2-3395174332 .background-color-N5{background-color:#DEE1EB;} + .d2-3395174332 .background-color-N6{background-color:#EEF1F8;} + .d2-3395174332 .background-color-N7{background-color:#FFFFFF;} + .d2-3395174332 .background-color-B1{background-color:#0A0F25;} + .d2-3395174332 .background-color-B2{background-color:#676C7E;} + .d2-3395174332 .background-color-B3{background-color:#9499AB;} + .d2-3395174332 .background-color-B4{background-color:#CFD2DD;} + .d2-3395174332 .background-color-B5{background-color:#DEE1EB;} + .d2-3395174332 .background-color-B6{background-color:#EEF1F8;} + .d2-3395174332 .background-color-AA2{background-color:#676C7E;} + .d2-3395174332 .background-color-AA4{background-color:#CFD2DD;} + .d2-3395174332 .background-color-AA5{background-color:#DEE1EB;} + .d2-3395174332 .background-color-AB4{background-color:#CFD2DD;} + .d2-3395174332 .background-color-AB5{background-color:#DEE1EB;} + .d2-3395174332 .color-N1{color:#0A0F25;} + .d2-3395174332 .color-N2{color:#676C7E;} + .d2-3395174332 .color-N3{color:#9499AB;} + .d2-3395174332 .color-N4{color:#CFD2DD;} + .d2-3395174332 .color-N5{color:#DEE1EB;} + .d2-3395174332 .color-N6{color:#EEF1F8;} + .d2-3395174332 .color-N7{color:#FFFFFF;} + .d2-3395174332 .color-B1{color:#0A0F25;} + .d2-3395174332 .color-B2{color:#676C7E;} + .d2-3395174332 .color-B3{color:#9499AB;} + .d2-3395174332 .color-B4{color:#CFD2DD;} + .d2-3395174332 .color-B5{color:#DEE1EB;} + .d2-3395174332 .color-B6{color:#EEF1F8;} + .d2-3395174332 .color-AA2{color:#676C7E;} + .d2-3395174332 .color-AA4{color:#CFD2DD;} + .d2-3395174332 .color-AA5{color:#DEE1EB;} + .d2-3395174332 .color-AB4{color:#CFD2DD;} + .d2-3395174332 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-3395174332);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-3395174332);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-3395174332);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-3395174332);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-3395174332);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-3395174332);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-3395174332);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-3395174332);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-3395174332);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-3395174332);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-3395174332);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-3395174332);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-3395174332);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-3395174332);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-3395174332);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-3395174332);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-3395174332);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-3395174332);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}}]]> - + - + - + -xmcp MCP with ScalekitMCP ClientMCP ServerScalekit POST /mcp 401 + WWW-Authenticate header GET /.well-known/oauth-protected-resource Resource metadata (authorization_servers) OAuth Authorization Code + PKCE Issue Bearer token POST /mcp with Bearer token Verify token via JWKS Tool response +xmcp MCP with ScalekitMCP ClientMCP ServerScalekit POST /mcp 401 + WWW-Authenticate header GET /.well-known/oauth-protected-resource Resource metadata (authorization_servers) OAuth Authorization Code + PKCE Issue Bearer token POST /mcp with Bearer token Verify token via JWKS Tool response diff --git a/public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg b/public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg index cb46e0dd0..256430d62 100644 --- a/public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg +++ b/public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg @@ -1,4 +1,4 @@ - - - - - - - - - - - - -Token Lifecycle and RefreshUserScalekitProvider Authenticate OAuth Flow Access Token (expires in 1h) Connection Active Monitor expiration (55 min) Refresh access token New Access Token (expires in 1h) Update token, reset timer - - - - - - - - - - diff --git a/public/d2/docs/agentkit/mcp/configure-mcp-server-0.svg b/public/d2/docs/agentkit/mcp/configure-mcp-server-0.svg deleted file mode 100644 index 6b8b8f019..000000000 --- a/public/d2/docs/agentkit/mcp/configure-mcp-server-0.svg +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - - - - -How Scalekit MCP tool access works: one-time setupONE-TIME SETUPNext: Per-user →Your AppMCP Configgmail_fetch_mailsgooglecalendar_create_event create_config() ensure_instance() - - - - - - - - - - - - - - - - diff --git a/public/d2/docs/agentkit/mcp/configure-mcp-server-1.svg b/public/d2/docs/agentkit/mcp/configure-mcp-server-1.svg deleted file mode 100644 index 95e252582..000000000 --- a/public/d2/docs/agentkit/mcp/configure-mcp-server-1.svg +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - - - - - - - -How Scalekit MCP tool access works: per-user← One-time setupPER-USERNext: Runtime →Per-user instancemcp.scalekit.com/u/john-doe/...User authorizes auth link MCP URL - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/d2/docs/agentkit/mcp/configure-mcp-server-2.svg b/public/d2/docs/agentkit/mcp/configure-mcp-server-2.svg deleted file mode 100644 index ba3e0866e..000000000 --- a/public/d2/docs/agentkit/mcp/configure-mcp-server-2.svg +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - - -How Scalekit MCP tool access works: runtime← Per-user↺ One-time setupRUNTIMEAI Agent(MCP URL)GmailGoogle Calendar tool calls tool calls - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/d2/docs/agentkit/openclaw-0.svg b/public/d2/docs/agentkit/openclaw-0.svg deleted file mode 100644 index 085fc351c..000000000 --- a/public/d2/docs/agentkit/openclaw-0.svg +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - -OpenClaw agentScalekit AgentKitThird-party servicesOAuth handlerToken vaultLinkedInGmailSalesforce50+ more Execute tools - - - diff --git a/public/d2/docs/agentkit/overview-0.svg b/public/d2/docs/agentkit/overview-0.svg deleted file mode 100644 index 9a8551893..000000000 --- a/public/d2/docs/agentkit/overview-0.svg +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - - - - - - -You (developer)Your usersYour agentScalekitThird-party app(Gmail, Slack, Snowflake…)Connection(credentials + config)Connected accounts(per-user auth state)Tools(pre-built + proxied) Configure once Authenticate Call tools Authenticated API call - - - - - - diff --git a/public/d2/docs/agentkit/user-verification-0.svg b/public/d2/docs/agentkit/user-verification-0.svg deleted file mode 100644 index a6a484167..000000000 --- a/public/d2/docs/agentkit/user-verification-0.svg +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - - - - - - -Connected account user verificationYour appScalekitProviderEnd user POST magic link(identifier, user_verify_url, state) Magic link URL Deliver link(email, in-app, …) Open magic link OAuth consent screen Authorization code Store tokens(pending verification) Redirect to user_verify_url(auth_request_id, state) GET /user/verify(?auth_request_id, state) Validate state,read user from session POST verify(auth_request_id, identifier) Match identifier,activate connection post_user_verify_redirect_url Redirect to your app - - - - - - - - - - - - - - - - diff --git a/public/d2/docs/authenticate/auth-methods/authentication-flow-0.svg b/public/d2/docs/authenticate/auth-methods/authentication-flow-0.svg deleted file mode 100644 index 067c712c8..000000000 --- a/public/d2/docs/authenticate/auth-methods/authentication-flow-0.svg +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - - - - - - -B2B App initiates loginUser selects login methodSocial authPasskey authEmail enteredHRD checkRedirect to SSOSSO authOTP / Magic linkAuth complete Social login Passkey login Email login Auth completes Auth completes Before auth Domain match No match (email) No match (social/passkey) - - - - - - - - - - - diff --git a/public/d2/docs/authenticate/authz/create-roles-permissions-0.svg b/public/d2/docs/authenticate/authz/create-roles-permissions-0.svg deleted file mode 100644 index edb600153..000000000 --- a/public/d2/docs/authenticate/authz/create-roles-permissions-0.svg +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - - - - - - -Role inheritance hierarchy and permission flowviewer+projectsread+tasksread+commentsreadeditor+projectswrite+taskswrite+(inherits viewer permissions)voidproject_owner+projectscreate+membersinvite+(inherits editor permissions)void inherits inherits - - - - diff --git a/public/d2/docs/authenticate/authz/implement-access-control-0.svg b/public/d2/docs/authenticate/authz/implement-access-control-0.svg deleted file mode 100644 index 4718c3f25..000000000 --- a/public/d2/docs/authenticate/authz/implement-access-control-0.svg +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - -UserYour App Request protected resource Decode and validate access token Extract and verify required permission/role Return resource or error - - - - - - diff --git a/public/d2/docs/authenticate/authz/overview-0.svg b/public/d2/docs/authenticate/authz/overview-0.svg deleted file mode 100644 index 5e63bdb97..000000000 --- a/public/d2/docs/authenticate/authz/overview-0.svg +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - -UserScalekitYour App Initiate sign up or login Package access contents in access tokens Determine the role & permissions from access token Allow/Deny - - - - - - diff --git a/public/d2/docs/authenticate/fsa/multiapp/native-app-0.svg b/public/d2/docs/authenticate/fsa/multiapp/native-app-0.svg deleted file mode 100644 index ec0140f0a..000000000 --- a/public/d2/docs/authenticate/fsa/multiapp/native-app-0.svg +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - -UserDesktop / Mobile appSystem browserScalekit Click "Login" Open authorize URL Redirect to /oauth/authorize Redirect to callback URI with code + state Return control via deep link / loopback POST /oauth/token access_token, refresh_token, id_token Store tokens + continue - - - - - - - - - - diff --git a/public/d2/docs/authenticate/fsa/multiapp/overview-0.svg b/public/d2/docs/authenticate/fsa/multiapp/overview-0.svg deleted file mode 100644 index 4a999090f..000000000 --- a/public/d2/docs/authenticate/fsa/multiapp/overview-0.svg +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - - - - - - -UserApp AApp BScalekit (shared session) Click "Login" /oauth/authorize Redirect with code /oauth/token Tokens issued Open app /oauth/authorize Redirect with code /oauth/token Tokens issued Logout /oidc/logout Session revoked - - - - - - - - - - - diff --git a/public/d2/docs/authenticate/fsa/multiapp/single-page-app-0.svg b/public/d2/docs/authenticate/fsa/multiapp/single-page-app-0.svg deleted file mode 100644 index 772a470dc..000000000 --- a/public/d2/docs/authenticate/fsa/multiapp/single-page-app-0.svg +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - - - - -UserSingle page app (browser)Scalekit Click "Login" Redirect to /oauth/authorize (+ state + PKCE challenge) Redirect to /callback with code + state POST /oauth/token access_token, refresh_token, id_token Store tokens + continue - - - - - - - - diff --git a/public/d2/docs/authenticate/fsa/multiapp/web-app-0.svg b/public/d2/docs/authenticate/fsa/multiapp/web-app-0.svg deleted file mode 100644 index fad8b8255..000000000 --- a/public/d2/docs/authenticate/fsa/multiapp/web-app-0.svg +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - -UserWeb app (frontend)Web app (backend)Scalekit Click "Login" GET /login Redirect to /oauth/authorize Redirect to /callback with code + state POST /oauth/token access_token, refresh_token, id_token Set session cookies + redirect - - - - - - - - - diff --git a/public/d2/docs/authenticate/implement-workflows/implement-webhooks-0.svg b/public/d2/docs/authenticate/implement-workflows/implement-webhooks-0.svg deleted file mode 100644 index 61aa3a3b4..000000000 --- a/public/d2/docs/authenticate/implement-workflows/implement-webhooks-0.svg +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - - - - -UserScalekitYour AppScalekit SDK Trigger event (login, signup, directory sync) Queue webhook event POST webhook payload Verify webhook signature Process event data Return success response (200/201) - - - - - - - - diff --git a/public/d2/docs/authenticate/interceptors/auth-flow-interceptors-0.svg b/public/d2/docs/authenticate/interceptors/auth-flow-interceptors-0.svg deleted file mode 100644 index 978caf3fd..000000000 --- a/public/d2/docs/authenticate/interceptors/auth-flow-interceptors-0.svg +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - - - - -Example of pre-signup interceptor UserYour appScalekitInterceptor Attempts sign-up Detects pre-signup trigger POST /auth/interceptors/pre-signup Process the request: allow IP address? Decision ALLOW or DENY Proceed or block sign-up - - - - - - - - diff --git a/public/d2/docs/authenticate/m2m/api-auth-quickstart-0.svg b/public/d2/docs/authenticate/m2m/api-auth-quickstart-0.svg deleted file mode 100644 index a4546efb2..000000000 --- a/public/d2/docs/authenticate/m2m/api-auth-quickstart-0.svg +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - -API ClientUserYour AppScalekit 1. Request to register an API client with necessary scopes 2. Creates an API client in your Scalekit environment 3. Gives you a client_id and client_secret Show the client credentials 4. Saves the API credetials 5. Requests access to protected resource 6. Validates the access tokens 7. Returns the protected resource - - - - - - - - - - diff --git a/public/d2/docs/authenticate/m2m/api-keys-0.svg b/public/d2/docs/authenticate/m2m/api-keys-0.svg deleted file mode 100644 index e538bd561..000000000 --- a/public/d2/docs/authenticate/m2m/api-keys-0.svg +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - - - - - - -Customer's App (API Client)UserYour AppScalekit Request API key Create token (organizationId, userId?) API key + tokenId API key Configure API key Request with Authorization header Validate token Organization ID (+ User ID if user-scoped) Filter data by org and user context Response - - - - - - - - - - - - diff --git a/public/d2/docs/authenticate/manage-users-orgs/custom-user-attributes-0.svg b/public/d2/docs/authenticate/manage-users-orgs/custom-user-attributes-0.svg deleted file mode 100644 index 934acba56..000000000 --- a/public/d2/docs/authenticate/manage-users-orgs/custom-user-attributes-0.svg +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - - - - - - -Your AppScalekitCustomerWorkspaceOrganizationIdentity ProviderUserzip_codeUserzip_codeUserzip_code zip_code90210 zip_code90210 - - - - diff --git a/public/d2/docs/authenticate/manage-users-orgs/email-domain-rules-0.svg b/public/d2/docs/authenticate/manage-users-orgs/email-domain-rules-0.svg deleted file mode 100644 index c43c13b5c..000000000 --- a/public/d2/docs/authenticate/manage-users-orgs/email-domain-rules-0.svg +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - - - - - - -userScalekitrestrictedsign-up pageinvite user ben0948@gmail.com woxoco4761@knilkk.com🚫 - - - - - diff --git a/public/d2/docs/authenticate/manage-users-orgs/email-domain-rules-1.svg b/public/d2/docs/authenticate/manage-users-orgs/email-domain-rules-1.svg deleted file mode 100644 index 42c91e01e..000000000 --- a/public/d2/docs/authenticate/manage-users-orgs/email-domain-rules-1.svg +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - - - - - - -Domain Match?Show option for the user to join organizationUser joined the organization Yes Join - - - - diff --git a/public/d2/docs/authenticate/manage-users-orgs/hosted-widgets-0.svg b/public/d2/docs/authenticate/manage-users-orgs/hosted-widgets-0.svg deleted file mode 100644 index 06f02734a..000000000 --- a/public/d2/docs/authenticate/manage-users-orgs/hosted-widgets-0.svg +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - -Your B2B appHosted widgets URL<SCALEKIT_ENVIRONMENT_URL>/ui/Authentication widgets- Signup- LoginUser widgets- User profile- User securityOrganization widgets- Organization settings- Member management- SSO configuration- SCIM configuration- Session policy Redirect - - - diff --git a/public/d2/docs/authenticate/manage-users-orgs/jit-provisioning-0.svg b/public/d2/docs/authenticate/manage-users-orgs/jit-provisioning-0.svg deleted file mode 100644 index 83c0e815d..000000000 --- a/public/d2/docs/authenticate/manage-users-orgs/jit-provisioning-0.svg +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - - - - - - -JIT Provisioning FlowUserIdPScalekitYour AppJIT Provisioning Authenticate through SSO Send user attributes Verify email domain matches organization domains Create user record with IdP attributes Create organization membership Assign default roles as per your app Sync user profile from IdP Return user profile and membership details Grant access to application - - - - - - - - - - - diff --git a/public/d2/docs/authenticate/manage-users-orgs/merge-identities-0.svg b/public/d2/docs/authenticate/manage-users-orgs/merge-identities-0.svg deleted file mode 100644 index 46fedcc21..000000000 --- a/public/d2/docs/authenticate/manage-users-orgs/merge-identities-0.svg +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - -Email: john.doee@megacrop.comGoogle OAuthMicrosoft OAuthUser Credential Credential Linked Linked - - - - - - diff --git a/public/d2/docs/authenticate/manage-users-orgs/merge-identities-1.svg b/public/d2/docs/authenticate/manage-users-orgs/merge-identities-1.svg deleted file mode 100644 index 131569e3d..000000000 --- a/public/d2/docs/authenticate/manage-users-orgs/merge-identities-1.svg +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - -UserOrganization 1 SSOOrganization 2 SSOSingle User Profile SSO Credential 1 SSO Credential 2 Linked Linked - - - - - - diff --git a/public/d2/docs/authenticate/manage-users-orgs/scim-provisioning-0.svg b/public/d2/docs/authenticate/manage-users-orgs/scim-provisioning-0.svg deleted file mode 100644 index a124d4333..000000000 --- a/public/d2/docs/authenticate/manage-users-orgs/scim-provisioning-0.svg +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - - - - -SCIM Provisioning FlowAdminDirectory ProviderScalekitYour App Configure SCIM integration SCIM API calls (Users, Groups) Validate and authorize request Sync users and group memberships Assign user roles based on groups Reflect updated users, organization memberships and access - - - - - - - - diff --git a/public/d2/docs/authenticate/mcp/auth-patterns-0.svg b/public/d2/docs/authenticate/mcp/auth-patterns-0.svg deleted file mode 100644 index cee3cccac..000000000 --- a/public/d2/docs/authenticate/mcp/auth-patterns-0.svg +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - -Human → MCP Server (OAuth 2.1 Authorization Code Flow)MCP ClientMCP ServerScalekit Authorization Server initiate 401 + WWW-Authenticate header Exchange code for access token Handles Authentication and user consent Issue token with required scopes Call tool with Bearer token Authorized response - - - - - - - - - diff --git a/public/d2/docs/authenticate/mcp/auth-patterns-1.svg b/public/d2/docs/authenticate/mcp/auth-patterns-1.svg deleted file mode 100644 index 0ddfc5d9b..000000000 --- a/public/d2/docs/authenticate/mcp/auth-patterns-1.svg +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - -Agent → MCP Server (OAuth 2.1 Client Credentials Flow)AgentScalekit Authorization ServerMCP Server Request access token (grant_type=client_credentials) Return access token with configured scopes Call tool with Bearer token Authorized response - - - - - - diff --git a/public/d2/docs/authenticate/mcp/auth-patterns-2.svg b/public/d2/docs/authenticate/mcp/auth-patterns-2.svg deleted file mode 100644 index 134fff3b1..000000000 --- a/public/d2/docs/authenticate/mcp/auth-patterns-2.svg +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - -MCP → External API (using API Key or Custom Token)Human/AgentMCP ServerExternal API Invoke tool Call endpoint with API Key / Service Token Return data Return formatted response - - - - - - diff --git a/public/d2/docs/authenticate/mcp/auth-patterns-3.svg b/public/d2/docs/authenticate/mcp/auth-patterns-3.svg deleted file mode 100644 index 1f107f33a..000000000 --- a/public/d2/docs/authenticate/mcp/auth-patterns-3.svg +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - -MCP → MCP Server (OAuth 2.1 Client Credentials Flow)Calling MCPScalekit Authorization ServerReceiving MCP Server Request access token (grant_type=client_credentials) Return access token with configured scopes Call tool with Bearer token Authorized response - - - - - - diff --git a/public/d2/docs/authenticate/mcp/auth-patterns-4.svg b/public/d2/docs/authenticate/mcp/auth-patterns-4.svg deleted file mode 100644 index ae820e770..000000000 --- a/public/d2/docs/authenticate/mcp/auth-patterns-4.svg +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - - - - - -MCP → API (Cascading the Same Token)MCP ClientMCP ServerBackend API Call tool with Bearer token Forward same Bearer token Validate token (issuer, scopes, exp) Return authorized data Return formatted response - - - - - - - diff --git a/public/d2/docs/authenticate/mcp/custom-auth-0.svg b/public/d2/docs/authenticate/mcp/custom-auth-0.svg deleted file mode 100644 index b5347fe1b..000000000 --- a/public/d2/docs/authenticate/mcp/custom-auth-0.svg +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - -MCP ClientScalekitYour App GET /oauth/authorize 302 to /login?login_request_id=<reqid>&state=<state> Auth user with existing auth system POST /auth-requests/<login_request_id>/user 200 OK 302 to /partner:callback?state=<state> Consent, code, token exchange, tokens - - - - - - - - - diff --git a/public/d2/docs/authenticate/mcp/expressjs-quickstart-0.svg b/public/d2/docs/authenticate/mcp/expressjs-quickstart-0.svg deleted file mode 100644 index 13743bafd..000000000 --- a/public/d2/docs/authenticate/mcp/expressjs-quickstart-0.svg +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - -Express.js MCP with ScalekitMCP ClientMCP ServerScalekit Request to call tool 401 Unauthorized + WWW-Authenticate header Exchange code for access token Issue Bearer token POST /mcp with Bearer token Validate token via Express middleware Tool response - - - - - - - - - diff --git a/public/d2/docs/authenticate/mcp/fastapi-fastmcp-quickstart-0.svg b/public/d2/docs/authenticate/mcp/fastapi-fastmcp-quickstart-0.svg deleted file mode 100644 index 73737849e..000000000 --- a/public/d2/docs/authenticate/mcp/fastapi-fastmcp-quickstart-0.svg +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - -FastAPI + FastMCP with ScalekitMCP ClientMCP ServerScalekit Request to call tool 401 Unauthorized + WWW-Authenticate header Exchange code for access token Issue Bearer token Call tool with Bearer token Validate token via FastAPI middleware Tool response - - - - - - - - - diff --git a/public/d2/docs/authenticate/mcp/fastmcp-quickstart-0.svg b/public/d2/docs/authenticate/mcp/fastmcp-quickstart-0.svg deleted file mode 100644 index b6fc59f26..000000000 --- a/public/d2/docs/authenticate/mcp/fastmcp-quickstart-0.svg +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - - - - -FastMCP with ScalekitMCP ClientMCP ServerScalekit Authorization Server Initiate connection 401 + WWW-Authenticate header Exchange code for access token Issue token with required scopes Call tool with Bearer token Authorized todo response - - - - - - - - diff --git a/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-0.svg b/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-0.svg deleted file mode 100644 index f23adc966..000000000 --- a/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-0.svg +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - -MCP ServerChat interfaceData and file systemsDevelopment toolsProductivity toolsIDEs and code editorsOther AI applicationsScalekitOAuth 2.1 server - - - diff --git a/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-1.svg b/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-1.svg deleted file mode 100644 index 20f38cb46..000000000 --- a/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-1.svg +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - - - - - - -MCP ClientMCP ServerAuthorization ServerUser Request resource (unauthorized) 401 + Auth server info Discover capabilities Register client Request authorization Authenticate & consent Access token Request with token Protected resource Refresh token (when expired) - - - - - - - - - - - - diff --git a/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-2.svg b/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-2.svg deleted file mode 100644 index 4c7e22d69..000000000 --- a/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-2.svg +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - - - - - - -MCP ClientMCP ServerAuthorization ServerUserDiscovery phaseDynamic client registrationAuthorization code flowAccess phaseToken refresh (when needed) POST /mcp/tools/weather(No Authorization Header) 401 UnauthorizedWWW-Authenticate: resource_metadata="..." GET /.well-known/oauth-protected-resource Resource metadata with authorization_servers GET /.well-known/oauth-authorization-server Authorization server metadata(endpoints, supported flows, etc.) POST /oauth2/register(client metadata) client_id, client_secret(if confidential client) Redirect to authorization endpointwith PKCE challenge GET /oauth2/authorize(user authenticates & grants consent) Redirect with authorization code Authorization code returned POST /oauth2/token(code + PKCE verifier) access_token, refresh_tokenwith scopes (e.g., "mcp:tools:weather") POST /mcp/tools/weatherAuthorization: Bearer <access_token> Validate token and check scopes("mcp:tools:weather") If token valid: Process weather request 200 OKWeather data response If invalid: 401/403 ErrorToken invalid or insufficient scope POST /oauth2/token(grant_type=refresh_token) New access_token, refresh_token - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/d2/docs/authenticate/mcp/overview-0.svg b/public/d2/docs/authenticate/mcp/overview-0.svg deleted file mode 100644 index 70800dfe6..000000000 --- a/public/d2/docs/authenticate/mcp/overview-0.svg +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - - - - -MCP Login Discovery PhaseMCP ClientYour MCP ServerScalekit Auth ServerYour Customer's User POST /mcp(Without Authorization Header) 401 Unauthorized(WWW-Authenticate: resource_metadata="...") GET /.well-known/oauth-protected-resource(Fetch protected MCP Server's metadata) Returns resource metadata(authorization server URL, scopes) GET /.well-known/oauth-authorization-server Scalekit Auth Server metadata - - - - - - - - diff --git a/public/d2/docs/authenticate/mcp/overview-1.svg b/public/d2/docs/authenticate/mcp/overview-1.svg deleted file mode 100644 index b7d70dbf8..000000000 --- a/public/d2/docs/authenticate/mcp/overview-1.svg +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - -MCP DCR Authorization PhaseMCP ClientYour MCP ServerScalekit Auth ServerYour Customer's User POST /res_123../client_register return with client_id and client_secret redirect to oauth/authorize Prompt to Authenticate & Consent Authenticates & Consents Returns authorization code POST /oauth/token Issues access_token, id_token, scopes - - - - - - - - - - diff --git a/public/d2/docs/authenticate/mcp/overview-2.svg b/public/d2/docs/authenticate/mcp/overview-2.svg deleted file mode 100644 index a1331b6c8..000000000 --- a/public/d2/docs/authenticate/mcp/overview-2.svg +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - -MCP CIMD Authorization PhaseMCP ClientYour MCP ServerScalekit Auth ServerYour Customer's User Redirect to oauth/authorize with PKCE Challenge Authorization server fetches client metadata Prompt to Authenticate & Consent Authenticates & Consents Returns authorization code POST /oauth/token with PKCE verifier and auth code Issues access_token, id_token, scopes - - - - - - - - - diff --git a/public/d2/docs/authenticate/mcp/overview-3.svg b/public/d2/docs/authenticate/mcp/overview-3.svg deleted file mode 100644 index 9649da92e..000000000 --- a/public/d2/docs/authenticate/mcp/overview-3.svg +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - - - - - -Access and Refresh Token PhaseMCP ClientYour MCP ServerScalekit Auth Serveraccess_phaserefresh_phase Tool call with Bearer token Validate token Authorized response POST /oauth/token(grant_type=refresh_token) New access token & refresh token - - - - - - - diff --git a/public/d2/docs/authenticate/mcp/topologies/agent-mcp-0.svg b/public/d2/docs/authenticate/mcp/topologies/agent-mcp-0.svg deleted file mode 100644 index 1aaddc656..000000000 --- a/public/d2/docs/authenticate/mcp/topologies/agent-mcp-0.svg +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - -Agent ? MCP Server (OAuth 2.1 Client Credentials Flow)AgentScalekit Authorization ServerMCP Server Request access token (grant_type=client_credentials) Return access token with configured scopes Call tool with Bearer token Authorized response - - - - - - diff --git a/public/d2/docs/authenticate/mcp/topologies/human-mcp-0.svg b/public/d2/docs/authenticate/mcp/topologies/human-mcp-0.svg deleted file mode 100644 index d65ba72e6..000000000 --- a/public/d2/docs/authenticate/mcp/topologies/human-mcp-0.svg +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - -Human ? MCP Server (OAuth 2.1 Authorization Code Flow)MCP ClientMCP ServerScalekit Authorization Server initiate 401 + WWW-Authenticate header Exchange code for access token Handles Authentication and user consent Issue token with required scopes Call tool with Bearer token Authorized response - - - - - - - - - diff --git a/public/d2/docs/authenticate/mcp/topologies/mcp-api-0.svg b/public/d2/docs/authenticate/mcp/topologies/mcp-api-0.svg deleted file mode 100644 index 987ec4349..000000000 --- a/public/d2/docs/authenticate/mcp/topologies/mcp-api-0.svg +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - -MCP ? External API (using API Key or Custom Token)Human/AgentMCP ServerExternal API Invoke tool Call endpoint with API Key / Service Token Return data Return formatted response - - - - - - diff --git a/public/d2/docs/authenticate/mcp/topologies/mcp-api-1.svg b/public/d2/docs/authenticate/mcp/topologies/mcp-api-1.svg deleted file mode 100644 index 1aaddc656..000000000 --- a/public/d2/docs/authenticate/mcp/topologies/mcp-api-1.svg +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - -Agent ? MCP Server (OAuth 2.1 Client Credentials Flow)AgentScalekit Authorization ServerMCP Server Request access token (grant_type=client_credentials) Return access token with configured scopes Call tool with Bearer token Authorized response - - - - - - diff --git a/public/d2/docs/authenticate/mcp/topologies/mcp-api-2.svg b/public/d2/docs/authenticate/mcp/topologies/mcp-api-2.svg deleted file mode 100644 index 5f8ebe7fe..000000000 --- a/public/d2/docs/authenticate/mcp/topologies/mcp-api-2.svg +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - -MCP ? API (Cascading the Same Token)MCP ClientMCP ServerBackend MCP/API Call tool with Bearer token Forward same Bearer token Validate token (issuer, scopes, exp) Return authorized data - - - - - - diff --git a/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg b/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg deleted file mode 100644 index 2c7def278..000000000 --- a/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - - - - - - -xmcp MCP with ScalekitMCP ClientMCP ServerScalekit POST /mcp 401 + WWW-Authenticate header GET /.well-known/oauth-protected-resource Resource metadata (authorization_servers) OAuth Authorization Code + PKCE Issue Bearer token POST /mcp with Bearer token Verify token via JWKS Tool response - - - - - - - - - - - diff --git a/public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-0.svg b/public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-0.svg deleted file mode 100644 index afa63f056..000000000 --- a/public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-0.svg +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - -Gmail inboxIngest(AgentKit)LiteLLM pipelineStore(SQLite)ClassifyRoute(routing.yaml)Research(AgentKit)Draft - - - diff --git a/public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-1.svg b/public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-1.svg deleted file mode 100644 index 83060cf23..000000000 --- a/public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-1.svg +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - - - - - - -Pending proposal(SQLite)Notify Slack(AgentKit)Dashboard(localhost:3000)ApproveReject(no side effects)Create issue+ send reply(AgentKit) approve reject - - - - diff --git a/public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg b/public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg deleted file mode 100644 index 256430d62..000000000 --- a/public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - -Managed by ScalekitYourAppGoogle OAuthScalekitHubspot - - - diff --git a/public/d2/docs/directory/guides/group-based-role-assignment-0.svg b/public/d2/docs/directory/guides/group-based-role-assignment-0.svg deleted file mode 100644 index 7c8bfbc2e..000000000 --- a/public/d2/docs/directory/guides/group-based-role-assignment-0.svg +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - -Group-based role assignmentDirectory ProvidersYour ApplicationScalekitEngineering GroupEditor RoleManagers GroupAdmin Role - - - diff --git a/public/d2/docs/directory/scim/quickstart-0.svg b/public/d2/docs/directory/scim/quickstart-0.svg deleted file mode 100644 index 386825fe8..000000000 --- a/public/d2/docs/directory/scim/quickstart-0.svg +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - - - - -SCIM Provisioning SequenceDirectory ProviderScalekitYour App User/Group changes occur Webhook events sent (user_created, user_updated, etc.) Process webhook and verify signature Update local user database (create, update, deactivate) API calls for sync (list users, groups) Fetch latest data from directory provider - - - - - - - - diff --git a/public/d2/docs/fsa/data-modelling-0.svg b/public/d2/docs/fsa/data-modelling-0.svg deleted file mode 100644 index 9d7bab27a..000000000 --- a/public/d2/docs/fsa/data-modelling-0.svg +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - - - - - - -john.doe@gmail.commary.jane@company.comYour AppCustomer Org 1Customer Org 2 (Enforces SSO)Scalekit Email Magic Link SAML/OIDC SSOAuthenticates toAuthenticates to - - - - - - diff --git a/public/d2/docs/fsa/guides/manage-users-0.svg b/public/d2/docs/fsa/guides/manage-users-0.svg deleted file mode 100644 index 0f3e9eec9..000000000 --- a/public/d2/docs/fsa/guides/manage-users-0.svg +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - - - - - -UseridstringPKemailstringexternal_idstringcreate_timetimestampupdate_timetimestampmetadataobjectUserProfileidstringPKuser_idstringFKfirst_namestringlast_namestringnamestringemail_verifiedbooleanlocalestringphone_numberstringcustom_attributesobjectmetadataobjectMembershipidstringPKuser_idstringFKorganization_idstringdisplay_namestringmembership_statusenumjoin_timetimestampcreated_attimestampaccepted_attimestampexpires_attimestampinviter_emailstringmetadataobjectRoleidstringPKmembership_idstringFKnamestringdisplay_namestring 1:1 1:N 1:N - - - - - diff --git a/public/d2/docs/fsa/guides/user-invitations-0.svg b/public/d2/docs/fsa/guides/user-invitations-0.svg deleted file mode 100644 index 32b89a709..000000000 --- a/public/d2/docs/fsa/guides/user-invitations-0.svg +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - -UserAppScalekitDashboard Clicks invitation link Redirects to initiate login endpoint Creates auth URL, redirects to Scalekit’s login page Completes authentication Redirects to callback URL with auth code Exchanges code for ID Token & user details Redirects user Decode ID Token for user details - - - - - - - - - - diff --git a/public/d2/docs/guides/integrations/auth-systems/firebase-0.svg b/public/d2/docs/guides/integrations/auth-systems/firebase-0.svg deleted file mode 100644 index c47b18cf3..000000000 --- a/public/d2/docs/guides/integrations/auth-systems/firebase-0.svg +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - -UserFirebase OIDCScalekitIdentity ProviderYour App - - - diff --git a/public/d2/docs/guides/integrations/auth-systems/firebase-1.svg b/public/d2/docs/guides/integrations/auth-systems/firebase-1.svg deleted file mode 100644 index 07cfdeb7a..000000000 --- a/public/d2/docs/guides/integrations/auth-systems/firebase-1.svg +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - -1. User clicks "Sign In"2. Frontend calls backend → Backend generates Scalekit auth URL3. Frontend redirects to Scalekit auth URL4. Scalekit redirects to Identity Provider5. User authenticates with IdP6. IdP redirects back to Scalekit7. Scalekit redirects to your backend callback URL with code8. Backend exchanges code for user profile with Scalekit9. Backend creates custom Firebase token10. Backend returns custom token to frontend11. Frontend calls signInWithCustomToken(firebase, customToken)12. Firebase creates/updates user and returns Firebase user object13. User is authenticated and can access your app! - - - diff --git a/public/d2/docs/guides/sso/sso-migration-strategy-0.svg b/public/d2/docs/guides/sso/sso-migration-strategy-0.svg deleted file mode 100644 index f7ba12c4e..000000000 --- a/public/d2/docs/guides/sso/sso-migration-strategy-0.svg +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - - - - - - -Customer's IdP ConfigurationYour Application's DNSExternal SSO Provider auth.yourapp.com/rest/the/path auth.yourapp.com/rest/the/path - - - - diff --git a/public/d2/docs/guides/sso/sso-migration-strategy-1.svg b/public/d2/docs/guides/sso/sso-migration-strategy-1.svg deleted file mode 100644 index a21e0acb8..000000000 --- a/public/d2/docs/guides/sso/sso-migration-strategy-1.svg +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - - - - - - -UserYourAppSSO ProxySSO ProviderScaleKitIdentity Provider SSO login request Check if organization has been migrated Forward request To External SSO Provider SAML/OIDC auth User details Return user details To ScaleKit (Migrated tenant) SAML/OIDC auth User details Return user details Forward user details Access granted - - - - - - - - - - - - - - - diff --git a/public/d2/docs/mcp/auth-methods/custom-auth-0.svg b/public/d2/docs/mcp/auth-methods/custom-auth-0.svg deleted file mode 100644 index 300543153..000000000 --- a/public/d2/docs/mcp/auth-methods/custom-auth-0.svg +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - - - - -Scalekit MCP Bring you own Auth flowMCP ClientScalekit Auth ServerYour B2B App Initiate /oauth/authorize (DCR, CIMD) Redirect to /login?login_request_id&state POST user details (Machine-to-Machine) 200 Success Response (Upon Successful Login) Redirect to /partner:callback?state Continue Consent, token exchange and permissions delegation. - - - - - - - - diff --git a/public/d2/docs/mcp/auth-methods/enterprise-0.svg b/public/d2/docs/mcp/auth-methods/enterprise-0.svg deleted file mode 100644 index 979e48c9d..000000000 --- a/public/d2/docs/mcp/auth-methods/enterprise-0.svg +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - -MCP SSO Authorization PhaseMCP ClientScalekit Auth ServerYour Customer's IdP Okta, EntraID etc Redirect using /oauth/authorize URL redirects using /authorize URL returns authorization code /token endpoint to get tokens with the auth code Returns with relevant information inside access_token and id_token returns with authorization code /oauth/token/ using auth code Issues access_token, id_token, refresh_token - - - - - - - - - - diff --git a/public/d2/docs/passwordless/oidc-0.svg b/public/d2/docs/passwordless/oidc-0.svg deleted file mode 100644 index f0ebca460..000000000 --- a/public/d2/docs/passwordless/oidc-0.svg +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - - - - - -UserScalekitYour app Enter email address Send OTP or magic link Verify identity (OTP/magic link) Exchange code for user details Create session and grant access - - - - - - - diff --git a/public/d2/docs/sso/guides/idp-init-sso-0.svg b/public/d2/docs/sso/guides/idp-init-sso-0.svg deleted file mode 100644 index 9af69fcf6..000000000 --- a/public/d2/docs/sso/guides/idp-init-sso-0.svg +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - - - - - - -IdP-initiated SSO FlowUserIdPScalekitYourApp Select your application from IdP portal Send SAML assertion or OIDC request Redirect to initiate login endpoint with JWT Convert to SP-initiated authorization URL Standard authentication flow Authenticate if needed Send response Callback with authorization code Exchange code for tokens Log in user - - - - - - - - - - - - diff --git a/public/d2/docs/sso/guides/idp-init-sso-1.svg b/public/d2/docs/sso/guides/idp-init-sso-1.svg deleted file mode 100644 index 2bd8c7312..000000000 --- a/public/d2/docs/sso/guides/idp-init-sso-1.svg +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - - - - - - -Downstream Auth Provider IntegrationUserIdPScalekitYourAppFirebase Select your application Send IdP request Redirect with JWT triggers sign-in uses Authorization URL from Step 3 Standard SP-initiated flow Send response Exchange code for tokens User authenticated Complete login - - - - - - - - - - - - diff --git a/src/data/agent-connectors/clickhouse 3.ts b/src/data/agent-connectors/clickhouse 3.ts deleted file mode 100644 index b4119127e..000000000 --- a/src/data/agent-connectors/clickhouse 3.ts +++ /dev/null @@ -1,221 +0,0 @@ -import type { Tool } from '../../types/agent-connectors' - -export const tools: Tool[] = [ - { - name: 'clickhouse_get_clickpipe', - description: `Get configuration and status for a specific ClickPipe by ID.`, - params: [ - { - name: 'clickPipeId', - type: 'string', - required: true, - description: `ID of the requested ClickPipe`, - }, - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization that owns the service`, - }, - { - name: 'serviceId', - type: 'string', - required: true, - description: `ID of the service that owns the ClickPipe`, - }, - ], - }, - { - name: 'clickhouse_get_organization_cost', - description: `Get billing and usage cost data for an organization over a date range (max 31 days). Returns a grand total and daily per-entity cost breakdown.`, - params: [ - { - name: 'organizationId', - type: 'string', - required: true, - description: `The unique identifier of the organization`, - }, - { - name: 'from_date', - type: 'string', - required: false, - description: `Start date for the report, e.g. 2024-12-19 (YYYY-MM-DD)`, - }, - { - name: 'to_date', - type: 'string', - required: false, - description: `End date (inclusive) for the report, e.g. 2024-12-20 (YYYY-MM-DD). Cannot be more than 30 days after from_date.`, - }, - ], - }, - { - name: 'clickhouse_get_organization_details', - description: `Get details for a specific ClickHouse Cloud organization: name, tier, status, and settings. Use get_organizations to find the organizationId.`, - params: [ - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization to retrieve`, - }, - ], - }, - { - name: 'clickhouse_get_organizations', - description: `List all ClickHouse Cloud organizations accessible with the current API key. Returns organization IDs and names. Use the returned organizationId with all other tools.`, - params: [], - }, - { - name: 'clickhouse_get_service_backup_configuration', - description: `Get the backup schedule and retention configuration for a service.`, - params: [ - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization that owns the service`, - }, - { name: 'serviceId', type: 'string', required: true, description: `ID of the service` }, - ], - }, - { - name: 'clickhouse_get_service_backup_details', - description: `Get details for a specific backup: status, size, duration, and creation time.`, - params: [ - { name: 'backupId', type: 'string', required: true, description: `ID of the backup` }, - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization that owns the service`, - }, - { name: 'serviceId', type: 'string', required: true, description: `ID of the service` }, - ], - }, - { - name: 'clickhouse_get_service_details', - description: `Get full details for a specific service: status, region, tier, endpoints, and scaling configuration.`, - params: [ - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization`, - }, - { - name: 'serviceId', - type: 'string', - required: true, - description: `ID of the service to retrieve`, - }, - ], - }, - { - name: 'clickhouse_get_services_list', - description: `List all services (clusters) in a ClickHouse Cloud organization. Returns service IDs, names, status, region, and tier. Use the returned serviceId with other tools.`, - params: [ - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization whose services are to be listed`, - }, - ], - }, - { - name: 'clickhouse_list_clickpipes', - description: `List all ClickPipes (managed data ingestion pipelines) configured for a service.`, - params: [ - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization`, - }, - { - name: 'serviceId', - type: 'string', - required: true, - description: `ID of the service to list ClickPipes for`, - }, - ], - }, - { - name: 'clickhouse_list_databases', - description: `List all databases in a ClickHouse service. Use the returned database names with list_tables and run_select_query.`, - params: [{ name: 'serviceId', type: 'string', required: true, description: `No description.` }], - }, - { - name: 'clickhouse_list_service_backups', - description: `List all backups for a service, most recent first. Returns backup IDs, status, size, and timestamps.`, - params: [ - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization`, - }, - { - name: 'serviceId', - type: 'string', - required: true, - description: `ID of the service to list backups for`, - }, - ], - }, - { - name: 'clickhouse_list_tables', - description: `List all tables in a database, including column names and types. Supports LIKE pattern filtering.`, - params: [ - { - name: 'database', - type: 'string', - required: true, - description: `Name of the database to list tables from`, - }, - { - name: 'serviceId', - type: 'string', - required: true, - description: `The unique identifier of the ClickHouse service`, - }, - { - name: 'like', - type: 'string', - required: false, - description: `Optional SQL LIKE pattern to filter tables by name (e.g., "events_%")`, - }, - { - name: 'notLike', - type: 'string', - required: false, - description: `Optional SQL LIKE pattern to exclude tables by name`, - }, - ], - }, - { - name: 'clickhouse_run_select_query', - description: `Execute a read-only SELECT query against a ClickHouse service. Only SELECT statements are permitted.`, - params: [ - { - name: 'query', - type: 'string', - required: true, - description: `A valid ClickHouse SELECT query. Only read-only SELECT statements are permitted. e.g. SELECT * FROM my_table LIMIT 10`, - }, - { - name: 'serviceId', - type: 'string', - required: true, - description: `The unique identifier of the ClickHouse service`, - }, - { - name: 'timeoutSeconds', - type: 'integer', - required: false, - description: `Query timeout in seconds. Default: 300 (5 min), max: 3600 (1 hour). Use lower values for simple queries.`, - }, - ], - }, -] From bcd59e63566b865ff12893d69ffc8ce3393dec04 Mon Sep 17 00:00:00 2001 From: Pranesh Date: Tue, 26 May 2026 14:49:39 +0530 Subject: [PATCH 03/15] Revert "chore: remove unreferenced d2 SVG assets and stale duplicate data files" This reverts commit 3e3c235b8ec49e597a5adf98e6a22c6494148a7e. --- .../authentication/token-management-0.svg | 193 +++++++++++++++ .../agentkit/mcp/configure-mcp-server-0.svg | 213 ++++++++++++++++ .../agentkit/mcp/configure-mcp-server-1.svg | 225 +++++++++++++++++ .../agentkit/mcp/configure-mcp-server-2.svg | 229 ++++++++++++++++++ public/d2/docs/agentkit/openclaw-0.svg | 193 +++++++++++++++ public/d2/docs/agentkit/overview-0.svg | 196 +++++++++++++++ .../d2/docs/agentkit/user-verification-0.svg | 199 +++++++++++++++ .../auth-methods/authentication-flow-0.svg | 194 +++++++++++++++ .../authz/create-roles-permissions-0.svg | 194 +++++++++++++++ .../authz/implement-access-control-0.svg | 189 +++++++++++++++ .../d2/docs/authenticate/authz/overview-0.svg | 189 +++++++++++++++ .../fsa/multiapp/native-app-0.svg | 193 +++++++++++++++ .../authenticate/fsa/multiapp/overview-0.svg | 194 +++++++++++++++ .../fsa/multiapp/single-page-app-0.svg | 191 +++++++++++++++ .../authenticate/fsa/multiapp/web-app-0.svg | 192 +++++++++++++++ .../implement-webhooks-0.svg | 191 +++++++++++++++ .../interceptors/auth-flow-interceptors-0.svg | 191 +++++++++++++++ .../m2m/api-auth-quickstart-0.svg | 193 +++++++++++++++ .../d2/docs/authenticate/m2m/api-keys-0.svg | 195 +++++++++++++++ .../custom-user-attributes-0.svg | 194 +++++++++++++++ .../email-domain-rules-0.svg | 195 +++++++++++++++ .../email-domain-rules-1.svg | 187 ++++++++++++++ .../manage-users-orgs/hosted-widgets-0.svg | 186 ++++++++++++++ .../manage-users-orgs/jit-provisioning-0.svg | 194 +++++++++++++++ .../manage-users-orgs/merge-identities-0.svg | 189 +++++++++++++++ .../manage-users-orgs/merge-identities-1.svg | 189 +++++++++++++++ .../manage-users-orgs/scim-provisioning-0.svg | 191 +++++++++++++++ .../docs/authenticate/mcp/auth-patterns-0.svg | 192 +++++++++++++++ .../docs/authenticate/mcp/auth-patterns-1.svg | 189 +++++++++++++++ .../docs/authenticate/mcp/auth-patterns-2.svg | 189 +++++++++++++++ .../docs/authenticate/mcp/auth-patterns-3.svg | 189 +++++++++++++++ .../docs/authenticate/mcp/auth-patterns-4.svg | 190 +++++++++++++++ .../docs/authenticate/mcp/custom-auth-0.svg | 192 +++++++++++++++ .../mcp/expressjs-quickstart-0.svg | 192 +++++++++++++++ .../mcp/fastapi-fastmcp-quickstart-0.svg | 192 +++++++++++++++ .../authenticate/mcp/fastmcp-quickstart-0.svg | 191 +++++++++++++++ .../authenticate/mcp/intro-to-mcp-auth-0.svg | 186 ++++++++++++++ .../authenticate/mcp/intro-to-mcp-auth-1.svg | 195 +++++++++++++++ .../authenticate/mcp/intro-to-mcp-auth-2.svg | 206 ++++++++++++++++ .../d2/docs/authenticate/mcp/overview-0.svg | 191 +++++++++++++++ .../d2/docs/authenticate/mcp/overview-1.svg | 193 +++++++++++++++ .../d2/docs/authenticate/mcp/overview-2.svg | 192 +++++++++++++++ .../d2/docs/authenticate/mcp/overview-3.svg | 190 +++++++++++++++ .../mcp/topologies/agent-mcp-0.svg | 189 +++++++++++++++ .../mcp/topologies/human-mcp-0.svg | 192 +++++++++++++++ .../authenticate/mcp/topologies/mcp-api-0.svg | 189 +++++++++++++++ .../authenticate/mcp/topologies/mcp-api-1.svg | 189 +++++++++++++++ .../authenticate/mcp/topologies/mcp-api-2.svg | 189 +++++++++++++++ .../authenticate/mcp/xmcp-quickstart-0.svg | 194 +++++++++++++++ .../litellm-agentkit-inbox-triage-0.svg | 186 ++++++++++++++ .../litellm-agentkit-inbox-triage-1.svg | 187 ++++++++++++++ .../tools/use-scalekit-credentials-0.svg | 186 ++++++++++++++ .../guides/group-based-role-assignment-0.svg | 186 ++++++++++++++ .../d2/docs/directory/scim/quickstart-0.svg | 191 +++++++++++++++ public/d2/docs/fsa/data-modelling-0.svg | 196 +++++++++++++++ public/d2/docs/fsa/guides/manage-users-0.svg | 188 ++++++++++++++ .../d2/docs/fsa/guides/user-invitations-0.svg | 193 +++++++++++++++ .../integrations/auth-systems/firebase-0.svg | 179 ++++++++++++++ .../integrations/auth-systems/firebase-1.svg | 179 ++++++++++++++ .../guides/sso/sso-migration-strategy-0.svg | 187 ++++++++++++++ .../guides/sso/sso-migration-strategy-1.svg | 208 ++++++++++++++++ .../docs/mcp/auth-methods/custom-auth-0.svg | 191 +++++++++++++++ .../d2/docs/mcp/auth-methods/enterprise-0.svg | 193 +++++++++++++++ public/d2/docs/passwordless/oidc-0.svg | 190 +++++++++++++++ public/d2/docs/sso/guides/idp-init-sso-0.svg | 195 +++++++++++++++ public/d2/docs/sso/guides/idp-init-sso-1.svg | 195 +++++++++++++++ src/data/agent-connectors/clickhouse 3.ts | 221 +++++++++++++++++ 67 files changed, 12941 insertions(+) create mode 100644 public/d2/docs/agentkit/authentication/token-management-0.svg create mode 100644 public/d2/docs/agentkit/mcp/configure-mcp-server-0.svg create mode 100644 public/d2/docs/agentkit/mcp/configure-mcp-server-1.svg create mode 100644 public/d2/docs/agentkit/mcp/configure-mcp-server-2.svg create mode 100644 public/d2/docs/agentkit/openclaw-0.svg create mode 100644 public/d2/docs/agentkit/overview-0.svg create mode 100644 public/d2/docs/agentkit/user-verification-0.svg create mode 100644 public/d2/docs/authenticate/auth-methods/authentication-flow-0.svg create mode 100644 public/d2/docs/authenticate/authz/create-roles-permissions-0.svg create mode 100644 public/d2/docs/authenticate/authz/implement-access-control-0.svg create mode 100644 public/d2/docs/authenticate/authz/overview-0.svg create mode 100644 public/d2/docs/authenticate/fsa/multiapp/native-app-0.svg create mode 100644 public/d2/docs/authenticate/fsa/multiapp/overview-0.svg create mode 100644 public/d2/docs/authenticate/fsa/multiapp/single-page-app-0.svg create mode 100644 public/d2/docs/authenticate/fsa/multiapp/web-app-0.svg create mode 100644 public/d2/docs/authenticate/implement-workflows/implement-webhooks-0.svg create mode 100644 public/d2/docs/authenticate/interceptors/auth-flow-interceptors-0.svg create mode 100644 public/d2/docs/authenticate/m2m/api-auth-quickstart-0.svg create mode 100644 public/d2/docs/authenticate/m2m/api-keys-0.svg create mode 100644 public/d2/docs/authenticate/manage-users-orgs/custom-user-attributes-0.svg create mode 100644 public/d2/docs/authenticate/manage-users-orgs/email-domain-rules-0.svg create mode 100644 public/d2/docs/authenticate/manage-users-orgs/email-domain-rules-1.svg create mode 100644 public/d2/docs/authenticate/manage-users-orgs/hosted-widgets-0.svg create mode 100644 public/d2/docs/authenticate/manage-users-orgs/jit-provisioning-0.svg create mode 100644 public/d2/docs/authenticate/manage-users-orgs/merge-identities-0.svg create mode 100644 public/d2/docs/authenticate/manage-users-orgs/merge-identities-1.svg create mode 100644 public/d2/docs/authenticate/manage-users-orgs/scim-provisioning-0.svg create mode 100644 public/d2/docs/authenticate/mcp/auth-patterns-0.svg create mode 100644 public/d2/docs/authenticate/mcp/auth-patterns-1.svg create mode 100644 public/d2/docs/authenticate/mcp/auth-patterns-2.svg create mode 100644 public/d2/docs/authenticate/mcp/auth-patterns-3.svg create mode 100644 public/d2/docs/authenticate/mcp/auth-patterns-4.svg create mode 100644 public/d2/docs/authenticate/mcp/custom-auth-0.svg create mode 100644 public/d2/docs/authenticate/mcp/expressjs-quickstart-0.svg create mode 100644 public/d2/docs/authenticate/mcp/fastapi-fastmcp-quickstart-0.svg create mode 100644 public/d2/docs/authenticate/mcp/fastmcp-quickstart-0.svg create mode 100644 public/d2/docs/authenticate/mcp/intro-to-mcp-auth-0.svg create mode 100644 public/d2/docs/authenticate/mcp/intro-to-mcp-auth-1.svg create mode 100644 public/d2/docs/authenticate/mcp/intro-to-mcp-auth-2.svg create mode 100644 public/d2/docs/authenticate/mcp/overview-0.svg create mode 100644 public/d2/docs/authenticate/mcp/overview-1.svg create mode 100644 public/d2/docs/authenticate/mcp/overview-2.svg create mode 100644 public/d2/docs/authenticate/mcp/overview-3.svg create mode 100644 public/d2/docs/authenticate/mcp/topologies/agent-mcp-0.svg create mode 100644 public/d2/docs/authenticate/mcp/topologies/human-mcp-0.svg create mode 100644 public/d2/docs/authenticate/mcp/topologies/mcp-api-0.svg create mode 100644 public/d2/docs/authenticate/mcp/topologies/mcp-api-1.svg create mode 100644 public/d2/docs/authenticate/mcp/topologies/mcp-api-2.svg create mode 100644 public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg create mode 100644 public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-0.svg create mode 100644 public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-1.svg create mode 100644 public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg create mode 100644 public/d2/docs/directory/guides/group-based-role-assignment-0.svg create mode 100644 public/d2/docs/directory/scim/quickstart-0.svg create mode 100644 public/d2/docs/fsa/data-modelling-0.svg create mode 100644 public/d2/docs/fsa/guides/manage-users-0.svg create mode 100644 public/d2/docs/fsa/guides/user-invitations-0.svg create mode 100644 public/d2/docs/guides/integrations/auth-systems/firebase-0.svg create mode 100644 public/d2/docs/guides/integrations/auth-systems/firebase-1.svg create mode 100644 public/d2/docs/guides/sso/sso-migration-strategy-0.svg create mode 100644 public/d2/docs/guides/sso/sso-migration-strategy-1.svg create mode 100644 public/d2/docs/mcp/auth-methods/custom-auth-0.svg create mode 100644 public/d2/docs/mcp/auth-methods/enterprise-0.svg create mode 100644 public/d2/docs/passwordless/oidc-0.svg create mode 100644 public/d2/docs/sso/guides/idp-init-sso-0.svg create mode 100644 public/d2/docs/sso/guides/idp-init-sso-1.svg create mode 100644 src/data/agent-connectors/clickhouse 3.ts diff --git a/public/d2/docs/agentkit/authentication/token-management-0.svg b/public/d2/docs/agentkit/authentication/token-management-0.svg new file mode 100644 index 000000000..36ba4c950 --- /dev/null +++ b/public/d2/docs/agentkit/authentication/token-management-0.svg @@ -0,0 +1,193 @@ + + + + + + + + + + + + +Token Lifecycle and RefreshUserScalekitProvider Authenticate OAuth Flow Access Token (expires in 1h) Connection Active Monitor expiration (55 min) Refresh access token New Access Token (expires in 1h) Update token, reset timer + + + + + + + + + + diff --git a/public/d2/docs/agentkit/mcp/configure-mcp-server-0.svg b/public/d2/docs/agentkit/mcp/configure-mcp-server-0.svg new file mode 100644 index 000000000..6b8b8f019 --- /dev/null +++ b/public/d2/docs/agentkit/mcp/configure-mcp-server-0.svg @@ -0,0 +1,213 @@ + + + + + + + + + + + + +How Scalekit MCP tool access works: one-time setupONE-TIME SETUPNext: Per-user →Your AppMCP Configgmail_fetch_mailsgooglecalendar_create_event create_config() ensure_instance() + + + + + + + + + + + + + + + + diff --git a/public/d2/docs/agentkit/mcp/configure-mcp-server-1.svg b/public/d2/docs/agentkit/mcp/configure-mcp-server-1.svg new file mode 100644 index 000000000..95e252582 --- /dev/null +++ b/public/d2/docs/agentkit/mcp/configure-mcp-server-1.svg @@ -0,0 +1,225 @@ + + + + + + + + + + + + +How Scalekit MCP tool access works: per-user← One-time setupPER-USERNext: Runtime →Per-user instancemcp.scalekit.com/u/john-doe/...User authorizes auth link MCP URL + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/d2/docs/agentkit/mcp/configure-mcp-server-2.svg b/public/d2/docs/agentkit/mcp/configure-mcp-server-2.svg new file mode 100644 index 000000000..ba3e0866e --- /dev/null +++ b/public/d2/docs/agentkit/mcp/configure-mcp-server-2.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + +How Scalekit MCP tool access works: runtime← Per-user↺ One-time setupRUNTIMEAI Agent(MCP URL)GmailGoogle Calendar tool calls tool calls + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/d2/docs/agentkit/openclaw-0.svg b/public/d2/docs/agentkit/openclaw-0.svg new file mode 100644 index 000000000..085fc351c --- /dev/null +++ b/public/d2/docs/agentkit/openclaw-0.svg @@ -0,0 +1,193 @@ + + + + + + + + + + + + +OpenClaw agentScalekit AgentKitThird-party servicesOAuth handlerToken vaultLinkedInGmailSalesforce50+ more Execute tools + + + diff --git a/public/d2/docs/agentkit/overview-0.svg b/public/d2/docs/agentkit/overview-0.svg new file mode 100644 index 000000000..9a8551893 --- /dev/null +++ b/public/d2/docs/agentkit/overview-0.svg @@ -0,0 +1,196 @@ + + + + + + + + + + + + +You (developer)Your usersYour agentScalekitThird-party app(Gmail, Slack, Snowflake…)Connection(credentials + config)Connected accounts(per-user auth state)Tools(pre-built + proxied) Configure once Authenticate Call tools Authenticated API call + + + + + + diff --git a/public/d2/docs/agentkit/user-verification-0.svg b/public/d2/docs/agentkit/user-verification-0.svg new file mode 100644 index 000000000..a6a484167 --- /dev/null +++ b/public/d2/docs/agentkit/user-verification-0.svg @@ -0,0 +1,199 @@ + + + + + + + + + + + + +Connected account user verificationYour appScalekitProviderEnd user POST magic link(identifier, user_verify_url, state) Magic link URL Deliver link(email, in-app, …) Open magic link OAuth consent screen Authorization code Store tokens(pending verification) Redirect to user_verify_url(auth_request_id, state) GET /user/verify(?auth_request_id, state) Validate state,read user from session POST verify(auth_request_id, identifier) Match identifier,activate connection post_user_verify_redirect_url Redirect to your app + + + + + + + + + + + + + + + + diff --git a/public/d2/docs/authenticate/auth-methods/authentication-flow-0.svg b/public/d2/docs/authenticate/auth-methods/authentication-flow-0.svg new file mode 100644 index 000000000..067c712c8 --- /dev/null +++ b/public/d2/docs/authenticate/auth-methods/authentication-flow-0.svg @@ -0,0 +1,194 @@ + + + + + + + + + + + + +B2B App initiates loginUser selects login methodSocial authPasskey authEmail enteredHRD checkRedirect to SSOSSO authOTP / Magic linkAuth complete Social login Passkey login Email login Auth completes Auth completes Before auth Domain match No match (email) No match (social/passkey) + + + + + + + + + + + diff --git a/public/d2/docs/authenticate/authz/create-roles-permissions-0.svg b/public/d2/docs/authenticate/authz/create-roles-permissions-0.svg new file mode 100644 index 000000000..edb600153 --- /dev/null +++ b/public/d2/docs/authenticate/authz/create-roles-permissions-0.svg @@ -0,0 +1,194 @@ + + + + + + + + + + + + +Role inheritance hierarchy and permission flowviewer+projectsread+tasksread+commentsreadeditor+projectswrite+taskswrite+(inherits viewer permissions)voidproject_owner+projectscreate+membersinvite+(inherits editor permissions)void inherits inherits + + + + diff --git a/public/d2/docs/authenticate/authz/implement-access-control-0.svg b/public/d2/docs/authenticate/authz/implement-access-control-0.svg new file mode 100644 index 000000000..4718c3f25 --- /dev/null +++ b/public/d2/docs/authenticate/authz/implement-access-control-0.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + +UserYour App Request protected resource Decode and validate access token Extract and verify required permission/role Return resource or error + + + + + + diff --git a/public/d2/docs/authenticate/authz/overview-0.svg b/public/d2/docs/authenticate/authz/overview-0.svg new file mode 100644 index 000000000..5e63bdb97 --- /dev/null +++ b/public/d2/docs/authenticate/authz/overview-0.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + +UserScalekitYour App Initiate sign up or login Package access contents in access tokens Determine the role & permissions from access token Allow/Deny + + + + + + diff --git a/public/d2/docs/authenticate/fsa/multiapp/native-app-0.svg b/public/d2/docs/authenticate/fsa/multiapp/native-app-0.svg new file mode 100644 index 000000000..ec0140f0a --- /dev/null +++ b/public/d2/docs/authenticate/fsa/multiapp/native-app-0.svg @@ -0,0 +1,193 @@ + + + + + + + + + + + + +UserDesktop / Mobile appSystem browserScalekit Click "Login" Open authorize URL Redirect to /oauth/authorize Redirect to callback URI with code + state Return control via deep link / loopback POST /oauth/token access_token, refresh_token, id_token Store tokens + continue + + + + + + + + + + diff --git a/public/d2/docs/authenticate/fsa/multiapp/overview-0.svg b/public/d2/docs/authenticate/fsa/multiapp/overview-0.svg new file mode 100644 index 000000000..4a999090f --- /dev/null +++ b/public/d2/docs/authenticate/fsa/multiapp/overview-0.svg @@ -0,0 +1,194 @@ + + + + + + + + + + + + +UserApp AApp BScalekit (shared session) Click "Login" /oauth/authorize Redirect with code /oauth/token Tokens issued Open app /oauth/authorize Redirect with code /oauth/token Tokens issued Logout /oidc/logout Session revoked + + + + + + + + + + + diff --git a/public/d2/docs/authenticate/fsa/multiapp/single-page-app-0.svg b/public/d2/docs/authenticate/fsa/multiapp/single-page-app-0.svg new file mode 100644 index 000000000..772a470dc --- /dev/null +++ b/public/d2/docs/authenticate/fsa/multiapp/single-page-app-0.svg @@ -0,0 +1,191 @@ + + + + + + + + + + + + +UserSingle page app (browser)Scalekit Click "Login" Redirect to /oauth/authorize (+ state + PKCE challenge) Redirect to /callback with code + state POST /oauth/token access_token, refresh_token, id_token Store tokens + continue + + + + + + + + diff --git a/public/d2/docs/authenticate/fsa/multiapp/web-app-0.svg b/public/d2/docs/authenticate/fsa/multiapp/web-app-0.svg new file mode 100644 index 000000000..fad8b8255 --- /dev/null +++ b/public/d2/docs/authenticate/fsa/multiapp/web-app-0.svg @@ -0,0 +1,192 @@ + + + + + + + + + + + + +UserWeb app (frontend)Web app (backend)Scalekit Click "Login" GET /login Redirect to /oauth/authorize Redirect to /callback with code + state POST /oauth/token access_token, refresh_token, id_token Set session cookies + redirect + + + + + + + + + diff --git a/public/d2/docs/authenticate/implement-workflows/implement-webhooks-0.svg b/public/d2/docs/authenticate/implement-workflows/implement-webhooks-0.svg new file mode 100644 index 000000000..61aa3a3b4 --- /dev/null +++ b/public/d2/docs/authenticate/implement-workflows/implement-webhooks-0.svg @@ -0,0 +1,191 @@ + + + + + + + + + + + + +UserScalekitYour AppScalekit SDK Trigger event (login, signup, directory sync) Queue webhook event POST webhook payload Verify webhook signature Process event data Return success response (200/201) + + + + + + + + diff --git a/public/d2/docs/authenticate/interceptors/auth-flow-interceptors-0.svg b/public/d2/docs/authenticate/interceptors/auth-flow-interceptors-0.svg new file mode 100644 index 000000000..978caf3fd --- /dev/null +++ b/public/d2/docs/authenticate/interceptors/auth-flow-interceptors-0.svg @@ -0,0 +1,191 @@ + + + + + + + + + + + + +Example of pre-signup interceptor UserYour appScalekitInterceptor Attempts sign-up Detects pre-signup trigger POST /auth/interceptors/pre-signup Process the request: allow IP address? Decision ALLOW or DENY Proceed or block sign-up + + + + + + + + diff --git a/public/d2/docs/authenticate/m2m/api-auth-quickstart-0.svg b/public/d2/docs/authenticate/m2m/api-auth-quickstart-0.svg new file mode 100644 index 000000000..a4546efb2 --- /dev/null +++ b/public/d2/docs/authenticate/m2m/api-auth-quickstart-0.svg @@ -0,0 +1,193 @@ + + + + + + + + + + + + +API ClientUserYour AppScalekit 1. Request to register an API client with necessary scopes 2. Creates an API client in your Scalekit environment 3. Gives you a client_id and client_secret Show the client credentials 4. Saves the API credetials 5. Requests access to protected resource 6. Validates the access tokens 7. Returns the protected resource + + + + + + + + + + diff --git a/public/d2/docs/authenticate/m2m/api-keys-0.svg b/public/d2/docs/authenticate/m2m/api-keys-0.svg new file mode 100644 index 000000000..e538bd561 --- /dev/null +++ b/public/d2/docs/authenticate/m2m/api-keys-0.svg @@ -0,0 +1,195 @@ + + + + + + + + + + + + +Customer's App (API Client)UserYour AppScalekit Request API key Create token (organizationId, userId?) API key + tokenId API key Configure API key Request with Authorization header Validate token Organization ID (+ User ID if user-scoped) Filter data by org and user context Response + + + + + + + + + + + + diff --git a/public/d2/docs/authenticate/manage-users-orgs/custom-user-attributes-0.svg b/public/d2/docs/authenticate/manage-users-orgs/custom-user-attributes-0.svg new file mode 100644 index 000000000..934acba56 --- /dev/null +++ b/public/d2/docs/authenticate/manage-users-orgs/custom-user-attributes-0.svg @@ -0,0 +1,194 @@ + + + + + + + + + + + + +Your AppScalekitCustomerWorkspaceOrganizationIdentity ProviderUserzip_codeUserzip_codeUserzip_code zip_code90210 zip_code90210 + + + + diff --git a/public/d2/docs/authenticate/manage-users-orgs/email-domain-rules-0.svg b/public/d2/docs/authenticate/manage-users-orgs/email-domain-rules-0.svg new file mode 100644 index 000000000..c43c13b5c --- /dev/null +++ b/public/d2/docs/authenticate/manage-users-orgs/email-domain-rules-0.svg @@ -0,0 +1,195 @@ + + + + + + + + + + + + +userScalekitrestrictedsign-up pageinvite user ben0948@gmail.com woxoco4761@knilkk.com🚫 + + + + + diff --git a/public/d2/docs/authenticate/manage-users-orgs/email-domain-rules-1.svg b/public/d2/docs/authenticate/manage-users-orgs/email-domain-rules-1.svg new file mode 100644 index 000000000..42c91e01e --- /dev/null +++ b/public/d2/docs/authenticate/manage-users-orgs/email-domain-rules-1.svg @@ -0,0 +1,187 @@ + + + + + + + + + + + + +Domain Match?Show option for the user to join organizationUser joined the organization Yes Join + + + + diff --git a/public/d2/docs/authenticate/manage-users-orgs/hosted-widgets-0.svg b/public/d2/docs/authenticate/manage-users-orgs/hosted-widgets-0.svg new file mode 100644 index 000000000..06f02734a --- /dev/null +++ b/public/d2/docs/authenticate/manage-users-orgs/hosted-widgets-0.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + +Your B2B appHosted widgets URL<SCALEKIT_ENVIRONMENT_URL>/ui/Authentication widgets- Signup- LoginUser widgets- User profile- User securityOrganization widgets- Organization settings- Member management- SSO configuration- SCIM configuration- Session policy Redirect + + + diff --git a/public/d2/docs/authenticate/manage-users-orgs/jit-provisioning-0.svg b/public/d2/docs/authenticate/manage-users-orgs/jit-provisioning-0.svg new file mode 100644 index 000000000..83c0e815d --- /dev/null +++ b/public/d2/docs/authenticate/manage-users-orgs/jit-provisioning-0.svg @@ -0,0 +1,194 @@ + + + + + + + + + + + + +JIT Provisioning FlowUserIdPScalekitYour AppJIT Provisioning Authenticate through SSO Send user attributes Verify email domain matches organization domains Create user record with IdP attributes Create organization membership Assign default roles as per your app Sync user profile from IdP Return user profile and membership details Grant access to application + + + + + + + + + + + diff --git a/public/d2/docs/authenticate/manage-users-orgs/merge-identities-0.svg b/public/d2/docs/authenticate/manage-users-orgs/merge-identities-0.svg new file mode 100644 index 000000000..46fedcc21 --- /dev/null +++ b/public/d2/docs/authenticate/manage-users-orgs/merge-identities-0.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + +Email: john.doee@megacrop.comGoogle OAuthMicrosoft OAuthUser Credential Credential Linked Linked + + + + + + diff --git a/public/d2/docs/authenticate/manage-users-orgs/merge-identities-1.svg b/public/d2/docs/authenticate/manage-users-orgs/merge-identities-1.svg new file mode 100644 index 000000000..131569e3d --- /dev/null +++ b/public/d2/docs/authenticate/manage-users-orgs/merge-identities-1.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + +UserOrganization 1 SSOOrganization 2 SSOSingle User Profile SSO Credential 1 SSO Credential 2 Linked Linked + + + + + + diff --git a/public/d2/docs/authenticate/manage-users-orgs/scim-provisioning-0.svg b/public/d2/docs/authenticate/manage-users-orgs/scim-provisioning-0.svg new file mode 100644 index 000000000..a124d4333 --- /dev/null +++ b/public/d2/docs/authenticate/manage-users-orgs/scim-provisioning-0.svg @@ -0,0 +1,191 @@ + + + + + + + + + + + + +SCIM Provisioning FlowAdminDirectory ProviderScalekitYour App Configure SCIM integration SCIM API calls (Users, Groups) Validate and authorize request Sync users and group memberships Assign user roles based on groups Reflect updated users, organization memberships and access + + + + + + + + diff --git a/public/d2/docs/authenticate/mcp/auth-patterns-0.svg b/public/d2/docs/authenticate/mcp/auth-patterns-0.svg new file mode 100644 index 000000000..cee3cccac --- /dev/null +++ b/public/d2/docs/authenticate/mcp/auth-patterns-0.svg @@ -0,0 +1,192 @@ + + + + + + + + + + + + +Human → MCP Server (OAuth 2.1 Authorization Code Flow)MCP ClientMCP ServerScalekit Authorization Server initiate 401 + WWW-Authenticate header Exchange code for access token Handles Authentication and user consent Issue token with required scopes Call tool with Bearer token Authorized response + + + + + + + + + diff --git a/public/d2/docs/authenticate/mcp/auth-patterns-1.svg b/public/d2/docs/authenticate/mcp/auth-patterns-1.svg new file mode 100644 index 000000000..0ddfc5d9b --- /dev/null +++ b/public/d2/docs/authenticate/mcp/auth-patterns-1.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + +Agent → MCP Server (OAuth 2.1 Client Credentials Flow)AgentScalekit Authorization ServerMCP Server Request access token (grant_type=client_credentials) Return access token with configured scopes Call tool with Bearer token Authorized response + + + + + + diff --git a/public/d2/docs/authenticate/mcp/auth-patterns-2.svg b/public/d2/docs/authenticate/mcp/auth-patterns-2.svg new file mode 100644 index 000000000..134fff3b1 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/auth-patterns-2.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + +MCP → External API (using API Key or Custom Token)Human/AgentMCP ServerExternal API Invoke tool Call endpoint with API Key / Service Token Return data Return formatted response + + + + + + diff --git a/public/d2/docs/authenticate/mcp/auth-patterns-3.svg b/public/d2/docs/authenticate/mcp/auth-patterns-3.svg new file mode 100644 index 000000000..1f107f33a --- /dev/null +++ b/public/d2/docs/authenticate/mcp/auth-patterns-3.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + +MCP → MCP Server (OAuth 2.1 Client Credentials Flow)Calling MCPScalekit Authorization ServerReceiving MCP Server Request access token (grant_type=client_credentials) Return access token with configured scopes Call tool with Bearer token Authorized response + + + + + + diff --git a/public/d2/docs/authenticate/mcp/auth-patterns-4.svg b/public/d2/docs/authenticate/mcp/auth-patterns-4.svg new file mode 100644 index 000000000..ae820e770 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/auth-patterns-4.svg @@ -0,0 +1,190 @@ + + + + + + + + + + + + +MCP → API (Cascading the Same Token)MCP ClientMCP ServerBackend API Call tool with Bearer token Forward same Bearer token Validate token (issuer, scopes, exp) Return authorized data Return formatted response + + + + + + + diff --git a/public/d2/docs/authenticate/mcp/custom-auth-0.svg b/public/d2/docs/authenticate/mcp/custom-auth-0.svg new file mode 100644 index 000000000..b5347fe1b --- /dev/null +++ b/public/d2/docs/authenticate/mcp/custom-auth-0.svg @@ -0,0 +1,192 @@ + + + + + + + + + + + + +MCP ClientScalekitYour App GET /oauth/authorize 302 to /login?login_request_id=<reqid>&state=<state> Auth user with existing auth system POST /auth-requests/<login_request_id>/user 200 OK 302 to /partner:callback?state=<state> Consent, code, token exchange, tokens + + + + + + + + + diff --git a/public/d2/docs/authenticate/mcp/expressjs-quickstart-0.svg b/public/d2/docs/authenticate/mcp/expressjs-quickstart-0.svg new file mode 100644 index 000000000..13743bafd --- /dev/null +++ b/public/d2/docs/authenticate/mcp/expressjs-quickstart-0.svg @@ -0,0 +1,192 @@ + + + + + + + + + + + + +Express.js MCP with ScalekitMCP ClientMCP ServerScalekit Request to call tool 401 Unauthorized + WWW-Authenticate header Exchange code for access token Issue Bearer token POST /mcp with Bearer token Validate token via Express middleware Tool response + + + + + + + + + diff --git a/public/d2/docs/authenticate/mcp/fastapi-fastmcp-quickstart-0.svg b/public/d2/docs/authenticate/mcp/fastapi-fastmcp-quickstart-0.svg new file mode 100644 index 000000000..73737849e --- /dev/null +++ b/public/d2/docs/authenticate/mcp/fastapi-fastmcp-quickstart-0.svg @@ -0,0 +1,192 @@ + + + + + + + + + + + + +FastAPI + FastMCP with ScalekitMCP ClientMCP ServerScalekit Request to call tool 401 Unauthorized + WWW-Authenticate header Exchange code for access token Issue Bearer token Call tool with Bearer token Validate token via FastAPI middleware Tool response + + + + + + + + + diff --git a/public/d2/docs/authenticate/mcp/fastmcp-quickstart-0.svg b/public/d2/docs/authenticate/mcp/fastmcp-quickstart-0.svg new file mode 100644 index 000000000..b6fc59f26 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/fastmcp-quickstart-0.svg @@ -0,0 +1,191 @@ + + + + + + + + + + + + +FastMCP with ScalekitMCP ClientMCP ServerScalekit Authorization Server Initiate connection 401 + WWW-Authenticate header Exchange code for access token Issue token with required scopes Call tool with Bearer token Authorized todo response + + + + + + + + diff --git a/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-0.svg b/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-0.svg new file mode 100644 index 000000000..f23adc966 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-0.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + +MCP ServerChat interfaceData and file systemsDevelopment toolsProductivity toolsIDEs and code editorsOther AI applicationsScalekitOAuth 2.1 server + + + diff --git a/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-1.svg b/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-1.svg new file mode 100644 index 000000000..20f38cb46 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-1.svg @@ -0,0 +1,195 @@ + + + + + + + + + + + + +MCP ClientMCP ServerAuthorization ServerUser Request resource (unauthorized) 401 + Auth server info Discover capabilities Register client Request authorization Authenticate & consent Access token Request with token Protected resource Refresh token (when expired) + + + + + + + + + + + + diff --git a/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-2.svg b/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-2.svg new file mode 100644 index 000000000..4c7e22d69 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/intro-to-mcp-auth-2.svg @@ -0,0 +1,206 @@ + + + + + + + + + + + + +MCP ClientMCP ServerAuthorization ServerUserDiscovery phaseDynamic client registrationAuthorization code flowAccess phaseToken refresh (when needed) POST /mcp/tools/weather(No Authorization Header) 401 UnauthorizedWWW-Authenticate: resource_metadata="..." GET /.well-known/oauth-protected-resource Resource metadata with authorization_servers GET /.well-known/oauth-authorization-server Authorization server metadata(endpoints, supported flows, etc.) POST /oauth2/register(client metadata) client_id, client_secret(if confidential client) Redirect to authorization endpointwith PKCE challenge GET /oauth2/authorize(user authenticates & grants consent) Redirect with authorization code Authorization code returned POST /oauth2/token(code + PKCE verifier) access_token, refresh_tokenwith scopes (e.g., "mcp:tools:weather") POST /mcp/tools/weatherAuthorization: Bearer <access_token> Validate token and check scopes("mcp:tools:weather") If token valid: Process weather request 200 OKWeather data response If invalid: 401/403 ErrorToken invalid or insufficient scope POST /oauth2/token(grant_type=refresh_token) New access_token, refresh_token + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/d2/docs/authenticate/mcp/overview-0.svg b/public/d2/docs/authenticate/mcp/overview-0.svg new file mode 100644 index 000000000..70800dfe6 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/overview-0.svg @@ -0,0 +1,191 @@ + + + + + + + + + + + + +MCP Login Discovery PhaseMCP ClientYour MCP ServerScalekit Auth ServerYour Customer's User POST /mcp(Without Authorization Header) 401 Unauthorized(WWW-Authenticate: resource_metadata="...") GET /.well-known/oauth-protected-resource(Fetch protected MCP Server's metadata) Returns resource metadata(authorization server URL, scopes) GET /.well-known/oauth-authorization-server Scalekit Auth Server metadata + + + + + + + + diff --git a/public/d2/docs/authenticate/mcp/overview-1.svg b/public/d2/docs/authenticate/mcp/overview-1.svg new file mode 100644 index 000000000..b7d70dbf8 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/overview-1.svg @@ -0,0 +1,193 @@ + + + + + + + + + + + + +MCP DCR Authorization PhaseMCP ClientYour MCP ServerScalekit Auth ServerYour Customer's User POST /res_123../client_register return with client_id and client_secret redirect to oauth/authorize Prompt to Authenticate & Consent Authenticates & Consents Returns authorization code POST /oauth/token Issues access_token, id_token, scopes + + + + + + + + + + diff --git a/public/d2/docs/authenticate/mcp/overview-2.svg b/public/d2/docs/authenticate/mcp/overview-2.svg new file mode 100644 index 000000000..a1331b6c8 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/overview-2.svg @@ -0,0 +1,192 @@ + + + + + + + + + + + + +MCP CIMD Authorization PhaseMCP ClientYour MCP ServerScalekit Auth ServerYour Customer's User Redirect to oauth/authorize with PKCE Challenge Authorization server fetches client metadata Prompt to Authenticate & Consent Authenticates & Consents Returns authorization code POST /oauth/token with PKCE verifier and auth code Issues access_token, id_token, scopes + + + + + + + + + diff --git a/public/d2/docs/authenticate/mcp/overview-3.svg b/public/d2/docs/authenticate/mcp/overview-3.svg new file mode 100644 index 000000000..9649da92e --- /dev/null +++ b/public/d2/docs/authenticate/mcp/overview-3.svg @@ -0,0 +1,190 @@ + + + + + + + + + + + + +Access and Refresh Token PhaseMCP ClientYour MCP ServerScalekit Auth Serveraccess_phaserefresh_phase Tool call with Bearer token Validate token Authorized response POST /oauth/token(grant_type=refresh_token) New access token & refresh token + + + + + + + diff --git a/public/d2/docs/authenticate/mcp/topologies/agent-mcp-0.svg b/public/d2/docs/authenticate/mcp/topologies/agent-mcp-0.svg new file mode 100644 index 000000000..1aaddc656 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/topologies/agent-mcp-0.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + +Agent ? MCP Server (OAuth 2.1 Client Credentials Flow)AgentScalekit Authorization ServerMCP Server Request access token (grant_type=client_credentials) Return access token with configured scopes Call tool with Bearer token Authorized response + + + + + + diff --git a/public/d2/docs/authenticate/mcp/topologies/human-mcp-0.svg b/public/d2/docs/authenticate/mcp/topologies/human-mcp-0.svg new file mode 100644 index 000000000..d65ba72e6 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/topologies/human-mcp-0.svg @@ -0,0 +1,192 @@ + + + + + + + + + + + + +Human ? MCP Server (OAuth 2.1 Authorization Code Flow)MCP ClientMCP ServerScalekit Authorization Server initiate 401 + WWW-Authenticate header Exchange code for access token Handles Authentication and user consent Issue token with required scopes Call tool with Bearer token Authorized response + + + + + + + + + diff --git a/public/d2/docs/authenticate/mcp/topologies/mcp-api-0.svg b/public/d2/docs/authenticate/mcp/topologies/mcp-api-0.svg new file mode 100644 index 000000000..987ec4349 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/topologies/mcp-api-0.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + +MCP ? External API (using API Key or Custom Token)Human/AgentMCP ServerExternal API Invoke tool Call endpoint with API Key / Service Token Return data Return formatted response + + + + + + diff --git a/public/d2/docs/authenticate/mcp/topologies/mcp-api-1.svg b/public/d2/docs/authenticate/mcp/topologies/mcp-api-1.svg new file mode 100644 index 000000000..1aaddc656 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/topologies/mcp-api-1.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + +Agent ? MCP Server (OAuth 2.1 Client Credentials Flow)AgentScalekit Authorization ServerMCP Server Request access token (grant_type=client_credentials) Return access token with configured scopes Call tool with Bearer token Authorized response + + + + + + diff --git a/public/d2/docs/authenticate/mcp/topologies/mcp-api-2.svg b/public/d2/docs/authenticate/mcp/topologies/mcp-api-2.svg new file mode 100644 index 000000000..5f8ebe7fe --- /dev/null +++ b/public/d2/docs/authenticate/mcp/topologies/mcp-api-2.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + +MCP ? API (Cascading the Same Token)MCP ClientMCP ServerBackend MCP/API Call tool with Bearer token Forward same Bearer token Validate token (issuer, scopes, exp) Return authorized data + + + + + + diff --git a/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg b/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg new file mode 100644 index 000000000..2c7def278 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg @@ -0,0 +1,194 @@ + + + + + + + + + + + + +xmcp MCP with ScalekitMCP ClientMCP ServerScalekit POST /mcp 401 + WWW-Authenticate header GET /.well-known/oauth-protected-resource Resource metadata (authorization_servers) OAuth Authorization Code + PKCE Issue Bearer token POST /mcp with Bearer token Verify token via JWKS Tool response + + + + + + + + + + + diff --git a/public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-0.svg b/public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-0.svg new file mode 100644 index 000000000..afa63f056 --- /dev/null +++ b/public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-0.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + +Gmail inboxIngest(AgentKit)LiteLLM pipelineStore(SQLite)ClassifyRoute(routing.yaml)Research(AgentKit)Draft + + + diff --git a/public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-1.svg b/public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-1.svg new file mode 100644 index 000000000..83060cf23 --- /dev/null +++ b/public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-1.svg @@ -0,0 +1,187 @@ + + + + + + + + + + + + +Pending proposal(SQLite)Notify Slack(AgentKit)Dashboard(localhost:3000)ApproveReject(no side effects)Create issue+ send reply(AgentKit) approve reject + + + + diff --git a/public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg b/public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg new file mode 100644 index 000000000..256430d62 --- /dev/null +++ b/public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + +Managed by ScalekitYourAppGoogle OAuthScalekitHubspot + + + diff --git a/public/d2/docs/directory/guides/group-based-role-assignment-0.svg b/public/d2/docs/directory/guides/group-based-role-assignment-0.svg new file mode 100644 index 000000000..7c8bfbc2e --- /dev/null +++ b/public/d2/docs/directory/guides/group-based-role-assignment-0.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + +Group-based role assignmentDirectory ProvidersYour ApplicationScalekitEngineering GroupEditor RoleManagers GroupAdmin Role + + + diff --git a/public/d2/docs/directory/scim/quickstart-0.svg b/public/d2/docs/directory/scim/quickstart-0.svg new file mode 100644 index 000000000..386825fe8 --- /dev/null +++ b/public/d2/docs/directory/scim/quickstart-0.svg @@ -0,0 +1,191 @@ + + + + + + + + + + + + +SCIM Provisioning SequenceDirectory ProviderScalekitYour App User/Group changes occur Webhook events sent (user_created, user_updated, etc.) Process webhook and verify signature Update local user database (create, update, deactivate) API calls for sync (list users, groups) Fetch latest data from directory provider + + + + + + + + diff --git a/public/d2/docs/fsa/data-modelling-0.svg b/public/d2/docs/fsa/data-modelling-0.svg new file mode 100644 index 000000000..9d7bab27a --- /dev/null +++ b/public/d2/docs/fsa/data-modelling-0.svg @@ -0,0 +1,196 @@ + + + + + + + + + + + + +john.doe@gmail.commary.jane@company.comYour AppCustomer Org 1Customer Org 2 (Enforces SSO)Scalekit Email Magic Link SAML/OIDC SSOAuthenticates toAuthenticates to + + + + + + diff --git a/public/d2/docs/fsa/guides/manage-users-0.svg b/public/d2/docs/fsa/guides/manage-users-0.svg new file mode 100644 index 000000000..0f3e9eec9 --- /dev/null +++ b/public/d2/docs/fsa/guides/manage-users-0.svg @@ -0,0 +1,188 @@ + + + + + + + + + + + + +UseridstringPKemailstringexternal_idstringcreate_timetimestampupdate_timetimestampmetadataobjectUserProfileidstringPKuser_idstringFKfirst_namestringlast_namestringnamestringemail_verifiedbooleanlocalestringphone_numberstringcustom_attributesobjectmetadataobjectMembershipidstringPKuser_idstringFKorganization_idstringdisplay_namestringmembership_statusenumjoin_timetimestampcreated_attimestampaccepted_attimestampexpires_attimestampinviter_emailstringmetadataobjectRoleidstringPKmembership_idstringFKnamestringdisplay_namestring 1:1 1:N 1:N + + + + + diff --git a/public/d2/docs/fsa/guides/user-invitations-0.svg b/public/d2/docs/fsa/guides/user-invitations-0.svg new file mode 100644 index 000000000..32b89a709 --- /dev/null +++ b/public/d2/docs/fsa/guides/user-invitations-0.svg @@ -0,0 +1,193 @@ + + + + + + + + + + + + +UserAppScalekitDashboard Clicks invitation link Redirects to initiate login endpoint Creates auth URL, redirects to Scalekit’s login page Completes authentication Redirects to callback URL with auth code Exchanges code for ID Token & user details Redirects user Decode ID Token for user details + + + + + + + + + + diff --git a/public/d2/docs/guides/integrations/auth-systems/firebase-0.svg b/public/d2/docs/guides/integrations/auth-systems/firebase-0.svg new file mode 100644 index 000000000..c47b18cf3 --- /dev/null +++ b/public/d2/docs/guides/integrations/auth-systems/firebase-0.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + +UserFirebase OIDCScalekitIdentity ProviderYour App + + + diff --git a/public/d2/docs/guides/integrations/auth-systems/firebase-1.svg b/public/d2/docs/guides/integrations/auth-systems/firebase-1.svg new file mode 100644 index 000000000..07cfdeb7a --- /dev/null +++ b/public/d2/docs/guides/integrations/auth-systems/firebase-1.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + +1. User clicks "Sign In"2. Frontend calls backend → Backend generates Scalekit auth URL3. Frontend redirects to Scalekit auth URL4. Scalekit redirects to Identity Provider5. User authenticates with IdP6. IdP redirects back to Scalekit7. Scalekit redirects to your backend callback URL with code8. Backend exchanges code for user profile with Scalekit9. Backend creates custom Firebase token10. Backend returns custom token to frontend11. Frontend calls signInWithCustomToken(firebase, customToken)12. Firebase creates/updates user and returns Firebase user object13. User is authenticated and can access your app! + + + diff --git a/public/d2/docs/guides/sso/sso-migration-strategy-0.svg b/public/d2/docs/guides/sso/sso-migration-strategy-0.svg new file mode 100644 index 000000000..f7ba12c4e --- /dev/null +++ b/public/d2/docs/guides/sso/sso-migration-strategy-0.svg @@ -0,0 +1,187 @@ + + + + + + + + + + + + +Customer's IdP ConfigurationYour Application's DNSExternal SSO Provider auth.yourapp.com/rest/the/path auth.yourapp.com/rest/the/path + + + + diff --git a/public/d2/docs/guides/sso/sso-migration-strategy-1.svg b/public/d2/docs/guides/sso/sso-migration-strategy-1.svg new file mode 100644 index 000000000..a21e0acb8 --- /dev/null +++ b/public/d2/docs/guides/sso/sso-migration-strategy-1.svg @@ -0,0 +1,208 @@ + + + + + + + + + + + + +UserYourAppSSO ProxySSO ProviderScaleKitIdentity Provider SSO login request Check if organization has been migrated Forward request To External SSO Provider SAML/OIDC auth User details Return user details To ScaleKit (Migrated tenant) SAML/OIDC auth User details Return user details Forward user details Access granted + + + + + + + + + + + + + + + diff --git a/public/d2/docs/mcp/auth-methods/custom-auth-0.svg b/public/d2/docs/mcp/auth-methods/custom-auth-0.svg new file mode 100644 index 000000000..300543153 --- /dev/null +++ b/public/d2/docs/mcp/auth-methods/custom-auth-0.svg @@ -0,0 +1,191 @@ + + + + + + + + + + + + +Scalekit MCP Bring you own Auth flowMCP ClientScalekit Auth ServerYour B2B App Initiate /oauth/authorize (DCR, CIMD) Redirect to /login?login_request_id&state POST user details (Machine-to-Machine) 200 Success Response (Upon Successful Login) Redirect to /partner:callback?state Continue Consent, token exchange and permissions delegation. + + + + + + + + diff --git a/public/d2/docs/mcp/auth-methods/enterprise-0.svg b/public/d2/docs/mcp/auth-methods/enterprise-0.svg new file mode 100644 index 000000000..979e48c9d --- /dev/null +++ b/public/d2/docs/mcp/auth-methods/enterprise-0.svg @@ -0,0 +1,193 @@ + + + + + + + + + + + + +MCP SSO Authorization PhaseMCP ClientScalekit Auth ServerYour Customer's IdP Okta, EntraID etc Redirect using /oauth/authorize URL redirects using /authorize URL returns authorization code /token endpoint to get tokens with the auth code Returns with relevant information inside access_token and id_token returns with authorization code /oauth/token/ using auth code Issues access_token, id_token, refresh_token + + + + + + + + + + diff --git a/public/d2/docs/passwordless/oidc-0.svg b/public/d2/docs/passwordless/oidc-0.svg new file mode 100644 index 000000000..f0ebca460 --- /dev/null +++ b/public/d2/docs/passwordless/oidc-0.svg @@ -0,0 +1,190 @@ + + + + + + + + + + + + +UserScalekitYour app Enter email address Send OTP or magic link Verify identity (OTP/magic link) Exchange code for user details Create session and grant access + + + + + + + diff --git a/public/d2/docs/sso/guides/idp-init-sso-0.svg b/public/d2/docs/sso/guides/idp-init-sso-0.svg new file mode 100644 index 000000000..9af69fcf6 --- /dev/null +++ b/public/d2/docs/sso/guides/idp-init-sso-0.svg @@ -0,0 +1,195 @@ + + + + + + + + + + + + +IdP-initiated SSO FlowUserIdPScalekitYourApp Select your application from IdP portal Send SAML assertion or OIDC request Redirect to initiate login endpoint with JWT Convert to SP-initiated authorization URL Standard authentication flow Authenticate if needed Send response Callback with authorization code Exchange code for tokens Log in user + + + + + + + + + + + + diff --git a/public/d2/docs/sso/guides/idp-init-sso-1.svg b/public/d2/docs/sso/guides/idp-init-sso-1.svg new file mode 100644 index 000000000..2bd8c7312 --- /dev/null +++ b/public/d2/docs/sso/guides/idp-init-sso-1.svg @@ -0,0 +1,195 @@ + + + + + + + + + + + + +Downstream Auth Provider IntegrationUserIdPScalekitYourAppFirebase Select your application Send IdP request Redirect with JWT triggers sign-in uses Authorization URL from Step 3 Standard SP-initiated flow Send response Exchange code for tokens User authenticated Complete login + + + + + + + + + + + + diff --git a/src/data/agent-connectors/clickhouse 3.ts b/src/data/agent-connectors/clickhouse 3.ts new file mode 100644 index 000000000..b4119127e --- /dev/null +++ b/src/data/agent-connectors/clickhouse 3.ts @@ -0,0 +1,221 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'clickhouse_get_clickpipe', + description: `Get configuration and status for a specific ClickPipe by ID.`, + params: [ + { + name: 'clickPipeId', + type: 'string', + required: true, + description: `ID of the requested ClickPipe`, + }, + { + name: 'organizationId', + type: 'string', + required: true, + description: `ID of the organization that owns the service`, + }, + { + name: 'serviceId', + type: 'string', + required: true, + description: `ID of the service that owns the ClickPipe`, + }, + ], + }, + { + name: 'clickhouse_get_organization_cost', + description: `Get billing and usage cost data for an organization over a date range (max 31 days). Returns a grand total and daily per-entity cost breakdown.`, + params: [ + { + name: 'organizationId', + type: 'string', + required: true, + description: `The unique identifier of the organization`, + }, + { + name: 'from_date', + type: 'string', + required: false, + description: `Start date for the report, e.g. 2024-12-19 (YYYY-MM-DD)`, + }, + { + name: 'to_date', + type: 'string', + required: false, + description: `End date (inclusive) for the report, e.g. 2024-12-20 (YYYY-MM-DD). Cannot be more than 30 days after from_date.`, + }, + ], + }, + { + name: 'clickhouse_get_organization_details', + description: `Get details for a specific ClickHouse Cloud organization: name, tier, status, and settings. Use get_organizations to find the organizationId.`, + params: [ + { + name: 'organizationId', + type: 'string', + required: true, + description: `ID of the organization to retrieve`, + }, + ], + }, + { + name: 'clickhouse_get_organizations', + description: `List all ClickHouse Cloud organizations accessible with the current API key. Returns organization IDs and names. Use the returned organizationId with all other tools.`, + params: [], + }, + { + name: 'clickhouse_get_service_backup_configuration', + description: `Get the backup schedule and retention configuration for a service.`, + params: [ + { + name: 'organizationId', + type: 'string', + required: true, + description: `ID of the organization that owns the service`, + }, + { name: 'serviceId', type: 'string', required: true, description: `ID of the service` }, + ], + }, + { + name: 'clickhouse_get_service_backup_details', + description: `Get details for a specific backup: status, size, duration, and creation time.`, + params: [ + { name: 'backupId', type: 'string', required: true, description: `ID of the backup` }, + { + name: 'organizationId', + type: 'string', + required: true, + description: `ID of the organization that owns the service`, + }, + { name: 'serviceId', type: 'string', required: true, description: `ID of the service` }, + ], + }, + { + name: 'clickhouse_get_service_details', + description: `Get full details for a specific service: status, region, tier, endpoints, and scaling configuration.`, + params: [ + { + name: 'organizationId', + type: 'string', + required: true, + description: `ID of the organization`, + }, + { + name: 'serviceId', + type: 'string', + required: true, + description: `ID of the service to retrieve`, + }, + ], + }, + { + name: 'clickhouse_get_services_list', + description: `List all services (clusters) in a ClickHouse Cloud organization. Returns service IDs, names, status, region, and tier. Use the returned serviceId with other tools.`, + params: [ + { + name: 'organizationId', + type: 'string', + required: true, + description: `ID of the organization whose services are to be listed`, + }, + ], + }, + { + name: 'clickhouse_list_clickpipes', + description: `List all ClickPipes (managed data ingestion pipelines) configured for a service.`, + params: [ + { + name: 'organizationId', + type: 'string', + required: true, + description: `ID of the organization`, + }, + { + name: 'serviceId', + type: 'string', + required: true, + description: `ID of the service to list ClickPipes for`, + }, + ], + }, + { + name: 'clickhouse_list_databases', + description: `List all databases in a ClickHouse service. Use the returned database names with list_tables and run_select_query.`, + params: [{ name: 'serviceId', type: 'string', required: true, description: `No description.` }], + }, + { + name: 'clickhouse_list_service_backups', + description: `List all backups for a service, most recent first. Returns backup IDs, status, size, and timestamps.`, + params: [ + { + name: 'organizationId', + type: 'string', + required: true, + description: `ID of the organization`, + }, + { + name: 'serviceId', + type: 'string', + required: true, + description: `ID of the service to list backups for`, + }, + ], + }, + { + name: 'clickhouse_list_tables', + description: `List all tables in a database, including column names and types. Supports LIKE pattern filtering.`, + params: [ + { + name: 'database', + type: 'string', + required: true, + description: `Name of the database to list tables from`, + }, + { + name: 'serviceId', + type: 'string', + required: true, + description: `The unique identifier of the ClickHouse service`, + }, + { + name: 'like', + type: 'string', + required: false, + description: `Optional SQL LIKE pattern to filter tables by name (e.g., "events_%")`, + }, + { + name: 'notLike', + type: 'string', + required: false, + description: `Optional SQL LIKE pattern to exclude tables by name`, + }, + ], + }, + { + name: 'clickhouse_run_select_query', + description: `Execute a read-only SELECT query against a ClickHouse service. Only SELECT statements are permitted.`, + params: [ + { + name: 'query', + type: 'string', + required: true, + description: `A valid ClickHouse SELECT query. Only read-only SELECT statements are permitted. e.g. SELECT * FROM my_table LIMIT 10`, + }, + { + name: 'serviceId', + type: 'string', + required: true, + description: `The unique identifier of the ClickHouse service`, + }, + { + name: 'timeoutSeconds', + type: 'integer', + required: false, + description: `Query timeout in seconds. Default: 300 (5 min), max: 3600 (1 hour). Use lower values for simple queries.`, + }, + ], + }, +] From b08473b888e2e8d0fa5d54ace5c005a0f343e7c4 Mon Sep 17 00:00:00 2001 From: Pranesh Date: Tue, 26 May 2026 14:50:25 +0530 Subject: [PATCH 04/15] chore: remove stale clickhouse 3.ts duplicate data file --- src/data/agent-connectors/clickhouse 3.ts | 221 ---------------------- 1 file changed, 221 deletions(-) delete mode 100644 src/data/agent-connectors/clickhouse 3.ts diff --git a/src/data/agent-connectors/clickhouse 3.ts b/src/data/agent-connectors/clickhouse 3.ts deleted file mode 100644 index b4119127e..000000000 --- a/src/data/agent-connectors/clickhouse 3.ts +++ /dev/null @@ -1,221 +0,0 @@ -import type { Tool } from '../../types/agent-connectors' - -export const tools: Tool[] = [ - { - name: 'clickhouse_get_clickpipe', - description: `Get configuration and status for a specific ClickPipe by ID.`, - params: [ - { - name: 'clickPipeId', - type: 'string', - required: true, - description: `ID of the requested ClickPipe`, - }, - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization that owns the service`, - }, - { - name: 'serviceId', - type: 'string', - required: true, - description: `ID of the service that owns the ClickPipe`, - }, - ], - }, - { - name: 'clickhouse_get_organization_cost', - description: `Get billing and usage cost data for an organization over a date range (max 31 days). Returns a grand total and daily per-entity cost breakdown.`, - params: [ - { - name: 'organizationId', - type: 'string', - required: true, - description: `The unique identifier of the organization`, - }, - { - name: 'from_date', - type: 'string', - required: false, - description: `Start date for the report, e.g. 2024-12-19 (YYYY-MM-DD)`, - }, - { - name: 'to_date', - type: 'string', - required: false, - description: `End date (inclusive) for the report, e.g. 2024-12-20 (YYYY-MM-DD). Cannot be more than 30 days after from_date.`, - }, - ], - }, - { - name: 'clickhouse_get_organization_details', - description: `Get details for a specific ClickHouse Cloud organization: name, tier, status, and settings. Use get_organizations to find the organizationId.`, - params: [ - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization to retrieve`, - }, - ], - }, - { - name: 'clickhouse_get_organizations', - description: `List all ClickHouse Cloud organizations accessible with the current API key. Returns organization IDs and names. Use the returned organizationId with all other tools.`, - params: [], - }, - { - name: 'clickhouse_get_service_backup_configuration', - description: `Get the backup schedule and retention configuration for a service.`, - params: [ - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization that owns the service`, - }, - { name: 'serviceId', type: 'string', required: true, description: `ID of the service` }, - ], - }, - { - name: 'clickhouse_get_service_backup_details', - description: `Get details for a specific backup: status, size, duration, and creation time.`, - params: [ - { name: 'backupId', type: 'string', required: true, description: `ID of the backup` }, - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization that owns the service`, - }, - { name: 'serviceId', type: 'string', required: true, description: `ID of the service` }, - ], - }, - { - name: 'clickhouse_get_service_details', - description: `Get full details for a specific service: status, region, tier, endpoints, and scaling configuration.`, - params: [ - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization`, - }, - { - name: 'serviceId', - type: 'string', - required: true, - description: `ID of the service to retrieve`, - }, - ], - }, - { - name: 'clickhouse_get_services_list', - description: `List all services (clusters) in a ClickHouse Cloud organization. Returns service IDs, names, status, region, and tier. Use the returned serviceId with other tools.`, - params: [ - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization whose services are to be listed`, - }, - ], - }, - { - name: 'clickhouse_list_clickpipes', - description: `List all ClickPipes (managed data ingestion pipelines) configured for a service.`, - params: [ - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization`, - }, - { - name: 'serviceId', - type: 'string', - required: true, - description: `ID of the service to list ClickPipes for`, - }, - ], - }, - { - name: 'clickhouse_list_databases', - description: `List all databases in a ClickHouse service. Use the returned database names with list_tables and run_select_query.`, - params: [{ name: 'serviceId', type: 'string', required: true, description: `No description.` }], - }, - { - name: 'clickhouse_list_service_backups', - description: `List all backups for a service, most recent first. Returns backup IDs, status, size, and timestamps.`, - params: [ - { - name: 'organizationId', - type: 'string', - required: true, - description: `ID of the organization`, - }, - { - name: 'serviceId', - type: 'string', - required: true, - description: `ID of the service to list backups for`, - }, - ], - }, - { - name: 'clickhouse_list_tables', - description: `List all tables in a database, including column names and types. Supports LIKE pattern filtering.`, - params: [ - { - name: 'database', - type: 'string', - required: true, - description: `Name of the database to list tables from`, - }, - { - name: 'serviceId', - type: 'string', - required: true, - description: `The unique identifier of the ClickHouse service`, - }, - { - name: 'like', - type: 'string', - required: false, - description: `Optional SQL LIKE pattern to filter tables by name (e.g., "events_%")`, - }, - { - name: 'notLike', - type: 'string', - required: false, - description: `Optional SQL LIKE pattern to exclude tables by name`, - }, - ], - }, - { - name: 'clickhouse_run_select_query', - description: `Execute a read-only SELECT query against a ClickHouse service. Only SELECT statements are permitted.`, - params: [ - { - name: 'query', - type: 'string', - required: true, - description: `A valid ClickHouse SELECT query. Only read-only SELECT statements are permitted. e.g. SELECT * FROM my_table LIMIT 10`, - }, - { - name: 'serviceId', - type: 'string', - required: true, - description: `The unique identifier of the ClickHouse service`, - }, - { - name: 'timeoutSeconds', - type: 'integer', - required: false, - description: `Query timeout in seconds. Default: 300 (5 min), max: 3600 (1 hour). Use lower values for simple queries.`, - }, - ], - }, -] From 9c60a0dae897202cdb6b637c2011a19571a7871c Mon Sep 17 00:00:00 2001 From: Pranesh Date: Tue, 26 May 2026 14:55:41 +0530 Subject: [PATCH 05/15] chore: revert SVG overwrites back to main versions --- .../authentication/token-management-0.svg | 2 +- .../agentkit/mcp/configure-mcp-server-0.svg | 2 +- .../agentkit/mcp/configure-mcp-server-1.svg | 2 +- .../agentkit/mcp/configure-mcp-server-2.svg | 2 +- public/d2/docs/agentkit/openclaw-0.svg | 2 +- public/d2/docs/agentkit/overview-0.svg | 2 +- .../d2/docs/agentkit/user-verification-0.svg | 2 +- .../implement-webhooks-0.svg | 2 +- .../interceptors/auth-flow-interceptors-0.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-0.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-1.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-2.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-3.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-4.svg | 2 +- .../docs/authenticate/mcp/custom-auth-0.svg | 2 +- .../mcp/expressjs-quickstart-0.svg | 2 +- .../mcp/fastapi-fastmcp-quickstart-0.svg | 2 +- .../authenticate/mcp/fastmcp-quickstart-0.svg | 2 +- .../authenticate/mcp/intro-to-mcp-auth-0.svg | 2 +- .../authenticate/mcp/intro-to-mcp-auth-1.svg | 2 +- .../authenticate/mcp/intro-to-mcp-auth-2.svg | 2 +- .../d2/docs/authenticate/mcp/overview-0.svg | 2 +- .../d2/docs/authenticate/mcp/overview-1.svg | 2 +- .../d2/docs/authenticate/mcp/overview-2.svg | 2 +- .../d2/docs/authenticate/mcp/overview-3.svg | 2 +- .../mcp/topologies/agent-mcp-0.svg | 2 +- .../mcp/topologies/human-mcp-0.svg | 2 +- .../authenticate/mcp/topologies/mcp-api-0.svg | 2 +- .../authenticate/mcp/topologies/mcp-api-1.svg | 2 +- .../authenticate/mcp/topologies/mcp-api-2.svg | 2 +- .../authenticate/mcp/xmcp-quickstart-0.svg | 194 ------------------ .../tools/use-scalekit-credentials-0.svg | 2 +- .../guides/group-based-role-assignment-0.svg | 2 +- public/d2/docs/fsa/guides/manage-users-0.svg | 2 +- .../d2/docs/fsa/guides/user-invitations-0.svg | 2 +- .../integrations/auth-systems/firebase-0.svg | 2 +- .../integrations/auth-systems/firebase-1.svg | 2 +- .../guides/sso/sso-migration-strategy-0.svg | 2 +- .../guides/sso/sso-migration-strategy-1.svg | 2 +- .../docs/mcp/auth-methods/custom-auth-0.svg | 2 +- .../d2/docs/mcp/auth-methods/enterprise-0.svg | 2 +- public/d2/docs/passwordless/oidc-0.svg | 2 +- public/d2/docs/sso/guides/idp-init-sso-0.svg | 2 +- public/d2/docs/sso/guides/idp-init-sso-1.svg | 2 +- 44 files changed, 43 insertions(+), 237 deletions(-) delete mode 100644 public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg diff --git a/public/d2/docs/agentkit/authentication/token-management-0.svg b/public/d2/docs/agentkit/authentication/token-management-0.svg index 36ba4c950..e658be0fa 100644 --- a/public/d2/docs/agentkit/authentication/token-management-0.svg +++ b/public/d2/docs/agentkit/authentication/token-management-0.svg @@ -1,4 +1,4 @@ - - - - - - - - - - - - -xmcp MCP with ScalekitMCP ClientMCP ServerScalekit POST /mcp 401 + WWW-Authenticate header GET /.well-known/oauth-protected-resource Resource metadata (authorization_servers) OAuth Authorization Code + PKCE Issue Bearer token POST /mcp with Bearer token Verify token via JWKS Tool response - - - - - - - - - - - diff --git a/public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg b/public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg index 256430d62..cb46e0dd0 100644 --- a/public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg +++ b/public/d2/docs/dev-kit/tools/use-scalekit-credentials-0.svg @@ -1,4 +1,4 @@ - + + + + + + + + + + + +xmcp MCP with ScalekitMCP ClientMCP ServerScalekit POST /mcp 401 + WWW-Authenticate header GET /.well-known/oauth-protected-resource Resource metadata (authorization_servers) OAuth Authorization Code + PKCE Issue Bearer token POST /mcp with Bearer token Verify token via JWKS Tool response + + + + + + + + + + + From 57d397074c98948729507c6a5c081e65b6c7c63b Mon Sep 17 00:00:00 2001 From: Pranesh Date: Tue, 26 May 2026 14:57:10 +0530 Subject: [PATCH 07/15] chore: remove sync-generated xmcp-quickstart-0.svg (not in main) --- .../authenticate/mcp/xmcp-quickstart-0.svg | 194 ------------------ 1 file changed, 194 deletions(-) delete mode 100644 public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg diff --git a/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg b/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg deleted file mode 100644 index 2c7def278..000000000 --- a/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - - - - - - -xmcp MCP with ScalekitMCP ClientMCP ServerScalekit POST /mcp 401 + WWW-Authenticate header GET /.well-known/oauth-protected-resource Resource metadata (authorization_servers) OAuth Authorization Code + PKCE Issue Bearer token POST /mcp with Bearer token Verify token via JWKS Tool response - - - - - - - - - - - From 57f8b5edb5c331588e69ae6ad871078442a5f4f1 Mon Sep 17 00:00:00 2001 From: Pranesh Date: Tue, 26 May 2026 14:58:04 +0530 Subject: [PATCH 08/15] chore: restore xmcp-quickstart-0.svg (new file added by sync) --- .../authenticate/mcp/xmcp-quickstart-0.svg | 194 ++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg diff --git a/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg b/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg new file mode 100644 index 000000000..2c7def278 --- /dev/null +++ b/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg @@ -0,0 +1,194 @@ + + + + + + + + + + + + +xmcp MCP with ScalekitMCP ClientMCP ServerScalekit POST /mcp 401 + WWW-Authenticate header GET /.well-known/oauth-protected-resource Resource metadata (authorization_servers) OAuth Authorization Code + PKCE Issue Bearer token POST /mcp with Bearer token Verify token via JWKS Tool response + + + + + + + + + + + From b4ebd3004c698e0d8c4d919aa26d4a2f9517c3b5 Mon Sep 17 00:00:00 2001 From: Pranesh Date: Wed, 27 May 2026 13:04:19 +0530 Subject: [PATCH 09/15] chore(docs): sync agent connectors from prod catalog and fix broken anchor link MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Synced 117 providers / 3505 tools from prod (new: airopsmcp, fiscalaimcp, sanitymcp) - Updated catalog.ts and all data TS files - Fixed broken anchor link in org-redirect-urls.mdx (#set-slug-and-metadata → #set-slug-or-metadata) --- .../docs/agentkit/connectors/airopsmcp.mdx | 72 + .../docs/agentkit/connectors/fiscalaimcp.mdx | 68 + .../docs/agentkit/connectors/sanitymcp.mdx | 72 + .../guides/dashboard/org-redirect-urls.mdx | 2 +- src/data/agent-connectors/airopsmcp.ts | 2014 +++++++++++++++++ src/data/agent-connectors/catalog.ts | 15 + src/data/agent-connectors/fiscalaimcp.ts | 21 + src/data/agent-connectors/sanitymcp.ts | 1070 +++++++++ 8 files changed, 3333 insertions(+), 1 deletion(-) create mode 100644 src/content/docs/agentkit/connectors/airopsmcp.mdx create mode 100644 src/content/docs/agentkit/connectors/fiscalaimcp.mdx create mode 100644 src/content/docs/agentkit/connectors/sanitymcp.mdx create mode 100644 src/data/agent-connectors/airopsmcp.ts create mode 100644 src/data/agent-connectors/fiscalaimcp.ts create mode 100644 src/data/agent-connectors/sanitymcp.ts diff --git a/src/content/docs/agentkit/connectors/airopsmcp.mdx b/src/content/docs/agentkit/connectors/airopsmcp.mdx new file mode 100644 index 000000000..4d098a597 --- /dev/null +++ b/src/content/docs/agentkit/connectors/airopsmcp.mdx @@ -0,0 +1,72 @@ +--- +title: 'Airops MCP connector' +tableOfContents: true +description: 'Connect to AirOps MCP. Manage brand kits, run AI-powered analytics, track AEO citations, and automate content workflows from your AI agents.' +sidebar: + label: 'Airops MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/airops.svg +connectorAuthType: API Key +connectorCategories: [AI, Marketing, Analytics] +head: + - tag: style + content: | + .sl-markdown-content h2 { + font-size: var(--sl-text-xl); + } + .sl-markdown-content h3 { + font-size: var(--sl-text-lg); + } +--- + +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/airopsmcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { QuickstartGenericApikeySection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +3. ### Make your first call + + + + + +## What you can do + +Connect this agent connector to let your agent: + +- **Grid write** — Create or update rows in a grid table +- **Update brand kit, track aeo page content** — Update a Brand Kit's base fields +- **Edits suggest brand kit** — Suggest edits to a Brand Kit's fields without applying them +- **Search knowledge base** — Search a Knowledge Base for relevant content using semantic similarity +- **Run grid rows** — Trigger execution of one or more grid rows +- **Read grid** — Read rows from a grid table + +## Tool list + +Use the exact tool names from the **Tool list** below when you call `execute_tool`. If you're not sure which name to use, list the tools available for the current user first. + + diff --git a/src/content/docs/agentkit/connectors/fiscalaimcp.mdx b/src/content/docs/agentkit/connectors/fiscalaimcp.mdx new file mode 100644 index 000000000..4eaac5c54 --- /dev/null +++ b/src/content/docs/agentkit/connectors/fiscalaimcp.mdx @@ -0,0 +1,68 @@ +--- +title: 'FiscalAI MCP connector' +tableOfContents: true +description: 'Connect to FiscalAI MCP. Access financial data for public companies including SEC filings, earnings, stock prices, financial ratios, and company profiles.' +sidebar: + label: 'FiscalAI MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/fiscalai.svg +connectorAuthType: OAuth 2.1/DCR +connectorCategories: [Analytics, AI, Accounting & Finance] +head: + - tag: style + content: | + .sl-markdown-content h2 { + font-size: var(--sl-text-xl); + } + .sl-markdown-content h3 { + font-size: var(--sl-text-lg); + } +--- + +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/fiscalaimcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +3. ### Authorize and make your first call + + + + + +## What you can do + +Connect this agent connector to let your agent: + +- **Execute code** — Execute JavaScript code in a secure sandbox to call Fiscal.ai API functions via the codemode namespace and return results via console.log +- **Docs api** — Retrieve Fiscal.ai API documentation with TypeScript type definitions for all available functions + +## Tool list + +Use the exact tool names from the **Tool list** below when you call `execute_tool`. If you're not sure which name to use, list the tools available for the current user first. + + diff --git a/src/content/docs/agentkit/connectors/sanitymcp.mdx b/src/content/docs/agentkit/connectors/sanitymcp.mdx new file mode 100644 index 000000000..c232de6c4 --- /dev/null +++ b/src/content/docs/agentkit/connectors/sanitymcp.mdx @@ -0,0 +1,72 @@ +--- +title: 'Sanity MCP connector' +tableOfContents: true +description: 'Connect to Sanity. Manage structured content, documents, datasets, schemas, releases, and media assets for headless CMS workflows.' +sidebar: + label: 'Sanity MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/sanity.svg +connectorAuthType: OAuth 2.1/DCR +connectorCategories: [Developer Tools, Files & Documents, Productivity] +head: + - tag: style + content: | + .sl-markdown-content h2 { + font-size: var(--sl-text-xl); + } + .sl-markdown-content h3 { + font-size: var(--sl-text-lg); + } +--- + +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/sanitymcp' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +3. ### Authorize and make your first call + + + + + +## What you can do + +Connect this agent connector to let your agent: + +- **Whoami records** — Get the currently authenticated Sanity user profile +- **Document version unpublish, version replace** — Unpublish a versioned document from a release +- **Discard version** — Discard document versions associated with a release +- **Update dataset** — Update the access control mode or description of an existing Sanity dataset +- **Documents unpublish, publish** — Unpublish one or more documents to revert them to draft state +- **Image transform, generate** — Apply an AI transformation to an image field in a Sanity document + +## Tool list + +Use the exact tool names from the **Tool list** below when you call `execute_tool`. If you're not sure which name to use, list the tools available for the current user first. + + diff --git a/src/content/docs/guides/dashboard/org-redirect-urls.mdx b/src/content/docs/guides/dashboard/org-redirect-urls.mdx index 1617358bc..8abb6fb52 100644 --- a/src/content/docs/guides/dashboard/org-redirect-urls.mdx +++ b/src/content/docs/guides/dashboard/org-redirect-urls.mdx @@ -216,7 +216,7 @@ If no organization is in scope, the template is not expanded and the request is 2. **Set the organization's slug** - For Megasoft, set `slug` to `auth.megasoft.com` (see [Set slug and metadata for an organization](#set-slug-and-metadata-for-an-organization) above). + For Megasoft, set `slug` to `auth.megasoft.com` (see [Set slug or metadata for an organization](#set-slug-or-metadata-for-an-organization) above). 3. **Pass the org-specific redirect URL and `organization_id` in the authorization request** diff --git a/src/data/agent-connectors/airopsmcp.ts b/src/data/agent-connectors/airopsmcp.ts new file mode 100644 index 000000000..1789b11d1 --- /dev/null +++ b/src/data/agent-connectors/airopsmcp.ts @@ -0,0 +1,2014 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'airopsmcp_add_grid_column', + description: `Add a new column to a grid table. Use this before write_grid when you need to write to a column that does not exist yet.`, + params: [ + { + name: 'data_type', + type: 'string', + required: true, + description: `The data type for the column.`, + }, + { name: 'grid_id', type: 'integer', required: true, description: `The ID of the grid.` }, + { + name: 'grid_table_id', + type: 'integer', + required: true, + description: `The ID of the grid table (sheet).`, + }, + { name: 'title', type: 'string', required: true, description: `The column title.` }, + { + name: 'position', + type: 'integer', + required: false, + description: `Optional column position. If omitted, appended at the end.`, + }, + ], + }, + { + name: 'airopsmcp_analytics_chart', + description: `Query analytics data and display it as an interactive chart. Returns data with a UI reference for visualization.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The Brand Kit ID to query analytics for`, + }, + { + name: 'metrics', + type: 'array', + required: true, + description: `Metrics to calculate and display (e.g., citation_rate, mention_rate, share_of_voice).`, + }, + { + name: 'chart_type', + type: 'string', + required: false, + description: `Type of chart to render. Line for time series, bar for comparisons, pie for proportions, area for comparison and visualizing totals with filled area under the curve. Default: line.`, + }, + { + name: 'countries', + type: 'array', + required: false, + description: `Filter by country codes (ISO 3166-1 alpha-2)`, + }, + { + name: 'dimensions', + type: 'array', + required: false, + description: `Dimensions to group by (max 3).`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date (YYYY-MM-DD). Defaults to yesterday. Must be before today because today's data may still be processing and is incomplete — yesterday is used to ensure robust, complete data. Leave blank unless a specific date is requested.`, + }, + { + name: 'grain', + type: 'string', + required: false, + description: `Time granularity for aggregation. Default: total`, + }, + { name: 'personas', type: 'array', required: false, description: `Filter by persona IDs` }, + { name: 'providers', type: 'array', required: false, description: `Filter by AI providers` }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Start date (YYYY-MM-DD). Default: 7 days ago`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `Filter by tag IDs. Returns data only for prompts tagged with any of the given tags.`, + }, + { + name: 'themes', + type: 'array', + required: false, + description: `Filter sentiment data by theme IDs. Only applies to sentiment_score metric.`, + }, + { + name: 'title', + type: 'string', + required: false, + description: `Optional chart title. If not provided, a title will be auto-generated.`, + }, + { name: 'topics', type: 'array', required: false, description: `Filter by topic IDs` }, + ], + }, + { + name: 'airopsmcp_create_aeo_prompt', + description: `Create a new AEO prompt for a Brand Kit. Prompts are questions that can be asked about a brand to AI search engines, used to track AI visibility and citations.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The Brand Kit ID to add the prompt to`, + }, + { + name: 'text', + type: 'string', + required: true, + description: `The prompt text (max 512 characters). Must be unique within the Brand Kit.`, + }, + { + name: 'topic_id', + type: 'integer', + required: true, + description: `Topic ID to associate with the prompt. Must belong to the same Brand Kit. Use \`list_topics\` to discover available topics and either suggest one or ask the user to choose.`, + }, + { + name: 'countries', + type: 'array', + required: false, + description: `ISO alpha-2 country codes to assign (e.g., ["US", "GB"]). Must be configured on the Brand Kit.`, + }, + { + name: 'persona_ids', + type: 'array', + required: false, + description: `Persona IDs to assign. Must belong to the same Brand Kit. Use \`list_personas\` to discover available personas.`, + }, + { + name: 'platforms', + type: 'array', + required: false, + description: `Platforms to assign. Valid values: chat_gpt, gemini, perplexity, google_ai_mode, google_ai_overview.`, + }, + ], + }, + { + name: 'airopsmcp_create_brand_kit_direct_upload', + description: `Initiate a direct file upload for use with Brand Kit visual tools.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The Brand Kit ID this file is intended for`, + }, + { + name: 'byte_size', + type: 'integer', + required: true, + description: `Size of the file in bytes`, + }, + { + name: 'checksum', + type: 'string', + required: true, + description: `Base64-encoded MD5 digest of the file contents`, + }, + { + name: 'content_type', + type: 'string', + required: true, + description: `MIME type of the file`, + }, + { + name: 'filename', + type: 'string', + required: true, + description: `The filename including extension, e.g. "logo.png" or "brand-font.woff2"`, + }, + ], + }, + { + name: 'airopsmcp_create_grid', + description: `Create a new empty, general-purpose grid with the given name. The grid is created with a single empty sheet (zero rows, zero columns).`, + params: [ + { name: 'name', type: 'string', required: true, description: `The name for the new grid.` }, + { + name: 'workspace_id', + type: 'integer', + required: false, + description: `Optional workspace ID. Defaults to the user's only workspace when unambiguous.`, + }, + ], + }, + { + name: 'airopsmcp_create_grid_sheet', + description: `Create a new sheet (grid table) within an existing grid. The sheet is created with zero rows and zero columns.`, + params: [ + { + name: 'grid_id', + type: 'integer', + required: true, + description: `The ID of the grid to add the sheet to.`, + }, + { name: 'name', type: 'string', required: true, description: `The name for the new sheet.` }, + ], + }, + { + name: 'airopsmcp_create_report', + description: `Create a new analytics report for a Brand Kit. Reports contain one or more modules that visualize metrics like citation_rate, mention_rate, share_of_voice, etc.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'modules', + type: 'array', + required: true, + description: `Array of module configurations`, + }, + { + name: 'name', + type: 'string', + required: true, + description: `Report name (must be unique per brand kit)`, + }, + ], + }, + { + name: 'airopsmcp_get_aeo_citation', + description: `Get prompts citing a specific URL. The 'id' parameter is the URL to look up.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The ID of the Brand Kit`, + }, + { name: 'id', type: 'string', required: true, description: `Resource ID` }, + { + name: 'countries', + type: 'array', + required: false, + description: `Filter metrics by country codes`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date for metrics (ISO 8601). Defaults to today.`, + }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { + name: 'personas', + type: 'array', + required: false, + description: `Filter metrics by persona IDs`, + }, + { + name: 'providers', + type: 'array', + required: false, + description: `Filter metrics by AI providers`, + }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Start date for metrics (ISO 8601). Defaults to 1 month ago.`, + }, + ], + }, + { + name: 'airopsmcp_get_aeo_page_content_update', + description: `Get a specific page content update by ID. Track content updates.`, + params: [ + { name: 'id', type: 'integer', required: true, description: `Resource ID` }, + { + name: 'brand_kit_id', + type: 'integer', + required: false, + description: `Optional Brand Kit ID to filter content updates by`, + }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { + name: 'includes', + type: 'array', + required: false, + description: `Related resources to include in the response, as a list of relationship names.`, + }, + { + name: 'workspace_id', + type: 'integer', + required: false, + description: `ID of the workspace to retrieve results from. If not provided, returns results from all workspaces the user belongs to.`, + }, + ], + }, + { + name: 'airopsmcp_get_answer', + description: `Get a specific AI answer by ID with full text content.`, + params: [ + { name: 'id', type: 'integer', required: true, description: `Resource ID` }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'includes', + type: 'array', + required: false, + description: `Related resources to include in the response, as a list of relationship names.`, + }, + ], + }, + { + name: 'airopsmcp_get_brand_kit', + description: `Fetch a Brand Kit's brand identity (writing_tone, writing_persona) and associated entities (product lines, audiences, content types, regions, writing rules, cus...`, + params: [ + { name: 'id', type: 'integer', required: true, description: `Resource ID` }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { + name: 'includes', + type: 'array', + required: false, + description: `Related resources to include in the response, as a list of relationship names.`, + }, + { + name: 'version', + type: 'string', + required: false, + description: `Brand Kit version to read from (\`active\` or \`draft\`). Defaults to \`active\`.`, + }, + { + name: 'workspace_id', + type: 'integer', + required: false, + description: `ID of the workspace to retrieve brand kits from. If not provided, returns brand kits from all workspaces the user belongs to.`, + }, + ], + }, + { + name: 'airopsmcp_get_grid_row_execution_status', + description: `Check the status of grid row executions. Returns the overall status and per-column detail for each execution.`, + params: [ + { + name: 'grid_id', + type: 'integer', + required: true, + description: `The ID of the grid containing the executions.`, + }, + { + name: 'row_execution_ids', + type: 'array', + required: true, + description: `IDs of the row executions to check (max 50).`, + }, + ], + }, + { + name: 'airopsmcp_get_insights_settings', + description: `Get AEO insights configuration for a Brand Kit, this includes the relevant information to use any AEO and analytics tools.`, + params: [ + { name: 'id', type: 'integer', required: true, description: `Resource ID` }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'workspace_id', + type: 'integer', + required: false, + description: `ID of the workspace to retrieve results from. If not provided, returns results from all workspaces the user belongs to.`, + }, + ], + }, + { + name: 'airopsmcp_get_page_details', + description: `Get AEO metrics for a specific web page. Page details include citation share, citation rate, unique cited questions count, and Google Search Console metrics (cl...`, + params: [ + { name: 'id', type: 'integer', required: true, description: `Resource ID` }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date for metrics period (YYYY-MM-DD format). Defaults to current date.`, + }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Start date for metrics period (YYYY-MM-DD format). Defaults to 1 month ago.`, + }, + ], + }, + { + name: 'airopsmcp_get_page_prompts', + description: `Get prompts citing a specific web page. Returns AI prompts that cite the page along with citation metrics (citation_rate, mention_rate) and trends.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `ID of the brand kit` }, + { + name: 'web_page_id', + type: 'integer', + required: true, + description: `ID of the web page to get citing prompts for`, + }, + { + name: 'countries', + type: 'array', + required: false, + description: `Country codes to filter by (ISO 3166-1 alpha-2 format).`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date for analysis period (ISO 8601 format, defaults to today)`, + }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { + name: 'includes', + type: 'array', + required: false, + description: `Related resources to include in the response, as a list of relationship names.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { name: 'personas', type: 'array', required: false, description: `Filter by persona IDs` }, + { + name: 'providers', + type: 'array', + required: false, + description: `Filter by AI providers (e.g., chat_gpt, gemini, perplexity, google_ai_mode, google_ai_overview, claude, grok, microsoft_copilot)`, + }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Start date for analysis period (ISO 8601 format, defaults to 1 month ago)`, + }, + { name: 'topic_ids', type: 'array', required: false, description: `Filter by topic IDs` }, + ], + }, + { + name: 'airopsmcp_get_prompt_answers', + description: `Get AI answers for a specific prompt/question. Prompt answers are the AI answers for a specific question/prompt asked to multiple AI providers and the answers a...`, + params: [ + { + name: 'prompt_id', + type: 'integer', + required: true, + description: `ID of the question/prompt to get answers for`, + }, + { + name: 'countries', + type: 'string', + required: false, + description: `Country codes to filter by (ISO 3166-1 alpha-2 format).`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date for analysis period (ISO 8601 format, defaults to today)`, + }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'includes', + type: 'array', + required: false, + description: `Related resources to include in the response, as a list of relationship names.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { + name: 'personas', + type: 'string', + required: false, + description: `Comma-separated persona IDs to filter by.Use "default" for the default persona.`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with - for descending.`, + }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Start date for analysis period (ISO 8601 format, defaults to 1 month ago)`, + }, + ], + }, + { + name: 'airopsmcp_get_report', + description: `Get a specific report by ID with its module configurations. Reports are saved analytics views for a Brand Kit.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The ID of the Brand Kit`, + }, + { name: 'id', type: 'integer', required: true, description: `Resource ID` }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { + name: 'includes', + type: 'array', + required: false, + description: `Related resources to include in the response, as a list of relationship names.`, + }, + ], + }, + { + name: 'airopsmcp_get_sentiment_theme_answers', + description: `Get individual AI answers with sentiment details for a specific theme. Returns answer text, sentiment (positive/neutral/negative), confidence score, and provide...`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'sentiment_theme_id', + type: 'integer', + required: true, + description: `The sentiment theme ID to drill into. Use query_analytics with dimensions=[theme] to discover available theme IDs first.`, + }, + { + name: 'countries', + type: 'array', + required: false, + description: `Filter by country codes (ISO 3166-1 alpha-2)`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date (YYYY-MM-DD). Defaults to yesterday. Must be before today.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number. Default: 1` }, + { + name: 'per_page', + type: 'integer', + required: false, + description: `Results per page (1-50). Default: 10`, + }, + { name: 'personas', type: 'array', required: false, description: `Filter by persona IDs` }, + { name: 'providers', type: 'array', required: false, description: `Filter by AI providers` }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Start date (YYYY-MM-DD). Default: 30 days ago`, + }, + { name: 'topics', type: 'array', required: false, description: `Filter by topic IDs` }, + ], + }, + { + name: 'airopsmcp_list_aeo_citations', + description: `List citations (URLs) with metrics for a Brand Kit.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The ID of the Brand Kit`, + }, + { + name: 'countries', + type: 'array', + required: false, + description: `Filter metrics by country codes`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date for metrics (ISO 8601). Defaults to today.`, + }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { + name: 'personas', + type: 'array', + required: false, + description: `Filter metrics by persona IDs`, + }, + { + name: 'providers', + type: 'array', + required: false, + description: `Filter metrics by AI providers`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with - for descending.`, + }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Start date for metrics (ISO 8601). Defaults to 1 month ago.`, + }, + ], + }, + { + name: 'airopsmcp_list_aeo_domains', + description: `List domains cited in AI answers for a Brand Kit. Cited domains aggregated by domain with citation metrics.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The ID of the Brand Kit`, + }, + { + name: 'countries', + type: 'array', + required: false, + description: `Filter metrics by country codes`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date for metrics (ISO 8601). Defaults to today.`, + }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { + name: 'personas', + type: 'array', + required: false, + description: `Filter metrics by persona IDs`, + }, + { + name: 'providers', + type: 'array', + required: false, + description: `Filter metrics by AI providers`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with - for descending.`, + }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Start date for metrics (ISO 8601). Defaults to 1 month ago.`, + }, + ], + }, + { + name: 'airopsmcp_list_aeo_page_content_updates', + description: `List page content updates for a workspace. Track content updates.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: false, + description: `Optional Brand Kit ID to filter content updates by`, + }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { + name: 'includes', + type: 'array', + required: false, + description: `Related resources to include in the response, as a list of relationship names.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with - for descending.`, + }, + { + name: 'workspace_id', + type: 'integer', + required: false, + description: `ID of the workspace to retrieve results from. If not provided, returns results from all workspaces the user belongs to.`, + }, + ], + }, + { + name: 'airopsmcp_list_aeo_prompts', + description: `List AEO prompts for a specific Brand Kit. Questions are the AI prompts that can be asked about a brand.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The ID of the Brand Kit`, + }, + { + name: 'countries', + type: 'array', + required: false, + description: `Filter metrics by country codes`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date for metrics (ISO 8601). Defaults to today.`, + }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { + name: 'includes', + type: 'array', + required: false, + description: `Related resources to include in the response, as a list of relationship names.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { + name: 'personas', + type: 'array', + required: false, + description: `Filter metrics by persona IDs`, + }, + { + name: 'providers', + type: 'array', + required: false, + description: `Filter metrics by AI providers`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with - for descending.`, + }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Start date for metrics (ISO 8601). Defaults to 1 month ago.`, + }, + ], + }, + { + name: 'airopsmcp_list_brand_kits', + description: `List all Brand Kits the user has access to. Returns \`brand_management_enabled\` and \`aeo_enabled\` flags for each brand kit.`, + params: [ + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with - for descending.`, + }, + { + name: 'version', + type: 'string', + required: false, + description: `Brand Kit version to read from (\`active\` or \`draft\`). Defaults to \`active\`.`, + }, + { + name: 'workspace_id', + type: 'integer', + required: false, + description: `ID of the workspace to retrieve results from. If not provided, returns results from all workspaces the user belongs to.`, + }, + ], + }, + { + name: 'airopsmcp_list_grids', + description: `List grids the authenticated user has access to. Use includes=[\\"grid_tables.grid_columns\\"] to get table and column structure needed for read_grid and write_gr...`, + params: [ + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { + name: 'includes', + type: 'array', + required: false, + description: `Related resources to include in the response, as a list of relationship names.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with - for descending.`, + }, + ], + }, + { + name: 'airopsmcp_list_knowledge_bases', + description: `List all Knowledge Bases the authenticated user has access to. Knowledge Bases store documents for semantic search.`, + params: [ + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with - for descending.`, + }, + ], + }, + { + name: 'airopsmcp_list_pages', + description: `List web pages with daily metrics (AEO citations, GSC clicks/impressions, GA4 traffic) for a brand kit.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `ID of the brand kit to retrieve web page metrics for`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date for analysis period (ISO 8601 format, defaults to today)`, + }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { + name: 'smart_filter', + type: 'string', + required: false, + description: `Apply a predefined filter preset.`, + }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with - for descending.`, + }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Start date for analysis period (ISO 8601 format, defaults to 1 month ago)`, + }, + ], + }, + { + name: 'airopsmcp_list_personas', + description: `List personas for a specific Brand Kit. Personas are the characters that can be used to ask questions about a brand.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The ID of the Brand Kit`, + }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with - for descending.`, + }, + ], + }, + { + name: 'airopsmcp_list_reports', + description: `List saved analytics reports for a specific Brand Kit.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The ID of the Brand Kit`, + }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { + name: 'includes', + type: 'array', + required: false, + description: `Related resources to include in the response, as a list of relationship names.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with - for descending.`, + }, + ], + }, + { + name: 'airopsmcp_list_tags', + description: `List tags for a specific Brand Kit. Tags are user-defined labels applied to prompts within a Brand Kit.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The ID of the Brand Kit`, + }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with - for descending.`, + }, + ], + }, + { + name: 'airopsmcp_list_topics', + description: `List topics for a specific Brand Kit. Topics are the categories of questions that can be asked about a Brand Kit.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The ID of the Brand Kit`, + }, + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with - for descending.`, + }, + ], + }, + { + name: 'airopsmcp_list_workspaces', + description: `List all workspaces the authenticated user has access to. Workspaces are the top-level container for all resources in the AirOps platform.`, + params: [ + { + name: 'fields', + type: 'array', + required: false, + description: `Specify which fields to return in the response, as a list of field names.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Filter results by column values. Each filter requires column_id, operator, and value.`, + }, + { name: 'page', type: 'integer', required: false, description: `Page number` }, + { name: 'per_page', type: 'integer', required: false, description: `Items per page` }, + { + name: 'sort', + type: 'string', + required: false, + description: `Sort field. Prefix with - for descending.`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_audience', + description: `Create or update an audience for a Brand Kit draft. Omit \`id\` to create a new audience; provide \`id\` to update an existing one.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { name: 'description', type: 'string', required: false, description: `Audience description` }, + { + name: 'id', + type: 'integer', + required: false, + description: `Audience ID (omit to create new)`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Audience name (required on create)`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_competitor', + description: `Create or update a competitor for a Brand Kit. Omit \`id\` to create a new competitor; provide \`id\` to update an existing one.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'domain', + type: 'string', + required: false, + description: `Competitor domain (e.g. "example.com")`, + }, + { + name: 'id', + type: 'integer', + required: false, + description: `Competitor ID (omit to create new)`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Competitor name (required on create)`, + }, + { + name: 'product_line_ids', + type: 'array', + required: false, + description: `Product line IDs to associate (must belong to this brand kit, at least one required)`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_content_sample', + description: `Create or update a content sample for a Brand Kit. Omit \`id\` to create a new content sample; provide \`id\` to update an existing one.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'audience_ids', + type: 'array', + required: false, + description: `Audience IDs to associate (must belong to this brand kit). Pass [] to clear.`, + }, + { + name: 'content', + type: 'string', + required: false, + description: `Plain text content for the sample. On create, provide either content or url (not both).`, + }, + { + name: 'content_type_id', + type: 'integer', + required: false, + description: `Content type ID (required on create, must belong to this brand kit)`, + }, + { + name: 'id', + type: 'integer', + required: false, + description: `Content sample ID (omit to create new)`, + }, + { + name: 'region_ids', + type: 'array', + required: false, + description: `Region IDs to associate (must belong to this brand kit). Pass [] to clear.`, + }, + { + name: 'url', + type: 'string', + required: false, + description: `URL of the content sample. On create, provide either url or content (not both).`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_content_type', + description: `Create or update a content type for a Brand Kit. Omit \`id\` to create a new content type; provide \`id\` to update an existing one.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { name: 'cta_text', type: 'string', required: false, description: `Call-to-action text` }, + { name: 'cta_url', type: 'string', required: false, description: `Call-to-action URL` }, + { name: 'header_case', type: 'string', required: false, description: `Header case style` }, + { + name: 'header_case_custom_value', + type: 'string', + required: false, + description: `Custom header case rules (when header_case is custom)`, + }, + { + name: 'id', + type: 'integer', + required: false, + description: `Content type ID (omit to create new)`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Content type name (required on create)`, + }, + { + name: 'sample_url', + type: 'string', + required: false, + description: `URL of a content sample (only used on create)`, + }, + { + name: 'template_outline', + type: 'string', + required: false, + description: `Template outline`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_custom_variable', + description: `Before creating a custom variable, you MUST analyze the user's intent and suggest the appropriate Brand Kit dimension instead.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'id', + type: 'integer', + required: false, + description: `Custom variable ID (omit to create new)`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Custom variable name (required on create)`, + }, + { + name: 'value', + type: 'string', + required: false, + description: `Custom variable value (required on create, editable on update)`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_font', + description: `Create or update a font for a Brand Kit. Omit \`id\` to create a new font; provide \`id\` to update an existing one.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'file_url', + type: 'string', + required: false, + description: `Publicly accessible URL to a font file (TTF, OTF, WOFF, WOFF2, or EOT). Use signed_id instead if the file was uploaded via create_brand_kit_direct_upload. Pass null or empty to leave the existing file unchanged.`, + }, + { + name: 'google_font_link', + type: 'string', + required: false, + description: `Google Fonts URL for this font (e.g. https://fonts.google.com/specimen/Inter). Pass null or empty string to clear.`, + }, + { name: 'id', type: 'integer', required: false, description: `Font ID (omit to create new)` }, + { + name: 'name', + type: 'string', + required: false, + description: `Font name, e.g. "Inter" or "Brand Heading Font" (required on create)`, + }, + { + name: 'signed_id', + type: 'string', + required: false, + description: `Signed blob ID returned by create_brand_kit_direct_upload after a direct upload. Preferred over file_url when the user has a local file. Pass null to leave the existing file unchanged.`, + }, + { + name: 'usage_instructions', + type: 'string', + required: false, + description: `Instructions for agents on when and how to use this font. Pass null or empty string to clear.`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_logo_size', + description: `Create or update a logo size for a Brand Kit. Omit \`id\` to create a new logo size; provide \`id\` to update an existing one.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'height', + type: 'integer', + required: false, + description: `Height in pixels. Pass null to clear.`, + }, + { + name: 'id', + type: 'integer', + required: false, + description: `Logo size ID (omit to create new)`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Logo size name, e.g. "Web Banner" or "Social Media Square" (required on create)`, + }, + { + name: 'usage_instructions', + type: 'string', + required: false, + description: `Instructions for agents on when and how to use this logo size. Pass null to clear.`, + }, + { + name: 'width', + type: 'integer', + required: false, + description: `Width in pixels. Pass null to clear.`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_logo_variant', + description: `Create or update a logo variant for a Brand Kit. Omit \`id\` to create a new logo variant; provide \`id\` to update an existing one.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'background_color', + type: 'string', + required: false, + description: `Background color as a hex value (e.g. #ffffff). Pass null to clear.`, + }, + { + name: 'file_url', + type: 'string', + required: false, + description: `Publicly accessible URL to a PNG or SVG image. Use signed_id instead if the file was uploaded via create_brand_kit_direct_upload. Pass null to leave the existing file unchanged.`, + }, + { + name: 'id', + type: 'integer', + required: false, + description: `Logo variant ID (omit to create new)`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Logo variant name, e.g. "Primary Logo" or "Dark Background Logo" (required on create)`, + }, + { + name: 'signed_id', + type: 'string', + required: false, + description: `Signed blob ID returned by create_brand_kit_direct_upload after a direct upload. Preferred over file_url when the user has a local file. Pass null to leave the existing file unchanged.`, + }, + { + name: 'usage_instructions', + type: 'string', + required: false, + description: `Instructions for agents on when and how to use this logo, e.g. "Use on dark backgrounds only". Pass null to clear.`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_palette', + description: `Create or update a color palette for a Brand Kit. Omit \`id\` to create a new palette; provide \`id\` to update an existing one.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'id', + type: 'integer', + required: false, + description: `Palette ID (omit to create new)`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `The palette name, e.g. "Primary" (required on create)`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_palette_color', + description: `Create or update a color within a Brand Kit palette. Omit \`id\` to create a new color; provide \`id\` to update an existing one.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'id', + type: 'integer', + required: false, + description: `Color ID (omit to create new)`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Color name, e.g. "Brand Blue" (required on create)`, + }, + { + name: 'palette_id', + type: 'integer', + required: false, + description: `The palette ID (required on create)`, + }, + { + name: 'usage_instructions', + type: 'string', + required: false, + description: `Instructions for agents on when and how to use this color`, + }, + { + name: 'value', + type: 'string', + required: false, + description: `Hex color value, e.g. "#0055ff" (required on create)`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_product_line', + description: `Create or update a product line for a Brand Kit. Omit \`id\` to create a new product line; provide \`id\` to update an existing one.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { name: 'details', type: 'string', required: false, description: `Product line details` }, + { + name: 'id', + type: 'integer', + required: false, + description: `Product line ID (omit to create new)`, + }, + { + name: 'ideal_customer_profile', + type: 'string', + required: false, + description: `Ideal customer profile`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Product line name (required on create)`, + }, + { name: 'positioning', type: 'string', required: false, description: `Product positioning` }, + { name: 'url', type: 'string', required: false, description: `Product line URL` }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_region', + description: `Create or update a region for a Brand Kit. Omit \`id\` to create a new region; provide \`id\` to update an existing one.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { name: 'description', type: 'string', required: false, description: `Region description` }, + { + name: 'icon_name', + type: 'string', + required: false, + description: `Flag icon name (e.g. flag-us, flag-gb). Pass empty string or null to clear.`, + }, + { + name: 'id', + type: 'integer', + required: false, + description: `Region ID (omit to create new)`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Region name (required on create)`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_type_size', + description: `Create or update a type size for a Brand Kit. Omit \`id\` to create a new type size; provide \`id\` to update an existing one.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'font_id', + type: 'integer', + required: false, + description: `ID of the font this type size belongs to`, + }, + { + name: 'id', + type: 'integer', + required: false, + description: `Type size ID (omit to create new)`, + }, + { + name: 'line_height', + type: 'number', + required: false, + description: `Line height as a decimal multiplier, e.g. 1.5.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Type size name, e.g. "H1 Display" or "Body Regular" (required on create)`, + }, + { name: 'size', type: 'integer', required: false, description: `Font size in pixels.` }, + { + name: 'usage_instructions', + type: 'string', + required: false, + description: `Instructions for agents on when and how to use this type size. Pass null or empty string to clear.`, + }, + { + name: 'weight', + type: 'integer', + required: false, + description: `Font weight as an integer (100–900), e.g. 400 or 700.`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_usage_rule', + description: `Create or update a usage rule for a Brand Kit. Omit \`id\` to create a new usage rule; provide \`id\` to update an existing one.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'applies_to', + type: 'string', + required: false, + description: `What this rule applies to. Required on create; ignored on update.`, + }, + { + name: 'id', + type: 'integer', + required: false, + description: `Usage rule ID (omit to create new)`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `The usage rule text, e.g. "Use only on white backgrounds" (required on create)`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_visual_example', + description: `Create or update a visual example for a Brand Kit's Data Visualization section. Omit \`id\` to create a new visual example; provide \`id\` to update an existing one...`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'file_url', + type: 'string', + required: false, + description: `Publicly accessible URL to a PNG, JPG, SVG, GIF, or WebP image. Use signed_id instead if the file was uploaded via create_brand_kit_direct_upload. Pass null to leave the existing file unchanged.`, + }, + { + name: 'id', + type: 'integer', + required: false, + description: `Visual example ID (omit to create new)`, + }, + { + name: 'sample_url', + type: 'string', + required: false, + description: `Optional URL to a live sample. Pass null to clear.`, + }, + { + name: 'signed_id', + type: 'string', + required: false, + description: `Signed blob ID returned by create_brand_kit_direct_upload after a direct upload. Preferred over file_url when the user has a local file. Pass null to leave the existing file unchanged.`, + }, + { + name: 'title', + type: 'string', + required: false, + description: `Title of the visual example, e.g. "Dashboard Overview" (required on create)`, + }, + { + name: 'usage_instructions', + type: 'string', + required: false, + description: `Instructions for agents on when and how to use this visual example. Pass null to clear.`, + }, + ], + }, + { + name: 'airopsmcp_manage_brand_kit_writing_rule', + description: `Create or update a writing rule for a Brand Kit. Omit \`id\` to create a new rule; provide \`id\` to update an existing one.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'audience_id', + type: 'integer', + required: false, + description: `Audience ID to scope this rule to (mutually exclusive with content_type_id and region_id). Only on create.`, + }, + { + name: 'content_type_id', + type: 'integer', + required: false, + description: `Content type ID to scope this rule to (mutually exclusive with audience_id and region_id). Only on create.`, + }, + { + name: 'id', + type: 'integer', + required: false, + description: `Writing rule ID (omit to create new)`, + }, + { + name: 'region_id', + type: 'integer', + required: false, + description: `Region ID to scope this rule to (mutually exclusive with content_type_id and audience_id). Only on create.`, + }, + { + name: 'text', + type: 'string', + required: false, + description: `Writing rule text (required on create)`, + }, + ], + }, + { + name: 'airopsmcp_publish_brand_kit', + description: `Publish a Brand Kit's current draft so changes become active. This promotes the current draft to active and creates a fresh draft from it.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The Brand Kit ID to publish`, + }, + ], + }, + { + name: 'airopsmcp_query_analytics', + description: `Query analytics data for a Brand Kit with flexible metrics, dimensions, and filters.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The Brand Kit ID to query analytics for`, + }, + { + name: 'metrics', + type: 'array', + required: true, + description: `Metrics to calculate and display (e.g., citation_rate, mention_rate, share_of_voice).`, + }, + { + name: 'brand_mentioned', + type: 'string', + required: false, + description: `Filter by prompt type. Options: category (generic prompts - recommended for accurate visibility metrics), brand (prompts mentioning the brand). Defaults to category if not specified`, + }, + { + name: 'countries', + type: 'array', + required: false, + description: `Filter by country codes (ISO 3166-1 alpha-2)`, + }, + { + name: 'dimensions', + type: 'array', + required: false, + description: `Dimensions to group by (max 3).`, + }, + { + name: 'end_date', + type: 'string', + required: false, + description: `End date (YYYY-MM-DD). Defaults to yesterday. Must be before today because today's data may still be processing and is incomplete — yesterday is used to ensure robust, complete data. Leave blank unless a specific date is requested.`, + }, + { + name: 'grain', + type: 'string', + required: false, + description: `Time granularity for aggregation. Default: total`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum rows to return (1-1000). Default: 100`, + }, + { + name: 'order_by', + type: 'string', + required: false, + description: `Custom sort order (e.g., "citation_count DESC")`, + }, + { name: 'personas', type: 'array', required: false, description: `Filter by persona IDs` }, + { name: 'providers', type: 'array', required: false, description: `Filter by AI providers` }, + { + name: 'start_date', + type: 'string', + required: false, + description: `Start date (YYYY-MM-DD). Default: 7 days ago`, + }, + { + name: 'tags', + type: 'array', + required: false, + description: `Filter by tag IDs. Returns data only for prompts tagged with any of the given tags.`, + }, + { + name: 'themes', + type: 'array', + required: false, + description: `Filter sentiment data by theme IDs. Only applies to sentiment_score metric.`, + }, + { name: 'topics', type: 'array', required: false, description: `Filter by topic IDs` }, + ], + }, + { + name: 'airopsmcp_read_grid', + description: `Read rows from a grid table. Returns rows as objects with column titles as keys.`, + params: [ + { + name: 'grid_id', + type: 'integer', + required: true, + description: `The ID of the grid to read from.`, + }, + { + name: 'grid_table_id', + type: 'integer', + required: true, + description: `The ID of the grid table (sheet) to read.`, + }, + { + name: 'column_ids', + type: 'array', + required: false, + description: `Optional list of column IDs to include. If omitted, all columns are returned.`, + }, + { + name: 'filters', + type: 'array', + required: false, + description: `Optional filters to apply.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Number of rows to return (1-100, default 50).`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Row offset for pagination (default: 0). Use with limit to page through results.`, + }, + { + name: 'truncate', + type: 'integer', + required: false, + description: `Maximum number of characters per cell value. 0 means no truncation (default).`, + }, + ], + }, + { + name: 'airopsmcp_run_grid_rows', + description: `Trigger execution of one or more grid rows. This runs all workflow (app execution) columns for each specified row in dependency order.`, + params: [ + { + name: 'grid_id', + type: 'integer', + required: true, + description: `The ID of the grid containing the rows to execute.`, + }, + { + name: 'grid_row_ids', + type: 'array', + required: true, + description: `IDs of the grid rows to execute (max 50).`, + }, + { + name: 'grid_table_id', + type: 'integer', + required: true, + description: `The ID of the grid table (sheet) containing the rows.`, + }, + ], + }, + { + name: 'airopsmcp_search_knowledge_base', + description: `Search a Knowledge Base for relevant content using semantic similarity. Use list_knowledge_bases() first to find available Knowledge Bases and their IDs.`, + params: [ + { + name: 'knowledge_base_id', + type: 'integer', + required: true, + description: `The ID of the Knowledge Base to search.`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `The search query. Use natural language to describe what you are looking for.`, + }, + { + name: 'top_k', + type: 'integer', + required: false, + description: `Number of results to return (1-20, default 5).`, + }, + ], + }, + { + name: 'airopsmcp_suggest_brand_kit_edits', + description: `Suggest edits to a Brand Kit's fields without applying them. Returns a comparison of current vs suggested values for user review.`, + params: [ + { name: 'brand_kit_id', type: 'integer', required: true, description: `The Brand Kit ID` }, + { + name: 'suggestions', + type: 'object', + required: true, + description: `Field name to suggested value pairs. Valid fields depend on entity_type. Use arrays for multi_select fields (e.g. product_line_ids).`, + }, + { + name: 'entity_type', + type: 'string', + required: false, + description: `Which entity to suggest edits for. Defaults to brand_kit.`, + }, + { + name: 'id', + type: 'integer', + required: false, + description: `Record ID of the existing record to update. Omit to suggest creating a new record.`, + }, + { + name: 'title', + type: 'string', + required: false, + description: `Optional heading to display in the review UI`, + }, + ], + }, + { + name: 'airopsmcp_track_aeo_page_content_update', + description: `Track a page content update (publish/refresh) to correlate future analytics with content changes.`, + params: [ + { + name: 'type', + type: 'string', + required: true, + description: `The type of content update to track`, + }, + { + name: 'url', + type: 'string', + required: true, + description: `The page URL to track (max 512 characters). The URL must belong to a brand_url or domain configured in one of the workspace's Brand Kits (use get_insights_settings to see domains). For example, if the Brand Kit domain is "example.com", URLs like "https://example.com/blog/post" will match.`, + }, + { + name: 'workspace_id', + type: 'integer', + required: true, + description: `The workspace ID to create the content update in`, + }, + ], + }, + { + name: 'airopsmcp_update_brand_kit', + description: `Update a Brand Kit's base fields. Only provided fields are changed.`, + params: [ + { + name: 'brand_kit_id', + type: 'integer', + required: true, + description: `The Brand Kit ID to update`, + }, + { + name: 'brand_about', + type: 'string', + required: false, + description: `Description/overview of the brand`, + }, + { name: 'brand_name', type: 'string', required: false, description: `Name of the brand` }, + { + name: 'brand_url', + type: 'string', + required: false, + description: `URL of the brand website`, + }, + { + name: 'writing_persona', + type: 'string', + required: false, + description: `The persona/voice used in brand writing`, + }, + { + name: 'writing_tone', + type: 'string', + required: false, + description: `The tone of voice for brand content`, + }, + ], + }, + { + name: 'airopsmcp_write_grid', + description: `Create or update rows in a grid table. When mode is 'create', rows are added as new rows with column titles as keys.`, + params: [ + { + name: 'grid_id', + type: 'integer', + required: true, + description: `The ID of the grid to write to.`, + }, + { + name: 'grid_table_id', + type: 'integer', + required: true, + description: `The ID of the grid table (sheet) to write to.`, + }, + { + name: 'mode', + type: 'string', + required: true, + description: `'create' to add new rows, 'update' to modify existing rows (requires __id in each row).`, + }, + { + name: 'rows', + type: 'array', + required: true, + description: `Array of row objects. Keys are column titles, values are cell values. For update mode, include __id with the row ID.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/catalog.ts b/src/data/agent-connectors/catalog.ts index c8bd8ef6a..ef4c873aa 100644 --- a/src/data/agent-connectors/catalog.ts +++ b/src/data/agent-connectors/catalog.ts @@ -7,6 +7,21 @@ export interface ProviderMeta { } export const catalog: Record = { + airopsmcp: { + iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/airops.svg', + authType: 'API Key', + categories: ['AI', 'Marketing', 'Analytics'], + }, + sanitymcp: { + iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/sanity.svg', + authType: 'OAuth 2.1/DCR', + categories: ['Developer Tools', 'Files & Documents', 'Productivity'], + }, + fiscalaimcp: { + iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/fiscalai.svg', + authType: 'OAuth 2.1/DCR', + categories: ['Analytics', 'AI', 'Accounting & Finance'], + }, otteraimcp: { iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/otterai.svg', authType: 'OAuth 2.1/DCR', diff --git a/src/data/agent-connectors/fiscalaimcp.ts b/src/data/agent-connectors/fiscalaimcp.ts new file mode 100644 index 000000000..24b1680e5 --- /dev/null +++ b/src/data/agent-connectors/fiscalaimcp.ts @@ -0,0 +1,21 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'fiscalaimcp_api_docs', + description: `Retrieve Fiscal.ai API documentation with TypeScript type definitions for all available functions.`, + params: [], + }, + { + name: 'fiscalaimcp_execute_code', + description: `Execute JavaScript code in a secure sandbox to call Fiscal.ai API functions via the codemode namespace and return results via console.log.`, + params: [ + { + name: 'code', + type: 'string', + required: true, + description: `Async arrow function to execute. Must be in async () => { ... } format using codemode.() calls and console.log() for output.`, + }, + ], + }, +] diff --git a/src/data/agent-connectors/sanitymcp.ts b/src/data/agent-connectors/sanitymcp.ts new file mode 100644 index 000000000..c2548dcda --- /dev/null +++ b/src/data/agent-connectors/sanitymcp.ts @@ -0,0 +1,1070 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'sanitymcp__get_ui_context', + description: `Get the current UI context including the active document and workspace in Sanity Studio.`, + params: [ + { name: 'resource', type: 'object', required: true, description: `No description.` }, + { + name: 'documentId', + type: 'string', + required: false, + description: `Sanity document ID (e.g. drafts.abc123 for drafts, or bare ID for published).`, + }, + { + name: 'documentType', + type: 'string', + required: false, + description: `Schema type name of the document.`, + }, + { + name: 'maxRefDepth', + type: 'integer', + required: false, + description: `Maximum reference depth to follow when resolving document references.`, + }, + { + name: 'workspaceName', + type: 'string', + required: false, + description: `Sanity workspace name. Defaults to the default workspace.`, + }, + ], + }, + { + name: 'sanitymcp_add_cors_origin', + description: `Add a CORS origin to allow browser-based API access for a Sanity project.`, + params: [ + { + name: 'origin', + type: 'string', + required: true, + description: `CORS origin URL to allow (e.g. https://myapp.com).`, + }, + { name: 'resource', type: 'object', required: true, description: `No description.` }, + { + name: 'allowCredentials', + type: 'boolean', + required: false, + description: `Whether to allow credentials (cookies) from this CORS origin.`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_create_dataset', + description: `Create a new dataset in a Sanity project with the specified access control mode.`, + params: [ + { + name: 'datasetName', + type: 'string', + required: true, + description: `Name of the Sanity dataset.`, + }, + { name: 'resource', type: 'object', required: true, description: `No description.` }, + { + name: 'aclMode', + type: 'string', + required: false, + description: `Dataset access control mode: public or private.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Human-readable description.`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_create_documents_from_json', + description: `Create one or more Sanity documents from a JSON array of document objects.`, + params: [ + { + name: 'documents', + type: 'array', + required: true, + description: `Array of documents to create. Each document must have a type and content.`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { + name: 'releaseId', + type: 'string', + required: false, + description: `ID of the release to target.`, + }, + { + name: 'workspaceName', + type: 'string', + required: false, + description: `Sanity workspace name. Defaults to the default workspace.`, + }, + ], + }, + { + name: 'sanitymcp_create_documents_from_markdown', + description: `Create one or more Sanity documents from Markdown content.`, + params: [ + { + name: 'documents', + type: 'array', + required: true, + description: `Array of documents to create. Each document must have a type and Markdown content.`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { + name: 'releaseId', + type: 'string', + required: false, + description: `ID of the release to target.`, + }, + { + name: 'workspaceName', + type: 'string', + required: false, + description: `Sanity workspace name. Defaults to the default workspace.`, + }, + ], + }, + { + name: 'sanitymcp_create_project', + description: `Create a new Sanity project with optional CORS origin and organization.`, + params: [ + { + name: 'displayName', + type: 'string', + required: true, + description: `Display name for the Sanity project.`, + }, + { + name: 'organizationId', + type: 'string', + required: true, + description: `Sanity organization ID to create the project under.`, + }, + { + name: 'allowCredentials', + type: 'boolean', + required: false, + description: `Whether to allow credentials (cookies) from this CORS origin.`, + }, + { + name: 'corsOrigin', + type: 'string', + required: false, + description: `CORS origin URL for the new project.`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_create_release', + description: `Create a new content release for scheduling or grouping document publications.`, + params: [ + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { name: 'title', type: 'string', required: true, description: `Title of the release.` }, + { + name: 'description', + type: 'string', + required: false, + description: `Human-readable description.`, + }, + { + name: 'intendedPublishAt', + type: 'string', + required: false, + description: `ISO 8601 datetime when the release is scheduled to publish.`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { + name: 'releaseType', + type: 'string', + required: false, + description: `Type of release: scheduled, immediate, or undecided.`, + }, + ], + }, + { + name: 'sanitymcp_create_version', + description: `Create versioned copies of documents and associate them with a release.`, + params: [ + { + name: 'documentIds', + type: 'array', + required: true, + description: `Array of document IDs to create versions for (min 1, max 10)`, + }, + { + name: 'releaseId', + type: 'string', + required: true, + description: `ID of the release to target.`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_deploy_schema', + description: `Deploy a schema declaration to a Sanity project workspace.`, + params: [ + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'schemaDeclaration', + type: 'string', + required: true, + description: `Sanity schema configuration declaration string.`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { + name: 'workspaceName', + type: 'string', + required: false, + description: `Sanity workspace name. Defaults to the default workspace.`, + }, + ], + }, + { + name: 'sanitymcp_deploy_studio', + description: `Deploy a Sanity Studio to a hosted app subdomain.`, + params: [ + { + name: 'appHost', + type: 'string', + required: true, + description: `Subdomain hostname for the deployed Sanity Studio.`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { name: 'title', type: 'string', required: false, description: `Title of the release.` }, + { + name: 'workspaceName', + type: 'string', + required: false, + description: `Sanity workspace name. Defaults to the default workspace.`, + }, + ], + }, + { + name: 'sanitymcp_discard_drafts', + description: `Discard draft versions of one or more documents.`, + params: [ + { + name: 'ids', + type: 'array', + required: true, + description: `Document IDs to discard drafts for`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_generate_image', + description: `Generate an image for a document field using an AI instruction.`, + params: [ + { + name: 'documentId', + type: 'string', + required: true, + description: `Sanity document ID (e.g. drafts.abc123 for drafts, or bare ID for published).`, + }, + { + name: 'imagePath', + type: 'string', + required: true, + description: `Path to the image field within the document.`, + }, + { + name: 'instruction', + type: 'string', + required: true, + description: `Natural language instruction for the image transformation.`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { + name: 'workspaceName', + type: 'string', + required: false, + description: `Sanity workspace name. Defaults to the default workspace.`, + }, + ], + }, + { + name: 'sanitymcp_get_document', + description: `Retrieve a single Sanity document by its ID.`, + params: [ + { + name: 'documentId', + type: 'string', + required: true, + description: `Sanity document ID (e.g. drafts.abc123 for drafts, or bare ID for published).`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_get_project_studios', + description: `List all Sanity Studios deployed for a project.`, + params: [ + { name: 'resource', type: 'object', required: true, description: `No description.` }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_get_sanity_rules', + description: `Load one or more Sanity content rules by name.`, + params: [ + { + name: 'rules', + type: 'array', + required: true, + description: `One or more rule names to load. Use list_sanity_rules to see available rules.`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_get_schema', + description: `Retrieve the schema for a specific document type in a workspace.`, + params: [ + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { name: 'type', type: 'string', required: false, description: `Document schema type name.` }, + { + name: 'workspaceName', + type: 'string', + required: false, + description: `Sanity workspace name. Defaults to the default workspace.`, + }, + ], + }, + { + name: 'sanitymcp_list_datasets', + description: `List all datasets in a Sanity project.`, + params: [ + { name: 'resource', type: 'object', required: true, description: `No description.` }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_list_embeddings_indices', + description: `List all embeddings indices available in a Sanity project.`, + params: [ + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_list_organizations', + description: `List all Sanity organizations the authenticated user belongs to.`, + params: [ + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_list_projects', + description: `List all Sanity projects the authenticated user has access to.`, + params: [ + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_list_releases', + description: `List content releases for a project with optional state filtering and pagination.`, + params: [ + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of items to return.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Number of items to skip for pagination.`, + }, + { + name: 'state', + type: 'string', + required: false, + description: `Filter releases by state: active, archived, or published.`, + }, + ], + }, + { + name: 'sanitymcp_list_sanity_rules', + description: `List all available Sanity content rule names.`, + params: [ + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_list_workspace_schemas', + description: `List all schema types defined in a Sanity workspace.`, + params: [ + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_migration_guide', + description: `Retrieve a Sanity migration guide by name.`, + params: [ + { + name: 'guide', + type: 'string', + required: true, + description: `Name of the migration guide to retrieve.`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_patch_document_from_json', + description: `Apply set, unset, or append patch operations to a document using JSON.`, + params: [ + { + name: 'documentId', + type: 'string', + required: true, + description: `Sanity document ID (e.g. drafts.abc123 for drafts, or bare ID for published).`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'append', + type: 'array', + required: false, + description: `Append patch operations: adds items to the end of existing array fields.`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { + name: 'releaseId', + type: 'string', + required: false, + description: `ID of the release to target.`, + }, + { + name: 'set', + type: 'array', + required: false, + description: `Set patch operations: replaces field values at the specified document paths.`, + }, + { + name: 'unset', + type: 'array', + required: false, + description: `Unset patch operations: removes fields or array items at the specified paths.`, + }, + { + name: 'workspaceName', + type: 'string', + required: false, + description: `Sanity workspace name. Defaults to the default workspace.`, + }, + ], + }, + { + name: 'sanitymcp_patch_document_from_markdown', + description: `Patch a document field with Markdown content converted to Sanity portable text.`, + params: [ + { + name: 'documentId', + type: 'string', + required: true, + description: `Sanity document ID (e.g. drafts.abc123 for drafts, or bare ID for published).`, + }, + { + name: 'markdown', + type: 'string', + required: true, + description: `Markdown content to patch into the document.`, + }, + { + name: 'path', + type: 'string', + required: true, + description: `Document field path to target.`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { + name: 'releaseId', + type: 'string', + required: false, + description: `ID of the release to target.`, + }, + { + name: 'workspaceName', + type: 'string', + required: false, + description: `Sanity workspace name. Defaults to the default workspace.`, + }, + ], + }, + { + name: 'sanitymcp_publish_documents', + description: `Publish one or more draft documents to make them publicly visible.`, + params: [ + { + name: 'ids', + type: 'array', + required: true, + description: `IDs of the documents to publish`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_query_documents', + description: `Execute a GROQ query against the Sanity dataset and return matching documents.`, + params: [ + { + name: 'query', + type: 'string', + required: true, + description: `GROQ query string to execute.`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of items to return.`, + }, + { + name: 'params', + type: 'object', + required: false, + description: `Optional parameters for the GROQ query`, + }, + { + name: 'perspective', + type: 'string', + required: false, + description: `Query perspective: published, previewDrafts, or raw.`, + }, + { + name: 'single', + type: 'boolean', + required: false, + description: `Return a single result instead of an array.`, + }, + ], + }, + { + name: 'sanitymcp_read_docs', + description: `Read a Sanity documentation page by URL or path.`, + params: [ + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { + name: 'path', + type: 'string', + required: false, + description: `Document field path to target.`, + }, + { + name: 'url', + type: 'string', + required: false, + description: `URL of the Sanity documentation page to read.`, + }, + ], + }, + { + name: 'sanitymcp_search_docs', + description: `Search Sanity documentation by keyword query.`, + params: [ + { + name: 'query', + type: 'string', + required: true, + description: `GROQ query string to execute.`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of items to return.`, + }, + ], + }, + { + name: 'sanitymcp_semantic_search', + description: `Perform a semantic similarity search against a Sanity embeddings index.`, + params: [ + { + name: 'indexName', + type: 'string', + required: true, + description: `Name of the embeddings index to search.`, + }, + { + name: 'query', + type: 'string', + required: true, + description: `GROQ query string to execute.`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Maximum number of items to return.`, + }, + ], + }, + { + name: 'sanitymcp_transform_image', + description: `Apply an AI transformation to an image field in a Sanity document.`, + params: [ + { + name: 'documentId', + type: 'string', + required: true, + description: `Sanity document ID (e.g. drafts.abc123 for drafts, or bare ID for published).`, + }, + { + name: 'imagePath', + type: 'string', + required: true, + description: `Path to the image field within the document.`, + }, + { + name: 'instruction', + type: 'string', + required: true, + description: `Natural language instruction for the image transformation.`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + { + name: 'workspaceName', + type: 'string', + required: false, + description: `Sanity workspace name. Defaults to the default workspace.`, + }, + ], + }, + { + name: 'sanitymcp_unpublish_documents', + description: `Unpublish one or more documents to revert them to draft state.`, + params: [ + { + name: 'ids', + type: 'array', + required: true, + description: `IDs of the documents to unpublish (published document IDs only)`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_update_dataset', + description: `Update the access control mode or description of an existing Sanity dataset.`, + params: [ + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'aclMode', + type: 'string', + required: false, + description: `Dataset access control mode: public or private.`, + }, + { + name: 'description', + type: 'string', + required: false, + description: `Human-readable description.`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_version_discard', + description: `Discard document versions associated with a release.`, + params: [ + { + name: 'ids', + type: 'array', + required: true, + description: `Document IDs to discard from the release`, + }, + { + name: 'releaseId', + type: 'string', + required: true, + description: `ID of the release to target.`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_version_replace_document', + description: `Replace a versioned document with the content of a source document.`, + params: [ + { name: 'id', type: 'string', required: true, description: `Sanity document ID.` }, + { + name: 'releaseId', + type: 'string', + required: true, + description: `ID of the release to target.`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'sourceDocumentId', + type: 'string', + required: true, + description: `ID of the source document to replace from.`, + }, + { + name: 'type', + type: 'string', + required: true, + description: `Must be version.replace for this operation.`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_version_unpublish_document', + description: `Unpublish a versioned document from a release.`, + params: [ + { name: 'id', type: 'string', required: true, description: `Sanity document ID.` }, + { + name: 'releaseId', + type: 'string', + required: true, + description: `ID of the release to target.`, + }, + { + name: 'resource', + type: 'object', + required: true, + description: `Resource information indicating which project ID and dataset to target`, + }, + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, + { + name: 'sanitymcp_whoami', + description: `Get the currently authenticated Sanity user profile.`, + params: [ + { + name: 'intent', + type: 'string', + required: false, + description: `Brief description of what you are trying to accomplish.`, + }, + ], + }, +] From fdb174638d0d2483be07c287e8c3e4b236ab6a9e Mon Sep 17 00:00:00 2001 From: Pranesh Date: Wed, 27 May 2026 14:21:35 +0530 Subject: [PATCH 10/15] add setup templates and screenshots for AirOps, Salesloft, and Gainsight connectors --- .../authentication/token-management-0.svg | 2 +- .../agentkit/mcp/configure-mcp-server-0.svg | 2 +- .../agentkit/mcp/configure-mcp-server-1.svg | 2 +- .../agentkit/mcp/configure-mcp-server-2.svg | 2 +- public/d2/docs/agentkit/openclaw-0.svg | 2 +- public/d2/docs/agentkit/overview-0.svg | 2 +- .../d2/docs/agentkit/user-verification-0.svg | 2 +- .../implement-webhooks-0.svg | 2 +- .../interceptors/auth-flow-interceptors-0.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-0.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-1.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-2.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-3.svg | 2 +- .../docs/authenticate/mcp/auth-patterns-4.svg | 2 +- .../docs/authenticate/mcp/custom-auth-0.svg | 2 +- .../mcp/expressjs-quickstart-0.svg | 2 +- .../mcp/fastapi-fastmcp-quickstart-0.svg | 2 +- .../authenticate/mcp/fastmcp-quickstart-0.svg | 2 +- .../authenticate/mcp/intro-to-mcp-auth-0.svg | 2 +- .../authenticate/mcp/intro-to-mcp-auth-1.svg | 2 +- .../authenticate/mcp/intro-to-mcp-auth-2.svg | 2 +- .../d2/docs/authenticate/mcp/overview-0.svg | 2 +- .../d2/docs/authenticate/mcp/overview-1.svg | 2 +- .../d2/docs/authenticate/mcp/overview-2.svg | 2 +- .../d2/docs/authenticate/mcp/overview-3.svg | 2 +- .../mcp/topologies/agent-mcp-0.svg | 2 +- .../mcp/topologies/human-mcp-0.svg | 2 +- .../authenticate/mcp/topologies/mcp-api-0.svg | 2 +- .../authenticate/mcp/topologies/mcp-api-1.svg | 2 +- .../authenticate/mcp/topologies/mcp-api-2.svg | 2 +- .../tools/use-scalekit-credentials-0.svg | 2 +- .../guides/group-based-role-assignment-0.svg | 2 +- public/d2/docs/fsa/guides/manage-users-0.svg | 2 +- .../d2/docs/fsa/guides/user-invitations-0.svg | 2 +- .../integrations/auth-systems/firebase-0.svg | 2 +- .../integrations/auth-systems/firebase-1.svg | 2 +- .../guides/sso/sso-migration-strategy-0.svg | 2 +- .../guides/sso/sso-migration-strategy-1.svg | 2 +- .../docs/mcp/auth-methods/custom-auth-0.svg | 2 +- .../d2/docs/mcp/auth-methods/enterprise-0.svg | 2 +- public/d2/docs/passwordless/oidc-0.svg | 2 +- public/d2/docs/sso/guides/idp-init-sso-0.svg | 2 +- public/d2/docs/sso/guides/idp-init-sso-1.svg | 2 +- .../airopsmcp/create-api-key.png | Bin 0 -> 76345 bytes .../gainsight/create-api-key.png | Bin 0 -> 84916 bytes .../salesloft/create-api-key.png | Bin 0 -> 61872 bytes .../salesloft/create-oauth-app.png | Bin 0 -> 71550 bytes .../agent-connectors/_setup-airopsmcp.mdx | 67 ++++++++++++++++ .../agent-connectors/_setup-gainsight.mdx | 73 ++++++++++++++++++ .../agent-connectors/_setup-salesloft.mdx | 71 +++++++++++++++++ .../templates/agent-connectors/index.ts | 3 + .../docs/agentkit/connectors/airopsmcp.mdx | 14 +++- .../docs/agentkit/connectors/gainsight.mdx | 14 +++- .../docs/agentkit/connectors/salesloft.mdx | 14 +++- 54 files changed, 296 insertions(+), 46 deletions(-) create mode 100644 src/assets/docs/agent-connectors/airopsmcp/create-api-key.png create mode 100644 src/assets/docs/agent-connectors/gainsight/create-api-key.png create mode 100644 src/assets/docs/agent-connectors/salesloft/create-api-key.png create mode 100644 src/assets/docs/agent-connectors/salesloft/create-oauth-app.png create mode 100644 src/components/templates/agent-connectors/_setup-airopsmcp.mdx create mode 100644 src/components/templates/agent-connectors/_setup-gainsight.mdx create mode 100644 src/components/templates/agent-connectors/_setup-salesloft.mdx diff --git a/public/d2/docs/agentkit/authentication/token-management-0.svg b/public/d2/docs/agentkit/authentication/token-management-0.svg index e658be0fa..36ba4c950 100644 --- a/public/d2/docs/agentkit/authentication/token-management-0.svg +++ b/public/d2/docs/agentkit/authentication/token-management-0.svg @@ -1,4 +1,4 @@ - + .d2-4093886206 .fill-N1{fill:#0A0F25;} + .d2-4093886206 .fill-N2{fill:#676C7E;} + .d2-4093886206 .fill-N3{fill:#9499AB;} + .d2-4093886206 .fill-N4{fill:#CFD2DD;} + .d2-4093886206 .fill-N5{fill:#DEE1EB;} + .d2-4093886206 .fill-N6{fill:#EEF1F8;} + .d2-4093886206 .fill-N7{fill:#FFFFFF;} + .d2-4093886206 .fill-B1{fill:#0A0F25;} + .d2-4093886206 .fill-B2{fill:#676C7E;} + .d2-4093886206 .fill-B3{fill:#9499AB;} + .d2-4093886206 .fill-B4{fill:#CFD2DD;} + .d2-4093886206 .fill-B5{fill:#DEE1EB;} + .d2-4093886206 .fill-B6{fill:#EEF1F8;} + .d2-4093886206 .fill-AA2{fill:#676C7E;} + .d2-4093886206 .fill-AA4{fill:#CFD2DD;} + .d2-4093886206 .fill-AA5{fill:#DEE1EB;} + .d2-4093886206 .fill-AB4{fill:#CFD2DD;} + .d2-4093886206 .fill-AB5{fill:#DEE1EB;} + .d2-4093886206 .stroke-N1{stroke:#0A0F25;} + .d2-4093886206 .stroke-N2{stroke:#676C7E;} + .d2-4093886206 .stroke-N3{stroke:#9499AB;} + .d2-4093886206 .stroke-N4{stroke:#CFD2DD;} + .d2-4093886206 .stroke-N5{stroke:#DEE1EB;} + .d2-4093886206 .stroke-N6{stroke:#EEF1F8;} + .d2-4093886206 .stroke-N7{stroke:#FFFFFF;} + .d2-4093886206 .stroke-B1{stroke:#0A0F25;} + .d2-4093886206 .stroke-B2{stroke:#676C7E;} + .d2-4093886206 .stroke-B3{stroke:#9499AB;} + .d2-4093886206 .stroke-B4{stroke:#CFD2DD;} + .d2-4093886206 .stroke-B5{stroke:#DEE1EB;} + .d2-4093886206 .stroke-B6{stroke:#EEF1F8;} + .d2-4093886206 .stroke-AA2{stroke:#676C7E;} + .d2-4093886206 .stroke-AA4{stroke:#CFD2DD;} + .d2-4093886206 .stroke-AA5{stroke:#DEE1EB;} + .d2-4093886206 .stroke-AB4{stroke:#CFD2DD;} + .d2-4093886206 .stroke-AB5{stroke:#DEE1EB;} + .d2-4093886206 .background-color-N1{background-color:#0A0F25;} + .d2-4093886206 .background-color-N2{background-color:#676C7E;} + .d2-4093886206 .background-color-N3{background-color:#9499AB;} + .d2-4093886206 .background-color-N4{background-color:#CFD2DD;} + .d2-4093886206 .background-color-N5{background-color:#DEE1EB;} + .d2-4093886206 .background-color-N6{background-color:#EEF1F8;} + .d2-4093886206 .background-color-N7{background-color:#FFFFFF;} + .d2-4093886206 .background-color-B1{background-color:#0A0F25;} + .d2-4093886206 .background-color-B2{background-color:#676C7E;} + .d2-4093886206 .background-color-B3{background-color:#9499AB;} + .d2-4093886206 .background-color-B4{background-color:#CFD2DD;} + .d2-4093886206 .background-color-B5{background-color:#DEE1EB;} + .d2-4093886206 .background-color-B6{background-color:#EEF1F8;} + .d2-4093886206 .background-color-AA2{background-color:#676C7E;} + .d2-4093886206 .background-color-AA4{background-color:#CFD2DD;} + .d2-4093886206 .background-color-AA5{background-color:#DEE1EB;} + .d2-4093886206 .background-color-AB4{background-color:#CFD2DD;} + .d2-4093886206 .background-color-AB5{background-color:#DEE1EB;} + .d2-4093886206 .color-N1{color:#0A0F25;} + .d2-4093886206 .color-N2{color:#676C7E;} + .d2-4093886206 .color-N3{color:#9499AB;} + .d2-4093886206 .color-N4{color:#CFD2DD;} + .d2-4093886206 .color-N5{color:#DEE1EB;} + .d2-4093886206 .color-N6{color:#EEF1F8;} + .d2-4093886206 .color-N7{color:#FFFFFF;} + .d2-4093886206 .color-B1{color:#0A0F25;} + .d2-4093886206 .color-B2{color:#676C7E;} + .d2-4093886206 .color-B3{color:#9499AB;} + .d2-4093886206 .color-B4{color:#CFD2DD;} + .d2-4093886206 .color-B5{color:#DEE1EB;} + .d2-4093886206 .color-B6{color:#EEF1F8;} + .d2-4093886206 .color-AA2{color:#676C7E;} + .d2-4093886206 .color-AA4{color:#CFD2DD;} + .d2-4093886206 .color-AA5{color:#DEE1EB;} + .d2-4093886206 .color-AB4{color:#CFD2DD;} + .d2-4093886206 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-4093886206);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-4093886206);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-4093886206);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-4093886206);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-4093886206);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-4093886206);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-4093886206);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-4093886206);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-4093886206);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-4093886206);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-4093886206);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-4093886206);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-4093886206);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-4093886206);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-4093886206);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-4093886206);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-4093886206);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-4093886206);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}@media screen and (prefers-color-scheme:dark){ + .d2-4093886206 .fill-N1{fill:#0A0F25;} + .d2-4093886206 .fill-N2{fill:#676C7E;} + .d2-4093886206 .fill-N3{fill:#9499AB;} + .d2-4093886206 .fill-N4{fill:#CFD2DD;} + .d2-4093886206 .fill-N5{fill:#DEE1EB;} + .d2-4093886206 .fill-N6{fill:#EEF1F8;} + .d2-4093886206 .fill-N7{fill:#FFFFFF;} + .d2-4093886206 .fill-B1{fill:#0A0F25;} + .d2-4093886206 .fill-B2{fill:#676C7E;} + .d2-4093886206 .fill-B3{fill:#9499AB;} + .d2-4093886206 .fill-B4{fill:#CFD2DD;} + .d2-4093886206 .fill-B5{fill:#DEE1EB;} + .d2-4093886206 .fill-B6{fill:#EEF1F8;} + .d2-4093886206 .fill-AA2{fill:#676C7E;} + .d2-4093886206 .fill-AA4{fill:#CFD2DD;} + .d2-4093886206 .fill-AA5{fill:#DEE1EB;} + .d2-4093886206 .fill-AB4{fill:#CFD2DD;} + .d2-4093886206 .fill-AB5{fill:#DEE1EB;} + .d2-4093886206 .stroke-N1{stroke:#0A0F25;} + .d2-4093886206 .stroke-N2{stroke:#676C7E;} + .d2-4093886206 .stroke-N3{stroke:#9499AB;} + .d2-4093886206 .stroke-N4{stroke:#CFD2DD;} + .d2-4093886206 .stroke-N5{stroke:#DEE1EB;} + .d2-4093886206 .stroke-N6{stroke:#EEF1F8;} + .d2-4093886206 .stroke-N7{stroke:#FFFFFF;} + .d2-4093886206 .stroke-B1{stroke:#0A0F25;} + .d2-4093886206 .stroke-B2{stroke:#676C7E;} + .d2-4093886206 .stroke-B3{stroke:#9499AB;} + .d2-4093886206 .stroke-B4{stroke:#CFD2DD;} + .d2-4093886206 .stroke-B5{stroke:#DEE1EB;} + .d2-4093886206 .stroke-B6{stroke:#EEF1F8;} + .d2-4093886206 .stroke-AA2{stroke:#676C7E;} + .d2-4093886206 .stroke-AA4{stroke:#CFD2DD;} + .d2-4093886206 .stroke-AA5{stroke:#DEE1EB;} + .d2-4093886206 .stroke-AB4{stroke:#CFD2DD;} + .d2-4093886206 .stroke-AB5{stroke:#DEE1EB;} + .d2-4093886206 .background-color-N1{background-color:#0A0F25;} + .d2-4093886206 .background-color-N2{background-color:#676C7E;} + .d2-4093886206 .background-color-N3{background-color:#9499AB;} + .d2-4093886206 .background-color-N4{background-color:#CFD2DD;} + .d2-4093886206 .background-color-N5{background-color:#DEE1EB;} + .d2-4093886206 .background-color-N6{background-color:#EEF1F8;} + .d2-4093886206 .background-color-N7{background-color:#FFFFFF;} + .d2-4093886206 .background-color-B1{background-color:#0A0F25;} + .d2-4093886206 .background-color-B2{background-color:#676C7E;} + .d2-4093886206 .background-color-B3{background-color:#9499AB;} + .d2-4093886206 .background-color-B4{background-color:#CFD2DD;} + .d2-4093886206 .background-color-B5{background-color:#DEE1EB;} + .d2-4093886206 .background-color-B6{background-color:#EEF1F8;} + .d2-4093886206 .background-color-AA2{background-color:#676C7E;} + .d2-4093886206 .background-color-AA4{background-color:#CFD2DD;} + .d2-4093886206 .background-color-AA5{background-color:#DEE1EB;} + .d2-4093886206 .background-color-AB4{background-color:#CFD2DD;} + .d2-4093886206 .background-color-AB5{background-color:#DEE1EB;} + .d2-4093886206 .color-N1{color:#0A0F25;} + .d2-4093886206 .color-N2{color:#676C7E;} + .d2-4093886206 .color-N3{color:#9499AB;} + .d2-4093886206 .color-N4{color:#CFD2DD;} + .d2-4093886206 .color-N5{color:#DEE1EB;} + .d2-4093886206 .color-N6{color:#EEF1F8;} + .d2-4093886206 .color-N7{color:#FFFFFF;} + .d2-4093886206 .color-B1{color:#0A0F25;} + .d2-4093886206 .color-B2{color:#676C7E;} + .d2-4093886206 .color-B3{color:#9499AB;} + .d2-4093886206 .color-B4{color:#CFD2DD;} + .d2-4093886206 .color-B5{color:#DEE1EB;} + .d2-4093886206 .color-B6{color:#EEF1F8;} + .d2-4093886206 .color-AA2{color:#676C7E;} + .d2-4093886206 .color-AA4{color:#CFD2DD;} + .d2-4093886206 .color-AA5{color:#DEE1EB;} + .d2-4093886206 .color-AB4{color:#CFD2DD;} + .d2-4093886206 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-4093886206);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-4093886206);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-4093886206);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-4093886206);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-4093886206);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-4093886206);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-4093886206);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-4093886206);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-4093886206);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-4093886206);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-4093886206);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-4093886206);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-4093886206);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-4093886206);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-4093886206);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-4093886206);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-4093886206);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-4093886206);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}}]]> - + - + - + -Your B2B appHosted widgets URL<SCALEKIT_ENVIRONMENT_URL>/ui/Authentication widgets- Signup- LoginUser widgets- User profile- User securityOrganization widgets- Organization settings- Member management- SSO configuration- SCIM configuration- Session policy Redirect - +Your B2B appHosted widgets URL<SCALEKIT_ENVIRONMENT_URL>/ui/Authentication widgets- Signup- LoginUser widgets- User profile- User securityOrganization widgets- Organization settings- Member management- SSO configuration- SCIM configuration- Session policy- Domain verification Redirect + diff --git a/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg b/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg index 2c7def278..cb1f9706e 100644 --- a/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg +++ b/public/d2/docs/authenticate/mcp/xmcp-quickstart-0.svg @@ -1,16 +1,16 @@ - + .d2-839314708 .fill-N1{fill:#0A0F25;} + .d2-839314708 .fill-N2{fill:#676C7E;} + .d2-839314708 .fill-N3{fill:#9499AB;} + .d2-839314708 .fill-N4{fill:#CFD2DD;} + .d2-839314708 .fill-N5{fill:#DEE1EB;} + .d2-839314708 .fill-N6{fill:#EEF1F8;} + .d2-839314708 .fill-N7{fill:#FFFFFF;} + .d2-839314708 .fill-B1{fill:#0A0F25;} + .d2-839314708 .fill-B2{fill:#676C7E;} + .d2-839314708 .fill-B3{fill:#9499AB;} + .d2-839314708 .fill-B4{fill:#CFD2DD;} + .d2-839314708 .fill-B5{fill:#DEE1EB;} + .d2-839314708 .fill-B6{fill:#EEF1F8;} + .d2-839314708 .fill-AA2{fill:#676C7E;} + .d2-839314708 .fill-AA4{fill:#CFD2DD;} + .d2-839314708 .fill-AA5{fill:#DEE1EB;} + .d2-839314708 .fill-AB4{fill:#CFD2DD;} + .d2-839314708 .fill-AB5{fill:#DEE1EB;} + .d2-839314708 .stroke-N1{stroke:#0A0F25;} + .d2-839314708 .stroke-N2{stroke:#676C7E;} + .d2-839314708 .stroke-N3{stroke:#9499AB;} + .d2-839314708 .stroke-N4{stroke:#CFD2DD;} + .d2-839314708 .stroke-N5{stroke:#DEE1EB;} + .d2-839314708 .stroke-N6{stroke:#EEF1F8;} + .d2-839314708 .stroke-N7{stroke:#FFFFFF;} + .d2-839314708 .stroke-B1{stroke:#0A0F25;} + .d2-839314708 .stroke-B2{stroke:#676C7E;} + .d2-839314708 .stroke-B3{stroke:#9499AB;} + .d2-839314708 .stroke-B4{stroke:#CFD2DD;} + .d2-839314708 .stroke-B5{stroke:#DEE1EB;} + .d2-839314708 .stroke-B6{stroke:#EEF1F8;} + .d2-839314708 .stroke-AA2{stroke:#676C7E;} + .d2-839314708 .stroke-AA4{stroke:#CFD2DD;} + .d2-839314708 .stroke-AA5{stroke:#DEE1EB;} + .d2-839314708 .stroke-AB4{stroke:#CFD2DD;} + .d2-839314708 .stroke-AB5{stroke:#DEE1EB;} + .d2-839314708 .background-color-N1{background-color:#0A0F25;} + .d2-839314708 .background-color-N2{background-color:#676C7E;} + .d2-839314708 .background-color-N3{background-color:#9499AB;} + .d2-839314708 .background-color-N4{background-color:#CFD2DD;} + .d2-839314708 .background-color-N5{background-color:#DEE1EB;} + .d2-839314708 .background-color-N6{background-color:#EEF1F8;} + .d2-839314708 .background-color-N7{background-color:#FFFFFF;} + .d2-839314708 .background-color-B1{background-color:#0A0F25;} + .d2-839314708 .background-color-B2{background-color:#676C7E;} + .d2-839314708 .background-color-B3{background-color:#9499AB;} + .d2-839314708 .background-color-B4{background-color:#CFD2DD;} + .d2-839314708 .background-color-B5{background-color:#DEE1EB;} + .d2-839314708 .background-color-B6{background-color:#EEF1F8;} + .d2-839314708 .background-color-AA2{background-color:#676C7E;} + .d2-839314708 .background-color-AA4{background-color:#CFD2DD;} + .d2-839314708 .background-color-AA5{background-color:#DEE1EB;} + .d2-839314708 .background-color-AB4{background-color:#CFD2DD;} + .d2-839314708 .background-color-AB5{background-color:#DEE1EB;} + .d2-839314708 .color-N1{color:#0A0F25;} + .d2-839314708 .color-N2{color:#676C7E;} + .d2-839314708 .color-N3{color:#9499AB;} + .d2-839314708 .color-N4{color:#CFD2DD;} + .d2-839314708 .color-N5{color:#DEE1EB;} + .d2-839314708 .color-N6{color:#EEF1F8;} + .d2-839314708 .color-N7{color:#FFFFFF;} + .d2-839314708 .color-B1{color:#0A0F25;} + .d2-839314708 .color-B2{color:#676C7E;} + .d2-839314708 .color-B3{color:#9499AB;} + .d2-839314708 .color-B4{color:#CFD2DD;} + .d2-839314708 .color-B5{color:#DEE1EB;} + .d2-839314708 .color-B6{color:#EEF1F8;} + .d2-839314708 .color-AA2{color:#676C7E;} + .d2-839314708 .color-AA4{color:#CFD2DD;} + .d2-839314708 .color-AA5{color:#DEE1EB;} + .d2-839314708 .color-AB4{color:#CFD2DD;} + .d2-839314708 .color-AB5{color:#DEE1EB;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0A0F25;--color-border-muted:#676C7E;--color-neutral-muted:#EEF1F8;--color-accent-fg:#676C7E;--color-accent-emphasis:#676C7E;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-839314708);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-dark-d2-839314708);mix-blend-mode:overlay}.sketch-overlay-B3{fill:url(#streaks-normal-d2-839314708);mix-blend-mode:color-burn}.sketch-overlay-B4{fill:url(#streaks-normal-d2-839314708);mix-blend-mode:color-burn}.sketch-overlay-B5{fill:url(#streaks-bright-d2-839314708);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-839314708);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-839314708);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-normal-d2-839314708);mix-blend-mode:color-burn}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-839314708);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-normal-d2-839314708);mix-blend-mode:color-burn}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-839314708);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-839314708);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-839314708);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-839314708);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-839314708);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-839314708);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-839314708);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-839314708);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]> - + - + - + -xmcp MCP with ScalekitMCP ClientMCP ServerScalekit POST /mcp 401 + WWW-Authenticate header GET /.well-known/oauth-protected-resource Resource metadata (authorization_servers) OAuth Authorization Code + PKCE Issue Bearer token POST /mcp with Bearer token Verify token via JWKS Tool response +xmcp MCP with ScalekitMCP ClientMCP ServerScalekit POST /mcp 401 + WWW-Authenticate header GET /.well-known/oauth-protected-resource Resource metadata (authorization_servers) OAuth Authorization Code + PKCE Issue Bearer token POST /mcp with Bearer token Verify token via JWKS Tool response