apud-mcp
apud-mcp exposes an IIIF-grounded MCP server for inspecting manifests and working with citable manuscript regions.
List a IIIF manifest’s canvases (id, label, size) with pagination via
describe_manifest.Fetch a canvas-coordinate region at the best resolution allowed, returning the image plus crop-to-canvas mapping via
view_region.Record a region transcription as a W3C annotation with a citable link, optionally with a language, via
annotate_transcription.Support IIIF-grounded, citable vision workflows over historical documents by agents.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@apud-mcp read the marginal note on canvas 10 of this manifest and annotate it with coordinates"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
apud
IIIF-grounded, citable vision for historical documents.
Vision-language models can read manuscripts, but they cannot say where they read what they
report, and their answers cannot be checked by a scholar. apud sits between IIIF collections
and models:
fetches canvas regions from any IIIF Image API server at the best resolution the server and the model allow (Image API v2/v3, Presentation v2/v3, lenient parsing of real-world manifests), including Level 0 static servers, where the region is stitched from the covering tiles (or cut from the closest declared size) on the client;
keeps every model output anchored to canvas coordinates, even when the served image size differs from the canvas;
emits W3C Web Annotations (
xywhfragment selectors) and IIIF Content State links, so every transcription can be opened at the exact spot in Mirador or any IIIF viewer.
apud (Latin, "in the work of") is how philologists cite a source they read in someone else's text.
Status: pre-alpha.
Packages
Package | Path | What it is |
| Python library: IIIF parsing, region requests, annotations, citations | |
| MCP server exposing |
The benchmark lives in a separate repository: apud-bench.
Related MCP server: agent-vision-mcp
Quick look
from apud.client import IIIFClient
from apud.iiif import Region, canvas_to_image
with IIIFClient() as iiif:
manifest = iiif.manifest("https://www.e-codices.unifr.ch/metadata/iiif/csg-0390/manifest.json")
canvas = manifest.canvases[10]
service = iiif.image_service(canvas.image_service)
region = canvas_to_image(Region(200, 300, 800, 400), service.width, service.height, canvas)
request, jpeg = iiif.region(service, region, max_side=1568)MCP server
uvx apud-mcpTools: describe_manifest, view_region, annotate_transcription.
Development
uv sync
uv run pytest
uv run ruff check . && uv run ruff format --check .License
Apache-2.0. See CITATION.cff for how to cite.
Available Tools
3 toolsannotate_transcriptionC
Record a transcription of a canvas region as a W3C annotation with a citable link.
Inputs: h (required), w (required), x (required), y (required), +4 more. Returns: object
describe_manifestC
List the canvases of a IIIF manifest (id, label, size), paginated.
Inputs: manifest_url (required), limit, offset. Returns: object
view_regionC
Fetch a canvas region (canvas coordinates) at the best resolution the server allows.
Returns the image and the mapping from crop pixels back to canvas coordinates.
Inputs: h (required), w (required), x (required), y (required), +3 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 3 tools
The three tools occupy clearly separate steps of a single workflow: enumerate structure (describe_manifest), retrieve imagery (view_region), and persist a transcription (annotate_transcription). There is no resource or action overlap that could cause misselection.
All three names follow a consistent verb_noun snake_case pattern (describe_, view_, annotate_) with noun phrases that match the IIIF vocabulary used in the descriptions. No mixed conventions or vague verbs.
Three tools is on the lean side, but each maps to a distinct, necessary step of the manifest-inspect-annotate loop and nothing feels redundant. A small number of additional read/query helpers would round it out, but the scope is deliberate rather than padded.
The read path (manifest structure + region imagery with coordinate mapping) is solid, but the annotation side is a dead end: there is no tool to list, retrieve, update, or delete existing annotations, so an agent can write transcriptions but never verify or re-read them. Manifest-level metadata and search are also absent.
Maintenance
Related MCP Connectors
Image & PDF tools for AI agents: compress, convert, resize, PDF, AI vision, pipeline.
Access Pollinations models and API capabilities through agent tools.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Generate images, GIFs, videos, and PDFs from HTML, URLs, or templates — from your AI agent.
Related MCP Servers
- FlicenseAqualityNot gradedmaintenanceEnables AI agents to analyze images through vision AI providers (Gemini, OpenAI, Claude), performing tasks like image description, object detection with bounding boxes, region-specific analysis, and precise color extraction without consuming context window with raw pixels.4-
- AlicenseNot gradedqualityDmaintenanceProvides image analysis, inspection, cropping, OCR, and comparison capabilities via the Model Context Protocol, allowing AI agents to process and manipulate images using vision models.36 PyPI2MIT
- AlicenseAqualityDmaintenanceEnables AI agents to analyze images, extract text, compare images, and analyze video through any OpenAI-compatible vision model.4375 npm20MIT
- AlicenseAqualityCmaintenanceGive MCP-compatible AI agents image analysis, metadata inspection, cropping, OCR, and image comparison through any OpenAI-compatible vision model.6MIT