{"name":"io.github.greencore-solutions/a2a-retailmedia","slug":"greencore-solutions-a2a-retailmedia","title":"A2A Retailmedia — the agentic retail-media hub for grocery","description":"Connecting grocery retail to 350k makers for media buys.","url":"https://mcp.market/server/greencore-solutions-a2a-retailmedia","rating":null,"grade":"B","score":79,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-10-05T05:14:50.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T06:35:35.837Z","last_ok_at":"2026-11-04T06:35:35.837Z","latency_ms":414},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/greencore-solutions/a2a-retailmedia","website":"https://a2a-retailmedia.ai","version":"1.0.2","remotes":[{"type":"streamable-http","url":"https://mcp.a2a-retailmedia.ai/mcp"}],"packages":[],"tools":[{"name":"a2a_handoff","description":"Hand to a person: the state of a handoff and its Navigator desk ticket, where the media program has no agent.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"handoff_id":{"type":"string"}},"required":["handoff_id"]}},{"name":"check_eligibility","description":"Confirm it is on the shelf: does the grocery record list this GTIN at this banner in this market? No listing, no media pitch. Read live from the A2A Grocery door.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"gtin":{"type":"string"},"banner":{"type":"string"},"country_iso":{"type":"string"}},"required":["gtin","banner","country_iso"]}},{"name":"enrol_maker","description":"Makers: be seen. Enrol a maker for media exposure in grocery: its name, its markets (one or more of the 20), the tick, and a contact a person can answer. Enrolment only — a handoff waits for a budget a person has approved.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"maker":{"type":"string"},"markets":{"items":{"type":"string"},"type":"array"},"media_exposure":{"type":"boolean"},"contact":{"type":"string"}},"required":["maker","markets","media_exposure","contact"]}},{"name":"find_buyer","description":"Qualify the buyer: find a maker on the grocery record by name, with its own website where the record has one.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"maker":{"type":"string"},"market":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"decision_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["maker"]}},{"name":"find_makers","description":"Find the brand: makers on the grocery record of one market (node = one of the 20 markets). segment is taken as a lane where it names one (organic, free-from, plant-based, artisan, origin, premium). Read live from the A2A Grocery door.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"segment":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"node":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null}}}},{"name":"gate_transaction","description":"The gate before a handshake: allow or deny for one market and one actor class. Returns a decision_id the handshake tools ask for. A deny is not charged.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string"},"actor_class":{"type":"string"}},"required":["market","actor_class"]}},{"name":"get_banner_card","description":"The signed card of one banner and its status (unclaimed, claimed or registered). banner = the banner's slug, id or name.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string"},"banner":{"type":"string"}},"required":["market","banner"]}},{"name":"list_banner_cards","description":"The cards of one market, optionally by status (unclaimed, claimed, registered): banner, media program, status and the card's address.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"limit":{"default":200,"type":"integer"},"offset":{"default":0,"type":"integer"}},"required":["market"]}},{"name":"list_banners","description":"Pick the banners: the grocery banners of one market with each one's media program (or \"none listed\") and card status. with_program=true returns only banners with a program listed.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string"},"with_program":{"default":false,"type":"boolean"},"search":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"limit":{"default":100,"type":"integer"},"offset":{"default":0,"type":"integer"}},"required":["market"]}},{"name":"list_packages","description":"Match a package: what one banner's media program says it sells, in the program's own words, each tagged onsite, offsite or in-store. Offsite is tagged so it is never taken for a shelf slot. Empty where no program is listed — the agent stops.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string"},"banner":{"type":"string"},"decision_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["market","banner"]}},{"name":"log_audit","description":"Write one audit line for a step of the chain; returns its id.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"event":{"type":"string"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["event"]}},{"name":"pull_measurement","description":"Read the till: results of a campaign, returned by the retailer's program. Available only after the program returns a campaign id for a handoff.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"handoff_id":{"type":"string"}},"required":["handoff_id"]}},{"name":"quote_package","description":"Price it: returns where the banner's own media program publishes its rates or takes an enquiry. GSC never prices; a quote comes from the retailer's program.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string"},"banner":{"type":"string"},"decision_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["market","banner"]}},{"name":"receive_demand","description":"Retailer side: a registered program agent takes a qualified packet. Only a card in the registered state can receive; any other card is refused and nothing is charged.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string"},"banner":{"type":"string"},"handoff_id":{"type":"string"},"decision_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["market","banner","handoff_id"]}},{"name":"renew_package","description":"Renew: a prior quote id from the retailer's program and a new approved budget. Without a quote id from the program there is nothing to renew.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"prior_quote_id":{"type":"string"},"budget":{"type":"number"},"budget_approved_by":{"type":"string"},"decision_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["prior_quote_id","budget","budget_approved_by"]}},{"name":"resolve_actor","description":"Who is asking? maker, brand_owner, agency, distributor or retailer_media_team (trade); auditor (read only). The consumer is never the counterparty.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"actor_class":{"type":"string"}},"required":["actor_class"]}},{"name":"resolve_gtin","description":"Confirm the product is real: is this Global Trade Item Number (GTIN) well-formed, and is it on the grocery record, with its brand and maker. Read live from the A2A Grocery door.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"gtin":{"type":"string"}},"required":["gtin"]}},{"name":"resolve_jurisdiction","description":"Where is the media bought? Resolve a market (e.g. FR, UK, US, Japan) to one of the 20 markets on the record. UK is the label; GB is accepted.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"market":{"type":"string"}},"required":["market"]}},{"name":"submit_demand","description":"Hand off: the packet — the maker, a budget a person has approved, one or more GTINs, a market and a list of banners — or a gap naming what is missing. Routes each banner by its card status: unclaimed is a referral, claimed goes to the retailer's media team, registered goes agent to agent. Settles at the door.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"maker":{"type":"string"},"budget":{"type":"number"},"budget_approved_by":{"type":"string"},"gtins":{"items":{"type":"string"},"type":"array"},"market":{"type":"string"},"banners":{"items":{"type":"string"},"type":"array"},"contact":{"type":"string"},"decision_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["maker","budget","budget_approved_by","gtins","market","banners","contact"]}}],"scan":{"score":79,"grade":"B","scanned_at":"2026-10-14T12:21:25.188Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-14T12:21:25.131Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1058ms"]},"poisoning":{"score":15,"max":15,"notes":["19 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 2 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 9 days ago"]},"identity":{"score":6,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://mcp.a2a-retailmedia.ai/mcp","reachable":true,"authRequired":false,"latencyMs":1058,"serverInfo":{"name":"a2a-retailmedia","version":"4.0.3"}}],"packages":[],"repo":{"found":true,"owner":"greencore-solutions","repo":"a2a-retailmedia","archived":false,"pushedAt":"2026-10-05T05:14:50Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/279137771?v=4","ownerCreatedAt":"2026-04-24T22:25:54Z","license":"MIT"},"icon":{"url":"https://a2a-retailmedia.ai/favicon.svg","source":"registry"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-10-05T05:14:50.000Z","score":23}}}},"grade_history":[],"reviews":[]}