MCP server

TAS vystavuje své AI nástroje externím MCP klientům (Claude Code, Claude Desktop, claude.ai, MCP Inspector) přes jeden HTTP endpoint. Tento článek popisuje, jak vydat přístup, jak zvolit rozsah nástrojů a jak připojit konkrétního klienta. Funkce je dostupná od verze 5.19; článek popisuje stav ve verzi 5.19.4.

Předpoklady

  • TAS ve verzi 5.19 nebo novější,
  • role Admin nebo API Token Administrator pro přístup k obrazovce API Access,
  • systémový uživatel, pod jehož identitou budou nástroje běžet (u API tokenu a confidential OAuth klienta),
  • MCP klient, který umí Streamable HTTP transport.

Co MCP server umožňuje

Model Context Protocol je standard, kterým AI klient objevuje a volá nástroje cizí aplikace. TAS ven vystavuje stejný katalog nástrojů, jaký používá jeho vlastní AI chat. Připojený klient tak umí například založit případ, dohledat existující případ v přehledech uživatele, přečíst znalostní dokumenty organizace nebo spustit ruční událost workflow.

Server je bezestavový. Každý požadavek vytvoří novou instanci MCP serveru, vyřídí jednu JSON-RPC zprávu a zavře se. TAS si neudržuje žádné session ID ani stav mezi voláními, kontinuitu drží klient.

Vlastnost

Hodnota

Protokol

MCP over Streamable HTTP

Metoda

POST (na GET i DELETE odpovídá 405)

Cesta

/mcp/:scenario?

Identifikace serveru

tas-mcp-server, verze odpovídá verzi TAS

Podporované verze protokolu

2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07

Autentizace

API token nebo OAuth access token

TAS umí být i MCP klientem a volat cizí MCP servery. To se konfiguruje jinde, v AI administraci, a s tímto článkem nesouvisí.

Adresa endpointu

Endpoint sedí na backendu, ne na doméně frontendu. Na části instalací je backend proxovaný pod cestou /api, takže adresa je https://<instance>/api/mcp. Jinde backend běží na rootu a adresa je https://<instance>/mcp.

Správnou adresu zjistíte z discovery dokumentu, který odpovídá na obou originech:

curl -s https://<instance>/.well-known/oauth-protected-resource

Odpověď:

{
"resource": "https://<instance>/api",
"authorization_servers": ["https://<instance>/api"],
"bearer_methods_supported": ["header"],
"resource_name": "tas"
}

Hodnota resource je základní adresa backendu. MCP endpoint je <resource>/mcp.

Adresu si ověřte vždy na konkrétní instanci. Liší se podle způsobu nasazení a je to nejčastější důvod, proč první pokus o připojení skončí chybou.

Rychlý start

  1. Vydejte API token. V TAS přejděte na Administrace > API Access > API Tokens a klikněte na Generate Token. Vyberte systémového uživatele, platnost ve dnech a popis.
  2. Ověřte spojení voláním metody initialize (viz níže).
  3. Připojte klienta podle sekce Připojení klientů.

Ověřovací volání:

curl -s -X POST https://<instance>/api/mcp \
-H "Authorization: Bearer $TAS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{
"protocolVersion":"2025-06-18","capabilities":{},
"clientInfo":{"name":"curl","version":"1"}}}'

Očekávaná odpověď:

{"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{}},
"serverInfo":{"name":"tas-mcp-server","version":"5.19.4",
"instructions":"tas stateless MCP server exposing local integration tools."},
"jsonrpc":"2.0","id":1}
Hlavička Accept musí obsahovat application/json i text/event-stream zároveň. Jinak server odpoví 406.

Vydání přístupu

Všechny druhy přístupu se spravují na obrazovce API Access (/administration/api-access), rozdělené do tří záložek: API Tokens, OAuth Clients a OAuth Grants.

Který druh přístupu zvolit

Přístup

Vhodné pro

Jedná jako

Životnost

API token

Vlastní skript, server-to-server integrace, rychlý test

Zvolený systémový uživatel

Dlouhá (výchozí 365 dní), statický řetězec

OAuth: confidential

Strojová integrace, která nemá nosit trvalé tajemství

Spárovaný systémový uživatel

Krátká (8 hodin), vyměňuje se za client secret

OAuth: public

Aplikace, které připojuje sám uživatel (Claude, ChatGPT)

Přihlášený uživatel, každý zvlášť

8 hodin access token, rotující refresh token (30 dní)

Pro nové integrace je doporučený OAuth klient. Statický API token je dlouhověké tajemství, které se špatně odvolává a nevyprší samo od sebe včas.

Vydání API tokenu

  1. Přejděte na Administrace > API Access > API Tokens.
  2. Klikněte na Generate Token.
  3. V poli System user vyberte systémového uživatele. Token nemá vlastní oprávnění, dědí role tohoto uživatele.
  4. Vyplňte Expiration (days) a Description.
  5. Potvrďte tlačítkem Generate Token a token zkopírujte.
Token se zobrazí jen jednou a TAS ho zpětně neukáže. Zkopírujte ho ihned do trezoru nebo do konfigurace klienta. Ztracený token se řeší vydáním nového a zneplatněním starého.
Token je podepsaný JWT, který jedná jako celý systémový uživatel, a to na všech API, nejen na /mcp. Neposílejte ho v URL, neukládejte do repozitáře a v konfiguracích klientů ho čtěte z proměnné prostředí.

OAuth klienti

TAS je od verze 5.19 plnohodnotný OAuth 2.1 autorizační server. Pro MCP je podstatný hlavně public klient. Tak se připojuje Claude nebo ChatGPT: každý uživatel schvaluje přístup sám za sebe a nástroje pak běží pod jeho vlastními rolemi.

  1. Přejděte na Administrace > API Access > OAuth Clients.
  2. Klikněte na Create client.
  3. Vyplňte Client name.
  4. Zvolte Client type:
    • Confidential (integration): server-to-server integrace přihlašující se client secretem jako zvolený systémový uživatel, bez souhlasu uživatele,
    • Public (connected application): aplikace, kterou připojuje uživatel, bez client secretu, přes authorization code a PKCE.
  5. U confidential klienta vyberte System user a platnost secretu. U public klienta vyplňte Redirect URIs, jedno URI na řádek.
  6. Potvrďte tlačítkem Create client a uložte si Client ID.

Redirect URI musí být https. Výjimkou je http pro localhost. Adresy se porovnávají přesně a nesmí obsahovat fragment.

Zaregistrované redirect URI se dají zpětně přečíst a opravit v detailu klienta. Překlep v callbacku tedy neznamená zakládat klienta znovu.

U confidential klienta se při vytvoření zobrazí i client secret, stejně jednorázově jako API token. Pokud vyprší nebo unikne, nahradíte ho akcí Generate new secret na řádku klienta, aniž by klient přišel o svou identitu a aniž by bylo nutné přenastavovat připojenou aplikaci na nové Client ID.

Souhlas uživatele

Když public klient pošle uživatele na /oauth/authorize, TAS ho nejprve přihlásí kteroukoli nakonfigurovanou autoritou a poté zobrazí souhlasovou obrazovku. Ta jmenuje aplikaci, účet, pod kterým bude jednat, i cíl přesměrování.

Po potvrzení tlačítkem Allow vymění klient jednorázový kód s platností 60 sekund za access token (8 hodin) a rotující refresh token. Access token se na endpointu /mcp chová stejně jako API token.

Souhlas je odepřen, pokud uživatel právě zastupuje jiného uživatele. Zastupující uživatel nemůže udělit souhlas za sebe ani za zastupovaného.

Dynamická registrace klientů

Aplikace jako Claude se běžně registrují samy přes dynamickou registraci (POST /oauth/register). V TAS je tato možnost ve výchozím stavu vypnutá. Dokud ji nezapnete, je nutné public klienta založit ručně podle postupu výše.

Přepínač najdete v Administrace > Configuration > Application > Authentication pod klíčem application.authentication.oauthDynamicClientRegistration. Změna platí okamžitě, bez restartu.

Při vypnuté dynamické registraci neobsahuje discovery dokument /.well-known/oauth-authorization-server klíč registration_endpoint. Klienti podle jeho přítomnosti poznávají, zda se mají pokusit zaregistrovat, takže obě věci se zapínají a vypínají společně.

Ve stejné sekci konfigurace se nastavuje i životnost tokenů: application.authentication.accessExpire (výchozí 28800 sekund, tedy 8 hodin) a application.authentication.refreshExpire (výchozí 2592000 sekund, tedy 30 dní). Samostatný konfigurační blok pro OAuth neexistuje.

Přehled udělených souhlasů

Záložka OAuth Grants ukazuje administrátorovi všechny vydané souhlasy: klienta, uživatele, datum vzniku, poslední použití a platnost. Odvolání souhlasu odpojí jednu aplikaci u jednoho uživatele.

Tentýž seznam, omezený na vlastní připojení, vidí uživatel v Nastavení uživatele > Connected applications. Svoje připojení si může odvolat sám, bez zásahu administrátora.

Scénáře: zúžení katalogu nástrojů

Holé /mcp vystaví všech 35 nástrojů. To je pro většinu úloh zbytečně široký katalog, ve kterém model hůř vybírá a plýtvá kontextem. Volitelný segment cesty vybere pojmenovaný výřez kolekcí a zároveň změní instrukce, které server o sobě klientovi sděluje.

Cesta

Nástrojů

K čemu slouží

/mcp

35

Vše, co má k dispozici i vestavěný AI chat

/mcp/case-creation

9

Zakládání případů: co lze spustit, jaká pole to vyžaduje, validace a založení, podepřené znalostními dokumenty

/mcp/case-editing

10

Práce s existujícím případem: dohledání přes přehledy, ruční události workflow, čtení a zápis proměnných úkolu

/mcp/case-lookup

5

Pouze dohledání případů v přehledech uživatele, bez zápisu

/mcp/knowledge

5

Odpovědi ze znalostních dokumentů organizace a z produktové dokumentace TAS

/mcp/account

4

Role přihlášeného uživatele a jeho dřívější AI konverzace

/mcp/administration

2

Nahlédnutí do registru dostupných pluginů

Scénář se promítne i do identity serveru. Endpoint /mcp/knowledge se představí jako tas-mcp-knowledge s instrukcí Answer questions from organization AI documents and TAS product documentation, takže klient rovnou ví, k čemu má server použít.

Scénář není bezpečnostní hranice. Filtruje pouze to, co se klientovi zobrazí v seznamu nástrojů. Skutečnou hranicí jsou oprávnění uživatele, pod kterým token jedná. Nepoužívejte scénář jako náhradu za správně nastavené role.

Neznámý scénář je odmítnut validací ještě před MCP vrstvou, takže odpověď je běžná chyba TAS, ne JSON-RPC chyba:

{"error":{"message":"params/scenario must be equal to one of the allowed values",
"error":"Bad Request","status":400,"statusCode":400}}

Katalog nástrojů

Nástroje se vystavují pod holým názvem bez prefixu. Kolekce, ze které pocházejí, je uvedena na začátku popisu v hranatých závorkách, například [UserRolesTools] .... Anotace readOnlyHint a destructiveHint se odvozují z druhu nástroje.

Kolekce

Scénáře

Nástroje

CreateInstanceProcessTools

case-creation

get_startable_processes_schema, query_startable_processes, get_variables_schema_for_process, validate_case_input_for_process, create_case_from_schema (zápis)

IdentifyInstanceProcessTools

case-lookup, case-editing

get_custom_view_semantics, get_my_custom_views_schema, query_my_custom_views, get_custom_view_context, query_custom_view_rows

EditInstanceProcessTools

case-editing

list_case_hand_events, invoke_case_hand_event (zápis), get_task_variables_schema, validate_task_variable_input, update_task_variables (zápis)

AiDocumentsTools

knowledge, case-creation

get_ai_document_search_guidance, list_ai_documents, grep_ai_documents, get_ai_document

UserRolesTools

account

get_user_roles_schema, query_user_roles

AiConversationTools

account

get_my_ai_conversations_schema, query_my_ai_conversations

AvailablePluginsTools

administration

get_available_plugins_schema, query_available_plugins

HelpDocsTools

knowledge

get_helpdocs_documentation

CaseAiTools

pouze holé /mcp

get_case_semantics, list_case_documents, get_case_document, list_case_variables, list_case_active_tasks, get_case_history_schema, query_case_history, list_case_events, trigger_case_event (zápis)

Kolekce CaseAiTools není součástí žádného scénáře a objeví se jen v holém /mcp. Je psaná pro chat nad otevřeným případem a pracuje s případem, který uživatel právě prohlíží. Přes MCP, kde žádná otevřená obrazovka není, se proto chová jinak než v aplikaci.

Ukázka volání nástroje

curl -s -X POST https://<instance>/api/mcp/account \
-H "Authorization: Bearer $TAS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":4,"method":"tools/call",
"params":{"name":"query_user_roles","arguments":{}}}'
Ukázka odpovědi
{"result":{"content":[{"type":"text","text":"{ \"items\": [ ... ] }"}],
"structuredContent":{"result":{"items":[
{"ROLE_ID":-1,"ROLE_NAME":"$Administrator","ROLE_CATEGORY":"System", ...},
{"ROLE_ID":-8,"ROLE_NAME":"$AllUsers", ...}],
"limit":100,"hasMore":false,"nextCursor":null}}}

Chyba nástroje se nevrací jako JSON-RPC chyba, ale jako výsledek s příznakem isError: true a textovým popisem, aby na ni model mohl reagovat.

Připojení klientů

Bez ohledu na klienta musí každý požadavek nést tyto hlavičky:

  • Accept: application/json, text/event-stream (obě hodnoty zároveň),
  • Content-Type: application/json,
  • Authorization: Bearer <token>.

Hlavička MCP-Protocol-Version je volitelná. Pokud ji klient pošle, musí obsahovat podporovanou hodnotu.

Claude Code

Claude Code umí HTTP transport nativně, token se předá v hlavičce:

claude mcp add --transport http tas \
https://<instance>/api/mcp/case-lookup \
--header "Authorization: Bearer $TAS_TOKEN"

Kontrola registrovaných serverů:

claude mcp list

Claude Desktop

Claude Desktop komunikuje přes stdio, HTTP endpoint proto zprostředkuje nástroj mcp-remote. Do souboru claude_desktop_config.json doplňte:

{
"mcpServers": {
"tas": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://<instance>/api/mcp/case-creation",
"--header", "Authorization: Bearer ${TAS_TOKEN}"
],
"env": { "TAS_TOKEN": "eyJhbGciOi..." }
}
}
}
Pokud parametr --header vynecháte, spustí mcp-remote místo statického tokenu OAuth: TAS odpoví 401 s discovery výzvou, otevře se prohlížeč se souhlasovou obrazovkou a token si klient obstará sám. To vyžaduje zaregistrovaného public klienta nebo zapnutou dynamickou registraci.

claude.ai (vlastní konektor)

V nastavení konektorů stačí vložit adresu https://<instance>/api/mcp. Claude si stáhne discovery dokumenty, zaregistruje se a pošle uživatele na souhlasovou obrazovku TAS.

Předpokladem je zapnutá dynamická registrace klientů. Bez ní registrace selže a public klienta je nutné založit ručně na záložce OAuth Clients, s redirect URI, které Claude používá.

MCP Inspector

Pro ladění a prohlédnutí katalogu nástrojů:

npx @modelcontextprotocol/inspector

V Inspectoru zvolte transport Streamable HTTP, vložte adresu endpointu a do hlaviček doplňte Authorization: Bearer <token>.

Oprávnění a omezení

Pouze programový token

Endpoint přijímá výhradně token typu api nebo oauth. Běžný session token z prohlížeče je odmítnut jako UNAUTHORIZED, MCP tedy nelze volat z přihlášené relace uživatele. Neautentizovaný požadavek dostane 401 a s ním výzvu, podle které se OAuth klient dostane k discovery:

www-authenticate: Bearer resource_metadata=
"https://<instance>/api/.well-known/oauth-protected-resource/mcp"

Oprávnění jsou role uživatele

Nástroj běží v uživatelské relaci uživatele, kterému token patří, a vidí přesně to, co by viděl on sám v aplikaci. Role se vyhodnocují v okamžiku volání, ne při vydání tokenu. U public OAuth klienta jde o konkrétního člověka, který udělil souhlas, u API tokenu a confidential klienta o spárovaného systémového uživatele.

Zápisové nástroje se provedou ihned

V AI chatu se nástroj označený jako vyžadující potvrzení zastaví a počká na souhlas uživatele. Protokol MCP toto vynutit neumí, takže přes MCP se takový nástroj provede okamžitě. Anotace destructiveHint je pouze upozornění pro klienta. Prakticky to znamená, že create_case_from_schema, invoke_case_hand_event, update_task_variables a trigger_case_event mění data bez mezikroku. Pro nedůvěryhodná nebo experimentální nasazení použijte scénář case-lookup nebo knowledge, které neobsahují žádný zápisový nástroj.

Rychlost odvolání přístupu

Zneplatněný API token přestane platit okamžitě. U OAuth se platnost grantu ověřuje proti databázi v krátkém intervalu, řádově do minuty. Odvolání souhlasu, zakázání klienta i detekce znovupoužitého refresh tokenu proto odříznou všechny vydané access tokeny v tomto okně, ne až jejich vypršením.

Bez timeoutu na straně serveru

Server nemá vlastní timeout odpovědi. Zrušení nebo časový limit je záměrně ponechán na MCP klientovi.

Audit volání

Každé volání nástroje se zapisuje do tabulky AI_LLM_TOOL_CALL s příznakem zdroje mcp, spolu s uživatelem a kolekcí. Úspěšný záznam vzniká uvnitř téže transakce jako práce nástroje, takže projde buď obojí, nebo nic. Neúspěšný záznam se zapisuje mimo transakci, aby informace o selhání zůstala i po jejím odvolání.

Záznamy se prohlížejí v Administrace > AI monitoring > LLM Tool Calls (/administration/ai-observability/llm-tool-calls).

U volání přes MCP je sloupec Run nulový, protože za voláním nestojí žádný LLM run, přišlo zvenčí. Mřížka zobrazuje ID, Run, Tool Name, Status a čas vytvoření. Uživatel, kolekce a zdroj volání jsou součástí databázového záznamu.

Odebrání přístupu

Co odebrat

Kde

Akce a dopad

API token

API Access > API Tokens

Invalidate. Token se nemaže, dostane datum zneplatnění a okamžitě přestane fungovat.

Celý OAuth klient (vratně)

API Access > OAuth Clients

Disable. Vratný příznak, který naráz odvolá všechny granty klienta.

Celý OAuth klient (nevratně)

API Access > OAuth Clients

Delete permanently. Smaže klienta i jeho granty. Vyhrazeno superadministrátorům.

Jeden souhlas uživatele

API Access > OAuth Grants

Odvolání grantu. Odpojí jednu aplikaci u jednoho uživatele.

Vlastní připojení

Nastavení uživatele > Connected applications

Uživatel si odvolá svoje připojení sám, bez administrátora.

Role API Token Administrator umožňuje klienta zakázat, ale ne trvale smazat. Trvalé smazání je vyhrazeno superadministrátorům.

Řešení potíží

Odpověď

Co to znamená

Náprava

401 s hlavičkou www-authenticate

Chybí token, je neplatný, zneplatněný, nebo jde o session token z prohlížeče

Poslat platný API token nebo OAuth access token v hlavičce Authorization

406, kód -32000

Client must accept both application/json and text/event-stream

Doplnit hlavičku Accept: application/json, text/event-stream

400, kód -32000

Unsupported protocol version

Poslat MCP-Protocol-Version z podporovaného seznamu, nebo hlavičku vynechat

400, chyba TAS

params/scenario must be equal to one of the allowed values

Překlep v názvu scénáře, povolené hodnoty jsou v tabulce scénářů

400, kód -32600 nebo -32700

Dávka JSON-RPC zpráv (není podporovaná) nebo tělo, které není JSON-RPC

Posílat jednu zprávu na požadavek

405

GET nebo DELETE na /mcp

Server je bezestavový a obsluhuje pouze POST. Klient s touto odpovědí počítá, není to chyba nasazení

Kód -32602

Neznámý nástroj, nebo argumenty neprošly validací proti JSON schématu

Načíst tools/list znovu a zkontrolovat inputSchema nástroje

404 nebo prázdná odpověď při přihlašování

Klient hledá /authorize nebo discovery dokument na doméně frontendu

Ověřit /.well-known/oauth-protected-resource. Dokument má odpovídat na obou originech; pokud neodpovídá, je špatně nastavená proxy

access_denied na /oauth/register

Vypnutá dynamická registrace klientů

Zapnout ji v konfiguraci, nebo public klienta založit ručně

429

Překročený limit 60 požadavků za minutu na IP pro /oauth/* a /.well-known/*

Omezit frekvenci. Typicky nastane při opakovaném ladění OAuth flow ve smyčce

Frantisek Brych Updated by Frantisek Brych

How to Activate the AI Feature

Contact

Team assistant (opens in a new tab)

Powered by HelpDocs (opens in a new tab)