===== MCP szerver: telepítés és üzemeltetés ===== Ez az oldal a **rendszergazdának** szól: az [[evir:rendszer:ai_mcp|eVIR MCP szerver]] modul telepítése, webszerver-konfigurációja és üzemeltetése. A felhasználói oldal — csatlakozás az AI-alkalmazásból — külön oldalon: [[evir:rendszer:ai_mcp:engedelyezes|Hozzáférés engedélyezése]]. **A modul webszerver-oldali beállítás nélkül NEM működik.** A telepítés önmagában kevés: az Apache alapértelmezésben nem adja át a CGI-nek azt a fejlécet, amiben a hozzáférési kulcs utazik, így minden hívás elutasításra kerülne. ==== 1. A modul telepítése ==== cd install TESTNONINTERACTIVE=1 NOSUDO=1 ./control /path/to/instance install_module ai_mcp Ez létrehozza az ''ai_mcp_*'' táblákat, bekapcsolja a modult, felveszi a karbantartó job ütemezését, majd automatikusan lefuttatja a ''menu'' és ''adminjog'' lépéseket is. Ellenőrzés: a ''Rendszer -> Beállítások -> AI MCP hozzáférés'' menücsoportnak meg kell jelennie (''am01''–''am05'' jogkódok). ==== 2. Webszerver-konfiguráció ==== Minta a példány forrásában: ''install/modules/ai_mcp/apache-mcp.conf.sample''. Nem automatikusan telepítendő fájl — másold az ügyfél vhostjába és igazítsd az útvonalakat. Két dolog kell mindenképpen: - **''CGIPassAuth On''** a ''cgi-bin'' könyvtárra (Apache 2.4.13+). A Bearer token az ''Authorization'' fejlécben utazik, amit az Apache alapból nem ad át a CGI-nek. Régebbi Apache-hoz tartalék: ''RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]'' — a ''mcp.cgi'' mindhárom változatot megnézi. - **Rewrite** a ''/mcp'' útvonalról a ''cgi-bin/mcp.cgi''-re. **Telepítés előtt ellenőrizd, hogy a ''/mcp'' útvonalat nem használja-e már valami** az adott példányon (webshop, CMS). === Alkönyvtáras vs. gyökér-telepítés === ^ ^ alkönyvtáras (''https://host/ugyfel/'') ^ gyökér (saját vhost) ^ ^ base URL | ''https://host/ugyfel/mcp'' | ''https://ugyfel.pelda.hu/mcp'' | ^ ''.well-known'' | a példány alatt | a host gyökerében is | A szabvány (RFC 9728, RFC 8414) szerint path-komponenses issuernél a metadata a **host gyökerében** lenne, amihez alkönyvtáras telepítésnél nincs feltétlenül hozzáférésünk. Ezért a ''mcp.cgi'' az elutasító válasz ''WWW-Authenticate'' fejlécében **explicit megadja** a metadata URL-jét (''resource_metadata="…"''), és a kliensek azt követik — a példány alatti útvonal így elegendő, gyökér-hozzáférés nem kell. A minta a gyökér-szintű változatot is tartalmazza (kikommentelve), az ACME/Let's Encrypt kivétellel együtt. ==== 3. Beállítások ==== ''Rendszer -> Beállítások -> Rendszerbeállítások ->'' **eVIR MCP szerver (AI hozzáférés)**. Részletesen: [[evir:rendszer:beallitasok:ai_mcp|Beállítások: eVIR MCP szerver]]. Telepítés után jellemzően csak egyet kell átnézni: **az MCP végpont publikus URL-jét**. Üresen hagyva a ''setup.pm'' ''web_url_host'' értékéből származik, ''/mcp'' végződéssel — ez a szokásos esetben helyes. A base URL egyben az OAuth **issuer és resource azonosító** is. Utólagos megváltoztatása **érvényteleníti a már kiadott hozzáféréseket**, a felhasználóknak újra kell engedélyezniük. ==== 4. Ki kaphat hozzáférést ==== **''MCP'' privilégium kell hozzá** (''users.privek''). Enélkül a felhasználó látja az engedélyező képernyőt, de nem tud hozzáférést adni. A privilégiumot a [[evir:rendszer:felhasznalok:felhasznalok|Felhasználók]] felületen lehet megadni; adminisztrátoroknak a ''control adminjog'' automatikusan adja. A privilégium ellenőrzése **minden egyes hívásnál** megtörténik, nem csak a hozzáférés kiadásakor. Ha egy felhasználótól elveszik az ''MCP'' privilégiumot, a már kiadott hozzáférés **azonnal** érvénytelenné válik — nem kell megvárni a lejáratát. ==== 5. Karbantartó job ==== **Nincs vele teendő: a telepítés felveszi.** A modul telepítő SQL-je aktív ''crontab'' sort hoz létre (naponta 03:17), ami a lejárt technikai sorokat — függő kérések, felhasznált kódok, lejárt tokenek, hívásszám-számlálók — takarítja. Ellenőrzés: SELECT ct_min,ct_hour,dok,megj,aktiv FROM crontab WHERE dok LIKE 'ai_mcp%'; Az időpont a ''Rendszer -> Beállítások ->'' [[evir:rendszer:beallitasok:utemezett_feladatok:utemezett_feladatok|Ütemezett feladatok]] menüpontban módosítható, és a job ki is kapcsolható. A job a **hívásnaplóhoz nem nyúl**. A napló törlése tudatos adminisztrátori döntés, nem automatizmus — lásd [[evir:rendszer:ai_mcp:audit|MCP hívásnapló]]. ==== 6. Ellenőrzés telepítés után ==== # metadata (nem igenyel bejelentkezest) curl -s https:////mcp/.well-known/oauth-protected-resource # az MCP vegpont token nelkul: 401 + WWW-Authenticate curl -si -X POST https:////mcp \ -H 'Content-Type: application/json' \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | head -20 Az elutasító válaszban **kötelezően** ott kell lennie a ''WWW-Authenticate: Bearer … resource_metadata="…"'' fejlécnek — ez indítja a kliens oldali bejelentkezést. Ha hiányzik, az AI-alkalmazás nem tud csatlakozni. === Hibakeresés === ^ Tünet ^ Legvalószínűbb ok ^ | A bejelentkezés //után// is elutasítás jön | hiányzik a ''CGIPassAuth'' → az ''Authorization'' fejléc nem jut el a CGI-hez | | A kliens nem talál metadatát | a ''.well-known'' rewrite hiányzik, vagy rossz a base URL beállítás | | „Ismeretlen alkalmazás" a visszatéréskor | a base URL megváltozott a hozzáférés kiadása óta | | A felhasználó nem tud engedélyezni | nincs ''MCP'' privilégiuma | | Egyes funkciók hiányoznak a kliensben | az adott modul nincs telepítve, vagy a felhasználónak nincs rá menü-jogosultsága — ez **helyes működés**, lásd [[evir:rendszer:ai_mcp:toolok|Elérhető funkciók]] | ==== 7. Több példány egy ügyfélnél (teszt + éles) ==== Technikailag tiszta: az audience-ellenőrzés miatt egy hozzáférési kulcs **nem használható másik példányon**. Feltétel, hogy a két base URL különbözzön — ha a teszt példány ugyanarról a hostról, más alkönyvtárból megy, ez magától teljesül; ha nem, állítsd be kézzel. Az AI-alkalmazásban két külön kapcsolat lesz belőlük. ---- Kapcsolódó oldalak: * [[evir:rendszer:ai_mcp|eVIR MCP szerver (áttekintés)]] * [[evir:rendszer:beallitasok:ai_mcp|Beállítások: eVIR MCP szerver]] * [[evir:rendszer:ai_mcp:adatbiztonsag|Adatbiztonság]] * [[evir:rendszer:felhasznalok:felhasznalok|Felhasználók]]