🔥 5 promocji w KinetyceGemini Pro 170 zł -91%Adobe CC 169 zł -84%Brain.fm 109 zł -70%i 2 więcej do 13.09 Zobacz →
Przejdź do treści
Claude

Claude API i MCP - budowanie agentów AI z narzędziami

Kompletny przewodnik po tworzeniu inteligentnych agentów AI z Claude API. Dowiedz się jak wykorzystać function calling, MCP servers i structured output do budowania zaawansowanych aplikacji.

9 min czytania
feat-20260214-095445-89

👁 126 przeczytań

// w skrócie
  • MCP (Model Context Protocol) to standard Anthropic łączący Claude z zewnętrznymi narzędziami, bazami danych, systemami CRM i urządzeniami IoT w czasie rzeczywistym.
  • Do budowania agentów AI używa się trzech modeli: Opus 4.6 do wymagających zadań, Sonnet 4.5 jako rozwiązania uniwersalnego oraz Haiku 4.5 do szybkich i tanich operacji.
  • Structured Output wymaga zdefiniowania schematu danych w system prompt i pozwala odbierać odpowiedzi Claude w formacie JSON lub XML, co ułatwia integrację z systemami zewnętrznymi.

Wprowadzenie do Claude API i MCP

Model Context Protocol (MCP) to rewolucyjny standard Anthropic, który otwiera przed Claude dostęp do zewnętrznych narzędzi i źródeł danych. W połączeniu z Claude API pozwala na budowanie prawdziwie użytecznych agentów AI, które mogą wykonywać złożone zadania w realnym świecie. W tym tutorialu nauczysz się krok po kroku tworzyć takie systemy, wykorzystując Python SDK oraz najnowsze możliwości Claude Opus 4.6.

MCP działa jako pomost między modelem językowym a zewnętrznymi aplikacjami. Claude może w czasie rzeczywistym łączyć się z bazami danych, systemami CRM, narzędziami programistycznymi czy nawet urządzeniami IoT. To oznacza koniec ery chatbotów ograniczonych tylko do tekstu - tworzymy asystentów zdolnych do rzeczywistej pracy.

Przygotowanie środowiska Python

Rozpoczynamy od instalacji niezbędnych bibliotek. Claude API wymaga najnowszej wersji oficjalnego SDK oraz dodatkowych pakietów do obsługi MCP. Instalacja jest prosta, ale kluczowe jest zachowanie odpowiednich wersji kompatybilnych z najnowszymi funkcjonalnościami.

pip install anthropic>=0.18.0 mcp-client>=2.1.0
pip install pydantic>=2.0.0 asyncio-mqtt sqlite3

import anthropic
import asyncio
from mcp_client import MCPClient
from pydantic import BaseModel
from typing import Dict, List, Optional

Po instalacji pakietów konieczne jest utworzenie konta w Anthropic Console i wygenerowanie klucza API. Claude API oferuje różne modele - Opus 4.6 do najbardziej wymagających zadań, Sonnet 4.5 jako uniwersalne rozwiązanie, oraz Haiku 4.5 do szybkich i tanich operacji. Wybór modelu wpływa zarówno na jakość odpowiedzi, jak i koszty.

✅ Przechowuj klucz API w zmiennej środowiskowej ANTHROPIC_API_KEY zamiast hardkodować go w skryptach - to podstawa bezpieczeństwa.

Podstawy function calling w Claude

Function calling to mechanizm pozwalający Claude’owi wywoływać zewnętrzne funkcje na podstawie analizy kontekstu rozmowy. Model samodzielnie decyduje, kiedy i z jakimi parametrami uruchomić daną funkcję, co czyni go prawdziwie autonomicznym agentem.

client = anthropic.Anthropic(
api_key=”your-api-key-here”
)

# Definicja narzędzia do sprawdzania pogody
weather_tool = {
„name”: „get_weather”,
„description”: „Pobiera aktualną pogodę dla podanego miasta”,
„input_schema”: {
„type”: „object”,
„properties”: {
„city”: {„type”: „string”, „description”: „Nazwa miasta”},
„units”: {„type”: „string”, „enum”: [„celsius”, „fahrenheit”]}
},
„required”: [„city”]
}
}

Schemat narzędzia definiuje jego sygnaturę - nazwę, opis oraz parametry wejściowe. Claude analizuje te informacje i używa ich do podejmowania decyzji o wywołaniu funkcji. Kluczowe jest precyzyjne opisanie zachowania narzędzia oraz typów parametrów - im bardziej szczegółowy opis, tym lepiej Claude rozumie, kiedy danej funkcji użyć.

def get_weather(city: str, units: str = „celsius”) -> str:
# Symulacja API pogodowego
weather_data = {
„Warszawa”: {„temp”: 15, „condition”: „słonecznie”},
„Kraków”: {„temp”: 12, „condition”: „pochmurnie”}
}

if city in weather_data:
data = weather_data[city]
return f”W {city}: {data[’temp’]}°{’C’ if units == 'celsius’ else 'F’}, {data[’condition’]}”
else:
return f”Brak danych pogodowych dla miasta {city}”

# Wywołanie z function calling
response = client.messages.create(
model=”claude-3-opus-20240229″,
max_tokens=1024,
tools=[weather_tool],
messages=[{„role”: „user”, „content”: „Jaka jest pogoda w Warszawie?”}]
)

Structured Output - kontrola formatu odpowiedzi

Structured Output to funkcjonalność pozwalająca na wymuszenie określonego formatu odpowiedzi od Claude’a. Zamiast parsować niestrukturalny tekst, możemy otrzymywać dane w postaci JSON, XML czy innych ustandaryzowanych formatów. To kluczowe dla integracji z systemami zewnętrznymi.

from pydantic import BaseModel
from typing import List

class TaskAnalysis(BaseModel):
priority: str # „high”, „medium”, „low”
category: str
estimated_hours: float
required_skills: List[str]
dependencies: List[str]

system_prompt = „””
Analizujesz zadania projektowe i zwracasz ustrukturalizowane dane.
Odpowiadaj WYŁĄCZNIE w formacie JSON zgodnym ze schematem TaskAnalysis.
Nie dodawaj komentarzy ani dodatkowego tekstu.
„””

user_message = „Stwórz aplikację mobilną do zarządzania budżetem domowym z synchronizacją w chmurze”

response = client.messages.create(
model=”claude-3-sonnet-20240229″,
max_tokens=512,
system=system_prompt,
messages=[{„role”: „user”, „content”: user_message}]
)

Structured Output wymaga precyzyjnego zdefiniowania schematu danych oraz jasnych instrukcji w system prompt. Claude musi dokładnie wiedzieć, jakiego formatu oczekujemy oraz jakie wartości są dozwolone w poszczególnych polach. Wykorzystanie biblioteki Pydantic znacznie ułatwia walidację otrzymanych danych.

Konfiguracja MCP Server

MCP Server to komponent odpowiedzialny za udostępnianie narzędzi i zasobów dla Claude’a. Może to być prosty serwer HTTP obsługujący konkretne API, lub złożony system zarządzający bazami danych i integracjami zewnętrznymi. Konfiguracja wymaga zdefiniowania dostępnych narzędzi oraz sposobu komunikacji.

import json
from mcp_client import MCPClient

# Konfiguracja MCP Server
mcp_config = {
„servers”: {
„database_server”: {
„command”: „python”,
„args”: [„mcp_servers/database_server.py”],
„env”: {„DATABASE_URL”: „sqlite:///app.db”}
},
„file_server”: {
„command”: „python”,
„args”: [„mcp_servers/file_server.py”],
„env”: {„WORKSPACE_PATH”: „/workspace”}
}
}
}

# Inicjalizacja klienta MCP
async def init_mcp_client():
client = MCPClient()
await client.connect(„database_server”)
await client.connect(„file_server”)
return client

MCP umożliwia podłączenie wielu serwerów jednocześnie, każdy oferujący różne zestawy narzędzi. Database server może obsługiwać zapytania SQL, file server operacje na plikach, a API server komunikację z zewnętrznymi serwisami. Claude automatycznie wybiera odpowiednie narzędzia na podstawie kontekstu zadania.

✅ Zawsze testuj połączenia MCP w izolowanym środowisku przed wdrożeniem produkcyjnym - błędy konfiguracji mogą powodować nieprzewidywalne zachowania agenta.

Budowanie agenta do analizy danych

Praktyczny przykład agenta wykorzystującego wszystkie omówione technologie. Nasz agent będzie analizował dane sprzedażowe, generował raporty i odpowiadał na pytania biznesowe, korzystając z bazy danych oraz zewnętrznych API.

class SalesAnalysisAgent:
def __init__(self, anthropic_client, mcp_client):
self.claude = anthropic_client
self.mcp = mcp_client
self.tools = [
{
„name”: „query_sales_data”,
„description”: „Wykonuje zapytania SQL do bazy danych sprzedażowych”,
„input_schema”: {
„type”: „object”,
„properties”: {
„query”: {„type”: „string”, „description”: „Zapytanie SQL”},
„date_range”: {„type”: „string”, „description”: „Zakres dat (YYYY-MM-DD to YYYY-MM-DD)”}
},
„required”: [„query”]
}
},
{
„name”: „generate_chart”,
„description”: „Tworzy wykresy na podstawie danych”,
„input_schema”: {
„type”: „object”,
„properties”: {
„chart_type”: {„type”: „string”, „enum”: [„bar”, „line”, „pie”]},
„data”: {„type”: „array”, „description”: „Dane do wizualizacji”},
„title”: {„type”: „string”, „description”: „Tytuł wykresu”}
},
„required”: [„chart_type”, „data”, „title”]
}
}
]

Agent wykorzystuje dwa główne narzędzia - dostęp do bazy danych oraz generator wykresów. Claude analizuje pytania użytkownika i automatycznie decyduje, które narzędzia wykorzystać oraz w jakiej kolejności. Może najpierw pobrać dane z bazy, następnie przeanalizować je i wygenerować odpowiedni wykres.

async def analyze_sales(self, question: str):
system_prompt = „””
Jesteś ekspertem od analizy danych sprzedażowych.
Masz dostęp do bazy danych i narzędzi do wizualizacji.

Gdy otrzymasz pytanie:
1. Zastanów się jakie dane są potrzebne
2. Wykonaj odpowiednie zapytania SQL
3. Przeanalizuj wyniki
4. Wygeneruj wizualizacje jeśli to pomoże
5. Przedstaw wnioski w czytelny sposób

Zawsze uzasadniaj swoje analizy konkretnymi danymi.
„””

response = await self.claude.messages.create(
model=”claude-3-opus-20240229″,
max_tokens=2048,
system=system_prompt,
tools=self.tools,
messages=[{„role”: „user”, „content”: question}]
)

return response

Obsługa błędów i walidacja

Robustność agenta zależy od właściwej obsługi błędów oraz walidacji danych. Claude może popełniać błędy w wywołaniach funkcji, zewnętrzne API mogą być niedostępne, a dane wejściowe mogą być nieprawidłowe. Kompleksowy system obsługi błędów jest nieodzowny w aplikacjach produkcyjnych.

import logging
from typing import Optional

class ErrorHandlingAgent:
def __init__(self, claude_client, max_retries=3):
self.claude = claude_client
self.max_retries = max_retries
self.logger = logging.getLogger(__name__)

async def safe_function_call(self, function_name: str, parameters: dict) -> Optional[dict]:
„””Bezpieczne wywołanie funkcji z obsługą błędów”””
for attempt in range(self.max_retries):
try:
# Walidacja parametrów przed wywołaniem
validated_params = self.validate_parameters(function_name, parameters)
result = await self.execute_function(function_name, validated_params)
return result

except ValidationError as e:
self.logger.error(f”Błąd walidacji parametrów: {e}”)
return {„error”: f”Nieprawidłowe parametry: {str(e)}”}

except TimeoutError:
self.logger.warning(f”Timeout przy próbie {attempt + 1}”)
if attempt == self.max_retries - 1:
return {„error”: „Przekroczono limit czasu wykonania”}
await asyncio.sleep(2 ** attempt) # Exponential backoff

except Exception as e:
self.logger.error(f”Nieoczekiwany błąd: {e}”)
return {„error”: f”Błąd wykonania: {str(e)}”}

System retry z exponential backoff pozwala na radzenie sobie z przejściowymi problemami sieciowymi. Walidacja parametrów przed wywołaniem funkcji zapobiega błędom w API. Szczegółowe logowanie ułatwia debugowanie problemów w środowisku produkcyjnym.

Zaawansowane wzorce - Chain of Thought

Chain of Thought to technika pozwalająca Claude’owi na przedstawienie procesu myślowego podczas rozwiązywania złożonych problemów. Agent krok po kroku wyjaśnia swoje rozumowanie, co czyni jego decyzje bardziej transparentnymi i pozwala na lepszą kontrolę nad procesem.

chain_of_thought_prompt = „””
Jesteś agentem do planowania projektów. Gdy otrzymasz opis zadania:

1. Przeanalizuj wymagania i zidentyfikuj główne komponenty
2. Określ zależności między zadaniami
3. Oszacuj czas wykonania poszczególnych etapów
4. Zidentyfikuj potencjalne ryzyka i wąskie gardła
5. Zaproponuj harmonogram z buforami czasowymi

Następnie przedstaw szczegółowy plan z uzasadnieniem każdego kroku.
Korzystaj z dostępnych narzędzi do zarządzania projektami.

Pamiętaj: lepiej przewidzieć więcej czasu niż nie dotrzymać terminów.
„””

user_query = „Zaplanuj migrację 500 użytkowników z systemu legacy do nowej platformy CRM”

response = await client.messages.create(
model=”claude-3-opus-20240229″,
max_tokens=3000,
system=chain_of_thought_prompt,
tools=project_management_tools,
messages=[{„role”: „user”, „content”: user_query}]
)

Tagi XML jak „ strukturyzują proces myślowy Claude’a i zmuszają go do systematycznego podejścia do problemu. Taka konstrukcja promptu znacznie poprawia jakość planowania oraz pozwala na łatwiejsze śledzenie logiki agenta.

✅ Użyj Chain of Thought dla złożonych zadań wymagających wieloetapowego rozumowania - jakość odpowiedzi znacznie wzrasta kosztem nieco dłuższego czasu generowania.

# Implementacja multi-step reasoning
class ReasoningAgent:
async def solve_complex_problem(self, problem: str):
steps = [
„analysis”, # Analiza problemu
„planning”, # Planowanie rozwiązania
„execution”, # Wykonanie kroków
„validation” # Walidacja wyników
]

context = {„problem”: problem, „intermediate_results”: []}

for step in steps:
step_prompt = self.generate_step_prompt(step, context)

response = await self.claude.messages.create(
model=”claude-3-sonnet-20240229″,
max_tokens=1024,
system=step_prompt,
tools=self.get_tools_for_step(step),
messages=self.build_context_messages(context)
)

context[„intermediate_results”].append({
„step”: step,
„result”: response.content[0].text,
„tool_calls”: [call for call in response.content if call.type == „tool_use”]
})

return context

Monitoring i optymalizacja wydajności

Agenci AI w środowisku produkcyjnym wymagają stałego monitoringu wydajności oraz kosztów. Claude API oferuje szczegółowe metryki użycia, które pozwalają na optymalizację zarówno pod kątem szybkości działania, jak i kosztów operacyjnych.

import time
import asyncio
from dataclasses import dataclass
from typing import List

@dataclass
class PerformanceMetrics:
request_count: int
total_tokens: int
total_cost: float
average_response_time: float
error_rate: float

class MonitoringAgent:
def __init__(self, claude_client):
self.claude = claude_client
self.metrics = PerformanceMetrics(0, 0, 0.0, 0.0, 0.0)
self.response_times = []
self.error_count = 0

async def tracked_request(self, model: str, messages: list, tools: list = None):
start_time = time.time()

try:
response = await self.claude.messages.create(
model=model,
max_tokens=1024,
messages=messages,
tools=tools or []
)

# Aktualizacja metryk
response_time = time.time() - start_time
self.response_times.append(response_time)

self.metrics.request_count += 1
self.metrics.total_tokens += response.usage.input_tokens + response.usage.output_tokens
self.metrics.total_cost += self.calculate_cost(response.usage, model)
self.metrics.average_response_time = sum(self.response_times) / len(self.response_times)

return response

except Exception as e:
self.error_count += 1
self.metrics.error_rate = self.error_count / (self.metrics.request_count + self.error_count)
raise e

Monitoring obejmuje śledzenie wykorzystania tokenów, kosztów API, czasów odpowiedzi oraz częstotliwości błędów. Te dane są kluczowe dla optymalizacji - pozwalają identyfikować bottlenecki wydajnościowe oraz przewidywać koszty skalowania systemu.

Google · Twoje źródłaPromptowy wyżej w Twoim Google - jednym kliknięciemDodaj do preferowanych źródeł

Podsumowanie

Claude API w połączeniu z MCP otwiera ogromne możliwości budowania inteligentnych agentów AI zdolnych do rzeczywistej pracy. Kluczem do sukcesu jest właściwe wykorzystanie function calling dla integracji z zewnętrznymi narzędziami, structured output dla kontroli formatów danych, oraz Chain of Thought dla złożonych procesów myślowych. Pamiętaj o implementacji robust error handling oraz ciągłym monitorowaniu wydajności - to fundamenty aplikacji produkcyjnych. Warto zacząć od prostych przypadków użycia, stopniowo dodając kolejne narzędzia i funkcjonalności. Eksperymentuj z różnymi modelami Claude’a w zależności od wymagań - Opus dla najbardziej złożonych zadań, Sonnet jako uniwersalne rozwiązanie, Haiku dla szybkich operacji.

// Newsletter

Cały tydzień w AI, w jednym mailu

Wybrane premiery, narzędzia i analizy. Raz w tygodniu, prosto do skrzynki.

Zapisz się za darmo →
Za darmo. Wypisujesz się jednym kliknięciem.

Najczęstsze pytania

Co to jest Model Context Protocol i do czego służy w Claude API?

MCP to standard stworzony przez Anthropic, który pozwala Claude łączyć się z zewnętrznymi aplikacjami i źródłami danych. Dzięki niemu agent może w czasie rzeczywistym korzystać z baz danych, systemów CRM, narzędzi programistycznych czy urządzeń IoT.

Jak zainstalować środowisko Python do pracy z Claude API i MCP?

Wystarczy uruchomić pip install anthropic>=0.18.0 mcp-client>=2.1.0 oraz pip install pydantic>=2.0.0 asyncio-mqtt sqlite3. Po instalacji należy wygenerować klucz API w Anthropic Console i przechowywać go w zmiennej środowiskowej ANTHROPIC_API_KEY.

Jak działa function calling w Claude i kiedy model wywołuje funkcje?

Claude samodzielnie decyduje, kiedy i z jakimi parametrami uruchomić daną funkcję, analizując kontekst rozmowy oraz schemat narzędzia zawierający jego nazwę, opis i typy parametrów. Im bardziej szczegółowy opis narzędzia, tym lepiej model rozumie, kiedy go użyć.

Ile serwerów MCP można podłączyć jednocześnie do agenta AI?

Można podłączyć wiele serwerów MCP jednocześnie, na przykład database server do zapytań SQL, file server do operacji na plikach i API server do komunikacji z zewnętrznymi serwisami. Claude automatycznie wybiera odpowiednie narzędzia na podstawie kontekstu zadania.

// czytaj też

Podobne tematy na Promptowym

Piotr Olszewski

Piotr Olszewski

ADMINISTRATOR

Piotr Olszewski - twórca i autor Promptowego, polskiego serwisu o sztucznej inteligencji. Codziennie śledzi premiery modeli, narzędzia i regulacje AI, i tłumaczy je prostym, konkretnym językiem.

// mapa strony
🛒 Sklep Kinetyka Google AI Gemini Pro 170 zł CapCut Pro 460 zł/rok Lovable Pro 336 zł/rok Zobacz wszystko →
promptowy w liczbach 0tekstów w archiwum0newsów z ostatnich 7 dni0modeli wideo w obserwatorium0zagadek w grach
× powiększenie