DraCor MCP server for interacting with the Drama Corpora Project API v1
Single tool 'search_plays' has a well-structured schema with 9 typed parameters and descriptions, but the tool description is generic and lacks actionable guidance on when/why to use it. Parameter descriptions are present but minimal (10-30 chars each), below the 72-char baseline. No output schema documented. Resources are implemented but tool composition is weak, search_plays is the only tool, forcing agents to chain with resources for discovery. Error handling is absent (generic try/except returns {'error': str(e)}). No tool annotations (readOnlyHint, etc.). Overall definition quality is below median due to incomplete descriptions and missing error guidance.
Advanced search for plays in the DraCor database with multiple filter options. Parameters: - query: General text search across title, subtitle, and author - corpus_name: Specific corpus to search within (e.g., "shake", "ger", "rus", "span", "dutch") - character_name: Name of a character that should appear in the play - country: Country of origin for the play - language: Language of the play - author: Name of the playwright - year_from: Starting year for date range filter - year_to: Ending year for date range filter - gender_filter: Filter by plays with a certain gender ratio ("female_dominated", "male_dominated", "balanced")
Tool description lacks actionable guidance. 'Advanced search for plays in the DraCor database with multiple filter options' does not explain WHEN to use this tool vs. browsing resources, what the output structure is, or how to chain results into downstream operations.
Parameter descriptions are too brief (10-30 chars vs. 72-char baseline). E.g., 'Name of a character that should appear in the play' is clear, but 'Specific corpus to search within' lacks guidance on valid corpus names or how to discover them. LLMs cannot infer valid values.
No output schema documented. search_plays returns results but the response structure (fields, pagination, total count) is not specified. LLMs cannot plan downstream operations without knowing what fields to extract.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
Error handling is generic and non-actionable. All exceptions return {'error': str(e)}, which gives LLMs no recovery guidance. E.g., 'Invalid corpus name' should suggest 'Call get_corpora() to see available corpora.'
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). search_plays is read-only and idempotent but this is not declared in the schema, forcing LLMs to infer safety properties.