African Speech Corpora MCP
This server lets you explore, audit, and plan training data from African speech corpora (Wolof-first, plus Pulaar and Sereer) through read-only MCP tools.
List corpora – View all language/task/config variants, audit status, verification state, recommended use, and whether they are queryable.
Audit a corpus – Get dated local quality metrics (raw/usable/transcribed/audit-accepted/expert-verified counts and durations) separately from published figures, with provenance and warnings.
Plan training sets – Build de-duplicated, task-aware plans for ASR/TTS/KWS/intent using quality levels (any, transcribed, audit_accepted, expert_verified, wolof_only), with license and benchmark filtering.
Search segments – Search rows in schema-verified variants, with provenance and ephemeral audio URLs.
Filter segments – Filter rows when a row-level manifest exists; otherwise return a structured refusal instead of fake exclusions.
Compare corpora – Compare quality, domain, language purity, license, commercial use, and benchmark status across up to 20 variants.
Get corpus stats – Return exact config-scoped row counts, declared splits, observed configs, and schema discrepancies.
Cite corpora – Retrieve license, BibTeX citation, and parent citations for derivatives.
Provides read-only access to African speech corpora hosted on Hugging Face, enabling tools to list corpora, search transcription segments, retrieve corpus statistics, cite sources, and plan de-duplicated training sets with full provenance.
Click on "Deploy 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., "@African Speech Corpora MCPPlan a de-duplicated training set for Wolof"
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.
African Speech Corpora MCP
A read-only server implementing the Model Context Protocol, an open standard created by Anthropic, over public speech corpora for African languages: Wolof first, plus Pulaar and Sereer.
The project is Wolof-first. The 2.0 catalog contains 14 variants: 11 variants of original sources and 3 derivatives. Pulaar (ful) and Sereer (srr) are represented only by Kallaama variants without local metrics; the project does not claim Swahili or Amharic coverage. The bundled validation lock, generated on August 26, 2026, makes 6 Hugging Face variants queryable. A later validation run may naturally produce a different state.
Version 2.0.0 is distributed on PyPI and published as io.github.papasega/african-speech-corpora in the official MCP Registry.
The server does not train models, download complete corpora, or write to Hugging Face, OpenSLR, Kaggle, GitHub, or any other remote source.
What the server measures
The quality pipeline keeps the following stages separate:
raw audio → usable audio → transcribed audio → audit-accepted audio → expert-verified audioRaw: a file present in the observed snapshot.
Usable: a file remaining after the audit's quantifiable exclusions.
Transcribed: audio associated with a transcription.
Audit accepted: an explicitly named union of expert-verified material and material only assumed valid by the audit.
Expert verified: only
expert_auditedorsource_reported_expert. An “a priori” assessment never enters this level.
Seconds are the canonical duration representation. Decimal hours and HH:MM:SS strings are derived at serialization time. Every audited metric states its scope, source, method, observation date, and confidence. A missing value remains null; it is never converted to zero. Figures published by a project remain under published_metrics, separate from local observations.
Related MCP server: repocritics-mcp-server
2026 Wolof snapshot
The machine-readable source is assets/wolof-audit-2026.csv. The protocol, limitations, and discrepancies with the source table's TOTAL cells are documented in assets/wolof-audit-2026.md.
Seven Wolof variants have a local observation: ALFFA, FLEURS wo_sn, Kallaama Wolof, Urban Bus, Waxal crowdsource, Wolof TTS Baamtu, and WolBanking77. Totals are recomputed from these seven rows and are never stored as a redundant manual total: 148,102 usable files, 64,609 transcribed files, 50,494 audit-accepted files, 2,329,382.06 seconds of audio, 515,185.06 transcribed seconds, and 302,048.06 audit-accepted seconds.
Important limitations:
the FLEURS, Urban Bus, Waxal, Wolof TTS, and WolBanking77 observations described as “a priori” are
audit_assumed_valid, not expert verified;ALFFA explicitly has zero expert-verified files in this snapshot;
the 153 Kallaama files are long radio or interview recordings, not 153 speech turns; 36 files and 12:49:36 are attributed to the local protocol's
source_reported_expertbasis;Urban Bus contains substantial French content without a quantified rate and therefore has
language_purity=mixed_fr;Waxal separates 517:38:05 of raw audio, usable notably for SSL, from only 13:41:28 transcribed for supervised ASR;
the local Wolof TTS Baamtu snapshot—36,009 files and 37:04:49—is distinct from the rounded public metric, and this TTS corpus is excluded from ASR by default;
WolBanking77 distinguishes 2,563 observed audio files from the 9,791 text phrases reported elsewhere;
Afrivoice publishes 530.74 hours of Wolof audio, including 102.96 transcribed hours. These are source-published figures, not measurements from the 2026 local audit and not evidence of expert verification. The dataset is auto-gated on Hugging Face, so its files, schema, splits, and durations cannot be independently checked without accepting its access conditions and supplying a token; it therefore remains
audit_status=pending;because the exact source observation date is unavailable,
observed_at=2026intentionally has year-only precision.
Installation
The package requires Python 3.11 or newer. Python 3.12 is recommended and is selected explicitly below so that the virtual environment does not accidentally inherit an older system interpreter such as Python 3.9:
Install the published release from PyPI:
python3.12 --version
python3.12 -m venv .venv
source .venv/bin/activate
python --version
python -m pip install "african-speech-mcp==2.0.0"For development, install an editable checkout with the development dependencies:
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 ".[dev]"Both version commands should report Python 3.12.x. Creating the environment with python -m venv .venv is safe only when that python executable is already Python 3.11 or newer. If installation fails with an error such as:
ERROR: Package 'african-speech-mcp' requires a different Python: 3.9.6 not in '>=3.11'then the virtual environment was created with Python 3.9.6. Deactivate it, remove or rename that local .venv, install Python 3.12 if necessary, and recreate the environment with python3.12 -m venv .venv. A virtual environment keeps the interpreter with which it was created; activating it does not upgrade Python.
The stdio server starts with no arguments:
african-speech-mcpIt can also be started explicitly:
african-speech-mcp serve --transport stdio
african-speech-mcp serve --transport streamable-httpExample Claude Desktop configuration after installing the package, preferably using an absolute path:
{
"mcpServers": {
"african-speech-corpora": {
"command": "/absolute/path/to/.venv/bin/african-speech-mcp"
}
}
}Version 2.0.0 is published on PyPI and can be installed with pip. The repository installation remains the appropriate choice for development or unreleased changes.
MCP tools
All eight tools declare read_only_hint=true, destructive_hint=false, and idempotent_hint=true.
Tool | Purpose |
| List variants, audit state, recommended use, and validation state. |
| Return counts, durations, verification basis, warnings, and separate published figures. |
| Build a plan without double-counting derivatives or including benchmarks by default. |
| Filter only when a row-level manifest exists; otherwise refuse to promise exclusions. |
| Compare quality, domain, language purity, license, and metric freshness. |
| Search rows in a variant whose remote schema has been validated. |
| Return sizes for the variant's config only and report schema discrepancies. |
| Return the license, citation, and parent citations for a derivative. |
Conceptual examples:
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,
)The last call currently returns filter_available=false. Aggregate totals establish that Waxal contains 430 duplicates and 22 corrupt or non-Wolof files, but they provide no row identifiers. The server therefore refuses to pretend that it removed those rows.
plan_training_set semantics
quality accepts:
any: select by task and license without requiring transcription;transcribed: use actually transcribed duration;audit_accepted: include expert and assumed-valid material, with a visible breakdown and warning;expert_verified: use only genuinely expert verification bases;wolof_only: excludemixed_fr,mixed,unknown, and variants without sufficient language-purity evidence.
metric_source is either latest_audit (the default) or published. Variants without a known duration remain listed in hours_unknown_for. FLEURS is a benchmark and stays out of training unless include_benchmarks=true. Urban Bus requires include_mixed_language=true. TTS variants stay out of ASR unless explicitly enabled, and derivatives are never added to their parents. Unknown, non-commercial, share-alike, or unconfirmed licenses produce appropriate warnings; commercial_use=null is never presented as commercially compatible.
Persistent Hugging Face validation
african-speech-mcp validate
african-speech-mcp validate --write
african-speech-mcp validate --output validation-lock.jsonValidation checks the dataset identifier, config, splits, transcription column, and any declared language column. The lock is written through atomic replacement and records checked_at, observed schema information, and a stable fingerprint. It is also bound to the catalog hash, so the server rejects a stale lock.
By default, --write creates validation-lock.json in the current directory without modifying the installed package. To use it afterward:
export ASM_VALIDATION_LOCK_PATH="$PWD/validation-lock.json"
african-speech-mcpPossible states are unverified, verified, gated, unavailable, schema_mismatch, and quality_blocked. A responding identifier is never marked verified when the expected config or column is missing. For Afrivoice, set ASM_HF_TOKEN locally before validation; the token is neither serialized nor logged.
corpus_stats filters strictly by config, so FLEURS wo_sn never includes another language. A multilingual distribution without a separate config must declare a language column and accepted values. When the server cannot guarantee that filter, it refuses the request or returns an explicit warning.
Catalog and architecture
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.jsonThere is no longer a second root-level corpora.json. The audit CSV remains canonical under assets/, and Hatch includes it deterministically in the wheel. Tests check totals and references between the CSV and catalog.
Useful variables include ASM_CATALOG_PATH, ASM_VALIDATION_LOCK_PATH, ASM_AUDIT_LOG_PATH, ASM_HF_TOKEN, ASM_REQUEST_TIMEOUT_S, ASM_REQUEST_RETRIES, and ASM_VALIDATION_CONCURRENCY. Runtime logs go to stderr so that stdout remains reserved for the stdio protocol.
Contributing an audit or manifest
A new audit must:
add unit rows to the CSV, never a manual TOTAL row;
provide
audit_id,observed_at,source_reference, method, confidence, and verification basis;distinguish an observed zero from a missing value;
reference the audit from the matching variant;
document limitations in Markdown and add consistency tests.
To enable real filtering, provide a versioned manifest with at least:
audit_id,corpus_key,revision,row_id,audio_path,is_duplicate,is_empty,is_corrupt,is_wolof,transcript_quality,reasonIdentifiers must come from the audited snapshot. They must never be invented from aggregate counts.
Development and release preparation
python -m pip install -e ".[dev]"
ruff check src tests scripts
pytest -q
python -m buildCI runs these checks on Python 3.11 and 3.12, installs the built wheel in a clean environment, and tests both the CLI and a real MCP stdio exchange. Version 2.0.0 is a documented breaking release: the public unit is now a single-language, single-task, single-config variant with more structured quality responses.
Publishing a non-prerelease GitHub Release runs .github/workflows/publish-pypi.yml. The workflow verifies the attached distributions, publishes them to PyPI through Trusted Publishing, then validates and publishes the matching server.json to the official MCP Registry through GitHub OIDC. No long-lived PyPI or MCP Registry token is stored. If PyPI succeeded but the registry step failed, rerun the workflow manually with the same tag and registry_only=true; an already active registry version is detected and treated as success.
License
The server code is licensed under Apache-2.0. Each corpus retains its own license. Catalog entries marked TO BE CONFIRMED or SEE DATASET ... intentionally remain uncertain and must be checked against the primary source before any use, especially commercial use.
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
Focusvo: the site's own MCP server — dataset; every answer cites the site.
Huddlevo: the site's own MCP server — dataset; every answer cites the site.
Soapvo: the site's own MCP server — dataset; every answer cites the site.
Clientvo: the site's own MCP server — dataset; every answer cites the site.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA read-only MCP server that enables natural language querying of DSpace 7+ repositories via the REST API, allowing users to search, retrieve items, and analyze repository data.2MIT
- AlicenseAqualityCmaintenanceProvides read access to community-written summaries, scores, and reviews of open-source repositories via the RepoCritics corpus. Enables search and retrieval of wiki pages, reviews, metadata, and AI reports for repositories.75 npmMIT
- 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.1,446 npmCreative Commons Zero v1.0 Universal