Skip to main content
Glama
stijn-meijers

DraCor MCP Server

DraCor MCP サーバー

Drama Corpora Project (DraCor) APIと連携するためのモデルコンテキストプロトコル(MCP)サーバー。このMCPサーバーを使用すると、Claudeやその他のLLMを通じて、劇作テキストとその登場人物ネットワークをシームレスに分析できます。

概要

このプロジェクトは、DraCor API v1へのアクセスを提供する公式モデルコンテキストプロトコルPython SDKを使用して、MCPサーバーを実装します。これにより、クロード氏をはじめとする法学修士(LLM)は、演劇テキストコーパスとの対話、登場人物ネットワークの分析、演劇情報の取得、そして異なる言語や時代をまたぐ演劇作品に関する洞察の生成が可能になります。

このプロジェクトには 2 つの実装が含まれます。

  1. dracor_mcp_fastmcp.py - v1 API を使用した FastMCP デコレータベースの API を使用した合理化された実装

Related MCP server: MCP-PIF Server

特徴

  • 統一されたインターフェースを介してDraCor API v1にアクセス

  • 認証は不要です(DraCor APIは公開されています)

  • DraCorエンティティの構造化データモデル

  • 運用サポート:

    • コーパスと遊びの情報検索

    • キャラクターネットワーク分析

    • プレイの指標と統計

    • キャラクター情報と音声テキスト

    • 比較プレイ分析

    • 検索機能

    • キャラクター関係データ

    • 複数の形式のネットワークデータ(CSV、GEXF、GraphML)

    • 演劇におけるジェンダー分析

    • プレーンテキストおよびTEI XML形式での全文検索

    • 完全な劇中テキスト分析

設定

前提条件

  • Python 3.10以上

  • UV パッケージ マネージャー (推奨) または pip

UVによる設置

  1. UVをインストールします:

pip install uv
  1. 仮想環境を作成し、依存関係をインストールします。

uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
uv pip install -e .
  1. Claude Desktop に MCP サーバーをインストールします。

標準実装の場合 (v0 API):

mcp install dracor_mcp_server.py

または、v1 API を使用した FastMCP 実装の場合 (推奨):

mcp install dracor_mcp_fastmcp.py

開発モード

テストと開発の場合:

mcp dev dracor_mcp_server.py

または、v1 API を使用した FastMCP 実装の場合 (推奨):

mcp dev dracor_mcp_fastmcp.py

これにより、MCP Inspector が起動し、ツールとリソースをインタラクティブにテストできるようになります。

クロード・コンフィグレーション

次のコードを Claude 構成ファイルに追加して、Claude が DraCor MCP サーバーを使用するように直接構成することもできます。

{
  "tools": {
    "DraCor API v1": {
      "command": "uv",
      "args": [
        "run",
        "--with",
        "mcp[cli]",
        "--with",
        "requests",
        "--with",
        "pydantic",
        "--with",
        "python-multipart",
        "mcp",
        "run",
        "/path/to/dracor-mcp/dracor_mcp_fastmcp.py"
      ]
    }
  }
}

/path/to/dracor-mcp/ dracor-mcp ディレクトリへの実際のパスに置き換えてください。この設定では、事前のインストールを必要とせずに、 uv runを使用して必要な依存関係を持つ MCP サーバーを実行します。

Docker(オプション)

Docker を使用する場合:

docker build -t dracor-mcp .
docker run dracor-mcp

代わりに v1 API で FastMCP 実装を使用するには:

docker run -e IMPLEMENTATION=fastmcp dracor-mcp

実装の詳細

標準 MCP 実装 (v0 API)

dracor_mcp_server.pyの標準実装では、古い v0 API を使用したコア MCP SDK クラスが使用されます。

  • Resource - APIリソースを定義する

  • MCPToolImpl - ツールの実装用

  • PromptTemplate - プロンプトテンプレートを作成する

FastMCP 実装 (v1 API)

dracor_mcp_fastmcp.pyの FastMCP 実装では、現在の v1 API を使用した、より簡潔なデコレータベースのアプローチが使用されています。

  • @mcp.resource() - APIリソースを定義するため

  • @mcp.tool() - ツールを実装するため

  • @mcp.prompt() - プロンプトテンプレートを作成する

このアプローチにより、同じ機能を提供しながら、より包括的な API 機能にアクセスでき、よりクリーンで保守しやすいコードが実現します。

v1 API 機能

v1 API 実装では、多くの追加のエンドポイントと機能へのアクセスが提供されます。

  • API 情報- DraCor API のバージョン情報

  • コーパスメタデータ- コーパス内のすべての演劇の詳細なメタデータ

  • プレイメトリクス- ネットワークメトリクスと分析データ

  • 文字ネットワークデータ- CSV、GEXF、GraphML 形式

  • キャラクター関係- キャラクター間の明確な関係

  • 音声テキストフィルター- 性別、関係タイプ、キャラクターの役割でフィルターします

  • 舞台指示- スピーカーの有無にかかわらず舞台指示を取得します

  • キャラクター検索- 特定のキャラクターが登場する演劇を検索(Wikidata ID で)

使用法

Claude Desktopにインストールすると、Claudeを介してDraCor APIを操作できるようになります。以下に例をいくつか示します。

基本的なクエリ

  1. 利用可能なコーパスをリストするように Claude に依頼します。

Can you list all available drama corpora in DraCor?
  1. 特定の演劇に関する情報を取得します。

Tell me about Goethe's Faust in the German corpus
  1. 文字ネットワークを分析します。

Analyze the character network in Hamlet from the Shakespeare corpus

高度なクエリ

  1. 登場人物の関係性を分析する:

What are the strongest character relationships in Pushkin's Boris Godunov?
  1. 演劇を比較する:

Compare Goethe's Faust and Schiller's Die Räuber in terms of network density and character count
  1. 文字の重要性を分析する:

Who are the most central characters in Shakespeare's Hamlet based on speaking time and relationships?
  1. 性別の表現を分析する:

Analyze the gender distribution and representation in Molière's Le Misanthrope
  1. さまざまな演劇の登場人物を見つける:

Find all plays that feature a character named "Hamlet" or similar
  1. 劇の全文を分析します。

Provide a comprehensive analysis of the full text of Goethe's Faust
  1. 劇中のテキストからテーマを抽出します。

What are the main themes and motifs in the full text of Shakespeare's Hamlet?
  1. 言語パターンを分析する:

Analyze the language patterns and style in Chekhov's The Cherry Orchard

文学分析クエリ

  1. プレイ構造を分析する:

Analyze the structure of Molière's Le Misanthrope in terms of acts, scenes, and dialogue distribution
  1. 著者を比較:

Compare the network structures in plays by Shakespeare and Molière
  1. 歴史的背景:

Put Pushkin's Boris Godunov in its historical context and analyze how this is reflected in the character network

リソース(v1 API)

FastMCP サーバーは次のリソースを公開します。

  • info:// - API情報とバージョンの詳細

  • corpora:// - 利用可能なすべてのコーパスのリスト

  • corpus://{corpus_name} - 特定のコーパスに関する情報

  • corpus_metadata://{corpus_name} - コーパス内のすべての演劇のメタデータ

  • plays://{corpus_name} - 特定のコーパス内の演劇のリスト

  • play://{corpus_name}/{play_name} - 特定の演劇に関する情報

  • play_metrics://{corpus_name}/{play_name} - 特定のプレイのネットワークメトリクス

  • characters://{corpus_name}/{play_name} - 特定の劇の登場人物のリスト

  • spoken_text://{corpus_name}/{play_name} - 劇中の音声テキスト(オプションのフィルター付き)

  • spoken_text_by_character://{corpus_name}/{play_name} - 各キャラクターが話すテキスト

  • stage_directions://{corpus_name}/{play_name} - 演劇の舞台指示

  • network_data://{corpus_name}/{play_name} - CSV形式のネットワークデータ

  • relations://{corpus_name}/{play_name} - CSV形式のキャラクター関係データ

  • character_by_wikidata://{wikidata_id} - ウィキデータ ID ごとに、キャラクターを含む演劇をリストします。

  • full_text://{corpus_name}/{play_name} - プレーンテキスト形式の演劇の全文

  • tei_text://{corpus_name}/{play_name} - 演劇の完全なTEI XMLテキスト

ツール(v1 API)

FastMCP サーバーは次のツールを提供します。

  • search_plays - クエリに基づいて演劇を検索する

  • compare_plays - 2つのプレイをメトリクスと構造の観点から比較します

  • analyze_character_relations - 劇中の登場人物の関係を分析する

  • analyze_play_structure - プレイの構造を分析する

  • find_character_across_plays - 複数のプレイにわたってキャラクターを見つける

  • analyze_full_text - 台詞や舞台指示を含む劇の全文を分析する

プロンプトテンプレート(v1 API)

FastMCP サーバーには次のプロンプト テンプレートが含まれています。

  • analyze_play - 特定のプレイを分析するためのテンプレート

  • character_analysis - 特定の文字を分析するためのテンプレート

  • network_analysis - 文字ネットワークを分析するためのテンプレート

  • comparative_analysis - 2つの演劇を比較するためのテンプレート

  • gender_analysis - 演劇におけるジェンダー表現を分析するためのテンプレート

  • historical_context - 演劇の歴史的背景を分析するためのテンプレート

  • full_text_analysis - 演劇の全文を分析するためのテンプレート

仕組み

このプロジェクトでは、公式のモデル コンテキスト プロトコル Python SDK を使用して、Claude が DraCor API と対話するために使用できるリソースとツールを公開する MCP サーバーを構築します。

クロードに劇的なテキストについて質問すると、次のようになります。

  1. コーパス、演劇、キャラクター、ネットワークなどのリソースにアクセスする

  2. ツールを使用してプレイを検索、比較、分析する

  3. データに基づいて洞察と視覚化を提供する

DraCor API はパブリックにアクセス可能なので、認証は必要ありません。

レート制限

DraCor のレート制限ポリシーにご注意ください。サーバーには、.env ファイルで設定できるオプションのレート制限設定が含まれています。

トラブルシューティング

問題が発生した場合:

  1. Python 3.10以降を使用していることを確認してください

  2. デバッグするには開発モードで実行してみてください: mcp dev dracor_mcp_fastmcp.py

  3. DraCor API のステータスはhttps://dracor.org/doc/apiで確認できます。

MCP で使用するプロンプト

あなたの任務は、DraCorデータベースから過去の演劇を分析し、キャラクターIDのタグ付けの問題を特定することです。具体的には、

  1. DraCor データベースから演劇を選択し、登場人物の関係、全文、構造を包括的に分析します。

  2. 次のような、キャラクター ID タグ付けにおけるすべての可能性のある不一致を特定します。

    • キャラクター名の綴りのバリエーション

    • キャラクター名の混同または混同

    • 歴史的な綴りの変種

    • キャラクターIDと舞台指示の不一致

  3. 次の列を含む構造化されたテーブル形式で、潜在的な文字 ID タグ付けエラーの詳細なレポートを作成します。

    • テキストID(演劇の一意の識別子)

    • データベースで使用されている現在の文字ID

    • テキスト内に問題のある変種が見つかりました

    • エラーの種類 (スペル、変形、混乱など)

    • 問題の説明

このテキストに対して実行してください: [プレイ名]

ライセンス

マサチューセッツ工科大学

謝辞

このプロジェクトでは以下を使用します:

  • MCP サーバーを構築するためのモデル コンテキスト プロトコル Python SDK

  • ドラマチックなテキストとネットワークデータのためのDraCor API v1

  • 基礎データとAPIを提供するドラマコーポラプロジェクト(DraCor)

Available Tools

6 tools
analyze_character_relationsC

Analyze the character relationships in a play.

ParametersJSON Schema
NameRequiredDescriptionDefault
corpus_nameYes
play_nameYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('analyze') but doesn't describe what the analysis involves, such as output format, computational intensity, or any constraints like data availability. This is a significant gap for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste, making it appropriately sized and front-loaded. However, its brevity contributes to under-specification rather than optimal clarity, slightly reducing its effectiveness despite the concise structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (analysis task), lack of annotations, no output schema, and low schema coverage, the description is incomplete. It doesn't cover behavioral aspects, parameter details, or output expectations, making it inadequate for guiding an AI agent effectively in this context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no meaning beyond the input schema, which has 0% schema description coverage for its 2 parameters. It doesn't explain what 'corpus_name' or 'play_name' refer to, their expected formats, or how they relate to the analysis. With low coverage, the description fails to compensate, leaving parameters largely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool's purpose as analyzing character relationships in a play, which is clear but vague. It specifies the verb 'analyze' and resource 'character relationships in a play', but doesn't differentiate from siblings like 'find_character_across_plays' or explain what analysis entails. It avoids tautology but lacks specificity about scope or output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention siblings like 'analyze_full_text' or 'analyze_play_structure', nor does it specify prerequisites, exclusions, or context for usage. This leaves the agent with minimal direction for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_full_textC

Analyze the full text of a play, including dialogue and stage directions.

ParametersJSON Schema
NameRequiredDescriptionDefault
corpus_nameYes
play_nameYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool analyzes full text but doesn't describe what the analysis entails (e.g., returns insights, statistics, or summaries), any limitations (e.g., corpus availability, processing time), or side effects. This leaves key behavioral traits unspecified for a tool with no structured safety hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose. It avoids redundancy and wastes no words, though it could be more informative by elaborating on analysis outcomes or usage context without sacrificing brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (analysis tool with no annotations, 0% schema coverage, and no output schema), the description is incomplete. It doesn't explain what the tool returns, how parameters are used, or behavioral aspects like error handling. For a tool that likely produces detailed outputs, this lack of context makes it inadequate for informed use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It mentions 'full text of a play' but doesn't explain the parameters 'corpus_name' and 'play_name', such as what values are expected or how they relate to the analysis. This adds minimal meaning beyond the schema, failing to address the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('analyze') and resource ('full text of a play'), specifying it includes dialogue and stage directions. It distinguishes from siblings like 'analyze_character_relations' or 'analyze_play_structure' by focusing on full text analysis, though it doesn't explicitly name alternatives. The purpose is specific but could be more precise about what 'analyze' entails.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention scenarios, prerequisites, or exclusions, such as when to choose 'analyze_play_structure' instead. Without this context, users must infer usage from tool names alone, which is insufficient for effective selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_play_structureC

Analyze the structure of a play including acts, scenes, and metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
corpus_nameYes
play_nameYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions analyzing 'acts, scenes, and metrics' but doesn't specify what 'metrics' entail, whether the analysis is read-only or modifies data, or what the output format might be (e.g., structured data, summary). This leaves gaps in understanding the tool's behavior, especially for a tool with parameters and no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, consisting of a single, efficient sentence that directly states the tool's purpose. There's no unnecessary information or redundancy, making it easy to parse quickly. However, it could be slightly improved by adding a brief usage hint without sacrificing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (analyzing play structure with metrics), lack of annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects like whether it's a read operation, what 'metrics' includes, or how results are returned. For a tool with parameters and analytical functions, more context is needed to ensure the agent can use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must compensate for the lack of parameter documentation. It doesn't add any meaning beyond what the input schema provides—it doesn't explain what 'corpus_name' or 'play_name' refer to, their expected formats, or examples. With 2 parameters and no schema descriptions, this is a significant gap, as the description fails to clarify parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('analyze') and resource ('structure of a play'), including what aspects it covers ('acts, scenes, and metrics'). It distinguishes itself from siblings like 'analyze_character_relations' or 'analyze_full_text' by focusing on structural analysis rather than character or textual analysis. However, it doesn't explicitly differentiate from 'compare_plays' or 'search_plays' in terms of structural vs. comparative/search functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, such as needing a specific corpus or play format, or when to choose this over siblings like 'analyze_full_text' for broader analysis or 'compare_plays' for structural comparisons. Usage is implied by the name and purpose but not explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_playsC

Compare two plays in terms of metrics and structure.

ParametersJSON Schema
NameRequiredDescriptionDefault
corpus_name1Yes
play_name1Yes
corpus_name2Yes
play_name2Yes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions comparing metrics and structure but doesn't specify what the tool returns (e.g., a report, scores, or visual output), whether it's read-only or has side effects, or any limitations like performance or data availability. This leaves significant gaps in understanding the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded and efficient, with no wasted words. It directly states the tool's function without unnecessary elaboration. However, it could be more structured by including key details, but it earns high marks for brevity and clarity within its limited scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of comparing two plays with 4 parameters, no annotations, no output schema, and 0% schema coverage, the description is incomplete. It lacks details on what metrics and structure are compared, the output format, and any behavioral traits. For a tool with multiple inputs and no structured support, this description is inadequate to guide effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 4 parameters with 0% description coverage, and the tool description adds no parameter semantics. It doesn't explain what 'corpus_name' or 'play_name' refer to, their expected formats, or how they relate to the comparison. With low schema coverage, the description fails to compensate, leaving parameters largely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool compares two plays in terms of metrics and structure, which is a clear purpose but vague. It specifies the verb 'compare' and resource 'plays', but lacks details on what specific metrics or structural aspects are compared, making it less specific. It doesn't differentiate from siblings like 'analyze_play_structure' or 'search_plays', which could involve similar analyses.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over sibling tools such as 'analyze_play_structure' for single-play analysis or 'find_character_across_plays' for character-focused comparisons. There are no explicit when/when-not instructions or prerequisites, leaving usage unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_character_across_playsC

Find a character across multiple plays in the DraCor database.

ParametersJSON Schema
NameRequiredDescriptionDefault
character_nameYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'finds' a character, implying a read-only search operation, but doesn't specify behavioral traits like whether it returns all occurrences, pagination, error handling, or performance characteristics. For a tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core action and resource, making it easy to parse quickly. There's no wasted text, and it appropriately sized for the tool's apparent simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no annotations, no output schema, and low parameter schema coverage, the description is incomplete. It doesn't explain what the tool returns (e.g., a list of plays, character details, or links), how results are formatted, or any limitations. For a search tool with minimal structured data, the description should provide more context to be fully helpful to an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 1 parameter with 0% description coverage, so the schema provides no semantic details. The description doesn't add any meaning beyond the schema; it doesn't explain what 'character_name' should include (e.g., full name, partial matches, case sensitivity) or provide examples. With low schema coverage, the description fails to compensate, leaving the parameter poorly documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool's purpose as finding a character across multiple plays in the DraCor database, which is clear but vague. It specifies the verb 'find' and resource 'character across multiple plays', but doesn't distinguish it from sibling tools like 'analyze_character_relations' or 'search_plays' that might also involve character-related operations. The purpose is understandable but lacks specificity about what 'find' entails compared to alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, exclusions, or compare it to sibling tools such as 'analyze_character_relations' (which might analyze character networks) or 'search_plays' (which might search for broader content). Without any context on usage scenarios, the agent must infer when this tool is appropriate based on the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_playsB
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")
ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
corpus_nameNo
character_nameNo
countryNo
languageNo
authorNo
year_fromNo
year_toNo
gender_filterNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the tool as an 'advanced search' but doesn't clarify whether it's read-only, how results are returned (e.g., pagination, format), potential rate limits, or error conditions. This leaves significant gaps for an agent to understand the tool's behavior beyond basic functionality.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and appropriately sized. It starts with a clear purpose statement, followed by a bulleted list of parameters with concise explanations. There's no wasted text, and the information is front-loaded. A slight deduction because the bulleted format, while clear, could be slightly more integrated into prose for optimal flow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (9 parameters, no annotations, no output schema), the description is partially complete. It excels in parameter semantics but lacks behavioral details (e.g., output format, error handling) and usage guidelines. For a search tool with many filters, more context on result structure or limitations would help, but the parameter coverage prevents a lower score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds substantial value beyond the input schema, which has 0% description coverage. It provides clear explanations for all 9 parameters, including examples for 'corpus_name' (e.g., 'shake', 'ger') and specific values for 'gender_filter' ('female_dominated', etc.). This fully compensates for the schema's lack of descriptions, making parameter meanings explicit and actionable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose as 'Advanced search for plays in the DraCor database with multiple filter options.' This specifies the verb ('search'), resource ('plays'), and domain ('DraCor database'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate this search tool from its siblings like 'compare_plays' or 'find_character_across_plays', which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'find_character_across_plays' (which might overlap with the 'character_name' parameter) or 'compare_plays', nor does it specify prerequisites or optimal use cases. The agent must infer usage from the parameter list alone.

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.

  1. 6 tool updates
    • First observedanalyze_character_relations
    • First observedanalyze_full_text
    • First observedanalyze_play_structure
    • First observedcompare_plays
    • First observedfind_character_across_plays
    • First observedsearch_plays

TDQS

B3.3/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: character relations analysis, full text analysis, play structure analysis, play comparison, cross-play character search, and play searching. The descriptions reinforce these distinct functions, making tool selection unambiguous for an agent.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with underscores (e.g., analyze_character_relations, search_plays). The naming is predictable and readable throughout the set, with no deviations in style or convention.

Tool Count5/5

Six tools is well-scoped for a DraCor server focused on play analysis and search. Each tool earns its place by covering distinct aspects of the domain, avoiding bloat while providing comprehensive functionality for the intended purpose.

Completeness4/5

The tool set covers core analysis and search operations for plays in the DraCor database, including text, structure, character, and comparative analysis. A minor gap exists in CRUD operations (e.g., no tools for adding or modifying plays), but this is reasonable given the server's likely read-only focus on an existing database.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers