Design principles for MCP serversBe discoverable, not just documentedUnderstand context, don't just process requestsBe resilient, not just robustOptimize for intelligence, not just performanceSecurity: user consent and contextImplementing resource providersMetadata is as important as dataProgressive disclosure of complexityImplementing tool providersDesign for composabilityProvide multiple levels of abstractionHandle uncertainty gracefullyImplementing prompt providersProvide context, not just templatesMake prompts adaptiveHandling authentication and authorizationContext-aware authorizationRisk-based securityScalability and performance considerationsAI operations are computationally intensiveRequest patterns are unpredictableContext matters for performanceCode example: Building an MCP serverSummary