44 documents
System Architecture⏱️10 min read

Gap analysis — GEO & MCP infrastructure

**Status:** Verified against this repository on 2026-07-30

Gap analysis — GEO & MCP infrastructure

Status: Verified against this repository on 2026-07-30
Scope: Cross-reference of implemented code vs Generative Engine Optimization (GEO) and Model Context Protocol (MCP) requirements from the playbook (../source/JSGlobtech_GEO_Agency_Playbook.pdf), ADRs, and pricing deliverables.
Related: geo-stack.md, ../integrations/mcp-server.md, ../integrations/lead-capture.md, ADR-0001–0005


Executive verdict

JSGlobtech has a credible reference implementation of the two-layer thesis (visibility + action):

Layer Maturity
GEO (visibility) Strong foundation — llms.txt (dual path), rich Schema.org JSON-LD, entity/location signals, agent discovery hooks
MCP (action) MVP complete — live Streamable HTTP remote server, one lead tool, OpenAPI mirror, shared Zod → webhook pipeline

What is not ready is the productised client-delivery stack sold in Tier 1–3 retainers: citation reporting, monitoring SLAs, multi-tool MCP, inventory sync, abuse controls, and operational notification. Tier 1 GEO artifacts and the MCP half of Tier 2 are demoable today; reporting, Tier 2 “24/7”, and all of Tier 3 remain gaps.


Requirement model (what “good” looks like)

GEO — Generative Engine Optimization

Requirement Why it matters
Machine-readable business facts (llms.txt / equivalent) LLMs ingest dense, citable facts without scraping marketing prose
Entity-consistent structured data (JSON-LD / Schema.org) Anchors brand, location, offers, and services in a graph engines can reuse
Location / vertical / intent signals Steers when the model should cite the business
Preferred citation phrasing Reduces hallucinated names, prices, and attributes
Conventional crawler hygiene (robots.txt, sitemap, metadata) Complements GEO for traditional + hybrid retrieval
Single source of truth for facts Prevents models from quoting contradictory prices or claims
Citation measurement methodology Makes retainers defensible (non-deterministic LLM answers)

MCP — Model Context Protocol / Agentic Action Layer

Requirement Why it matters
Remote MCP server reachable by hosts Agents can invoke tools without leaving the chat
Discoverable endpoints (from GEO artifacts) Agents find tools from llms.txt / schema, not tribal knowledge
Real tools bound to business systems Differentiator vs content-only GEO agencies
OpenAPI / Actions mirror Coverage for non-MCP hosts (ChatGPT Actions, etc.)
Validation + structured errors Agents can re-prompt users instead of failing opaquely
Transport suitable for serverless Stateless Streamable HTTP for multi-instance deploys
Auth / rate limits / durability (production) Public tools without abuse controls are operational risk
Broader tool surface (booking, inventory, vertical workflows) Playbook Tier 3 and §1 “book / reserve” claims

What is implemented

GEO visibility layer — present

Component Location Notes
Canonical llms.txt public/.well-known/llms.txt → /.well-known/llms.txt Business, pitch, priced services, location signals, agent capabilities, preferred citations
Root mirror public/llms.txt → /llms.txt Byte-identical to well-known at inspection (diff silent)
JSON-LD graph components/GeoSchema.tsx in app/layout.tsx Organization, ProfessionalService, 3× SoftwareApplication, OfferCatalog
Fact source for schema lib/content.ts (siteConfig) Identity, Dubai Marina location, DHA/DED, pricing, agent URLs, social
Geo / compliance signals GeoSchema + llms.txt GeoCoordinates, areaServed, DHA/DED additionalProperty
Agent discovery in GEO llms.txt §§ Explicit Agent Capabilities; schema MCP Endpoint / OpenAPI Definition Bridges visibility → action
Page metadata app/layout.tsx Title, description, keywords (GEO/MCP), OG/Twitter, canonical, robots index/follow
Marketing GEO surface components/geo-readout.tsx Human-facing GEO section (not crawler infra)

MCP / action layer — present

Component Location Notes
Remote MCP route app/api/mcp/[transport]/route.ts Transports sse + mcp; nodejs, maxDuration=60
Server + transport lib/mcp-server.ts @modelcontextprotocol/sdk ^1.29.0; WebStandardStreamableHTTPServerTransport; stateless
Tool request_dev_consultation Only registered tool; model-oriented description + Zod input schema
OpenAPI mirror public/docs/openapi.json + POST /api/leads/submit ChatGPT Actions / Claude-style hosts
Shared lead pipeline lib/leads.ts Zod validation, lead_id, source (mcp | openapi | api), CRM webhook
CRM delivery path CRM_WEBHOOK_URL + scripts/google-apps-script/ Recommended: Apps Script → Google Sheet
CORS for agents MCP + leads routes Access-Control-Allow-Origin: *
On-site form (human) POST /api/contact Separate from agent lead path

Supporting product / knowledge — present

  • Positioning ADRs (0001–0004 accepted; 0005 proposed)
  • Architecture and integration docs that already flag playbook-vs-code gaps
  • Dogfood demo framing (site as live proof asset)

What is missing or incomplete

Critical gaps (block sellable Tier 1–2 retainers as written)

Gap Requirement source Impact
No citation-report methodology or tooling Tier 1–3 deliverable; ../strategy/kpis.md Retainer has no measurable recurring output
No MCP / GEO uptime monitoring or alerting Tier 2 “24/7 hosting & monitoring” SLA sold without instrumentation; demo outage = lost deals
No lead-arrival notification Success message promises ~1h WhatsApp/Email follow-up Unattended agent commitment with no ping to owner
Public endpoints: no auth, no rate limit, no spam protection ADR-0003 follow-ups Sheet flood / junk leads
No webhook retry / queue / DLQ ../integrations/lead-capture.md Transient CRM failure loses the lead
Pricing contradiction (playbook tiers vs published llms.txt) ADR-0005 GEO layer publishes a different offer than sales materials

High gaps (Tier 2 claims / production hardening)

Gap Notes
WhatsApp not wired Generic webhook only; pitch says “WhatsApp or CRM instantly”
No persistence beyond Sheet No DB/ORM; no durable audit trail in-app
MCP tools only — no resources or prompts Spec supports resources/prompts; unused
Exactly one MCP tool / one OpenAPI path Tier 3 sells “multi-endpoint MCP tools”
No booking / calendar integration Playbook §1 “book consultations”
No reservation / inventory / property sync Playbook §1 + Tier 3
No CI No .github/workflows; regressions on sales-critical routes unguarded
No automated llms.txt parity check Dual static files can drift
Facts duplicated across content.ts and both llms.txt files Schema follows content; llms.txt does not — drift risk (already pricing tension)

Medium gaps (GEO completeness / ops)

Gap Notes
No robots.txt / sitemap.xml (app/robots.ts / app/sitemap.ts also absent) Conventional crawler hygiene
No analytics / citation observation SDK Cannot measure organic AI referral
No client-provisioning runbooks How to stand up per-client MCP + GEO is undocumented
No vertical field on leads Target verticals (clinic, rental, etc.) collapse to geo_ai_integration
Contact form not unified with lead pipeline /api/contact bypasses submitConsultationLead()
Optional email (RESEND_*) unused for leads .env.example hooks only

Claim vs reality matrix (playbook)

Playbook / tier claim Repo reality
llms.txt + JSON-LD GEO Implemented
Content restructuring / entity facts Implemented (lib/content.ts + site)
Monthly citation reports Missing
Remote MCP + lead capture Implemented (single tool)
CRM / WhatsApp integration Partial (webhook → Sheet; WhatsApp = human follow-up promise)
24/7 hosting & monitoring Missing tooling
Multi-endpoint MCP tools Missing
Live inventory / property sync Missing
Book consultations / process reservations Missing (lead capture only)
Competitor displacement cadence Missing process

Coverage scores (heuristic)

Relative to a full GEO + MCP productised offer (not to a marketing-site MVP):

Domain Implemented Score
GEO discovery artifacts Dual llms.txt, location/intent/citation sections ~80%
GEO structured data Rich multi-type JSON-LD + offer catalog ~85%
GEO fact consistency Dual files + content drift; pricing ADR open ~55%
GEO measurement / reporting None ~5%
Conventional SEO crawl aids Metadata yes; robots/sitemap no ~40%
MCP transport & hosting pattern Stateless Streamable HTTP, CORS, dual paths ~90%
MCP tool surface One tool; no resources/prompts ~25%
Agent host coverage MCP + OpenAPI ~75%
Business-system binding Webhook → Sheet; no WhatsApp/calendar/PMS ~35%
Production hardening No auth/rate limit/retry/CI/monitoring ~20%

Overall: strong dogfood demo / Tier 1 artifact + MCP proof; weak retainer operations and Tier 3 action depth.


Priority roadmap (engineering, not calendar)

Ordered by risk to revenue and credibility:

  1. Resolve ADR-0005 — Align public GEO facts with the commercial offer (or stop quoting tiers).
  2. Write citation-report methodology — Frozen prompts, engines/modes, run counts, frequency metric; then optional automation.
  3. Lead notification + abuse controls — Owner alert on lead; rate limit public MCP/REST endpoints.
  4. Uptime checks on /api/mcp/sse, both llms.txt paths, /docs/openapi.json.
  5. Webhook durability — Retry/queue or at least persist failed payloads.
  6. Generate llms.txt from lib/content.ts + CI parity check; add robots.ts / sitemap.ts.
  7. Expand MCP tool surface only when selling vertical workflows (booking, inventory) — quote as engineering, not as included Tier 2.
  8. Client delivery pack — Template GEO/MCP deploy runbook for non-JSGlobtech domains.

Sellable today vs do-not-claim

Safe to demonstrate / sell as shipped

  • Dual-path llms.txt with citation and agent discovery sections
  • Schema.org JSON-LD with Dubai/UAE entity and offer signals
  • Live remote MCP request_dev_consultation
  • OpenAPI lead action + shared validation
  • Webhook delivery to Google Sheets (when CRM_WEBHOOK_URL set)

Do not claim as implemented

  • Calendar booking or reservation processing inside chat
  • Native WhatsApp delivery (unless a separate relay is built for that client)
  • 24/7 monitoring SLA
  • Multi-tool MCP / live inventory sync
  • Automated monthly citation reporting
  • Fixed GEO retainer prices while llms.txt still says custom scoping

File map (quick reference)

GEO
  public/.well-known/llms.txt     canonical facts
  public/llms.txt                 mirror
  components/GeoSchema.tsx        JSON-LD
  lib/content.ts                  schema fact source
  app/layout.tsx                  metadata + GeoSchema mount

MCP / agents
  app/api/mcp/[transport]/route.ts
  lib/mcp-server.ts
  app/api/leads/submit/route.ts
  public/docs/openapi.json
  lib/leads.ts
  scripts/google-apps-script/

Absent
  robots.txt / sitemap
  monitoring / CI / rate limits
  MCP resources & prompts
  booking / inventory tools
  citation reporting tooling

Method

Inspection of application code under app/, components/, lib/, public/, package.json, and cross-check against knowledge/ ADRs, architecture/geo-stack.md, integrations/mcp-server.md, integrations/lead-capture.md, sales/pricing-tiers.md, and strategy/kpis.md. Playbook claims not present in code are listed as gaps rather than assumed delivered.