Anthropic Academy Courses My Profile Sign Out

MCP

У нас есть инструменты, навыки и коннекторы. Так почему же существует MCP? На первый взгляд это похоже на второй API, наложенный поверх существующего. Справедливый вопрос — и ответ заключается в том, кто поддерживает код интеграции.

Проблема поддержки

Допустим, вашему агенту нужно одновременно получить задачи из Asana, проверить Google Календарь и поискать в Slack. С помощью пользовательских инструментов вам придётся написать три интеграции. С этим можно справиться. А вот дальше начинаются проблемы: вам также нужно поддерживать эти интеграции каждый раз, когда один из этих сервисов меняет свой API, что происходит довольно часто. Поздравляем, теперь вы поддерживаете кучу обёрток для сторонних API.

MCP переносит эту задачу поддержки на плечи провайдера сервиса. Asana публикует MCP-сервер. Slack публикует. Google публикует. Каждый сервер предоставляет свои инструменты — с описаниями, схемами и аутентификацией — через стандартный протокол. Когда их API меняется, они обновляют свой сервер. Вам ничего не нужно менять.

Инструменты vs. навыки vs. MCP

Эти три функции решают разные задачи:

  • Инструменты подключают Claude к вашим внутренним системам — вашей базе данных, трекеру проектов, проприетарным API. Код принадлежит вам, поэтому и поддержка тоже ложится на вас.
  • Навыки учат Claude выполнять процедуры — ваш шаблон отчёта, чек-лист проверки. Навыки — это инструкции, а не обязательно интеграции.
  • MCP подключает Claude к сторонним сервисам, где провайдер сервиса поддерживает интеграцию. Вы не пишете обёртку для Asana — это делает Asana.

Кратко: инструменты — для ваших данных, навыки — для ваших процессов, а MCP — для всего остального.

Подключение к MCP-серверу

Самый простой способ понять, как работает MCP, — указать Claude на любой MCP-сервер и дать ему возможность самостоятельно обнаружить, что там есть. В этом примере мы будем использовать Linear MCP-сервер, а данные для подключения и токен аутентификации сохраним в файле .env.

В запросе работают две части. Ключ `mcp_servers` объявляет подключение — тип, URL, имя для обращения к нему и, при необходимости, токен аутентификации. Затем инструмент с типом `mcp_toolset` настраивает, какие инструменты из этого сервера может использовать Claude. По умолчанию используются все, но если вы хотите ограничить доступ, это делается здесь.

```python

import os

import anthropic

client = anthropic.Anthropic()

response = client.beta.messages.create(

model="claude-opus-4-8",

max_tokens=1000,

messages=[

],

mcp_servers=[

{

"type": "url",

"url": "https://mcp.linear.app/mcp", (внешняя ссылка отключена)

"name": "linear",

"authorization_token": os.environ["LINEAR_MCP_TOKEN"],

}

],

tools=[

{

"type": "mcp_toolset",

"mcp_server_name": "linear",

}

],

betas=["mcp-client-2025-11-20"],

)

print(response)

```

Обратите внимание, что мы не написали ни одной схемы инструмента. Claude самостоятельно извлекает сервер, получает список инструментов и их схемы, а затем выбирает подходящий для запроса. На момент написания этого урока MCP-коннектор находится в бета-версии — обратите внимание на бета-заголовок в запросе.

Запустите его, и если ваш MCP URL указывает на MCP-эндпоинт Linear, Claude перечислит инструменты Linear и затем вызовет один из них. То же самое работает практически с любым соответствующим сервером. Мы не определили ни одного инструмента. Мы не написали клиент для Linear. За поддержку этого отвечает Linear.

Фильтрация инструментов, к которым может обращаться Claude

MCP-серверы часто предоставляют множество инструментов — и не всегда нужно, чтобы Claude использовал все из них. Возможно, вы не хотите, чтобы у него были права на запись, или вам просто не нужно, чтобы все эти определения инструментов занимали место в контексте.

Решение: отключите всё по умолчанию, а затем включите только те инструменты, которые вам нужны. Вот этот шаблон с Slack MCP-сервером:

```python

tools=[

{

"type": "mcp_toolset",

"mcp_server_name": "slack",

"default_config": {

"enabled": False,

},

"configs": {

"search": {

"enabled": True,

},

"list_channels": {

"enabled": True,

},

},

}

]

```

Теперь Claude может искать в Slack и перечислять каналы, но не может отправлять сообщения или удалять их. Это полезно, когда вы доверяете сервису для чтения, но не хотите, чтобы Claude случайно писал от вашего имени.

Итоги

  • MCP существует, чтобы вам не приходилось поддерживать интеграции, которые уже создали другие. Провайдер сервиса публикует MCP-сервер и поддерживает его в актуальном состоянии — вам не нужно ничего менять, когда меняется их API.
  • Выбирайте подходящий инструмент для задачи: инструменты — для ваших данных, навыки — для ваших процессов, MCP — для сторонних сервисов.
  • Объявите подключение в `mcp_servers` (тип, URL, имя, необязательный токен аутентификации) и предоставьте доступ с помощью записи `mcp_toolset` в `tools`. Claude самостоятельно извлекает сервер и обнаруживает инструменты — не нужно писать схемы.
  • MCP-коннектор в настоящее время находится в бета-версии, поэтому не забудьте указать бета-заголовок в своих запросах.
  • Посетите [modelcontextprotocol.io](https://modelcontextprotocol.io (внешняя ссылка отключена)), чтобы ознакомиться со списком доступных серверов и узнать больше о протоколе.

We have tools, skills, and connectors. So why does MCP exist? At first glance it looks like a second API stacked on top of the API. Fair question — and the answer comes down to who maintains the integration code.

The maintenance problem

Say your agent needs to pull tasks from Asana, check a Google Calendar, and search Slack — all in one go. With custom tools, you have to write three integrations. That part is doable. The painful part comes after: you also have to maintain those integrations every time one of those services changes its API, which happens often. Congratulations, you're now maintaining a pile of third-party API wrappers.

MCP shifts that maintenance to the service provider. Asana publishes an MCP server. Slack publishes one. Google publishes one. Each server exposes its own tools — with descriptions, schemas, and authentication — through a standard protocol. When their API changes, they update their server. You change nothing.

Tools vs. skills vs. MCP

These three features do different jobs:

  • Tools connect Claude to your internal systems — your database, your project tracker, your proprietary APIs. You own the code, so you also own the maintenance.
  • Навыки teach Claude a procedure — your report template, your review checklist. Skills are instructions, not necessarily integrations.
  • MCP connects Claude to third-party services, where the service provider maintains the integration. You don't write the Asana wrapper — Asana did.

The short version: tools are for your stuff, skills are for your processes, and MCP is for everyone else's stuff.

Comparison cards for Tools, Skills, and MCP, with the MCP card highlighted: connects Claude to third-party services, maintained by the service provider

Connecting to an MCP server

The cleanest way to get a feel for MCP is to point Claude at any MCP server and let it discover what's there. For this example, we'll use the Linear MCP server, with the connection details and auth token stored in a .env file.

Two pieces work together in the request. The mcp_servers key declares the connection — a type, a URL, a name to refer to it by, and optionally an auth token. Then a tool with the type mcp_toolset configures which tools Claude can use from that server. The default is all of them, but if you want to scope it down, this is where you do it.

import os
import anthropic

client = anthropic.Anthropic()

response = client.beta.messages.create(
    model="claude-opus-4-8",
    max_tokens=1000,
    messages=[
        {"role": "user", "content": "What tools do you have available?"}
    ],
    mcp_servers=[
        {
            "type": "url",
            "url": "https://mcp.linear.app/mcp",
            "name": "linear",
            "authorization_token": os.environ["LINEAR_MCP_TOKEN"],
        }
    ],
    tools=[
        {
            "type": "mcp_toolset",
            "mcp_server_name": "linear",
        }
    ],
    betas=["mcp-client-2025-11-20"],
)

print(response)

Notice that we never wrote a single tool schema. Claude introspects the server, gets the list of tools and their schemas back, and picks the right one for the prompt. As of this lesson, the MCP connector is in beta — note the beta header in the request.

Run it, and if your MCP URL points at Linear's MCP endpoint, Claude lists Linear's tools and then calls one. The same works for basically any compliant server. We didn't define a single tool. We didn't write a Linear client. Linear is maintaining that.

Terminal output listing the Linear MCP server's discovered tools, followed by Claude noting they are Linear project management tools and choosing which to call

Filtering which tools Claude can use

MCP servers often expose many, many tools — and you don't always want Claude using all of them. Maybe you don't want it to have write permissions, or you just don't want all those tool definitions taking up context.

The fix: disable everything by default, then enable only the specific tools you want. Here's that pattern with a Slack MCP server:

tools=[
    {
        "type": "mcp_toolset",
        "mcp_server_name": "slack",
        "default_config": {
            "enabled": False,
        },
        "configs": {
            "search_messages": {"enabled": True},
            "list_channels": {"enabled": True},
        },
    }
]

Now Claude can search Slack and list channels, but it can't post or delete. This is useful when you trust a service for reads but don't want Claude writing on your behalf by accident.

Recap

  • MCP exists so you don't have to maintain integrations someone else has already built. The service provider publishes an MCP server and keeps it up to date — you change nothing when their API changes.
  • Pick the right feature for the job: tools for your data, skills for your process, MCP for third-party services.
  • Declare the connection in mcp_servers (type, URL, name, optional auth token) and grant access with an mcp_toolset entry in tools. Claude introspects the server and discovers the tools on its own — no schemas to write.
  • Scope down access by setting default_config: {"enabled": False} and enabling specific tools in configs — handy for keeping a server read-only.
  • The MCP connector is currently in beta, so include the beta header on your requests.
  • Visit modelcontextprotocol.io for the list of available servers and to learn more about the protocol.