The Model Context Protocol (MCP) enables seamless communication between AI applications (clients) and external data sources or tools (servers).
MCP Client - Server interactions
Here’s a simple sequence diagram showing how MCP servers work:
sequenceDiagram
  participant User as User
  participant Host as VScode / Claude / ChatGPT Desktop
  participant Client as MCP Client
  participant Server as MCP Server
  participant Resource as External Service
  User ->> Host: Open application
  Host ->> Client: Initialize client
  Client ->> Server: initialize request with capabilities
  Server ->> Client: initialize response with capabilities
  Client ->> Server: initialized notification
  User ->> Host: Make a request
  Host ->> Client: Forward request
  alt Resource Request (Application-controlled)
    Note right of Client: A Resource is context data from the server<br/>Examples: file contents, code history, database schemas<br/>Resources help LLMs understand context
    Client ->> Server: resources/list or resources/read
    Server ->> Resource: Fetch data (e.g., read files, query DB)
    Resource ->> Server: Return data
    Server ->> Client: Resource content
    Client ->> Host: Add context to LLM prompt
  else Tool Execution (Model-controlled)
    Note right of Client: A Tool is a function the LLM can call<br/>Examples: web search, file writing, API calls<br/>Tools let LLMs take actions
    Client ->> Server: tools/call
    Server ->> Resource: Execute operation
    Resource ->> Server: Return result
    Server ->> Client: Tool result
    Client ->> Host: Show result to LLM
  else Sampling Request (Server-initiated)
    Note right of Server: Sampling lets servers request LLM generations<br/>Examples: analyzing data, making decisions<br/>Enables agentic/recursive workflows
    Server ->> Client: sampling/createMessage
    Client ->> Host: Request LLM generation
    Host ->> User: Request approval (optional)
    User ->> Host: Approve request
    Host ->> Client: Return generation
    Client ->> Server: Generation result
  end
  Client ->> Host: Return response
  Host ->> User: Display result
  User ->> Host: Close application
  Host ->> Client: Terminate
  Client ->> Server: Disconnect
➕ Source code for the sequence diagram
      sequenceDiagram
      participant User as User
      participant Host as VScode / Claude / ChatGPT Desktop
      participant Client as MCP Client
      participant Server as MCP Server
      participant Resource as External Service
      User ->> Host: Open application
      Host ->> Client: Initialize client
      Client ->> Server: initialize request with capabilities
      Server ->> Client: initialize response with capabilities
      Client ->> Server: initialized notification
      User ->> Host: Make a request
      Host ->> Client: Forward request
      alt Resource Request (Application-controlled)
         Note right of Client: A Resource is context data from the server
Examples: file contents, code history, database schemas
Resources help LLMs understand context
         Client ->> Server: resources/list or resources/read
         Server ->> Resource: Fetch data (e.g., read files, query DB)
         Resource ->> Server: Return data
         Server ->> Client: Resource content
         Client ->> Host: Add context to LLM prompt
      else Tool Execution (Model-controlled)
         Note right of Client: A Tool is a function the LLM can call
Examples: web search, file writing, API calls
Tools let LLMs take actions
         Client ->> Server: tools/call
         Server ->> Resource: Execute operation
         Resource ->> Server: Return result
         Server ->> Client: Tool result
         Client ->> Host: Show result to LLM
      else Sampling Request (Server-initiated)
         Note right of Server: Sampling lets servers request LLM generations
Examples: analyzing data, making decisions
Enables agentic/recursive workflows
         Server ->> Client: sampling/createMessage
         Client ->> Host: Request LLM generation
         Host ->> User: Request approval (optional)
         User ->> Host: Approve request
         Host ->> Client: Return generation
         Client ->> Server: Generation result
      end
      Client ->> Host: Return response
      Host ->> User: Display result
      User ->> Host: Close application
      Host ->> Client: Terminate
      Client ->> Server: Disconnect
   
Why are MCP servers needed?
Separation of concerns
The client-server architecture in MCP follows a key design principle: separation of concerns.
graph TD
    subgraph "Host Application"
        Host[Host Process]
        Client1[MCP Client 1]
        Client2[MCP Client 2]
        Client3[MCP Client 3]
        Host --> Client1
        Host --> Client2
        Host --> Client3
    end
    subgraph "External Processes"
        Server1[MCP Server 1<br>Files & Git]
        Server2[MCP Server 2<br>Database]
        Server3[MCP Server 3<br>External APIs]
    end
    Client1 <--> Server1
    Client2 <--> Server2
    Client3 <--> Server3
Why Not Have the Client Do Everything?
- Security Boundaries:
    
- Servers maintain security isolation between different systems
 - Each server has limited access to only what it needs
 - The client doesn’t need credentials for every possible system
 
 - Simplicity and Maintainability:
    
- Each server can focus on one specific domain (files, databases, etc.)
 - Easier to build, test, and maintain focused servers
 - Modular approach allows servers to be developed independently
 
 - Domain Specialization:
    
- Servers can be built by domain experts (database specialists, etc.)
 - Each server can implement specialized functionality for its domain
 - Optimized implementations for different use cases
 
 - Distribution and Scaling:
    
- Servers can run locally or remotely, wherever makes most sense
 - Some servers might run close to data sources for performance
 - Allows scaling different components independently
 
 - Adaptability:
    
- New servers can be added without changing client implementation
 - Existing servers can be improved independently
 - Encourages ecosystem growth and specialization
 
 - User Control:
    
- Users can choose which servers to connect to
 - Different security policies can be applied to different servers
 - Enables granular permission management
 
 
How do I start?
Grab the SDK for your favourite programming language: https://github.com/modelcontextprotocol and start building!
My short explanation of the sequence diagram
@glich.stream How MCP clients/servers work. This is a sequence diagram breaking down the types of exchanges that occur between an mcp client, server and external service allowing the large language models to control the behaviour of that service or fetch / store information from it