<?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'    => 'MCP scoping výrazne znižuje náklady AI',
    'excerpt'  => 'Obmedzenie zoznamu nástrojov pre AI agentov na základe identity používateľa šetrí tokeny aj rozpočet. Pozrite sa, ako MCP scoping zrýchľuje zákaznícku podporu.',
    'date'     => '2026-08-13',              // Dnes. Alebo konkrétny dátum: '2026-06-01'
    'author'   => '191tech',
    'category' => 'Zákaznícka podpora',       // Napr: E-commerce, Webdesign, Marketing, AI školenia
    'image'    => 'https://images.pexels.com/photos/8566466/pexels-photo-8566466.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>Nasadzovanie autonómnych AI agentov do zákazníckej podpory naráža na zásadný ekonomický problém: neefektívne využívanie kontextového okna. Každý dopyt zákazníka smerovaný na veľký jazykový model (LLM) zvyčajne naskladňuje do systémového promptu kompletnú dokumentáciu všetkých dostupných API nástrojov. Tento prístup dramaticky zvyšuje počet spracovaných tokenov, čo prináša vysoké mesačné faktúry a pomalšie reakcie agenta. Riešením je MCP scoping – technika, ktorá dynamicky filtruje schémy nástrojov podľa identity a oprávnení používateľa.</p><h2>Architektúra MCP a problém s nadbytočnými tokenmi</h2><p>Model Context Protocol (MCP) sa stal štandardom pre prepojenie LLM modelov s externými databázami, CRM systémami a internými rozhraniami. Keď AI agent rieši dopyt, potrebuje poznať štruktúru nástrojov, ktoré má k dispozícii. Bez optimalizácie však systém posiela do LLM schémy desiatok až stoviek funkcií pri každej jednej správie v konverzácii.</p><p>Ak zákazník žiada iba o overenie stavu objednávky, LLM napriek tomu dostáva definície pre zmenu fakturačných údajov, storno platieb, eskaláciu na manažment či modifikáciu profilu. Spracovanie tisícov zbytočných tokenov pri každom konverzačnom kroku v systémoch ako GPT-4o alebo Claude 3.5 Sonnet priamo generuje vysoké finančné náklady a výrazne zvyšuje latenciu (Time to First Token).</p><h2>Identity-scoped MCP: Ochrana rozpočtu cez riadenie prístupu</h2><p>Riešenie spočíva v integrácii správy identity (IAM), napríklad cez Okta Identity-scoped MCP, priamo do prístupovej vrstvy k nástrojom. MCP scoping funguje ako inteligentný filter umiestnený medzi identitou používateľa a dostupnými schémami rozhraní.</p><p>Keď sa autentifikovaný zákazník alebo operátor prihlási, MCP server vyhodnotí jeho rolám priradené oprávnenia. Namiesto stoviek JSON schém sa do systémového promptu LLM načítajú iba tie nástroje, k vykonaniu ktorých má daný používateľ reálne právo. Neprihlásený návštevník získa prístup len k základným čítacím nástrojom, zatiaľ čo VIP klient alebo interný zamestnanec vidí špecifické rozširujúce možnosti.</p><h2>Ako môžu slovenské firmy aplikovať MCP scoping</h2><p>Pre slovenské enterprise spoločnosti, vývojárske domy a B2B SaaS platformy reprezentuje MCP scoping priamu možnosť znížiť prevádzkové náklady na AI infraštruktúru o 60 až 80 percent. Vzhľadom na prísne požiadavky na ochranu osobných údajov (GDPR) prináša táto architektúra okrem úspory aj vyšší štandard compliance. Implementácia vyžaduje tri základné kroky:</p><ul><li><strong>Audit a kategorizácia nástrojov:</strong> Rozdeľte všetky API rozhrania používané AI agentom podľa úrovne prístupu, rolí a citlivosti spracovávaných dát.</li><li><strong>Integrácia IAM s MCP gateway:</strong> Prepojte váš Identity Provider (Okta, Azure AD, Keycloak) s MCP proxy serverom a nastavte verifikáciu pomocou OAuth2 a JWT tokenov.</li><li><strong>Dynamické generovanie promptu:</strong> Upravte middleware tak, aby pred odoslaním dopytu na LLM prebehla striktná filtrácia schém podľa overených nárokov (claims) v tokene.</li></ul><h2>Príklady z praxe a reálne merateľné výsledky</h2><p>V praxi neoptimalizované volanie AI agenta s 50 dostupnými nástrojmi spotrebuje priemerne 12 000 až 18 000 input tokenov výhradne na definíciu prostredia. Pri cene enterprise LLM modelov to pri tisícoch konverzácií denne predstavuje tisíce eur mesačne vyhodených za opakované spracovanie irelevantného kontextu.</p><p>Po zavedení Identity-scoped MCP klesne objem vstupných tokenov na 800 až 1 500 na konverzačný krok. Okrem priamej finančnej úspory získavajú IT tímy dva ďalšie kľúčové benefity:</p><ul><li><strong>Rýchlejšia odozva systému:</strong> Menší kontext výrazne skracuje čas spracovania požiadavky na strane LLM, čo radikálne zlepšuje zákaznícku skúsenosť pri živom chate.</li><li><strong>Odolnosť voči Prompt Injection:</strong> Keď model v kontexte vôbec neobsahuje schému pre administratívne alebo citlivé operácie, útočník ho nemôže manipulatívnym promptom prinútiť k ich neoprávnenému vykonaniu.</li></ul><h2>Záver a odporúčania pre IT lídrov</h2><p>Optimalizácia spotreby tokenov nie je len otázkou krátkodobého šetrenia, ale architektúrou dlhodobej škálovateľnosti. Bez presného obmedzenia kontextu sa AI zákaznícka podpora pri raste zákazníckej bázy stáva neudržateľne nákladnou.</p><p>Pokiaľ prevádzkujete vlastných AI agentov, presmerujte vývojové priority z neustáleho pridávania nových schopností na precíznu filtráciu kontextu. Nasadenie MCP scopingu je najrýchlejší spôsob, ako dosiahnuť okamžitý pokles faktúr za LLM API pri súčasnom zvýšení bezpečnosti a rýchlosti celého systému.</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'; ?>
