MCP Servers: Connecting Claude to Your Stack
Install and configure MCP servers to give Claude live access to Slack, Supabase, Notion, and GitHub. No glue code required.
A skill is a markdown file with frontmatter at ~/.claude/skills/. Claude discovers skills by reading their description field; when your request matches, it loads and follows the runbook. Write the instructions once, get the same steps every time.
---
name: translate-pi-jargon
description: Translate PI legal jargon into plain English. Use when the user pastes legal text or references terms like UM/UIM, demand letter, or lien.
---
# Translate PI Jargon
1. Restate the term in one plain sentence.
2. Give a one-sentence example of when it matters.
3. Flag anything with time-pressure (statutes, deadlines).Write a skill the third time you paste the same recipe into Claude.
The description is the discovery mechanism. Claude reads descriptions and decides which skill, if any, applies to your request.
Bad: "A skill for working with documents." Claude cannot tell when this applies.
Good: "Use when the user pastes a contract or asks to summarize, redline, or extract terms from a PDF."
The formula: "Use when [specific trigger]. Applies to [specific content types]."
Skill or CLAUDE.md rule? Skills are repeatable multi-step procedures; CLAUDE.md rules are always-on constraints. A 10-step deploy runbook is a skill. "Never run migrations against prod without a backup" is a rule. Both belong in the system.
An MCP (Model Context Protocol) server is an adapter that exposes external tools to Claude. Slack, Supabase, Notion, GitHub: Claude calls the MCP, the MCP calls the API, you write zero glue code. Instead of copy-pasting data into prompts, Claude reads live data and takes actions directly.
Database MCP: "Show me users who signed up last week but haven't activated" runs as a live query.
Slack MCP: "Summarize what #engineering discussed today" pulls live messages.
Notion MCP: "Update the project wiki with today's decisions" writes directly.
GitHub MCP: "List open PRs older than 7 days" queries live repo state.
Install pattern: install the server (npx or uvx), add the config to ~/.claude/settings.json:
{
"mcpServers": {
"slack": {
"command": "npx",
"args": ["-y", "@your-org/mcp-slack"],
"env": { "SLACK_BOT_TOKEN": "xoxb-your-token-here" }
}
}
}Security rules:
Never paste real tokens into public files; inject via env var or secret store.
Database MCPs get read-only credentials scoped to the tables Claude needs. Service role keys can drop tables.
Review what tools each MCP exposes before deploying.
MCPs that take actions get an approval gate.
Pick your first MCP by asking: what do I currently paste into Claude from an external system? Database query results point to the Supabase MCP; PR lists to GitHub; channel summaries to Slack; notes to Obsidian. One MCP installed and actively used beats four configured and ignored.
Test it: close and reopen Claude Code to trigger discovery, then ask: "What tools do you have available from [MCP name]?" If the list is empty, check settings.json syntax and confirm npx or uvx is on your PATH.
Skills and MCPs compound. A deploy runbook skill plus a GitHub MCP plus a Slack MCP: Claude follows the runbook, reads live PR status, posts progress updates. A 20-minute manual deploy becomes 2 minutes. Setup cost is roughly 30 minutes per skill and 10 per MCP; the first five uses pay it back.
No published MCP for your tool? A minimal custom server using the official Python SDK exposes one tool in about 30-40 lines: define the tool's name, description, and input schema, then handle the call. Give the tool description the same specificity as a skill description. Build custom MCPs for live, frequently queried data; for static reference data, a skill that asks you to paste it is enough.
Credential management for team setups. Hardcoded tokens in a shared settings.json are an incident waiting to happen. Two safer patterns: env pass-through ("SLACK_TOKEN": "$SLACK_TOKEN", with the real value in your shell profile) or a secret manager the MCP server queries at startup (Vault, 1Password CLI), so nothing sensitive lives on disk.
Scope to the minimum: a read-only Postgres role for Supabase, a fine-grained GitHub token limited to specific repos, a Slack bot token limited to the channels Claude should see.
Audit: for MCPs that can write, add a PostToolUse hook logging timestamp, tool name, arguments, and result status.
Skills are markdown runbooks Claude discovers by description; write one the third time you paste the same instructions. MCPs connect Claude to external APIs with no glue code; use read-only, least-privilege credentials. Best first skill: the procedure you have explained twice this week. Best first MCP: the system you copy-paste from most.