display-image-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DISPLAY_MCP_DATA | No | Directory for storing rendered images. | ./data |
| DISPLAY_MCP_FONT | No | Font used for rendering text. | Pillow's built-in vector font |
| DISPLAY_MCP_TOKEN | No | If set, the MCP endpoint requires Authorization: Bearer <token> (streamable-http only). | |
| DISPLAY_MCP_BASE_URL | No | Base URL used in returned image URLs. Set this to the address your displays can reach. | http://<http-host>:<http-port> |
| DISPLAY_MCP_MCP_HOST | No | Host for the MCP endpoint. | 127.0.0.1 |
| DISPLAY_MCP_MCP_PORT | No | Port for the MCP endpoint. | 8767 |
| DISPLAY_MCP_PROFILES | No | Path to a TOML file defining custom display profiles. | |
| DISPLAY_MCP_HTTP_HOST | No | Host for the image HTTP server. | 0.0.0.0 |
| DISPLAY_MCP_HTTP_PORT | No | Port for the image HTTP server. | 8099 |
| DISPLAY_MCP_TRANSPORT | No | MCP transport to use, e.g. stdio or streamable-http. | stdio |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_profilesA | List display profiles (resolution, colour mode, output format). |
| render_cardA | Render a simple card (header bar, body lines, footer) and store it as (profile, label). Text that is too long is truncated with an ellipsis and extra lines beyond what fits are
dropped, so keep it short. Returns the image URL, its sha256 and |
| render_imageB | Render a custom layout from drawing elements and store it as (profile, label). Origin (0,0) is top-left; sizes are in pixels. Colours are names (black, white, red, yellow,
gray, dark_gray, light_gray) or #rrggbb; they snap to what the profile can show. Elements:
{"type":"text","text":..,"x":..,"y":..,"size":12,"color":"black","bold":false,
"anchor":"la","max_width":px,"max_lines":1} (anchor: Pillow anchors, e.g. "la","mm","ra")
{"type":"rect","x":..,"y":..,"w":..,"h":..,"fill":colour|null,"outline":colour|null,"width":1}
{"type":"line","x1":..,"y1":..,"x2":..,"y2":..,"color":"black","width":1}
{"type":"progress","x":..,"y":..,"w":..,"h":..,"value":0.0-1.0}
Returns the image URL, sha256 and |
| render_layoutA | Lay out a screen from nested rows and columns (no pixel coordinates) and store it as (profile, label).
Nodes (every node accepts |
| list_imagesA | List stored images (all profiles, or one) with URL, sha256, size and last-changed time. |
| delete_imageC | Delete the image stored for (profile, label). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 6 tools
The three render tools are distinguishable: render_card is a fixed header/body/footer template, render_image takes pixel-coordinate drawing elements, and render_layout uses nested rows/columns without coordinates. They could be confused at a glance (card output is achievable via the other two), but the descriptions clarify the boundaries well. list_profiles vs list_images is also clearly separated by resource.
All six tools follow a strict verb_noun snake_case pattern: list_profiles, list_images, render_card, render_image, render_layout, delete_image. Verb families are internally consistent (render_*, list_*). No mixed conventions.
Six tools is well-scoped for a display image rendering/storage server. Each tool earns its place: profile discovery, three rendering variants, listing, and deletion. No filler or redundancy.
The image lifecycle is mostly covered: render (create), list (read), delete. However, there is no single-image get/inspect tool to fetch metadata for one (profile, label) without listing everything, and profiles can only be listed, not defined. These are minor gaps agents can work around via list_images.