{"id":"247d2d29-f0e7-4f9a-9013-1d267abeb57f","slug":"connany","kind":"skill","name":"connany","summary":"Connect anything to your agents.","owner":"thinkany-ai","repoUrl":"https://github.com/thinkany-ai/connany","license":"MIT","licenseTier":"permissive","trust":"community","stars":9,"match":null,"fewStars":false,"format":"skill","createdAt":"2026-09-28T05:35:06.000Z","addedAt":"2026-10-21T18:10:05.477Z","logoUrl":"https://avatars.githubusercontent.com/u/163702970?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["writing"],"tags":["agent-connector","agent-infra","connector"],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-25T17:24:16.024Z","sample":false,"url":"https://conduits.dev/tools/connany","language":"TypeScript","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"<p align=\"center\"><img src=\"public/brand/logo.svg\" width=\"80\" alt=\"Connany logo\"></p>\n<h1 align=\"center\">Connany</h1>\n<p align=\"center\">Connect agents to your users’ tools, accounts, and workspaces.</p>\n<p align=\"center\"><a href=\"README.md\">English</a> · <a href=\"README.zh-CN.md\">简体中文</a></p>\n\nConnany is an open-source, multi-tenant connector service for agent applications. It manages user authorization, connections, and credentials so your agent backend can list tools and work with authorized data through a REST API or TypeScript SDK, without handling provider tokens.\n\nIt ships with 25 connectors across collaboration, development, databases, analytics, payments and design. Every connector except GitHub uses the provider's official hosted MCP server and is enabled with one click: Connany registers the OAuth client automatically. Two ways in: agent products integrate through a REST API and TypeScript SDK, and individuals add Connany to Claude Code, Codex or Cursor as an MCP server (with an agent skill) to use the connectors with their own accounts.\n\n![Connany admin console: connectors grouped by category, with status and category filters](docs/images/connectors.png)\n\n## Features\n\n- **Admin console:** configure connectors once and sync their tool catalogs, create a project for each agent, manage each project's API keys (zero-downtime rotation), inspect user connections and activity, read the API docs and agent integration guide, and (as an administrator) manage console users as administrators or members.\n- **User authorization:** hosted OAuth pages, single-use state, browser binding, and PKCE (S256) on every OAuth flow.\n- **Project isolation:** every API key belongs to a project; user data is scoped to `project_id + external_user_id`.\n- **Connection management:** multiple accounts and workspaces, listing, active checks, reconnection, disconnection, and upstream revocation retries.\n- **Tool listing and calls:** list the official MCP tools a user's connection can use with `GET /v1/connections/{id}/tools` (or browse each connector's catalog with `GET /v1/tools`), inspect parameter schemas and read/write metadata, and call them with `POST /v1/connections/{id}/tools/{name}/call`. The SDK can expose just two tools to a model: `list_tools` and `call_tool`.\n- **MCP server and skill:** Connany is itself a remote MCP server with OAuth 2.1 sign-in (dynamic client registration, PKCE). Users add it once to Claude Code, Codex or Cursor, connect accounts from the conversation, and call tools through a few meta-tools; reads and writes are separate tools so clients can confirm every change. A downloadable skill teaches the agent the workflow.\n- **Event feed:** one project-wide feed (`GET /v1/events`) reports connections, reauthorization needs, disconnections, and tool calls for every user.\n- **Credential protection:** AES-256-GCM encryption for connector and user credentials, hashed API keys, and database transaction locks to coordinate token refresh and execution.\n\n## Quick start\n\nRequires Node.js 22+, npm, and PostgreSQL 15+. The following uses Docker to start a local database:\n\n```bash\ngit clone git@github.com:thinkany-ai/connany.git\ncd connany\nnpm ci\nnpm run setup\ndocker compose up -d postgres\nnpm run db:migrate\nnpm run admin:create -- admin@example.com\nnpm run dev   # or: make dev\n```\n\nEnter an administrator password of at least 8 characters when prompted. `npm run setup` creates `.env` with a random encryption key without overwriting an existing file. The root `compose.yaml` starts only PostgreSQL; its default password is for local development.\n\n- Admin console: <http://localhost:3000/admin>\n- Public docs (no sign-in): <http://localhost:3000/docs> (API), `/docs/agent` (agent integration guide) and `/docs/mcp` (MCP and skill), with copyable examples and Markdown/SDK downloads. **Docs** in the console sidebar opens them.\n- Health check: <http://localhost:3000/health>\n\nTo use an existing database, set `DATABASE_URL` in `.env` and skip the Docker step. If the port is occupied, update both `PORT` and `PUBLIC_BASE_URL`. For daily development, run `make dev`: it installs dependencies when the lockfile changes, starts PostgreSQL, applies migrations, and runs the server with hot reload (Docker is only used when `DATABASE_URL` points to the compose database on port 54329). Server changes restart the process, while static asset changes need a browser refresh.\n\n## Configure connectors\n\n| Category | Connectors |\n| --- | --- |\n| Collaboration | [Notion](https://www.notion.com) · [Linear](https://linear.app) · [Atlassian](https://www.atlassian.com) (Jira, Confluence) · [ClickUp](https://clickup.com) · [monday.com](https://monday.com) · [Airtable](https://airtable.com) · [Todoist](https://todoist.com) · [Intercom](https://www.intercom.com) · [Slack](https://slack.com) · [Microsoft 365](https://www.microsoft.com/microsoft-365) · [Gmail](https://mail.google.com) · [Google Calendar](https://calendar.google.com) · [Outlook](https://outlook.com) · [Google Drive](https://drive.google.com) · [Google Sheets](https://sheets.google.com) · [Google Docs](https://docs.google.com) · [Zoho Mail](https://www.zoho.com/mail/) |\n| Code & deploy | [GitHub](https://github.com) · [GitLab](https://gitlab.com) · [Vercel](https://vercel.com) · [Netlify](https://www.netlify.com) · [Cloudflare](https://www.cloudflare.com) |\n| Databases | [Supabase](https://supabase.com) · [Neon](https://neon.com) · [Prisma](https://www.prisma.io) |\n| Monitoring & analytics | [Sentry](https://sentry.io) · [PostHog](https://posthog.com) · [Google Search Console](https://search.google.com/search-console) · [Google Analytics](https://analytics.google.com) |\n| Payments | [Stripe](https://stripe.com) · [PayPal](https://www.paypal.com) · [Square](https://squareup.com) |\n| Design & websites | [Figma](https://www.figma.com) · [Canva](https://www.canva.com) · [Miro](https://miro.com) · [Webflow](https://webflow.com) · [Wix](https://www.wix.com) |\n\n- **Hosted MCP connectors (24):** click **Enable** in the console. Connany registers an OAuth client with the provider (RFC 7591), using a public client with PKCE or a confidential client as the provider requires.\n- **GitHub:** create a GitHub App and enter its Client ID, Client Secret and App slug in the console. Users also install the App and choose repositories.\n\nThe list is also available to agents through `GET /v1/connectors` (enabled connectors with localized categories and descriptions, `lang=en|zh-CN|zh-HK`).\n\nAfter enabling a connector, click **Sync tool catalog** on its card once: upstream MCP servers list tools only to signed-in users, so you authorize with your own account and Connany keeps only the tool definitions. Users must still authorize their own accounts. GitHub repository access also requires installing the App and selecting repositories. See the [connector setup guide (Chinese)](docs/connector-setup.md).\n\n## Integrate your agent\n\n1. Create a project for your agent under **Projects** in the console and save its API key.\n2. Configure the service URL and API key in your agent backend.\n3. Create an authorization session for a user (`POST /v1/connectors/{name}/sessions`) and direct them to the hosted authorization page.\n4. In conversations, give the model the tools of the user's connections and call them through those connections. If a needed connector is not connected yet, show an authorization button in the conversation.\n\nCopy the dependency-free [TypeScript SDK](sdk/client.ts), or run the example:\n\n```bash\nexport CONNANY_API_KEY='cn_live_replace_with_your_key'\nnpm run example:agent -- notion\n# Also supports github / linear.\n```\n\nKeep API keys on the backend. The SDK’s two-tool adapter defaults to read-only access; your backend must explicitly set `allowWrites: true` to enable writes. Actual upstream access depends on the user’s authorization and provider permissions.\n\n- [Agent integration guide (Chinese)](docs/agent-integration.md)\n- [REST API reference](docs/api.en.md) · [中文 API 文档](docs/api.md)\n- [Admin console guide (Chinese)](docs/admin.md)\n\n## Use Connany from Claude Code or Codex\n\nAny console user (enable **Open registration** under **Users** to let people sign up) can add Connany to their agent:\n\n```bash\nclaude mcp add --transport http connany https://connany.example.com/mcp   # then run /mcp to sign in\ncodex mcp add connany --url https://connany.example.com/mcp && codex mcp login connany\nmkdir -p ~/.claude/skills/connany && curl -fsSL https://connany.example.com/skills/connany/SKILL.md -o ~/.claude/skills/connany/SKILL.md\n```\n\nThen ask, for example, \"how many active users did PostHog record yesterday?\". The agent lists connectors, sends a link to connect PostHog if needed, searches the tools and calls them with the user's account. Connectors enabled by the first administrator are available to every user. The public docs at `/docs/mcp` show these commands with your deployment's address; users revoke authorized clients under **Settings → Authorized apps**. See the [MCP and skill guide](docs/mcp.en.md) ([中文](docs/mcp.md)).\n\n## Docker deployment\n\nThe repository includes a Compose configuration for the application and PostgreSQL:\n\n```bash\ncp deploy/docker/.env.example deploy/docker/.env\n# Edit .env: set POSTGRES_PASSWORD, TOKEN_ENCRYPTION_KEY, and the public origin.\n# Generate the password with openssl rand -hex 24 and the key with openssl rand -base64 32.\ndocker compose --env-file deploy/docker/.env -f deploy/docker/compose.yaml up -d --build\ndocker compose --env-file deploy/docker/.env -f deploy/docker/compose.yaml exec app \\\n  node dist/scripts/create-admin.js admin@example.com\n```\n\nOnce the database is healthy, migrations run before the application starts. The application binds to a loopback port; production deployments need an HTTPS reverse proxy. See the [Docker deployment guide (Chinese)](deploy/README.md#docker-compose) for environment variables, external databases, upgrades, and backups.\n\n## Kubernetes deployment\n\n`deploy/k8s/` contains templates for a Namespace, Deployment with a migration init container, Service, and HTTPS Ingress. It uses an external PostgreSQL database and injects credentials through a Secret.\n\n1. Use the image GitHub Actions publishes to `ghcr.io/thinkany-ai/connany` (or build your own), then update the image tag, domain, and Ingress/TLS configuration in the templates.\n2. Create the namespace and the `connany-runtime` Secret.\n3. Apply the Deployment and Service, and wait for migrations and rollout to complete.\n4. Create an administrator, then apply the Ingress.\n\nSee the [Kubernetes deployment guide (Chinese)](deploy/README.md#kubernetes) for full commands, private registries, upgrades, and troubleshooting.\n\n## Environment variables\n\n| Variable | Description |\n| --- | --- |\n| `DATABASE_URL` | PostgreSQL connection string; configure TLS as required by your production database |\n| `PUBLIC_BASE_URL` | Public HTTPS origin without a path; HTTP is allowed only for localhost / 127.0.0.1 |\n| `TOKEN_ENCRYPTION_KEY` | 32 random bytes encoded as base64; back it up and keep it stable across restarts |\n| `PORT` | Listening port; defaults to 3000 |\n| `MIGRATE_ON_START` | Pending database migrations run automatically at startup; set to `false` to run them yourself with `node dist/scripts/migrate.js` |\n\nConfigure connector credentials in the console. The GitHub variables in `.env.example` support a one-time import for compatibility with older configurations.\n\n## Development and validation\n\n```bash\nnpm run typecheck\nnpm test\nnpm run build\n# Tests use isolated random schemas and clean them up afterward. A dedicated test database is recommended.\nTEST_DATABASE_URL='postgres://connany:connany@localhost:54329/connany' npm run test:integration\nnpx playwright install chromium\nTEST_DATABASE_URL='postgres://connany:connany@localhost:54329/connany' npm run test:browser\n```\n\nBrowser tests use simulated upstream services and do not replace authorization testing with real accounts. GitHub Actions runs type checks, builds, unit tests, integration tests, and browser tests, then publishes a multi-arch image to GHCR for `main` and `v*` tags.\n\n```text\nsrc/          Hono service, authorization flows, connectors, and admin console\npublic/       Admin console assets, API docs assets, and branding\nsdk/          Dependency-free TypeScript backend SDK\nskills/       Agent skill for using Connany through MCP\nmigrations/   PostgreSQL migrations\nscripts/      Environment setup, migrations, and administrator commands\nexamples/     Agent integration examples\ndeploy/       Docker Compose and Kubernetes deployment templates\ndocs/         Integration, configuration, and operations documentation\ntests/        Unit, integration, and browser tests\n```\n\n## Current limitations\n\n- Connector configuration is shared across projects, and upstream authorization may be reused. Project isolation does not imply separate upstream OAuth grants.\n- Agent products use REST/SDK and event polling (no push webhooks yet); individuals use the MCP server. Each console user has their own workspace with its own connectors, projects and connections; projects within a workspace share its connector configuration.\n- There is no automatic credential master-key rotation, audit retention cleanup, or background worker for upstream revocation retries.\n- Public deployments must configure HTTPS, database backups, and ingress rate limiting.\n\nSee [architecture, operations, and limitations (Chinese)](docs/operations.md). Issues and pull requests are welcome.\n\n## License\n\nThe code is licensed under the [MIT License](LICENSE). Third-party names and brand assets belong to their respective owners; the MIT license does not grant trademark rights. See [third-party notices](THIRD_PARTY_NOTICES.md).\n"}