GPT Actions vs MCP: porównanie techniczne

Jakub Swistak
Opublikowano 10 min czytania
Diagram porównania technicznego architektur GPT Actions i MCP

OpenAI GPT Actions i Anthropic Model Context Protocol (MCP) rozwiązują ten sam podstawowy problem: pozwalają modelowi AI wywoływać zewnętrzne narzędzia i API podczas rozmowy. Robią to jednak na bardzo różne sposoby.

Ten wpis to techniczne porównanie obu podejść. Obejmuje architekturę, mechanikę protokołu, uwierzytelnianie, wykrywanie narzędzi oraz kompromisy, które mają znaczenie przy wyborze jednego z nich (lub używaniu obu).

Czym są GPT Actions?

GPT Actions to mechanizm OpenAI, który pozwala Custom GPT (oraz szerzej, asystentom zbudowanym przez OpenAI API) wywoływać zewnętrzne HTTP API. Koncepcja została udostępniona wraz z GPT Store pod koniec 2023 roku i wyewoluowała z wcześniejszego systemu ChatGPT Plugins.

Główna idea: dostarczasz specyfikację OpenAPI (w wersji 3.0 lub 3.1), która opisuje endpointy API, parametry i schematy odpowiedzi. System OpenAI parsuje tę specyfikację i przedstawia endpointy modelowi jako narzędzia możliwe do wywołania. Gdy model zdecyduje się wywołać jedno z nich, serwery OpenAI wykonują żądanie HTTP w imieniu użytkownika.

Oto minimalny schemat OpenAPI, który definiuje jedną akcję do wyszukiwania klienta po adresie email:

openapi: "3.1.0"
info:
  title: "API wyszukiwania klientów"
  version: "1.0.0"
servers:
  - url: "https://api.example.com"
paths:
  /customers/search:
    get:
      operationId: "searchCustomer"
      summary: "Wyszukaj klienta po adresie email"
      parameters:
        - name: "email"
          in: "query"
          required: true
          schema:
            type: "string"
            format: "email"
          description: "Adres email klienta"
      responses:
        "200":
          description: "Znaleziono klienta"
          content:
            application/json:
              schema:
                type: "object"
                properties:
                  id:
                    type: "string"
                  name:
                    type: "string"
                  email:
                    type: "string"
                  plan:
                    type: "string"

Wklejasz lub przesyłasz ten schemat do GPT Builder (albo odwołujesz się do niego przez URL), konfigurujesz uwierzytelnianie, a Custom GPT może od teraz wywoływać GET /customers/search?email=..., gdy model uzna to za istotne. (Tworzenie specyfikacji to część, którą można zautomatyzować: Quickchat AI na przykład generuje równoważną akcję na podstawie jednozdaniowego opisu, opierając się na aktualnej dokumentacji API.)

Kluczowe właściwości architektoniczne GPT Actions:

  • Wykonanie po stronie serwera: infrastruktura OpenAI wykonuje wychodzące wywołanie HTTP. Twoje API otrzymuje żądanie z zakresu adresów IP OpenAI, nie z przeglądarki użytkownika końcowego.
  • OpenAPI jako format schematu: model używa pól operationId, summary i description ze specyfikacji OpenAPI, aby zrozumieć, kiedy i jak wywołać każdy endpoint.
  • Tylko REST/HTTP: akcje są ograniczone do standardowych metod HTTP (GET, POST, PUT, DELETE, PATCH) przez HTTPS.
  • Opcje uwierzytelniania: OAuth 2.0, klucz API (wysyłany jako nagłówek lub parametr zapytania) albo brak uwierzytelniania. OpenAI obsługuje przepływ wymiany tokenu OAuth w imieniu użytkownika.
  • Statyczne definicje narzędzi: zestaw dostępnych akcji jest ustalany w czasie konfiguracji. Model nie może wykrywać nowych endpointów w czasie działania.

Czym jest MCP?

Model Context Protocol (MCP) to otwarty protokół, opublikowany przez Anthropic pod koniec 2024 roku, który standaryzuje sposób komunikacji aplikacji AI z zewnętrznymi narzędziami i źródłami danych. Nie jest powiązany z żadnym konkretnym modelem ani dostawcą.

Napisaliśmy kompletny przewodnik po tym, jak działa MCP, który omawia protokół od podstaw. W skrócie: MCP definiuje architekturę klient-serwer, w której aplikacja AI (klient MCP) łączy się z jednym lub kilkoma serwerami MCP, wykrywa dostępne narzędzia przez żądanie tools/list i wywołuje je przez komunikaty tools/call. Komunikacja używa JSON-RPC 2.0.

Oto to samo narzędzie do wyszukiwania klienta wyrażone jako definicja narzędzia MCP:

{
  "name": "search_customer",
  "description": "Wyszukaj klienta po adresie email",
  "inputSchema": {
    "type": "object",
    "properties": {
      "email": {
        "type": "string",
        "description": "Adres email klienta"
      }
    },
    "required": ["email"]
  }
}

Ta definicja znajduje się wewnątrz serwera MCP (małego programu, który opakowuje twoją logikę biznesową). Gdy klient MCP wysyła żądanie tools/call z name: "search_customer" i arguments: {"email": "user@example.com"}, serwer wykonuje kod stojący za tym narzędziem (wywołanie API, zapytanie do bazy danych, odczyt pliku) i zwraca wynik. Jeśli chcesz udostępnić asystenta AI, a nie surową logikę biznesową, możesz całkowicie pominąć pisanie serwera: twój Quickchat AI Agent może zostać udostępniony jako narzędzie MCP pod hostowanym adresem URL.

Porównanie architektur

Te dwa podejścia różnią się tym, gdzie działa kod, jak przepływa komunikacja i jakie abstrakcje udostępniają.

GPT Actions: scentralizowane, natywne dla HTTP

Użytkownik <-> ChatGPT (serwery OpenAI) --HTTPS--> Twój serwer API

Model i executor akcji działają razem po stronie OpenAI. Gdy model zdecyduje się wywołać akcję, backend OpenAI konstruuje żądanie HTTP na podstawie specyfikacji OpenAPI, wysyła je do twojego API, odbiera odpowiedź i przekazuje wynik z powrotem do modelu. Klient użytkownika (przeglądarka, aplikacja mobilna) nigdy nie komunikuje się bezpośrednio z twoim API.

Oznacza to, że:

  1. Twoje API musi być publicznie dostępne przez HTTPS (albo przynajmniej osiągalne z infrastruktury OpenAI).
  2. Opóźnienie obejmuje pełną rundę komunikacji z OpenAI do twojego serwera i z powrotem.
  3. Wszystkie dane żądania i odpowiedzi przechodzą przez serwery OpenAI.

MCP: zdecentralizowane, natywne dla protokołu

Użytkownik <-> Aplikacja AI (klient MCP) <--JSON-RPC--> Serwer MCP <-> Twoje API / DB / usługa

Klient MCP działa tam, gdzie działa aplikacja AI. W przypadku Claude Desktop jest to maszyna użytkownika. W przypadku hostowanego w chmurze agenta AI (takiego jak Quickchat AI) klient MCP działa na backendzie agenta. Serwer MCP może działać lokalnie (komunikując się przez stdio), w tej samej sieci albo zdalnie przez HTTP z Server-Sent Events (SSE) lub nowszym transportem Streamable HTTP.

Oznacza to, że:

  1. Serwery MCP mogą uzyskiwać dostęp do lokalnych zasobów (plików, baz danych, usług localhost), które nie są wystawione do publicznego internetu.
  2. Komunikacja jest dwukierunkowa. Serwery mogą wysyłać powiadomienia do klientów (np. gdy zmieni się zasób).
  3. Protokół jest niezależny od transportu. Działa przez potoki stdio, SSE albo zwykły HTTP.

Tabela porównawcza

WymiarGPT ActionsMCP
Vendor lock-inTylko OpenAI. Działa wyłącznie w ChatGPT i OpenAI API.Niezależne od dostawcy. Obsługiwane przez Claude, Cursor, VS Code, Windsurf, Quickchat AI i inne.
ProtokółOpenAPI 3.x przez REST/HTTP.JSON-RPC 2.0 przez konfigurowalne transporty.
TransportTylko HTTPS. Twoje API musi być publicznie osiągalne.stdio (lokalnie), SSE (zdalnie), Streamable HTTP (zdalnie). Lokalne serwery nie potrzebują publicznego endpointu.
UwierzytelnianieOAuth 2.0, klucz API (nagłówek lub parametr zapytania) albo brak. Zarządzane przez OpenAI.Oparte na tokenach (tokeny Bearer w nagłówkach), niestandardowe nagłówki albo brak. Zarządzane przez aplikację kliencką.
Wykrywanie narzędziStatyczne. Przesyłasz lub linkujesz schemat OpenAPI w czasie konfiguracji. Model widzi to, co jest w specyfikacji.Dynamiczne. Klient wysyła tools/list w czasie działania, a serwer odpowiada aktualnie dostępnymi narzędziami. Narzędzia mogą zmieniać się między sesjami.
Format schematu narzędziaDefinicje operacji OpenAPI (ścieżki, metody, parametry, ciała żądań, schematy odpowiedzi).JSON Schema dla parametrów wejściowych. Definicje narzędzi obejmują nazwę, opis i inputSchema.
Miejsce wykonaniaSerwery OpenAI wykonują wywołanie HTTP.Klient MCP (albo serwer) wykonuje wywołanie. Lokalizacja zależy od tego, gdzie działają klient i serwer.
DwukierunkowośćJednokierunkowe. Model wywołuje twoje API, twoje API nie może wypychać danych poza odpowiedzią HTTP.Dwukierunkowe. Serwery mogą wysyłać powiadomienia i zdarzenia zmiany zasobów do klientów.
Zarządzanie stanemBezstanowe żądania HTTP. Brak trwałego połączenia między wywołaniami.Sesje stanowe. Połączenie klient-serwer utrzymuje się przez wiele wywołań narzędzi w ramach sesji.
EkosystemZamknięty. Format specyfikacji (OpenAPI) jest otwarty, ale środowisko wykonawcze jest własnościowe.Otwarty. Specyfikacja protokołu jest publiczna. Każdy może budować klientów i serwery.
Format odpowiedziStandardowe odpowiedzi HTTP (JSON, tekst itd.) parsowane przez OpenAI.Strukturyzowane bloki treści MCP (tekst, obrazy, osadzone zasoby).

Szczegóły techniczne: przykładowa integracja

Aby pokazać różnice konkretnie, rozważ częste zadanie: zapytanie do bazy PostgreSQL o zamówienia klienta i zwrócenie wyników użytkownikowi.

Podejście GPT Actions

Musisz zbudować i hostować HTTP API przed swoją bazą danych:

# Serwer API Flask (uproszczony)
from flask import Flask, request, jsonify
import psycopg2

app = Flask(__name__)

@app.route("/orders", methods=["GET"])
def get_orders():
    customer_email = request.args.get("email")
    conn = psycopg2.connect("dbname=mydb user=myuser")
    cur = conn.cursor()
    cur.execute(
        "SELECT order_id, product, amount, status FROM orders WHERE customer_email = %s",
        (customer_email,)
    )
    rows = cur.fetchall()
    cur.close()
    conn.close()
    return jsonify([
        {"order_id": r[0], "product": r[1], "amount": float(r[2]), "status": r[3]}
        for r in rows
    ])

Następnie piszesz specyfikację OpenAPI dla tego endpointu, wdrażasz API z TLS, konfigurujesz uwierzytelnianie i wklejasz specyfikację do GPT Builder. OpenAI obsługuje resztę: odczytuje specyfikację, pokazuje modelowi dostępną operację i wykonuje wywołanie HTTP, gdy jest potrzebne.

Cała konfiguracja obejmuje: działający serwer API, publiczny endpoint HTTPS, specyfikację OpenAPI i konfigurację GPT Action w interfejsie OpenAI.

Podejście MCP

Piszesz serwer MCP, który opakowuje to samo zapytanie do bazy danych:

# Serwer MCP używający Python SDK mcp
from mcp.server import Server
from mcp.types import Tool, TextContent
import psycopg2
import json

server = Server("orders-server")

@server.list_tools()
async def list_tools():
    return [
        Tool(
            name="get_orders",
            description="Wyszukaj zamówienia klienta po adresie email",
            inputSchema={
                "type": "object",
                "properties": {
                    "email": {
                        "type": "string",
                        "description": "Adres email klienta"
                    }
                },
                "required": ["email"]
            }
        )
    ]

@server.call_tool()
async def call_tool(name: str, arguments: dict):
    if name == "get_orders":
        conn = psycopg2.connect("dbname=mydb user=myuser")
        cur = conn.cursor()
        cur.execute(
            "SELECT order_id, product, amount, status FROM orders WHERE customer_email = %s",
            (arguments["email"],)
        )
        rows = cur.fetchall()
        cur.close()
        conn.close()
        results = [
            {"order_id": r[0], "product": r[1], "amount": float(r[2]), "status": r[3]}
            for r in rows
        ]
        return [TextContent(type="text", text=json.dumps(results, indent=2))]

Jeśli serwer MCP działa lokalnie (przez stdio), może łączyć się bezpośrednio z bazą danych na localhost lub w sieci lokalnej. Publiczny endpoint nie jest potrzebny. Jeśli serwer działa zdalnie, potrzebuje endpointu HTTP, ale komunikuje się przez JSON-RPC po SSE lub Streamable HTTP, a nie przez surowy REST.

Cała konfiguracja do użycia lokalnego obejmuje: skrypt serwera MCP, konfigurację klienta MCP (wskazującą polecenie serwera) i połączenie z bazą danych. Bez specyfikacji OpenAPI, bez certyfikatu TLS, bez publicznie wystawionego API.

Kluczowe różnice w praktyce

Ścieżka GPT Actions wymaga więcej infrastruktury (wdrożonej usługi HTTP), ale wykorzystuje istniejące wzorce REST API, które większość zespołów już zna. Jeśli masz już REST API, dodanie GPT Action sprowadza się głównie do napisania specyfikacji OpenAPI.

Ścieżka MCP wymaga mniej infrastruktury dla lokalnych przypadków użycia, ale wprowadza nowy protokół, którego zespół musi się nauczyć. Przy wdrożeniach zdalnych wymagania infrastrukturalne są podobne do GPT Actions, ale model komunikacji jest inny (trwałe połączenia, ramkowanie JSON-RPC, dwukierunkowe powiadomienia).

Jak Quickchat AI obsługuje oba podejścia

System AI Actions w Quickchat AI obsługuje dwa odrębne typy akcji, które odpowiadają tym dwóm paradygmatom: HTTP Request Actions i Remote MCP Actions.

HTTP Request Actions

HTTP Request Actions są koncepcyjnie podobne do GPT Actions. Konfigurujesz endpoint HTTP, metodę, nagłówki, parametry zapytania i szablon ciała JSON. AI Agent zbiera wartości parametrów z rozmowy, a backend Quickchat wykonuje żądanie HTTP po stronie serwera.

HTTP Request Action składa się z:

  • Adresu URL endpointu z placeholderami {{parameter}} (np. https://api.hubapi.com/crm/v3/objects/contacts)
  • Metody HTTP (GET, POST, PATCH, PUT, DELETE)
  • Nagłówków (w tym tokenów autoryzacyjnych podstawianych po stronie serwera)
  • Szablonu ciała JSON z placeholderami parametrów
  • Parametrów zapytania z placeholderami
  • Zestawu typowanych parametrów (string, number, boolean, float) z opisami, flagami wymagania i wartościami domyślnymi

W czasie wykonania AI określa, które parametry wypełnić na podstawie kontekstu rozmowy. Backend wstrzykuje wartości parametrów do adresu URL, nagłówków, ciała i query stringa, zastępując placeholdery {{param_name}}. Następnie wykonuje żądanie HTTP i zwraca odpowiedź do AI w celu interpretacji.

Szczegółowy przykład znajdziesz w naszym przewodniku po HubSpot AI Actions.

Remote MCP Actions

Remote MCP Actions łączą AI Agent z zewnętrznym serwerem MCP. Zamiast definiować pojedyncze endpointy HTTP, podajesz URL serwera MCP i opcjonalne dane uwierzytelniające (token bearer i/lub niestandardowe nagłówki). Backend Quickchat działa jako klient MCP: łączy się ze zdalnym serwerem, wykrywa dostępne narzędzia przez standardowe wywołanie protokołu tools/list i przedstawia je modelowi AI.

Konfiguracja wymaga:

  • URL serwera MCP (endpoint HTTPS obsługujący transport MCP Streamable HTTP lub SSE)
  • Opcjonalnego tokenu uwierzytelniającego
  • Opcjonalnych niestandardowych nagłówków
  • Listy wykrytych narzędzi z osobnymi przełącznikami active/inactive
  • Domyślnego ustawienia aktywacji narzędzi (czy nowo wykryte narzędzia są domyślnie aktywne)

Po połączeniu każde narzędzie udostępnione przez serwer MCP staje się dostępne dla AI Agent podczas rozmów. AI widzi nazwy i opisy narzędzi z odpowiedzi tools/list serwera MCP i może wywoływać je w razie potrzeby. Wybór narzędzi można zawęzić za pomocą konfiguracji allowed_tools, która pozwala włączać lub wyłączać konkretne narzędzia z serwera.

To podejście jest szczególnie przydatne przy integracji z usługami, które już publikują serwery MCP (takimi jak MCP Shopify), ponieważ możesz połączyć się z istniejącym serwerem zamiast budować osobne akcje HTTP dla każdego endpointu.

Kiedy użyć którego podejścia w Quickchat

Użyj HTTP Request Actions, gdy:

  • Integrujesz się z konkretnym endpointem REST API
  • Chcesz mieć precyzyjną kontrolę nad formatem żądania (nagłówki, struktura ciała, parametry zapytania)
  • API nie ma opublikowanego serwera MCP
  • Potrzebujesz wstrzykiwania danych uwierzytelniających po stronie serwera (np. tokenów OAuth dla HubSpot, Zendesk itd.)

Użyj Remote MCP Actions, gdy:

  • Usługa publikuje serwer MCP
  • Chcesz połączyć wiele narzędzi z jednej usługi w jednej akcji
  • Chcesz dynamicznego wykrywania narzędzi (narzędzia dostępne dla AI mogą zmieniać się wraz z aktualizacjami serwera MCP)
  • Budujesz system multi-agent, w którym jedno AI deleguje zadania do innego przez MCP

Zalety i wady

GPT Actions

Zalety:

  • Znana technologia. Jeśli masz istniejące REST API, masz już większość tego, czego potrzebujesz. Pisanie specyfikacji OpenAPI jest dobrze udokumentowane, a narzędzia są dojrzałe.
  • Format OpenAPI jest szeroko przyjęty. Specyfikacje można automatycznie generować z wielu frameworków webowych (FastAPI, Express ze swagger-jsdoc, Spring Boot ze springdoc).
  • OpenAI obsługuje wykonanie żądania HTTP, terminację TLS i obsługę błędów w swojej infrastrukturze.
  • Obsługa OAuth 2.0 jest wbudowana, z automatycznym odświeżaniem tokenu.

Wady:

  • Ograniczenie do ekosystemu OpenAI. Akcji zbudowanej dla Custom GPT nie da się ponownie użyć z Claude, Gemini ani żadnym innym dostawcą modeli bez ponownej implementacji.
  • Twoje API musi być publicznie dostępne. Brak obsługi zasobów lokalnych lub w sieci prywatnej.
  • Brak dynamicznego wykrywania narzędzi. Dodanie nowego endpointu wymaga aktualizacji specyfikacji OpenAPI i ponownej konfiguracji GPT.
  • Tylko komunikacja jednokierunkowa. Twoje API nie może wypychać aktualizacji ani powiadomień z powrotem do modelu poza odpowiedziami HTTP.
  • Wszystkie dane przechodzą przez serwery OpenAI, co może być problemem przy wrażliwych obciążeniach.
  • Limity szybkości i timeouty wykonania są kontrolowane przez OpenAI, nie przez ciebie.

MCP

Zalety:

  • Niezależność od dostawcy. Ten sam serwer MCP działa z Claude, Cursor, Quickchat AI i każdym innym klientem implementującym protokół.
  • Obsługa zasobów lokalnych. Serwer MCP działający przez stdio może uzyskiwać dostęp do plików, baz danych i usług na lokalnej maszynie bez wystawiania czegokolwiek do internetu.
  • Dynamiczne wykrywanie narzędzi. AI może odpytać serwer o dostępne narzędzia w czasie działania. Narzędzia można dodawać, usuwać lub aktualizować bez ponownej konfiguracji klienta.
  • Komunikacja dwukierunkowa. Serwery mogą powiadamiać klientów o zmianach (np. plik został zmodyfikowany, utworzono nowy rekord).
  • Sesje stanowe. Połączenie utrzymuje się przez wiele wywołań narzędzi w ramach rozmowy, co umożliwia workflow wymagające kontekstu z poprzednich wywołań.
  • Otwarta specyfikacja. Każdy może przejrzeć, zaimplementować lub rozszerzyć protokół.

Wady:

  • Młodszy ekosystem. Protokół opublikowano pod koniec 2024 roku, więc narzędzia, dokumentacja i wiedza społeczności nadal się rozwijają w porównaniu z OpenAPI.
  • Wymaga uruchomienia serwera MCP. W przypadku zdalnych wdrożeń oznacza to hostowanie dodatkowej usługi (choć może być lekka).
  • Brak ustandaryzowanej specyfikacji uwierzytelniania (stan na początek 2026 roku). Implementacje różnią się między uwierzytelnianiem opartym na tokenach, niestandardowymi nagłówkami i rozszerzeniami OAuth. Specyfikacja MCP Authorization nadal ewoluuje.
  • Ramkowanie JSON-RPC dodaje warstwę abstrakcji, która może być mniej znana zespołom przyzwyczajonym do REST.
  • Obsługa po stronie klientów jest zróżnicowana. Nie wszystkie aplikacje AI obsługują wszystkie transporty lub funkcje MCP.

Kiedy użyć którego

Wybór zależy od twoich ograniczeń:

Wybierz GPT Actions, jeśli:

  • Budujesz wyłącznie dla ChatGPT lub OpenAI API.
  • Masz już publiczne REST API ze specyfikacją OpenAPI.
  • Potrzebujesz, aby platforma obsłużyła za ciebie OAuth 2.0.
  • Chcesz najprostszą ścieżkę od „istniejącego API” do „narzędzia wywoływalnego przez AI”.

Wybierz MCP, jeśli:

  • Potrzebujesz, aby twoje narzędzia działały u wielu dostawców AI.
  • Chcesz udostępnić AI zasoby lokalne lub z sieci prywatnej bez ich upubliczniania.
  • Potrzebujesz dynamicznego wykrywania narzędzi, komunikacji dwukierunkowej lub sesji stanowych.
  • Budujesz architekturę multi-agent, w której różne systemy AI muszą ze sobą koordynować działania.

Użyj obu, jeśli:

  • Masz istniejące REST API, które chcesz udostępnić jako GPT Action użytkownikom ChatGPT, ale chcesz też opublikować serwer MCP dla Claude, Cursor i innych klientów. Bazowa logika biznesowa może być współdzielona, adapter protokołu to cienka warstwa na wierzchu.

Trend konwergencji

GPT Actions i MCP zaczęły od różnych filozofii projektowania (natywnie HTTP kontra natywnie protokół), ale różnica między nimi się zmniejsza.

OpenAI dodało obsługę MCP do Agents SDK w marcu 2025 roku, pozwalając agentom opartym na OpenAI łączyć się z serwerami MCP obok tradycyjnego function calling. Nie zastępuje to GPT Actions (które pozostają sposobem dodawania wywołań narzędzi do Custom GPT w ChatGPT), ale sygnalizuje, że OpenAI uznaje MCP za sensowny standard komunikacji agent-narzędzie.

Po stronie MCP protokół obsługuje teraz transport Streamable HTTP, dzięki któremu zdalne serwery MCP bardziej przypominają tradycyjne usługi HTTP. Serwer MCP za endpointem Streamable HTTP nie jest architektonicznie daleko od REST API, choć wewnętrznie nadal używa JSON-RPC, a nie konwencji REST.

Prawdopodobny wynik jest taki, że oba wzorce będą współistnieć. Schematy OpenAPI pozostaną standardowym sposobem opisywania REST API, a GPT Actions (lub podobne mechanizmy) nadal będą najprostszym pomostem między tymi API a modelami AI w ekosystemie OpenAI. MCP będzie rosnąć jako międzydostawcowy standard integracji narzędzi, szczególnie w architekturach agentowych i wielomodelowych. Platformy takie jak Quickchat AI, które obsługują zarówno HTTP Request Actions, jak i Remote MCP Actions, dają ci elastyczność użycia tego podejścia, które pasuje do konkretnej integracji.

Dalsza lektura