NA

nebius-academy-templates/mcp-security-workshop-student-version

Developer tools
0 stars 12 forks Quality 54 Trend 4

This self-serve checklist gets you ready for the Securing MCP Servers workshop. Work through it top to bottom; tick each box as you complete it.

Overview

This self-serve checklist gets you ready for the Securing MCP Servers workshop. Work through it top to bottom; tick each box as you complete it. You should be done in if your machine already has a recent Python and a working terminal. Total: 7 steps. The workshop itself is not about installing MCP servers. Once you finish Step 5, you're ready for the workshop. We'll discuss all of these during the workshop. Skimming them ahead of time means you can spend the workshop diving into the material instead of reading it for the first time. You do not need to memorize anything. - [ ] MCP specification 2025-11-25 — focus on the Security Best Practices and Authorization pages. - [ ] OWASP MCP Top 10 — read the top-level taxonomy. You do not need to memorize the IDs; recognizing the categories (tool poisoning, token passthrough, prompt injection, etc.) is enough. - [ ] Fork the upstream mcp-security-workshop repo on GitHub. - [ ] on GitHub to mcp-security-workshop- (e.g.

README

Checklist: Before the workshop

This self-serve checklist gets you ready for the Securing MCP Servers workshop. Work through it top to bottom; tick each box as you complete it. You should be done in under 30 minutes if your machine already has a recent Python and a working terminal.

Total: 7 steps. The workshop itself is not about installing MCP servers. Once you finish Step 5, you’re ready for the workshop.


Step 0 — Pre-read (~30 min the night before)

We’ll discuss all of these during the workshop. Skimming them ahead of time means you can spend the workshop diving into the material instead of reading it for the first time. You do not need to memorize anything.


Step 1 — Fork and clone

  • [ ] Fork the upstream mcp-security-workshop repo on GitHub.
  • [ ] Rename your fork on GitHub to mcp-security-workshop- (e.g. mcp-security-workshop-jane-doe). Your peers will use this naming to distinguish forks during interactive exercises.
  • [ ] Clone your renamed fork and set a shell variable you can reuse below:
    git clone https://github.com//mcp-security-workshop-.git
    cd mcp-security-workshop-
    export WORKSHOP_DIR="$(pwd)"
    

Step 2 — Local environment

  • [ ] Confirm Python 3.11 or newer is installed:
    python3 --version    # need >= 3.11
    
    If you need to install it:
    # macOS:
    brew install [email protected]
    # Linux (pyenv):
    pyenv install 3.11.9 && pyenv global 3.11.9
    
  • [ ] Install uv (the Python package/venv manager this repo uses):
    curl -LsSf https://astral.sh/uv/install.sh | sh
    exec $SHELL          # reload PATH so `uv` is on it
    uv --version         # sanity check — should print a version number
    
  • [ ] Sync dependencies (creates a project-local virtualenv and installs everything):
    cd "$WORKSHOP_DIR"
    uv sync
    

Step 3 — Dependency sanity check

  • [ ] Verify the core libraries actually import cleanly:
    uv run python -c "import mcp, httpx, jwt, yaml, starlette; print('ok')"
    
    Expected output: ok. Anything else means uv sync did not finish — re-run it and re-check.

Step 4 — Register MCP servers in your client

Pick one client — Claude Code or Cursor (though Claude is recommended as the facilitator will be using it) — and use the corresponding block below. The workshop is not about wiring up MCP servers, so we do this once now and leave it connected for the whole day. There is no remove/re-add cycle.

Claude Code

  • [ ] From the repo root, register all three servers:

    cd "$WORKSHOP_DIR"
    claude mcp add acmeops           -- uv run python -m acmeops_server --transport stdio
    claude mcp add summarizer_server -- uv run python -m summarizer_server
    
  • [ ] Confirm all three are connected:

    claude mcp list
    # All entries should show "Connected" (or a green check, depending on your version)
    

Cursor

  • [ ] Open ~/.cursor/mcp.json (create it if it doesn’t exist) and add the following block. OR via the GUI menu: Cursor > Settings > Cursor Settings > Tools & MCPs > +New MCP Server
    {
      "mcpServers": {
        "acmeops": {
          "command": "/absolute/path/to/mcp-security-workshop-/.venv/bin/python",
          "args": ["-m", "acmeops_server", "--transport", "stdio"]
        },
        "summarizer_server": {
          "command": "/absolute/path/to/mcp-security-workshop-/.venv/bin/python",
          "args": ["-m", "summarizer_server"]
        }
      }
    }
    
  • [ ] Restart Cursor. Open Cursor > Settings > Cursor Settings > Tools & MCPs. Each of the entries should show a green dot.

Step 5 — Smoke-test each server (list one tool)

In your client’s chat, send the prompt below once per server. Confirm that one of the expected tool names appears in the response. Don’t worry about behaviour here as we’ll do that during the workshop, only confirm the client can reach the server and read its tool list.

“What tools does the `` MCP server expose?”

Expected tools per server (any match is a pass):

  • [ ] acmeops — read_customer_note, draft_email, run_db_query, etc.
  • [ ] summarizer_server — summarize

If a server shows no tools or fails to connect, debug it now. Don’t wait until right before the workshop.


Step 6 — HTTP smoke-test the fake authz server

This is not an MCP server. It’s a local OAuth 2.1 authorization server that you may get to use in one demo. Don’t register it in your MCP client; just confirm that it runs.

  • [ ] Start it, hit one of the “well-known” endpoints, then stop it:
    cd "$WORKSHOP_DIR"
    uv run python -m fake_authz_server &
    sleep 2
    curl -s http://localhost:9000/.well-known/oauth-authorization-server | python -m json.tool | head -10
    # Expected: a JSON object whose "issuer" field is "http://localhost:9000"
    kill %1
    

Step 7 — Final pre-flight

  • [ ] claude mcp list (or the Cursor MCP panel) shows all six servers connected.
  • [ ] All smoke-test prompts in Step 5 returned the expected tool names.
  • [ ] uv run python -c "import mcp; print('ok')" prints ok.
  • [ ] You’ve at least skimmed the MCP 2025-11-25 spec’s Security Best Practices section.

If every box is ticked, you’re all set! See you on workshop day!

View the full README on GitHub

Install

This server does not publish a one-line install command.

Open the repository installation guide New to MCP? Start with the mcpskill.org guide →

Configuration

{ "mcpServers": { "acmeops": { "command": "/absolute/path/to/mcp-security-workshop-<firstname-lastname>/.venv/bin/python", "args": ["-m", "acmeops_server", "--transport", "stdio"] }, "summarizer_server": { "command": "/absolute/path/to/mcp-security-workshop-<firstname-lastname>/.venv/bin/python", "args": ["-m", "summarizer_server"] } } }