Atlas / MCP servers / dotnet-presentations / AI Workshop

AI WorkshopBLOCK

mcp/dotnet-presentations/ai-workshop

Building GenAI Apps in C#: Microsoft Extensions for AI, Templates, Microsoft Foundry & More

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
—
Transport
stdio
License
MIT
Stars
59
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Get up to speed quickly with AI app building in .NET. This workshop covers AI application development (Parts 1-4), MCP server development (Parts 5-7), a short agent bridge module (Part 8), an applied capstone that adds AI to an existing app (Part 9), and deployment preparation and Azure deployment (Parts 10-11). The AI track uses Microsoft Foundry (Azure OpenAI) as the cloud provider, with local-model options covered in the provider module.

Prerequisites

AI Web Chat Application Requirements (Parts 1-4, 10, and 11)

  • Visual Studio 2026 or VS Code
  • .NET AI Web Chatbot template installed (dotnet new install Microsoft.Extensions.AI.Templates; walked through in Part 4)
  • MCP Server template (mcpserver; included in .NET 10.0.9+ SDK, walked through in Part 5)
  • .NET 10.0.9 SDK or later
  • Docker Desktop or Podman (recommended for the full Qdrant + Aspire path in Part 4)
  • Azure subscription with access to Microsoft Foundry (Azure OpenAI), the primary AI provider
  • Permission to create Azure AI Search resources and role assignments for the recommended Parts 10-11 deployment path; otherwise, keep the documented Qdrant fallback

When Docker is required

Docker Desktop or Podman is required when you run the workshop's Qdrant container locally. This is the recommended path in Part 4 because it demonstrates a persistent vector database, Aspire orchestration, the Aspire dashboard, and service telemetry.

Read from source at commit 33066d5c1f92OBSERVED · 2026-10-08
02

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (1 observation(s))
Shell
none-observed
Dependencies
pinned
Secrets in source
none-found

Findings (17)

CRITICALObfuscation / stealth · obf.decode_then_exec · CWE-506, CWE-94
Part 11 - Deployment/GenAiLab/GenAiLab.Web/wwwroot/lib/pdfjs-dist/dist/build/pdf.min.mjs:21
atob( ... new Function(
Why it matters. decodes a payload and executes it
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
Part 09 - Adding AI to an Existing App/eShopLite-start/Store/wwwroot/app.css:40
background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaW
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
Part 09 - Adding AI to an Existing App/eShopLite/Store/wwwroot/app.css:40
background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaW
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
Part 11 - Deployment/GenAiLab/GenAiLab.Web/wwwroot/app.css:49
background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaW
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
Part 09 - Adding AI to an Existing App/eShopLite-start/Products/Properties/launchSettings.json:1
{
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
Part 09 - Adding AI to an Existing App/eShopLite/Products/Properties/launchSettings.json:1
{
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
Part 11 - Deployment/GenAiLab/GenAiLab.Web/Components/Pages/Chat/ChatInput.razor.js:1
export function init(elem) {
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
Part 11 - Deployment/GenAiLab/GenAiLab.Web/Components/Pages/Chat/ChatMessageList.razor.js:1
// The following logic provides auto-scroll behavior for the chat messages list.
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
Part 11 - Deployment/GenAiLab/GenAiLab.Web/wwwroot/app.js:1
import DOMPurify from './lib/dompurify/dist/purify.es.mjs';
LOWInventory / provenance · inv.hidden_file · CWE-1104
.markdown-link-check.json
.markdown-link-check.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.markdownlint.json
.markdownlint.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
Part 09 - Adding AI to an Existing App/README.md:642
curl http://127.0.0.1:PORT/v1/models
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
Part 09 - Adding AI to an Existing App/README.md:648
dotnet user-secrets set "LocalModel:Endpoint" "http://127.0.0.1:PORT/v1"
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
Part 09 - Adding AI to an Existing App/README.md:667
-Uri "http://127.0.0.1:PORT/v1/chat/completions" `
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
Part 10 - Choosing Providers and Services/README.md:142
var baseUrl = "http://127.0.0.1:PORT/v1"; // replace PORT with the URL exposed by the local service
LOWInventory / provenance · mcp.no_tools_extracted · CWE-1104
Part 05 - MCP Server Basics/MyMcpServer/.mcp/server.json
Why it matters. the tool list is enumerated at runtime by tools/list, not declared in source
Fix. the page says so rather than showing an empty table
INFOInventory / provenance · inv.oversize · CWE-1104
Part 11 - Deployment/GenAiLab/GenAiLab.Web/wwwroot/lib/pdfjs-dist/dist/build/pdf.worker.min.mjs
Part 11 - Deployment/GenAiLab/GenAiLab.Web/wwwroot/lib/pdfjs-dist/dist/build/pdf.worker.min.mjs
Why it matters. 1375838 bytes not read

Gates applied: critical_finding, no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha 33066d5c1f92full audit observations/trust-audit/mcp-server/dotnet-presentations__ai-workshop.json · Report an issue / request a re-scan
03

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-0833066d5c1f92BLOCKD69first audit
04

Questions

What is the AI Workshop MCP server?

Building GenAI Apps in C#: Microsoft Extensions for AI, Templates, Microsoft Foundry & More

Is AI Workshop safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.

What credentials does AI Workshop need?

No credential environment variables were found in its source, so it appears to need none.

How does AI Workshop run?

It speaks stdio, so it runs as a local process your client starts.

How current is this page?

The grade is for one exact copy of the source (33066d5c1f92), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement