Appearance
Security Controls v3.2
Last updated: July 22, 2026
Authentication
AI4Love uses a two-layer authentication model:
- Identity verification — Clerk (SOC 2 Type II) verifies the user's email via passwordless code flow.
- Session token — After identity verification, the backend issues an AI4Love JWT (24-hour expiry). This token governs all subsequent API access.
Access is invite-only. The user's email must exist in the organization's working base or the Admin Accounts table before they can sign in.
MCP Access Model
The MCP (Model Context Protocol) server lets AI assistants query supporter data conversationally. See the full MCP Access Model page for the complete tool inventory; the summary relevant to security posture:
- Per-organization credentials: Access is granted via OAuth token or a provisioned per-org API key — not tied to an individual's Airtable login.
- Timing-safe validation: Keys are compared using constant-time algorithms to prevent timing attacks.
- Transport-dependent session behavior: Streamable HTTP is stateless — every request independently revalidates the credential, so revocation takes effect on the next call. SSE connections hold a short-lived in-memory session that ends on disconnect or OAuth token expiry (max TTL 60 minutes).
- Organization isolation: Each request resolves to a specific org, which maps to a dedicated working base and credential set. Users in Org A cannot access Org B's data.
- Mostly read-only: 40 of 42 authenticated-tier MCP tools are read-behavior only. 2 narrowly gated tools can write — one to Pinecone (curated research, allowlisted curator orgs only), one to Airtable (organization-scoped campaign metadata). Neither touches supporter source data.
Query Safeguards
Individual tools apply their own response bounds (e.g., export_supporters defaults to 100 records per call). A fixed per-key request quota, daily retrieval cap, and automated anomaly detection are not currently enforced in application code across the MCP surface — we're stating that plainly rather than publishing numbers the code doesn't back up. Deployment-level rate limiting can be configured and verified as a contractual requirement where needed.
OAuth Connection Model
AI4Love connects to external platforms through Nango, an enterprise OAuth gateway.
| Platform | Auth Method | Scopes / Access |
|---|---|---|
| Blackbaud RE NXT | OAuth 2.0 (refresh token) | SKY API read access — constituents, gifts, actions, events |
| Mailchimp | API Key | Read access to member lists, campaigns, activity |
| Environics | OAuth 2.0 (client credentials) | Postal-code-level enrichment (PRIZM, WealthScapes) |
Your organization initiates each connection. AI4Love never connects without explicit staff authorization. All connections can be revoked instantly from the Integrations dashboard.
AI4Love Internal Access Controls
Access to your organization's data by AI4Love personnel is governed by the principle of least privilege.
- No standing access: AI4Love staff do not have persistent access to any organization's working base. Access is granted only when required for support, debugging, or onboarding — and only with your knowledge.
- Role-based access: Internal access is restricted to authorized personnel. Infrastructure credentials are scoped by function (e.g., deployment credentials cannot access Airtable data).
- Time-bound: Support access is granted for the duration of the issue and revoked upon resolution.
- Logged: All administrative actions (deployments, credential rotations, configuration changes) are logged in Vercel and Doppler audit trails.
Rate Limiting
| Scope | Limit |
|---|---|
| Global | 200 requests/minute |
| Auth routes | 10 requests/minute |
| API routes | 60 requests/minute |
| MCP | Tool-specific response bounds only; no fixed per-key application quota currently enforced (see MCP Access Model) |
Audit Logging
| What Is Logged | Where | Retention |
|---|---|---|
| MCP requests (tool name, org ID, auth type or error code, result status, timestamp — no credentials, no response bodies, no record counts) | Vercel runtime logs; external Log Drain (if configured) | Plan-dependent — one day by default on Pro; longer via Observability Plus or Log Drains |
| Integration sync events (platform, record counts, errors) | Vercel runtime logs; external Log Drain (if configured) | Plan-dependent — one day by default on Pro; longer via Observability Plus or Log Drains |
| OAuth connection/disconnection events | Nango audit log | Per Nango retention policy |
| Credential access and rotation | Doppler audit trail | 90 days |
| Deployment and configuration changes | Vercel deployment log | Indefinite |
| Agent run costs (tokens, USD, insights generated, model) | Airtable Engine Logs table | Indefinite (in client's Airtable base) |
| Insight verification results (verified/mismatch/unverifiable, field comparisons) | Written to each Insight record | Indefinite (in client's Airtable base) |
Audit logs are available to your organization on request. AI4Love does not log supporter PII in any log stream.
For partners requiring longer log retention than Vercel's default window, external Log Drain or SIEM integration is available — this is configured per organization, not a pre-built default, so confirm specifics before relying on it for a compliance requirement.