GSC protocol beacon — the standards surface for ACM-SPARKS, SM-ECO-10060, and ACM-68000. Stateless, deterministic, compiled canon: 7 signals, 6 SPARKS dimensions, 49 sovereign members, the Ghost header canon. Data lives on mcp.cpgknowledgegraph.ai; this surface defines the vocabulary.
Nine tools with inconsistent quality. All have descriptions (positive), but most descriptions are vague, domain-specific jargon-heavy, and lack actionable context for LLM selection. Naming is verb-based but cryptic (resolve_signal, resolve_sparks_dimension, resolve_member). Input schemas present but minimal, most parameters are bare strings with weak constraints. No output schemas documented. No error handling guidance. Tools read-only (low risk) but descriptions assume deep domain knowledge of CPG protocols, making them hard for general agents to use effectively.
The GSC wire-header canon (v3.2 — The Ghost Eighteen (locked July 18 2026)) — the eighteen x-gsc-* headers every GSC surface emits, in canon order. Curl-auditable against any live GSC surface.
Full canon record for ACM-SPARKS, SM-ECO-10060, or ACM-68000.
The 49 sovereign jurisdictional member nodes — code, namespace, jurisdiction, region, and GS1 territory GTIN. Live supply/demand data per member is the CPG Knowledge Graph's job.
The protocol family and the resolve-once spine: ACM-SPARKS classifies, SM-ECO-10060 resolves, ACM-68000 signals.
All seven signals, enumerated individually: ACM-000, ACM-200, ACM-300, ACM-403, ACM-404, ACM-451, ACM-500. One meaning, no drift.
SPARKS resolves six dimensions — SKU, Pack, Amount, Region, Kernel, and Standard — a CPG industry first.
Descriptions are domain-jargon-heavy and lack actionable context. E.g., 'SPARKS resolves six dimensions, SKU, Pack, Amount, Region, Kernel, and Standard, a CPG industry first' assumes the LLM knows what SPARKS, SKU, and these dimensions mean. No guidance on WHEN to call this tool or WHAT to do with the result.
No output schemas documented. Tools return JSON objects (via t() helper) but LLMs cannot see the structure. E.g., resolve_signal returns {code, input_code, ...SIGNALS[key]}, what fields are in SIGNALS[key]? LLMs must guess.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Canon record for a single sovereign member by ISO-style code, e.g. FR, AU, MX.
The state and meaning of a single ACM-68000 signal code. A CPG- profile code resolves to its ACM- twin; the response carries the resolved ACM- code.
Canon record for a single SPARKS dimension by letter (S, P, A, R, K, S2) or name.
Parameter descriptions are minimal or missing context. E.g., resolve_signal accepts 'code' with description 'Signal code, e.g. ACM-451 or CPG-451', but does not explain the difference between ACM- and CPG- prefixes or what happens if an invalid code is passed.
No error handling guidance. notFound() returns a generic 404 response, but LLMs are not told what to do next. Should they retry? Call a discovery tool? The error message 'is not registered in the canon' is cryptic.
Tool names use 'resolve_*' which is vague. 'resolve_signal' could mean 'look up a signal', 'convert a signal', or 'validate a signal'. Clearer names: 'get_signal', 'lookup_signal', or 'describe_signal' would better match LLM expectations.