{"apiVersion":"v1","directorySlug":"secure-flows-mcp-ef12d78284","title":"secureFlows","description":"Secure user data for no-code apps: encrypted storage, tenant isolation, hosted login, and session management — without building auth or encryption yourself.","pageUrl":"https://www.mcpbundles.com/skills/secure-flows-mcp-ef12d78284","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://www.secure-flows.com/mcp","hostedMcpUrl":null,"toolCount":18,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"com.secure-flows/secure-flows-mcp-ef12d78284","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"get_sessions","description":"Returns the decrypted session payload for the authenticated internal session token.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection"],"properties":{"auth":{"type":"object","required":["sessionToken"],"properties":{"sessionToken":{"type":"string"}}},"body":{},"query":{"type":"object","properties":{}},"params":{"type":"object","properties":{}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"Get the current session payload","logicalName":"get_sessions","displayName":"Get the current session payload","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"post_sessions","description":"Verifies **Firebase** ID token, creates a session for **`workspaceName`**, stores serialized\n**`payload`** (defaults to `{}` when omitted), and returns **`sessionToken`** (JWT; subject = internal session id).\nDefault server-side TTL is **1 hour** (implementation detail).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection","body"],"properties":{"auth":{"type":"object","required":["firebaseToken"],"properties":{"firebaseToken":{"type":"string"}}},"body":{"type":"object","required":["workspaceName"],"properties":{"app_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"payload":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"workspaceName":{"type":"string"}}},"query":{"type":"object","properties":{}},"params":{"type":"object","properties":{}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"Create a new session","logicalName":"post_sessions","displayName":"Create a new session","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_sessions_identity","description":"Returns the workspace end-user's **`userId`** and **email** for the authenticated session\ntoken. Does not return Firebase UID or session payload.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection"],"properties":{"auth":{"type":"object","required":["sessionToken"],"properties":{"sessionToken":{"type":"string"}}},"body":{},"query":{"type":"object","properties":{}},"params":{"type":"object","properties":{}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"Get signed-in user's stable id and email (app UI, backend correlation)","logicalName":"get_sessions_identity","displayName":"Get signed-in user's stable id and email (app UI, backend correlation)","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"post_sessions_get_or_create","description":"Verifies **Firebase** ID token. If an **active** session already exists for\n**`(workspaceName, Firebase UID, app_id)`**, returns a new **`sessionToken`** JWT for the **most\nrecently created** matching row (touches activity; does not create a duplicate session). The request\n**`payload` is ignored on reuse** — it is applied only when a new session row is created. Prefer a\ndedicated `app_id` per integration surface, or revoke old sessions, if you need a fresh payload.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection","body"],"properties":{"auth":{"type":"object","required":["firebaseToken"],"properties":{"firebaseToken":{"type":"string"}}},"body":{"type":"object","required":["workspaceName"],"properties":{"app_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"payload":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"workspaceName":{"type":"string"}}},"query":{"type":"object","properties":{}},"params":{"type":"object","properties":{}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"Reuse active session or create one","logicalName":"post_sessions_get_or_create","displayName":"Reuse active session or create one","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"post_sessions_renew_session_token","description":"Verifies **Firebase** ID token. Parses **`sessionToken`** path segment as an internal SESSION JWT **without\nenforcing JWT expiry** (signature and `tokenType=SESSION` are still validated). Loads the\nsession by id from the token subject; the Firebase UID must match the session owner.\nIncrements **`tokenRevision`** on the server so **previous session JWTs** (same session id,\nolder revision) are no longer accepted for `GET/POST/DELETE /sessions/...`.\nReturns a **new `sessionToken`** (with the new `t","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection","params"],"properties":{"auth":{"type":"object","required":["firebaseToken"],"properties":{"firebaseToken":{"type":"string"}}},"body":{},"query":{"type":"object","properties":{}},"params":{"type":"object","required":["sessionToken"],"properties":{"sessionToken":{"type":"string"}}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"Renew session JWT (replace expired token)","logicalName":"post_sessions_renew_session_token","displayName":"Renew session JWT (replace expired token)","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"post_sessions_set_key","description":"Sets a key in the encrypted session payload and returns the updated decrypted payload. If the JSON body is `{ \"value\": <x> }`, the server unwraps it and stores `<x>` directly.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection","params","body"],"properties":{"auth":{"type":"object","required":["sessionToken"],"properties":{"sessionToken":{"type":"string"}}},"body":{"anyOf":[{"type":"object","required":["value"],"properties":{"value":{}}},{"type":"string"},{"type":"number"},{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"boolean"},{"type":"array","items":{}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{}]},"query":{"type":"object","properties":{}},"params":{"type":"object","required":["key"],"properties":{"key":{"type":"string"}}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"Set a value inside the session payload","logicalName":"post_sessions_set_key","displayName":"Set a value inside the session payload","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_sessions_get_key","description":"Retrieves the decrypted payload value for `key`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection","params"],"properties":{"auth":{"type":"object","required":["sessionToken"],"properties":{"sessionToken":{"type":"string"}}},"body":{},"query":{"type":"object","properties":{}},"params":{"type":"object","required":["key"],"properties":{"key":{"type":"string"}}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"Get a single value from the session payload","logicalName":"get_sessions_get_key","displayName":"Get a single value from the session payload","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_sessions_delete_key","description":"Removes `key` from the session payload and returns `true` if the key existed.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection","params"],"properties":{"auth":{"type":"object","required":["sessionToken"],"properties":{"sessionToken":{"type":"string"}}},"body":{},"query":{"type":"object","properties":{}},"params":{"type":"object","required":["key"],"properties":{"key":{"type":"string"}}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"Delete a key from the session payload","logicalName":"delete_sessions_delete_key","displayName":"Delete a key from the session payload","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"post_sessions_revoke","description":"Revokes the session referenced by the internal SESSION Bearer token. This endpoint is useful for automation clients that only hold a session token and want to revoke it cleanly.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection"],"properties":{"auth":{"type":"object","required":["sessionToken"],"properties":{"sessionToken":{"type":"string"}}},"body":{},"query":{"type":"object","properties":{}},"params":{"type":"object","properties":{}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"Revoke the current session (by session token)","logicalName":"post_sessions_revoke","displayName":"Revoke the current session (by session token)","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"auth_session_callback","description":"**Browser redirect endpoint** used after hosted `/app/sessions/login`. No `Authorization` header.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection","query"],"properties":{"auth":{"type":"object","properties":{}},"body":{},"query":{"type":"object","required":["firebaseToken","client_redirect_uri","workspace_name","app_id"],"properties":{"state":{"type":"string"},"app_id":{"type":"string"},"payload":{"type":"string"},"ttl_seconds":{"type":"integer","maximum":604800,"minimum":0},"firebaseToken":{"type":"string"},"session_token":{"type":"string"},"workspace_name":{"type":"string"},"client_redirect_uri":{"type":"string","format":"uri"}}},"params":{"type":"object","properties":{}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"Session login callback (redirect)","logicalName":"auth_session_callback","displayName":"Session login callback (redirect)","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_auth_logout","description":"Browser-friendly logout endpoint for **cross-site** clients (e.g. apps running on `localhost`).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection","query"],"properties":{"auth":{"type":"object","properties":{}},"body":{},"query":{"type":"object","required":["session_token","redirect_uri"],"properties":{"redirect_uri":{"type":"string","format":"uri"},"session_token":{"type":"string"}}},"params":{"type":"object","properties":{}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"Log out (browser redirect helper; first-party cookie clearing)","logicalName":"get_auth_logout","displayName":"Log out (browser redirect helper; first-party cookie clearing)","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"post_auth_logout","description":"Logs out the current session **without revoking** it.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection"],"properties":{"auth":{"type":"object","required":["sessionToken"],"properties":{"sessionToken":{"type":"string"}}},"body":{},"query":{"type":"object","properties":{}},"params":{"type":"object","properties":{}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"Log out (invalidate sessionToken + revoke Firebase refresh tokens)","logicalName":"post_auth_logout","displayName":"Log out (invalidate sessionToken + revoke Firebase refresh tokens)","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_sessions_my","description":"Returns a page of sessions for the current user within the current workspace.\nSelf-service dashboard endpoint — requires workspace **`enableSelfService: true`**.\nPayload is included only for rows whose computed status is active.\nSort keys match the admin workspace session list; `pageSize` is clamped to 1–200 (default 20).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection","query"],"properties":{"auth":{"type":"object","required":["userToken"],"properties":{"userToken":{"type":"string"}}},"body":{},"query":{"type":"object","properties":{"q":{"type":"string"},"dir":{"enum":["asc","desc"],"type":"string"},"page":{"type":"integer","maximum":9007199254740991,"minimum":0},"sort":{"enum":["id","user","app","created","expires","status","lastActivity","updated"],"type":"string"},"app_id":{"type":"string"},"status":{"enum":["all","active","expired","revoked"],"type":"string"},"pageSize":{"type":"integer","maximum":200,"minimum":1}}},"params":{"type":"object","properties":{}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"List my sessions (paged, sortable, filterable)","logicalName":"get_sessions_my","displayName":"List my sessions (paged, sortable, filterable)","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"post_sessions_revoke_session_id","description":"Self-service dashboard endpoint. Revokes a session owned by the caller in the current workspace.\nRequires workspace **`enableSelfService: true`**.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection","params"],"properties":{"auth":{"type":"object","required":["userToken"],"properties":{"userToken":{"type":"string"}}},"body":{},"query":{"type":"object","properties":{}},"params":{"type":"object","required":["sessionId"],"properties":{"sessionId":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991}}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"Revoke a session owned by the current user","logicalName":"post_sessions_revoke_session_id","displayName":"Revoke a session owned by the current user","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_docs_search","description":"Embeds the query with Ollama (`nomic-embed-text`) and returns the closest public doc chunks\nfrom the environment's search index (pgvector).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["connection","query"],"properties":{"auth":{"type":"object","properties":{}},"body":{},"query":{"type":"object","required":["q"],"properties":{"q":{"type":"string"},"limit":{"type":"integer","maximum":20,"minimum":1}}},"params":{"type":"object","properties":{}},"connection":{"type":"object","required":["host"],"properties":{"host":{"type":"string","format":"uri"},"appId":{"type":"string"},"workspaceName":{"type":"string"}}}}},"title":"Semantic documentation search","logicalName":"get_docs_search","displayName":"Semantic documentation search","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"secureflows_build_login_url","description":"Builds a correct hosted-login redirect URL. Needs no secureFlows token — safe to call at app-scaffolding time,\nbefore any user session exists, which is the phase most secureFlows integration mistakes happen in.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["workspaceName","appId","redirectUri"],"properties":{"appId":{"type":"string"},"intent":{"enum":["fresh_login","renew_expired_token"],"type":"string","default":"fresh_login"},"origin":{"type":"string","format":"uri","default":"https://www.secure-flows.com"},"redirectUri":{"type":"string","format":"uri"},"expiredToken":{"type":"string"},"workspaceName":{"type":"string"}}},"title":"Build secureFlows hosted login URL","logicalName":"secureflows_build_login_url","displayName":"Build secureFlows hosted login URL","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"secureflows_build_logout_url","description":"Builds a correct redirect-logout URL and refuses to build one that violates the two documented logout anti-patterns:\na redirect_uri pointing at /callback (SPA callback handlers treat the tokenless return as a failed login and loop),\nand a redirect_uri that itself embeds session_token (silently renews the old session instead of signing out).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["sessionToken","postLogoutRedirectUri"],"properties":{"origin":{"type":"string","format":"uri","default":"https://www.secure-flows.com"},"sessionToken":{"type":"string"},"postLogoutRedirectUri":{"type":"string","format":"uri"}}},"title":"Build secureFlows redirect-logout URL","logicalName":"secureflows_build_logout_url","displayName":"Build secureFlows redirect-logout URL","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"secureflows_lint_integration","description":"Checks source you already generated against the secureFlows integration rules. Needs no secureFlows token; safe at\nscaffolding time. Pass every auth/session-related file in one call — some checks are evaluated across the whole set.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["files"],"properties":{"files":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}}},"title":"Static-scan generated code for secureFlows anti-patterns","logicalName":"secureflows_lint_integration","displayName":"Static-scan generated code for secureFlows anti-patterns","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=secureFlows&config=eyJ1cmwiOiAiaHR0cHM6Ly93d3cuc2VjdXJlLWZsb3dzLmNvbS9tY3AifQ%3D%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22secureFlows%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fwww.secure-flows.com%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22secureFlows%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fwww.secure-flows.com%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=secureFlows&connectorUrl=https%3A%2F%2Fwww.secure-flows.com%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"secureFlows\" --url \"https://www.secure-flows.com/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/secure-flows-mcp-ef12d78284","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/secure-flows-mcp-ef12d78284/tools/{tool}","mcpServerUrl":"https://www.secure-flows.com/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/secure-flows-mcp-ef12d78284?live=1"}