Live3,732 AI tools3,732 reviewed36 categories
00

Creative

Business & Productivity

Technology

Lifestyle

Account

Submit Your AI Tool
Intermediate12 min read

๐Ÿ”Œ Building with MCP

How plugins and connectors work under the hood โ€” from installing pre-built ones in Cowork to building your own

โšกTL;DR

MCP (Model Context Protocol) is the open standard that powers Claude's plugin system. Every time Cowork connects to Gmail, Slack, or any other service, it's using MCP under the hood. You can install pre-built connectors with one click or build your own.

  • โ†’ Cowork plugins are MCP servers โ€” they connect Claude to external tools
  • โ†’ Architecture: Host (Cowork/Claude Desktop) โ†’ Client โ†’ Server (your tool)
  • โ†’ Pre-built connectors exist for Gmail, Slack, Google Drive, GitHub, and 50+ more
  • โ†’ Developers can build custom MCP servers in Python or TypeScript
  • โ†’ One standard protocol means one connector works everywhere Claude runs

What is MCP?

Model Context Protocol (MCP) is an open standard created by Anthropic that lets AI models like Claude connect to external tools and data sources. If you've ever installed a plugin in Cowork to connect your Gmail or Slack, you've already used MCP โ€” you just didn't need to know the technical details.

Think of MCP as a universal adapter. Before MCP, connecting Claude to your database, email, or project management tool required custom code for each integration. MCP standardizes this into a simple protocol so one connector works across Cowork, Claude Desktop, Claude Code, and any other MCP-compatible app.

โ„น๏ธWhy MCP Matters

MCP is to AI what USB was to peripherals. Before USB, every device needed its own connector. MCP creates one standard protocol so any AI can talk to any tool. The ecosystem already has 50+ pre-built servers with over 80,000 GitHub stars.

How Cowork Uses MCP

Every plugin you install in Cowork is an MCP server running behind the scenes. When you ask Claude to check your email, here's what actually happens:

1

You ask: 'Check my Gmail for any messages from Sarah this week'

2

Cowork (the MCP Host) sees that this requires the Gmail plugin

3

The MCP Client inside Cowork routes the request to the Gmail MCP Server

4

The Gmail server searches your inbox using your authenticated credentials

5

Results come back through the MCP Client to Cowork

6

Claude reads the results and gives you a summary in plain language

You never see any of this plumbing โ€” it just works. But understanding the architecture helps when things go wrong or when you want to build your own connector.

๐Ÿง Quick Check

When you install a Gmail plugin in Cowork, what is actually happening under the hood?

Installing Connectors in Cowork

The easiest way to add MCP connectors is through Cowork's plugin system. No configuration files, no terminal commands โ€” just ask Claude or browse the marketplace.

The Old Way (Manual Config)

โœ— Edit JSON config files by hand

โœ— Install packages from the command line

โœ— Manage API tokens in environment variables

โœ— Restart the app after each change

โœ— Debug connection issues in terminal logs

The Cowork Way

โœ“ Ask Claude 'connect my Gmail' or browse the plugin marketplace

โœ“ One-click install with guided OAuth setup

โœ“ Credentials managed securely by the plugin

โœ“ Connectors activate immediately โ€” no restart

โœ“ Claude tells you if something isn't working and offers to fix it

Popular connectors you can install right now in Cowork:

1

Gmail โ€” Read your inbox, draft replies, search messages, create drafts. Perfect for email triage and follow-up automation.

2

Slack โ€” Read channels, send messages, search conversation history. Great for catching up on what you missed.

3

Google Drive โ€” Access documents and spreadsheets. Let Claude read your team docs and create summaries.

4

Vercel โ€” Deploy web projects, check build logs, manage domains. For teams shipping web apps.

5

GitHub โ€” Manage repos, issues, PRs, and code search. Connect your development workflow to Claude.

6

More available โ€” Ask Claude 'what connectors are available?' to browse the full marketplace.

Setting Up MCP Manually (Claude Desktop & Claude Code)

If you're using Claude Desktop (the standard chat app) or Claude Code (the terminal tool), you can configure MCP servers manually via JSON config files. This gives you more control and access to community-built servers that might not be in the Cowork marketplace yet.

Claude Desktop โ€” Edit your config file at ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/directory"]
    }
  }
}

Claude Code โ€” Add servers to your project's .mcp.json file:

json
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "your-token"
      }
    }
  }
}
๐Ÿ’กAfter Saving

Restart Claude Desktop and you'll see a hammer icon indicating MCP tools are available. In Claude Code, servers activate automatically when you open a project with an .mcp.json file.

Building a Custom MCP Server

When the pre-built connectors don't cover your needs, you can build your own. This is especially useful for internal company tools, proprietary databases, or niche APIs. MCP servers can be written in Python or TypeScript.

bash
pip install mcp
python
from mcp.server import Server
from mcp.types import Tool, TextContent
import mcp.server.stdio

server = Server("weather")

@server.list_tools()
async def list_tools():
    return [
        Tool(
            name="get_weather",
            description="Get current weather for a city. Returns temperature and conditions.",
            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"]
        # Your weather API logic here
        return [TextContent(type="text", text=f"Weather in {city}: 72ยฐF, Sunny")]

async def main():
    async with mcp.server.stdio.stdio_server() as (read, write):
        await server.run(read, write)

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())
โš ๏ธTool Descriptions Matter

The description field is how Claude decides when to use your tool. A vague description like 'does weather stuff' means Claude won't know when to call it. Be specific: 'Get current weather for a city. Returns temperature in Fahrenheit and sky conditions.'

MCP Best Practices

Don't Do This

โœ— One giant 'manage_everything' tool

โœ— Hardcode API keys in server code

โœ— Give servers admin database access

โœ— Vague tool descriptions

โœ— Swallow errors silently

Do This Instead

โœ“ Separate tools for query, insert, update, delete

โœ“ Use environment variables for all secrets

โœ“ Give servers minimum required permissions

โœ“ Write clear, specific descriptions with input/output details

โœ“ Return helpful error messages Claude can act on

What's Next?

โœ…Your MCP Setup Checklist
0%

Ready for more?

Browse all Getting Started guides

View all guides โ†’