Loading...
  • Messages
  • Managed Agents
  • Admin
Search...
⌘K
First steps
Intro to ClaudeQuickstart
Building with Claude
Features overviewUsing the Messages APIHandling stop reasons
Model capabilities
Extended thinkingAdaptive thinkingEffortTask budgets (beta)Fast mode (beta: research preview)Structured outputsCitationsStreaming MessagesBatch processingSearch resultsStreaming refusalsMultilingual supportEmbeddings
Tools
OverviewHow tool use worksTutorial: Build a tool-using agentDefine toolsHandle tool callsParallel tool useTool Runner (SDK)Strict tool useTool use with prompt cachingServer toolsTroubleshootingWeb search toolWeb fetch toolCode execution toolAdvisor toolMemory toolBash toolComputer use toolText editor tool
Tool infrastructure
Tool referenceManage tool contextTool combinationsTool searchProgrammatic tool callingFine-grained tool streaming
Context management
Context windowsCompactionContext editingPrompt cachingToken counting
Working with files
Files APIPDF supportImages and vision
Skills
OverviewQuickstartBest practicesSkills for enterpriseSkills in the API
MCP
Remote MCP serversMCP connector
Claude on cloud platforms
Amazon BedrockAmazon Bedrock (legacy)Claude Platform on AWSMicrosoft FoundryVertex AI
Log in
MCP connector
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
Messages/MCP

MCP connector

Claude's Model Context Protocol (MCP) connector feature enables you to connect to remote MCP servers directly from the Messages API without a separate MCP client.

Current version: This feature requires the beta header: "anthropic-beta": "mcp-client-2025-11-20"

The previous version (mcp-client-2025-04-04) is deprecated. See Deprecated version: mcp-client-2025-04-04.

This feature is not eligible for Zero Data Retention (ZDR). Data is retained according to the feature's standard retention policy.

Key features

  • Direct API integration: Connect to MCP servers without implementing an MCP client
  • Tool calling support: Access MCP tools through the Messages API
  • Flexible tool configuration: Enable all tools, allowlist specific tools, or denylist unwanted tools
  • Per-tool configuration: Configure individual tools with custom settings
  • OAuth authentication: Support for OAuth Bearer tokens for authenticated servers
  • Multiple servers: Connect to multiple MCP servers in a single request

Limitations

  • Of the feature set of the MCP specification, only tool calls are currently supported.
  • The server must be publicly exposed through HTTP (supports both Streamable HTTP and SSE transports). Local STDIO servers cannot be connected directly.
  • The MCP connector is available on the Claude API, Claude Platform on AWS, and Microsoft Foundry. It is not currently available on Amazon Bedrock or Vertex AI.

Using the MCP connector in the Messages API

The MCP connector uses two components:

  1. MCP Server Definition (mcp_servers array): Defines server connection details (URL, authentication)
  2. MCP Toolset (tools array): Configures which tools to enable and how to configure them

Basic example

This example enables all tools from an MCP server with default configuration:

MCP server configuration

Each MCP server in the mcp_servers array defines the connection details:

{
  "type": "url",
  "url": "https://example-server.modelcontextprotocol.io/sse",
  "name": "example-mcp",
  "authorization_token": "YOUR_TOKEN"
}

Field descriptions

PropertyTypeRequiredDescription
typestringYesCurrently only "url" is supported.
urlstringYesThe URL of the MCP server. Must start with https://.
namestringYesA unique identifier for this MCP server. Must be referenced by exactly one MCPToolset in the tools array.
authorization_tokenstringNoOAuth authorization token if required by the MCP server. See MCP specification.

MCP toolset configuration

The MCPToolset lives in the tools array and configures which tools from the MCP server are enabled and how they should be configured.

Basic structure

{
  "type": "mcp_toolset",
  "mcp_server_name": "example-mcp",
  "default_config": {
    "enabled": true,
    "defer_loading": false
  },
  "configs": {
    "specific_tool_name": {
      "enabled": true,
      "defer_loading": true
    }
  }
}

Field descriptions

PropertyTypeRequiredDescription
typestringYesMust be "mcp_toolset".
mcp_server_namestringYesMust match a server name defined in the mcp_servers array.
default_configobjectNoDefault configuration applied to all tools in this set. Individual tool configs in configs override these defaults.
configsobjectNoPer-tool configuration overrides. Keys are tool names, values are configuration objects.

Tool configuration options

Each tool (whether configured in default_config or in configs) supports the following fields:

PropertyTypeDefaultDescription
enabledbooleantrueWhether this tool is enabled.
defer_loadingbooleanfalseIf true, tool description is not sent to the model initially. Used with Tool search tool.

For the full directory of Anthropic-provided tools and optional properties such as defer_loading, see the Tool reference. For searching across large tool sets, see Tool search tool.

Configuration merging

Configuration values merge with this precedence (highest to lowest):

  1. Tool-specific settings in configs
  2. Set-level default_config
  3. System defaults

Example:

{
  "type": "mcp_toolset",
  "mcp_server_name": "google-calendar-mcp",
  "default_config": {
    "defer_loading": true
  },
  "configs": {
    "search_events": {
      "enabled": false
    }
  }
}

Results in:

  • search_events: enabled: false (from configs), defer_loading: true (from default_config)
  • All other tools: enabled: true (system default), defer_loading: true (from default_config)

Common configuration patterns

Enable all tools with default configuration

The simplest pattern - enable all tools from a server:

{
  "type": "mcp_toolset",
  "mcp_server_name": "google-calendar-mcp"
}

Allowlist: enable only specific tools

Set enabled: false as the default, then explicitly enable specific tools:

{
  "type": "mcp_toolset",
  "mcp_server_name": "google-calendar-mcp",
  "default_config": {
    "enabled": false
  },
  "configs": {
    "search_events": {
      "enabled": true
    },
    "create_event": {
      "enabled": true
    }
  }
}

Denylist: disable specific tools

Enable all tools by default, then explicitly disable unwanted tools:

{
  "type": "mcp_toolset",
  "mcp_server_name": "google-calendar-mcp",
  "configs": {
    "delete_all_events": {
      "enabled": false
    },
    "share_calendar_publicly": {
      "enabled": false
    }
  }
}

Mixed: allowlist with per-tool configuration

Combine allowlisting with custom configuration for each tool:

{
  "type": "mcp_toolset",
  "mcp_server_name": "google-calendar-mcp",
  "default_config": {
    "enabled": false,
    "defer_loading": true
  },
  "configs": {
    "search_events": {
      "enabled": true,
      "defer_loading": false
    },
    "list_events": {
      "enabled": true
    }
  }
}

In this example:

  • search_events is enabled with defer_loading: false
  • list_events is enabled with defer_loading: true (inherited from default_config)
  • All other tools are disabled

Validation rules

The API enforces these validation rules:

  • Server must exist: The mcp_server_name in an MCPToolset must match a server defined in the mcp_servers array
  • Server must be used: Every MCP server defined in mcp_servers must be referenced by exactly one MCPToolset
  • Unique toolset per server: Each MCP server can only be referenced by one MCPToolset
  • Unknown tool names: If a tool name in configs doesn't exist on the MCP server, a backend warning is logged but no error is returned (MCP servers may have dynamic tool availability)

Response content types

When Claude uses MCP tools, the response includes two new content block types:

MCP tool use block

{
  "type": "mcp_tool_use",
  "id": "mcptoolu_014Q35RayjACSWkSj4X2yov1",
  "name": "echo",
  "server_name": "example-mcp",
  "input": { "param1": "value1", "param2": "value2" }
}

MCP tool result block

{
  "type": "mcp_tool_result",
  "tool_use_id": "mcptoolu_014Q35RayjACSWkSj4X2yov1",
  "is_error": false,
  "content": [
    {
      "type": "text",
      "text": "Hello"
    }
  ]
}

Multiple MCP servers

You can connect to multiple MCP servers by including multiple server definitions in mcp_servers and a corresponding MCPToolset for each in the tools array:

{
  "model": "claude-opus-4-7",
  "max_tokens": 1000,
  "messages": [
    {
      "role": "user",
      "content": "Use tools from both mcp-server-1 and mcp-server-2 to complete this task"
    }
  ],
  "mcp_servers": [
    {
      "type": "url",
      "url": "https://mcp.example1.com/sse",
      "name": "mcp-server-1",
      "authorization_token": "TOKEN1"
    },
    {
      "type": "url",
      "url": "https://mcp.example2.com/sse",
      "name": "mcp-server-2",
      "authorization_token": "TOKEN2"
    }
  ],
  "tools": [
    {
      "type": "mcp_toolset",
      "mcp_server_name": "mcp-server-1"
    },
    {
      "type": "mcp_toolset",
      "mcp_server_name": "mcp-server-2",
      "default_config": {
        "defer_loading": true
      }
    }
  ]
}

Authentication

For MCP servers that require OAuth authentication, you'll need to obtain an access token. The MCP connector beta supports passing an authorization_token parameter in the MCP server definition. API consumers are expected to handle the OAuth flow and obtain the access token prior to making the API call, and to refresh the token as needed.

Obtaining an access token for testing

The MCP inspector can guide you through the process of obtaining an access token for testing purposes.

  1. Run the inspector with the following command. You need Node.js installed on your machine.

    npx @modelcontextprotocol/inspector
  2. In the sidebar on the left, for "Transport type", select either "SSE" or "Streamable HTTP".

  3. Enter the URL of the MCP server.

  4. In the right area, click the "Open Auth Settings" button after "Need to configure authentication?".

  5. Click "Quick OAuth Flow" and authorize on the OAuth screen.

  6. Follow the steps in the "OAuth Flow Progress" section of the inspector and click "Continue" until you reach "Authentication complete".

  7. Copy the value.

Using the access token

Once you've obtained an access token using either of the preceding OAuth flows, you can use it in your MCP server configuration:

{
  "mcp_servers": [
    {
      "type": "url",
      "url": "https://example-server.modelcontextprotocol.io/sse",
      "name": "authenticated-server",
      "authorization_token": "YOUR_ACCESS_TOKEN_HERE"
    }
  ]
}

For detailed explanations of the OAuth flow, refer to the Authorization section in the MCP specification.

Client-side MCP helpers (TypeScript)

If you manage your own MCP client connection (for example, with local stdio servers, MCP prompts, or MCP resources), the TypeScript SDK provides helper functions that convert between MCP types and Claude API types. This eliminates manual conversion code when using the MCP SDK alongside the Anthropic SDK.

These helpers are currently available in the TypeScript SDK only.

Use the mcp_servers API parameter when you have remote servers accessible by URL and only need tool support. Use the client-side helpers when you need local servers, prompts, resources, or more control over the connection with the base SDK.

Installation

Install both the Anthropic SDK and the MCP SDK:

npm install @anthropic-ai/sdk @modelcontextprotocol/sdk

Available helpers

Import the helpers from the beta namespace:

import {
  mcpTools,
  mcpMessages,
  mcpResourceToContent,
  mcpResourceToFile
} from "@anthropic-ai/sdk/helpers/beta/mcp";
HelperDescription
mcpTools(tools, mcpClient)Converts MCP tools to Claude API tools for use with client.beta.messages.toolRunner()
mcpMessages(messages)Converts MCP prompt messages to Claude API message format
mcpResourceToContent(resource)Converts an MCP resource to a Claude API content block
mcpResourceToFile(resource)Converts an MCP resource to a file object for upload

Use MCP tools

Convert MCP tools for use with the SDK's tool runner, which handles tool execution automatically:

import { mcpTools } from "@anthropic-ai/sdk/helpers/beta/mcp";
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";

const anthropic = new Anthropic();

// Connect to an MCP server
const transport = new StdioClientTransport({ command: "mcp-server", args: [] });
const mcpClient = new Client({ name: "my-client", version: "1.0.0" });
await mcpClient.connect(transport);

// List tools and convert them for the Claude API
const { tools } = await mcpClient.listTools();
const finalMessage = await anthropic.beta.messages.toolRunner({
  model: "claude-opus-4-7",
  max_tokens: 1024,
  messages: [{ role: "user", content: "What tools do you have available?" }],
  tools: mcpTools(tools, mcpClient)
});

console.log(finalMessage);

Use MCP prompts

Convert MCP prompt messages into Claude API message format:

import { mcpMessages } from "@anthropic-ai/sdk/helpers/beta/mcp";

const { messages } = await mcpClient.getPrompt({ name: "my-prompt" });
const response = await anthropic.beta.messages.create({
  model: "claude-opus-4-7",
  max_tokens: 1024,
  messages: mcpMessages(messages)
});

console.log(response);

Use MCP resources

Convert MCP resources into content blocks to include in messages, or into file objects for upload:

import { mcpResourceToContent, mcpResourceToFile } from "@anthropic-ai/sdk/helpers/beta/mcp";

// As a content block in a message
const resource = await mcpClient.readResource({ uri: "file:///path/to/doc.txt" });
await anthropic.beta.messages.create({
  model: "claude-opus-4-7",
  max_tokens: 1024,
  messages: [
    {
      role: "user",
      content: [
        mcpResourceToContent(resource),
        { type: "text", text: "Summarize this document" }
      ]
    }
  ]
});

// As a file upload
const fileResource = await mcpClient.readResource({ uri: "file:///path/to/data.json" });
await anthropic.beta.files.upload({ file: mcpResourceToFile(fileResource) });

Error handling

The conversion functions throw UnsupportedMCPValueError if an MCP value isn't supported by the Claude API. This can happen with unsupported content types, MIME types, or non-HTTP resource links.

Data retention

The MCP connector is not covered by ZDR arrangements. Data exchanged with MCP servers, including tool definitions and execution results, is retained according to Anthropic's standard data retention policy.

For ZDR eligibility across all features, see API and data retention.

Migration guide

If you're using the deprecated mcp-client-2025-04-04 beta header, follow this guide to migrate to the new version.

Key changes

  1. New beta header: Change from mcp-client-2025-04-04 to mcp-client-2025-11-20
  2. Tool configuration moved: Tool configuration now lives in the tools array as MCPToolset objects, not in the MCP server definition
  3. More flexible configuration: New pattern supports allowlisting, denylisting, and per-tool configuration

Migration steps

Before (deprecated):

{
  "model": "claude-opus-4-7",
  "max_tokens": 1000,
  "messages": [
    // ...
  ],
  "mcp_servers": [
    {
      "type": "url",
      "url": "https://mcp.example.com/sse",
      "name": "example-mcp",
      "authorization_token": "YOUR_TOKEN",
      "tool_configuration": {
        "enabled": true,
        "allowed_tools": ["tool1", "tool2"]
      }
    }
  ]
}

After (current):

{
  "model": "claude-opus-4-7",
  "max_tokens": 1000,
  "messages": [
    // ...
  ],
  "mcp_servers": [
    {
      "type": "url",
      "url": "https://mcp.example.com/sse",
      "name": "example-mcp",
      "authorization_token": "YOUR_TOKEN"
    }
  ],
  "tools": [
    {
      "type": "mcp_toolset",
      "mcp_server_name": "example-mcp",
      "default_config": {
        "enabled": false
      },
      "configs": {
        "tool1": {
          "enabled": true
        },
        "tool2": {
          "enabled": true
        }
      }
    }
  ]
}

Common migration patterns

Old patternNew pattern
No tool_configuration (all tools enabled)MCPToolset with no default_config or configs
tool_configuration.enabled: falseMCPToolset with default_config.enabled: false
tool_configuration.allowed_tools: [...]MCPToolset with default_config.enabled: false and specific tools enabled in configs

Deprecated version: mcp-client-2025-04-04

This version is deprecated. Migrate to mcp-client-2025-11-20 using the preceding migration guide.

The previous version of the MCP connector included tool configuration directly in the MCP server definition:

{
  "mcp_servers": [
    {
      "type": "url",
      "url": "https://example-server.modelcontextprotocol.io/sse",
      "name": "example-mcp",
      "authorization_token": "YOUR_TOKEN",
      "tool_configuration": {
        "enabled": true,
        "allowed_tools": ["example_tool_1", "example_tool_2"]
      }
    }
  ]
}

Deprecated field descriptions

PropertyTypeDescription
tool_configurationobjectDeprecated: Use MCPToolset in the tools array instead
tool_configuration.enabledbooleanDeprecated: Use default_config.enabled in MCPToolset
tool_configuration.allowed_toolsarrayDeprecated: Use allowlist pattern with configs in MCPToolset

Was this page helpful?

  • Key features
  • Limitations
  • Using the MCP connector in the Messages API
  • Basic example
  • MCP server configuration
  • Field descriptions
  • MCP toolset configuration
  • Basic structure
  • Field descriptions
  • Tool configuration options
  • Configuration merging
  • Common configuration patterns
  • Enable all tools with default configuration
  • Allowlist: enable only specific tools
  • Denylist: disable specific tools
  • Mixed: allowlist with per-tool configuration
  • Validation rules
  • Response content types
  • MCP tool use block
  • MCP tool result block
  • Multiple MCP servers
  • Authentication
  • Obtaining an access token for testing
  • Using the access token
  • Client-side MCP helpers (TypeScript)
  • Installation
  • Available helpers
  • Use MCP tools
  • Use MCP prompts
  • Use MCP resources
  • Error handling
  • Data retention
  • Migration guide
  • Key changes
  • Migration steps
  • Common migration patterns
  • Deprecated version: mcp-client-2025-04-04
  • Deprecated field descriptions
client = anthropic.Anthropic()

response = client.beta.messages.create(
    model="claude-opus-4-7",
    max_tokens=1000,
    messages=[{"role": "user", "content": "What tools do you have available?"}],
    mcp_servers=[
        {
            "type": "url",
            "url": "https://example-server.modelcontextprotocol.io/sse",
            "name": "example-mcp",
            "authorization_token": "YOUR_TOKEN",
        }
    ],
    tools=[{"type": "mcp_toolset", "mcp_server_name": "example-mcp"}],
    betas=["mcp-client-2025-11-20"],
)

print(response)
cache_control
object
No
Prompt caching cache breakpoint configuration for this toolset.
access_token
  • Paste it into the authorization_token field in your MCP server configuration.