Skip to Content
Kai

MCP servers

Adding tool servers from the library or by hand, authentication, credentials and permissions.

Kai's tools come from MCP servers. Settings → MCPs is the one page for them: every member sees the workspace's servers and their own status there, signs in and fills in their own values; owners and admins also add, edit and delete servers, set shared credentials and decide what needs approval.

MCP servers

From the library

Browse library lists over a hundred ready-made servers: GitHub, Linear, Notion, Figma, Sentry, Stripe and many more. Search, or filter by category. Servers the workspace already has are marked Added.

The MCP library

Picking one opens the server form prefilled. How Kai connects (transport, URL, authentication, the headers to fill in) comes from the library and can't be changed while adding; the name, description, credentials and permissions can.

Adding from the library

After saving, Kai offers to test the connection, and to sign in or fill in values when the server needs them.

Testing a server

The library is a separate service. If KAI_LIBRARY_URL isn't set, the button says the library isn't set up.

Adding a server by hand

Add server.

Field
Name, keyThe key names the server's tools for the model (mcp__linear__create_issue). It's derived from the name and can't change after saving.
TransportSee below.
URLThe server's MCP endpoint.
DescriptionShown in Kai only.
AuthenticationSee below.
PermissionThe default for its tools: Needs approval, Allow or Deny.
Include the server's instructionsAdds the instructions the server sends to the system prompt. Off by default: they carry system-prompt authority, so read them on the server's Instructions tab first.
Allow private networkLets the URL (and OAuth endpoints) be private or loopback addresses. Only offered when the instance allows it.

Transports

Transports

Transport
Streamable HTTPThe standard for remote servers. Kai supports the stateless 2026 revision and the earlier session-based ones.
SSE (legacy)Older servers that still use HTTP + server-sent events. Kai doesn't fall back to it on its own: pick it for those servers.
stdioA command Kai starts on its own host. Only when the instance allows it (KAI_ALLOW_STDIO_MCP). See Local commands.
OpenAPIAn HTTP API described by an OpenAPI document. Each operation becomes a tool. See OpenAPI servers.

Authentication

Authentication modes

Mode
NoneA public server.
HeadersKai sends headers you name, like Authorization or X-Api-Key. The values are filled in after saving.
OAuth sign-inPeople sign in at the server's authorization server (authorization code with PKCE).
OAuth client credentialsMachine to machine: Kai gets tokens with a client id and a secret or a private key. Always shared by the workspace.

Credentials: shared or per person

For headers and OAuth sign-in, choose who provides the credentials:

  • Each user fills in their own values / Each user signs in. Every person uses their own account at the server; until they do, the server shows Missing credentials or Needs auth for them.
  • Shared values / One shared account. An admin sets them once, and everyone in the workspace uses them. With OAuth this means everyone acts as one account at the server; Kai warns about that.

Headers

Name each header, with a placeholder, a description and whether it's required. A format (a regular expression like Bearer .+) and its message catch mistakes before they reach the server.

Header fields

People then fill them in from the server's menu (Configure values), or the chat's tools menu. Values are encrypted, used only for that person's calls (or everyone's, when shared), and never shown again.

Filling in values

Values (and stdio arguments) may contain placeholders:

PlaceholderBecomes
{{kai.user_id}}The person's user id
{{kai.user_email}}Their email address
{{kai.organization_id}}The workspace id
{{kai.env.KAI_ENV_<NAME>}}The instance's environment variable KAI_ENV_<NAME>

Only variables whose names start with KAI_ENV_ can be read, and the full name is used: {{kai.env.KAI_ENV_GITHUB_TOKEN}}. That keeps Kai's own secrets out of reach.

OAuth

Kai discovers the authorization server from the MCP server (protected resource metadata), registers itself, and sends people through the usual consent page in a popup. It supports dynamic client registration and client ID metadata documents (Kai's is served at /api/mcp/oauth/client-metadata.json); for servers that need a pre-registered client, enter its client id and secret. Advanced has the pinned issuer, scopes, the resource parameter, the token endpoint's authentication method (including private_key_jwt) and extra authorization parameters.

The redirect URI to register is <KAI_APP_URL>/api/mcp/oauth/callback.

Permissions

Each server's Tools tab lists its tools, grouped as read, write and other tools by what the server says about them. Set a permission for all tools, a group, or a single tool:

  • Needs approval (shield) — Kai asks before each call, unless the person chose to always allow it.
  • Allow (check) — runs without asking.
  • Deny (circle) — the model never sees the tool.

Tool permissions

Open a tool to read its description and arguments. Tools the server marks as destructive are labelled.

Status

StatusMeaning
ActiveKai listed its tools.
Needs authOAuth sign-in needed (for this person, or the shared account).
Missing credentialsRequired values aren't filled in.
ErrorKai couldn't connect; the message says why.
DisabledTurned off with the switch. Turning a server off hides it from chats.

Kai caches each server's tool list for a few minutes. Refresh on the Tools tab asks again. Changing how Kai connects (URL, transport, authentication, headers) signs everyone out of the server.

Local commands (stdio)

No sandbox yet

A stdio server is a command that runs on the Kai host, as the Kai user, with network access. Only allow it (KAI_ALLOW_STDIO_MCP=true) where you trust every workspace admin.

  • Command and arguments. The executable and its arguments, one per line. Arguments may use the placeholders above.
  • Environment. Variables each person (or the workspace) fills in, like headers. The process gets these and a minimal environment (PATH, HOME), never Kai's own.
  • Kai keeps one process per person (or one for shared credentials) and stops it after ten idle minutes.

Library entries for local servers (like GitHub (Local) or Filesystem) can only be added when stdio is allowed.

On this page