# Margaret's poems

> Poems by Margaret Corvid (@lorepunk). Read, share, or commission a new one; she writes each by hand.

- name: ai.lorepunk.poems/margaret-poems
- version: 0.4.0
- connection class: R0 (autonomous)
- trust: 82/100 flags: no-repository
- quality: 80/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/ai.lorepunk.poems%2Fmargaret-poems
- tools: https://api.protogrid.dev/v1/servers/ai.lorepunk.poems%2Fmargaret-poems/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "margaret-poems": {
      "type": "http",
      "url": "https://poems.lorepunk.ai/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 99
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-97% +updated-20d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 80/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 8 of 8 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: commission_status (destructiveHint, openWorldHint); search_poems (destructiveHint, openWorldHint); commission_poem (destructiveHint); …
- pass `tools.token_cost`: about 1,724 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 6 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 8, about 1,724 tokens to load them all
- tool set hash: 510850a0f1eb445bd22cbf505bbdde34
- tools last changed: 2026-10-11T16:51:42.360Z
- badge: [![protogrid quality](https://protogrid.dev/badge/ai.lorepunk.poems/margaret-poems.svg)](https://protogrid.dev/servers/ai.lorepunk.poems/margaret-poems)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-11 `search_poems` changed (outputSchema)
- 2026-10-11 `random_poem` changed (outputSchema)
- 2026-10-11 `get_poem` changed (outputSchema)
- 2026-10-11 `list_poems` changed (outputSchema)
- 2026-10-01 `commission_status` changed (outputSchema)
- 2026-10-01 `commission_poem` changed (description)
  - before: Ask Margaret to write a new poem. Give her a brief, say who's asking and who it's for, and how to reach you. She writes every poem by hand, in her own time (days, not seconds), and nothing here is generated. You get a commission id for commission_status. Replies by email come from lorepunkdoteth@gmail.com, which is her own inbox.
  - after: Ask Margaret to write a new poem. Give her a brief, say who's asking and who it's for, and how to reach you. She writes every poem by hand, in her own time (days, not seconds), and nothing here is generated. You get a commission id for commission_status. Replies by email come from lorepunkdoteth@gmail.com, which is her own inbox. Your brief, the name you give, who it's for and when you asked go on the commission's public receipt, and the brief may be printed under the finished poem; your reply address never goes public.

Full history: https://api.protogrid.dev/v1/servers/ai.lorepunk.poems%2Fmargaret-poems/changes

## Remotes

- https://poems.lorepunk.ai/mcp (streamable-http, auth none, reachable true, uptime30d 0.9746835)

## Packages

_none_

## Tools (8)

- `commission_answer`: For whoever commissioned a poem. Once it's delivered, say in your own words whether Margaret fulfilled the commission, using the private key you were given when you commissioned (or that she passed to you). Your words are recorded exactly as sent, publicly and permanently, on the commission's receipt, including if you say she didn't. You can answer more than once; earlier answers stay. You get back an entry hash: keep it, and you can always check your words are still there, unchanged.
- `commission_poem`: Ask Margaret to write a new poem. Give her a brief, say who's asking and who it's for, and how to reach you. She writes every poem by hand, in her own time (days, not seconds), and nothing here is generated. You get a commission id for commission_status. Replies by email come from lorepunkdoteth@gmail.com, which is her own inbox. Your brief, the name you give, who it's for and when you asked go on the commission's public receipt, and the brief may be printed under the finished poem; your reply address never goes public.
- `commission_receipt`: The public record of a commissioned poem, for anyone to audit: the brief as asked and when, the poem as delivered with a fingerprint (sha256) of its exact text, whether it has changed since, and the commissioner's own words on whether it fulfilled the commission. Every entry is hash-chained; the whole ledger is at /ledger.jsonl.
- `commission_status`: Whether a commissioned poem has been written yet. Delivered commissions come back with the poem's id.
- `get_poem`: One poem in full, with its attribution, where it came from, and sharing terms. Use the id from list_poems or search_poems.
- `list_poems`: Start here. Shows what's on the shelves (collections, themes, moods, forms, with counts) and an index of poems, best first. Filter by theme, mood, form or collection; page with offset.
- `random_poem`: One good poem at random, one that stands alone without context, for handing to someone rather than looking for one. Narrow it by theme, mood, form or collection.
- `search_poems`: Keyword search over titles, tags and the poems themselves. Returns the best matches with a snippet; read one with get_poem.
