plain-sight
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PLAIN_SIGHT_DTYPE | No | float16 / bfloat16 / float32 | float16 on CUDA, full precision on CPU |
| PLAIN_SIGHT_DEVICE | No | torch device | auto |
| PLAIN_SIGHT_MODEL_ID | No | HuggingFace model | florence-community/Florence-2-large |
| PLAIN_SIGHT_LOG_LEVEL | No | DEBUG / INFO / WARNING / ERROR | WARNING |
| PLAIN_SIGHT_MODEL_DIR | No | Model cache directory | HF default cache |
| PLAIN_SIGHT_NUM_BEAMS | No | Beam width (deterministic decoding) | 3 |
| PLAIN_SIGHT_EAGER_LOAD | No | If truthy, load the model at server start | |
| PLAIN_SIGHT_MAX_NEW_TOKENS | No | Default generation cap | 1024 |
| PLAIN_SIGHT_MODEL_REVISION | No | Model revision; the mechanism behind the reproducibility claim | 4271c66b88cdbc05735372ec13b2360108de5317 |
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": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| describe_imageA | Describe an image in prose — an AI says what it sees. Uses Florence-2 (MIT-licensed, runs locally) with deterministic decoding: the same image at the same tier reproduces the same description. Descriptions are generative and can hallucinate detail — for verifying a specific claim about the image, prefer ai-eyes-mcp's image_verify. |
| describe_batchA | Blocks until every image completes -- roughly 1-2 s per image plus ~10-20 s if the model is not yet loaded. Chunk large sets. Existing sidecars are skipped unless overwrite=true, so a retry is cheap. Caption a batch of images, writing .txt sidecars -- the dataset lane. The training-data contract: EXACT basename pairing (img_0042.png -> img_0042.txt, no counter suffix) and BARE prefix+caption+suffix concatenation (no delimiter injected). |
| read_textA | Extract visible text from an image (Florence-2 task). Returns the text the model reads off the pixels — signage, UI labels, documents. Like all generative output it can misread; treat low-stakes. |
| sight_statusA | Check plain-sight server status. Returns model info, device, and whether the model is currently loaded. The model loads lazily on first tool call — this tool does NOT trigger loading. |
| sight_selftestA | Self-test: describe the bundled reference images and confirm the outputs are sane (non-trivial, on-subject, tier ordering holds) — proves the install loaded correctly. Loads the model if it isn't already. Returns |
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 5 tools
Tools have distinct purposes: single image description, batch captioning with sidecars, OCR, status check, and self-test. The only mild overlap is between describe_image and describe_batch, but the sidecar/dataset contract and blocking behavior make them clearly separable.
Three tools follow verb_noun (describe_image, describe_batch, read_text) while two follow noun_noun with a sight_ prefix (sight_status, sight_selftest). The split is readable but not a single consistent pattern.
Five tools is well within the ideal range for a focused image description/OCR server; each tool has a clear role and none feels redundant.
Core workflows are covered: single and batch description, OCR, status, and self-test. Minor gaps exist, such as no explicit tier selection tool or a way to get batch captions without writing sidecars, but these are workable.