OpenConnector
Self-hosted auth gateway that runs prebuilt Actions across 1,000+ SaaS apps over MCP
Reaches 200+ third-party app APIs through Corsair's plugins, using three discovery and script tools
By corsairdev TypeScript Local · stdio Developer toolsProductivityCommunication
38 popularity score ★ 16k ↓ 54/wk
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs CORSAIR_KEK, CORSAIR_API_KEY, CORSAIR_SIGNING_SECRET, CORSAIR_PLUGINS. Replace each <NAME> with your value.
npm install -g @corsair-dev/mcp better-sqlite3 @corsair-dev/<PLUGIN>claude mcp add corsair -e CORSAIR_KEK=<CORSAIR_KEK> -e CORSAIR_API_KEY=<CORSAIR_API_KEY> -e CORSAIR_SIGNING_SECRET=<CORSAIR_SIGNING_SECRET> -e CORSAIR_PLUGINS=<CORSAIR_PLUGINS> -- corsair-mcp{
"mcpServers": {
"corsair": {
"command": "corsair-mcp",
"args": [],
"env": {
"CORSAIR_KEK": "<CORSAIR_KEK>",
"CORSAIR_API_KEY": "<CORSAIR_API_KEY>",
"CORSAIR_SIGNING_SECRET": "<CORSAIR_SIGNING_SECRET>",
"CORSAIR_PLUGINS": "<CORSAIR_PLUGINS>"
}
}
}
}{
"mcpServers": {
"corsair": {
"command": "corsair-mcp",
"args": [],
"env": {
"CORSAIR_KEK": "<CORSAIR_KEK>",
"CORSAIR_API_KEY": "<CORSAIR_API_KEY>",
"CORSAIR_SIGNING_SECRET": "<CORSAIR_SIGNING_SECRET>",
"CORSAIR_PLUGINS": "<CORSAIR_PLUGINS>"
}
}
}
}{
"servers": {
"corsair": {
"type": "stdio",
"command": "corsair-mcp",
"args": [],
"env": {
"CORSAIR_KEK": "<CORSAIR_KEK>",
"CORSAIR_API_KEY": "<CORSAIR_API_KEY>",
"CORSAIR_SIGNING_SECRET": "<CORSAIR_SIGNING_SECRET>",
"CORSAIR_PLUGINS": "<CORSAIR_PLUGINS>"
}
}
}
}[mcp_servers.corsair]
command = "corsair-mcp"
args = []
[mcp_servers.corsair.env]
CORSAIR_KEK = "<CORSAIR_KEK>"
CORSAIR_API_KEY = "<CORSAIR_API_KEY>"
CORSAIR_SIGNING_SECRET = "<CORSAIR_SIGNING_SECRET>"
CORSAIR_PLUGINS = "<CORSAIR_PLUGINS>"gemini mcp add --scope user -e CORSAIR_KEK=<CORSAIR_KEK> -e CORSAIR_API_KEY=<CORSAIR_API_KEY> -e CORSAIR_SIGNING_SECRET=<CORSAIR_SIGNING_SECRET> -e CORSAIR_PLUGINS=<CORSAIR_PLUGINS> corsair corsair-mcpCORSAIR_KEK |
Required: Key-encryption key that protects the stored credentials. |
|---|---|
CORSAIR_API_KEY |
Required: Corsair Hub project API key. |
CORSAIR_SIGNING_SECRET |
Required: Corsair Hub signing secret; Hub needs it together with the API key. |
CORSAIR_PLUGINS |
Required: Comma-separated plugins to load, e.g. slack,github; each package must be installed. |
CORSAIR_DB_PATH |
Optional: SQLite file for credentials and synced data; ./corsair.db by default. |
CORSAIR_READONLY |
Optional: Set to true to block write and destructive Corsair endpoints. |
CORSAIR_MULTITENANCY |
Optional: Set to true to store accounts per tenant. |
Corsair is an open-source integration layer: each third-party service (Slack, GitHub and the others in its catalog) is a plugin package, and Corsair keeps the OAuth tokens, refreshes them and handles webhooks for you. The @corsair-dev/mcp package puts that layer behind MCP. Most of the package is adapters for agent frameworks (Mastra, LangChain, LlamaIndex, OpenAI, Vercel AI, Claude). It also has a runStdioMcpServer function and a ready-made stdio program, corsair-mcp.
The server does not list one tool per endpoint. It gives the assistant three tools: one lists the operations the loaded plugins offer, one returns the parameter schema for a single operation, and one runs a JavaScript snippet with a `corsair` object in scope. Calls are made inside that snippet, which can also filter results before returning them. If you add a plugin, its endpoints become available without any code changes.
The corsair-mcp program reads all of its settings from the environment (see the header of src/bin.ts). It needs a Hub project API key and signing secret, a key-encryption key, and a comma-separated CORSAIR_PLUGINS list. It loads each plugin in managed-auth mode and stores credentials and synced data in a local SQLite file, ./corsair.db by default. The README does not say that the program exits at start-up if better-sqlite3 or a listed plugin package is not installed next to it. It also starts the Hub connection with its dev tunnel turned off so that nothing is written to stdout, which carries the MCP messages.
| Runtime | Node.js |
|---|
Node.js with npx. A Corsair Hub project, whose Keys tab gives the API key and signing secret. A key-encryption key that you choose. The plugin package for every service listed in CORSAIR_PLUGINS (e.g. @corsair-dev/slack), plus better-sqlite3, installed where the program can load them. The accounts you connect for each of those services.
Without better-sqlite3 or one of the listed plugin packages, corsair-mcp exits at start-up. The README's own form, `npx @corsair-dev/mcp`, installs neither, so the snippet installs them globally beside it. The only store the program supports is SQLite. If you reuse a database file made by an older schema, the program refuses it and it must be deleted or migrated. Its makers say run_script is not a sandbox. CORSAIR_READONLY blocks Corsair's write and destructive endpoints only, not other side effects of a script. The program starts no web route. The Hub setup guide sends OAuth callbacks to an /api/corsair route in your app, so connecting accounts may need that app set up separately.
Good for developers already using Corsair, or ready to set up a Hub project, who want one MCP entry to reach many SaaS APIs with the same three-step pattern. It also fits teams building agents with Mastra, LangChain, Vercel AI or the Claude and OpenAI SDKs, since the same package carries adapters for those. It is a poor fit if you want to install one server for one service and sign in from the client, because here you manage plugin packages, a local database and Hub keys. It also does not suit anyone who will not let the model run JavaScript in the server's process. For one service, a dedicated server for that service needs less setup.
list_operationsget_schemarun_script