MCP Servers — Connecting External Tools
Presentation notes and speaking flow for Block 09.
Duration: ~10 minutes Goal: Students understand what MCP is, how servers work, and how to configure Claude Code to use external tools.
Slide 1: The Integration Problem
Here’s your daily workflow as a developer:
- Read a GitHub issue
- Open the codebase in your editor
- Make changes
- Run tests
- Push a branch
- Open a PR linking to the issue
- Respond to review comments
- Post an update in Slack
Steps 2-4? Claude Code handles those beautifully. But steps 1, 5-8? Claude can’t see your GitHub issues. It can’t open PRs. It doesn’t know Slack exists. It’s stuck inside your local terminal.
That’s the integration problem. Claude is great at code, but code doesn’t exist in a vacuum. It exists inside a workflow that spans multiple tools, platforms, and services. Without access to those tools, Claude is like a chef who can cook anything but can’t read the menu or serve the food.
MCP solves this.
Slide 2: What MCP Actually Is
MCP = Model Context Protocol. It’s an open standard that defines how AI models connect to external tools and data sources.
Think of it like USB for AI. Before USB, every peripheral had its own connector — printers, keyboards, mice, cameras all used different cables. USB said “one standard plug, everything connects the same way.” MCP does the same thing for AI integrations.
Before MCP: With MCP:
Claude ──custom code──> GitHub Claude ──MCP──> GitHub
Claude ──custom code──> Slack Claude ──MCP──> Slack
Claude ──custom code──> Jira Claude ──MCP──> Linear
Claude ──custom code──> Database Claude ──MCP──> PostgreSQL
(Each requires building & maintaining a custom integration)
(One protocol. Plug any server in.)
An MCP server is a small process that:
- Exposes a set of tools (functions Claude can call)
- Communicates with Claude using the MCP protocol
- Handles the actual API calls to the external service
From Claude’s perspective, MCP tools look and work exactly like its built-in tools. It doesn’t know (or care) that create_issue comes from an MCP server rather than being baked into the binary. It just has more tools available.
Slide 3: Available MCP Servers
The MCP ecosystem is growing fast. Here are the servers you’ll encounter most:
Official / Well-Maintained Servers
| Server | What It Provides | Use Case |
|---|---|---|
| GitHub | Issues, PRs, reviews, comments, repo management | Full GitHub workflow from Claude |
| Filesystem | Read/write files in additional directories | Access files outside your project |
| PostgreSQL | Query and inspect databases | Debug data issues, explore schemas |
| Slack | Send messages, read channels | Team communication |
| Linear | Issues, projects, cycles | Project management |
| Docker | Container management | Build, run, inspect containers |
| Puppeteer | Browser automation | Testing, screenshots |
Community Servers
The community has built 50+ MCP servers for everything from Notion to Google Drive to AWS. Quality varies — check the GitHub stars, last commit date, and whether the maintainer is responsive to issues.
Where to find them: https://github.com/modelcontextprotocol/servers — the official list. Also check https://mcp.so for a searchable directory.
Slide 4: Configuration — .mcp.json
MCP servers are configured in a JSON file. Here’s the structure:
{
"mcpServers": {
"github": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-github"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<your-token>"
}
},
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/path/to/allowed/directory"
]
}
}
}
Each server entry has:
command— what to run (usuallynpxfor Node-based servers)args— arguments passed to the command (the package name, plus any server-specific config)env(optional) — environment variables the server needs (API tokens, etc.)
This file lives at .mcp.json for project-level config. User-level config is stored in ~/.claude.json (managed automatically by claude mcp add --scope user).
When Claude Code starts (or when you restart a session), it launches each configured MCP server as a background process. The servers stay running for the duration of your session.
Slide 5: How Claude Uses MCP Tools
Once an MCP server is configured, its tools appear in Claude’s toolbox automatically. Here’s what that looks like in practice:
You say: “List all open issues on the ai-coderrank repo labeled bug”
Claude thinks: “I have a list_issues tool from the GitHub MCP server. Let me use it.”
What happens:
- Claude calls the
list_issuestool with parameters{owner: "your-name", repo: "ai-coderrank", state: "open", labels: ["bug"]} - The MCP server receives the call
- The server makes the actual GitHub API request
- Results come back to Claude
- Claude presents the issues to you in a readable format
You didn’t write any code. You didn’t configure any API calls. You just asked a question, and Claude used the right tool to answer it.
The same flow works for creating issues, commenting on PRs, reading files from other directories, querying databases — any tool that any configured MCP server exposes.
Slide 6: Permissions — Controlling MCP Access
Here’s the thing about giving Claude access to your GitHub account: you might not want it to do everything. Maybe you’re fine with it reading issues but not comfortable with it pushing code. Maybe it can list PRs but shouldn’t merge them.
That’s where permissions come in. The /permissions command in Claude Code shows and manages tool access:
> /permissions
Allowed:
- mcp__github__list_issues
- mcp__github__get_issue
- mcp__github__create_issue
- mcp__github__list_pull_requests
Denied:
- mcp__github__merge_pull_request
- mcp__github__delete_branch
MCP tools follow the naming convention mcp__<server>__<tool>. You can allow or deny each one individually, or use patterns:
- Allow all GitHub read operations:
mcp__github__get_*,mcp__github__list_* - Block all destructive operations: deny
mcp__github__delete_*,mcp__github__merge_*
This gives you fine-grained control. Claude can be a helpful assistant that reads your issues and opens PRs, without being able to merge to main or delete branches.
Rule of thumb: Start with read-only access. Add write permissions as you build trust. Never auto-approve destructive operations.
Key Takeaways
| Concept | What It Is | Why It Matters |
|---|---|---|
| MCP | Model Context Protocol — AI’s plugin standard | One protocol to connect any tool |
| MCP server | A process exposing tools via MCP | Each server adds capabilities to Claude |
.mcp.json |
MCP configuration file | Where you declare which servers to run |
| MCP tools | Functions exposed by MCP servers | Claude calls them like built-in tools |
/permissions |
Tool access management | Control exactly what Claude can do |
mcp__server__tool |
MCP tool naming convention | Used for fine-grained permission rules |
Transition: Time to wire things up. You’re about to connect Claude to GitHub and watch it create issues, comment on PRs, and navigate your project management workflow — all from the terminal.
Ready to check your retention?
Take the Quiz →