African Speech Corpora MCP
African Speech Corpora MCP
Сервер только для чтения, реализующий Model Context Protocol — открытый стандарт, созданный Anthropic, для работы с публичными речевыми корпусами африканских языков: в первую очередь волоф, а также пулаар и серер.
Проект ориентирован в первую очередь на волоф (Wolof-first). Каталог 2.0 содержит 14 вариантов: 11 вариантов исходных источников и 3 производных. Пулаар (ful) и серер (srr) представлены только вариантами Kallaama без локальных метрик; проект не заявляет о покрытии суахили или амхарского. Встроенная блокировка валидации, созданная 26 августа 2026 года, делает доступными для запросов 6 вариантов Hugging Face. Более поздний запуск валидации может естественным образом привести к другому состоянию.
Сервер не обучает модели, не загружает полные корпуса и не записывает данные в Hugging Face, OpenSLR, Kaggle, GitHub или любой другой удалённый источник.
Что измеряет сервер
Конвейер качества разделяет следующие этапы:
raw audio → usable audio → transcribed audio → audit-accepted audio → expert-verified audioRaw: файл, присутствующий в наблюдаемом снимке.
Usable: файл, оставшийся после количественно измеримых исключений аудита.
Transcribed: аудио, связанное с транскрипцией.
Audit accepted: явно названное объединение материала, проверенного экспертами, и материала, только предполагаемого действительным по результатам аудита.
Expert verified: только
expert_auditedилиsource_reported_expert. Оценка «a priori» никогда не попадает на этот уровень.
Секунды являются каноническим представлением длительности. Десятичные часы и строки HH:MM:SS выводятся во время сериализации. Каждая проверенная метрика указывает свою область, источник, метод, дату наблюдения и уверенность. Отсутствующее значение остаётся null; оно никогда не преобразуется в ноль. Показатели, опубликованные проектом, остаются в published_metrics, отдельно от локальных наблюдений.
Related MCP server: Asset Library MCP Server
Снимок волоф 2026 года
Машиночитаемый источник — assets/wolof-audit-2026.csv. Протокол, ограничения и расхождения с ячейками TOTAL исходной таблицы задокументированы в assets/wolof-audit-2026.md.
Семь вариантов волоф имеют локальное наблюдение: ALFFA, FLEURS wo_sn, Kallaama Wolof, Urban Bus, Waxal crowdsource, Wolof TTS Baamtu и WolBanking77. Итоги пересчитываются из этих семи строк и никогда не хранятся как избыточный ручной итог: 148 102 пригодных файла, 64 609 транскрибированных файлов, 50 494 файла, принятых аудитом, 2 329 382,06 секунд аудио, 515 185,06 транскрибированных секунд и 302 048,06 секунд, принятых аудитом.
Важные ограничения:
наблюдения FLEURS, Urban Bus, Waxal, Wolof TTS и WolBanking77, описанные как «a priori», являются
audit_assumed_valid, а не проверенными экспертами;ALFFA явно имеет ноль файлов, проверенных экспертами, в этом снимке;
153 файла Kallaama — это длинные радио- или интервью-записи, а не 153 речевых реплики; 36 файлов и 12:49:36 приписываются основе
source_reported_expertлокального протокола;Urban Bus содержит значительный французский контент без количественной оценки, поэтому имеет
language_purity=mixed_fr;Waxal разделяет 517:38:05 необработанного аудио, пригодного в частности для SSL, и только 13:41:28 транскрибированного для контролируемого ASR;
локальный снимок Wolof TTS Baamtu — 36 009 файлов и 37:04:49 — отличается от округлённой публичной метрики, и этот TTS-корпус по умолчанию исключён из ASR;
WolBanking77 различает 2 563 наблюдаемых аудиофайла и 9 791 текстовую фразу, указанную в других источниках;
Afrivoice публикует 530,74 часов аудио на волоф, включая 102,96 транскрибированных часов. Это показатели, опубликованные источником, а не измерения локального аудита 2026 года и не свидетельство экспертной проверки. Набор данных автоматически ограничен на Hugging Face, поэтому его файлы, схема, разбиения и длительности не могут быть независимо проверены без принятия условий доступа и предоставления токена; поэтому он остаётся
audit_status=pending;поскольку точная дата наблюдения источника недоступна,
observed_at=2026намеренно имеет точность только до года.
Установка
Пакет требует Python 3.11 или новее. Рекомендуется Python 3.12, и он явно выбран ниже, чтобы виртуальное окружение случайно не унаследовало более старый системный интерпретатор, например Python 3.9:
git clone https://github.com/papasega/african-speech-mcp.git
cd african-speech-mcp
python3.12 --version
python3.12 -m venv .venv
source .venv/bin/activate
python --version
python -m pip install -e .Обе команды проверки версии должны сообщать Python 3.12.x. Создание окружения с помощью python -m venv .venv безопасно только в том случае, если этот исполняемый файл python уже является Python 3.11 или новее. Если установка завершается ошибкой, например:
ERROR: Package 'african-speech-mcp' requires a different Python: 3.9.6 not in '>=3.11'значит, виртуальное окружение было создано с Python 3.9.6. Деактивируйте его, удалите или переименуйте локальную папку .venv, при необходимости установите Python 3.12 и пересоздайте окружение с помощью python3.12 -m venv .venv. Виртуальное окружение сохраняет интерпретатор, с которым оно было создано; его активация не обновляет Python.
Сервер stdio запускается без аргументов:
african-speech-mcpЕго также можно запустить явно:
african-speech-mcp serve --transport stdio
african-speech-mcp serve --transport streamable-httpПример конфигурации Claude Desktop после установки пакета, желательно с использованием абсолютного пути:
{
"mcpServers": {
"african-speech-corpora": {
"command": "/absolute/path/to/.venv/bin/african-speech-mcp"
}
}
}Этот рефакторинг не публикует пакет. Не используйте uvx или идентификатор PyPI, пока релиз не будет явно опубликован.
Инструменты MCP
Все восемь инструментов объявляют read_only_hint=true, destructive_hint=false и idempotent_hint=true.
Tool | Назначение |
| Перечисляет варианты, состояние аудита, рекомендуемое использование и состояние валидации. |
| Возвращает количества, длительности, основу проверки, предупреждения и отдельные опубликованные показатели. |
| Строит план без двойного учёта производных и без включения бенчмарков по умолчанию. |
| Фильтрует только при наличии манифеста на уровне строк; в противном случае отказывается обещать исключения. |
| Сравнивает качество, домен, чистоту языка, лицензию и свежесть метрик. |
| Ищет строки в варианте, удалённая схема которого была проверена. |
| Возвращает размеры только для конфигурации варианта и сообщает о расхождениях схемы. |
| Возвращает лицензию, цитирование и родительские цитирования для производного. |
Концептуальные примеры:
audit_corpus(corpus="waxal-crowdsource")
plan_training_set(language="wol", task="asr", quality="transcribed")
plan_training_set(language="wol", task="asr", quality="expert_verified")
plan_training_set(
language="wol",
task="asr",
quality="audit_accepted",
include_mixed_language=true,
)
filter_segments(
corpus="waxal-crowdsource",
exclude_duplicates=true,
exclude_non_wolof=true,
exclude_corrupt=true,
)Последний вызов в настоящее время возвращает filter_available=false. Агрегированные итоги показывают, что Waxal содержит 430 дубликатов и 22 повреждённых или не-волоф файла, но они не дают идентификаторов строк. Поэтому сервер отказывается делать вид, что удалил эти строки.
Семантика plan_training_set
quality принимает:
any: выбор по задаче и лицензии без требования транскрипции;transcribed: использование фактически транскрибированной длительности;audit_accepted: включение экспертного и предполагаемо действительного материала с видимой разбивкой и предупреждением;expert_verified: использование только действительно экспертных основ проверки;wolof_only: исключениеmixed_fr,mixed,unknownи вариантов без достаточных доказательств чистоты языка.
metric_source может быть либо latest_audit (по умолчанию), либо published. Варианты без известной длительности остаются перечисленными в hours_unknown_for. FLEURS является бенчмарком и не включается в обучение, если не задано include_benchmarks=true. Urban Bus требует include_mixed_language=true. TTS-варианты не включаются в ASR, если явно не разрешены, а производные никогда не добавляются к своим родителям. Неизвестные, некоммерческие, с условием share-alike или неподтверждённые лицензии вызывают соответствующие предупреждения; commercial_use=null никогда не представляется как коммерчески совместимый.
Постоянная валидация Hugging Face
african-speech-mcp validate
african-speech-mcp validate --write
african-speech-mcp validate --output validation-lock.jsonВалидация проверяет идентификатор набора данных, конфигурацию, разбиения, столбец транскрипции и любой объявленный столбец языка. Блокировка записывается через атомарную замену и фиксирует checked_at, информацию о наблюдаемой схеме и стабильный отпечаток. Она также привязана к хэшу каталога, поэтому сервер отклоняет устаревшую блокировку.
По умолчанию --write создаёт validation-lock.json в текущем каталоге, не изменяя установленный пакет. Чтобы использовать его впоследствии:
export ASM_VALIDATION_LOCK_PATH="$PWD/validation-lock.json"
african-speech-mcpВозможные состояния: unverified, verified, gated, unavailable, schema_mismatch и quality_blocked. Отвечающий идентификатор никогда не помечается как verified, если ожидаемая конфигурация или столбец отсутствуют. Для Afrivoice установите ASM_HF_TOKEN локально перед валидацией; токен не сериализуется и не записывается в журнал.
corpus_stats фильтрует строго по конфигурации, поэтому FLEURS wo_sn никогда не включает другой язык. Многоязычный дистрибутив без отдельной конфигурации должен объявить столбец языка и допустимые значения. Когда сервер не может гарантировать такой фильтр, он отклоняет запрос или возвращает явное предупреждение.
Каталог и архитектура
src/african_speech_mcp/
├── audit.py # audited CSV, duration formats, deterministic aggregation
├── catalog.py # Pydantic v2 variants and invariants
├── cli.py # serve, validate, catalog-show
├── config.py # ASM_* settings
├── hf_client.py # GET only, retries, bounded concurrency
├── models.py # structured responses
├── server.py # eight MCP tools
├── validation.py # schema inspection and atomic lock files
└── data/
├── corpora.json # single canonical catalog
└── validation-lock.jsonБольше нет второго корневого corpora.json. Аудит CSV остаётся каноническим в assets/, и Hatch детерминированно включает его в wheel. Тесты проверяют итоги и ссылки между CSV и каталогом.
Полезные переменные включают ASM_CATALOG_PATH, ASM_VALIDATION_LOCK_PATH, ASM_AUDIT_LOG_PATH, ASM_HF_TOKEN, ASM_REQUEST_TIMEOUT_S, ASM_REQUEST_RETRIES и ASM_VALIDATION_CONCURRENCY. Журналы выполнения выводятся в stderr, чтобы stdout оставался зарезервированным для протокола stdio.
Внесение аудита или манифеста
Новый аудит должен:
добавлять единичные строки в CSV, никогда не добавляя ручную строку TOTAL;
предоставлять
audit_id,observed_at,source_reference, метод, уверенность и основу проверки;различать наблюдаемый ноль и отсутствующее значение;
ссылаться на аудит из соответствующего варианта;
документировать ограничения в Markdown и добавлять тесты согласованности.
Чтобы включить реальную фильтрацию, предоставьте версионированный манифест, содержащий как минимум:
audit_id,corpus_key,revision,row_id,audio_path,is_duplicate,is_empty,is_corrupt,is_wolof,transcript_quality,reasonИдентификаторы должны происходить из проверенного снимка. Их никогда нельзя выдумывать из агрегированных подсчётов.
Разработка и подготовка релиза
python -m pip install -e ".[dev]"
ruff check src tests scripts
pytest -q
python -m buildCI запускает эти проверки на Python 3.11 и 3.12, устанавливает собранный wheel в чистом окружении и тестирует как CLI, так и реальный обмен MCP stdio. Версия 2.0.0 — это задокументированный ломающий релиз: публичная единица теперь представляет собой вариант с одним языком, одной задачей и одной конфигурацией, с более структурированными ответами о качестве.
Лицензия
Код сервера лицензирован под Apache-2.0. Каждый корпус сохраняет свою собственную лицензию. Записи каталога, помеченные TO BE CONFIRMED или SEE DATASET ..., намеренно остаются неопределёнными и должны быть проверены по первоисточнику перед любым использованием, особенно коммерческим.
Available Tools
8 toolsaudit_corpusARead-onlyIdempotent
Return dated observed quality metrics separately from published figures. Missing observations remain null, never implicit zero.
| Name | Required | Description | Default |
|---|---|---|---|
| corpus | Yes | Variant key. | |
| audit_id | No | Specific audit snapshot. | |
| include_published | No | Include source figures. |
Output Schema
| Name | Required | Description |
|---|---|---|
| task | Yes | |
| config | No | |
| corpus | Yes | |
| counts | No | |
| domain | No | |
| licence | Yes | |
| audit_id | No | |
| citation | Yes | |
| language | Yes | |
| speakers | No | |
| warnings | No | |
| durations | No | |
| confidence | No | |
| provenance | Yes | |
| observed_at | No | |
| speech_type | No | |
| split_scope | No | |
| audit_status | Yes | |
| quality_notes | No | |
| commercial_use | Yes | |
| dataset_family | Yes | |
| language_purity | No | |
| source_reference | No | |
| published_metrics | No | |
| measurement_method | No | |
| verification_basis | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a valuable non-obvious behavior: 'Missing observations remain null, never implicit zero.' This goes beyond the annotations, which only declare the operation as read-only, idempotent, and non-destructive. It informs the agent about data representation, which is critical for interpreting results. The description does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence that states the core purpose and a key behavioral caveat. No filler or redundancy. The most important information (purpose and null handling) is front-loaded. It earns its place entirely.
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, the description does not need to explain return values. It covers the primary action and a critical data-representation detail. The only missing piece is explicit usage context, but that is already scored low under usage guidelines. For a read-only tool with strong annotations and schema coverage, the description is reasonably 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?
Schema description coverage is 100%, so all three parameters (corpus, audit_id, include_published) are already documented in the schema. The description does not add parameter-level details beyond what the schema provides. It mentions 'dated observed quality metrics' but that relates to the output, not the parameters. Baseline 3 applies because the schema carries the full load.
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 a clear verb-resource pairing: 'return dated observed quality metrics'. It distinguishes from published figures, which hints at differentiation from sibling tools like corpus_stats or compare_corpora, though it does not name them explicitly. This is clear but not as sharply differentiated as the calibration example.
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 given on when to use this tool versus alternatives. It does not mention context, exclusions, or a preferred use case. The mention of 'separately from published figures' implies a distinction but does not state when to choose this over corpus_stats or compare_corpora. An agent would infer usage from the name and parameters rather than from explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cite_corpusBRead-onlyIdempotent
Return licence and citations, including parents of derivatives.
| Name | Required | Description | Default |
|---|---|---|---|
| corpus | Yes | Variant key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| bibtex | Yes | |
| licence | Yes | |
| homepage | Yes | |
| also_cite | No | |
| usage_note | No | |
| commercial_use | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds a small behavioral detail beyond annotations — that the result includes parents of derivatives — which is useful. It doesn't contradict annotations, and given the rich annotation coverage the bar is lower, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero filler. The one qualification (including parents of derivatives) is placed where it adds value. It is lean without being under-specified to the point of meaninglessness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single well-documented parameter, an output schema present, and full annotation coverage, the tool is largely self-documenting. The thin description is adequate but leaves behavioral specifics like output shape and scope unaddressed; the 'including parents of derivatives' hint covers part of that, but not all.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the sole parameter 'corpus' already carries a description ('Variant key.'). The description adds nothing about how this parameter is used or validated, so it sits at the baseline 3 where the schema does the heavy lifting.
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 gives a specific verb (Return) and resource (licence and citations), plus an informative qualifier about including parents of derivatives. This is clear enough for an agent to guess its purpose, though it doesn't explicitly differentiate itself from siblings like audit_corpus or corpus_stats, which a reader might conflate with it.
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 given about when to use this tool versus any of the seven siblings such as audit_corpus or corpus_stats. An agent must infer context from the name and description alone; there is no statement of when not to use it or which alternative fits which scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_corporaBRead-onlyIdempotent
Compare variant quality, provenance, licence and benchmark status.
| Name | Required | Description | Default |
|---|---|---|---|
| corpora | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| corpora | Yes | |
| compared | Yes | |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the specific comparison dimensions, which is a form of scoping that slightly goes beyond the annotations. However, it does not disclose any additional behavioral traits (e.g., output format, performance, rate limits) and is mostly a restatement of purpose.
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 with no fluff. It front-loads the core verb and resource, and lists the key comparison dimensions efficiently. There is no wasted text or 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?
The tool is relatively simple with one parameter, and an output schema exists (so return values are presumably documented elsewhere). However, the description leaves the exact meaning of 'corpora' strings ambiguous and offers no connection to sibling tools like list_corpora for obtaining valid values. It is functional but not fully complete for an agent unfamiliar with the domain.
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 explaining the 'corpora' parameter. While the tool name and description imply that each string is a corpus identifier, it doesn't clarify whether these are names, IDs, or paths, nor how to obtain them. This is minimal added meaning over the raw schema type.
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 a specific verb ('Compare') and a specific resource ('corpora') with enumerated dimensions (variant quality, provenance, licence, benchmark status). It clearly conveys what the tool does, though it doesn't explicitly distinguish it from siblings like 'corpus_stats' which might also cover some of these dimensions.
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 such as list_corpora or corpus_stats. There is no mention of prerequisites, when not to use it, or how it relates to siblings. The usage context is only implied by the verb 'compare'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
corpus_statsARead-onlyIdempotent
Return rows and schema for exactly one declared dataset configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| corpus | Yes | Variant key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| splits | Yes | |
| columns | Yes | |
| warnings | No | |
| provenance | Yes | |
| total_rows | Yes | |
| declared_splits | Yes | |
| observed_configs | No | |
| undeclared_splits | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that the tool returns rows and schema, which is useful but superficial; it does not disclose potential error behavior, auth needs, or performance implications. Since the annotations carry most of the burden, the description adds moderate value.
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 zero fluff. It immediately states what the tool does and the scope, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only operation with one parameter and an existing output schema, the description is adequate. It defines the tool's function and scope without leaving major gaps. It does not mention edge cases (e.g., what happens if the corpus key is invalid) but those are minor given the tool's simplicity and the presence of 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?
The schema fully documents the sole parameter (corpus: 'Variant key.') with 100% coverage. The description does not add any parameter-specific meaning, so the baseline score of 3 applies—the schema already does the heavy lifting.
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 a specific action (“Return”) and resource (“rows and schema for exactly one declared dataset configuration”), which clearly distinguishes it from siblings like list_corpora (which lists datasets) and search_segments (which searches within data). The phrase 'exactly one' further narrows the scope, making the tool's purpose unambiguous.
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—when you need both the data and structure of a specific dataset configuration—but it does not explicitly state when to choose this tool over alternatives, nor does it mention any exclusions. The usage context is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter_segmentsCRead-onlyIdempotent
Filter rows only when a versioned row-level audit manifest exists; aggregated audit totals alone produce a structured refusal.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| split | No | Declared split. | |
| corpus | Yes | Variant key. | |
| min_quality | No | Requested row quality. | transcribed |
| exclude_corrupt | No | ||
| exclude_non_wolof | No | ||
| exclude_duplicates | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| corpus | Yes | |
| reason | Yes | |
| audit_id | No | |
| segments | No | |
| warnings | No | |
| provenance | Yes | |
| manifest_path | No | |
| filter_available | Yes | |
| required_manifest_columns | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and mutability. The description adds a useful behavioral trait: that aggregated audit totals alone trigger a structured refusal. This goes beyond annotations and helps the agent anticipate failure modes. However, it doesn't disclose success behavior, pagination, or return structure, though an output schema exists.
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, so it's concise and not bloated. However, it's cryptic and not well-structured—it reads like an error condition rather than an overview. It's front-loaded with the condition but the phrasing is convoluted. It earns its place by adding behavioral info, but clarity suffers.
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 8 parameters, 1 required, and an output schema, the description is severely incomplete. It doesn't explain what the tool does with segments, what filters apply, or how output is organized. The output schema covers return values, but the description lacks essential context about the operation's purpose and scope. The precondition about audit manifests is useful but insufficient.
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 only 38%, with split, corpus, and min_quality having descriptions. The description text itself provides no explanation for any parameter (limit, query, exclude_* flags). With low schema coverage, the description should compensate, but it doesn't mention parameters at all. This leaves the agent guessing about parameter meaning and 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 name 'filter_segments' implies filtering rows/segments, and the description begins with 'Filter rows', so the core action is present. However, it doesn't specify what criteria filter on (quality, duplicates, etc.) or what makes it distinct from search_segments. The description is more about a precondition than a clear statement of purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives like search_segments or list_corpora. It only mentions a precondition (versioned row-level audit manifest), which is a behavioral constraint, not a usage guideline. No exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_corporaBRead-onlyIdempotent
List language/task/config variants with audit and verification state.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No | Task filter. | |
| language | No | ISO 639-3 filter. | |
| include_derivatives | No | Include derivatives. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| corpora | Yes | |
| disclaimer | No | |
| audited_count | Yes | |
| originals_count | Yes | |
| queryable_count | Yes | |
| derivatives_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds the useful context that the listing surfaces audit/verification state, but it omits scope details like pagination or result limits. Consistent with annotations; no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single ten-word sentence with zero filler. The verb and core output are front-loaded, and nothing needs to be trimmed.
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 listing tool with full schema coverage, rich read-only/idempotent annotations, and an output schema present, the description is largely complete. The only real gap is the absence of sibling-routing guidance, which was already penalized under usage guidelines.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (task, language, include_derivatives) are already documented. The description loosely hints at the filters via 'language/task/config variants' but adds no syntax or format detail beyond the schema. Baseline 3 applies since the schema does the heavy lifting.
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-resource pair ('List ... variants') and tells the agent what kind of data is returned (language/task/config variants plus audit and verification state). It does not explicitly differentiate from siblings like audit_corpus or corpus_stats, so it misses the top 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?
There is no guidance on when to use this tool versus alternatives. With siblings such as audit_corpus, corpus_stats, and compare_corpora, an agent gets no help deciding between listing state and performing an audit or computing stats. Only implicit usage is conveyed by the verb 'List.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_training_setARead-onlyIdempotent
Build a de-duplicated variant plan using published or dated audit metrics, with explicit quality, licence, benchmark and language-purity decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No | Requested task. | asr |
| quality | No | Minimum/selection quality. | transcribed |
| language | No | wol | |
| metric_source | No | Metric provenance. | latest_audit |
| include_benchmarks | No | Include evaluation benchmarks. | |
| include_tts_for_asr | No | Explicitly permit TTS variants in an ASR plan. | |
| include_mixed_language | No | Opt in to known mixed-language variants. | |
| exclude_evaluation_sets | No | Deprecated compatibility alias for include_benchmarks. |
Output Schema
| Name | Required | Description |
|---|---|---|
| task | Yes | |
| quality | Yes | |
| included | Yes | |
| language | Yes | |
| licences | Yes | |
| warnings | No | |
| citations | Yes | |
| metric_source | Yes | |
| total_duration | Yes | |
| excluded_variants | Yes | |
| hours_unknown_for | No | |
| include_benchmarks | Yes | |
| include_tts_for_asr | Yes | |
| excluded_derivatives | Yes | |
| assumed_valid_duration | No | |
| include_mixed_language | Yes | |
| total_hours_transcribed | Yes | Compatibility alias for total_duration.hours_decimal. |
| expert_verified_duration | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, non-mutating operation. The description adds context about the data source (published or dated audit metrics) and the decision areas (quality, licence, benchmark, language-purity), which is useful but does not disclose any additional behavioral nuances beyond what annotations state. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-constructed sentence that immediately states the core purpose and key differentiators. There is no redundancy or filler; every phrase contributes to understanding the tool's function. It is appropriately concise and front-loaded with the main verb and object.
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 8 parameters but no required ones, an output schema, and safety annotations covering read-only/idempotent behavior. The description provides sufficient purpose and input context for an agent to infer how to invoke it, and the output schema handles return values. However, it does not explain the concept of a 'variant plan' or detail how the quality/licence/benchmark/language-purity decisions are made, which could be ambiguous for an unfamiliar agent. Given the complexity, this is a minor gap, so a 4 is appropriate.
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 88%, so most parameters already have explanatory text in the schema. The description mentions 'published or dated audit metrics' which maps to the metric_source parameter, and 'language-purity' aligns with include_mixed_language, but these are not elaborated beyond the schema's own descriptions. The description adds high-level context but does not meaningfully clarify individual parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to build a de-duplicated variant plan, using audit metrics and making explicit decisions on quality, licence, benchmark, and language-purity. The verb 'build' and specific resource 'variant plan' differentiate it from sibling tools like list_corpora, search_segments, and filter_segments, which perform more basic operations. It is specific enough for an agent to understand what the tool accomplishes, though it does not elaborate on what a 'variant plan' 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 implies when to use this tool—when a de-duplicated variant plan with explicit quality and language-purity decisions is needed—but it does not explicitly mention alternatives or conditions when other tools (e.g., filter_segments, corpus_stats) would be more appropriate. No exclusions or contrasting guidance is provided, leaving the agent to infer usage from context rather than clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_segmentsCRead-onlyIdempotent
Search a schema-verified variant. Config overrides cannot cross language boundaries; temporary audio URLs are explicitly marked ephemeral.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| split | No | Declared split. | |
| config | No | Compatibility parameter; must equal the variant config. | |
| corpus | Yes | Variant key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| returned | Yes | |
| segments | Yes | |
| warnings | No | |
| provenance | Yes | |
| total_matches | No | |
| filter_available | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/destructive status. The description adds specific behavioral constraints (config cannot cross language boundaries, ephemeral audio URLs) that go beyond the annotations, providing some useful context, though limited in scope.
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 concise (two sentences) but not front-loaded with a clear purpose. The first sentence is vague, and the second adds peripheral constraints without enriching the core definition.
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 search tool with 5 parameters and an output schema, the description lacks essential context about search semantics, parameter combinations, and result interpretation. It does not suffice to guide correct usage without additional documentation.
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 60%, and the description does not clarify the remaining parameters. The mention of config overrides hints at the config parameter but does not map parameters to their roles, leaving agents to infer meaning from names and schema defaults.
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 verb 'Search' and a resource ('a schema-verified variant'), but 'variant' is ambiguous and not tied to the tool's name 'segments'. It does not clearly explain what is searched or what results look like, offering only a weak distinction from siblings.
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 given on when to use this tool versus alternatives like filter_segments or compare_corpora. The notes about config overrides and audio URLs are operational constraints, not usage direction.
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.
8 tool updates
v2.0.0- First observed
audit_corpus - First observed
cite_corpus - First observed
compare_corpora - First observed
corpus_stats - First observed
filter_segments - First observed
list_corpora - First observed
plan_training_set - First observed
search_segments
TDQS
Scored across 8 tools
Each tool targets a distinct operation: listing variants, searching segments, getting stats, citing, auditing, planning, filtering, and comparing. Though search_segments and filter_segments both work on segments, their preconditions and purposes are clearly different—search is free-form with overrides, while filter requires a versioned audit manifest. No two tools appear interchangeable.
Most tools follow a clear verb_noun pattern (list_corpora, search_segments, cite_corpus, audit_corpus, plan_training_set, filter_segments, compare_corpora). The outlier is 'corpus_stats' which uses noun_noun instead of a get/stats verb, breaking the pattern slightly. This is a minor deviation that doesn't hinder readability.
With 8 tools, the server is well-scoped for its domain of managing and analyzing African speech corpora. Each tool addresses a distinct aspect of the workflow without redundancy or bloat. The count feels just right—not too thin, not overwhelming.
The tool surface covers the core lifecycle of corpus exploration and usage: discovering corpora, searching segments, retrieving stats, citations, audit metrics, planning training sets, filtering based on audits, and comparing variants. There are no glaring gaps such as missing download or update operations, as the focus is analysis rather than modification. The server fulfills its stated purpose comprehensively.
Maintenance
Related MCP Connectors
Read-only corpus catalogs and bounded observations with source dates and rights metadata.
African intelligence infrastructure for AI apps, developers, and data products via MCP.
License-clean African & EM data as citable agent tools: company fundamentals, tenders (OCDS), macro.
Search, sample and query open reproducible datasets published as immutable Parquet with schemas.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MIT-licensed MCP server that provides access to a rolling 24-month corpus of NSE/BSE company documents (concall transcripts, annual reports, investor presentations) with provenance, deduplication, and rights management. It enables searching companies, finding documents, retrieving document content, and checking coverage through a stateless Streamable HTTP MCP endpoint.MIT
- FlicenseNot gradedqualityBmaintenanceEnables users to search and retrieve research datasets via natural language queries, with tools for proposing and committing tag changes. Includes robust authorization, idempotent mutations, and an audit trail.-

corpus.333.ecoofficial
AlicenseNot gradedqualityBmaintenanceEnables agents to search, retrieve, and list open-licensed documents with verifiable provenance, attaching sha256, DOI, and OpenTimestamps proof to every response.643 npmCreative Commons Zero v1.0 Universal- AlicenseNot gradedqualityBmaintenanceProvides read-only search and context-pack creation over a local source library, letting AI assistants retrieve relevant excerpts and audit cited quotations.20MIT