Prototipo · Versión preliminar: todos los servidores del registro oficial, sincronizados cada 30 minutos. Las reseñas y las cuentas llegarán en una etapa posterior.
PopNx MCPServidores MCP para quienes usan IA · explicados con palabras sencillas

Easel

de Gemberkoekjeversión 0.8.0i★ –iSe ejecuta en tu computadora
Nombre en el registroio.github.Gemberkoekje/easel

Instalar

Resumen

Descripción del creador (original en inglés)

A headless painting engine for AI agents: brushes, paint load, wet blending, canvas texture.

Los tres pilares de PopNx MCP

Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.

Qué puedes hacer con él

Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.

  • Conexión: Se ejecuta en tu computadora
  • Transporte: stdio
  • Categoría: Otros

Instalación

Elige la app de IA que usas y copia la configuración.

Antes de instalar

Necesitas

  • PyPIuv de Python instalado (para el comando uvx)

¿Qué app usas?

Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.

Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json

{
  "mcpServers": {
    "easel": {
      "command": "uvx",
      "args": [
        "easel-paint"
      ]
    }
  }
}

Ejecuta esto en tu terminal

claude mcp add easel -- uvx easel-paint

Abrir en Cursor

O copia la configuración tú

Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json

{
  "mcpServers": {
    "easel": {
      "command": "uvx",
      "args": [
        "easel-paint"
      ]
    }
  }
}

Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.

Abrir en VS Code

O copia la configuración tú

Pégalo en .vscode/mcp.json de tu proyecto

{
  "servers": {
    "easel": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "easel-paint"
      ]
    }
  }
}

Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.

Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.

Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.

Esta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.

Qué puede hacer

Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.

Revisiones básicasi

Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026

  • ✓ Superada

    El creador coincide con el repo

    El nombre en el registro se verificó con la cuenta de GitHub Gemberkoekje, dueña del repo

  • … Aún sin revisar

    Sigue en mantenimiento

    Todavía no hemos leído este repo en GitHub

  • … Aún sin revisar

    Tiene licencia

    Todavía no hemos leído este repo en GitHub

  • – No aplica

    El endpoint responde

    Este se ejecuta en tu computadora; no hay endpoint en internet

  • – No aplica

    Inicio de sesión con OAuth

    Se ejecuta en tu computadora y usa ajustes locales en su lugar

  • … Aún sin revisar

    Sin instrucciones ocultas en las descripciones de herramientas

    Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet

Comparado con otros en Otrosi

  • Más estrellas que el 0% de los otros 32686 servidores de esta categoría
  • Publicado en el registro más recientemente que el 52% de los otros 32686 servidores de esta categoría
  • Revisiones básicas iguales o mejores que el 100% de los otros 32686 servidores de esta categoría

Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.

Preguntas frecuentes

¿Es seguro Easel?

Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.

¿Qué claves o códigos necesita?

El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.

¿Se ejecuta en mi computadora o en la nube?

Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).

¿Sigue en mantenimiento?

El repo de GitHub cambió por última vez –, y la última versión (0.8.0) llegó al registro hace 37 días.

¿Qué apps pueden usarlo?

Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Python (uv) en tu computadora.

¿Qué puedo usar en su lugar?

En la misma categoría: Spec Driven Development, Remote Desktop Commander, Microsoft Exchange Online MCP

Alternativas

Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.

Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi

Spec Driven Development

de formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

Se ejecuta en tu computadora★ 440MITActualizado hace 14 meses
Instalar

Remote Desktop Commander

de desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

Se ejecuta en la nube★ 211Actualizado anteayer
Instalar

Exchange Online admin for MSPs: forwarding audits, EWS posture and offboarding, no PowerShell

Se ejecuta en tu computadoraActualizado hoy
Instalar

README del creador

Abrir el README

Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.

Easel

Can an LLM paint with real brush strokes, rather than draw with pixels? Yes — this is the API for it.

Easel is a headless painting engine for AI agents: brushes, paint load, wet blending and canvas texture, driven from Python, from a shell, or over MCP. A brush carries a finite load of paint and runs out along a stroke. Paint lands wet and mixes with what is already there, in a pigment model where blue and yellow make green rather than grey. The canvas has tooth, and a brush low on paint catches only the high points — so dry brush is not a special effect, it is what happens when you run out of paint on rough canvas. Between strokes you look at your own work, which is the whole point: the engine is built for an agent that can see what it just did.

It is not a drawing library, not a rasteriser, and not an image generator — nothing here turns a prompt into a picture. You choose and make every mark. There are no layers, and no undo that costs nothing: you work in passes, and when something is wrong you paint over it.

You have to be able to see images. Every pass of the method ends by looking at what it did — s.look(), the rehearsal, the post-pass check — and none of that reaches a painter who cannot take an image back. A model without image input can drive the whole API and will get a picture out of the far end, but it cannot tell whether any of it landed; one painter in the 0.5.0 cohort said exactly that of its own finished painting. Vision is a requirement here, not a feature.

Read the guide before you paint. The engine is only the brush; PAINTER.md is the method, and six measured runs say the method is the half that matters. It ships inside the package, so there is nothing to go and find: `easel guide` prints its first page — the whole workflow, about 1,000 words — and easel guide --full prints the rest.

from easel import Session, blob, cell

s = Session(1024, 768, texture="linen", ground="toned_grey", seed=7) s.palette["shadow"] = s.palette.mix("ultramarine", "burnt_umber", 0.4)

s.block_in(blob(cell("D5")), brush="bristle", color="shadow", density=0.8) s.look(values=True) # check the value structure s.stroke([(0.2, 0.6), (0.6, 0.55), (0.9, 0.62)], "bristle", "yellow_ochre") s.export("painting.png")

Paintings, made this way

*Inside a car wash, from the driver's seat — 206 strokes of a 300 budget, 1152×720 linen, no reference photograph. The nineteen pass scripts it was painted from are beside it.*

*A laundromat at night, from across the street — 286 strokes of a 300 budget, 1024×768 linen, no reference photograph. The fourteen pass scripts it was painted from are beside it.*

*A heron in a flooded parking lot at dawn — 253 strokes of a 320 budget, 1024×768 rough canvas, no reference photograph. The same subject was painted twice by the same painter to separate two kinds of fault; PAINTINGS.md has both attempts side by side.*

Every one of these was painted by a language model working from PAINTER.md, one call to this API at a time, with no human hand on the canvas and nothing traced. Every stroke is in the log, every time-lapse was rebuilt from it, and the notes beside each painting say what went wrong as well as what went right. PAINTINGS.md gathers the record, and *The worked examples* below says what each one is made of.

If you are about to paint from the guide yourself: have you decided what to paint? If you have, these are yours to study and the scripts beside them are the best thing here. If you have not, do not look — a worked example names a subject and a named subject chooses for you, as six of six fresh sessions once demonstrated by painting a noun the guide had merely listed in passing. Decide first, then look.

The brushes themselves

*Every brush, size and pressure profile, on each canvas texture. Regenerate with python scripts/make_brush_sampler.py — this sheet is the project's primary test artefact, and looking at it catches what the test suite cannot.*

*A mass does not have to be a rectangle. Each row is one way of building a shape, each column a way of sweeping it; the last column is the box that mass would have been. Regenerate with python scripts/make_shape_sampler.py.*

Install

Requires Python 3.12 or newer. Only numpy and Pillow — nothing that is painful to build on Windows.

pip install easel-paint          # the engine, the CLI and the Python API

pip install "easel-paint[mcp]" # and the MCP server

from easel import Session, blob, cell      # the import the documents teach

import easel_paint # the same engine under the installed name

The distribution is `easel-paint`, never `easel`. PyPI carries an unrelated package called easel, so pip install easel gets somebody else's. Both import names work here — easel_paint re-exports easel — and every example is written with the short one.

From a checkout, pip install -e . and pip install -e ".[mcp]" do the same two things.

Either installs an easel command. Pip puts it in the interpreter's scripts directory, which is often not on PATH (it warns when it is not), so python -m easel ... is always available as the same command by another name.

The MCP server is an opt-in extra because nothing else in the engine imports it. See *MCP server* below.

If you are an LLM agent, read PAINTER.md

PAINTER.md is the guide written for you. It teaches the *workflow* — tone the ground, paint back to front, check values, refine, edges, highlights last — rather than listing functions, and it opens with *the first hour*: the whole method on one page, so the ten warm-up exercises come before anything else.

If you have already installed the package you do not need that link. All six documents ship inside the wheel: python -m easel guide prints the first hour, --full prints the rest, and easel.docs.read() hands you any of them as text. The sixth is DIAGNOSIS.md, an index of symptoms rather than a document to read — you have rehearsed a pass, it is wrong, and easel diagnose concentric rings prints the passage that measured it.

It is one file of five, and every rule in the five is stated once, in the file it belongs to, and linked from everywhere else. PAINTER.md is held to a word budget by the test suite so that it stays the file a painter can hold in their head; the numbers it quotes are measured in CALIBRATION.md, and what painters reported about their own sessions is kept there too rather than beside the rules.

PAINTER.mdthe method: the loop, the order of work, the mistakes, the exercises, the checklist. Held in your head
RECIPES.mdone situation at a time: the calls in order, what it looks like when it goes wrong, and the number behind it
PAINTING.mdhow the paint, the brushes and the planning tools behave; copying a photograph, in its last chapter. The reasons, and easel explain prints the one a notice points at
REFERENCE.mdthe facts: units, defaults, what each argument does
CALIBRATION.mdthe measurement behind every number the other four quote, each with what it was measured on

The engine is designed around one habit:

Look every five to fifteen strokes. A stroke you did not look at was a guess.

llms.txt is the same signpost in the format a model fetching this repository is increasingly told to look for: the summary, what to know before reading further, and where each document is, in about 1,500 words.

What is in the box

PieceWhat it does
SessionThe one object you hold. Canvas, palette, seed, history, look().
CanvasLinear-light RGB plus wetness, thickness, sketch (graphite) and canvas height (tooth).
Brushesround_soft, round_hard, liner, flat, bristle, knife, smudge. Procedural tips, and tip_wobble gives a round one a silhouette of its own, redrawn per mark.
PaletteA limited pigment set with no black. Mix, tint, shade, and name your mixes.
Regionsregion("top-left"), cell("D6"), horizon(0.4), below(...), between(...).
ShapesA mass that is not a box: blob, ellipse, hull, union, ribbon, polygon, and s.circle() for one that is round in pixels on any canvas. smooth() cuts the corners off an outline and roughen() walks it off its own line, for anything nobody ruled. Any of them goes where a region goes, and group() moves several as one; rotated() turns a shape or a group in pixels. s.px(x, y) draws in pixels, and s.frame() gives a thing its own coordinates, tilted in pixels.
Massesblock_in(place, ...) fills a rectangle *or a shape* with overlapping passes, stopping at the silhouette, or drawing its contour with edge="clean"; solid=True when it has to be solid paint, because density spaces the passes rather than filling them. sweep(edge, ...) lays a mass as passes along its own boundary, stepped inward. Both emit ordinary strokes.

| Passages and repairs | scumble(band, a, b, n) lays a soft passage as n overlapping passes stepping between two values — the thing a gradient tool would be

Solo se muestra el principio; lee el resto en el repo

Pregunta a PopNx