Objetivo del tema
Ampliar las capacidades del agente más allá de lo integrado: conectar herramientas externas mediante servidores MCP, empaquetar conocimiento reutilizable en Agent Skills y mantener el código impecable con formatters automáticos.
OpenCode trae de fábrica un conjunto básico de herramientas: lectura y edición de archivos, ejecución bash, búsquedas por nombre o contenido, acceso web y la delegación a subagents. Todo lo que veremos en este tema se integra con ese mismo sistema: las herramientas externas aparecen al lado de las nativas y se administran con los mismos permisos que aprendiste en el tema 14.
El Model Context Protocol (MCP) es el estándar abierto para dar nuevas capacidades a los agentes: consultar bases de datos, interactuar con Jira, revisar errores de Sentry, buscar documentación, entre muchas otras. En OpenCode se declaran bajo la clave mcp del opencode.json, cada uno con un nombre único.
Servidor local (proceso que OpenCode arranca en tu máquina):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mi-mcp": {
"type": "local",
"command": ["npx", "-y", "mi-servidor-mcp"],
"environment": { "MI_VARIABLE": "valor" },
"enabled": true
}
}
}
Servidor remoto (servicio HTTP accesible por red):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
}
}
}
Una vez agregado, invoca sus herramientas mencionándolo en tus prompts ("usa context7") o enséñale al agente a usarlo desde el AGENTS.md.
Los MCP remotos suelen requerir autenticación. OpenCode la gestiona solo: detecta el rechazo 401, inicia el flujo OAuth (con registro dinámico de cliente según RFC 7591 si el servidor lo soporta) y guarda los tokens de forma segura en ~/.local/share/opencode/mcp-auth.json. Comandos útiles:
opencode mcp add # agrega un servidor guiado
opencode mcp list # estado y conexión de cada servidor
opencode mcp auth sentry # fuerza el flujo OAuth de uno
opencode mcp logout sentry # borra sus credenciales
opencode mcp debug sentry # diagnostica problemas de conexión
MCP oficial para consultar proyectos, issues y errores: https://mcp.sentry.dev/mcp con OAuth.
Búsqueda en documentación actualizada; agrega "use context7" al prompt cuando necesites docs frescas.
Búsqueda de fragmentos de código reales en GitHub (mcp.grep.app) para ver cómo resuelven otros tu mismo problema.
Advertencia importante: cada servidor MCP agrega la descripción de sus herramientas al contexto del modelo. Algunos (como el de GitHub) suman tantos tokens que pueden desbordar la ventana de contexto. Activa sólo los que necesites por proyecto.
{
"mcp": { "mi-mcp": { "type": "local", "command": ["bun", "x", "mi-servidor"] } },
"tools": { "mi-mcp*": false },
"agent": {
"devops": { "tools": { "mi-mcp*": true } }
}
}
Con este patrón desactivas las herramientas del MCP globalmente y las habilitas sólo para el agente que las necesita. Los patrones glob (*, ?) aplican sobre el nombre del servidor prefijando cada herramienta.
Las skills son carpetas con un archivo SKILL.md que describen un procedimiento o rol especializado. A diferencia de los comandos, no se invocan manualmente: el agente ve la lista disponible y carga la skill completa sólo cuando la tarea la requiere, ahorrando contexto.
.opencode/skills/<nombre>/SKILL.md en el proyecto o ~/.config/opencode/skills/<nombre>/SKILL.md global (también lee rutas compatibles de Claude Code y agentes).name obligatorio (minúsculas y guiones, igual a la carpeta) y description específica de hasta 1024 caracteres.---
name: git-release
description: Crear releases y changelogs consistentes
---
## Qué hago
- Redacta notas de release desde los PRs mergeados
- Propone el salto de versión adecuado
- Entrega el comando `gh release create` listo para pegar
## Cuándo usarme
Al preparar un release etiquetado.
Los permisos también aplican a skills: "skill": { "internal-*": "deny", "experimental-*": "ask" } oculta, pregunta o permite según patrón, con posibilidad de sobreescribir por agente.
OpenCode puede formatear cada archivo que escribe o edita usando el formatter nativo del lenguaje. Están desactivados por defecto; actívalos así:
{
"$schema": "https://opencode.ai/config.json",
"formatter": true
}
| Formatter | Lenguajes | Requisito |
|---|---|---|
prettier / biome |
JS/TS, HTML, CSS, JSON, Markdown... | Dependencia o configuración en el proyecto. |
ruff / uv |
Python | Comando instalado. |
cargofmt / rustfmt |
Rust | cargo fmt disponible. |
gofmt |
Go | Incluido con Go. |
| Otros | Dart, Kotlin, PHP (Pint), Ruby (RuboCop), Terraform, Zig, C/C++... | Se activan si detectan su comando o configuración. |
Puedes desactivar alguno concreto ("prettier": { "disabled": true }), apagar todos ("formatter": false) o definir formatters personalizados indicando comando y extensiones; el marcador $FILE se sustituye por la ruta del archivo a formatear:
{
"formatter": {
"md-fmt": {
"command": ["deno", "fmt", "$FILE"],
"extensions": [".md"]
}
}
}
Conclusión: entre MCP, Skills y formatters, OpenCode escala desde agente individual hasta plataforma de equipo: herramientas externas bajo permisos estrictos, conocimiento institucional reutilizable y estilo de código garantizado en cada edición. En el próximo tema afinaremos la otra mitad de la ecuación: cómo comunicarte mejor con el modelo mediante prompts efectivos.