{
  "schemaVersion": 1,
  "methodology": "https://ionbin.com/interfaces/methodology/#evaluations",
  "evaluation": {
    "id": "supabase-mcp",
    "testedOn": "2026-10-18",
    "coverage": "remote-boundary",
    "summary": "Supabase required authentication on both tested configurations. The read-only database variant advertised fewer scopes, but no SQL or project permission was tested.",
    "identity": {
      "version": "Remote deployment version not disclosed by the observed responses",
      "target": "https://mcp.supabase.com/mcp",
      "integrity": "HTTPS certificate verification enabled. Public resource-metadata body SHA-256: 8af236d8e6652ae5c8df672a7ba9379f1ee259587961a31c3ef3d7c0520737be. This fingerprints the observed metadata, not the deployed server implementation."
    },
    "environment": [
      "Windows 11 build 26200; Python 3.12.10 urllib; OpenSSL 3.0.16.",
      "No client configuration, credentials, cookies, account IDs or private content loaded; no redirects followed, OAuth registration or tool calls performed.",
      "Observed 2026-10-19T00:47:11.082043+00:00 through 2026-10-19T00:47:52.509957+00:00 UTC.",
      "One request per listed check; 20-second timeout and 64-KiB response cap. Initial sandbox DNS failures were retained separately and resolved with approved network access; they are not endpoint failures."
    ],
    "checks": [
      {
        "id": "supabase-mcp-initialize",
        "name": "Credential-free initialization",
        "method": "POST https://mcp.supabase.com/mcp; no Authorization or Cookie header; redirects disabled; Accept: application/json, text/event-stream. Content-Type: application/json; MCP-Protocol-Version: 2025-03-26; body: {\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2025-03-26\",\"capabilities\":{},\"clientInfo\":{\"name\":\"IonBin-account-free-evaluation\",\"version\":\"1.0.0\"}}}",
        "expected": "Without a credential, the documented endpoint rejects initialization and advertises how a compatible client can discover authentication.",
        "observed": "HTTP 401 at 2026-10-19T00:47:11.082043+00:00. WWW-Authenticate: Bearer; resource_metadata=https://mcp.supabase.com/.well-known/oauth-protected-resource/mcp. Parsed error indicator: No access token provided.",
        "outcome": "pass"
      },
      {
        "id": "supabase-mcp-resource-metadata",
        "name": "Public authentication discovery",
        "method": "GET https://mcp.supabase.com/.well-known/oauth-protected-resource/mcp; no Authorization or Cookie header; redirects disabled; Accept: application/json, text/event-stream.",
        "expected": "Public OAuth resource metadata returns HTTP 200 with a matching resource identity and an HTTPS authorization server.",
        "observed": "HTTP 200 at 2026-10-19T00:47:21.086335+00:00; Content-Type: application/json; charset=utf-8. Resource: https://mcp.supabase.com/mcp. 13 supported scopes: organizations:read, projects:read, projects:write, database:write, database:read, analytics:read, secrets:read, edge_functions:read, edge_functions:write, environment:read, environment:write, storage:read, storage:write. Authorization server: https://api.supabase.com. Bearer methods: header.",
        "outcome": "pass"
      },
      {
        "id": "supabase-mcp-readonly-initialize",
        "name": "Read-only variant: Credential-free initialization",
        "method": "POST https://mcp.supabase.com/mcp?read_only=true&features=database; no Authorization or Cookie header; redirects disabled; Accept: application/json, text/event-stream. Content-Type: application/json; MCP-Protocol-Version: 2025-03-26; body: {\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2025-03-26\",\"capabilities\":{},\"clientInfo\":{\"name\":\"IonBin-account-free-evaluation\",\"version\":\"1.0.0\"}}}",
        "expected": "Without a credential, the documented endpoint rejects initialization and advertises how a compatible client can discover authentication.",
        "observed": "HTTP 401 at 2026-10-19T00:47:24.673580+00:00. WWW-Authenticate: Bearer; resource_metadata=https://mcp.supabase.com/.well-known/oauth-protected-resource/mcp?read_only=true&features=database. Parsed error indicator: No access token provided.",
        "outcome": "pass"
      },
      {
        "id": "supabase-mcp-readonly-resource-metadata",
        "name": "Read-only variant: Public authentication discovery",
        "method": "GET https://mcp.supabase.com/.well-known/oauth-protected-resource/mcp?read_only=true&features=database; no Authorization or Cookie header; redirects disabled; Accept: application/json, text/event-stream.",
        "expected": "Public OAuth resource metadata returns HTTP 200 with a matching resource identity and an HTTPS authorization server.",
        "observed": "HTTP 200 at 2026-10-19T00:47:52.509957+00:00; Content-Type: application/json; charset=utf-8. Resource: https://mcp.supabase.com/mcp?read_only=true&features=database. 8 supported scopes: organizations:read, projects:read, database:read, analytics:read, secrets:read, edge_functions:read, environment:read, storage:read. Authorization server: https://api.supabase.com. Bearer methods: header.",
        "outcome": "pass"
      }
    ],
    "findings": [
      {
        "title": "Read-only configuration changes discovery",
        "basis": "observed",
        "severity": "informational",
        "detail": "Both the default endpoint and ?read_only=true&features=database returned 401. Default metadata advertised 13 scopes; the read-only variant advertised 8, all ending in :read, including secrets:read. Metadata alone does not establish actual token grants or SQL enforcement.",
        "practicalAdvice": "Combine project_ref, read_only=true and only needed feature groups. Inspect the token permissions as well as the connection URL before reading sensitive data."
      },
      {
        "title": "Developer access is broader than an application user",
        "basis": "documented",
        "severity": "informational",
        "detail": "Supabase describes this MCP as a developer tool, warns against giving it to end users, and recommends project scoping, read-only mode and reviewed tool calls. SQL-result warnings are not a foolproof prompt-injection defense.",
        "practicalAdvice": "Use a designated development project and narrow queries. Treat returned rows as evidence, never as instructions for another tool call."
      }
    ],
    "caveats": [
      "An unscoped connection can reach all projects available to the authorized account. No project identifier was supplied in this account-free test.",
      "Read-only access still permits disclosure. Keep secrets and unrelated customer rows out of prompts and reports.",
      "The skip_elicitations option changes confirmation behavior for named tools; it does not remove permissions, charges or read-only restrictions."
    ],
    "notTested": [
      "OAuth or scoped PAT authentication, project isolation, row-level security and credential revocation.",
      "Actual SQL read-only enforcement, denied writes, migrations, cost confirmation and prompt-injection resistance.",
      "Local/self-hosted variants and every authenticated database example.",
      "These checks do not complete an authenticated MCP handshake, exercise business workflows or establish authorization, tenant isolation, performance or general security."
    ],
    "sources": [
      {
        "label": "Official configuration, scopes and security guidance",
        "url": "https://supabase.com/docs/guides/ai-tools/mcp"
      },
      {
        "label": "Official implementation repository",
        "url": "https://github.com/supabase/mcp"
      }
    ],
    "reportUrl": "/interface-evaluations/supabase-mcp.json"
  }
}
