{"schemaVersion":"1.0","name":"io.github.sentryrelay/sentryrelay","serverName":"sentry-relay-mcp","title":"Sentry Relay MCP Server","description":"Out-of-Band 2FA, OTP, Magic-Link & Cloud KMS TOTP Authenticator Relay for Autonomous AI Agents and Headless Browsers.","version":"0.1.1","homepage":"https://sentryrelay.com","documentationUrl":"https://sentryrelay.com/docs/mcp","llmsTxtUrl":"https://sentryrelay.com/llms.txt","llmsFullTxtUrl":"https://sentryrelay.com/llms-full.txt","openApiSpecUrl":"https://sentryrelay.com/openapi.json","skillUrl":"https://sentryrelay.com/skills/sentryrelay/SKILL.md","repository":{"type":"git","url":"https://github.com/sentryrelay/sentryrelay","directory":"packages/mcp"},"remotes":[{"type":"streamable-http","url":"https://sentryrelay.com/api/mcp","authentication":{"type":"bearer","header":"Authorization","scheme":"Bearer","envVar":"SENTRY_RELAY_API_KEY","tokenPrefix":["sr_live_","sr_test_"]}}],"packages":[{"registryType":"npm","identifier":"@sentryrelay/mcp","version":"0.1.1","transport":{"type":"stdio","command":"npx","args":["-y","@sentryrelay/mcp"]},"environmentVariables":[{"name":"SENTRY_RELAY_API_KEY","description":"Sentry Relay API key (sr_live_... for production or sr_test_... for sandbox).","required":true,"isSecret":true}]}],"installCommands":{"claudeCode":"claude mcp add sentryrelay -e SENTRY_RELAY_API_KEY=sr_live_... -- npx -y @sentryrelay/mcp","agentSkill":"npx skills add https://sentryrelay.com/skills/sentryrelay/SKILL.md","cli":"npm install -g sentryrelay","typescriptSdk":"npm install @sentryrelay/sdk","pythonSdk":"pip install sentryrelay-sdk"},"tools":[{"name":"wait_for_verification_code","description":"Long-polls an Identity inbox until a fresh OTP code or magic link arrives and returns structured JSON ready for browser input.","inputSchema":{"type":"object","properties":{"identity":{"type":"string","description":"Identity ID or unique slug to monitor."},"channel":{"type":"string","enum":["email","sms"],"description":"Optional channel filter (email or sms)."},"sender":{"type":"string","description":"Optional sender substring filter (e.g. \"stripe.com\", \"github.com\", \"+12065550100\")."},"subject":{"type":"string","description":"Optional email subject substring filter."},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":45,"default":30,"description":"Long-polling timeout in seconds (1..45, default: 30)."},"sinceMs":{"type":"integer","description":"Epoch millisecond timestamp to search from (defaults to 15 seconds in the past)."}},"required":["identity"]}},{"name":"get_latest_verification_code","description":"Performs a non-blocking lookback check on an Identity timeline for a recently delivered OTP or magic link.","inputSchema":{"type":"object","properties":{"identity":{"type":"string","description":"Identity ID or unique slug."},"channel":{"type":"string","enum":["email","sms"],"description":"Optional channel filter (email or sms)."},"sender":{"type":"string","description":"Optional sender substring filter."},"lookbackSeconds":{"type":"integer","minimum":1,"maximum":300,"default":60,"description":"Seconds into the past to check for delivered codes (default: 60)."},"consume":{"type":"boolean","default":true,"description":"Whether to atomically consume the code (default: true)."}},"required":["identity"]}},{"name":"get_totp_code","description":"Generates a live RFC 6238 Authenticator (TOTP) code for a vaulted service secret, automatically waiting if the window is expiring (<4s).","inputSchema":{"type":"object","properties":{"identity":{"type":"string","description":"Identity ID or unique slug."},"secretId":{"type":"string","description":"ID of the vaulted TOTP service secret (e.g. \"github_ops\", \"aws_root\")."},"autoWaitFreshWindow":{"type":"boolean","default":true,"description":"Transparently wait if remaining code window is <4s to guarantee a fresh 26-30s code (default: true)."}},"required":["identity","secretId"]}},{"name":"list_identities","description":"Lists accessible Identities along with their assigned email address, SMS number, and TOTP secret IDs.","inputSchema":{"type":"object","properties":{"search":{"type":"string","description":"Optional substring to filter identities by name, email handle, or ID."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum number of identities to return (default: 50)."}}}},{"name":"create_identity","description":"Creates a new isolated Identity inbox for an autonomous workflow.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable label for the Identity inbox."},"emailHandle":{"type":"string","description":"Optional custom email prefix before @sentryrelay.com."},"fallbackEmail":{"type":"string","description":"Optional human fallback destination email address for non-auth messages."}},"required":["name"]}},{"name":"store_totp_secret","description":"Vaults an otpauth:// URI or Base32 TOTP secret under an Identity.","inputSchema":{"type":"object","properties":{"identity":{"type":"string","description":"Identity ID or unique slug."},"secretId":{"type":"string","description":"Unique identifier for this TOTP secret (e.g. \"github_ops\")."},"otpauthUriOrSecret":{"type":"string","description":"otpauth:// URI or raw Base32 secret string."},"issuer":{"type":"string","description":"Optional service issuer label (e.g. \"GitHub\", \"AWS\", \"Stripe\")."}},"required":["identity","secretId","otpauthUriOrSecret"]}}]}