Skip to main content
Glama

نَصّ — Nass MCP

خادم MCP مجاني ومفتوح المصدر لتفريغ مقاطع YouTube، مع الرجوع إلى الصوت الفعلي إذا لم تتوفر subtitles/captions، ومن دون الاعتماد على API مدفوعة.

الحالة: نسخة أولية مكتوبة ومختبرة اختبارات وحدة محلية، وليست خدمة إنترنت منشورة أو موصولة بحساب ChatGPT. اختبارات الشبكة الحقيقية تعتمد على بيئة التشغيل والوصول إلى YouTube. لا يمكن ضمان الوصول إلى جميع المقاطع.

المتطلبات

  • Python 3.11+، ffmpeg وffprobe، وDeno (مفضّل) أو Node حديث لدعم تحديات JavaScript الحديثة في yt-dlp. مع Node قد يلزم ضبط yt-dlp لتفعيله صراحةً. راجع دليل EJS.

  • حاسوب يعمل باستمرار إذا رغبت في ربطه بـChatGPT عبر شبكة؛ لا حاجة لاستضافة تجارية أو دفع مقابل نموذج Whisper.

  • تنزيل النموذج للمرة الأولى يحتاج إنترنت ومساحة تخزين؛ بعد ذلك يتعرف Whisper محليًا على الملفات الصوتية، ولا يرسلها إلى طرف ثالث.

Related MCP server: YouTube Transcript MCP Server

التثبيت

# Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y ffmpeg
# ثبّت Deno من مصدره الرسمي (الإصدارات المدعومة مذكورة في Wiki الخاصة بـyt-dlp).

python -m venv .venv
source .venv/bin/activate
python -m pip install -U pip
pip install -e '.[all]'

nass-doctor
nass-mcp  # stdio; يطلقه MCP host تلقائيًا عادة

للتجربة عبر HTTP محليًا:

NASS_TRANSPORT=http nass-mcp
# http://127.0.0.1:8000/mcp

تنبيه أمني: لا تفتح المنفذ للإنترنت بدون نظام توثيق حقيقي (OAuth أو reverse proxy مع ضوابط وصول). HTTP الافتراضي محلي فقط. ربط ChatGPT يتطلب وسيلة وصول HTTPS آمنة وميزات متاحة لحسابك؛ لا يكفي نشر الشيفرة.

ربط MCP محلي بعميل يدعم stdio

استدعِ البرنامج التنفيذي nass-mcp من البيئة الافتراضية، أو ضعه في إعداد الخادم:

{
  "mcpServers": {
    "nass": {
      "command": "/absolute/path/to/nass-mcp/.venv/bin/nass-mcp",
      "env": {
        "NASS_WHISPER_MODEL": "small",
        "NASS_DATA_DIR": "/absolute/path/to/my-nass-data"
      }
    }
  }
}

الاستخدام

  1. nass_health: فحص المكتبات وFFmpeg وبيئة JS ومُعرّفات المحركات.

  2. nass_start_transcription(video_url, language="ar", mode="audio"): تفريغ الكلام من الصوت مباشرة. بينما mode="auto" يفضل النصوص المتاحة توفيرًا للموارد، وmode="verify" يقارن مسارين مستقلين دون الدمج الآلي المضلل.

  3. nass_job_status(job_id): الاستعلام عن الحالة ومراحل النجاح والفشل.

  4. nass_get_transcript(job_id, start_segment, count): قراءة النص مقطعًا مقطعًا مع التوقيت حتى للفيديوهات الطويلة.

  5. nass_start_audio_download(video_url): جلب الصوت فعليًا بمهمة خلفية قابلة للاستعلام، أو nass_download_original_audio(video_url) للمقاطع القصيرة. الملف الصوتي على جهاز تشغيل الخادم، وليس هاتف المستخدم.

  6. nass_audio_excerpt(job_id, start_seconds, duration_seconds): إعادة مقطع صوتي حقيقي يصل إلى 45 ثانية ككتلة صوت MCP للمراجعة السمعية؛ ويعتمد سماعه داخل الواجهة على دعم العميل لمحتوى الصوت.

  7. nass_export(job_id, output_format="srt"/"txt"/"json"): تصدير النتيجة محليًا.

  8. nass_search_transcript(job_id, query, max_matches=15): البحث داخل التفريغ عن الأقوال الموثقة زمنيًا، مع رابط فيديو يبدأ عند الموضع نفسه. البحث يتسامح مع التشكيل وبعض صيغ الألف والـ«ى»، ولا يغير النص الأصلي.

  9. nass_start_local_file(filename): تفريغ ملف صوتي وضعته أنت تحت NASS_MEDIA_DIR، عند تعذر استخراج الفيديو عبر الإنترنت.

الإضافات المستقلة من المشاريع غير المشهورة (v0.2.0)

اكتُشفت مشروعات قليلة الشهرة قابلة لإضافات مفيدة فعلًا. أضيفت ثلاث وصلات اختيارية، ويستمر الخادم في العمل دون تثبيتها:

  • Go yt-transcript للحصول على captions عبر Android/IOS InnerTube وwatch-page. التثبيت (Go 1.23+): go install github.com/rapha30/yt-youtube-transcript/cmd/yt-transcript@latest

  • Go youtubedr لمصدر صوت مستقل. التثبيت (تتطلب نسخته الحالية Go 1.26+): go install github.com/kkdai/youtube/v2/cmd/youtubedr@latest

  • Node youtubei.js لاستخراج الصوت مع حد حجم مفعّل أثناء البث. بعد تثبيت nass-mcp:

mkdir -p "$HOME/.local/share/nass-youtubejs"
python -c 'from pathlib import Path; import nass_mcp; print(Path(nass_mcp.__file__).parent / "_node" / "youtubejs_audio.mjs")'
# انسخ ملف youtubejs_audio.mjs المشار إليه إلى المجلد أعلاه، ثم نفّذ:
cd "$HOME/.local/share/nass-youtubejs"
npm install --no-audit --no-fund youtubei.js
export NASS_YOUTUBEJS_SCRIPT="$HOME/.local/share/nass-youtubejs/youtubejs_audio.mjs"

هذا التثبيت الاختياري يجب أن يتم على جهاز الخادم؛ لا يتم تحميل حزم Node تلقائيًا أثناء طلب MCP. nass_health يعرض توافر ملفات المحولات، وباقي البرامج؛ وقد يظل فشل الاتصال بالمصدر ممكنًا بعد تثبيتها.

تفاصيل الدراسة والمشروعات التي تقرر عدم دمجها: docs/NICHE_RADAR.md.

مصادر متعددة بدون اشتراكات

المرحلة

المسار

النوع

ملاحظات

captions

youtube-transcript-api

مجاني، لا مفتاح

قد يتعطل عند حجب IP أو توقف واجهة المصدر

captions

yt-dlp subtitles

مجاني

مصدر برمجي ثانٍ، لكن يعتمد كذلك على بيانات يوتيوب

captions

yt-transcript (Go)

مجاني اختياري

بدائل InnerTube مستقلة داخل الأداة

audio

yt-dlp default player

مجاني

يحتاج تحديث وإعداد EJS/بيئة JS وفقًا ليوتيوب

audio

yt-dlp iOS player

مجاني

عميل بديل، ليس ضمانًا لتجاوز جميع أنواع المنع

audio

pytubefix

مجاني

مكتبة استخراج مستقلة برمجيًا؛ نفس الموقع مصدره

audio

YouTube.js

مجاني اختياري

JavaScript InnerTube؛ يحتاج Node وحزمة npm محلية

audio

youtubedr

مجاني اختياري

Go؛ يختار itag 140 الصوتي إن كان موجودًا

cache

إعادة استخدام الصوت والنص السابقين

مجاني ومحلي

يعمل حتى إذا تعطل يوتيوب بعد الحصول على نسخة صالحة

ASR

faster-whisper

مجاني ومحلي

الافتراضي small/CPU int8؛ يدعم العربية

ASR

whisper.cpp

مجاني ومحلي

نسخة بديلة تتطلب binary وملف نموذج محلي

ASR

Groq

اختياري بخطة مجانية محدودة

ليس مطلوبًا للتشغيل المجاني الدائم؛ يحتاج مفتاحًا وموافقة صريحة على رفع الصوت

لا نستعين بمواقع proxy مجهولة، ولا نتجاوز إعدادات خصوصية الفيديو، ولا نستخدم بيانات دخول أو رموز جلسات أو نسخًا غير مصرح بها.

إعدادات مفيدة

export NASS_WHISPER_MODEL=small   # medium/large-v3 متاحة، لكنها تحتاج قدرات أعلى
export NASS_INITIAL_PROMPT='حديث، إسناد، رواية، الصحابة، الإمام البخاري، الإمام مسلم' 
export NASS_DEVICE=cpu
export NASS_COMPUTE_TYPE=int8
export NASS_WORKERS=1
export NASS_JOB_QUEUE_LIMIT=8  # حصة لكل عملية تشغيل لمنع تراكم المهام
export NASS_PROVIDER_TIMEOUT=600
export NASS_AUDIO_CACHE=1
export NASS_AUDIO_CACHE_LIMIT_BYTES=3221225472
export NASS_CAPTION_CACHE_SECONDS=86400
export NASS_MAX_DURATION_SEC=14400
export NASS_MEDIA_DIR="$HOME/nass-input"

# بديل Whisper.cpp إذا ثبتته وأنزلت نموذجه:
export NASS_WHISPER_CPP_BIN=/path/to/whisper-cli
export NASS_WHISPER_CPP_MODEL=/path/to/ggml-model.bin

# بديل سحابي مجاني *اختياري* وخاضع للحصص والخصوصية:
export NASS_ALLOW_EXTERNAL_ASR=1
export GROQ_API_KEY='YOUR_KEY'

احتياطات منهجية للباحث الشرعي: تخريج الأحاديث ومناقشة الأقوال لا يجوز بناؤهما على التفريغ الآلي وحده. يجب الإبقاء على الرابط والتوقيت، والتمييز بين caption يدوي، وcaption تلقائي، وASR من الصوت، والتحقق من الألفاظ المشكلة عبر سماع المقطع.

تجربة حيّة عند توفر الإنترنت

PYTHONPATH=src python scripts/live_smoke.py 'https://youtu.be/QxC5E44QoZY' --mode audio --language ar

هذا الأمر لم يُختبر ضد YouTube من داخل بيئة تأليف المشروع بسبب غياب حزم الاعتماد والوصول المباشر. نجاح الاختبارات المحلية لا يُغني عن اختبار التشغيل الحيّ. تُحفظ النتيجة، بما فيها سجل إخفاق كل مزوّد، بصيغة JSON.

لدمج الخادم مع «الباحث الشرعي» انظر integration/RESEARCHER_INTEGRATION.md.

تطوير لاحق

  • تحميل وتشغيل واقعي على بيئة متصلة مع تقارير لروابط حقيقية متنوعة (منها فيديوهات عربية بلا captions)، وتحديث مستمر عند تغييرات YouTube.

  • حماية HTTP بOAuth/HTTPS ودمج رسمي مع حساب المستخدم حيث تسمح سياسات المنتج.

  • تخزين مؤقت مع حصص وإيقاف للمهام واختبارات تكامل، وواجهة لعرض مقارنة النصوص مع الصوت. حُدِّد عدد المهام المنتظرة في v0.2.0، لكن إلغاء المهام وإدارة التخزين عبر عمليات متعددة لم يُنفذا بعد.

اختبارات الإصدار 0.2.1

pip install -e '.[test]'
pytest -q

اجتاز الإصدار 39 اختبارًا محليًا (35 اختبارًا سابقًا وأربعة اختبارات تشغيلية جديدة) تشمل إخفاق مزودَي captions ونجاح الثالث، وإخفاق أربعة مسارات صوتية ونجاح الخامس، ورفض ملف فيديو لا يحوي صوتًا. البيئة التي أُعدّ فيها هذا الإصدار لم تتمكن من استخدام DNS أو تنزيل بيانات YouTube؛ لذلك لا يُدّعى إجراء اختبار حيّ.

حدود معروفة

  • فيديوهات YouTube المحجوبة، أو التي تحتاج موافقات حقوق/تسجيل دخول، قد تفشل جميع طرق الصوت معها؛ استخدم حينها ملفًا تملكه أو لديك إذن باستخدامه.

  • الموديلات الكبيرة مكلفة حاسوبيًا وإن كانت مجانية ماليًا. أول تشغيل قد يحمّل وزن النموذج.

  • الفشل المتعدد في حال جميع المسارات تعتمد على منع مشترك (مثل IP) لا يُحل بمجرد زيادة عدد المكتبات.

  • الـMCP يعمل الآن داخل بيئة عملية واحدة؛ قاعدة المهام مخزنة ولكن المهام الجارية تحتاج إعادة إرسال بعد إعادة تشغيل الخدمة.

تقرير الاختبارات التشغيلية (20 أكتوبر 2026)

لم تنجح اختبارات YouTube الحية، ولم يبدأ خادم MCP الحقيقي، بسبب عدم توفر DNS وغياب حزم mcp وyt-dlp وfaster-whisper في بيئة الفحص. الاختبارات الناجحة تثبت مراحل FFmpeg/FFprobe وNode وJobStore مع مصدر صوت فعلي محلي، لكن مصدر YouTube.js ومسار ASR في اختبارات التكامل جرى تمثيلهما بمزوّدات محلية تجريبية. هذا لا يثبت دقة نموذج Whisper أو وصول المشروع الفعلي إلى YouTube.

أثناء المراجعة تم تصحيح مسار استيراد Audio حسب هيكلة MCP SDK v2 إلى mcp.server.mcpserver.utilities.types.

أعد الفحص بعد تثبيت جميع الاعتماديات والوصول للإنترنت بواسطة:

python scripts/operational_check.py --live \
  --video 'https://youtu.be/QxC5E44QoZY' \
  --output nass-operational-report.json

التفاصيل في docs/OPERATIONAL_TEST_2026-10-20.md والملف docs/operational-report.json، مع نتائج محاولتي YouTube في docs/attempts-*.

Remote MCP gateway — Netlify (v0.3.0)

The repository now includes remote-netlify/ and a protected Python ASGI worker (nass_mcp.remote). This separates Netlify's lightweight, stateless HTTPS gateway from the actual multi-provider YouTube audio capture and Whisper execution on a Python host.

The gateway has no CPU-heavy ASR and cannot operate if the upstream host is offline. Source and installation notes: remote-netlify/README.md.

pip install -e '.[all,remote]'
export NASS_BACKEND_TOKEN="$(openssl rand -hex 32)" # set the same secret on Netlify
nass-backend  # binds only to 127.0.0.1:8000

Expose the worker via an authenticated HTTPS tunnel that preserves /mcp, then set Netlify's NASS_BACKEND_URL and NASS_BACKEND_TOKEN environment variables. A third, separate NASS_MCP_BEARER_TOKEN is the MCP client's authentication key. After deploying the Netlify code, the client connects to https://<site>.netlify.app/mcp.

Deployment status (2026-10-20): the Netlify project nass-mcp-remote was created in the linked account, but its code is not yet deployed and no permanent ASR worker has been provisioned. Do not treat the project URL as an operational MCP endpoint before deployment and real YouTube/audio testing.

Render Free backend experiment (v0.3.1)

Dockerfile and render.yaml are now present in the repository root. This is a deployable proposal, not evidence of deployment. See docs/RENDER_REMOTE_SETUP.md.

Render Free has 512 MiB RAM and 0.1 CPU. The preconfigured model is multilingual Whisper tiny; larger Arabic ASR workloads can fail or run too slowly. No audio transcription may be claimed complete until it has finished and been verified against the source. The free worker is not durable across sleep/redeploy.

Available Tools

10 tools
nass_audio_excerptB

Return an audio Content block containing up to 45 seconds of actual spoken audio. Useful for directly checking critical quotations. Client audio support varies.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes
start_secondsYes
duration_secondsNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden. It does disclose the return shape (an audio Content block), the 45-second cap, and the client-support caveat, which is genuine added context. It omits error behavior (e.g., start_seconds beyond the recording length) and how the 45s cap interacts with a larger requested duration.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the primary purpose front-loaded and no filler. The only weakness is that 'up to 45 seconds' is left slightly ambiguous against the duration_seconds parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description correctly explains the return type and size limit. For a 3-parameter tool with zero schema documentation, though, it leaves the agent without parameter semantics or failure-mode information, so it is only minimally sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all three parameters, so the description must compensate and largely does not. It references a duration ceiling but never explains job_id, start_seconds units/offset behavior, or the duration_seconds parameter and its 15-second default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Return an audio Content block') plus a concrete scope limit (up to 45 seconds of spoken audio), which distinguishes it from full-audio siblings like nass_download_original_audio and nass_start_audio_download. It stops short of naming those siblings explicitly, so differentiation is inferable rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for directly checking critical quotations' implies the intended use case, and 'Client audio support varies' is a caveat. However, it never says when NOT to use it (e.g., for full audio use the download tools) or what to do if the client cannot render audio, so routing guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nass_download_original_audioB

Obtain an actual audio media file on the MCP host, without using any captions. A synchronous download is appropriate for relatively short public videos. The returned file path is server-local and never implies user-side download.

ParametersJSON Schema
NameRequiredDescriptionDefault
video_urlYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully clarifies that the file lands on the MCP host and that the returned path is server-local, which resolves the main ambiguity for a download tool. It omits permissions, size/duration limits for 'synchronous' calls, and error behavior for non-public or unsupported videos.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler, and the most decision-relevant clauses (caption-free, synchronous, server-local path) are front-loaded. The unusual line breaks read as artifacts rather than reasoning, but content-wise it is tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter download tool with no output schema, the description covers the essential output semantics (server-local file path) but leaves the input format, limits on synchronous downloads, and failure modes unaddressed. It is adequate but not complete given the absence of both annotations and schema descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description adds no information about the single video_url parameter's expected format or accepted URL shapes. Even though the parameter is fairly self-evident, the description fails to compensate for the complete absence of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (obtain) and resource (audio media file), and distinguishes itself from caption/transcript tools with 'without using any captions.' It stops short of naming its closest sibling (nass_start_audio_download), so an agent must infer the sync-vs-async routing from the word 'synchronous' rather than an explicit comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'A synchronous download is appropriate for relatively short public videos' gives a concrete when-to-use condition and implicitly signals that longer jobs belong to the async sibling. It never names that alternative tool or states exclusions (e.g., private videos), so guidance is clear but incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nass_exportB

Export transcript as SRT, TXT or JSON on the server, for later sharing/analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes
output_formatNosrt

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full behavioral burden. It does disclose one meaningful trait — the export is produced 'on the server' rather than returned inline — but says nothing about the return value (path/URL/job handle), overwrite behavior, or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the action and supported formats front-loaded and no filler. It could be slightly stronger by ordering the server-side detail before the purpose clause, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter, no-annotation, no-output-schema tool, the agent is left without the essentials: what the call returns, where the exported file lands, or how to retrieve it afterwards. The description is directionally right but under-informed for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and output_format has no enum, so the description's enumeration of SRT/TXT/JSON genuinely adds allowed values the schema lacks. However, job_id is undocumented and no format-specific behavior (e.g. whether JSON includes timestamps) is explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Export') and resource ('transcript') plus the supported output formats. It is distinguishable from read siblings like nass_get_transcript, but it never names an alternative, so the differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The trailing phrase 'for later sharing/analysis' hints at intent but gives no when-to-use condition or when-not guidance. With nass_get_transcript in the sibling list, the description never explains why an agent would export rather than simply fetch the transcript.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nass_get_transcriptC

Read long transcripts in reliable pages; next_segment identifies the next page.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
job_idYes
start_segmentNo
with_timestampsNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose the pagination behavior and the existence of a next_segment return field, which is genuinely useful since there is no output schema. It does not mention the required job_id, whether the job must be finished, permissions, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the core action front-loaded and zero filler. The second clause is slightly confusing because next_segment is a response field, not a parameter, but it is still economical.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter tool with a required job_id, no annotations, no output schema, and 0% parameter coverage, this description is too thin. The pagination hint helps, but nothing tells the agent how to form a valid first call or what the returned pages contain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and none of the four parameters are explained. 'Pages' loosely gestures at start_segment/count, but job_id (required), with_timestamps, and the default values are left entirely to the schema titles, which convey nothing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Read) and resource (transcripts) and adds the scope qualifier 'long' plus the pagination mechanic. It is distinguishable from the sibling nass_search_transcript, though it never names or contrasts with that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by 'Read long transcripts' - there is no explicit when-to-use, no when-not-to-use, and no reference to alternatives like nass_search_transcript or nass_export. An agent must guess whether this is for full retrieval versus search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nass_healthA

Inspect availability of independent caption/audio/ASR backends; never claim success from installation alone.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It does add one genuinely useful behavioral fact — that installation state is not evidence of availability — but it never states whether the check is read-only, whether it has side effects, or what the reported statuses look like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single clause plus a single imperative, front-loaded with the operation and resource. Every word earns its place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless diagnostic, the description covers intent and one interpretation caveat, but with no output schema it should ideally say what the inspection returns (per-backend status shape, which backends). The agent knows why to call it but not what to expect back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing to disambiguate and the baseline for a parameterless tool applies. No parameter-level clarification is needed or missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (inspect) and resource (availability of independent caption/audio/ASR backends), which distinguishes it from the job/transcript/download siblings, including the superficially similar nass_job_status. It does not explicitly name those alternatives, but the scope is clear enough to route correctly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: run this to verify backends before asserting success. The caveat 'never claim success from installation alone' hints at when it matters, but there is no explicit when-to-use vs. when-not-to-use guidance or named alternative among the ten siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nass_job_statusB

Get queued/running/completed/failed status and the precise fallback attempt ledger.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. 'Get' implies a read-only lookup and the text discloses the returned state values and an attempt ledger, which is real behavioral content. However, it says nothing about polling cadence, behavior for an unknown/expired job_id, or retention of completed jobs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with no filler; the core purpose and return shape come first. It is efficient, though the extreme terseness is what leaves the gaps above.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read tool with no output schema, the description adequately covers what is returned (status states plus ledger). It falls short on the one thing the schema cannot supply: where job_id comes from and how this fits the job lifecycle.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single required job_id parameter is undocumented in both schema and description. The description never explains that job_id is the identifier returned by the transcription-start tools, leaving an agent to infer it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Get) and resource (job status) and enumerates the exact state space (queued/running/completed/failed) plus a 'fallback attempt ledger'. That is enough to distinguish it from transcript/audio siblings, though it never says 'job' explicitly enough to tie it to a transcription job.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance and no alternatives are named. It does not say to call this after nass_start_transcription/nass_start_local_file, nor whether to poll it, nor what to do instead when the job is already done.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nass_search_transcriptB

Search complete stored transcript; return precise quotes/timestamps and source links. Arabic diacritics and common alef variants are normalized for retrieval only.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
job_idYes
max_matchesNo
context_segmentsNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose two useful traits: the returned content (precise quotes, timestamps, source links) and that Arabic diacritics/alef variants are normalized "for retrieval only" (i.e., matching is normalized, source text is not altered). It omits permissions, rate limits, and how max_matches/context_segments bound the result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and return shape, with the normalization caveat placed second where it belongs. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Return format and normalization behavior are covered, which is the hardest part here given no output schema. However, for a four-parameter tool with zero schema documentation and no annotations, the definition leaves parameter meanings and any operational constraints unaddressed, so it is only partially complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across four parameters, so the description must compensate and largely does not: query and job_id are never explained, and the two bounded integers (max_matches default 15, context_segments default 1) are not mentioned. "Return precise quotes/timestamps" weakly hints at context_segments but gives no semantics for job_id scoping.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Search complete stored transcript") and adds the return shape (quotes, timestamps, source links), which cleanly separates it from nass_get_transcript's full-retrieval role. It never names a sibling explicitly, so the differentiation is inferred from the verb rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word "search" implies a retrieval use case, but there is no explicit when-to-use, when-not-to-use, or pointer to alternatives such as nass_get_transcript or nass_job_status. An agent must guess when searching beats fetching the whole transcript.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nass_start_audio_downloadA

Queue an audio-only download without captions or speech recognition; poll job status. Better suited than the synchronous tool for long videos.

ParametersJSON Schema
NameRequiredDescriptionDefault
video_urlYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully discloses the async pattern ('Queue... poll job status'), which tells the agent this returns a job rather than the file. But it omits where the output lands, the download format, and any permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler, front-loading the core action before the usage note. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an async job-starting tool with no output schema and no annotations, the description covers the key behavioral fact (polling for status) but leaves return format, output location, and the unnamed alternative tool context unresolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single video_url parameter. The description implies a video source is required but adds no format, accepted-host, or validity detail beyond the parameter name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Queue an audio-only download without captions or speech recognition.' The scope qualifier distinguishes it from nass_start_transcription, but it does not clearly differentiate from the sibling nass_download_original_audio, which reads as a near-neighbor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Better suited than the synchronous tool for long videos' gives a condition for selection, but the alternative is referred to vaguely as 'the synchronous tool' rather than by name, and no sibling names are given. Usage is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nass_start_local_fileC

Transcribe a media file inside configured NASS_MEDIA_DIR, bypassing YouTube completely.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYes
languageNoar

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the resource and YouTube bypass, but says nothing about whether this starts an asynchronous job, returns a job identifier, requires the file to already exist, or what happens on failure or missing file.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. It is appropriately sized for a short tool description, though the concision comes at the cost of missing details better placed in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and 0% schema coverage, the description is too thin. It omits workflow context needed to chain with siblings like nass_job_status and nass_get_transcript, and does not explain the start operation's return behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It implies 'filename' is relative to NASS_MEDIA_DIR but never mentions the 'language' parameter or its default value 'ar', leaving one of two parameters completely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Transcribe') and resource ('media file inside configured NASS_MEDIA_DIR'), and distinguishes the local path from YouTube. It does not name a specific sibling alternative, but the purpose is clear and differentiated by resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for local files in NASS_MEDIA_DIR and explicitly says it bypasses YouTube, but it never names alternatives like nass_start_transcription or states when-not to use this tool. Usage context is present but only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nass_start_transcriptionA

Queue a YouTube transcription. auto=prefer captions, audio=recognize original audio, captions=captions only, verify=run audio ASR independently and provide both for comparison. Always prefer 'audio' for no-captions videos or when verifying quoted speech.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoauto
languageNoar
video_urlYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. "Queue" hints at an asynchronous job, but the description never states that the result must be retrieved via nass_job_status, nor does it mention auth, rate limits, or typical latency. The mode semantics are disclosed well, which partially compensates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose in the first clause, then the mode taxonomy. The mode list reads as one dense run-on sentence but every clause carries needed definitional information; nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description should explain the async contract (that this returns a job handle to be polled via nass_job_status) and ideally the language default. Mode semantics are complete, but the lifecycle a caller must follow is left for the agent to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and enums are absent, so the description is the only source for the mode vocabulary (auto/captions/audio/verify) — and it explains all four with a clear recommendation. The language parameter (default 'ar') goes unmentioned, and video_url is left to the schema, but the critical enum-like parameter is fully covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Queue a YouTube transcription") that clearly distinguishes it from sibling read/poll tools like nass_get_transcript and nass_job_status. It does not, however, differentiate itself from other 'start_*' siblings (nass_start_local_file, nass_start_audio_download), leaving the YouTube-vs-local-file boundary implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use guidance for the mode argument ("prefer 'audio' for no-captions videos or when verifying quoted speech"), which is directly actionable. It stops short of naming alternatives (e.g., when to use nass_start_local_file instead), so no explicit exclusions.

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.

  1. 10 tool updatesv0.3.1
    • First observednass_audio_excerpt
    • First observednass_download_original_audio
    • First observednass_export
    • First observednass_get_transcript
    • First observednass_health
    • First observednass_job_status
    • First observednass_search_transcript
    • First observednass_start_audio_download
    • First observednass_start_local_file
    • First observednass_start_transcription

TDQS

A3.5/5.0

Scored across 10 tools

Disambiguation4/5

Most tools are clearly separated by action and resource: start transcription vs get/search/export transcript, YouTube source vs local file, transcript access vs audio access. The main overlap is nass_start_audio_download vs nass_download_original_audio, both audio-download paths differentiated mainly by async/sync and video length, so some misselection risk remains.

Naming Consistency4/5

All tools use a consistent nass_ prefix and snake_case formatting. Most names follow verb_noun, but nass_export, nass_health, and nass_audio_excerpt are noun-only or objectless deviations, making the pattern slightly less uniform.

Tool Count5/5

Ten tools is well within the appropriate range for a transcription/audio workflow. Each tool covers a distinct stage—job start, status polling, transcript retrieval/search/export, audio inspection/download, and backend health—without excessive surface area.

Completeness4/5

The surface covers the core lifecycle: starting YouTube or local-file transcription, checking job status, reading/searching/exporting transcripts, obtaining audio excerpts/downloads, and checking backend health. Minor gaps include no explicit job cancellation or transcript/job listing and management operations, which agents may need for longer workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers