Why Do We Need a Protocol?
With countless APIs already in existence, the most common question is: “Why do we need another one?” The answer lies in standardization. The AI ecosystem is fragmented. Every model provider has its own way of defining and calling tools. MCP’s goal is to create a common language that offers several key advantages:- Interoperability: Build one MCP server, and it can be used by any MCP-compliant client (Claude, Gemini, OpenAI, custom agents, etc.) without custom integration code. This is the protocol’s most important promise.
- Discoverability: Clients can dynamically ask a server what it’s capable of at runtime. They receive a structured, machine-readable “menu” of tools and resources.
- Security & Safety: MCP provides a clear, sandboxed boundary. An LLM can’t execute arbitrary code on your server; it can only request to run the specific, typed, and validated functions you explicitly expose.
- Composability: You can build small, specialized MCP servers and combine them to create powerful, complex applications.
Core MCP Components
An MCP server exposes its capabilities through three primary components: Tools, Resources, and Prompts.Tools: Executable Actions
Tools are functions that the LLM can ask the server to execute. They are the action-oriented part of MCP. In the spirit of a REST API, you can think of Tools as being likePOST requests. They are used to perform an action, change state, or trigger a side effect, like sending an email, adding a user to a database, or making a calculation.
With FastMCP, creating a tool is as simple as decorating a Python function.
Resources: Read-Only Data
Resources are data sources that the LLM can read. They are used to load information into the LLM’s context, providing it with knowledge it doesn’t have from its training data. Following the REST API analogy, Resources are likeGET requests. Their purpose is to retrieve information idempotently, ideally without causing side effects. A resource can be anything from a static text file to a dynamic piece of data from a database. Each resource is identified by a unique URI.
Resource Templates
You can also create Resource Templates for dynamic data. A client could requestusers://42/profile to get the profile for a specific user.

