Skip to main content
Glama
nestordemeure

ANNO MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
search_annoA

Search ANNO, the Austrian National Library's historical newspaper archive.

Covers roughly 28 million pages from over 1,600 Austrian newspaper and magazine titles, 1735 to the present, overwhelmingly German-language. Over 91% of holdings are full-text searchable.

Results resolve to an ISSUE, not a page. Use get_snippets with a returned identifier to find which page a term appears on.

Args: query: Text to search in OCR content. - Bare words are ANDed: "Hanussen Hellseher" needs both - Exact phrases: '"Erik Jan Hanussen"' - AND / OR / NOT, which MUST BE UPPERCASE - Trailing wildcard: "Hanuss*" page: Page number for pagination, 1-indexed (default: 1). ANNO fixes the page size at 10 results and offers no way to raise it. sort: Result ordering — "relevance" (default), "date_asc" or "date_desc". ANNO's totals are true match counts rather than a relevance tail, so date ordering is safe on any query you mean to sweep.

Returns: Dictionary containing: - page: Current page number - total_results: True count of matching issues - total_pages: Total number of pages available - documents: List of issues with: - identifier: Document id, e.g. ANNO_dmo19330626 - title: Issue title with its date - date: ISO date for newspapers, None for periodicals - year: Year of publication - type: Zeitung (newspaper) or Zeitschrift (periodical) - is_periodical: True when OCR download is unavailable - places, languages: Publication place and language - page_count: Pages in the issue - hits_in_document: Occurrences of the query in the issue - url: Stable citation URL

Examples: search_anno(query="Hanussen") search_anno(query='"Erik Jan Hanussen"') search_anno(query="Hellseher OR Gedankenleser") search_anno(query="Hanuss*")

get_snippetsA

Find which pages of one ANNO issue a query appears on, with context.

This is the cheap triage step and the reason ANNO is worth using: a hit resolves to a page with the matched terms in context, so a false positive can be rejected without downloading anything. It also works for periodicals, whose OCR text cannot be downloaded at all.

Args: identifier: Document id from a search result, e.g. "ANNO_dmo19330626" query: Terms to locate within the issue

Returns: Dictionary containing: - identifier: The document id - query: The query used - snippets: List of occurrences with: - page: Page number the occurrence sits on - page_label: Page label as printed - text: Snippet with matched terms in {braces} - url: Stable citation URL for that exact page - image_url: IIIF crop of the matched region

Note: ANNO returns at most 10 snippets per issue however many hits it reports, so a heavily-covered issue shows a sample rather than every occurrence.

Examples: get_snippets("ANNO_dmo19330626", "Hanussen") get_snippets("ANNO_wsb18840309", "Cumberland")

download_textA

Download OCR plain text for an ANNO newspaper issue and cache it locally.

Args: identifier: Document id, e.g. "ANNO_dmo19330626" page: Single page to fetch. Omit for the whole issue.

Returns: Path to the cached text file (as string)

IMPORTANT: ANNO serves text one page at a time, so a whole issue costs one request per page — a 104-page issue is 104 paced requests. Pass page whenever get_snippets has already told you which page you want.

Periodicals (identifiers starting ANNOP_) have no text endpoint at all
and will raise. Use get_snippets for those.

Example: path = download_text("ANNO_dmo19330626", page=7)

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
server_infoProvide information about the ANNO MCP server.

TDQS

A4.9/5.0

Scored across 3 tools

Disambiguation5/5

Each tool serves a distinct purpose: search_anno retrieves matching issues, get_snippets locates query occurrences within an issue, and download_text obtains OCR text. There is no functional overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case: search_anno, get_snippets, download_text. The naming is predictable and clear.

Tool Count5/5

With 3 tools, the server is well-scoped for its purpose of searching and retrieving text from a large archive. Each tool adds necessary functionality without bloat.

Completeness4/5

The toolset covers the essential search-to-text workflow. Minor gaps exist, such as lack of image retrieval or browsing capabilities, but these are beyond the stated scope.

Maintenance

ActivitySlowing
ResponsivenessNo issues