MCP Servers Cheatsheet: Concepts, Configs, Useful Servers and Debugging
What You Will Master in This Tutorial
- Set up Python 3.12+ and write clean, readable, PEP 8-compliant code.
- Work with fundamental data structures: Lists, Dictionaries, Sets, and Tuples.
- Control program execution flow with conditionals, loops, and list comprehensions.
- Encapsulate logic into reusable functions with type hints and default arguments.
- Understand Object-Oriented Programming (OOP) in Python: Classes, Methods, and Inheritance.
- Test and execute your scripts interactively using the Online Code Playground.
The Model Context Protocol (MCP) is the open standard that lets AI assistants call real tools — files, databases, browsers, APIs — through one plug. This page is the working reference: concepts in one table, copy-paste configs for the two clients most people use, the servers worth installing first, and how to debug the failures everyone hits. For the full story and your first custom server, read our MCP guide.
Concepts in 60 seconds
| Term | What it means |
|---|---|
| Host | The AI app you use: Claude Desktop, Cursor, Claude Code, VS Code, Windsurf… |
| Client | The connector inside the host that talks to one server (1 client ↔ 1 server). |
| Server | A small program exposing capabilities in a standard way. Runs locally (stdio) or remotely (HTTP). |
| Tools | Actions the model can call: read_file, query_database, create_issue… |
| Resources | Read-only data the server offers as context: files, schemas, documents. |
| Prompts | Reusable prompt templates the server ships (for example a code-review routine). |
| stdio transport | The host launches the server as a subprocess and talks over stdin/stdout. The local default. |
| Streamable HTTP | The server runs remotely at a URL; the host connects over HTTPS, usually with OAuth or a token. |
| Roots / Sampling / Elicitation | Advanced: which folders a server may touch; a server asking the host's model for help; a server asking the user for input mid-task. |
Config: Claude Desktop
File locations — macOS: ~/Library/Application Support/Claude/claude_desktop_config.json · Windows: %APPDATA%\Claude\claude_desktop_config.json. Fully quit and restart Claude Desktop after editing.
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem",
"/Users/you/projects", "/Users/you/notes"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token" }
},
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
}
}
}
Config: Cursor
Project scope: .cursor/mcp.json in the repo. Global scope: ~/.cursor/mcp.json. Same JSON shape; remote servers use url instead of command:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"]
},
"my-remote-server": {
"url": "https://mcp.example.com/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}
In Claude Code you can edit the same files or use claude mcp add name -- command… — see the Claude Code cheatsheet for the exact commands and scopes (user, project, local).
Useful servers to install first
| Server | Gives the model | Install (stdio) |
|---|---|---|
| Filesystem | Read/write inside folders you whitelist | npx -y @modelcontextprotocol/server-filesystem /path |
| GitHub | Issues, PRs, repo search, reviews | npx -y @modelcontextprotocol/server-github + token in env |
| Playwright | A real browser: navigate, click, screenshot, scrape dynamic pages | npx -y @playwright/mcp@latest |
| Fetch | Clean web-page-to-markdown fetching | uvx mcp-server-fetch |
| Memory | A persistent knowledge graph across sessions | npx -y @modelcontextprotocol/server-memory |
| Sequential Thinking | Structured step-by-step problem solving tool | npx -y @modelcontextprotocol/server-sequential-thinking |
| Postgres / SQLite | Query your database in natural language | npx -y @modelcontextprotocol/server-postgres <url> |
| Brave Search | Web search results with citations | npx -y @modelcontextprotocol/server-brave-search + API key |
| Sentry | Production errors and stack traces in context | Remote: https://mcp.sentry.dev/mcp (OAuth) |
| Context7 | Up-to-date library documentation, version-correct | npx -y @upstash/context7-mcp |
Rule of three for beginners: start with Filesystem + GitHub + Playwright. Add a server only when you feel a specific missing capability — every server is more context, more permissions and more things that can break.
Security rules (non-negotiable)
- Whitelist narrowly: give Filesystem one project folder, not your home directory; give database servers read-only users for exploration.
- Secrets live in
env, never in prompts or repos. If a config with real keys gets committed, rotate the keys — deleting the commit is not enough. - Only install servers you can inspect. Prefer the official reference servers and well-known publishers; a random MCP server runs with your user's permissions.
- Watch tool calls: approve writes/deletes deliberately. A prompt-injected web page can try to talk your assistant into abusing its tools.
Debugging: the fixes that solve most problems
| Symptom | Check / command |
|---|---|
| Server does not appear in the client | Validate the JSON (one trailing comma kills it), confirm the file path for your OS, then fully restart the host app — most clients only load MCP config at launch |
npx server fails to start | Run the exact command in a terminal: npx -y @modelcontextprotocol/server-filesystem /tmp — if it errors there, fix Node version (18+) or the package name first |
| Server starts, tools never fire | Open the client's MCP panel/logs and look for handshake errors; check the server is not printing stray logs to stdout (stdio servers must keep stdout clean — logs go to stderr) |
| Auth errors (GitHub, databases) | Confirm the env var name matches the server's README exactly and the token has the scopes the tool needs |
| Works in one client, not another | Transports differ: a client may not support remote HTTP servers or a specific auth flow; test the same config in the MCP Inspector |
| Inspect any server interactively | npx @modelcontextprotocol/inspector — opens a UI to call tools by hand and see raw requests/responses |
| Claude Code specific | claude mcp list for status, /mcp inside a session to authenticate and inspect, claude mcp get <name> for the resolved config |
| Python server logs | Run with uvx/python directly and read stderr; add the server's documented debug flag or MCP_LOG_LEVEL=debug where supported |
Workflow that saves hours: terminal first (does the command run?), Inspector second (do the tools respond?), client last (is the config right?). Ninety percent of "MCP is broken" is a JSON typo, a stale client that was never restarted, or an env var pasted into the wrong server block.
Building agents on top of all this? Continue with the AI agents tutorial and the rest of our cheatsheets.