Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ENGAWA_LATNoLatitude of observation point. Default is Greenwich (0).0
ENGAWA_LONNoLongitude of observation point. Default is Greenwich (0).0
ENGAWA_HOSTNoHost address to bind when running in HTTP mode.127.0.0.1
ENGAWA_PORTNoPort to listen on when running in HTTP mode.8799
NASA_API_KEYNoNASA API key for APOD. Default is DEMO_KEY, limited to ~50 requests/day. Get a free key at api.nasa.gov.DEMO_KEY
ENGAWA_CACHE_DIRNoDirectory where the server writes data. This is the only path that persists to disk.~/.cache/engawa-mcp
ENGAWA_TZ_OFFSETNoTimezone offset in hours for determining 'today'. Defaults to system timezone.system
ENGAWA_ALLOW_PRIVATE_URLSNoSet to '1' to allow access to private/internal network URLs (disables the SSRF guard).0

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
web_readA

Read any web page: give a URL, get title + clean article text + links.

Two lanes inside: httpx + readability for static pages (fast), and an automatic fallback to a real browser render for SPAs (needs the optional engawa-mcp[browser] extra). Long articles: page through with offset, watching total_length.

Boundaries:

  • No login state, no history. To "click" a link, call web_read again with that link's URL.

  • Login-walled platforms (x.com etc.) won't yield anything useful.

Args: url: full URL (http:// or https://) offset: character offset into the article text (for paging) length: max characters returned this call (default 3000)

Returns: {ok, title, content, total_length, links (≤10), note}

shelfA

The engawa shelf: curated feed sources (name / one-liner / tags). Feed a name straight into rss_read.

Two layers: built-in picks that ship with the package, plus whatever you add with shelf_add.

Args: tag: filter to one shelf tag — science / ocean / longform / architecture / wonder. Empty = everything.

Returns: {ok, tags, entries: [{name, title, url, tags, note, picked_by, source}], note}

shelf_addA

Add a source to the shelf. Give any site address — if it is already a feed it is used as-is; otherwise its RSS/Atom feed is discovered (page-declared first, common paths as fallback) and verified with a real fetch before anything is saved.

Args: url: full http(s) address of a site or feed (e.g. https://nautil.us) name: shelf name (optional; lowercase letters/digits/hyphens, 2-40 chars; empty = derived from the domain, collisions get -2) note: one-line description (optional) tags: comma-separated, from science/ocean/longform/architecture/wonder picked_by: free-form provenance — who asked for this source (optional)

Returns: {ok, name, feed_title, feed_url, note}

shelf_suggestA

A second ring of verified sources that are not on the default shelf. Like any of them? shelf_add(url=its url, name=its name).

Args: tag: filter to one shelf tag, empty = everything

Returns: {ok, tags, entries: [{name, title, url, tags, note, on_shelf}], note} on_shelf=True means it is already on your shelf (same name or url).

shelf_removeA

Remove a user-added source from the shelf (built-ins cannot be removed).

Args: name: shelf name

Returns: {ok, name, note}

rss_readA

Read any RSS/Atom feed: latest entries as a list.

The discovery half of a browse loop: spot an interesting entry, then web_read its link for the full text. Also accepts shelf names (see the shelf tool), e.g. rss_read("aeon").

Args: feed_url: full feed URL, or a shelf name limit: max entries returned (default 10)

Returns: {ok, feed_title, entries: [{title, link, published, summary}], note}

sky_tonightA

Tonight's sky: moon phase, illumination, moonrise/set, sunset, next full/new moon, and which naked-eye planets are up at 21:00.

Computed locally (set ENGAWA_LAT / ENGAWA_LON for your location) — the one tool here that never touches the network.

Args: date: "YYYY-MM-DD"; empty = today (local timezone)

Returns: {ok, date, moon_phase, moon_illumination, moonrise, moonset, sunset, next_full_moon, next_new_moon, planets_2100}

apodA

NASA Astronomy Picture of the Day: title, an astronomer's explanation, and the image URL.

Args: date: "YYYY-MM-DD"; empty = today. NASA publishes on US Eastern time, so "today" is occasionally not up yet — if you get a 404 note, call again with yesterday's date.

Returns: {ok, title, date, explanation, url, hdurl, media_type, note}

daily_artA

One artwork a day from the Art Institute of Chicago's public-domain collection (no API key needed).

Without a keyword: the piece of the day (date-seeded, so repeat calls on the same day return the same artwork). With a keyword: search instead (English terms hit best — "monet", "cat", "moon").

Returns: {ok, title, artist, date, medium, image_url, page_url, note}

arxiv_newA

Newest arXiv papers in a category: title + authors + abstract.

Args: category: arXiv category, e.g. cs.AI / cs.CL / astro-ph.EP / math.HO limit: max papers returned (default 8)

Returns: {ok, category, papers: [{title, authors, summary, link, published}], note}

daily_poemA

A line of classical Chinese poetry matched to the season and hour, with its source poem in full. Powered by the Jinrishici (今日诗词) API; content is in Chinese — that is the point, not a bug.

Returns: {ok, sentence, title, dynasty, author, full, note}

on_this_dayA

Wikipedia's curated "on this day" events.

Note: this Wikipedia API serves a subset of languages (en/de/fr/es/pt/ru and a few more); unsupported languages 404.

Args: lang: Wikipedia language code (default en) limit: max events returned (default 8)

Returns: {ok, date, events: [{year, text}], note}

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources