African Speech Corpora Quality Audit について
アフリカ諸語の音声コーパスを選ぶ研究者向けの、Wolofを中心とした読み取り専用MCPサーバーです。ローカル観測値、公表値、専門家による検証を区別し、訓練データの計画やコーパス比較を支援します。
主な機能
- 01コーパスの種類と検証状態の一覧
- 02件数、時間、検証根拠の監査
- 03タスクと品質別の訓練データ計画
- 04品質、分野、ライセンスの比較
- 05Hugging Faceデータセット構造の検査
活用シーン
- 01Wolof ASR訓練用コーパスの選定
- 02専門家検証済みと有効性仮定データの区別
- 03ライセンスと言語純度による比較
MCP 対応
MCPクライアントに、コーパス検索、監査、訓練データ計画、データセット検証を行う8つの読み取り専用・冪等ツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx african-speech-mcpASM_CATALOG_PATHOptional path to a custom corpus catalog JSON file.ASM_AUDIT_LOG_PATHOptional path receiving one JSON audit line per tool call.ASM_HF_TOKENシークレットOptional Hugging Face token, only needed for gated datasets.ASM_VALIDATION_LOCK_PATHOptional path to a local schema-validation lock bound to the catalog hash.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
8掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| task | any | いいえ | タスクフィルター。 |
| language | any | いいえ | ISO 639-3 フィルター。 |
| include_derivatives | boolean | いいえ | 派生データを含めます。 |
詳細
African Speech Corpora MCP
アフリカ言語の公開音声コーパスを対象とする、Anthropicが策定したオープン標準であるModel Context Protocolを実装した読み取り専用サーバーです。まずはウォロフ語に対応し、プラール語とセレール語にも対応しています。
このプロジェクトはウォロフ語を優先しています。2.0のカタログには14のバリアントが含まれ、元のソースのバリアントが11、派生バリアントが3です。プラール語(ful)とセレール語(srr)は、ローカル指標のないKallaamaのバリアントのみで構成されています。このプロジェクトは、スワヒリ語やアムハラ語への対応をうたっていません。2026年8月26日に生成された同梱の検証ロックにより、6つのHugging Faceバリアントをクエリできます。後日の検証では、状態が自然に変わる場合があります。
バージョン2.0.0はPyPIで配布され、公式MCP Registryにio.github.papasega/african-speech-corporaとして公開されています。
このサーバーはモデルをトレーニングしたり、コーパス全体をダウンロードしたり、Hugging Face、OpenSLR、Kaggle、GitHub、その他のリモートソースに書き込んだりすることはありません。
サーバーが測定するもの
品質パイプラインでは、次の段階を個別に扱います。
raw audio → usable audio → transcribed audio → audit-accepted audio → expert-verified audio
- Raw:観測されたスナップショットに存在するファイルです。
- Usable:監査で定量化可能な除外項目を適用した後に残るファイルです。
- Transcribed:書き起こしが紐付けられた音声です。
- Audit accepted:専門家が検証した素材と、監査で有効と仮定されただけの素材を明示的にまとめたものです。
- Expert verified:
expert_auditedまたはsource_reported_expertのみです。「a priori」評価がこのレベルに含まれることはありません。
秒が標準の時間表記です。10進数の時間とHH:MM:SS形式の文字列は、シリアライズ時に導出されます。監査対象のすべての指標には、対象範囲、ソース、手法、観測日、信頼度が明記されています。値が欠落している場合はnullのままとし、ゼロに変換することはありません。プロジェクトが公開した数値はpublished_metricsに記録し、ローカルでの観測結果とは分けています。
2026年 Wolof スナップショット
機械可読なソースは assets/wolof-audit-2026.csv です。プロトコル、制限事項、およびソース表の TOTAL セルとの不一致については、assets/wolof-audit-2026.md に記載されています。
7つの Wolof 変種について、ローカルで観測されています。ALFFA、FLEURS wo_sn、Kallaama Wolof、Urban Bus、Waxal crowdsource、Wolof TTS Baamtu、WolBanking77 です。合計値はこれら7行から再計算され、冗長な手動合計として保存されることはありません。有効なファイル数は148,102、文字起こし済みファイル数は64,609、監査で受理されたファイル数は50,494、音声の長さは2,329,382.06秒、文字起こし済み音声の長さは515,185.06秒、監査で受理された音声の長さは302,048.06秒です。
重要な制限事項:
- 「a priori」と記載された FLEURS、Urban Bus、Waxal、Wolof TTS、WolBanking77 の観測は、専門家による検証済みではなく、
audit_assumed_validです; - このスナップショットでは、ALFFA の専門家検証済みファイル数は明示的に0です;
- Kallaama の153ファイルは長時間のラジオまたはインタビュー録音であり、153件の発話ターンではありません。36ファイル、12:49:36は、ローカルプロトコルの
source_reported_expert基準に基づいています; - Urban Bus には、割合が定量化されていない大量のフランス語コンテンツが含まれているため、
language_purity=mixed_frとなっています; - Waxal では、SSL に特に利用できる生音声517:38:05と、教師あり ASR 用に文字起こしされたわずか13:41:28が区別されています;
- ローカルの Wolof TTS Baamtu スナップショット(36,009ファイル、37:04:49)は、丸められた公開指標とは異なります。また、この TTS コーパスはデフォルトで ASR の対象外です;
- WolBanking77 では、観測された音声ファイル2,563件と、別の場所で報告されているテキストフレーズ9,791件が区別されています;
- Afrivoice では、文字起こし済みの102.96時間を含む、Wolof 音声530.74時間が公開されています。これらはソースが公開した数値であり、2026年のローカル監査で測定されたものではなく、専門家による検証の証拠でもありません。このデータセットは Hugging Face で自動的にアクセス制限されているため、アクセス条件に同意してトークンを提供しない限り、ファイル、スキーマ、分割、長さを独立して確認できません。そのため、
audit_status=pendingのままとなっています; - ソースの正確な観測日が不明なため、
observed_at=2026は意図的に年単位の精度となっています。
インストール
このパッケージには Python 3.11 以降が必要です。以下では Python 3.12 を明示的に選択することを推奨しています。これにより、Python 3.9 など古いシステムインタープリターを仮想環境が誤って引き継ぐことを防げます。
公開リリースを 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"
開発する場合は、開発用依存関係とともに編集可能なチェックアウトをインストールします。
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]"
どちらのバージョン確認コマンドも、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"
}
}
}
バージョン2.0.0は PyPI で公開されており、pip でインストールできます。開発または未リリースの変更には、リポジトリからのインストールが適しています。
MCP ツール
8 つのツールすべてで、read_only_hint=true、destructive_hint=false、idempotent_hint=true が宣言されています。
| ツール | 目的 |
|---|---|
list_corpora | バリエーション、監査状態、推奨用途、検証状態を一覧表示します。 |
audit_corpus | 件数、期間、検証の根拠、警告、公開済みの数値を個別に返します。 |
plan_training_set | 派生データを二重に数えたり、ベンチマークをデフォルトで含めたりせずに、計画を作成します。 |
filter_segments | 行レベルのマニフェストがある場合にのみフィルタリングします。ない場合は、除外を保証せずに拒否します。 |
compare_corpora | 品質、ドメイン、言語の純度、ライセンス、メトリクスの鮮度を比較します。 |
search_segments | リモートスキーマが検証済みのバリエーション内の行を検索します。 |
corpus_stats | バリエーションの設定に基づくサイズのみを返し、スキーマの不一致を報告します。 |
cite_corpus | 派生データのライセンス、引用情報、親データの引用情報を返します。 |
概念的な例:
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 件あることはわかりますが、行 ID は示されていません。そのため、サーバーは該当する行を削除したかのように装うことを拒否します。
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 には含まれず、派生データが親データに追加されることはありません。不明、非商用、継承、または未確認のライセンスには適切な警告が表示されます。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 はそれを決定論的にホイールへ含めます。テストでは、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 プロトコル用に確保されます。
監査またはマニフェストの追加
新しい監査では、次のことを行う必要があります。
- 手動で
TOTAL行を追加せず、CSV にユニットごとの行を追加します。 audit_id、observed_at、source_reference、method、confidence、verification basis を記載します。- 観測されたゼロと値の欠落を区別します。
- 対応するバリアントから監査を参照します。
- 制約事項を 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 build
CI では Python 3.11 と 3.12 でこれらのチェックを実行し、クリーンな環境にビルド済みホイールをインストールして、CLI と実際の MCP stdio 通信の両方をテストします。バージョン 2.0.0 は、文書化された破壊的変更を伴うリリースです。公開ユニットが、より構造化された品質レスポンスを備えた、単一言語、単一タスク、単一設定のバリアントになりました。
プレリリースではない GitHub Release を公開すると、.github/workflows/publish-pypi.yml が実行されます。このワークフローは添付された配布物を検証し、Trusted Publishing を通じて PyPI に公開した後、GitHub OIDC を通じて対応する server.json を検証し、公式 MCP Registry に公開します。長期間有効な PyPI または MCP Registry のトークンは保存されません。PyPI への公開に成功した後、レジストリのステップが失敗した場合は、同じタグを指定し、registry_only=true を設定して、手動でワークフローを再実行してください。有効化済みのレジストリバージョンは検出され、成功として扱われます。
ライセンス
サーバーコードは Apache-2.0 ライセンスで公開されています。各コーパスには、それぞれ独自のライセンスが適用されます。TO BE CONFIRMED または SEE DATASET ... と記されたカタログ項目は、意図的に不確かなままにしてあります。特に商用利用の場合は、使用する前に必ず一次ソースで確認してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。