{"id":39954466,"url":"https://github.com/thangchung/coffeeshop-agent","last_synced_at":"2026-01-18T20:34:50.178Z","repository":{"id":317063699,"uuid":"1043725961","full_name":"thangchung/coffeeshop-agent","owner":"thangchung","description":".NET Agents technologies (Microsoft Agent Framework, MCP, A2A, AG-UI)","archived":false,"fork":false,"pushed_at":"2025-11-28T11:52:20.000Z","size":461,"stargazers_count":21,"open_issues_count":8,"forks_count":7,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-30T19:08:20.436Z","etag":null,"topics":["a2a-protocol","ag-ui-protocol","agent-framework","agentic-ai","agents","ai","dotnet","mcp","microsoft","microsoft-agent-framework","multiagent","multiagent-systems","workflows"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thangchung.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-24T13:45:39.000Z","updated_at":"2025-11-29T03:05:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"ea1dee70-3818-443b-9a91-b47426b753d1","html_url":"https://github.com/thangchung/coffeeshop-agent","commit_stats":null,"previous_names":["thangchung/coffeeshop-agent"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/thangchung/coffeeshop-agent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thangchung%2Fcoffeeshop-agent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thangchung%2Fcoffeeshop-agent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thangchung%2Fcoffeeshop-agent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thangchung%2Fcoffeeshop-agent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thangchung","download_url":"https://codeload.github.com/thangchung/coffeeshop-agent/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thangchung%2Fcoffeeshop-agent/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28549865,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T19:56:05.265Z","status":"ssl_error","status_checked_at":"2026-01-18T19:55:54.685Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["a2a-protocol","ag-ui-protocol","agent-framework","agentic-ai","agents","ai","dotnet","mcp","microsoft","microsoft-agent-framework","multiagent","multiagent-systems","workflows"],"created_at":"2026-01-18T20:34:49.493Z","updated_at":"2026-01-18T20:34:50.163Z","avatar_url":"https://github.com/thangchung.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# coffeeshop-agent\n.NET Agents technologies\n\n![](./assets/demo_coffeeshop.png)\n\n\u003e This is a demonstration application. Certain scenarios presented may be unrealistic or not suitable for real-world use. Please do not replicate or deploy this in a production environment.\n\n## High level architecture\n\n```mermaid\ngraph TD\n    subgraph \"Identity Provider\"\n        EntraID[Microsoft Entra ID]\n    end\n\n    subgraph \"User Interaction\"\n        WebApp[ChatApp \u003cbr\u003e - A2A Client]\n    end\n\n    subgraph \"Orchestration\"\n        AppHost\n    end\n\n    subgraph \"Backend Services\"\n        Counter[CounterService \u003cbr\u003e - A2A Server/Client, MCP Client]\n        Barista[BaristaService \u003cbr\u003e - A2A Server]\n        Kitchen[KitchenService \u003cbr\u003e - A2A Server]\n        ProductCatalog[ProductCatalogService \u003cbr\u003e - MCP Server]\n    end\n\n    subgraph \"Shared Infrastructure\"\n        ServiceDefaults\n    end\n\n    %% Core Interactions\n    WebApp -- \"A2A Protocol\" --\u003e Counter\n    Counter -- \"A2A Protocol\" --\u003e Barista\n    Counter -- \"A2A Protocol\" --\u003e Kitchen\n    Counter -- \"MCP Protocol\" --\u003e ProductCatalog\n\n    %% Authentication \u0026 Authorization\n    EntraID -- \"Secures\" --\u003e WebApp\n    EntraID -- \"Secures\" --\u003e Counter\n    EntraID -- \"Secures\" --\u003e Barista\n    EntraID -- \"Secures\" --\u003e Kitchen\n    EntraID -- \"Secures\" --\u003e ProductCatalog\n\n    %% Development-time Orchestration\n    AppHost -.-\u003e WebApp\n    AppHost -.-\u003e Counter\n    AppHost -.-\u003e Barista\n    AppHost -.-\u003e Kitchen\n    AppHost -.-\u003e ProductCatalog\n    \n    %% Shared Dependencies\n    WebApp -- \"Uses\" --\u003e ServiceDefaults\n    Counter -- \"Uses\" --\u003e ServiceDefaults\n    Barista -- \"Uses\" --\u003e ServiceDefaults\n    Kitchen -- \"Uses\" --\u003e ServiceDefaults\n    ProductCatalog -- \"Uses\" --\u003e ServiceDefaults\n\n    class WebApp user;\n    class Counter,Barista,Kitchen,ProductCatalog backend;\n    class AppHost orchestrator;\n    class ServiceDefaults shared;\n    class EntraID identity;\n```\n\n## Get starting\n\n```\ndotnet run\n```\n\nAccess to .NET Aspire dashboard, then open the web, and from the chat box type:\n\n```\na black coffee pls\n```\n\n```\nI want a black coffee, cappuccino, latte, 2 chicken meat balls and 2 cake pops.\n```\n\n## MCP\n\n```\nnpx @modelcontextprotocol/inspector\n```\n\n```\nhttp://localhost:5001/mcp/sse\n```\n\n```\nhttp://localhost:5001/.well-known/oauth-protected-resource\n```\n\n## A2A\n\n```sh\n$Env:GEMINI_API_KEY = '\u003ckey\u003e'; agentgateway -f .\\agentgateway\\config.yaml\n```\n\n```\nhttp://localhost:5000/.well-known/agent.json\n```\n\n## MAF - Workflow\n\n```mermaid\nflowchart TD\n  ValidatorExecutor[\"ValidatorExecutor (Start)\"];\n  SplitExecutor[\"SplitExecutor\"];\n  HandleUncertainExecutor[\"HandleUncertainExecutor\"];\n  BaristaExecuter[\"BaristaExecuter\"];\n  KitchenExecuter[\"KitchenExecuter\"];\n  AggregationExecutor[\"AggregationExecutor\"];\n\n  fan_in::AggregationExecutor::76F793D9((fan-in))\n  BaristaExecuter --\u003e fan_in::AggregationExecutor::76F793D9;\n  KitchenExecuter --\u003e fan_in::AggregationExecutor::76F793D9;\n  fan_in::AggregationExecutor::76F793D9 --\u003e AggregationExecutor;\n  ValidatorExecutor --\u003e SplitExecutor;\n  ValidatorExecutor --\u003e HandleUncertainExecutor;\n  SplitExecutor --\u003e BaristaExecuter;\n  SplitExecutor --\u003e KitchenExecuter;\n```\n\n## References\n\n- https://github.com/thangchung/practical-dotnet-aspire\n- https://github.com/thangchung/mcp-labs/blob/feat/a2a_mcp_auth/a2a_mcp_auth_dotnet\n- https://devblogs.microsoft.com/foundry/building-ai-agents-a2a-dotnet-sdk/\n- https://devblogs.microsoft.com/dotnet/build-a-model-context-protocol-mcp-server-in-csharp/\n- https://devblogs.microsoft.com/dotnet/announcing-dotnet-ai-template-preview1/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthangchung%2Fcoffeeshop-agent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthangchung%2Fcoffeeshop-agent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthangchung%2Fcoffeeshop-agent/lists"}