Raw capture — raw/corsair.md
url: https://github.com/corsairdev/corsair date_fetched: 2026-08-14
⭐ the repo · Website · Discord · X
Corsair is the unified integration layer for your agents. Connect your Corsair instance to your agent and immediately get access to every integration. Your agent never sees the credentials, and you control exactly what it can do.
https://github.com/user-attachments/assets/a5db555a-7688-447d-9777-33f3dddfb03d
Agents are now capable of anything. It feels silly to do a routine task manually. But you do it anyways, because giving agents the keys to all your apps feels reckless. One misunderstood instruction and they're sending an email you'd never send.
Corsair allows you to safely integrate with any app. Connect the Corsair MCP to any agent and have built-in tool calls, permissions, and scoped auth.
You're away from your computer, so you ask your agent to send an email:
Send Sarah the Q1 numbers from the Financials folder in Drive.
Using Corsair, your agent calls Google Drive and then Gmail. You have permissions set up so your agent can't send an email without you seeing. Corsair intercepts the Gmail call, sees it's a send action, and creates a permission request:
Agent: I've drafted the email. This action requires your approval before it sends.
⚠️ gmail: messages.post
To: sarah@corsair.dev
Subject: "Q1 Numbers"
Hi Sarah, attached is the breakdown we discussed on the call.
<file>
Best,
Claude
Review and approve: https://somepubliclink.com/review/a8f2c1
Link expires in 10 minutes.
You open the link. Why does it say "Best, Claude"? You deny the permission, scold Claude, and it sends you a new request.
Each integration has its own mode. Set GitHub to strict and Slack to cautious based on how much you trust each surface.
You can also override individual endpoints within any mode. For example, set Slack to open but require approval before sending any message.
Corsair is built for production. Set multiTenancy: true and every tenant gets isolated credentials, isolated data storage, and isolated permissions handling. You can scope a request to a tenant id and Corsair ensures there is no cross-contamination.
import { github } from '@corsair-dev/github';
import { slack } from '@corsair-dev/slack';
import { createCorsair } from 'corsair/core';
const corsair = createCorsair({
multiTenancy: true,
plugins: [slack(), github()],
});
const client = corsair.withTenant('org-456');
await client.slack.api.messages.post({ channel: '#alerts', text: 'Deploy complete.' });
Every plugin is shipped with typed, signature-verified webhook handlers. All webhooks point to a single endpoint. Set it and forget it.
import { processWebhook } from 'corsair';
app.post('/webhooks', async (req, res) => {
const webhook = await processWebhook(corsair, req.headers, req.body)
return res.json(webhook.response)
});
Licensed under the Apache License, Version 2.0. See LICENSE for details.