MCP — Model Context Protocol

Serwer MCP udostępnia bramkę CMS jako narzędzia dla agentów AI (Claude Code/Desktop, Cursor, itp.). Agent sam wywołuje operacje CRUD na stronach, przekierowaniach i cenach — bez pisania kodu. Ta sama autoryzacja co REST (klucz API panelu).

Połączenie

Endpoint

URLhttps://mcp.dodatki.pro
Althttps://api.dodatki.pro/mcp
TransportStreamable HTTP (JSON-RPC 2.0)
AuthAuthorization: Bearer <klucz API>
Paneleklucz panelu → ten panel; licencja / ADMIN_TOKEN → wiele (arg panel)

Claude Code

claude mcp add --transport http stronycms \
  https://mcp.dodatki.pro \
  --header "Authorization: Bearer <KLUCZ>"

Inny klient (JSON)

{
  "mcpServers": {
    "stronycms": {
      "type": "http",
      "url": "https://mcp.dodatki.pro",
      "headers": { "Authorization": "Bearer <KLUCZ>" }
    }
  }
}

Narzędzia (11)

cms_list_shops

Lista sklepów panelu (numery + nazwy).

bez parametrów

cms_list_types

Typy stron CMS w sklepie. Wbudowane (about/terms/help/info/links) są stałe i masz je jako enum w parametrze „type" — tego narzędzia potrzebujesz głównie po to, żeby poznać WŁASNE typy „cms" i ich cms_id.

parametrtypopis
shop *integer
cms_list_languages

Języki sklepu (kody + nazwy) — którymi językami można wypełnić treść CMS strony.

parametrtypopis
shop *integer
cms_list_pages

Lista stron w typie — jedyne wiarygodne źródło informacji, czy strona ISTNIEJE (edycja po id oddaje pusty formularz nawet dla nieistniejącego id). details=true → pełne sekcje; lang → tylko strony z treścią w tym języku.

parametrtypopis
shop *integer
type *stringTyp stron: about = Strony firmowe, terms = Zasady, help = Pomoc, info = Pozostałe informacje, links = Linki, cms = typ własny (wymaga cms_id z cms_list_types).
cms_idinteger
langstring
detailsboolean
cms_get_page

Pełna strona (ustawienia, SEO, treść per język, grafiki, towary powiązane). Pole content.<jezyk>.text jest wyliczane z html — przy zapisie go nie wysyłaj. Nieistniejące id → 404. with_redirects=true dołącza przekierowania.

parametrtypopis
shop *integer
type *stringTyp stron: about = Strony firmowe, terms = Zasady, help = Pomoc, info = Pozostałe informacje, links = Linki, cms = typ własny (wymaga cms_id z cms_list_types).
id *string
cms_idinteger
langstring
with_redirectsboolean
cms_create_page

Dodaj NOWĄ stronę. Treść podajesz jako content.<jezyk>.html (pole text jest wyliczane i ignorowane). Nieznane pole w body → 400, nic nie przepada po cichu. Nowa strona domyślnie NIE pojawia się w spisie CMS — ustaw settings.showInIndex="y", jeśli ma być widoczna. Obsługuje shortcode [karuzela_towarow]. redirect=true → 301 ze starego adresu (seo.<jezyk>.url). Zwraca id RAZEM z typem i adresem strony (numeracja id jest per typ!). Przykład body: {"content":{"pol":{"title":"Dla Dawida","html":"<p>To jest opis strony</p>"}},"settings":{"showInIndex":"y"}}

parametrtypopis
shop *integer
type *stringTyp stron: about = Strony firmowe, terms = Zasady, help = Pomoc, info = Pozostałe informacje, links = Linki, cms = typ własny (wymaga cms_id z cms_list_types).
cms_idinteger
redirectboolean
body *objectStruktura strony. Nieznane pole = błąd 400 (żeby literówka nie przepadła po cichu).
cms_update_page

Edytuj ISTNIEJĄCĄ stronę — podaj tylko pola do zmiany, reszta zostaje nietknięta. Treść jako content.<jezyk>.html. Nieznane pole → 400. Nieistniejące id → 404 (panel renderuje pusty formularz dla dowolnego id, więc sprawdzamy listę stron typu). Przykład body: {"content":{"pol":{"title":"Dla Dawida","html":"<p>To jest opis strony</p>"}},"settings":{"showInIndex":"y"}}

parametrtypopis
shop *integer
type *stringTyp stron: about = Strony firmowe, terms = Zasady, help = Pomoc, info = Pozostałe informacje, links = Linki, cms = typ własny (wymaga cms_id z cms_list_types).
id *string
cms_idinteger
redirectboolean
body *objectStruktura strony. Nieznane pole = błąd 400 (żeby literówka nie przepadła po cichu).
cms_delete_page

Usuń stronę. Nieistniejące id → 404; po usunięciu potwierdzamy z listy typu (pole „deleted"), a nie samym statusem HTTP.

parametrtypopis
shop *integer
type *string
id *string
cms_idinteger
cms_match_page

Znajdź istniejącą stronę pasującą treścią (mapowanie importu na id). match = {url,title,metaTitle,html,…}.

parametrtypopis
shop *integer
type *string
cms_idinteger
langstring
match *object
thresholdnumber
cms_product_prices

Ceny towarów ze Storefront GraphQL: bieżąca (z promocją) + przekreślona + omnibus + punkty. ids = lista identyfikatorów.

parametrtypopis
shop *integer
ids *array[integer]
cms_list_panels

Lista paneli IdoSell dostępnych dla tego klucza (host+url+nazwa). Gdy paneli jest więcej niż jeden, przekaż wybrany host/url jako argument "panel" w pozostałych narzędziach.

bez parametrów

Protokół

JSON-RPC 2.0 po HTTP. Metody: initialize, tools/list, tools/call. Lista narzędzi:

curl -X POST https://mcp.dodatki.pro \
  -H "Authorization: Bearer <KLUCZ>" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

← Referencja REST (Scalar)