// THE CORRECT FINAL INJECTION // Bug fix: MCP v2.0.1 requires SPACE in Accept header: 'application/json, text/event-stream' const fs = require('fs'); const https = require('https'); require('child_process').execSync('node scripts/refresh_token.js', { cwd: process.cwd() }); const T = JSON.parse(fs.readFileSync('config/.webflow_oauth.json', 'utf8')).access_token; const SID = '5c642ac544c19c2e9a2b724b'; const PID = '5f3f2ff4b7a5d153248c3733'; const D1 = '6918fb2990369bc6ed244601'; const D2 = '6918fb2990369bc6ed2445fb'; const ACCEPT = 'application/json, text/event-stream'; // CRITICAL: space after comma function call(m, p, i, s) { return new Promise((res, rej) => { const b = JSON.stringify({ jsonrpc: '2.0', method: m, params: p, id: i }); const h = { 'Content-Type': 'application/json', 'Accept': ACCEPT, 'Authorization': 'Bearer ' + T, 'Content-Length': Buffer.byteLength(b) }; if (s) h['mcp-session-id'] = s; const r = https.request({ hostname: 'mcp.webflow.com', path: '/mcp', method: 'POST', headers: h }, (x) => { let d = ''; x.on('data', c => d += c); x.on('end', () => res({ d, s: x.headers['mcp-session-id'], code: x.statusCode })); }); r.on('error', rej); r.write(b); r.end(); }); } function parseSSE(r) { for (const l of r.split('\n')) if (l.startsWith('data: ')) try { return JSON.parse(l.substring(6)); } catch (e) {} return null; } (async () => { console.log('=== POLLORIKO - FINAL CORRECT INJECTION ==='); console.log(''); // Step 1: Initialize console.log('1. Initialize MCP session...'); const init = await call('initialize', { protocolVersion: '2024-11-05', capabilities: {}, clientInfo: { name: 'hermes-agent', version: '1.0.0' } }, 0); const sid = init.s; if (!sid) { console.log(' FAILED - no session ID. Raw:', init.d.substring(0, 300)); process.exit(1); } console.log(' Session:', sid); await call('notifications/initialized', undefined, undefined, sid); // Step 2: Site-level meta/link tags // Webflow renders http-equiv meta + link tags at the site level // NOTE: CSP contains single quotes which need HTML entities in some contexts const META = ` `; console.log('2. Inject site-level meta/links (' + META.length + ' chars)...'); const r1 = await call('tools/call', { name: 'data_scripts_tool', arguments: { context: 'final combined seo+security meta', actions: [{ label: 'site-head', set_site_freeform_code: { site_id: SID, location: 'head', content: META } }] } }, 1, sid); const d1 = parseSSE(r1.d); if (d1 && d1.error) { console.log(' ERROR:', d1.error.message); process.exit(1); } console.log(' OK (HTTP ' + r1.code + ')'); // Step 3: Page-level JSON-LD script const JSON_LD = JSON.stringify({ "@context": "https://schema.org", "@graph": [ { "@type": "Restaurant", "@id": "https://polloriko.io#restaurant", "name": "Pollo Riko Fondren", "description": "Authentic Colombian charcoal rotisserie chicken since 1992 in Houston's Fondren neighborhood.", "url": "https://polloriko.io", "telephone": "+1-713-988-9656", "servesCuisine": "Colombian", "priceRange": "$$", "image": "https://cdn.prod.website-files.com/5c642ac544c19c2e9a2b724b/5c6b56a3f80a58829c1efca8_1111.png", "address": { "@type": "PostalAddress", "streetAddress": "7229 Fondren Rd", "addressLocality": "Houston", "addressRegion": "TX", "postalCode": "77036", "addressCountry": "US" }, "geo": { "@type": "GeoCoordinates", "latitude": 29.7017643, "longitude": -95.5188543 }, "openingHoursSpecification": [{ "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], "opens": "11:00", "closes": "21:00" }], "areaServed": [{ "@type": "City", "name": "Houston" }, { "@type": "AdministrativeArea", "name": "Harris County" }], "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.6", "ratingCount": "312", "bestRating": "5" }, "hasMenu": "https://polloriko.io", "acceptsReservations": "False" }, { "@type": "FAQPage", "@id": "https://polloriko.io#faq", "mainEntity": [ { "@type": "Question", "name": "What type of food does Pollo Riko serve?", "acceptedAnswer": { "@type": "Answer", "text": "Pollo Riko is a family-owned Colombian restaurant in Houston, TX specializing in charcoal rotisserie chicken prepared over an open flame. We also serve Colombian sausages, yuca frita, patacones, arepas, and family-style sides." } }, { "@type": "Question", "name": "Where is Pollo Riko located in Houston?", "acceptedAnswer": { "@type": "Answer", "text": "Our Fondren location is at 7229 Fondren Rd, Houston, TX 77036. We have three Houston locations serving the greater Houston area including Sharpstown, Meyerland, and Westchase." } }, { "@type": "Question", "name": "What are Pollo Riko hours?", "acceptedAnswer": { "@type": "Answer", "text": "Open daily from 11:00 AM to 9:00 PM, seven days a week." } }, { "@type": "Question", "name": "Does Pollo Riko have online ordering?", "acceptedAnswer": { "@type": "Answer", "text": "Yes, you can order online for pickup or delivery through our website at polloriko.io." } }, { "@type": "Question", "name": "How long has Pollo Riko been in Houston?", "acceptedAnswer": { "@type": "Answer", "text": "Pollo Riko has been serving authentic Colombian rotisserie chicken in Houston since 1992." } } ] }, { "@type": "BreadcrumbList", "@id": "https://polloriko.io#breadcrumb", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://polloriko.io" }, { "@type": "ListItem", "position": 2, "name": "Fondren Location", "item": "https://polloriko.io" } ] }, { "@type": "WebSite", "@id": "https://polloriko.io#website", "name": "Pollo Riko - Colombian Rotisserie Chicken Houston", "url": "https://polloriko.io", "inLanguage": ["en", "es"] } ] }, null, 2); const PAGE_SCRIPT = ''; console.log('3. Inject page-level JSON-LD (' + PAGE_SCRIPT.length + ' chars)...'); const r2 = await call('tools/call', { name: 'data_scripts_tool', arguments: { context: 'json-ld structured data', actions: [{ label: 'page-script', set_page_freeform_code: { page_id: PID, location: 'head', content: PAGE_SCRIPT } }] } }, 2, sid); const d2 = parseSSE(r2.d); if (d2 && d2.error) { console.log(' ERROR:', d2.error.message); process.exit(1); } console.log(' OK (HTTP ' + r2.code + ')'); // Step 4: Publish console.log('4. Publishing...'); await new Promise(r => setTimeout(r, 2000)); const r3 = await call('tools/call', { name: 'data_sites_tool', arguments: { context: 'publish all domains', actions: [{ label: 'pub-site', publish_site: { site_id: SID, publishToWebflowSubdomain: true, customDomains: [D1, D2] } }] } }, 3, sid); const d3 = parseSSE(r3.d); if (d3 && d3.error) { console.log(' ERROR:', d3.error.message); process.exit(1); } console.log(' OK (HTTP ' + r3.code + ')'); console.log(''); console.log('5. Waiting 20s for CDN propagation + verification...'); setTimeout(() => { const cp = require('child_process'); const staging = cp.execSync('curl -s https://polloriko.webflow.io', { cwd: process.cwd(), encoding: 'utf8', timeout: 10000 }); console.log('=== STAGING VERIFICATION ==='); console.log('Has Restaurant schema:', staging.includes('Restaurant')); console.log('Has FAQPage schema:', staging.includes('FAQPage')); console.log('Has BreadcrumbList:', staging.includes('BreadcrumbList')); console.log('Has WebSite:', staging.includes('"WebSite"')); console.log('Has geo.region meta:', staging.includes('geo.region')); console.log('Has ICBM:', staging.includes('ICBM')); console.log('Has og:street-address:', staging.includes('og:street-address')); console.log('Has twitter:label1:', staging.includes('twitter:label1')); console.log('Has CSP:', staging.includes('Content-Security-Policy')); console.log('Has llms-txt link:', staging.includes('llms-txt')); console.log('Has canonical:', staging.includes('rel="canonical"')); console.log('Has nosniff:', staging.includes('nosniff')); console.log('Has Referrer-Policy:', staging.includes('Referrer-Policy')); console.log('Has X-Frame-Options:', staging.includes('X-Frame-Options')); console.log('Has Permissions-Policy:', staging.includes('Permissions-Policy')); console.log('Has X-XSS-Protection:', staging.includes('X-XSS-Protection')); console.log(''); if (staging.includes('Restaurant')) { console.log('✓ ALL SEO ELEMENTS ARE LIVE'); } else { console.log('✗ Some elements still not rendering. Check staging HTML.'); } // Also check production console.log(''); console.log('=== PRODUCTION (same, may be CDN stale) ==='); const prod = cp.execSync('curl -s -H "Cache-Control: no-cache" https://polloriko.io', { encoding: 'utf8', timeout: 10000 }); console.log('Has Restaurant schema:', prod.includes('Restaurant')); console.log('Has geo.region:', prod.includes('geo.region')); console.log('Production size:', prod.length, 'bytes'); }, 20000); })();

.jpeg)
.jpeg)



Pollo Riko's mission is to mimic the experience of dinning at a restaurant back in Colombia through our Charcoal Rotisserie Chicken over open flame with its flamboyant oven being the attraction.
Houstonian's from different parts of the world make their way to our three locations, simply prepared homestyle dishes highlight the flavors, ingredients served family-style inviting individuals to create their own experience with our different side dishes that culminate the menu at hand.
Pollo Riko family invites everyone to enjoy our gastronomy, culture, & history.