Classic poetry search and discovery via PoetryDB.
Runs on your machine from its package; the steps are below.
At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y mcp-poetry
MCP client config
{
"mcpServers": {
"poetrydb-mcp-server": {
"command": "npx",
"args": [
"-y",
"mcp-poetry"
]
}
}
}Unofficial MCP server for exploring classic poetry through PoetryDB.
| Metric | Value |
|---|---|
| Tools | 12 |
| Categories | 3 |
| Transport | stdio |
| Auth | none |
| MCP Registry name | io.github.lacausecrypto/poetrydb |
| npm package | mcp-poetry |
| Source API | https://poetrydb.org |
| Content | classic poetry by author, title, line text, and form |
npm install -g mcp-poetry
Or from source:
npm install
npm run build
This server is published to the MCP Registry under:
io.github.lacausecrypto/poetrydb
{
"mcpServers": {
"poetrydb": {
"command": "npx",
"args": ["-y", "mcp-poetry"]
}
}
}
For a local checkout, replace the command with:
{
"mcpServers": {
"poetrydb": {
"command": "node",
"args": ["/absolute/path/to/mcp-poetrydb/dist/index.js"]
}
}
}
catalog_overview: list categories and available toolscatalog_category: show tools for a specific categorysearch_by_author: find poems by author namesearch_by_title: find a poem by titlesearch_by_lines: search text inside poem linessearch_by_linecount: find poems by exact line countsearch_combined: query multiple PoetryDB fields in one requestlist_authors: list all available authorsrandom_poem: fetch one or more random poemsget_sonnets: fetch 14-line poemsget_haikus: fetch 3-line poemslist_titles: list poem titlesRandom poem please.
Expected tool:
random_poem({ "count": 1 })
Show me the available poets.
Expected tool:
list_authors({})
Find Ozymandias.
Expected tool:
search_by_title({ "title": "Ozymandias" })
Show me poems containing the word "love".
Expected tool:
search_by_lines({ "text": "love" })
Give me 14-line poems by Shakespeare.
Expected tool:
search_combined({ "fields": "author,linecount", "values": "Shakespeare;14" })
List Shakespeare results, but only return title and linecount.
Expected tool:
search_by_author({ "author": "Shakespeare", "fields": "title,linecount" })
Start with the catalog, then show me the discovery tools, then give me a sonnet.
Typical tool sequence:
catalog_overview({})
catalog_category({ "category_id": "discovery" })
get_sonnets({})
npm run build
npm run test:ci
npm test
npm pack --dry-run
Environment variables:
POETRYDB_BASE_URLPOETRYDB_REQUEST_TIMEOUT_MSPOETRYDB_REQUEST_RETRIESio.github.lacausecrypto/poetrydbAdditional implementation notes are in documentation.md.