glimfly
ai updated

What is MCP (Model Context Protocol)? And do you actually need it?

In one sentence:MCP is the open standard that lets your AI agent plug into outside tools and data (like GitHub, Notion, or a database) without custom code for every single one.

What it actually is

MCP (Model Context Protocol) is an open standard, created by Anthropic and now supported by most AI coding tools, for connecting an AI application to outside tools and data through one shared format instead of custom code per integration. Think USB-C for AI agents: instead of Claude Code, Cursor, and VS Code each needing bespoke wiring to read your GitHub issues or query a database, an “MCP server” exposes that once, and any “MCP host” can connect to it.

An MCP server offers a menu of tools (actions it can take), resources (data it can read), and prompts (reusable instructions). Running claude mcp add --transport http github https://api.githubcopilot.com/mcp/ --header "Authorization: Bearer YOUR_GITHUB_PAT" points Claude Code at one such menu: the GitHub server, authenticated with a personal access token passed as a header.

Why your AI just did this

Claude Code reaches for MCP when a task needs something it can’t do alone: read your Notion workspace, list your last three GitHub issues, or query a Postgres database. If a server is already configured (in .mcp.json or ~/.claude.json), Claude calls its tools like any built-in tool, logged with an mcp__servername__toolname prefix, like mcp__github__list_issues.

You’ll also see Claude, or a teammate’s docs, suggest adding a server when you keep pasting data from an external tool into the chat by hand. That’s the exact signal the official docs point to: connect a server when you find yourself copying data into chat from another tool.

When you’ll run into it

  • Running /mcp, or claude mcp list from your shell, shows each server’s status: ✔ Connected, ! Needs authentication, ✘ Failed to connect, or ⏸ Pending approval (run claude to approve) for a project-scoped server you haven’t approved yet.
  • Adding a server by hand writes JSON like claude mcp add-json weather-api '{"type":"http","url":"https://api.weather.com/mcp","headers":{"Authorization":"Bearer token"}}' into ~/.claude.json or .mcp.json (project scope, meant to be committed so the team shares the same servers).
  • A 404 or 405 when you check a server URL by hand is fine. Many MCP endpoints only answer POST requests, so that just confirms the URL is reachable.
  • Remote, hosted servers (Notion, Sentry, Asana) usually trigger an OAuth popup on first connect, and can return 403 insufficient_scope on a tool call later if the granted permissions were too narrow; Claude Code re-authenticates automatically when that happens.
  • Clicking “Install” on a server’s page does the same thing as claude mcp add: it writes a server entry to a config file. That alone doesn’t mean it’s running or authenticated. Check /mcp to confirm.

What to check

  • Run /mcp or claude mcp list after any install. Don’t assume “Install” worked; confirm the server shows Connected with a tool count, not Pending approval or Rejected.
  • Look into the server’s publisher before connecting. The official docs are direct: servers that fetch external content can expose you to prompt injection.
  • Check where secrets live. .mcp.json is meant for version control, so a token typed straight into it ends up in your git history. Pass it with --header or an environment variable instead, or keep the server at local scope.
  • Match the scope to the intent: local (private, this project only, the default), project (shared with the team via .mcp.json), or user (private, all your projects).
  • For stdio servers (started with npx or uvx), confirm the underlying runtime (Node, Python) is installed; that’s the most common silent-failure cause.

Say it like a dev

Instead of: “connect Claude to GitHub somehow” Say: “Add the GitHub MCP server over HTTP, project-scoped, with the token passed as a header, not typed directly into .mcp.json.”

Instead of: “it’s not working after I installed the MCP server” Say: “Run /mcp and tell me if it shows connected, needs authentication, or pending approval.”

Instead of: “why does the AI need a special connector, can’t it just call the API?” Say: “Is there an MCP server for this, or do I need to point the agent at the raw REST API myself?”

People actually ask

“So technically how is MCP different than a RESTful service?”

A REST API is just a fixed set of HTTP endpoints a developer documents and wires up by hand, one integration at a time. MCP is a protocol layer on top: an MCP server announces its available tools, resources, and prompts in a standard way, so any MCP-compatible AI app can connect and use them without custom glue code written just for that one service. You can even build an MCP server that's really just a wrapper around an existing REST API, exposed the standardized way.

“After you click Install it is not clear what happens. What actually gets installed?”

Clicking Install does the same thing as running `claude mcp add`: it writes a server entry (transport type, URL or command, and any headers or env vars) into a config file, either `.mcp.json` in your project or `~/.claude.json`. It doesn't automatically mean the server is running or authenticated. Check `/mcp` inside Claude Code or `claude mcp list` to see whether it actually connected, and hosted servers usually still need an OAuth popup completed.

“I already struggle at the installation part of any MCP server. What's the first thing to check?”

Run `/mcp` or `claude mcp list` right after adding it and read the status, not just whether the command exited without an error. If it says pending approval, run `claude` interactively to approve it; if it's a stdio server started via `npx` or `uvx`, confirm Node or Python is actually installed on your machine, since that's the most common silent failure.

Related terms

Go deeper

Checked against

Glim can explain your sessions, live.

The app watches your coding agent and narrates it in plain words. Waitlist is open.

Join the waitlist