- An **MCP server** wraps some capability — a database, an API, a file system — and exposes it through a standardized interface. - An **MCP client** (your AI agent or its host application) connects to the server and discovers what tools are available. - The AI model decides when and how to call those tools based on your conversation.
- An **MCP server** wraps some capability — a database, an API, a file system — and exposes it through a standardized interface. - An **MCP client** (your AI agent or its host application) connects to the server and discovers what tools are available. - The AI model decides when and how to call those tools based on your conversation.
- An **MCP server** wraps some capability — a database, an API, a file system — and exposes it through a standardized interface. - An **MCP client** (your AI agent or its host application) connects to the server and discovers what tools are available. - The AI model decides when and how to call those tools based on your conversation.
- **stdio** — The client spawns the server as a child process and communicates over stdin/stdout. Best for local servers running on the same machine as your agent. - **Streamable HTTP** — The server runs as an HTTP endpoint. The client sends requests and receives responses (and streaming updates) over HTTP with optional Server-Sent Events. Best for remote or shared servers.
- **stdio** — The client spawns the server as a child process and communicates over stdin/stdout. Best for local servers running on the same machine as your agent. - **Streamable HTTP** — The server runs as an HTTP endpoint. The client sends requests and receives responses (and streaming updates) over HTTP with optional Server-Sent Events. Best for remote or shared servers.
- **stdio** — The client spawns the server as a child process and communicates over stdin/stdout. Best for local servers running on the same machine as your agent. - **Streamable HTTP** — The server runs as an HTTP endpoint. The client sends requests and receives responses (and streaming updates) over HTTP with optional Server-Sent Events. Best for remote or shared servers.
`// Server capability announcement (simplified)
{ "tools": [ { "name": "get_events", "description": "List calendar events for a date range", "inputSchema": { "type": "object", "properties": { "start_date": { "type": "string" }, "end_date": { "type": "string" } } } }, { "name": "create_event", "description": "Create a new calendar event", "inputSchema": { ... } } ]
}`
`// Server capability announcement (simplified)
{ "tools": [ { "name": "get_events", "description": "List calendar events for a date range", "inputSchema": { "type": "object", "properties": { "start_date": { "type": "string" }, "end_date": { "type": "string" } } } }, { "name": "create_event", "description": "Create a new calendar event", "inputSchema": { ... } } ]
}`
`// Server capability announcement (simplified)
{ "tools": [ { "name": "get_events", "description": "List calendar events for a date range", "inputSchema": { "type": "object", "properties": { "start_date": { "type": "string" }, "end_date": { "type": "string" } } } }, { "name": "create_event", "description": "Create a new calendar event", "inputSchema": { ... } } ]
}`
`// Model generates this tool call
{ "name": "get_events", "arguments": { "start_date": "2026-03-06", "end_date": "2026-03-06" }
}`
`// Model generates this tool call
{ "name": "get_events", "arguments": { "start_date": "2026-03-06", "end_date": "2026-03-06" }
}`
`// Model generates this tool call
{ "name": "get_events", "arguments": { "start_date": "2026-03-06", "end_date": "2026-03-06" }
}`
- **Google Calendar** — Read events, create meetings, check availability. Useful for AI assistants that need schedule awareness. - **Gmail** — Search inbox, read messages, draft and send emails. Pairs well with calendar for "what is urgent today?" workflows. - **Google Drive** — List, read, and create documents. Your agent can pull context from shared drives without you copy-pasting. - **Notion** — Query databases, create pages, manage blocks. Turns your knowledge base into something your agent can actually search and update.
- **Google Calendar** — Read events, create meetings, check availability. Useful for AI assistants that need schedule awareness. - **Gmail** — Search inbox, read messages, draft and send emails. Pairs well with calendar for "what is urgent today?" workflows. - **Google Drive** — List, read, and create documents. Your agent can pull context from shared drives without you copy-pasting. - **Notion** — Query databases, create pages, manage blocks. Turns your knowledge base into something your agent can actually search and update.
- **Google Calendar** — Read events, create meetings, check availability. Useful for AI assistants that need schedule awareness. - **Gmail** — Search inbox, read messages, draft and send emails. Pairs well with calendar for "what is urgent today?" workflows. - **Google Drive** — List, read, and create documents. Your agent can pull context from shared drives without you copy-pasting. - **Notion** — Query databases, create pages, manage blocks. Turns your knowledge base into something your agent can actually search and update.
- **GitHub** — Issues, pull requests, repository management. Ask your agent "what PRs need review?" and get real answers. - **shadcn/ui** — Pull live component source code. Your coding agent gets current API signatures instead of hallucinating from stale training data. - **Context7** — Fetch up-to-date documentation for any library. When your agent writes code against React 19 or Tailwind 4, it can check the actual docs first. - **Database connectors** — PostgreSQL, SQLite, MySQL. Let your agent query data directly instead of you running SQL and pasting results.
- **GitHub** — Issues, pull requests, repository management. Ask your agent "what PRs need review?" and get real answers. - **shadcn/ui** — Pull live component source code. Your coding agent gets current API signatures instead of hallucinating from stale training data. - **Context7** — Fetch up-to-date documentation for any library. When your agent writes code against React 19 or Tailwind 4, it can check the actual docs first. - **Database connectors** — PostgreSQL, SQLite, MySQL. Let your agent query data directly instead of you running SQL and pasting results.
- **GitHub** — Issues, pull requests, repository management. Ask your agent "what PRs need review?" and get real answers. - **shadcn/ui** — Pull live component source code. Your coding agent gets current API signatures instead of hallucinating from stale training data. - **Context7** — Fetch up-to-date documentation for any library. When your agent writes code against React 19 or Tailwind 4, it can check the actual docs first. - **Database connectors** — PostgreSQL, SQLite, MySQL. Let your agent query data directly instead of you running SQL and pasting results.
- **Filesystem** — Sandboxed file read/write. Useful when your agent needs to manage project files. - **Docker** — Container management. Your agent can check running containers, view logs, restart services. - **Kubernetes** — Cluster operations for teams running K8s workloads.
- **Filesystem** — Sandboxed file read/write. Useful when your agent needs to manage project files. - **Docker** — Container management. Your agent can check running containers, view logs, restart services. - **Kubernetes** — Cluster operations for teams running K8s workloads.
- **Filesystem** — Sandboxed file read/write. Useful when your agent needs to manage project files. - **Docker** — Container management. Your agent can check running containers, view logs, restart services. - **Kubernetes** — Cluster operations for teams running K8s workloads.
`npx @anthropic/google-calendar-mcp`
`npx @anthropic/google-calendar-mcp`
`npx @anthropic/google-calendar-mcp`
`// mcporter config example
{ "servers": { "google_calendar": { "command": "npx", "args": ["@anthropic/google-calendar-mcp"], "env": { "GOOGLE_CLIENT_ID": "your-client-id", "GOOGLE_CLIENT_SECRET": "your-client-secret" } } }
}`
`// mcporter config example
{ "servers": { "google_calendar": { "command": "npx", "args": ["@anthropic/google-calendar-mcp"], "env": { "GOOGLE_CLIENT_ID": "your-client-id", "GOOGLE_CLIENT_SECRET": "your-client-secret" } } }
}`
`// mcporter config example
{ "servers": { "google_calendar": { "command": "npx", "args": ["@anthropic/google-calendar-mcp"], "env": { "GOOGLE_CLIENT_ID": "your-client-id", "GOOGLE_CLIENT_SECRET": "your-client-secret" } } }
}`
`You: What meetings do I have tomorrow? Agent: [calls get_events tool] Agent: You have 3 meetings tomorrow:
• 10:00 AM — Sprint Planning (30 min)
• 1:00 PM — Design Review with Aurora (45 min) • 3:30 PM — 1:1 with Alex (30 min) Your morning is free until 10.`
`You: What meetings do I have tomorrow? Agent: [calls get_events tool] Agent: You have 3 meetings tomorrow:
• 10:00 AM — Sprint Planning (30 min)
• 1:00 PM — Design Review with Aurora (45 min) • 3:30 PM — 1:1 with Alex (30 min) Your morning is free until 10.`
`You: What meetings do I have tomorrow? Agent: [calls get_events tool] Agent: You have 3 meetings tomorrow:
• 10:00 AM — Sprint Planning (30 min)
• 1:00 PM — Design Review with Aurora (45 min) • 3:30 PM — 1:1 with Alex (30 min) Your morning is free until 10.`
- **Build your own** when you have internal APIs, proprietary data sources, or custom business logic that no public server covers. - **Use existing** for standard services (Google, GitHub, databases). Someone has already handled the edge cases.
- **Build your own** when you have internal APIs, proprietary data sources, or custom business logic that no public server covers. - **Use existing** for standard services (Google, GitHub, databases). Someone has already handled the edge cases.
- **Build your own** when you have internal APIs, proprietary data sources, or custom business logic that no public server covers. - **Use existing** for standard services (Google, GitHub, databases). Someone has already handled the edge cases.
`from mcp.server import Server
from mcp.types import Tool, TextContent
import httpx server = Server("weather") @server.list_tools()
async def list_tools(): return [ Tool( name="get_weather", description="Get current weather for a city", inputSchema={ "type": "object", "properties": { "city": { "type": "string", "description": "City name" } }, "required": ["city"] } ) ] @server.call_tool()
async def call_tool(name: str, arguments: dict): if name == "get_weather": city = arguments["city"] resp = httpx.get(f"https://wttr.in/{city}?format=j1") data = resp.json() current = data["current_condition"][0] return [TextContent( type="text", text=f"{city}: {current['temp_F']}°F, " f"{current['weatherDesc'][0]['value']}" )] if __name__ == "__main__": import asyncio from mcp.server.stdio import stdio_server asyncio.run(stdio_server(server))`
`from mcp.server import Server
from mcp.types import Tool, TextContent
import httpx server = Server("weather") @server.list_tools()
async def list_tools(): return [ Tool( name="get_weather", description="Get current weather for a city", inputSchema={ "type": "object", "properties": { "city": { "type": "string", "description": "City name" } }, "required": ["city"] } ) ] @server.call_tool()
async def call_tool(name: str, arguments: dict): if name == "get_weather": city = arguments["city"] resp = httpx.get(f"https://wttr.in/{city}?format=j1") data = resp.json() current = data["current_condition"][0] return [TextContent( type="text", text=f"{city}: {current['temp_F']}°F, " f"{current['weatherDesc'][0]['value']}" )] if __name__ == "__main__": import asyncio from mcp.server.stdio import stdio_server asyncio.run(stdio_server(server))`
`from mcp.server import Server
from mcp.types import Tool, TextContent
import httpx server = Server("weather") @server.list_tools()
async def list_tools(): return [ Tool( name="get_weather", description="Get current weather for a city", inputSchema={ "type": "object", "properties": { "city": { "type": "string", "description": "City name" } }, "required": ["city"] } ) ] @server.call_tool()
async def call_tool(name: str, arguments: dict): if name == "get_weather": city = arguments["city"] resp = httpx.get(f"https://wttr.in/{city}?format=j1") data = resp.json() current = data["current_condition"][0] return [TextContent( type="text", text=f"{city}: {current['temp_F']}°F, " f"{current['weatherDesc'][0]['value']}" )] if __name__ == "__main__": import asyncio from mcp.server.stdio import stdio_server asyncio.run(stdio_server(server))`
MCP Function Calling Plugins (ChatGPT-era) **Standard** Open protocol, multi-vendor Provider-specific API OpenAI proprietary (deprecated) **Discovery** Runtime — agent discovers tools dynamically Compile-time — you define schemas upfront Manifest file, static **Portability** Same server works across agents Tied to one provider's API format ChatGPT only **Composability** Multiple servers, mix and match One function set per request Limited to 3 plugins **Transport** stdio or HTTP (local or remote) HTTP only (cloud API) HTTP only **Ecosystem** Growing fast — hundreds of servers DIY per integration Dead
MCP Function Calling Plugins (ChatGPT-era) **Standard** Open protocol, multi-vendor Provider-specific API OpenAI proprietary (deprecated) **Discovery** Runtime — agent discovers tools dynamically Compile-time — you define schemas upfront Manifest file, static **Portability** Same server works across agents Tied to one provider's API format ChatGPT only **Composability** Multiple servers, mix and match One function set per request Limited to 3 plugins **Transport** stdio or HTTP (local or remote) HTTP only (cloud API) HTTP only **Ecosystem** Growing fast — hundreds of servers DIY per integration Dead
MCP Function Calling Plugins (ChatGPT-era) **Standard** Open protocol, multi-vendor Provider-specific API OpenAI proprietary (deprecated) **Discovery** Runtime — agent discovers tools dynamically Compile-time — you define schemas upfront Manifest file, static **Portability** Same server works across agents Tied to one provider's API format ChatGPT only **Composability** Multiple servers, mix and match One function set per request Limited to 3 plugins **Transport** stdio or HTTP (local or remote) HTTP only (cloud API) HTTP only **Ecosystem** Growing fast — hundreds of servers DIY per integration Dead