TL;DR , MCP is the “USB‑C for AI tools.” It defines a universal JSON‑over‑HTTP interface that lets any language model dynamically discover, describe, and invoke external capabilities,without bespoke adapters. In this post we unpack each feature of MCP, share sample configs, and offer writing tips to help you explain MCP clearly and convincingly.
1 Why MCP Exists
Connecting language models to real‑world data and actions is powerful,but today it’s messy. Every model speaks its own dialect; every tool exposes a different API. Multiply that by the number of models and tools and you get the infamous N × M integration nightmare:
N models × M tools ≈ Endless glue code & maintenance
MCP ends that pain by standardising the handshake between models (callers) and tools (callees). Think of it like HTTP for the web or USB‑C for hardware,a single plug, infinite possibilities.
Refer to our MCP docs for more.
2 Core Features of MCP
# | Feature | What It Delivers | Why It Matters |
2.1 | Universal JSON‑over‑HTTP Interface | Every tool exposes two endpoints,/schema and /invoke,speaking plain JSON. | Zero SDK lock‑in; works with cURL or any HTTP client. |
2.2 | Tool Discovery & Introspection | The /schema endpoint returns an OpenAPI‑like manifest describing tool names, arguments, examples, and auth scopes. | Models can self‑discover capabilities at runtime,no hard‑coding. |
2.3 | Strongly‑Typed Schemas | Parameters use JSON Schema Draft 07 with enums, ranges, nullable, and regex patterns. | Reduces hallucinated arguments and improves error surfaces. |
2.4 | Context‑Aware Retrieval (RAG Mode) | Optional /search sub‑spec lets tools fetch domain data on demand, returning citations and chunks. | Gives models up‑to‑date context without fine‑tuning. |
2.5 | Streaming & Partial Responses | Chunked HTTP or Server‑Sent Events (text/event‑stream). | Models (and UIs) can show incremental progress; no 30‑second timeout woes. |
2.6 | Batch & Async Invocations | invocationMode: “async” plus a /status/{id} endpoint. | Long‑running jobs (video transcode, analytic queries) fit in the same protocol. |
2.7 | Fine‑Grained Authentication | Supports API Key, OAuth 2.0 Bearer, or custom header fields declared in schema. | Tool owners keep control; callers negotiate scopes programmatically. |
2.8 | Version Negotiation | Each schema has mcpVersion and schemaVersion. | New features roll out without breaking old clients. |
2.9 | Error Taxonomy | Standard codes (MCP‑4001 InvalidParam, MCP‑4290 RateLimited, etc.). | Callers can remediate intelligently,retry vs. ask user. |
2.10 | Open Ecosystem & Reference SDKs | Official SDKs exist for Python, TypeScript, Go, Java; community ports in Rust and Swift. | Lowers the barrier to adoption across stacks. |
Pro tip: When writing about MCP, anchor each feature in a practical pain point,“Before MCP you had to…” vs. “With MCP you simply…”.
3 Example Tool Schema
Below is a trimmed‑down manifest for a hypothetical Weather tool:
{
"mcpVersion": "1.0.0",
"schemaVersion": "2025-04-10",
"id": "com.example.weather",
"name": "Weather API",
"description": "Get current weather & 7‑day forecast.",
"auth": {
"type": "oauth2",
"tokenUrl": "https://auth.example.com/token"
},
"functions": [
{
"name": "getForecast",
"description": "Retrieve a forecast for a given city.",
"arguments": {
"type": "object",
"required": ["city"],
"properties": {
"city": {"type": "string", "minLength": 2},
"units": {"type": "string", "enum": ["metric", "imperial"], "default": "metric"}
}
},
"responses": {
"200": {"$ref": "#/components/schemas/WeatherResult"}
}
}
]
}
4 Calling a Tool From Python (Synchronous)
import requests, json
SCHEMA_URL = "https://weather.example.com/schema"
# Discover the tool
schema = requests.get(SCHEMA_URL).json()
# Prepare arguments (validated client‑side using JSON Schema, omitted here)
args = {"city": "Berlin", "units": "metric"}
# Invoke
resp = requests.post(schema["invokeUrl"],
json={"tool": "getForecast", "args": args},
headers={"Authorization": f"Bearer {token}"})
print(json.dumps(resp.json(), indent=2))
5 MCP in Real‑World Workflows
- Agent Executors – LangChain, Haystack, and LlamaIndex adaptors let agents auto‑route queries to MCP tools.
- Voice Assistants – “What’s my flight status?” triggers a call to an MCP flight tool, spoken back via TTS.
- Automation Pipelines – n8n/Zapier nodes expose MCP endpoints so non‑devs can chain LLM insight to emails, CRMs, or dashboards.
- Low‑Code RAG Apps – Build internal search portals that pull context via MCP /search, ensuring freshness without re‑indexing.
Note: MCP doesn’t mandate hosting. You can self‑host or choose a vendor. The protocol stays the same.
6 Best Practices for Implementers
Do | Why |
Validate schemas with CI pipelines. | Catch breaking changes before deploy. |
Implement exponential back‑off for MCP‑4290 (RateLimited). | Play nice with shared infra. |
Use short‑lived OAuth tokens. | Improves security posture. |
Stream long responses if >3 s render time. | Prevent model caller timeouts. |
Version using Semantic Versioning. | Signals compatibility expectations. |
7 Words to Skip / Replace (Humanise Your Blog)
AI‑ish Word | Swap For |
Synergy | Teamwork |
Leverage | Use |
Cutting‑edge | Leading |
Robust | Solid |
Paradigm | Approach |
8 Suggested Post Structure (Recap)
- Hook – present the integration challenge.
- Define MCP – one‑sentence definition + standard link.
- Feature Walkthrough – each core feature with pain‑point and benefit.
- Schema & Code – concrete manifest + client snippet.
- Usage Scenarios – highlight at least three.
- Best Practices – quick checklist.
- Roadmap / Community – invite readers to spec repo, Slack, or GitHub discussion.
- CTA – encourage readers to try MCP with their own tool or agent.
9 Further Reading & Resources
- MCP Docs – https://docs.customgpt.ai/reference/customgptai-mcp-support#/
- MPC launch blog – https://customgpt.ai/hosted-mcp-servers-for-rag-powered-agents/
- MCP tag – https://customgpt.ai/category/developer/mcp/ – to get more MCP related content
- Community Slack –https://customgpt.ai/slack
💡 Ready to explore? Fork the reference server, register a simple “Hello World” tool, and watch your LLM discover and run it, no glue code required.
Priyansh is Developer Relations Advocate who loves technology, writer about them, creates deeply researched content about them.