Herramientas de usuario

Herramientas del sitio


cursos:sdd:09-mcp

MCP

Qué es un servidor MCP está en Conceptos básicos. Aquí, cuáles se instalan: dos y ninguno más.

  • Context7: la documentación actual de las librerías.
  • DBHub: la base de datos de desarrollo.

Todo lo demás el agente ya lo hace con sus herramientas y con las órdenes de siempre: git, gh, ./mvnw, curl. Un MCP para eso ocupa contexto en cada sesión y no aporta nada.

Cada servidor conectado ocupa contexto en todas las sesiones, se use o no: la descripción de cada una de sus herramientas. Antes de añadir un tercero, comprueba que no se puede hacer con una orden de terminal.

Los dos se instalan en el proyecto, para que viajen en el repositorio y los tenga todo el equipo:

  • Claude Code: claude mcp add con --scope project, que lo guarda en .mcp.json, en la raíz. Sin él se guarda solo para esa carpeta y en otro worktree no estaría.
  • OpenCode: en la clave mcp de opencode.json, en la raíz.

1. Context7

Context7 le da al agente la documentación actual de la librería que está usando. Sin él, escribe el código de la versión que recuerda, que no es la que tiene el proyecto: métodos que ya no existen, configuración que ha cambiado.

  • Claude Code:

claude mcp add --scope project context7 -- npx -y @upstash/context7-mcp

  • OpenCode:

{
  "mcp": {
    "context7": { "type": "local", "command": ["npx", "-y", "@upstash/context7-mcp"] }
  }
}

Sin la API key que pone la página de Context7: no hace falta y acabaría en el repositorio.

El agente no lo usa solo siempre que debería. Se le dice en AGENTS.md, con cuándo:

- Antes de usar una API de Spring Boot o de Angular, consulta su documentación con Context7.


2. Base de datos: DBHub

DBHub deja al agente consultar la base de datos de desarrollo: ver el esquema real antes de diseñar una migración, escribir una consulta y probarla, o comprobar qué ha guardado un test que falla. Vale para PostgreSQL, MySQL, MariaDB, SQL Server, Oracle y SQLite.

Se configura con un dbhub.toml en la raíz:

[[sources]]
id = "pedidos"
dsn = "postgres://pedidos:${DB_PASSWORD}@localhost:5432/pedidos"

[[tools]]
name = "execute_sql"
source = "pedidos"
readonly = true
max_rows = 100

  • dsn: la conexión. La contraseña sale de la variable de entorno DB_PASSWORD, así el fichero se puede subir al repositorio. En MySQL: mysql://pedidos:${DB_PASSWORD}@localhost:3306/pedidos.
  • readonly = true: solo consultas. Los datos los cambia la aplicación o una migración, no el agente.
  • max_rows: lo que devuelve una consulta entra en el contexto. Cien filas bastan para ver cómo son los datos.

Y se da de alta apuntando a ese fichero:

  • Claude Code:

claude mcp add --scope project basedatos -- npx -y @bytebase/dbhub@latest --config dbhub.toml

  • OpenCode:

{
  "mcp": {
    "basedatos": { "type": "local", "command": ["npx", "-y", "@bytebase/dbhub@latest", "--config", "dbhub.toml"] }
  }
}

Solo la base de datos de desarrollo, nunca la de producción, ni siquiera en solo lectura: lo que devuelve una consulta entra en la conversación y se manda al proveedor del modelo.
Si DB_PASSWORD no está definida, DBHub no avisa: deja el texto ${DB_PASSWORD} tal cual como contraseña y lo que falla es la conexión. Ante un error de autenticación, lo primero, echo $DB_PASSWORD en la terminal desde la que se arrancó el agente.

3. Comprobar que están conectados

  • Claude Code: /mcp dentro de la sesión lista los servidores y si han arrancado.
  • OpenCode:

opencode mcp list


Más información

cursos/sdd/09-mcp.txt · Última modificación: por claude