---
title: "Connect a remote MCP server as a custom integration"
method: POST
path: "/integrations/mcp/connections"
tags: ["Integrations"]
---

# Connect a remote MCP server as a custom integration

`POST /integrations/mcp/connections`

## Request

- Base URL: `https://api.atako.ai`
- URL: `https://api.atako.ai/integrations/mcp/connections`
- Auth: HTTP bearer

Re-probes the server: only tools the server really announces are stored; the body only chooses which are enabled and their read/write scope. `visibility` follows the usual rule ('company' = admins only, 'personal' = any member). Several connections may target the same server (one token each). Agents see enabled tools as `<slug>.<tool>` through the usual grants.

## Request body

- object
  - `displayName` string
  - `visibility` 'company' | 'personal'
  - `url` string, uri, required
  - `auth` object: How the platform authenticates to the MCP server. The token is encrypted at rest and never returned nor shown to agents.
    - `mode` 'none' | 'bearer' | 'header', required
    - `token` string: bearer/header modes. Write-only.
    - `headerName` string: header mode only (e.g. X-API-Key).
  - `tools` object[]
    - `name` string
    - `enabled` boolean
    - `scope` 'read' | 'write'

## Response `201`

- IntegrationConnection: Never includes credential material.
  - `id` string, uuid, required
  - `companyId` string, uuid, nullable
  - `providerKey` string, required
  - `displayName` string, required
  - `authType` 'api_key' | 'oauth2' | 'mcp' | 'internal', required
  - `visibility` 'company' | 'personal': 'company' = shared with the whole company, managed by its admins; 'personal' = visible to, managed and grantable (to their own agents) by its creator only. Another member's personal connections are never returned.
  - `isMine` boolean: Created by the caller.
  - `actions` object[]: List endpoint, custom MCP connections only (providerKey 'mcp', no catalog entry): the active tools, catalog-shaped.
    - `key` string
    - `scope` 'read' | 'write'
    - `description` string
  - `mcp` object: List endpoint, custom MCP connections only.
    - `host` string, nullable
    - `slug` string, nullable
    - `lastSyncedAt` string, nullable
    - `toolCount` integer
    - `enabledCount` integer
    - `pendingReview` integer
  - `status` 'active' | 'error' | 'revoked', required
  - `externalLabel` string, nullable
  - `config` object, nullable
  - `scopes` string[]
  - `lastUsedAt` string, date-time, nullable
  - `createdBy` string, uuid
  - `createdAt` string, date-time, required

## Other responses

- `400`: auth_invalid / too_many_enabled_tools (60 max)
- `401`: Missing, malformed, or invalid bearer token / API key, or revoked session (SESSION_REVOKED).
- `403`: company_admin_required
- `409`: name_taken / mcp_limit_reached (10 per company, 10 personal per user) / personal_limit_reached (50 personal connections per user) / provider_coming_soon
- `422`: url_invalid / url_blocked (private, local or non-public address, or a redirect) / unreachable / auth_required (with `oauth: true` when the server asks for OAuth) / auth_rejected / not_mcp / too_many_tools / timeout
- `429`: too_many_requests

---

[API](https://skmtc.dev/atako/apis/atako-api.md) · [All operations](https://skmtc.dev/atako/apis/atako-api/llms.txt) · [OpenAPI document](https://skmtc.dev/atako/apis/atako-api/revisions/aa555c56fbd7?raw)
