Model Context Protocol
Model Context Protocol

Model Context Protocol

Introduction

Large Language Models (LLMs) are transforming industries, but unlocking their true potential often hinges on a critical challenge: connecting them to the outside world. Developers wanting to integrate models like Claude with specific company documents, live databases, or custom APIs faced a fragmented landscape. Each connection meant grappling with different APIs, authentication methods, and data formats – a messy, time-consuming puzzle of bespoke integrations. What if your AI could seamlessly access internal knowledge bases or trigger external tools without needing a custom-built bridge for every single one?

That's the promise delivered by the Model Context Protocol (MCP). Born from the need for a unified approach, MCP introduces a standardized client-server architecture specifically designed for these interactions. It acts as a common language, defining how LLM applications can reliably discover and utilize external data sources (as 'Resources') and functionalities (as 'Tools'). Forget the tangled web of custom connectors; MCP paves the way for building more powerful, context-aware AI applications by providing a single, consistent framework for bridging the gap between the LLM and your unique digital ecosystem. Ready to simplify your LLM integrations? Let's dive in. In this article we will look at the core parts of MCP, including the Architecture, Resources, Tools, and more.

Model Context Protocol (MCP) Architecture

The Model Context Protocol (MCP) is a client-server architecture that facilitates communication between LLM applications and integrations.

Generally, a host (chat app) has multiple clients. Each of these clients is a link to a server running code that does something (api calls, data retrieval, etc…).

A single host can have many clients, each linking to a server with multiple tools or resources. It is a standardised way of linking AI models to the world. The following is more technical details about the various aspects that make MCP work.

Core Components

Architecture Overview:

  • Hosts: LLM applications (Claude Desktop, IDEs) initiating connections.
  • Clients: Maintain 1:1 connections with servers inside the host application. Each client is a connection between the host and a server.
  • Servers: Provide context, tools, and prompts to clients.

There are a few layers that make this work.

Protocol Layer:

  • Framing messages (so they’re properly formatted)
  • Linking requests to responses (so you know which reply belongs to which question)
  • Managing patterns of communication (requests, responses, notifications)

Transport Layer supports two mechanisms:

  1. Stdio transport: Uses standard input/output for local processes
  2. HTTP with SSE transport: Server-Sent Events for server-to-client messages and HTTP POST for client-to-server

All transports use JSON-RPC 2.0 format.

Message Types:

  1. Requests: Expect responses from the other side
  2. Results: Successful responses to requests
  3. Errors: Indicate request failures
  4. Notifications: One-way messages without response

Connection Lifecycle

  1. Initialization:
    • Client sends initialize request with protocol version and capabilities
    • Server responds with its protocol version and capabilities
    • Client sends initialized notification as acknowledgment
  2. Message Exchange:
    • Request-Response pattern
    • Notifications (one-way messages)
  3. Termination:
    • Clean shutdown via close()
    • Transport disconnection
    • Error conditions

Standard error codes include ParseError, InvalidRequest, MethodNotFound, InvalidParams, and InternalError.

Implementation Examples

TypeScript Example:
Python Example:

Transport Selection:

  • Use stdio for local, same-machine communication
  • Use SSE for scenarios requiring HTTP compatibility

Message Handling:

  • Validate inputs thoroughly
  • Use type-safe schemas
  • Implement timeouts
  • Report progress incrementally for long operations

MCP Resources

Resources are a core primitive in the Model Context Protocol that allow servers to expose data and content for LLM interactions.

The model will decide when to use specific resources based on the context of the conversation, the user’s needs, and the resource availability as defined by the server. Resources can include log files, text documents, and more. The following is the technical details that make it work.

Core Concepts

Overview:

  • Resources represent any data an MCP server wants to make available to clients (examples include file contents, database records, API responses, live system data, images, log files)
  • Each resource has a unique URI and can contain text or binary data
  • Resources are application-controlled, meaning clients decide how/when they're used, although different MCP client may handle resources differently.

Resource URIs:

  • Follow format: [protocol]://[host]/[path]
  • Examples: file:///home/user/documents/report.pdf, postgres://database/customers/schema
  • Servers can define custom URI schemes

There are two types of resources.

Resource Types:

  1. Text resources: UTF-8 encoded text (code, configs, logs, JSON/XML, Plain text)
  2. Binary resources: Raw binary data encoded in base64 (images, PDFs, audio/video)

Resource Discovery

There are direct resources and resource templates, for different types of resources (static and dynamic). See toggles for details.

Direct Resources: Servers expose concrete resources via resources/list endpoint. Each includes: uri, name, optional description, optional mimeType.
Resource Templates: For dynamic resources, servers can expose URI templates. Includes: uriTemplate (RFC 6570 standard), name, optional description, optional mimeType.

Resource Operations

  • Clients make resources/read request with URI
  • Server responds with resource contents (text or blob)
  • Servers may return multiple resources in one response
Reading Resources:

Resource Updates:

  • List changes: Servers notify via notifications/resources/list_changed
  • Content changes: Client subscription workflow:
    1. Client sends resources/subscribe with URI
    2. Server sends notifications/resources/updated when resource changes
    3. Client fetches latest with resources/read
    4. Client can resources/unsubscribe

Implementation Example

TypeScript:
Python:

When using resources:

  • Use clear, descriptive resource names and URIs
  • Include helpful descriptions for LLM understanding
  • Set appropriate MIME types when known
  • Implement resource templates for dynamic content
  • Use subscriptions for frequently changing resources

Prompts

Prompts are predefined templates for interactions with the model. The are reusable instructions that tell a language model (or LLM) how to perform a task. Think of them as templates or blueprints that can be filled in with specific details. They help standardize the way common interactions are performed between the server, client, and the language model.

User-Controlled: Prompts are designed so that users have control. They are made available by servers and can be explicitly chosen by the user for certain tasks.

Common use cases of prompts are summarize or analize code.

Reusable Templates

  • Predefined and Shareable: Prompts act as ready-made instructions that can be reused for similar tasks, reducing the need to write new instructions every time.
  • Dynamic Arguments: You can pass in values when using a prompt, like plugging in variables into a template.
  • Context Inclusion: They can pull in additional information from resources, such as files or logs, to make the prompt more useful.
  • Multi-Step Workflows: Some prompts can involve several rounds of interaction between the user and the assistant (or between different parts of the system).
  • UI Integration: In client applications, prompts can appear as clickable commands (like slash commands) or within menus.

Basic Structure of a Prompt

{
  name: string;              // Unique identifier for the prompt
  description?: string;      // Human-readable description
  arguments?: [              // Optional list of arguments
    {
      name: string;          // Argument identifier
      description?: string;  // Argument description
      required?: boolean;    // Whether argument is required
    }
  ]
}

Discovering and Using Prompts

Clients can discover available prompts through the prompts/list endpoint:

  • Endpoint: Clients can find out which prompts are available by calling the prompts/list endpoint.
  • Result: The server sends back a list of all prompts along with their descriptions and required arguments.

Using Prompts

  • Request: When a client wants to use a prompt, it calls the prompts/get endpoint with:
    • The name of the prompt.
    • Any necessary arguments (for example, the programming language or code snippet).
  • Response: The server returns a prompt with a detailed instruction (or series of messages) that might include a request for user input or context to be evaluated by the assistant.

Using prompts

To use a prompt, clients make a prompts/get request

Dynamic prompts: Prompts can be dynamic and include: Embedded resource context, Multi-step workflows

UI Integration

Prompts can be directly integrated into the user interface:

  • Slash Commands & Quick Actions: Allow users to simply type a command to activate a prompt.
  • Context Menus & Command Palettes: Embed prompts in menus for easy access.
  • Interactive Forms: Use prompts to guide users through a series of steps with interactive elements.

MCP Tools

Tools are a powerful primitive in the Model Context Protocol that enable servers to expose executable functionality to clients. They are model-controlled, allowing AI models to automatically invoke them (sometimes with human approval) to interact with external systems, perform computations, and take actions. The following is a list of some potential capabilities of tools:

Examples of Different Tool Types

  • System Operations: Tools for system-level tasks, like executing a shell command.
  • API Integrations: Tools to interact with other online services, like creating a GitHub issue.
  • Data Processing: Tools that work with data, like analyzing a CSV file.

Key Features of Tools

  • Discovery: Clients can list available tools
  • Invocation: Tools are called, and servers perform the requested operation and return results
  • Flexibility: Tools can range from simple calculations to complex API interactions
  • State Changes: Unlike static resources, tools can change the state of a system (for example, deleting a file, updating a record, running commands, sending an email).

Structure of a Tool

  • Name: A unique identifier for the tool.
  • Description (Optional): A friendly explanation of what the tool does.
  • Input Schema: A JSON Schema that describes the structure and type of inputs the tool expects. This helps ensure the tool is used correctly.
  • Annotations (Optional): Extra hints about how the tool works, including:
    • Title: A human-readable title.
    • Read-Only Hint: Indicates if the tool does not change anything.
    • Destructive Hint: Suggests if the tool might make changes that could be harmful.
    • Idempotent Hint: Means that calling the tool repeatedly with the same arguments won’t cause extra effects.
    • Open World Hint: Tells whether the tool interacts with external systems.
Tool Definition Structure:

Use Cases of the Model Context Protocol (MCP)

How does MCP look in practice? Let's look into specific, varied use cases where MCP shines, ranging from enterprise integrations to developer tools to AI agents.

Enterprise Knowledge Base Integration

Use Case: A multinational corporation wants its internal LLM assistant to access its knowledge base containing company manuals, HR policies, and compliance documents.

How MCP helps:

  • Exposes the internal documents as Resources via the resources/list and resources/read endpoints.
  • Adds Prompts like "summarize a policy" or "answer questions from document" for rapid and standardized user queries.
  • No need for bespoke connectors to each data store; different systems (SharePoint, internal DBs, S3) can all be MCP servers.

Developer IDE Extensions

Use Case: Building a coding assistant inside VSCode that can: Access project files, Search through logs, Deploy services via CLI commands

How MCP helps:

  • Exposes project files and logs as Resources.
  • Provides Tools to run deployment commands or test builds.
  • Offers Prompts like "explain this code block" or "suggest a bug fix".

Scientific Research Assistants

Use Case: A lab assistant AI helps researchers by: Fetching the latest published papers, Running analysis scripts, Summarizing experiment results

How MCP helps:

  • Fetches live data from arXiv or PubMed APIs via Resources.
  • Provides analysis pipelines as Tools ("run statistical analysis", "plot data trends").
  • Standardizes multi-step experimental reporting through Prompts.

E-commerce Automation Agents

Use Case: Automating tasks for an e-commerce operator, like: Price comparisons, Stock monitoring, Auto-listing new products

How MCP helps:

  • Dynamic web data becomes Resources
  • Price adjustment and listing scripts are Tools.
  • Prompts like "optimize product listing" or "analyze competitor pricing" can be reused.

Conclusion

Integrating Large Language Models with diverse external data sources and functionalities has historically presented a significant hurdle. Developers faced not only the burden of creating complex, custom-built solutions for each connection but also substantial rework when attempting to switch between different LLMs like ChatGPT, Claude, or Grok, as each integration was often model-specific. Moreover, adding or removing capabilities frequently involved the cumbersome task of managing different APIs and bespoke integration logic, lacking a consistent approach. The Model Context Protocol (MCP) directly confronts these specific interoperability and maintenance challenges by introducing a crucial, unified standard. As explored throughout this article, MCP establishes a robust client-server architecture and defines clear primitives – Resources for seamless data access, Tools for invoking external actions, and Prompts for reusable interaction templates – providing the standardized foundation that was previously missing.

This standardization creates a common language, moving away from the fragmented landscape of bespoke integrations towards a more streamlined, scalable, and developer-friendly approach. By providing defined protocols, transport mechanisms, discovery methods, and clear structures for these components, MCP significantly simplifies the process of bridging the gap between LLMs and the specific digital ecosystems they need to interact with. The practical implementation examples provided demonstrate how developers can leverage MCP using SDKs in languages like TypeScript and Python to easily expose data and functionality in a reusable way.

In essence, mastering the concepts within the Model Context Protocol equips us with the understanding of a crucial abstraction layer for modern AI development. We've learned that MCP isn't just another way to connect LLMs to external systems; it's a standardized blueprint designed to improve the inherent complexity and previously fragmented nature of these integrations. This knowledge is critically important because it signals a significant shift towards greater interoperability, reusability, and efficiency. By providing this common language and structure for Resources, Tools, and Prompts, MCP empowers developers not only to build more sophisticated connections faster but also fosters an ecosystem where capabilities can be more easily shared and leveraged across different AI applications, ultimately accelerating the pace at which AI can be meaningfully integrated into diverse workflows and systems.

The Model Context Protocol (MCP) represents a pivotal advancement in AI development, enabling models to seamlessly connect with diverse systems and data sources. This integration marks the next step in advancing AI models, connecting them with access to various systems, and fostering a more interoperable and efficient ecosystem.

Similar Topics:

Using MCP Tools in Chatbot

MCP Sampling

MCP Roots

MCP Transport

MCP Inspector