Todas las skills

mcp-builder (anthropics/skills)

Guía la creación de servidores MCP en Python o TypeScript que exponen servicios externos como herramientas bien diseñadas.

mcp-builder: eleva los servidores MCP de 3.6 a 4.6/5 añadiendo nombres, anotaciones y asincronía, pero una lista de comprobación de una frase puntúa 4.9 con el 68% de los tokens

Según el casoSegura

Codex CLI · gpt-6-astra

21.6 / 30

Mejora frente a sin skill: +1.04 · Según el caso · 18 ejecuciones

Según el caso: el total 21.6/30 está por debajo de 22. Para ser recomendada hace falta un total de 22/30, una calidad de salida de 3.5 y una mejora de +1.0.

SOTA

Aprobada

Probada con Codex.

Cubre Codex, Claude Code

Codex CLI 0.166 (nivel SOTA): 18 ejecuciones puntuadas. Una pasada aquí también cubre Claude Code según nuestra regla de niveles; no dice nada sobre el segundo nivel.

Puntuaciones

Cada dimensión va de 0 a 5 y las seis suman el total sobre 30. 5 es mejor en todas las dimensiones. Coste 5 significa barato y rápido. Instalación 5 significa fácil.

Fiabilidad de activación
5.0
Mejora frente a sin skill
3.0
Calidad de salida
4.6
Coste en tokens y tiempo
3.0
Instalación y portabilidad
3.0
Seguridad
3.0

Revisión de seguridad

Segura

Escaneo estático: 8 CRITICAL / 13 HIGH / 7 MEDIUM. Revisión manual: Segura de ejecutar en un sandbox sin red (hallazgos del escáner explicados; scripts incluidos nunca ejecutados). Un escaneo limpio no demuestra que una skill sea segura.

Instalar

npx skills@latest add anthropics/skills --skill mcp-builder

Origen

Commit fijado: ca45fc496a3436251f191354091d557da31c15b5

Probada: 2026-11-02

Qué probamos

  • Servidor MCP en Python para una API de librería — Escribe server.py: un servidor MCP en Python para una API REST de inventario de librería (URL base desde el entorno, token bearer desde el entorno). Herramientas: buscar libros, obtener un libro, actualizar el stock de un libro, eliminar un libro. Usa el SDK oficial de MCP para Python (FastMC…
  • Servidor MCP en TypeScript para una API del tiempo — Escribe src/index.ts y package.json: un servidor MCP en TypeScript para una API REST del tiempo (URL base y clave de API desde el entorno). Herramientas: obtener el tiempo actual de una ciudad, obtener una previsión de 5 días, listar ubicaciones guardadas, eliminar una ubicación guardada. Usa el SDK oficial de MC…
  • Repara un servidor MCP escrito con prisas — server.py es un servidor MCP para nuestra API de almacén que funciona, pero se escribió con prisas. Corrígelo para que siga las buenas prácticas de servidores MCP. Edita server.py in situ y haz que siga hablando con la misma API. Aquí no hay red ni instalación de paquetes; solo escribe…

Ventajas

  • Eleva la puntuación media de 3.57 a 4.61 frente a sin skill (+1.04).
  • La skill se activó sin nombrarla: se leyó el archivo de la skill en 6/6 ejecuciones con skill.
  • Calidad absoluta alta con la skill: 4.61 sobre 5.

Inconvenientes

  • Un prompt de una frase puntuó 4.88, frente a 4.61 con la skill (-0.27).
  • Usa 1.51x los tokens de sin skill.
  • n=2 por tarea y rama; las diferencias de menos de aproximadamente 1 punto son ruido.

Reseña

Codex CLI 0.166 (gpt-6-astra, razonamiento bajo) en un PC de pruebas Windows dedicado, con un proyecto temporal nuevo y HOME/TMPDIR/cachés temporales en cada ejecución, la skill instalada (grupo con skill), ausente (control) o ausente con el requisito central de la skill comprimido en una frase añadida al prompt (grupo del prompt de una frase), 2 ejecuciones por grupo y tarea, sin red y con las escrituras en /tmp bloqueadas. Los prompts nunca mencionan la skill (salvo la redacción indicada abajo). Tres tareas: escribir un servidor MCP en Python para una API REST de librería, escribir un servidor MCP en TypeScript para una API del tiempo y arreglar un server.py existente y chapucero para que siga las buenas prácticas. Nada necesita red (el agente no puede instalar el SDK de MCP; solo escribe código). El prompt del grupo con skill es el mismo que el del control.

Comparación de tres ramas

RamaPuntuación media (0-5)Tokens por ejecución
Sin la skill3.5773k
Prompt de una frase4.8875k
Con la skill4.61110k

Medido con Codex CLI en 18 ejecuciones, puntuado con comprobaciones basadas en reglas y sin juez LLM. Total 21.6 / 30, veredicto Según el caso.

Veredicto: Según el caso (21.6 / 30). Fuente: anthropics/skills, skills/mcp-builder, fijada en el commit ca45fc4. Instalación: npx skills@latest add anthropics/skills --skill mcp-builder. Licencia: Propietaria: LICENSE.txt de anthropics/skills (código disponible; solo para evaluación, no redistribuible).

Qué es

La skill mcp-builder de anthropics/skills: una guía para construir servidores de Model Context Protocol (investigar y planificar, implementar, revisar y probar, escribir evaluaciones). Incluye guías por lenguaje para Python (FastMCP) y TypeScript, notas de buenas prácticas de MCP y dos scripts auxiliares para ejecutar evaluaciones contra un servidor. Licencia propietaria (código disponible).

Cómo lo probamos

Codex CLI 0.166 (gpt-6-astra, razonamiento bajo) en un PC de pruebas Windows dedicado, un proyecto temporal nuevo y HOME/TMPDIR/cachés temporales por ejecución, skill instalada (tratamiento) o ausente (control) o ausente con el requisito central de la skill comprimido en una frase añadida al final del prompt (grupo de una frase), 2 ejecuciones por grupo y tarea, red desactivada, escrituras en /tmp bloqueadas. Los prompts nunca mencionan la skill (salvo la formulación indicada abajo).

Tres tareas: escribir un servidor MCP en Python para una API REST de librería, escribir un servidor MCP en TypeScript para una API del tiempo y arreglar un server.py existente y hecho con prisa para que siga las buenas prácticas. Nada necesita red (el agente no puede instalar el SDK de MCP; solo escribe código). El prompt del grupo con la skill es el mismo que el del control.

  1. Servidor MCP en Python para una API de librería — Escribe server.py: un servidor MCP en Python para una API REST de inventario de librería (URL base desde el entorno, token bearer desde el entorno). Herramientas: buscar libros, obtener un libro, actualizar el stock de un libro, eliminar un libro. Usa el SDK oficial mcp de Python (FastMC…
  2. Servidor MCP en TypeScript para una API del tiempo — Escribe src/index.ts y package.json: un servidor MCP en TypeScript para una API REST del tiempo (URL base y clave de API desde el entorno). Herramientas: obtener el tiempo actual de una ciudad, obtener una previsión de 5 días, listar ubicaciones guardadas, eliminar una ubicación guardada. Usa el SDK oficial…
  3. Repara un servidor MCP escrito con prisa — server.py es un servidor MCP para nuestra API de almacén que funciona pero se escribió con prisa. Arréglalo para que siga las buenas prácticas de servidores MCP. Edita server.py en el sitio y mantenlo conectado a la misma API. Aquí no hay red ni instalación de paquetes; solo escribe…

La puntuación es programática (tests ocultos / detección de problemas sembrados / comprobaciones de restricciones / renderizado + OCR cuando corresponde), 0–5 por ejecución. Ningún juez LLM decidió ninguna puntuación.

Resultados

La frase única que recibió el tercer grupo: "Diseña el servidor MCP como un experto: nombres de herramientas coherentes, con prefijo de servicio y orientados a la acción (p. ej. bookstore_search_books), esquemas de entrada tipados (Pydantic o Zod) con campos descritos, anotaciones (readOnlyHint, destructiveHint, idempotentHint), resultados paginados y con límite de tamaño, mensajes de error accionables, secretos solo desde variables de entorno, E/S asíncrona y nada impreso en stdout con transporte stdio."

TareaPuntuación controlUna fraseCon la skillTokens controlTokens de una fraseTokens con la skillSkill leída
t1-python1.434.644.260k64k97k2/2
t2-typescript4.295.04.6460k55k100k2/2
t3-fix5.05.05.097k106k133k2/2

Puntuación media: 3.57 sin vs 4.61 con la skill (delta +1.04). Tokens por ejecución: 73k vs 110k (1.51x); tiempo 80s vs 89s. Grupo de una frase: 4.88 (la ganancia de la skill sobre la frase única: -0.27; la ganancia de la frase única sobre sin skill: +1.31); tokens de la frase única 75k por ejecución, así que la skill cuesta 1.47x la frase única.

Qué ocurrió

  • Donde importa, la skill ayuda: en los dos servidores desde cero, el control pasó por alto lo básico (nombres de herramientas con un prefijo de servicio común en 2/4 ejecuciones, anotaciones de herramientas como readOnlyHint en 2/2 ejecuciones de Python, herramientas asíncronas 2/2 ejecuciones de Python, mensajes de error accionables 2/2 ejecuciones de Python). Puntuación media 3.57 control, 4.61 skill.
  • El grupo de una frase lo hizo mejor que la skill: 4.88, con una comprobación fallada en 18 ejecuciones, mientras que el grupo con skill falló 5. La frase enumera las mismas propiedades que buscan las comprobaciones, así que es un límite superior para un prompt corto, pero cuesta 75k tokens por ejecución frente a 110k de la skill y 73k del control.
  • Un defecto real en el grupo con skill: ambas ejecuciones de tratamiento en TypeScript produjeron un createServer() para el nuevo paquete @modelcontextprotocol/server pero nunca iniciaron un transporte (ni stdio ni Streamable HTTP), así que el archivo del servidor no se puede lanzar tal como está; las ejecuciones de control y de una frase sí incluían un transporte.
  • En la tarea de arreglo, los tres grupos puntuaron igual (las 9/9 comprobaciones en las seis ejecuciones): dado un servidor existente, Codex sin más ya aplicaba las prácticas.
  • La skill es pesada de cargar: SKILL.md y guías de referencia; las ejecuciones de tratamiento dejaron unos 12 archivos de skill en la carpeta .agents del proyecto y leyeron las guías, de donde sale el 1.5x de tokens. Sus scripts auxiliares (arnés de evaluación) no se ejecutaron en el sandbox sin red.

Puntuaciones por dimensión

DimensiónPuntuaciónMotivo
1_output_quality4.61

Puntuación media 4.61/5 con la skill (comprobaciones programáticas, véase la tabla por tarea).

2_lift_vs_no_skill3.04

+1.04 puntos frente a 3.57 sin la skill (n=2 por tarea; menos de ~1 punto es ruido).

3_trigger5.0Archivo de la skill leído en 6/6 ejecuciones de tratamiento.
4_instructions_portability3

Conjunto de referencia grande, dividido en guías por lenguaje; los scripts auxiliares necesitan paquetes de Python y un servidor en vivo.

5_efficiency31.51x tokens (110k vs 73k por ejecución) y 1.11x tiempo (89s vs 80s).
6_safety_hygiene3

El escáner marca 8 CRITICAL / 13 HIGH, todos revisados en contexto: código de servidor de ejemplo y paso de variables de entorno en scripts auxiliares; licencia propietaria.

Límites de esta prueba

  • Comprobaciones basadas en reglas sobre el texto del código; ninguno de los servidores generados se inició ni se conectó a un cliente.
  • Sin red: el agente no pudo instalar ni importar el SDK de MCP, así que los detalles de la API (por ejemplo, el nuevo paquete v2 de TypeScript) no se validaron.
  • No se ejercitó el paso de evaluación de la skill (generar preguntas y ejecutarlas contra el servidor).
  • n = 2 por grupo y tarea: las diferencias de menos de ~1 punto son ruido.
  • La puntuación basada en reglas mide lo que las comprobaciones pueden ver; no puede juzgar el gusto ni si el resultado es el mejor posible.

Seguridad

Consulta security.md. Escaneo: 8 CRITICAL / 13 HIGH / 7 MEDIUM. Veredicto: segura de ejecutar (sandbox sin red). Un escaneo limpio no demuestra que una skill sea segura.

Conclusión

Para un servidor desde cero, la skill supera claramente a un agente sin guía en nombres, anotaciones, asincronía y manejo de errores, a cambio de 1.5x tokens. Una frase de lista de comprobación logró las mismas propiedades con menos tokens y sin el defecto del transporte ausente, así que instálala por las guías de referencia y la consistencia, no por un salto de calidad frente a un buen prompt.

Transcripción

Registro de ejecuciones: mcp-builder (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.)
Columnas: tarea, grupo-ejecución, puntuación (0-5), tokens, segundos, comprobaciones superadas, archivos de la skill que abrió el agente.

t1-python control-1: puntuación 1.79, tokens 51610, s 53.2, comprobaciones 4/9, no abrió nada
t1-python control-2: puntuación 1.07, tokens 69259, s 98.6, comprobaciones 3/9, no abrió nada
t1-python oneliner-1: puntuación 5.0, tokens 74072, s 101.3, comprobaciones 9/9, no abrió nada
t1-python oneliner-2: puntuación 4.29, tokens 54692, s 126.2, comprobaciones 8/9, no abrió nada
t1-python treatment-1: puntuación 3.39, tokens 101809, s 72.0, comprobaciones 6/9, abrió mcp-builder
t1-python treatment-2: puntuación 5.0, tokens 93275, s 66.9, comprobaciones 9/9, abrió mcp-builder
t2-typescript control-1: puntuación 4.29, tokens 52126, s 59.1, comprobaciones 8/9, no abrió nada
t2-typescript control-2: puntuación 4.29, tokens 69042, s 61.5, comprobaciones 8/9, no abrió nada
t2-typescript oneliner-1: puntuación 5.0, tokens 55412, s 104.3, comprobaciones 9/9, no abrió nada

18 ejecuciones, 3 artefactos

Resultado de ejemplo

SOTA · With the skill: server.py (t1-python, run 1, Codex)

"""Bookstore MCP server (Python 3.10+, official mcp SDK, httpx, Pydantic 2). Required environment variables: BOOKSTORE_BASE_URL: API root, e.g. https://inventory.example.com/api/v1 BOOKSTORE_API_TOKEN: bearer token (without the 'Bearer ' prefix) Assumed REST contract (adjust paths/fields here to match your API): GET /books?q=...&limit=...&offset=... -> JSON search results GET /books/{book_id} -> JSON book PATCH /books/{book_id}/stock body: {"stock": nonnegative integer} DELETE /books/{book_id} Updates and deletes may return JSON or an empty success response. Search pagination and response shape are supplied by the upstream API. Run with `python server.py` in an environment with the dependencies installed. Transport is stdio; stdout is reserved for MCP protocol messages. """ import os from contextlib import asynccontextmanager from dataclasses import dataclass from typing import Annotated, Any, AsyncIterator from urllib.parse import quote, urlsplit import httpx from mcp.server.fastmcp import Context, FastMCP from mcp.server.fastmcp.exceptions import ToolError from pydantic import Field @dataclass class AppState: client: httpx.AsyncClient @asynccontextmanager async def lifespan(server: FastMCP) -> AsyncIterator[AppState]: base_url = os.environ.get("BOOKSTORE_BASE_URL", "").strip() token = os.environ.get("BOOKSTORE_API_TOKEN", "").strip() if not base_url or not token: raise RuntimeError("Set BOOKSTORE_BASE_URL and BOOKSTORE_API_TOKEN.") try: parsed = urlsplit(base_url) valid = ( parsed.scheme in {"http", "https"} and bool(parsed.hostname) and parsed.username is None and parsed.password is None and not parsed.query and not parsed.fragment ) parsed.port # Validate a supplied port without exposing the URL. except ValueError: valid = False if not valid: raise RuntimeError("BOOKSTORE_BASE_URL must be an HTTP(S) API root without credentials, query, or fragment.") if any(ord(char) < 33 or ord(char) > 126 for char in token): raise RuntimeError("BOOKSTORE_API_TOKEN must contain printable ASCII without whitespace.") async with httpx.AsyncClient( base_url=base_url.rstrip("/") + "/", headers={"Authorization": f"Bearer {token}", "Accept": "application/json"}, timeout=httpx.Timeout(30.0, connect=10.0), follow_redirects=False, trust_env=False, ) as client: yield AppState(client=client) mcp = FastMCP("bookstore_mcp", lifespan=lifespan) BookId = Annotated[str, Field(min_length=1, max_length=256, description="Book identifier, e.g. 'book-123'.")] def book_path(book_id: str) -> str: if not book_id.strip() or book_id in {".", ".."}: raise ToolError("Provide a nonblank book identifier other than '.' or '..'.") return "books/" + quote(book_id, safe="") async def api_request( ctx: Context, method: str, path: str, *, params: dict[str, Any] | None = None, payload: dict[str, Any] | None = None, ) -> dict[str, Any]: state: AppState = ctx.r [... excerpt: first 3200 of 7129 characters]

Ver Pro