DraCor MCP Server
DraCor MCP 서버
Drama Corpora Project(DraCor) API와 상호 작용하기 위한 모델 컨텍스트 프로토콜(MCP) 서버입니다. 이 MCP 서버를 사용하면 Claude 또는 다른 LLM을 통해 극적 텍스트와 그 등장인물 네트워크를 원활하게 분석할 수 있습니다.
개요
이 프로젝트는 DraCor API v1에 대한 액세스를 제공하는 공식 모델 컨텍스트 프로토콜(Model Context Protocol) Python SDK를 사용하여 MCP 서버를 구현합니다. 이를 통해 Claude를 비롯한 LLM들은 극적 텍스트 코퍼스와 상호작용하고, 등장인물 네트워크를 분석하고, 연극 정보를 검색하고, 다양한 언어와 시대의 극작에 대한 통찰력을 얻을 수 있습니다.
이 프로젝트에는 두 가지 구현이 포함됩니다.
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를 이용한 설치
UV 설치:
지엑스피1
가상 환경을 만들고 종속성을 설치합니다.
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv pip install -e .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 검사기가 실행되어 도구와 리소스를 대화형으로 테스트할 수 있습니다.
클로드 구성
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 형식
캐릭터 관계 - 캐릭터 간의 명시적 관계
음성 텍스트 필터 - 성별, 관계 유형 또는 캐릭터 역할별로 필터링
무대 지시 - 스피커가 있거나 없는 무대 지시를 검색합니다.
캐릭터 검색 - 특정 캐릭터가 포함된 연극 찾기(위키데이터 ID 기준)
용법
Claude Desktop에 설치하면 Claude를 통해 DraCor API와 상호 작용할 수 있습니다. 몇 가지 예를 들면 다음과 같습니다.
기본 쿼리
Claude에게 사용 가능한 코퍼스를 나열해 달라고 요청하세요.
Can you list all available drama corpora in DraCor?특정 연극에 대한 정보를 얻으세요:
Tell me about Goethe's Faust in the German corpus캐릭터 네트워크 분석:
Analyze the character network in Hamlet from the Shakespeare corpus고급 쿼리
캐릭터 관계 분석:
What are the strongest character relationships in Pushkin's Boris Godunov?연극을 비교해보세요:
Compare Goethe's Faust and Schiller's Die Räuber in terms of network density and character count캐릭터의 중요도 분석:
Who are the most central characters in Shakespeare's Hamlet based on speaking time and relationships?성별 대표성 분석:
Analyze the gender distribution and representation in Molière's Le Misanthrope다양한 연극에서 캐릭터 찾기:
Find all plays that feature a character named "Hamlet" or similar희곡의 전체 텍스트를 분석하세요:
Provide a comprehensive analysis of the full text of Goethe's Faust연극 텍스트에서 테마 추출:
What are the main themes and motifs in the full text of Shakespeare's Hamlet?언어 패턴 분석:
Analyze the language patterns and style in Chekhov's The Cherry Orchard문학 분석 쿼리
플레이 구조 분석:
Analyze the structure of Molière's Le Misanthrope in terms of acts, scenes, and dialogue distribution저자 비교:
Compare the network structures in plays by Shakespeare and Molière역사적 맥락:
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}- Wikidata ID별로 캐릭터가 포함된 연극 목록을 표시합니다.full_text://{corpus_name}/{play_name}- 일반 텍스트 형식의 연극 전체 텍스트tei_text://{corpus_name}/{play_name}- 연극의 전체 TEI XML 텍스트
도구(v1 API)
FastMCP 서버는 다음과 같은 도구를 제공합니다.
search_plays- 쿼리를 기반으로 연극 검색compare_plays- 두 연극을 측정 기준과 구조 측면에서 비교합니다.analyze_character_relations- 연극 속 캐릭터 관계 분석analyze_play_structure- 연극의 구조를 분석합니다find_character_across_plays- 여러 플레이에서 캐릭터 찾기analyze_full_text- 대화와 무대 지시를 포함한 연극의 전체 텍스트를 분석합니다.
프롬프트 템플릿(v1 API)
FastMCP 서버에는 다음과 같은 프롬프트 템플릿이 포함되어 있습니다.
analyze_play- 특정 플레이를 분석하기 위한 템플릿character_analysis- 특정 캐릭터를 분석하기 위한 템플릿network_analysis- 캐릭터 네트워크 분석을 위한 템플릿comparative_analysis- 두 연극을 비교하기 위한 템플릿gender_analysis- 연극의 성별 표현을 분석하기 위한 템플릿historical_context- 연극의 역사적 맥락을 분석하기 위한 템플릿full_text_analysis- 연극의 전체 텍스트를 분석하기 위한 템플릿
작동 원리
이 프로젝트에서는 공식 Model Context Protocol Python SDK를 사용하여 Claude가 DraCor API와 상호 작용하는 데 사용할 수 있는 리소스와 도구를 제공하는 MCP 서버를 구축합니다.
클로드에게 극적 텍스트에 대한 질문을 하면 다음과 같은 결과가 나올 수 있습니다.
코퍼스, 연극, 캐릭터, 네트워크와 같은 리소스에 액세스하세요
도구를 사용하여 연극을 검색, 비교 및 분석하세요
데이터를 기반으로 통찰력과 시각화를 제공합니다.
DraCor API는 공개적으로 접근 가능하므로 인증이 필요하지 않습니다.
속도 제한
DraCor의 속도 제한 정책을 주의하세요. 서버에는 .env 파일에서 구성할 수 있는 선택적 속도 제한 설정이 포함되어 있습니다.
문제 해결
문제가 발생하는 경우:
Python 3.10 이상을 사용하고 있는지 확인하세요.
디버깅을 위해 개발 모드에서 실행해보세요:
mcp dev dracor_mcp_fastmcp.pyhttps://dracor.org/doc/api 에서 DraCor API 상태를 확인하세요.
MCP와 함께 사용하도록 프롬프트됨
"당신의 임무는 DraCor 데이터베이스에서 역사적 사건을 분석하여 캐릭터 ID 태그 문제를 파악하는 것입니다. 구체적으로는 다음과 같습니다.
DraCor 데이터베이스에서 연극을 선택하고 캐릭터 관계, 전체 텍스트, 구조에 대한 포괄적인 분석을 수행합니다.
다음을 포함하여 문자 ID 태그의 모든 불일치 사항을 식별합니다.
캐릭터 이름의 철자 변형
캐릭터 이름 혼동 또는 합치기
역사적 철자 변형
캐릭터 ID와 스테이지 지시 간의 불일치
다음 열을 포함하는 구조화된 표 형식으로 잠재적인 문자 ID 태그 오류에 대한 자세한 보고서를 작성합니다.
텍스트 ID(연극의 고유 식별자)
현재 데이터베이스에서 사용되는 문자 ID
텍스트에서 문제가 있는 변형이 발견되었습니다.
오류 유형(철자, 변형, 혼동 등)
문제에 대한 설명
이 텍스트에 대해 이렇게 하세요: [플레이네임]"
특허
MIT
감사의 말
이 프로젝트에서는 다음을 사용합니다.
MCP 서버 구축을 위한 Model Context Protocol Python SDK
극적인 텍스트 및 네트워크 데이터를 위한 DraCor API v1
기반 데이터와 API를 제공하는 Drama Corpora Project(DraCor)
Available Tools
6 toolsanalyze_character_relationsC
Analyze the character relationships in a play.
| Name | Required | Description | Default |
|---|---|---|---|
| corpus_name | Yes | ||
| play_name | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| corpus_name | Yes | ||
| play_name | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| corpus_name | Yes | ||
| play_name | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| corpus_name1 | Yes | ||
| play_name1 | Yes | ||
| corpus_name2 | Yes | ||
| play_name2 | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| character_name | Yes |
TDQS
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.
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.
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.
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.
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.
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")
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| corpus_name | No | ||
| character_name | No | ||
| country | No | ||
| language | No | ||
| author | No | ||
| year_from | No | ||
| year_to | No | ||
| gender_filter | No |
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
- First observed
analyze_character_relations - First observed
analyze_full_text - First observed
analyze_play_structure - First observed
compare_plays - First observed
find_character_across_plays - First observed
search_plays
TDQS
Scored across 6 tools
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.
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.
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.
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
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server utilizing Claude AI for generating intelligent queries and offering documentation assistance based on API documentation analysis.18 npm3MIT
- FlicenseNot gradedqualityDmaintenanceThis server implements the Model Context Protocol to facilitate meaningful interaction and understanding development between humans and AI through structured tools and progressive interaction patterns.57-
- FlicenseNot gradedqualityDmaintenanceA Python server implementing the Model Context Protocol that exposes tools for querying external APIs, compatible with Claude Desktop and ChatGPT Desktop.-

DataForSEO MCP Serverofficial
AlicenseBqualityBmaintenanceA Model Context Protocol server that enables Claude to interact with DataForSEO APIs, allowing access to SEO data including SERPs, keyword research, on-page metrics, and domain analytics.1725,471 npm250Apache 2.0