📄️ Class 1: What Is MCP, and Why GraphQL Over It?
Why a GraphQL schema is a near-ideal contract for AI agents, and how to choose between Apollo MCP Server, Spring AI's MCP starter, and rolling your own.
📄️ Class 2: Extending the Movie Schema for Agents
Add two agent-designed read operations to the Movie schema, then audit the existing watchlist mutation before agents start calling it.
📄️ Class 3: Schema Descriptions as Agent Documentation
Upgrade the Movie schema's human-grade descriptions to agent-grade contracts, resolve the rating ambiguity with cross-referencing descriptions, and add a CI lint gate.
📄️ Class 4: Apollo MCP Server in Twenty Minutes
Stand up an MCP server in front of your existing Spring GraphQL service using Apollo MCP Server. Three operation files and one config file are the whole exercise.
📄️ Class 4b: Dynamic Discovery and the Search / Introspect / Execute Pattern
The third operation-source mode in Apollo MCP Server: dynamic discovery with safety controls. Where the three-tool pattern came from, how Apollo adopted it, and when it is a better fit than curated operations.
📄️ Class 5: Apollo in Practice and Its Limits
The four practical concerns Class 4 left out, and when Apollo MCP Server is the right tool.
📄️ Class 6: Spring AI MCP Server Starter, the Spring-Native Path
Add the Spring AI MCP server starter to your existing moviedb application, expose a smoke-test tool, and see it appear in MCP Inspector.
📄️ Class 7: Translating GraphQL Operations Into MCP Tools
The core pattern of Track B: each curated GraphQL operation becomes an @McpTool method that invokes ExecutionGraphQlService in-process, with typed inputs and structured outputs.
📄️ Class 8: Tool Descriptions From the Schema
Stop duplicating GraphQL schema descriptions in @McpTool annotations. At startup, read the schema and inject its descriptions into the tool registry so the schema is the single source of truth.
📄️ Class 9: Structured Outputs and Errors
MCP CallToolResult, structuredContent and outputSchema, and how GraphQL execution outcomes (success, partial data, errors) map onto agent-readable tool results.
📄️ Class 10: Streaming, Progress, and Long-Running Tools
MCP progress notifications for tools that take seconds instead of milliseconds, what the streamable HTTP transport actually streams, and where the protocol is headed for long-running work.
📄️ Class 11: Elicitation and Sampling
MCP's two-way features. Elicitation lets the server ask the client to collect missing input from the user during a tool call. Sampling lets the server ask the client to run an LLM call. Both work only when the client supports them.
📄️ Class 12: Testing the Spring AI MCP Server
Unit, integration, contract, and property-based testing patterns for an in-process Spring AI MCP server.
📄️ Class 13: Building MCP From the Protocol Up
Implement an MCP server by hand in a Spring @RestController that handles JSON-RPC 2.0: the initialize handshake, tools/list and tools/call. The goal is to understand what the Spring AI starter does for you.
📄️ Class 14: When DIY Pays Off
When writing your own MCP server in Spring is the right choice, and when the Spring AI starter or Apollo MCP Server is the better one.
📄️ Class 15: OAuth 2.1 Resource Server
Configure your MCP server as an OAuth 2.1 resource server, as the MCP spec requires: JWT validation, protected resource metadata and scope-based authorization.
📄️ Class 16: Agent-Specific Security
Prompt injection, tool scoping, confirmation before mutations, audit logging and rate limiting: the threats that authentication cannot stop.
📄️ Class 17: Observability and Deployment
Metrics, tracing, structured logging, cost tracking, deployment topology and configuration profiles for an MCP server in production.
📄️ Class 18: Building a Spring AI Agent Client
A separate Spring Boot app that uses spring-ai-starter-mcp-client and a ChatClient to call your MCP server, so you can follow the whole loop from prompt to tool result.
📄️ Class 19: Plugging Into Claude Desktop via stdio
Switch the Spring AI MCP starter to stdio transport, wire your moviedb server into Claude Desktop, and watch the full loop work in a real client.
📄️ Class 20: Beyond Tool Enumeration
Anthropic's 'Code Execution with MCP' pattern cut one workload's token use from 150,000 to 2,000. This lesson explains what that means for what you built, and how to keep your architecture ready to change.