mcp-elevenreader
This server lets you manage your ElevenReader (ElevenLabs text-to-speech) library and settings through an MCP interface.
Library Management
List books with pagination or retrieve your full reading history
Get book details (chapters, progress) and HTML content
Add content via URL, single EPUB/PDF upload, or batch directory upload (background processing with retry)
Check status of ongoing background directory uploads
Delete books from your library
Library Maintenance
Deduplicate books (keeps the oldest copy)
Mark books at 97%+ progress as finished
Listening & Bookmarks
Update your listening progress for any book
Retrieve bookmarks for a specific book
Voices
List all available TTS voices and get details on a specific voice
User Settings
View current config (default voice, playback speed, font size)
Update default voice and playback speed
Account
View subscription plan, credits, and billing details
List your personal collections
Allows managing library and reading content on ElevenReader, including uploading documents, tracking progress, and adjusting settings.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-elevenreaderlist my library"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-elevenreader
MCP server for ElevenReader — ElevenLabs text-to-speech reader.
Setup
1. Get refresh token
Open https://elevenreader.io, log in, then run in browser console (F12 → Console):
JSON.parse(localStorage.getItem(Object.keys(localStorage).find(k => k.startsWith('firebase:authUser:')))).stsTokenManager.refreshTokenThe refresh token is long-lived (months). Access tokens are refreshed automatically.
2. Connect to Claude Code
claude mcp add elevenreader -e ELEVEN_REFRESH_TOKEN=your-token -- uvx mcp-elevenreaderTo make it available in all projects, add to ~/.claude/mcp.json:
{
"mcpServers": {
"elevenreader": {
"command": "uvx",
"args": ["mcp-elevenreader"],
"env": {
"ELEVEN_REFRESH_TOKEN": "your-token"
}
}
}
}Other clients (Claude Desktop / Kiro / Cursor)
{
"mcpServers": {
"elevenreader": {
"command": "uvx",
"args": ["mcp-elevenreader"],
"env": {
"ELEVEN_REFRESH_TOKEN": "your-token"
}
}
}
}opencode
Add to ~/.config/opencode/opencode.json. Note: opencode uses environment (not env) for MCP server env vars:
{
"mcp": {
"elevenreader": {
"type": "local",
"enabled": true,
"command": ["uvx", "mcp-elevenreader"],
"environment": {
"ELEVEN_REFRESH_TOKEN": "your-token"
}
}
}
}Config is only read at opencode startup — quit and restart opencode after adding. If the token still isn't picked up, check it's under environment, not env.
Related MCP server: ElevenLabs MCP Server
Tools
Tool | Description |
| List books paginated (10 per page, compact: title, author, progress) |
| Full reading history — all books in compact format |
| Get full details of a specific read (chapters, progress) |
| Get HTML text content of a read |
| Add URL for TTS reading |
| Upload epub/pdf file |
| Upload all books from a directory (background, with retry) |
| Check background upload progress |
| Remove from library |
| Find and remove duplicate reads (keeps oldest) |
| Mark books at 97%+ progress as finished |
| Available TTS voices |
| Voice details |
| User settings (voice, speed, font) |
| Change default voice/speed |
| Subscription info & credits |
| User collections |
| Bookmarks for a read |
| Update listening position |
Architecture
Auth: Firebase refresh token → short-lived access token (auto-refreshed, thread-safe)
Data source:
/v1/reader/collections/booksendpoint (full history, 345+ books)Caching: 60s TTL on book list, invalidated on mutations (add/delete)
Upload queue: Background thread with retry (3 attempts), rate limiting, pause for priority uploads
Thread safety: Locks on token cache and reads cache
Development
git clone https://github.com/MIt9/mcp-elevenreader
cd mcp-elevenreader
uv sync
mcp dev src/mcp_elevenreader/server.pyRequirements
Python ≥ 3.10
Dependencies: httpx, mcp
License
MIT
Available Tools
17 toolsadd_directoryA
Upload all books from a directory (and subdirectories). Files are sorted by name so parts (ч1, ч2) stay together.
Args: dir_path: Path to directory with books extensions: Comma-separated file extensions to upload (default: .epub,.pdf)
| Name | Required | Description | Default |
|---|---|---|---|
| dir_path | Yes | ||
| extensions | No | .epub,.pdf |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It discloses that files are sorted by name and that subdirectories are included, but it does not mention potential side effects, required permissions, or behavior on duplicate files.
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 extremely concise with two short paragraphs. The first sentence states the purpose, the second adds behavioral info, and the Args list is clean. Every word 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?
The tool has only two parameters and no nested objects, and an output schema exists. The description covers the core purpose, sorting behavior, and parameter defaults. Some information about error handling or prerequisites is missing, but overall it is sufficiently complete for the tool's simplicity.
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?
With 0% schema coverage, the description adds meaningful context for both parameters: 'dir_path' is described as 'path to directory with books', and 'extensions' is clarified as 'comma-separated file extensions' with a default shown. This goes beyond the raw schema.
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 verb 'upload' and the resource 'all books from a directory (and subdirectories)', which distinguishes it from siblings like 'add_document' (likely single file) and 'add_url' (URL-based).
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 implies that this tool is for batch uploading from a directory, but it does not explicitly state when to use it versus alternatives like 'add_document' or 'add_url', nor does it mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_documentB
Upload a document (epub, pdf) to the library.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits such as overwrite behavior, permission requirements, or side effects.
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?
Single sentence, front-loaded with key information, 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?
Despite simplicity, the description lacks details on return values, error handling, and path requirements. It is insufficient for a tool with no annotations and no output 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 0%, but description adds minimal meaning beyond the schema. It implies file_path should be epub or pdf but does not specify path format, restrictions, or provide examples.
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?
Description clearly states the action (Upload), resource (document), and supported formats (epub, pdf). It distinguishes from sibling tools like add_directory and add_url.
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?
No guidance on when to use this tool versus alternatives like add_url. No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_urlB
Add a URL to the library for text-to-speech reading.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It only states the basic action but does not mention side effects (e.g., duplicate handling), required permissions, or whether the URL is fetched immediately. Critical behavioral aspects are omitted.
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, front-loaded sentence with no wasted words. It efficiently conveys the core purpose without redundancy.
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 tool with one parameter and no output schema, the description is minimally adequate. However, it omits details like error handling, URL validation rules, and the immediate effect (e.g., fetching vs queuing). Given the simplicity, it is partially complete.
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 0% parameter description coverage, so the description must compensate. It adds that the parameter is a 'URL' for text-to-speech, which matches the parameter name. However, it provides no additional format or validation details, making it adequate but not rich.
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 explicitly states the verb 'Add' and the resource 'a URL to the library' with a clear purpose 'for text-to-speech reading'. This effectively distinguishes it from sibling tools like add_directory or add_document, which handle different content types.
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?
No guidance is provided on when to use this tool versus alternatives. For example, there is no mention of prerequisites, URL validity, or when to use add_url vs add_document. The description lacks context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deduplicateA
Find and remove duplicate reads (same title). Keeps the oldest one.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the core behavior (removing duplicates, keeping the oldest) but omits details like whether the operation is reversible, if it affects other data, or if any permissions are required. Since no annotations are present, the description carries the full burden and falls short of being fully transparent.
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, front-loaded sentence that conveys the essential information without any wasted words. It is appropriately sized for such a simple tool.
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?
Despite the tool's simplicity, the description lacks information about the return value or post-conditions. Since there is no output schema, the agent needs to know what to expect after invocation, such as a success message or an updated list. This gap reduces completeness.
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?
There are no parameters, so the schema coverage is trivially 100%. The description does not need to add parameter details. The baseline score for zero parameters is 4.
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: 'Find and remove duplicate reads' with a specific criterion 'same title' and behavior 'Keeps the oldest one.' This differentiates it from all sibling tools, none of which perform deduplication.
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?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, such as ensuring reads are present, or any conditions that would make this tool inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_readC
Delete a read from the library.
| Name | Required | Description | Default |
|---|---|---|---|
| read_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description only says 'Delete', implying destructive action, but lacks details on permanence, side effects, authentication requirements, or success/failure behavior. No annotations to fill this gap.
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?
One sentence, no fluff, but too minimal. Conciseness is acceptable but sacrifices informative value.
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 simple nature of a delete operation, the description is incomplete. It does not specify return values, error conditions, or confirmation steps. No output schema exists to compensate.
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?
With 0% schema description coverage, the description adds no meaning to the single parameter 'read_id'. It does not explain what a read_id is or how to obtain it.
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?
Description clearly states the action (Delete) and resource (a read) with scope (from the library). It distinguishes from siblings like get_read and list_reads, though 'library' is slightly ambiguous.
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?
No guidance on when to use this tool versus alternatives like get_read or update_progress. The description does not mention prerequisites or scenarios where deletion is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bookmarksC
Get bookmarks for a specific read.
| Name | Required | Description | Default |
|---|---|---|---|
| read_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It only states 'Get,' implying read-only, but does not disclose any side effects, rate limits, or other behavioral details.
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 very concise and front-loaded. However, it could be slightly more structured to include essential details.
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 lack of output schema, the description should explain what bookmarks are or what the output contains. It does not, leaving the agent uncertain about the return format.
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 sole parameter read_id is not explained beyond its type. The description says 'for a specific read,' but does not clarify format, source, or how to obtain it, leaving the agent with minimal guidance.
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 'get' and the resource 'bookmarks' with the qualifier 'for a specific read.' It distinguishes from sibling tools like get_read or list_reads. However, it could be more specific about what bookmarks entail.
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?
No guidance on when or when not to use this tool. It does not mention prerequisites or alternatives, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_collectionsB
List user collections.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry full behavioral disclosure. 'List' implies read-only, but no details about output format, pagination, authentication requirements, or side effects are provided.
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 with no superfluous words. It's concise, but could be expanded to include more value without being verbose.
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 parameters, no output schema, and no annotations, the description should compensate by explaining what collections are, typical usage, or return structure. It fails to do so, leaving the agent with minimal 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 input schema has zero parameters, and schema description coverage is 100%. Since there are no parameters, the description cannot add more meaning; baseline of 4 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?
The description uses a specific verb 'List' and resource 'user collections', clearly indicating the action and target. However, it does not differentiate from sibling tools like 'get_bookmarks' or 'list_reads', leaving ambiguity about what distinguishes collections.
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?
No guidance on when to use this tool versus alternatives, no prerequisites, no exclusion criteria. The description is minimal and provides no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_configA
Get user config (default voice, speed, font size, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only says 'Get user config' without detailing behavioral traits such as whether authentication is required, if it returns all settings at once, or any potential side effects. The minimal info leaves gaps for an agent to safely invoke the tool.
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 immediately conveys the tool's purpose and includes concrete examples, making it efficient and front-loaded without unnecessary 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?
Given no parameters, no output schema, and no annotations, the description provides a basic outline but does not specify the return format or whether it retrieves the entire configuration. It is adequate for a simple getter but could be more explicit about the response structure.
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?
With zero parameters and 100% schema coverage, the description adds value by listing example configuration fields (voice, speed, font size), which helps the agent understand what data it will receive. No parameter details are needed, and the description compensates by providing context.
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 'Get user config' with examples of settings (default voice, speed, font size), which distinguishes it from other 'get' tools like get_bookmarks or get_voice that retrieve different resources.
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 implies usage for retrieving configuration, but does not explicitly state when to use it over alternatives like update_config or other get tools, nor does it mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customerA
Get subscription info: plan, credits, billing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description only states a read operation. No disclosure of authentication requirements, caching, idempotency, or possible side effects. For a simple getter, some transparency on data freshness or authorization would be beneficial.
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?
Description is a single, front-loaded sentence that directly states purpose and outputs. No unnecessary 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 parameterless tool with no output schema, the description adequately conveys return details (plan, credits, billing). However, it lacks mention of authentication or error conditions, which could affect completeness.
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?
Tool has zero parameters, and schema coverage is 100% (vacuously). Description appropriately adds no parameter info beyond what's already clear. Baseline 4 applies for no parameters.
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?
Description clearly states the tool retrieves subscription info, specifically plan, credits, and billing. It is distinct from sibling get_* tools which handle bookmarks, collections, reads, etc.
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?
Description implies usage for subscription info retrieval but lacks explicit guidance on when to use this versus alternatives or conditions. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_readB
Get details of a specific read (book/document).
| Name | Required | Description | Default |
|---|---|---|---|
| read_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes a read operation but does not note any behavioral traits (e.g., authentication, rate limits). Adequate for a simple fetch but minimal.
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?
Extremely concise single sentence with no fluff. However, it is so brief that it sacrifices informative value; a bit more structure could improve clarity.
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 simplicity (one required parameter, no output schema), the description is minimally acceptable. It does not explain what 'details' includes or how to obtain read_id, leaving gaps for 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?
Schema coverage is 0%. The description adds no meaning about the required parameter 'read_id' (e.g., format or source). The schema states it is a string, but description offers no additional help.
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 uses a specific verb 'Get' and resource 'details of a specific read' (book/document), clearly distinguishing from siblings like get_read_content or delete_read.
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?
No explicit guidance on when to use this tool, when not to, or alternatives. The description only states what it does, without context for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_read_contentB
Get HTML content of a read for viewing.
| Name | Required | Description | Default |
|---|---|---|---|
| read_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden for behavioral disclosure. It only states the action without mentioning side effects, permissions, error handling, or rate limits.
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 one sentence of 7 words, highly concise and front-loaded with the key action and resource.
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 presence of an output schema, return values need not be explained. However, the description lacks context about input format, error cases, or prerequisites, making it minimally adequate.
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 single parameter 'read_id' is defined in the schema but lacks any description. The tool description adds no meaning beyond the schema, and schema description coverage is 0%.
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 ('Get'), the resource ('HTML content of a read'), and the purpose ('for viewing'). It distinguishes this tool from siblings like 'get_read' (likely metadata) and 'delete_read'.
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?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, limitations, or exclusions, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_voiceC
Get details of a specific voice.
| Name | Required | Description | Default |
|---|---|---|---|
| voice_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It only says 'Get details', implying a read operation, but offers no info on idempotency, auth, or side effects.
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 concise sentence that efficiently states the purpose, with no unnecessary 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?
Despite the tool's simplicity, the description lacks information about return values or behavior beyond 'details', which is insufficient for an agent without an output 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?
With 0% schema description coverage, the description should compensate by explaining the parameter. It does not mention 'voice_id' at all, leaving the agent without guidance on its format or 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 'Get details of a specific voice' clearly states the verb and resource, but lacks differentiation from sibling tools like 'list_voices'.
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?
No guidance on when to use this tool compared to alternatives such as 'list_voices'. There is no context for when to choose this over other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_readsC
List all documents/books in the library.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behavior. It fails to mention that the tool is read-only, how pagination works (despite a page_size parameter), or the return format, leaving significant gaps.
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, which is concise but too minimal. It could be more informative without losing brevity, e.g., by mentioning pagination.
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 no annotations or output schema, the description is incomplete. It fails to explain pagination, result ordering, or any constraints, leaving the agent with insufficient context to use the tool 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 description does not mention the only parameter, page_size, which is not described in the schema either (0% coverage). The description adds no semantic value beyond the default value in the schema.
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 lists documents/books in the library, which is a specific verb and resource. It distinguishes from siblings like get_read (single item) but omits details on scope.
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?
No guidance on when to use this tool versus alternatives (e.g., get_read for a single item, get_collections for aggregated data). The description simply states the action without any usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_voicesB
List available voices for reading.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only states a read-only listing. Does not disclose authentication needs, performance characteristics, or data source.
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?
Single sentence, zero waste. Clearly front-loaded with the verb and resource.
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 no output schema and no parameters, the description is minimally complete. Could mention return format or that it lists all voices, but current level is adequate for a simple list operation.
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?
No parameters exist (schema coverage 100%), so baseline is 4. Description does not need to add parameter details.
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 ('List available voices') and the resource ('voices for reading'). It distinguishes from sibling 'get_voice' by implying a list operation, but does not explicitly contrast them.
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?
No guidance on when to use this tool vs alternatives like 'get_voice'. Lacks context about prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_configC
Update user config (voice, playback speed).
| Name | Required | Description | Default |
|---|---|---|---|
| default_voice_id | No | ||
| playback_speed_rate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations; description only says 'Update', indicating mutation. No disclosure of side effects, permissions, or whether it merges or replaces config. Minimal transparency.
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?
One short sentence with parentheses. No wasted words, front-loaded. Appropriate length for a simple tool.
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?
Tool is simple with 2 optional params and no output schema. Description covers basic purpose but lacks details on partial update behavior and success/error handling. Adequate but not thorough.
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 0%, but description maps 'voice' to default_voice_id and 'playback speed' to playback_speed_rate. No additional format or constraints beyond schema types and defaults. Moderate value added.
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?
Clearly states it updates user config for voice and playback speed. Differentiates from sibling get_config, but 'config' could be more specific. Good verb+resource.
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?
No guidance on when to use or when not to. Implied via context but not explicit. No mention of prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_progressB
Update listening progress for a read.
| Name | Required | Description | Default |
|---|---|---|---|
| read_id | Yes | ||
| char_offset | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as whether the update is incremental, what happens on invalid char_offset, or if the operation is idempotent.
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 sentence that is front-loaded and contains no unnecessary 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 mutation tool with no output schema and no annotations, the description is too minimal. It fails to specify the exact nature of the progress update or any constraints.
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 0%, and the description adds no explanation of parameter meaning (e.g., char_offset as character position from start). The schema only provides names and types.
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 uses the specific verb 'Update' and identifies the resource as 'listening progress for a read,' clearly distinguishing it from sibling tools like add_document, delete_read, or get_read.
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?
No guidance is provided on when to use this tool versus alternatives. For example, it does not mention that get_read should be used to retrieve current progress.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_statusB
Check the status of a background directory upload.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description fails to disclose response format, possible statuses, or whether the call is blocking. With no output schema, this is insufficient.
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?
Single sentence, no unnecessary words, front-loaded with verb and resource.
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 status-checking tool with no output schema or annotations, description is too minimal. Does not specify what 'status' looks like or how to interpret it.
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?
No parameters exist, and schema coverage is 100%. Description adds no parameter info but none is needed.
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?
Description clearly states verb 'Check' and resource 'status of a background directory upload'. It is distinct from siblings like add_directory and get_read.
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?
No guidance on when to use this tool, e.g., only after initiating an upload via add_directory. No exclusions or alternatives mentioned.
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. Dates show when Glama detected each change.
17 tool updates
v0.1.0- First observed
add_directory - First observed
add_document - First observed
add_url - First observed
deduplicate - First observed
delete_read - First observed
get_bookmarks - First observed
get_collections - First observed
get_config - First observed
get_customer - First observed
get_read - First observed
get_read_content - First observed
get_voice - First observed
list_reads - First observed
list_voices - First observed
update_config - First observed
update_progress - First observed
upload_status
TDQS
Each tool targets a distinct action: adding content via different methods (directory, document, URL), managing reads (delete, deduplicate, get details, get content, progress, bookmarks), managing config, voices, collections, and subscription info. No two tools have overlapping purposes.
Most tools follow a consistent verb_noun pattern using snake_case (e.g., add_directory, get_bookmarks, list_voices). Minor deviations include 'deduplicate' (verb only) and 'upload_status' (verb_noun but 'status' is not a typical object), but overall the pattern is clear and predictable.
The set of 17 tools is slightly higher than ideal, but it aligns well with the server's scope covering library management, user config, voice selection, and subscription details. Each tool serves a clear purpose and none seem unnecessary, though consolidation could reduce count.
The tool surface covers the core lifecycle: adding content via multiple channels, listing/getting details, deleting, deduplication, progress tracking, bookmarks, collections, config management, voices, and subscription info. Minor gaps like editing read metadata or searching are absent but not critical for basic usage.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for Text-to-Speech
MCP server for Speech-to-Text
Remote MCP server for AIStoryHub: stories, chapters, story bible, Voiceprints, AI generation.
MCP server for Russian books search, details, and recommendation candidates.
Related MCP Servers
- FlicenseDqualityFmaintenanceMCP Server for AI Summarization, Support for multiple content types: * Plain text * Web pages * PDF documents * EPUB books * HTML content118166-

ElevenLabs MCP Serverofficial
AlicenseAqualityFmaintenanceAn official Model Context Protocol (MCP) server that enables AI clients to interact with ElevenLabs' Text to Speech and audio processing APIs, allowing for speech generation, voice cloning, audio transcription, and other audio-related tasks.271,536MIT- FlicenseNot gradedqualityDmaintenanceMCP server for extracting text from PDF files, supporting local files and URLs.-
- FlicenseNot gradedqualityCmaintenanceAn MCP server that provides text-to-speech, speech-to-text, and voice management via ElevenLabs API.1-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/MIt9/mcp-elevenreader'
If you have feedback or need assistance with the MCP directory API, please join our Discord server