// Security

Zero-knowledge encryption by default. Your tokens are encrypted with keys only you hold, backed by real cryptography.

Bindify encrypts all OAuth tokens with AES-256-GCM. By default, your tokens use client-side keys — zero-knowledge encryption where Bindify never holds the decryption key. Tokens are refreshed on-demand when your connection is used. Advanced users can opt into managed refresh mode for automatic background renewal. Here is exactly how both modes work.

// Who we are

Bindify is built and operated by Dylan Wood (GitHub, LinkedIn) at Lightsong Software Solutions, LLC, a software consultancy based in Oregon. Dylan has 17 years of software development experience, including serving as Director of Engineering for Item Page Experience at Walmart Global Tech. The company is registered in the state of Oregon.

We ask you to trust us with access to your connected services, and we take that seriously. Rather than hide behind vague assurances, this page explains exactly how the system works so you can evaluate it for yourself. If you have the technical background, you can also review the proxy source code.

Operator: Lightsong Software Solutions, LLC
Location: Oregon, United States
Infrastructure: Cloudflare (Workers, KV, D1)
Insurance: Covered by cyber liability insurance

// Token encryption

When you connect a service through Bindify, the credentials your service provider gives us (OAuth tokens) are immediately encrypted using AES-256-GCM and stored in that encrypted form. They are never stored in plaintext. Your secret URL contains 512 bits of cryptographic entropy — making brute-force guessing mathematically impossible.

Your secret URL:
https://api.bindify.dev/mcp/{service}/{credentials}/sse

The {credentials} segment contains 512 bits of randomness.
The URL itself is the credential.

This means:

Client-side Keys (default)

In this mode, the only way to decrypt your stored credentials is with your secret URL or API key. Bindify never stores the decryption key — it exists only in the credential you hold. Without it, your encrypted credentials are unreadable, even to us.

Managed Refresh (opt-in)

If you opt into managed refresh, Bindify also refreshes tokens in the background — useful for long-idle connections or services with aggressive token expiry. Managed connections still use AES-256-GCM encryption, but the decryption keys are stored securely within Bindify's infrastructure rather than solely in your secret URL.

Your secret URL and API key are shown once when you connect a service. We never display them again because we never store them. If you lose them, you reconnect (a new OAuth flow generates fresh credentials).

// What we can and cannot see

We want to be direct about this: Bindify is a proxy. Every MCP request and response passes through our infrastructure. We believe you deserve to know exactly what that means.

What we could technically see (but don't):
- MCP request and response payloads
- The content of your Notion pages, Linear issues, etc.

What we actually log:
- Timestamps
- HTTP status codes
- Service name and connection ID

What we never log:
- Request bodies
- Response bodies
- Decrypted tokens
- Your secret URLs or API keys

We make this claim, but we also know that claims are cheap. That is why the proxy worker source code is available for you to read. If you want to verify that we do not log payloads, you can check the code yourself.

View the proxy source code on GitHub →

// API key authentication

In addition to secret URLs, Bindify offers API key authentication for programmatic access and CLI tools like Claude Code.

Your API key:
bnd_live_{credentials}

Same 512 bits of entropy as the secret URL.

Used via HTTP header:
Authorization: Bearer bnd_live_{credentials}

The API key provides identical security guarantees to the secret URL:

When to use which:

Both methods are equivalent. Choose whichever fits your client.

// The math: 512 bits of entropy

Every Bindify secret URL and API key contains 512 bits of cryptographic randomness:

https://api.bindify.dev/mcp/{service}/{credentials}/sse

Entropy = 512 random bits
Total space = 2^512 ≈ 1.3 × 10^154 combinations

To put that in perspective:

Total possible URLs: 1.3 × 10^154
Even at 1M connections: probability per guess = 7.7 × 10^-149

Powerball odds: 1 in 2.9 × 10^8
Winning Powerball 18x: 1 in 4.5 × 10^155

Guessing a Bindify URL is harder than winning the Powerball 18 times in a row.

// What we do to protect you

HTTPS encryption

All traffic between your MCP client and Bindify is encrypted with TLS. Your secret URL is never transmitted in plaintext.

IP allowlisting

Connections from Claude.ai and Claude Desktop are restricted to Anthropic's known egress IP ranges. Even if someone discovered your secret URL, requests from unauthorized networks are rejected.

Rate limiting

Aggressive rate limits on all endpoints. Brute-force enumeration of URLs is computationally impossible and would be blocked long before making progress.

Bot detection

Automated scanning and enumeration attempts are detected and blocked at the edge.

Encrypted token storage

Your service provider credentials are encrypted at rest using AES-256-GCM. By default, the only way to decrypt them is with your secret URL or API key — Bindify never holds the decryption key. If you opt into managed refresh, decryption keys are stored securely within Bindify's infrastructure for automatic background renewal.

Instant revocation

You can revoke any connection instantly from your dashboard. The secret URL stops working immediately. You can also regenerate a new URL at any time.

No request logging

We do not log, store, or inspect the content of MCP requests or responses. We track only metadata (timestamps, status codes) for monitoring and debugging. The proxy source code is open for you to verify this.

Cyber liability insurance

Bindify is covered by cyber liability insurance. In the unlikely event of a security incident, we are financially backed to respond appropriately.

// Honest risk assessment

RISK: If someone obtains your secret URL, they can access
your connected service until you revoke it.

This is the same risk model as:
- API keys
- Webhook URLs (Slack, Discord, etc.)
- Pre-signed S3 URLs
- Git remote URLs with tokens

The URL itself is the credential. Treat it like a password:

This is a deliberate trade-off: permanent convenience in exchange for treating a URL as a secret. We believe this is the right trade-off for most users, and it is the same model used by thousands of production APIs and webhooks across the industry.

// Your data lifecycle

You control your data. Here is exactly what happens at each stage:

When you connect a service

We store encrypted OAuth tokens in Cloudflare KV and a connection record (service name, status, timestamps) in our database. No request or response content is ever stored.

When you remove a connection

Encrypted tokens are immediately and permanently deleted from KV. The connection record and secret URL mapping are deleted from the database. The upstream OAuth grant is revoked when the service supports it.

When you delete your account

All connections are removed (same process as above). Your account record, including email and any subscription metadata, is permanently deleted. Stripe retains billing records per their own retention policy, which you can manage via the Stripe Customer Portal.

Data export

You can request a full export of all data we hold about you by emailing security@bindify.dev. We will respond within 30 days.

// Credential rotation

All connections (including OAuth with client-side keys) refresh tokens on-demand when used. If you opt into managed refresh, tokens are also renewed in the background.

Connections should be rotated annually for security. Click "Re-authorize" in your dashboard before the 1-year mark to keep your connection active.

// Incident response

If we ever discover unauthorized access to our systems or your data, we commit to the following:

We have never had a security incident. We intend to keep it that way, but we also believe that having a plan matters more than hoping you never need one.

// Privacy & compliance

// Vulnerability disclosure

If you discover a security vulnerability in Bindify, please report it responsibly:

Response: within 48 hours
Scope: *.bindify.dev

We ask that you give us reasonable time to address the issue before public disclosure. We will credit researchers who report valid vulnerabilities (with your permission).

// Questions?

If you have security concerns, want to discuss our architecture, or just want to talk through how Bindify handles your data, contact us at security@bindify.dev.