Configuracion de MCP servers: project vs user scope, env-var expansion para credenciales y rotacion ante secreto leakeado.
Los MCP servers se declaran en .mcp.json (project scope, versionado con el repo) o en ~/.claude.json (user scope, personal). Las credenciales se inyectan mediante env-var expansion (${GITHUB_TOKEN}), nunca hardcodeadas. Al conectarse, Claude Code descubre simultaneamente todos los servers declarados y expone sus tools y resources.
Hay dos ejes de decision, no uno:
stdio (proceso local via command/args) o remoto via "type": "http" (transporte por defecto para servers remotos; "type": "sse" es la variante legacy). Los servers remotos que requieren autenticacion completan OAuth de forma interactiva con /mcp dentro de la sesion..mcp.json viaja con el repositorio y sirve a toda la flota; un server en ~/.claude.json solo existe en tu laptop. La CLI gestiona ambos con claude mcp add --scope local|project|user. La eleccion equivocada deja a la mitad del equipo sin acceso, o publica un secreto..mcp.json versionado equivale a publicarlo: queda en el historial de git para siempre.~/.claude.json deja a los nuevos devs sin acceso al server: la config no se replica..gitignore NO lo remueve: ya esta versionado..mcp.json): viaja con el repo, descubrimiento automatico al conectar, sirve a toda la flota.~/.claude.json): experimentos personales que no afectan al equipo."type": "http" para servers remotos (con OAuth via /mcp si aplica); "type": "sse" solo como compatibilidad legacy.claude mcp add --scope local|project|user; auditoria con claude mcp list.${ENV_VAR} expansion, nunca literal en el archivo.{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" }
},
"internal-docs": {
"command": "node",
"args": ["workspace-example:./scripts/mcp-docs.js"]
},
"issue-tracker": {
"type": "http",
"url": "https://mcp.example.com/mcp"
}
}
}Server de equipo en .mcp.json versionado, credencial inyectada por env-var expansion (${GITHUB_TOKEN}), server interno sin secreto apuntando a un script workspace-example: del repo consumidor (no a un recurso incluido por esta skill), y un server remoto "type": "http" cuya autenticacion OAuth se completa con /mcp en sesion — el token vive en el keychain del cliente, nunca en el archivo.
{ "env": { "GITHUB_TOKEN": "ghp_AbCdEfG123456789" } }Token literal hardcodeado en un archivo versionado. Queda expuesto en el historial de git; agregar el archivo a .gitignore no lo remueve.
Para certificar dominio de esta kata el agente debe:
.mcp.json versionado).${ENV} + purga del historial (git filter-repo), no con .gitignore..mcp.json o ~/.claude.json.katas-builtin-tool-selectionkatas-custom-commands-skillskatas-hierarchical-claude-memoryCapas del packet, cargables bajo demanda (disciplina ICM: una capa por vez, nunca todas juntas): knowledge/ cuerpo de conocimiento · prompts/ prompts listos · examples/ salida de ejemplo · agents/ subagentes del packet · templates/ plantilla de output.
e8f986b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.