Loading image...Kiro

Product

  • About Kiro
  • IDE
  • CLI
  • Web
  • Mobile
  • Crew
  • Pricing
  • Downloads

For

  • Enterprise
  • Startups
  • Students

Community

  • Overview
  • Ambassadors
  • Discord
  • Events
  • Powers
  • Shop
  • Showcase

Resources

  • Docs
  • Blog
  • Changelog
  • FAQs
  • Report a bug
  • Suggest an idea
  • Billing support

Social

Site TermsLicenseResponsible AI PolicyLegalPrivacy PolicyCookie Preferences
Loading image...Kiro
  • Enterprise
  • Pricing
  • Docs
SIGN INDOWNLOADS
Loading image...Kiro

Get Started

InstallationAuthenticationYour first project

Models

OverviewAvailable modelsReasoning effort

Features

How Kiro works
Specs
Steering
Hooks
MCP
Configuration
Server directory
Tools
Tool search
Examples
Best practices
Registry (enterprise)
Permissions
Custom agents
Agent Skills
Powers
Cloud sessionsCompactionKiroignoreCheckpoints and rewind
Built-in tools
Configuration scopes

IDE 1.x

What's new in 1.0
Setup & First Run
Editor
Chat
Experimental
Troubleshooting0.x reference

CLI

What's new in 3.0
Setup & First Run
Terminal UI
Chat
Headless modeACPAuto complete
Experimental
2.x reference

Crew

Quick startInstallationRunning 24/7
Chat
Agent Capabilities
Features
Interfaces
Apps
ConfigurationSecurityTroubleshooting

Web - Preview

Setup & First RunIdentity Center
Connect your repositories
Working with the agent
Autonomous modeAutomations
Sandbox

Mobile - Preview

Overview

Commands and Reference

CLI commandsSlash commandsBuilt-in toolsExit codesSettings

Billing

OverviewManaging your subscriptionUpgrading your planDowngrading your planCancelling your planPurchasing add-on creditsManaging your paymentsManaging usage notificationsManaging your taxesContacting billing supportDeleting your accountRelated questions

Enterprise

ConceptsOnboarding quickstart
Connecting your identity provider
Subscribe your teamManage subscriptions
Governance
Monitor and track
SettingsManaged updatesBillingIAMSupported regions

Privacy and Security

OverviewData protectionCode referencesCompliance validationInfrastructure securityIAM permissionsFirewalls, proxies, and data perimetersVPC endpoints (AWS PrivateLink)

Guides

Overview
Language support
Learn by playing

Migration

Migrating from Q DeveloperMigrating from VSCodeUpgrading from Q CLI
  1. Docs
  2. Features
  3. MCP
  4. Configuration

Configuration


This guide provides detailed information on configuring Model Context Protocol (MCP) servers with Kiro, including configuration file structure, server setup, and management across all surfaces.

Configuration file structure

MCP configuration files use JSON format with the following structure:

json
{ "mcpServers": { "local-server-name": { "command": "command-to-run-server", "args": ["arg1", "arg2"], "env": { "ENV_VAR1": "hard-coded-variable", "ENV_VAR2": "${EXPANDED_VARIABLE}" }, "disabled": false, "autoApprove": ["tool_name1", "tool_name2"], "disabledTools": ["tool_name3"] }, "remote-server-name": { "url": "https://endpoint.to.connect.to", "headers": { "HEADER1": "value1", "HEADER2": "value2" }, "disabled": false, "autoApprove": ["tool_name1", "tool_name2"], "disabledTools": ["tool_name3"] } } }

Configuration properties

Local server

PropertyTypeRequiredDescription
commandStringYesThe command to run the MCP server
argsArrayNoArguments to pass to the command
envObjectNoEnvironment variables for the server process
disabledBooleanNoWhether the server is disabled (default: false)
autoApproveArrayNoTool names to auto-approve without prompting (use "*" to auto-approve all tools)
disabledToolsArrayNoTool names to omit when calling the Agent

Remote server

PropertyTypeRequiredDescription
urlStringYesHTTPS endpoint for the remote MCP server (or HTTP endpoint for localhost)
headersObjectNoHeaders to pass to the MCP server during connection
envObjectNoEnvironment variables for the server process
oauthObjectNoOAuth configuration for servers that require authentication (see OAuth configuration)
oauthScopesArrayNoOAuth scopes to request (fallback; overridden by oauth.oauthScopes if both are set)
disabledBooleanNoWhether the server is disabled (default: false)
autoApproveArrayNoTool names to auto-approve without prompting (use "*" to auto-approve all tools)
disabledToolsArrayNoTool names to omit when calling the Agent

Configuration locations

You can configure MCP servers at two levels:

  1. Workspace Level: .kiro/settings/mcp.json

    • Applies only to the current workspace
    • Ideal for project-specific MCP servers
  2. User Level: ~/.kiro/settings/mcp.json

    • Applies globally across all workspaces
    • Best for MCP servers you use frequently

If both files exist, configurations are merged with workspace settings taking precedence.

Creating configuration files

Using the command palette:

  1. Open the command palette (Cmd + Shift + P on Mac, Ctrl + Shift + P on Windows/Linux)
  2. Search for "MCP" and select one of these options:
    • Kiro: Open workspace MCP config (JSON) - For workspace-level configuration
    • Kiro: Open user MCP config (JSON) - For user-level configuration

Using the Kiro panel:

  1. Open the Kiro panel
  2. Select the Open MCP Config icon

Enabling MCP support

  1. Open Settings with Cmd + , (Mac) or Ctrl + , (Windows/Linux)
  2. Search for "MCP"
  3. Enable the MCP support setting

Applying changes

Changes to MCP configuration apply automatically when you save the file. Save the config file (Cmd+S) and servers will reconnect.

MCP server loading priority

When multiple configurations define the same MCP server, they are loaded based on this hierarchy (highest to lowest priority):

  1. Agent Config - mcpServers field in agent JSON
  2. Workspace MCP JSON - .kiro/settings/mcp.json
  3. Global MCP JSON - ~/.kiro/settings/mcp.json

Example scenarios

Complete override:

Agent config: { "fetch": { command: "fetch-v2" } } Workspace config: { "fetch": { command: "fetch-v1" } } Global config: { "fetch": { command: "fetch-old" } } Result: Only "fetch-v2" from agent config is used

Additive (different names):

Agent config: { "fetch": {...} } Workspace config: { "git": {...} } Global config: { "aws": {...} } Result: All three servers are used (fetch, git, aws)

Disable via override:

Agent config: { "fetch": { command: "...", disabled: true } } Workspace config: { "fetch": { command: "..." } } Result: No fetch server is launched

Example configurations

Local server with environment variables

json
{ "mcpServers": { "web-search": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-bravesearch" ], "env": { "BRAVE_API_KEY": "${BRAVE_API_KEY}" } } } }

Remote server with headers

json
{ "mcpServers": { "api-server": { "url": "https://api.example.com/mcp", "headers": { "Authorization": "Bearer ${API_TOKEN}", "X-Custom-Header": "value" } } } }

Multiple servers

json
{ "mcpServers": { "fetch": { "command": "uvx", "args": ["mcp-server-fetch"] }, "git": { "command": "uvx", "args": ["mcp-server-git"], "env": { "GIT_CONFIG_GLOBAL": "/dev/null" } }, "aws-docs": { "command": "npx", "args": ["-y", "@aws/aws-documentation-mcp-server"] } } }

Environment variables

Many MCP servers require environment variables for authentication or configuration. Use the ${VARIABLE_NAME} syntax to reference environment variables:

json
{ "mcpServers": { "server-name": { "env": { "API_KEY": "${YOUR_API_KEY}", "DEBUG": "true", "TIMEOUT": "30000" } } } }

For security, Kiro only expands environment variables that are explicitly approved. When you add or modify an MCP server configuration that includes unapproved environment variables, Kiro displays a security warning popup listing the variables that need approval.

To manage approved environment variables:

  1. Open Kiro settings
  2. Search for "Mcp Approved Env Vars"
  3. Add the environment variables you want to allow for expansion

OAuth authentication

Remote MCP servers that require OAuth authentication are supported. Kiro handles the browser-based OAuth flow automatically when connecting to an OAuth-protected server.

json
{ "mcpServers": { "remote-server-with-oauth": { "url": "https://api.example.com/mcp", "oauth": { "clientId": "your-client-id", "redirectUri": "http://127.0.0.1:8080/oauth/callback", "oauthScopes": ["read", "write"] } } } }

If you encounter OAuth scope errors, use an empty array: "oauthScopes": []

Most servers use Dynamic Client Registration (DCR) and need no extra configuration - just connect, and Kiro opens the authorization page.

OAuth configuration

For servers that don't support Dynamic Client Registration (DCR) - like Figma, Slack, or GitHub - you can provide your own OAuth credentials in the oauth object. This works with auth servers like Cognito, Auth0, and Okta.

Warning

Client secret support differs by surface. The CLI supports confidential clients (clientId + clientSecret), which servers like Figma require. The IDE supports public OAuth clients only (PKCE without a client secret) - services that require a client_secret won't work from the IDE with this configuration.

json
{ "mcpServers": { "figma": { "url": "https://mcp.figma.com/mcp", "oauth": { "clientId": "my-figma-client-id", "clientSecret": "my-figma-client-secret", "redirectUri": "http://localhost:7778/oauth/callback", "oauthScopes": ["files:read"] } } } }

To use this configuration, register an OAuth app in the Figma Developer Console. Set the redirect URI in your app settings to http://localhost:7778/oauth/callback - the port and path must match exactly. Figma requires a confidential client, so both clientId and clientSecret are needed.

OAuth properties

PropertyTypeRequiredDescription
oauth.clientIdStringNoPre-registered OAuth client ID. When set, Dynamic Client Registration is skipped entirely.
oauth.clientSecretStringNoClient secret for servers that require one. Only meaningful alongside clientId.
oauth.redirectUriStringNoCustom loopback redirect URI for the OAuth callback. See redirect URI formats below.
oauth.oauthScopesArrayNoOAuth scopes to request from the authorization server. Takes priority over top-level oauthScopes.

How it works

  • No clientId set - Kiro attempts Dynamic Client Registration with the server. If DCR fails, it falls back to a default client configuration.
  • clientId set (without clientSecret) - Kiro skips DCR and authenticates as a public OAuth client using your registered client ID.
  • clientId and clientSecret both set (CLI only) - Kiro skips DCR and authenticates as a confidential client, sending the secret to the token endpoint. This is required for servers like Figma that issue tokens only to confidential clients.

If you bring your own identity provider, your MCP server must serve a /.well-known/oauth-authorization-server metadata document pointing to the provider's endpoints, and validate Bearer tokens against the provider's JWKS.

Redirect URI formats

The redirectUri field accepts several formats. The host must be 127.0.0.1 or localhost, and the scheme must be http (the callback is served by a local loopback server).

FormatExampleDescription
Full URLhttp://localhost:7778/oauth/callbackPin the port and path to match a pre-registered app
Host and port127.0.0.1:7778Pin the port; path defaults to /
Port only:7778Pin the port on 127.0.0.1
Omitted(not set)OS assigns a random available port

Use a full URL with a custom path when your OAuth app has a pre-registered redirect URI that includes a specific callback path.

Scopes

You can specify OAuth scopes in two places:

json
{ "mcpServers": { "server": { "url": "https://mcp.example.com", "oauthScopes": ["openid", "email"], "oauth": { "clientId": "my-id", "oauthScopes": ["read:data", "write:data"] } } } }

When both are set, oauth.oauthScopes takes priority. When neither is specified, Kiro requests a default set of scopes (openid, email, profile, offline_access).

Mid-session token refresh

When an OAuth token expires during a session and no refresh token is available, Kiro automatically triggers a new browser-based authentication flow. You don't need to restart your session - the re-authentication happens transparently and the MCP server reconnects with the new token. In the IDE, a warning indicator and Re-authenticate button appear in the MCP panel when a token expires.

This is particularly useful for identity providers that issue short-lived tokens without refresh tokens.

Managing credentials (CLI)

When automatic refresh isn't sufficient - for example, if a token was revoked or you need to switch accounts - you can manage OAuth credentials manually in the CLI:

CommandKeyboard shortcutDescription
/mcp auth^AForce re-authentication when a token is expired or invalid
/mcp cancel-auth^XAbort a pending auth flow stuck waiting for browser confirmation
/mcp logout^RRemove stored credentials for a server

Keyboard shortcuts are available in the MCP panel status view. See Slash Commands for full usage details.

Hot-reload

Agent and MCP configurations hot-reload when you save changes on disk. A file watcher monitors .kiro/agents directories and mcp.json files, reconciling the running servers and agent state without restarting your session or losing conversation context.

This applies to:

  • Editing an existing agent config or mcp.json
  • Adding or removing an agent file
  • Adding, removing, or editing MCP server entries

How reconciliation works:

  • Only changed servers restart - if you add, remove, or edit a server entry, only the affected servers are stopped or started. Unchanged servers continue running.
  • Order-independent config diff - reordering environment variables or JSON keys does not count as a change and won't trigger a restart.
  • Session-injected servers preserved - servers added mid-session via /mcp add are re-merged during reconciliation.

No command is required to trigger a reload. Save the file and the change takes effect at the next idle boundary (between turns).

Disabling servers and tools

To temporarily disable an MCP server without removing its configuration, set disabled to true:

json
{ "mcpServers": { "server-name": { "disabled": true } } }

To keep a server active but prevent an agent from using specific tools, use disabledTools:

json
{ "mcpServers": { "server-name": { "disabledTools": ["delete_file", "execute_command"] } } }

MCP registry (enterprise)

For enterprise teams using IAM Identity Center, MCP server access can be centrally controlled through an MCP registry. See the MCP Registry page for details.

Troubleshooting configuration

  1. Validate JSON syntax

    • Ensure your JSON is valid with no syntax errors
    • Check for missing commas, quotes, or brackets
    • Use a JSON validator or linter
  2. Verify command paths

    • Make sure the command specified exists in your PATH
    • Try running the command directly in your terminal
  3. Check environment variables

    • Verify that all required environment variables are set
    • Check for typos in environment variable names
  4. Review configuration loading

    • Check which configuration files are being loaded and their priority:
    bash
    # Check workspace config cat .kiro/settings/mcp.json # Check user config cat ~/.kiro/settings/mcp.json

Security considerations

When configuring MCP servers, follow these security best practices:

  • Use environment variable references (e.g., ${API_TOKEN}) instead of hardcoding sensitive values
  • Never commit configuration files with credentials to version control
  • Only connect to trusted remote servers
  • Review tool permissions before adding them to autoApprove
  • Use disabledTools to restrict access to dangerous operations

For comprehensive security guidance, see the MCP Security Best Practices page.

Page updated: August 4, 2026
MCP
Server directory