===== 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]]