<?php
/**
 * =====================================================
 * AI NEWS — ŠABLÓNA PRE NOVÝ ČLÁNOK
 * =====================================================
 * Postup:
 * 1. Skopírujte tento súbor do priečinka /ai-news/
 * 2. Premenujte ho podľa URL, ktorú chcete (napr. "moj-clanok.php")
 *    URL bude: 191tech.com/ai-news/moj-clanok
 * 3. Vyplňte $article pole nižšie
 * 4. Napíšte obsah článku do sekcie označenej "TU ZAČÍNA OBSAH"
 * =====================================================
 */

$article = [
    'title'    => 'Identity-scoped MCP chráni podnikových AI agentov',
    'excerpt'  => 'Identity-scoped Model Context Protocol zavádza princípy Zero Trust priamo do komunikácie autonómnych AI agentov. Dynamické obmedzovanie nástrojov podľa identity používateľa znižuje náklady na tokeny a zabraňuje neoprávnenému prístupu k dátam.',
    'date'     => '2026-08-13',              // Dnes. Alebo konkrétny dátum: '2026-06-01'
    'author'   => '191tech',
    'category' => 'Právo a Bezpečnosť',       // Napr: E-commerce, Webdesign, Marketing, AI školenia
    'image'    => 'https://images.pexels.com/photos/8386363/pexels-photo-8386363.jpeg?auto=compress&cs=tinysrgb&fit=crop&h=627&w=1200',      // Cesta k obrázku článku (odporúčaný rozmer: 1200x630)
    'cta_text' => 'Mám záujem o konzultáciu', // Text hlavného CTA tlačidla
    'cta_link' => '/kontakt',                 // URL link CTA tlačidla
];

$page_title       = $article['title'] . ' | AI News 191tech';
$page_description = $article['excerpt'];
include dirname(__DIR__, 2) . '/parts/ai-page-head.php';
?>

<!-- ===== HERO ČLÁNKU ===== -->
<section class="ai-hero" style="min-height:auto; padding:140px 0 60px;">
  <div class="ai-container" style="max-width:860px;">
    <div style="display:flex; gap:12px; align-items:center; margin-bottom:24px; font-size:14px;">
      <a href="/ai-news" style="color:var(--ai-cyan); text-decoration:none;">← Späť na AI News</a>
      <span style="color:var(--ai-border);">|</span>
      <span style="color:var(--ai-purple); font-weight:600; text-transform:uppercase; letter-spacing:1px;"><?= htmlspecialchars($article['category']) ?></span>
      <span style="color:var(--ai-border);">|</span>
      <span style="color:var(--ai-text-muted);"><?= date('d.m.Y', strtotime($article['date'])) ?></span>
    </div>
    <h1 style="font-size:42px; line-height:1.2; margin-bottom:28px;"><?= htmlspecialchars($article['title']) ?></h1>
    <p style="font-size:20px; color:var(--ai-text-muted); line-height:1.6; margin-bottom:40px;"><?= htmlspecialchars($article['excerpt']) ?></p>

    <?php if(!empty($article['image'])): ?>
    <div style="border-radius:16px; overflow:hidden; border:1px solid var(--ai-border); margin-bottom:0;">
      <img src="<?= htmlspecialchars($article['image']) ?>" alt="<?= htmlspecialchars($article['title']) ?>"
           style="width:100%; height:auto; display:block; max-height:420px; object-fit:cover;">
    </div>
    <?php endif; ?>
  </div>
</section>

<!-- ===== OBSAH ČLÁNKU ===== -->
<section class="ai-section" style="padding-top:0;">
  <div class="ai-container" style="max-width:860px;">
    <div class="article-content">

      <!-- ════════════════════════════════════════════
           TU ZAČÍNA OBSAH ČLÁNKU
           Môžete použiť: <h2>, <h3>, <p>, <ul>, <ol>,
           <li>, <strong>, <em>, <a href="">, <blockquote>
      ════════════════════════════════════════════ -->

<p>Model Context Protocol (MCP) štandardizoval spôsob, akým autonómni AI agenti komunikujú s externými nástrojmi, podnikovými databázami a rozhraniami API. Základná implementácia tohto protokolu však vytvára zásadné bezpečnostné a finančné riziká. V predvolenom nastavení totiž MCP servery poskytujú jazykovému modelu kompletný zoznam všetkých dostupných nástrojov a ich schém v rámci každého kontextového okna. Riešením tohto štrukturálneho problému je <strong>Identity-scoped MCP</strong>, ktorý dynamicky filtruje kontext a oprávnenia nástrojov na základe overenej identity konkrétneho používateľa.</p><h2>Bezpečnostné limity a tokenová réžia štandardného MCP</h2><p>Tradičné nasadenie MCP trpí dvoma hlavnými nedostatkami:</p><ul><li><strong>Problém zmäteného zástupcu (Confused Deputy):</strong> Ak má AI agent prístup ku všetkým firemným nástrojom, prompt injection útok môže model prinútiť vykonať akcie s administrátorskými právami, aj keď pôvodný dopyt zadal používateľ so základným prístupom.</li><li><strong>Neudržateľná spotreba tokenov:</strong> Posielanie stoviek definícií funkcií (JSON schém) pri každom volaní modelu neúmerne nafukuje systémový prompt. To zvyšuje latenciu odpovedí a dramaticky predražuje prevádzkové náklady na inferenciu.</li><li><strong>Absencia granularnej auditovateľnosti:</strong> Pri generickom API kľúči nie je možné presne dohľadať, ktorý koncový používateľ inicioval konkrétnu databázovú operáciu vykonanú agentom.</li></ul><p>Identity-scoped MCP integruje princípy <strong>Zero Trust</strong> a správy identít (IAM) priamo do transportnej vrstvy protokolu. MCP server overí identitu volajúceho (napríklad cez JWT token alebo OAuth 2.0 flow) a modelu sprístupní výhradne tie nástroje, na ktoré má používateľ explicitné oprávnenie v systéme riadenia prístupu (RBAC/ABAC).</p><h2>Ako môžu koncept implementovať slovenské organizácie</h2><p>Pre slovenské podniky budujúce interných asistentov alebo automatizované procesy predstavuje tento prístup spôsob, ako splniť striktné legislatívne požiadavky vrátane smernice <strong>NIS2</strong> a nariadenia <strong>GDPR</strong>.</p><h3>1. Integrácia s existujúcim Identity Providerom (IdP)</h3><p>Namiesto správy vlastných oprávnení v kóde agenta sa MCP server napojí na podnikový IdP (ako Microsoft Entra ID, Keycloak či Okta). Požiadavka odoslaná agentovi nesie kontext identity používateľa, ktorý MCP gateway overí pred odoslaním promptu do LLM.</p><h3>2. Dynamická injekcia schém podľa rolí</h3><p>MCP server filtruje manifest nástrojov v reálnom čase. Ak systém používa bežný zamestnanec, do kontextu modelu sa odošlú len nástroje na čítanie verejných znalostných báz. Nástroje pre prístup k citlivým personálnym dátam alebo zápis do ERP systémov zostanú pre LLM úplne neviditeľné.</p><h3>3. Zavedenie LLM FinOps</h3><p>Zúženie zoznamu posielaných nástrojov z desiatok na jednotky znižuje veľkosť vstupného kontextu o stovky až tisíce tokenov na každú interakciu. Pri tisícoch volaní denne to prináša okamžitú a merateľnú úsporu nákladov na API volania modelov ako Claude 3.5 Sonnet alebo GPT-4o.</p><h2>Praktické scenáre nasadenia</h2><p>Princíp Identity-scoped MCP nachádza uplatnenie v prostrediach, kde jeden spoločný model obsluhuje používateľov s rôznymi úrovňami bezpečnostnej previerky:</p><ul><li><strong>Bankový a finančný sektor:</strong> AI asistent pre pobočkových pracovníkov má k dispozícii len analytické nástroje pre klientske účty, zatiaľ čo risk manažér má cez toho istého agenta prístup k nástrojom pre hĺbkový schvaľovací proces úverov. Model fyzicky nedisponuje definíciou citlivých funkcií, ak dopyt nepochádza od autorizovanej osoby.</li><li><strong>Zákaznícka podpora v e-commerce:</strong> Agent komunikujúci so zákazníkom môže čítať stav objednávky, no nástroje na refundáciu alebo zmenu doručovacej adresy sa aktivujú až vtedy, keď požiadavku prevezme interný špecialista podpory.</li><li><strong>Forenzná stopovateľnosť:</strong> Každé volanie nástroja (Tool Call) nesie kryptograficky overiteľné ID používateľa, čo umožňuje presný audit zásahov do databáz a predchádza interným podvodom.</li></ul><h2>Odporúčania pre technické tímy</h2><p>Prechod na architektúru identity-scoped MCP vyžaduje systematický postup:</p><p>V prvom kroku auditujte všetky nástroje a API, ktoré AI agentom sprístupňujete. Zadefinujte maticu oprávnení a oddelite čítacie operácie od deštruktívnych zápisov. Následne nasaďte <strong>MCP Proxy bránu</strong>, ktorá zachytáva komunikáciu medzi klientskou aplikáciou, LLM a MCP servermi, pričom validuje používateľské tokeny.</p><p>Bezpečnosť AI agentov nemožno riešiť iba systémovými inštrukciami v prompte. Deterministické obmedzenie kontextu a nástrojov na úrovni identity predstavuje jediný robustný spôsob, ako zabrániť únikom dát a udržať inferenčné náklady pod kontrolou.</p>

<!-- ════════════════════════════════════════════
           KONIEC OBSAHU ČLÁNKU
      ════════════════════════════════════════════ -->

    </div>

    <!-- CTA Banner vo vnútri článku -->
    <div class="ai-highlight-box" style="margin-top:56px; text-align:center;">
      <div class="ai-label" style="margin:0 auto 16px; display:table;">Zaujíma vás toto téma?</div>
      <h3 style="font-size:26px;">Hovoríme o tom <span class="ai-gradient-text">osobne</span></h3>
      <p style="margin-bottom:24px;">Kontaktujte nás na bezplatnú konzultáciu — analyzujeme možnosti AI pre vašu firmu.</p>
      <a href="<?= htmlspecialchars($article['cta_link']) ?>" class="ai-btn ai-btn-primary ai-btn-lg"><?= htmlspecialchars($article['cta_text']) ?></a>
    </div>
  </div>
</section>

<!-- ===== NEWSLETTER ===== -->
<section class="ai-section" style="background:var(--ai-bg2);">
  <div class="ai-container" style="max-width:700px; text-align:center;">
    <div class="ai-label ai-label-purple" style="margin:0 auto 16px; display:table;">AI News Newsletter</div>
    <h2>Podobné tipy priamo do <span class="ai-gradient-text-2">e-mailu</span></h2>
    <p style="margin-bottom:30px;">Prihláste sa na odber — každý týždeň pošleme najdôležitejšie AI novinky pre vaše podnikanie.</p>
    <form id="nlForm" style="display:flex; gap:12px; flex-wrap:wrap; justify-content:center;">
      <input type="text" name="website" style="display:none;" tabindex="-1" autocomplete="off">
      
      <select name="category" required style="padding:14px 20px; border-radius:8px; border:1px solid var(--ai-border); background:var(--ai-card); color:var(--ai-text); font-family:'Inter',sans-serif; outline:none; min-width:180px;">
        <option value="">Zvoľte odvetvie</option>
        <option value="Všetky odvetvia">Všetky odvetvia</option>
        <option value="Marketing a Predaj">Marketing a Predaj</option>
        <option value="E-commerce a Maloobchod">E-commerce a Maloobchod</option>
        <option value="Priemysel a Výroba">Priemysel a Výroba</option>
        <option value="Logistika a Doprava">Logistika a Doprava</option>
        <option value="Financie a Účtovníctvo">Financie a Účtovníctvo</option>
        <option value="HR a Administratíva">HR a Administratíva</option>
        <option value="Služby a Iné">Služby a Iné</option>
      </select>

      <input type="email" name="email" required placeholder="Váš pracovný e-mail"
        style="flex-grow:1; min-width:240px; padding:14px 20px; border-radius:8px; border:1px solid var(--ai-border); background:var(--ai-card); color:var(--ai-text); font-family:'Inter',sans-serif; outline:none;">
      <button type="submit" class="ai-btn ai-btn-primary" style="border:none; cursor:pointer;">Odoberať novinky</button>
    </form>
    <div id="nlMsg" style="margin-top:16px; font-weight:600; display:none;"></div>
  </div>
</section>

<script>
document.getElementById('nlForm').addEventListener('submit', function(e) {
  e.preventDefault();
  const fd = new FormData(this), msg = document.getElementById('nlMsg');
  fetch('/subscribe.php', { method:'POST', body:fd })
    .then(r => r.json())
    .then(d => {
      msg.style.display = 'block';
      msg.style.color = d.status === 'success' ? 'var(--ai-green)' : '#ef4444';
      msg.textContent = d.message;
      if(d.status === 'success') {
          this.reset();
          localStorage.setItem('ai_newsletter_subscribed', '1');
      }
    }).catch(() => {
      msg.style.display = 'block';
      msg.style.color = '#ef4444';
      msg.textContent = 'Nastala chyba. Skúste to prosím neskôr.';
    });
});
</script>

<!-- ===== NEWSLETTER POPUP ===== -->
<div id="aiPopup" style="display:none; position:fixed; bottom:30px; right:30px; max-width:400px; background:var(--ai-card); border:1px solid var(--ai-border); border-radius:16px; box-shadow:0 20px 40px rgba(0,0,0,0.1); z-index:9999; padding:32px; font-family:'Inter',sans-serif;">
  <button id="aiPopupClose" style="position:absolute; top:16px; right:16px; background:none; border:none; font-size:24px; cursor:pointer; color:var(--ai-text-muted); line-height:1;">&times;</button>
  <div class="ai-label ai-label-purple" style="margin-bottom:12px; display:inline-block;">AI News Newsletter</div>
  <h3 style="margin-top:0; font-size:20px; color:var(--ai-text); margin-bottom:8px;">Získajte náskok s AI</h3>
  <p style="color:var(--ai-text-muted); font-size:15px; line-height:1.6; margin-bottom:20px;">Vyberte si vaše odvetvie a pošleme vám len tie najrelevantnejšie AI tipy a novinky.</p>
  
  <form id="nlPopupForm" style="display:flex; flex-direction:column; gap:12px;">
    <input type="text" name="website" style="display:none;" tabindex="-1" autocomplete="off">
    <select name="category" required style="padding:12px 16px; border-radius:8px; border:1px solid var(--ai-border); background:var(--ai-bg); color:var(--ai-text); outline:none; font-size:15px;">
      <option value="">Zvoľte odvetvie</option>
      <option value="Všetky odvetvia">Všetky odvetvia</option>
      <option value="Marketing a Predaj">Marketing a Predaj</option>
      <option value="E-commerce a Maloobchod">E-commerce a Maloobchod</option>
      <option value="Priemysel a Výroba">Priemysel a Výroba</option>
      <option value="Logistika a Doprava">Logistika a Doprava</option>
      <option value="Financie a Účtovníctvo">Financie a Účtovníctvo</option>
      <option value="HR a Administratíva">HR a Administratíva</option>
      <option value="Služby a Iné">Služby a Iné</option>
    </select>
    <input type="email" name="email" required placeholder="Váš pracovný e-mail" style="padding:12px 16px; border-radius:8px; border:1px solid var(--ai-border); background:var(--ai-bg); color:var(--ai-text); outline:none; font-size:15px;">
    <button type="submit" class="ai-btn ai-btn-primary" style="width:100%; border:none; cursor:pointer; padding:12px;">Odoberať novinky</button>
  </form>
  <div id="nlPopupMsg" style="margin-top:12px; font-weight:600; font-size:14px; display:none;"></div>
</div>

<script>
// Logika popupu
document.addEventListener('DOMContentLoaded', function() {
    if (!localStorage.getItem('ai_newsletter_subscribed') && !sessionStorage.getItem('ai_popup_closed')) {
        setTimeout(() => {
            document.getElementById('aiPopup').style.display = 'block';
        }, 5000); // Zobrazí sa po 5 sekundách
    }

    document.getElementById('aiPopupClose').addEventListener('click', function() {
        document.getElementById('aiPopup').style.display = 'none';
        sessionStorage.setItem('ai_popup_closed', '1');
    });

    document.getElementById('nlPopupForm').addEventListener('submit', function(e) {
        e.preventDefault();
        const fd = new FormData(this), msg = document.getElementById('nlPopupMsg');
        const btn = this.querySelector('button');
        btn.textContent = 'Odosielam...';
        btn.disabled = true;

        fetch('/subscribe.php', { method:'POST', body:fd })
          .then(r => r.json())
          .then(d => {
            msg.style.display = 'block';
            msg.style.color = d.status === 'success' ? 'var(--ai-green)' : '#ef4444';
            msg.textContent = d.message;
            if(d.status === 'success') {
                this.reset();
                localStorage.setItem('ai_newsletter_subscribed', '1');
                setTimeout(() => document.getElementById('aiPopup').style.display = 'none', 3000);
            } else {
                btn.textContent = 'Odoberať novinky';
                btn.disabled = false;
            }
          }).catch(() => {
            msg.style.display = 'block';
            msg.style.color = '#ef4444';
            msg.textContent = 'Nastala chyba. Skúste to prosím neskôr.';
            btn.textContent = 'Odoberať novinky';
            btn.disabled = false;
          });
    });
});
</script>

<style>
.article-content { font-size:17px; line-height:1.8; color:var(--ai-text-muted); }
.article-content h2 { font-size:28px; color:var(--ai-text); margin:48px 0 20px; padding-top:8px; border-top:1px solid var(--ai-border); }
.article-content h3 { font-size:22px; color:var(--ai-text); margin:32px 0 14px; }
.article-content p  { margin-bottom:24px; color:var(--ai-text-muted); }
.article-content a  { color:var(--ai-cyan); text-decoration:underline; }
.article-content ul, .article-content ol { margin-bottom:24px; padding-left:22px; }
.article-content li { margin-bottom:10px; }
.article-content blockquote {
  border-left:4px solid var(--ai-cyan);
  background:rgba(0,243,255,0.06);
  padding:22px 28px; font-size:20px;
  font-style:italic; margin:40px 0;
  border-radius:0 10px 10px 0; color:var(--ai-text);
}
.article-content strong { color:var(--ai-text); }

/* ── Case Study Box ─────────────────────────────── */
.case-study-box {
  background: var(--ai-bg3);
  border: 1px solid var(--ai-border);
  border-left: 4px solid var(--ai-cyan);
  border-radius: 12px;
  padding: 28px 32px;
  margin: 40px 0;
}
.case-study-box h3 {
  font-size: 14px !important;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 1.5px;
  color: var(--ai-cyan) !important;
  margin: 0 0 16px !important;
  padding: 0 !important;
  border: none !important;
}
.case-study-box ul {
  margin: 0 !important;
  padding-left: 0 !important;
  list-style: none;
}
.case-study-box li {
  padding: 6px 0;
  border-bottom: 1px solid var(--ai-border);
  font-size: 15px;
  color: var(--ai-text-muted);
}
.case-study-box li:last-child { border-bottom: none; }
.case-study-box li strong { color: var(--ai-text); margin-right: 6px; }
</style>

<?php include dirname(__DIR__, 2) . '/parts/ai-page-foot.php'; ?>
