Shakespeare's Monologues
Server Details
Search Shakespeare monologues, plays, paraphrases and summaries from shakespeare-monologues.org
- Status
- Healthy
- Uptime
- 99.9% over 75 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- slshults/shakespeare-monologues-mcp
- GitHub Stars
- 0
- Server Listing
- shakespeare-monologues-mcp
TDQS
Scored across 10 tools
Most tools target clearly distinct resources/actions: get_monologue (catalogue entry), get_paraphrased_monologue (full text + paraphrase), play vs scene summaries, character listing, random, and search. The only mild overlap is get_monologue vs get_paraphrased_monologue, and the descriptions clarify the distinction well, so an agent can select correctly.
Names follow a consistent verb_noun snake_case pattern (get_, list_, search_, random_, send_). The main deviation is the verbose 'list_all_monologues_for_a_character', which breaks the terse pattern used elsewhere, but conventions are otherwise uniform.
Ten tools is well-scoped for a monologue catalogue, with each tool covering a distinct access path (by id, by character, by play, random, search, summaries, feedback). No tool feels redundant or padded.
The surface covers the core lifecycle: discovery (list_plays, search, list_by_character, random), retrieval (get_monologue, paraphrase), and context (play/scene summaries) plus feedback. Minor gap: no direct 'list all monologues in a play' tool, which agents must approximate via search filters.
Available Tools
10 toolsget_monologueARead-onlyInspect
Fetch one monologue's catalogue entry by its numeric id. Follow the returned url for the full text.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The monologue's numeric id (from search_monologues). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| llm_model | Yes | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. | |
| monologue_id | No | Deprecated alias for `id`. | |
| conversation_id | No | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds genuinely useful behavior beyond that: the response is a catalogue entry rather than the monologue text, and the full text lives behind the returned `url`. That return-shape disclosure is the main value-add.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler; the retrieval action and key are front-loaded and the follow-up pointer to full text comes second. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with no output schema and fully documented parameters, the description covers the essentials: what is returned (catalogue entry) and how to get the underlying text (url). It is slightly thin on relationship to siblings, but nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (id, context, llm_model, deprecated monologue_id, conversation_id) is already documented in the schema. The description only restates that `id` is numeric and sourced from search_monologues, adding little beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Fetch) plus resource (one monologue's catalogue entry) and the key retrieval key (numeric id). It also implicitly distinguishes the catalogue record from the full text, which separates it from siblings like get_paraphrased_monologue and search_monologues. No sibling is named explicitly, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'by its numeric id' and the schema note that the id comes from search_monologues, but the description itself offers no explicit when-to-use or when-not-to-use guidance against siblings such as get_monologue_of_the_day or random_monologue. The only concrete guidance is the follow-the-url instruction for retrieving full text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_monologue_of_the_dayBRead-onlyInspect
The current 'Monologue of the Day' — the piece most recently posted to the site's social feeds.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| llm_model | Yes | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. | |
| conversation_id | No | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only the semantic hint that the content is the most recently social-posted piece (implying freshness), but says nothing about caching, auth, or staleness beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that defines the returned resource with zero filler. Nothing extraneous and nothing that could be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with no output schema, the description adequately conveys what is returned (the current daily featured monologue). It is nearly complete, missing only return-shape or freshness details that would fully specify the payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are fully documented in the schema (context, llm_model, conversation_id are analytics plumbing). The description adds no parameter meaning, which is acceptable since the schema carries the full burden — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource — the current 'Monologue of the Day' — and clarifies it as 'the piece most recently posted to the site's social feeds,' which distinguishes it from random_monologue and get_monologue. The retrieval verb is implicit rather than explicit, so it falls just short of the top mark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description describes the content but gives no when-to-use guidance and names no alternatives, despite siblings like random_monologue, search_monologues, and get_monologue that an agent must choose between. The selection condition is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paraphrased_monologueARead-onlyInspect
Fetch a monologue's full text alongside its modern-English, line-by-line paraphrase. The paraphrase is AI-generated (Claude) and may be null if it hasn't been generated yet — the url always has the monologue itself.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The monologue's numeric id (from search_monologues). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| llm_model | Yes | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. | |
| monologue_id | No | Deprecated alias for `id`. | |
| conversation_id | No | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the paraphrase is AI-generated (Claude), may be null if not yet generated, and the url field always carries the monologue — telling the agent how to handle a partial response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the returned content is front-loaded and the null/url caveat follows as the second most important fact. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only fetch with no output schema and full schema coverage, the description covers the key unknowns: what comes back and how to cope with a missing paraphrase. It stops short of any guidance on sibling selection, which is the only real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (id, context, llm_model, monologue_id, conversation_id) is already documented in the schema, including the analytics-only context/llm_model and the deprecated alias. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (monologue) and names the two things returned: full text plus AI-generated line-by-line paraphrase. This implicitly separates it from get_monologue, but it never names that closest sibling explicitly, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — the paraphrase content signals when to reach for this over get_monologue, and the note that the paraphrase may be null hints at a fallback. There is no explicit 'use this when / use X instead' guidance despite get_monologue being an obvious alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_play_summaryARead-onlyInspect
Fetch an AI-generated summary of a play (e.g. 'Hamlet', 'The Tempest'). May be null if not generated yet.
| Name | Required | Description | Default |
|---|---|---|---|
| play | No | Play title (exact or partial). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| llm_model | Yes | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. | |
| conversation_id | No | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, destructiveHint=false, closed world), so the bar is lower. The description usefully adds that the summary is AI-generated and may be absent/null if not yet generated, which is real behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with purpose and followed by the null caveat. No filler or redundant restatement of the name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with a fully documented schema and no output schema, the description is nearly complete: purpose, example inputs, and the null-return possibility. Only the match semantics and alternative tools are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters, including the play title being exact or partial. The description's examples ('Hamlet', 'The Tempest') add only marginal illustrative value, matching the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (AI-generated summary of a play) and gives concrete examples ('Hamlet', 'The Tempest'). The 'of a play' scope implicitly separates it from the sibling get_scene_summary, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance and never names an alternative such as get_scene_summary or list_plays. 'May be null if not generated yet' is a return-value caveat, not usage direction, so the agent must infer when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scene_summaryARead-onlyInspect
Fetch an AI-generated summary of the scene a monologue appears in (context for the speech). May be null if not generated yet.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The monologue's numeric id (from search_monologues). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| llm_model | Yes | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. | |
| monologue_id | No | Deprecated alias for `id`. | |
| conversation_id | No | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuine value beyond that by disclosing the return behavior ('May be null if not generated yet') and that the summary is AI-generated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and resource, with the nullability caveat last. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema and full annotation coverage, the description adequately conveys what is returned and its possible null state. It does not explain the required context/llm_model analytics params, but those are documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-level detail (e.g. that id comes from search_monologues), leaving the schema to carry all parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Fetch an AI-generated summary of the scene a monologue appears in.' The scene-level scope implicitly distinguishes it from get_play_summary, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(context for the speech)' implies the intended use case, giving implied guidance. However, it never states when-not to use it or names alternatives like get_play_summary or get_monologue.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_monologues_for_a_characterARead-onlyInspect
List every monologue spoken by a given character (e.g. 'Hamlet', 'Rosalind'). Matches the character name exactly first, then as a substring.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 50, max 200). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| character | No | Character name. | |
| llm_model | Yes | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. | |
| conversation_id | No | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: matching is exact-first, then substring fallback. It omits return ordering, pagination behavior, and result limits (though limit lives in the schema), so it goes only modestly beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the verb-resource purpose front-loaded and the matching behavior as a tight second sentence. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does not need to explain return values, and annotations carry the safety profile. It covers purpose and matching adequately; only minor gaps remain around result ordering and pagination, which the limit parameter partially addresses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are documented in the schema, establishing the baseline of 3. The description adds only indirect character-matching semantics (exact then substring) and no syntax or format detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List every monologue spoken by a given character') with concrete examples, which clearly separates it from random_monologue and get_monologue_of_the_day. It stops short of distinguishing itself from the near-neighbor sibling search_monologues, so it does not fully earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool name plus description imply when to use it (enumerate a character's monologues), and the matching note hints at input tolerance. However, there is no explicit guidance on when to prefer this over search_monologues or get_monologue, and no stated prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_playsARead-onlyInspect
List Shakespeare's plays with their classification (Comedy/History/Tragedy) and monologue counts.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| llm_model | Yes | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. | |
| conversation_id | No | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds real behavioral value by disclosing what the response contains (classification and monologue counts), which matters because there is no output schema; it stops short of mentioning ordering or whether the list is paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb and resource come first and the qualifiers follow. Nothing is redundant with the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing tool with annotations covering safety and a description covering the return contents, this is nearly complete. Minor gaps remain around ordering/pagination and whether the list is exhaustive, but an agent can call it correctly as written.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the three parameters (context, llm_model, conversation_id) are fully documented in the schema itself. The description adds no parameter meaning, which is acceptable given the parameters are analytics plumbing rather than domain inputs — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('Shakespeare's plays') and specifies the payload contents (classification, monologue counts). This distinguishes it from get_play_summary and search_monologues, which return detail or filtered subsets rather than an enumeration of all plays.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The enumeration framing implies when to reach for it (browsing/discovering the corpus), but there is no explicit guidance about when to prefer it over siblings like search_monologues or get_play_summary, and no exclusions stated. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
random_monologueARead-onlyInspect
Return one random monologue, with optional gender/play filters. Useful for a suggestion when the user is undecided.
| Name | Required | Description | Default |
|---|---|---|---|
| play | No | Exact or partial play title. | |
| gender | No | Role gender: Men, Women, or Both. Natural words like 'male'/'female' are accepted. 'Men'/'Women' also include gender-neutral ('Both') roles. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| llm_model | Yes | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. | |
| conversation_id | No | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only the fact that results are random and filterable; it does not disclose whether repeated calls can return the same monologue or how the pick is bounded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no waste; the core action is front-loaded and the usage hint follows immediately. Nothing needs trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only random-selection tool, the description covers what it does, how to narrow it, and what it returns. With no output schema, it correctly indicates a single monologue is returned, though it says nothing about the monologue's shape or metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so play, gender, context, llm_model, and conversation_id are already fully documented in the schema. The description's "optional gender/play filters" merely restates that, adding no syntax or format detail. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Return one random monologue") plus the optional narrowing filters. The word "random" implicitly separates it from get_monologue, get_monologue_of_the_day, and search_monologues, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Useful for a suggestion when the user is undecided" gives a clear situation that selects this tool over the deterministic or search-based siblings. It stops short of naming an alternative or stating when not to use it, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_monologuesARead-onlyInspect
Search Shakespeare monologues by free text (matches character, play, or first line) plus optional filters. Returns matches, each with a permalink url.
| Name | Required | Description | Default |
|---|---|---|---|
| act | No | Filter to a specific act number. | |
| play | No | Exact or partial play title. | |
| limit | No | Max results to return (default 25, max 100). | |
| query | No | Free text — matched against character name, play title, and first line. | |
| style | No | Verse or Prose. | |
| gender | No | Role gender: Men, Women, or Both. Natural words like 'male'/'female' are accepted. 'Men'/'Women' also include gender-neutral ('Both') roles. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| llm_model | Yes | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. | |
| conversation_id | No | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description still adds non-redundant behavior: it discloses the shape of the return payload (matches, each with a permalink `url`), which is the only place an agent learns this since there is no output schema. It says nothing about pagination limits or the conversation_id handshake, but the core behavioral disclosure is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core capability front-loaded and the return-format note second. No filler, no restatement of the title or name, and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter search tool with full schema coverage and no output schema, the description covers what the tool does, what it matches on, and what comes back. It omits any note about the required context/llm_model analytics params and the conversation_id continuation rule, but those are fully specified in the schema, so the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents query, act, play, style, gender, limit and the analytics params. The description's mention that free text matches character, play, or first line merely restates the `query` schema text, and "optional filters" adds no detail beyond what the properties already specify. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Search Shakespeare monologues") plus the matching scope (character, play, first line) and the presence of optional filters. An agent can distinguish it from get_monologue or list_all_monologues_for_a_character, though the description never names a sibling to sharpen the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: search when you want to find monologues by free text. There is no explicit when-to-use/when-not guidance and no mention of the sibling alternatives (get_monologue for a known ID, list_all_monologues_for_a_character for enumeration, random_monologue for discovery), so routing relies on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_feedbackARead-onlyIdempotentInspect
Send feedback about this Shakespeare monologues server: a monologue, play or capability you needed that its tools could not provide, a problem with a result, or praise. Only for feedback about these tools, not about other tasks. Do not include personal information about the user.
| Name | Required | Description | Default |
|---|---|---|---|
| details | No | Optional longer context: what you tried, exact parameter values, the error text you saw, and any workaround you used. Omit when the summary says it all. | |
| summary | Yes | One self-contained sentence. For 'missing_capability': the capability you needed, e.g. 'No tool to delete multiple cohorts in one call.' For 'issue': the tool and the problem, e.g. 'query-trends rejects relative date ranges with an unclear error.' | |
| llm_model | Yes | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. | |
| sentiment | No | Optional: how the experience felt overall. | |
| tool_name | No | Optional: the existing tool this feedback is about (for 'issue' or 'praise'). Leave empty for 'missing_capability' - the point is that no tool fits. | |
| feedback_type | Yes | What kind of feedback this is. Use 'missing_capability' when the tool you needed does not exist in the tool list - nothing failed, the capability is absent (this is the most valuable report; send it even if you found a workaround). Use 'issue' when an existing tool behaved badly: it failed, returned a confusing error, or its description or schema misled you. Use 'praise' when something worked notably well. Use 'other' for anything else. | |
| task_completed | No | Optional: whether you still completed the user's task despite the problem. | |
| conversation_id | No | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. | |
| friction_points | No | Optional: the specific moments that slowed you down, as short bullet-like sentences, quoting exact tool names, parameters, or error text. | |
| suggested_improvement | No | Optional: the concrete change that would have helped, e.g. the tool to add, the description to reword, or the error message to improve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds real behavioral context beyond that — a scope restriction and a privacy constraint ('Do not include personal information about the user') — but says nothing about what happens to the feedback afterward, whether a submission is confirmed, or any rate limiting. There is mild tension between the verb 'send' and readOnlyHint=true, though submitting feedback to a feedback channel does not modify the monologue corpus, so it is not a contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action, then the scope bound, then the privacy constraint. No filler, no restatement of the tool name, and each sentence adds a distinct constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% schema coverage, no output schema, and a flat 10-parameter object, the description does not need to explain parameters or return values. It covers the two things the schema cannot — scope and privacy — leaving only minor unstated items such as post-submission confirmation or rate limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all ten parameters — including the nuanced conversation_id reuse rule and the 'pass "unknown" rather than guess' instruction for llm_model — are already fully documented. The description only restates the feedback_type categories in prose and adds no syntax or format detail the schema lacks. Baseline 3 applies when structured data carries the whole burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Send feedback about this Shakespeare monologues server') and immediately enumerates the acceptable subject matter: a missing monologue/play/capability, a problem with a result, or praise. Combined with the sibling list of purely read-only retrieval tools, an agent can tell instantly that this is the sole outbound/write-channel tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly bounds usage: 'Only for feedback about these tools, not about other tasks' gives a clear when-not, and the feedback_type schema enumerates when to pick missing_capability vs issue vs praise vs other. This is about as close to explicit when/when-not/alternative routing as a feedback tool can get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
- Changed
get_monologue4 fields changed- changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / conversation_idAdded value: +{ + "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.", + "type": "string" +} - added
Input schema / properties / llm_modelAdded value: +{ + "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "context" -]New value: +[ + "context", + "llm_model" +]
- Changed
get_monologue_of_the_day4 fields changed- changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / conversation_idAdded value: +{ + "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.", + "type": "string" +} - added
Input schema / properties / llm_modelAdded value: +{ + "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "context" -]New value: +[ + "context", + "llm_model" +]
- Changed
get_paraphrased_monologue4 fields changed- changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / conversation_idAdded value: +{ + "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.", + "type": "string" +} - added
Input schema / properties / llm_modelAdded value: +{ + "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "context" -]New value: +[ + "context", + "llm_model" +]
- Changed
get_play_summary4 fields changed- changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / conversation_idAdded value: +{ + "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.", + "type": "string" +} - added
Input schema / properties / llm_modelAdded value: +{ + "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "context" -]New value: +[ + "context", + "llm_model" +]
- Changed
get_scene_summary4 fields changed- changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / conversation_idAdded value: +{ + "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.", + "type": "string" +} - added
Input schema / properties / llm_modelAdded value: +{ + "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "context" -]New value: +[ + "context", + "llm_model" +]
- Changed
list_all_monologues_for_a_character4 fields changed- changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / conversation_idAdded value: +{ + "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.", + "type": "string" +} - added
Input schema / properties / llm_modelAdded value: +{ + "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "context" -]New value: +[ + "context", + "llm_model" +]
- Changed
list_plays4 fields changed- changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / conversation_idAdded value: +{ + "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.", + "type": "string" +} - added
Input schema / properties / llm_modelAdded value: +{ + "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "context" -]New value: +[ + "context", + "llm_model" +]
- Changed
random_monologue4 fields changed- changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / conversation_idAdded value: +{ + "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.", + "type": "string" +} - added
Input schema / properties / llm_modelAdded value: +{ + "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "context" -]New value: +[ + "context", + "llm_model" +]
- Changed
search_monologues4 fields changed- changed
Input schema / properties / context / descriptionPrevious value: -"Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\""New value: +"Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"" - added
Input schema / properties / conversation_idAdded value: +{ + "description": "Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request.", + "type": "string" +} - added
Input schema / properties / llm_modelAdded value: +{ + "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "context" -]New value: +[ + "context", + "llm_model" +]
- Added
send_feedback
7 tool updates
- Changed
get_monologue2 fields changed- changed
Input schema / properties / id / typePrevious value: -[ - "number", - "string" -]New value: +[ + "number", + "string", + "null" +] - changed
Input schema / properties / monologue_id / typePrevious value: -[ - "number", - "string" -]New value: +[ + "number", + "string", + "null" +]
- Changed
get_paraphrased_monologue2 fields changed- changed
Input schema / properties / id / typePrevious value: -[ - "number", - "string" -]New value: +[ + "number", + "string", + "null" +] - changed
Input schema / properties / monologue_id / typePrevious value: -[ - "number", - "string" -]New value: +[ + "number", + "string", + "null" +]
- Changed
get_play_summary1 field changed- changed
Input schema / properties / play / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
get_scene_summary2 fields changed- changed
Input schema / properties / id / typePrevious value: -[ - "number", - "string" -]New value: +[ + "number", + "string", + "null" +] - changed
Input schema / properties / monologue_id / typePrevious value: -[ - "number", - "string" -]New value: +[ + "number", + "string", + "null" +]
- Changed
list_all_monologues_for_a_character2 fields changed- changed
Input schema / properties / character / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / properties / limit / typePrevious value: -[ - "number", - "string" -]New value: +[ + "number", + "string", + "null" +]
- Changed
random_monologue2 fields changed- changed
Input schema / properties / gender / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / properties / play / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Changed
search_monologues6 fields changed- changed
Input schema / properties / act / typePrevious value: -[ - "number", - "string" -]New value: +[ + "number", + "string", + "null" +] - changed
Input schema / properties / gender / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / properties / limit / typePrevious value: -[ - "number", - "string" -]New value: +[ + "number", + "string", + "null" +] - changed
Input schema / properties / play / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / properties / query / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / properties / style / typePrevious value: -"string"New value: +[ + "string", + "null" +]
7 tool updates
- Changed
get_monologue2 fields changed- changed
Input schema / properties / id / typePrevious value: -"integer"New value: +[ + "number", + "string" +] - changed
Input schema / properties / monologue_id / typePrevious value: -"integer"New value: +[ + "number", + "string" +]
- Changed
get_paraphrased_monologue2 fields changed- changed
Input schema / properties / id / typePrevious value: -"integer"New value: +[ + "number", + "string" +] - changed
Input schema / properties / monologue_id / typePrevious value: -"integer"New value: +[ + "number", + "string" +]
- Changed
get_play_summary1 field changed- changed
Input schema / requiredPrevious value: -[ - "play", - "context" -]New value: +[ + "context" +]
- Changed
get_scene_summary2 fields changed- changed
Input schema / properties / id / typePrevious value: -"integer"New value: +[ + "number", + "string" +] - changed
Input schema / properties / monologue_id / typePrevious value: -"integer"New value: +[ + "number", + "string" +]
- Changed
list_all_monologues_for_a_character5 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default 50)."New value: +"Max results (default 50, max 200)." - removed
Input schema / properties / limit / maximumRemoved value: -200 - removed
Input schema / properties / limit / minimumRemoved value: -1 - changed
Input schema / properties / limit / typePrevious value: -"integer"New value: +[ + "number", + "string" +] - changed
Input schema / requiredPrevious value: -[ - "character", - "context" -]New value: +[ + "context" +]
- Changed
random_monologue1 field changed- removed
Input schema / properties / gender / enumRemoved value: -[ - "Men", - "Women", - "Both" -]
- Changed
search_monologues8 fields changed- changed
Input schema / properties / act / typePrevious value: -"integer"New value: +[ + "number", + "string" +] - removed
Input schema / properties / gender / enumRemoved value: -[ - "Men", - "Women", - "Both" -] - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results to return (default 25)."New value: +"Max results to return (default 25, max 100)." - removed
Input schema / properties / limit / maximumRemoved value: -100 - removed
Input schema / properties / limit / minimumRemoved value: -1 - changed
Input schema / properties / limit / typePrevious value: -"integer"New value: +[ + "number", + "string" +] - changed
Input schema / properties / style / descriptionPrevious value: -"Verse or prose."New value: +"Verse or Prose." - removed
Input schema / properties / style / enumRemoved value: -[ - "Verse", - "Prose" -]
5 tool updates
- Changed
get_monologue3 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"The monologue's numeric id."New value: +"The monologue's numeric id (from search_monologues)." - added
Input schema / properties / monologue_idAdded value: +{ + "description": "Deprecated alias for `id`.", + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "id", - "context" -]New value: +[ + "context" +]
- Changed
get_paraphrased_monologue3 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"The monologue's numeric id."New value: +"The monologue's numeric id (from search_monologues)." - added
Input schema / properties / monologue_idAdded value: +{ + "description": "Deprecated alias for `id`.", + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "id", - "context" -]New value: +[ + "context" +]
- Changed
get_scene_summary3 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"The numeric id of a monologue in the scene."New value: +"The monologue's numeric id (from search_monologues)." - added
Input schema / properties / monologue_idAdded value: +{ + "description": "Deprecated alias for `id`.", + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "id", - "context" -]New value: +[ + "context" +]
- Changed
random_monologue1 field changed- added
Input schema / properties / gender / descriptionAdded value: +"Role gender: Men, Women, or Both. Natural words like 'male'/'female' are accepted. 'Men'/'Women' also include gender-neutral ('Both') roles."
- Changed
search_monologues1 field changed- changed
Input schema / properties / gender / descriptionPrevious value: -"Role gender as catalogued. 'Men'/'Women' also include gender-neutral ('Both') roles."New value: +"Role gender: Men, Women, or Both. Natural words like 'male'/'female' are accepted. 'Men'/'Women' also include gender-neutral ('Both') roles."
1 tool update
- Changed
get_scene_summary3 fields changed- added
Input schema / properties / idAdded value: +{ + "description": "The numeric id of a monologue in the scene.", + "type": "integer" +} - removed
Input schema / properties / monologue_idRemoved value: -{ - "description": "The id of a monologue in the scene.", - "type": "integer" -} - changed
Input schema / requiredPrevious value: -[ - "monologue_id", - "context" -]New value: +[ + "id", + "context" +]
9 tool updates
- Changed
get_monologue3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "id" -]New value: +[ + "id", + "context" +]
- Changed
get_monologue_of_the_day2 fields changed- added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
get_paraphrased_monologue3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "id" -]New value: +[ + "id", + "context" +]
- Changed
get_play_summary3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "play" -]New value: +[ + "play", + "context" +]
- Changed
get_scene_summary3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "monologue_id" -]New value: +[ + "monologue_id", + "context" +]
- Changed
list_all_monologues_for_a_character3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "character" -]New value: +[ + "character", + "context" +]
- Changed
list_plays2 fields changed- added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
random_monologue3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
- Changed
search_monologues3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contextAdded value: +{ + "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "context" +]
9 tool updates
- First observed
get_monologue - First observed
get_monologue_of_the_day - First observed
get_paraphrased_monologue - First observed
get_play_summary - First observed
get_scene_summary - First observed
list_all_monologues_for_a_character - First observed
list_plays - First observed
random_monologue - First observed
search_monologues
Related MCP Connectors
Complete classical & world literature — search + cite exact passages, facing sources, 50+ languages.
Full Bhagavad Gita (Sanskrit + English) and Ganguli's Mahabharata: search verses and passages.
Semantic quote search with 600K quotes. Find quotes by meaning, verify attributions.
Search and cite passages from a vetted, rights-cleared reference library.
Related MCP Servers
- AlicenseAqualityDmaintenanceSemantic search over 4.6 million text chunks from 20,000+ classical philosophy and humanities works (pre-1928). Covers Aristotle, Plato, Kant, Hegel, Nietzsche and hundreds more. Multilingual: English, German, Latin, French, Italian, Greek, Russian.33MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to explore a public-domain poetry collection by searching poems by title, finding poems whose lines contain a given phrase, pulling one or more random poems, and listing available authors. It returns full poem text with author and line-count details, and works either through a hosted gateway or as a local stdio server without an account.139 npmMIT
- AlicenseAqualityCmaintenanceSearch and retrieve Devanagari Hindi shayari from an owner-authorized, provenance-tracked corpus, with audit and research-only inspection capabilities via stdio.4MIT
- AlicenseAqualityBmaintenanceEnables searching the General Conference talks and BYU speeches of Church leaders — all together or filtered by speaker — returning direct quoted passages, each with its title, date, and source link. Also lists available speakers and their talks.3MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.