shakespeare-monologues-mcp
# Shakespeare's Monologues — MCP server
A small, read-only [Model Context Protocol](https://modelcontextprotocol.io) server
that lets MCP-capable AI clients search and fetch Shakespeare monologue metadata from
[shakespeare-monologues.org](https://www.shakespeare-monologues.org).
It's a **thin, stateless wrapper** over the site's public JSON index
(`/api/monologues.json`) — no database, no secrets. Every result carries the
monologue's permalink `url` (where the full text, scene context, and modern-English
paraphrase live) and an attribution note.
## Tools
| Tool | What it does |
| --- | --- |
| `search_monologues` | Free-text search (character / play / first line) + filters: `gender`, `play`, `style`, `act`, `limit`. |
| `get_monologue` | One monologue's index entry by numeric `id`. |
| `random_monologue` | A random monologue, optional `gender` / `play` filters. |
| `list_plays` | Every play with its classification and monologue count. |
| `list_all_monologues_for_a_character` | Every monologue spoken by a named character. |
| `get_monologue_of_the_day` | The current Monologue of the Day (latest social post). |
| `get_paraphrased_monologue` | A monologue's full text + its modern-English paraphrase (AI-generated; may be null if not yet generated). |
| `get_scene_summary` | AI-generated summary of the scene a monologue is in (by monologue id). |
| `get_play_summary` | AI-generated summary of a play (by title). |
> The paraphrase and summaries are AI-generated (Claude) and only partially cached so far,
> so those tools return `null` where content hasn't been generated yet.
## Run locally
Two transports, same tools. `server.ts` builds the tool surface and knows
nothing about how it's reached; `index.ts` serves it over HTTP and `stdio.ts`
over stdio.
**Over stdio**, the way an MCP client spawns a local server:
```bash
npx shakespeare-monologues-mcp
```
**Over HTTP**, which is how the hosted instance runs:
```bash
npm install
npm run build
npm start # listens on :3000, POST /mcp (set PORT to change)
```
Health check: `GET /health` → `{"ok":true}`.
Neither mode needs credentials — the server reads the site's public JSON index.
Set `MONOLOGUES_API_URL` to point it elsewhere, and `POSTHOG_PROJECT_API_KEY=""`
to disable analytics.
## Connecting a client
Remote MCP means users add a **URL**, no install. In a client that supports remote /
custom MCP servers (Claude Desktop connectors, etc.), add:
```
https://mcp.shakespeare-monologues.org/mcp
```
Or run it yourself over stdio, with no hosted dependency:
```json
{
"mcpServers": {
"shakespeare-monologues": {
"command": "npx",
"args": ["-y", "shakespeare-monologues-mcp"]
}
}
}
```
For clients configured with a JSON config file, use the streamable-HTTP transport:
```json
{
"mcpServers": {
"shakespeare-monologues": {
"type": "streamable-http",
"url": "https://mcp.shakespeare-monologues.org/mcp"
}
}
}
```
For a client that only speaks stdio, bridge to the remote server with
[`mcp-remote`](https://www.npmjs.com/package/mcp-remote):
```json
{
"mcpServers": {
"shakespeare-monologues": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.shakespeare-monologues.org/mcp"]
}
}
}
```
> Note on "autonomous" use: there's no mechanism today for an arbitrary agent to
> discover and use this with zero user action — a client/platform still has to connect
> it. For truly zero-setup access, agents can hit the plain JSON API
> (`/api/monologues.json`) and `/llms.txt` directly.
## License
- **Code:** MIT.
- **Data** served through it: © shakespeare-monologues.org, **CC BY-NC-SA 4.0** — please
keep the attribution that each tool response includes.
---
[](https://glama.ai/mcp/servers/slshults/shakespeare-monologues-mcp)
TDQS
Scored across 9 tools
Each tool targets a distinct retrieval or summary function, and the descriptions generally clarify boundaries. The main ambiguity is between search_monologues and list_all_monologues_for_a_character, since both can return monologues for a character, though one is a broad search and the other a focused listing.
Most tools follow a clear snake_case verb_noun pattern like list_plays, search_monologues, and get_monologue. random_monologue breaks the verb-first convention, and a few names are verbose, but the overall style remains predictable.
Nine tools is well-scoped for a Shakespeare monologue server, covering browsing, searching, retrieval, random/daily selection, paraphrases, and summaries. Each tool earns its place without feeling bloated or redundant.
The surface covers the core workflows of discovering, searching, retrieving, and contextualizing monologues. Minor gaps exist, such as no direct list-monologues-by-play endpoint and get_monologue requiring an external URL for the full text, but agents can work around these.