A2A Cosmetics

io.github.greencore-solutionsPublished by GitHub account greencore-solutionsv1.0.3Updated Nov 5, 2026

Agent-to-Agent (A2A) hub for cosmetics: skin care, fragrance, sun care, dermocosmetics.

Overview

AI-generated overview

Business-to-business A2A/MCP hub for cosmetics that lets an assistant check market rules, gate a transaction, and look up cleared products, prices and…

What you can do
  • Resolve the ship-to market and the actor class, then gate a transaction to get an allow or deny with a reason code and rule-set version
  • Look up regulatory facts: ingredient status per market, product-type classification, notification duties, label and claims rules, safety labels and enforcement events
  • Search, read and compare cleared product records, and verify a GTIN against the resolver
  • Find verified suppliers, availability, price and product documents once a gate decision allows it
  • Open an order intent, hand the buyer to a counterparty or market agent over A2A, and write audit lines
  • Search and look up products through Universal Commerce Protocol catalogue calls
When to use it
Useful when an assistant has to answer cosmetics compliance and sourcing questions across several jurisdictions, or to run a gated B2B flow from product check to order intent and handoff. Reads are open, so it also works for plain research on ingredients, labels and recalls.
Requirements
Remote streamable-HTTP endpoint; nothing to install. Reads need no credentials. The six transacting tools need a client-credentials Bearer token from the issuer a2a-registry.ai, obtained by registering at its OAuth registration endpoint. Order intents settle by x402 payment.
Before you install
The transacting tools (availability, price, documents, order intent, handoff) refuse without an allow decision from the gate, so the three gate calls must come first. Order intents settle by x402 in USDC on Base, which spends real money. log_audit writes to an audit record. Product facts are served from a third-party resolver, and the server states it is an information source, not a recommendation, and that AI makes mistakes.

Installation

In SourceWeft

  1. Open A2A Cosmetics in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.greencore-solutions%2Fa2a-cosmetics/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "a2a-cosmetics": {
      "type": "http",
      "url": "https://mcp.a2a-cosmetics.ai/mcp"
    }
  }
}

README

A2A Cosmetics — connect kit

Agent-to-Agent (A2A) + Model Context Protocol (MCP) hub for cosmetics.

Business to business: brands, manufacturers, retailers, distributors and their AI agents. Eighteen markets, thirteen rule sets; every answer names the market, the rule set and the version it was judged against. Operated by GreenCore Solutions Corp. Public connect kit, MIT.

Notice: Artificial intelligence makes mistakes. A2A Cosmetics is an information source, not a recommendation. Rules differ by jurisdiction — refer to the regulator in your jurisdiction for the information that applies to you.

The door

streamable-HTTP, stateless, server name `a2a-cosmetics`, door version 1.0.0, 20 tools (read from the wire 2026-09-20) Product facts on this hub are served live from gtinfetch.ai, the GTIN resolver for AI agents; every answer carries its source page, date read and gtinfetch’s signature. Paid resolves at x402.gtinfetch.ai.
  • MCP: https://mcp.a2a-cosmetics.ai/mcp — any client that speaks streamable-HTTP: { "url": "https://mcp.a2a-cosmetics.ai/mcp", "transport": "streamable-http" }
  • A2A 0.3.0 JSON-RPC: https://a2a-cosmetics.ai/a2a (the hub) and https://<cc>.a2a-cosmetics.ai/a2a (one market agent per market, answered from its own Azure region)
  • Agent Card: https://a2a-cosmetics.ai/.well-known/agent-card.json (ES256, kid a2ac-2026-09; keyring /.well-known/jwks.json)
  • Setup: https://a2a-cosmetics.ai/setup · Docs: https://a2a-cosmetics.ai/docs · Claim your record: https://a2a-cosmetics.ai/claim
  • Official MCP Registry: io.github.greencore-solutions/a2a-cosmetics (server.json in this repo)

The gate

Three calls before any price: resolve_jurisdiction → resolve_actor → gate_transaction. Twelve reason codes: ALLOW · REQUIRE_NOTIFICATION · REQUIRE_RESPONSIBLE_PERSON · DENY_NOT_A_COSMETIC_HERE · DENY_INGREDIENT_BANNED · DENY_INGREDIENT_LIMIT · DENY_CLAIM · DENY_MARKET · DENY_ACTOR_CLASS · DENY_UNLICENSED_AGENT · DENY_NO_GTIN · DENY_NOT_VERIFIED.

The twenty tools

  • Gate — resolve_jurisdiction, resolve_actor, gate_transaction
  • Regulatory truth — get_ingredient_record, get_market_status, get_notification_requirements, get_label_and_claims, get_enforcement_watch
  • Catalogue — search_cleared_items, get_item, compare_items
  • Supply — find_verified_supplier, get_availability, get_price
  • Documents — get_product_documents, verify_gtin
  • Commerce — create_order_intent, a2a_handoff
  • Operations — get_safety_label, log_audit

Reads are open. The six transacting tools take a client-credentials Bearer from the issuer, https://a2a-registry.ai (register at /oauth/register; see https://a2a-cosmetics.ai/auth.md).

The agents

RoleHostnameAgentsRegion
Hub (concierge)a2a-cosmetics.ai1South Central US
Registry (token questions)a2a-registry.ai1South Central US
Payments door (receipt questions)a2a-x402.ai1South Central US
Actor-class entry pointspharmacy · prescriber · wholesaler · brand + .a2a-cosmetics.ai4South Central US
Handoff (referral only)handoff.a2a-cosmetics.ai1South Central US
Enforcement watchwatch.a2a-cosmetics.ai1South Central US
Auditor Portaudit.a2a-cosmetics.ai1South Central US

36 agents live, 0 product-line slots reserved on the tenant table; by region: Australia East 1 · Brazil South 1 · Canada Central 1 · Central India 1 · France Central 2 · Germany West Central 1 · Italy North 1 · Japan East 1 · Korea Central 1 · Mexico Central 1 · Poland Central 1 · South Central US 18 · Southeast Asia 1 · Spain Central 1 · Switzerland North 1 · UAE North 1 · UK South 1 · West Europe 1. Counted from the hub's list_agents on 2026-09-20; door version 1.0.0, 20 tools.

Examples

Stock clients, no adapter: examples/aws_strands.py · examples/azure_semantic_kernel.py · examples/google_genai.py · examples/generic_mcp_client.py; A2A: examples/a2a_aws_strands.py · examples/a2a_azure_agent_framework.py · examples/a2a_google_sdk.py.

Pay on it

x402 is live on https://a2a-x402.ai (USDC on Base, settlement after the gate; a refused order intent is not settled and not charged). The Machine Payments Protocol, the Universal Commerce Protocol and the Agentic Commerce Protocol are built and dark until they can settle; the Agent Payments Protocol sits on the Agent Card. Front door: https://a2a-pay.ai.

Contact

[email protected] — the registry contact for every listing this hub files.

Source: README.md at commit 2821433

Tools

24

resolve_jurisdiction

Resolve Jurisdiction

Where is this going? Resolve a ship-to (e.g. 'US', 'US-CA', 'UK', 'FR', 'EU-DE', 'JP') to one of the 18 markets and its rule set (13 rule sets; the six EU markets share one). UK is the label; machine fields carry the ISO code GB.

Parametersship_torequired

resolve_actor

Resolve Actor

Who is asking? Brand, manufacturer, retailer or distributor (business to business); auditor (read-only); agent (inherits the class of the credential it presents — none returns DENY_UNLICENSED_AGENT). The consumer is never the counterparty. Returns communication_class: trade_information or public.

Parameterscredentialactor_classrequired

gate_transaction

Gate Transaction

Allow or deny, with the reason and the rule. Takes a product (GTIN or catalogue id; optional), the ship-to market, the actor class and, when no record exists yet, the product type, ingredients (INCI) and claims. Returns one of twelve reason codes (ALLOW · REQUIRE_NOTIFICATION · REQUIRE_RESPONSIBLE_PERSON · DENY_NOT_A_COSMETIC_HERE · DENY_INGREDIENT_BANNED · DENY_INGREDIENT_LIMIT · DENY_CLAIM · DENY_MARKET · DENY_ACTOR_CLASS · DENY_UNLICENSED_AGENT · DENY_NO_GTIN · DENY_NOT_VERIFIED), the rule-set version, the source page and a decision_id for the downstream tools.

Parametersclaimschannelproductship_torequiredcredentialactor_classrequiredingredientsproduct_type

get_ingredient_record

Get Ingredient Record

One ingredient, and its status in every market: the standard ingredient name (INCI), aliases, and per rule set whether it is prohibited, restricted (with the limit or condition) or listed, each with the official list and its source page.

Parametersingredientrequired

get_market_status

Get Market Status

Is this product type a cosmetic here? Product type by market: cosmetic, drug, special class (functional cosmetic, quasi-drug, grade 2, therapeutic good) or not permitted — with the rule-set version and the regulator's page.

Parametersmarketrequiredproduct_typerequired

get_notification_requirements

Get Notification Requirements

What must be filed before sale in a market: the notification scheme, the responsible-person requirement and, for a product type in a special class, the extra step (review, registration, listing) — each with its source page.

Parametersmarketrequiredproduct_type

get_label_and_claims

Get Label And Claims

What the label must say, and which claims are allowed: the label requirements of the market and the claims rules of record (patterns that take a product out of the cosmetic class), each with its source page. Optional claims are checked against the rules.

Parametersclaimsmarketrequired

get_enforcement_watch

Get Enforcement Watch

Recalls, bans and safety alerts, dated: enforcement events by market, ingredient, brand or since a date, each with its source page.

Parametersquerysincemarket

search_cleared_items

Search Cleared Items

Find products cleared for this market: validated product records in a market (query by product name, brand, product type or lane; optional lane filter: suncare · fragrance · dermocosmetics · peptides · korean · sustainable). Only validated rows are served; each item carries its claim status and market status.

Parameterslanelimitquerymarketrequireddecision_idproduct_type

get_item

Get Item

Product record from gtinfetch.ai (signed); hub layer: seat, market, claim, price, availability. One product by GTIN, fully resolved: taxonomy path, variant or form, brand, market, claim status, market status, availability; after the gate also ingredients, claims, attributes, shades (parent and child) and offers.

Parametersgtinrequiredmarketdecision_id

compare_items

Compare Items

Compare products, variants and shades side by side (two to eight GTINs or catalogue ids).

Parametersgtinsrequiredmarketdecision_id

find_verified_supplier

Find Verified Supplier

Verified makers and brands for this product or product type in a market: supplier records (brand · manufacturer) with their claim status — verified first, then claimed, then listed. Takes the decision_id of an allow decision.

Parametersgtinlimitquerymarketrequireddecision_idrequired

get_availability

Get Availability

In stock, and where: the availability block of a product (banners on the shelf of record, product URLs read live at load, store counts where the retailer record carries one) once gate_transaction has answered allow (decision_id).

Parametersgtinrequiredmarketdecision_idrequired

get_price

Get Price

The price for this buyer: the price basis (list · contract) from the supplier's offers on the record, once gate_transaction has answered allow (decision_id). Tiers buy services, never rank.

Parametersgtinrequiredmarketdecision_idrequired

get_product_documents

Get Product Documents

Safety report, certificate of analysis, data sheet: the documents on a product record (product information file pointer, safety assessment, certificate of analysis, safety data sheet), each a URL with its read date; decision_id required.

Parametersgtinrequiredmarketdecision_idrequired

verify_gtin

Verify Gtin

Product record from gtinfetch.ai (signed); hub layer: seat, market, claim, price, availability. Is this GTIN real, and whose is it? Check-digit validation, the GS1 prefix, and the validated record(s) that carry it on this hub with their brand and claim status.

Parametersgtinrequired

create_order_intent

Create Order Intent

Open an order between two agents: an order intent for a cleared product after the gate; the intent carries reason_code + rule_set_version and settles by x402 on a2a-x402.ai.

Parametersgtinrequiredmarketship_toquantityrequireddecision_idrequired

a2a_handoff

A2A Handoff

Hand the buyer to the right agent over Agent-to-Agent (A2A): with an allow decision the order intent goes to the counterparty's agent (envelope + card URL); with a deny, the market agent of the ship-to (the regulator's home page beside it) — a referral, never a sale to a consumer.

Parametersintent_iddecision_idcounterparty_card_url

claim_seat

Claim Seat

A brand's agent claims its seat on A2A Cosmetics. Give the agent's card URL and the GTINs the brand claims: every GTIN must resolve on gtinfetch.ai to the maker the card names, and the category comes first (beauty and personal care proceed; a grocery record is referred to a2a-grocery.ai; peptides to a2a-peptides.ai; beer, wine and spirits are refused; an unresolved GTIN is refused). An accepted claim answers a challenge for the card's domain (a DNS TXT record or a well-known file); call again with the challenge_id once it is published: a pass moves the brand's rows from listed to claimed and answers the seat key. With the seat key, rows sets the seat's own price, availability, markets and claims, its own GTINs only. Every claim, accepted or refused, is logged. Verified is a person's step, never a tool's.

Parametersrowsgtinscard_urlrequiredseat_keychallenge_id

search_catalog

Search Catalog

Universal Commerce Protocol (UCP) catalogue search, version 2026-08-25 (dev.ucp.shopping.catalog.search). arguments: meta {'ucp-agent': {profile}} (required) and catalog {query, context {address_country}, filters {categories, price {min, max} in minor units}, pagination {limit, cursor}}. Serves the priced subset: rows whose maker's list price is on the record (claimed seats with a listed price), keyed by GTIN, each with its claim_status. Every other row stays on search_cleared_items.

Parametersmetacatalog

lookup_catalog

Lookup Catalog

Universal Commerce Protocol (UCP) catalogue lookup, version 2026-08-25 (dev.ucp.shopping.catalog.lookup). arguments: meta {'ucp-agent': {profile}} (required) and catalog {ids: product ids (GTIN) or variant ids (<market>:<gtin14>), up to 50; context; filters}. Found rows come back as products with their claim_status; an id outside the priced subset answers an info not_found message.

Parametersmetacatalog

get_product

Get Product

Universal Commerce Protocol (UCP) product detail, version 2026-08-25 (dev.ucp.shopping.catalog.lookup). arguments: meta {'ucp-agent': {profile}} (required) and catalog {id: a GTIN or a variant id <market>:<gtin14>; context; filters}. One product of the priced subset with its variants per market, list price and claim_status; outside the subset, ucp.status error and not_found.

Parametersmetacatalog

get_safety_label

Get Safety Label

Warnings and age limits: the warning statements the market requires for a product type (sunscreen, hair dye, aerosols, children's products) and the safety-alert scheme of the regulator, each with its source page.

Parametersmarketrequiredproduct_type

log_audit

Log Audit

Write a line to the audit record for a gate decision, an order intent or a handoff (returns the line id).

Parameterskindrequirednotereference_idrequired

Version history

4
  1. v1.0.3LatestNov 5, 2026
  2. v1.0.2Nov 4, 2026
  3. v1.0.1Sep 21, 2026
  4. v1.0.0Sep 21, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts