oriole
Oriole · 黄雀 Job Engine
中文说明 · Architecture · Sources · Verification
Превратите открытый веб в прослеживаемую карту источников вакансий с ручной проверкой — а не в непрозрачную кучу собранных объявлений.
Oriole — это открытый агент разведки источников вакансий по всему Китаю. Он обнаруживает публичных рекрутинговых издателей, проверяет их конечные точки, требует одобрения человека перед сбором, нормализует вакансии по фактическому месту работы и предоставляет результат любому LLM через 16 MCP-инструментов.
Он намеренно построен как движок, а не как единый веб-сайт. Запускайте его из CLI, планируйте на полночь, встраивайте детерминированное ядро в другой сервис на Node.js или подключайте модель с поддержкой MCP, не передавая этой модели свои учётные данные.
Что реализовано
Возможность | Реализация |
Общенациональная география | Детерминированная двухуровневая таксономия Китая: 34 региона уровня провинции и 365 записей уровня префектуры/провинции-напрямую |
Классификация по месту работы | Использует указанное в вакансии место работы, сохраняет вакансии с несколькими местами, поддерживает фильтры по провинции/городу и отклоняет строки только с зарубежными местами |
Обнаружение источников | Девять проверенных источников, ограниченный список наблюдения из 19 работодателей, официальные каталоги, Baidu Search API, Common Crawl URL Index, все 365 задач второго уровня регионов и отправленные URL-адреса |
Стабильный сбор | Lever, Greenhouse, Ashby, ограниченные адаптеры публичного поиска ByteDance/Feishu Recruitment с устойчивой ротацией смещений, гибкий публичный JSON, JSON-LD, RSS/Atom, Sitemap XML и защищённый HTML |
Граф источников | Отношения с доказательствами между издателем, источником, регионом, точкой входа, конечной точкой, каналом обнаружения и вакансией |
Процесс доверия |
|
Доказательства | Записи запусков, HTTP-сводки, хэши содержимого, сжатые артефакты необработанных ответов, прослеживаемость источника/вакансии и машиночитаемые аудиты |
Интерфейс агента | 16 двуязычных MCP-инструментов через JSON-RPC 2.0 NDJSON stdio; современная версия |
Ежедневная работа | Идемпотентный планировщик по дате Пекина и расписание GitHub Actions в |
Безопасность | Только HTTPS-исходящий доступ, привязка DNS к публичным адресам, защита от SSRF, защита от редиректов и роботов, ограничения по времени/размеру/строкам, ограничение скорости и привязка секретов к хосту |
Related MCP server: OpenAI-Compatible MCP Gateway
Модель источников
Каналы обнаружения и источники вакансий выполняют разные задачи:
Baidu — это радар обнаружения. При настройке Oriole вызывает официальную конечную точку Qianfan от Baidu и хранит доказательства на уровне запроса. Он никогда не скрейпит страницу результатов Baidu.
Common Crawl — это резервный архив/индекс без ключа для контролируемых шаблонов
site:. Он проверяет, что публичные URL-адреса существовали; он не рассматривается как полнотекстовая поисковая система или как конечный источник вакансий.Публичные каталоги — это источники авторитетных национальных и местных издателей, включая национальные государственные службы занятости, университетские службы занятости, государственные учреждения, центральные государственные компании и каталоги правительственных департаментов.
Сайты работодателей, официальные доски ATS и правительственные страницы занятости — это долгоживущие цели сбора. Источник должен пройти проверку безопасности и человеческое рецензирование, прежде чем его вакансии могут попасть в Реестр.
Пользовательская отправка позволяет другому агенту или оператору предложить публичный URL-адрес, сохраняя при этом тот же шлюз проверки и рецензирования.
Для сбора девяти предварительно одобренных источников или обнаружения кандидатов из встроенного официального каталога ключ Baidu не требуется. Возможности провайдера явно указаны для каждой задачи запроса: обычное обнаружение по ключевым словам доступно только через Baidu, поэтому такие задачи остаются видимо blocked в status.discoveryBacklog и статистике запусков обнаружения, когда Baidu недоступен. Common Crawl доступен только для контролируемых задач site:; заблокированная работа никогда не считается выполненной.
Публичный репозиторий поставляется с нулевыми записями вакансий. npm run init импортирует девять явно проверенных публичных источников — восемь досок, контролируемых работодателями, включая ByteDance, и один правительственный источник занятости — так что чистая копия имеет функциональные цели сбора без публикации устаревшего или приватного снимка вакансий. Это не автоматическое одобрение результатов поиска: сам манифест источников является рецензируемым решением о доверии, и все вновь обнаруженные источники по-прежнему требуют проверки и одобрения.
Покрытие — это измеримый отчёт о пробелах, а не заявление о полном национальном охвате вакансий. В списке из 19 работодателей ByteDance — единственная проверенная цель начальной загрузки; остальные 18 корней работодателей начинаются как неодобренные кандидаты и не могут создавать вакансии, пока не будут проверены, подтверждены и одобрены.
Сбор ByteDance/Feishu ограничен 50 страницами, 5 000 строк вышестоящего уровня и 24 МБ на вызов источника. Когда один вызов не может достичь хвоста, зафиксированный запуск сохраняет отпечатанный курсор с проверкой поколения в source.collection.resume; следующий сегмент обновляет одну головную страницу, а затем продолжает хвост с одной страницей намеренного перекрытия. Запись вакансий и продвижение курсора используют одну атомарную транзакцию Реестра. Перед любой мутацией Реестр сравнивает и заменяет как ревизию источника, прочитанную коллектором, так и сохранённое поколение курсора; при любом конфликте не записываются ни вакансии, ни курсор. Предпросмотр, сбой или конфликт никогда не продвигают сохранённую позицию. Возобновлённый хвостовой сегмент остаётся pagination.complete: false, даже когда он закрывает цикл ротации, потому что изменяющийся поток смещений не является снимком между запусками и не может оправдать закрытие пропущенных вакансий. Проверяйте доказательства запуска сбора и Реестра отдельно: npm run coverage измеряет состояние источника/канала/региона и не читает прогресс пагинации или возобновления.
См. docs/SOURCES.md для точных границ провайдера и каталога источников.
Быстрый старт
Требования: Node.js 22.13+. Oriole не имеет зависимостей времени выполнения и не требует секрета для инициализации или сбора предварительно одобренных источников, обнаружения из официального каталога или выполнения контролируемых задач Common Crawl site:.
git clone https://github.com/gaofeibilly-maker/oriole-job-engine.git
cd oriole-job-engine
npm test
npm run init
npm run status
npm run coverage
npm run regions -- --province-code 420000После init status должен показать 9 одобренных источников и 0 встроенных вакансий. Вакансии появляются только после реального зафиксированного сбора.
Для проверки только предпросмотра, создающей доказательства, текущих публичных вакансий ByteDance (ключ Baidu не требуется) запустите npm run live-source-check. Он проверяет официальные URL-адреса приложений и печатает компактную сводку, а не необработанные ответы или описания вакансий. Предпросмотр читает применимое окно, но никогда не фиксирует вакансии и не продвигает сохранённый курсор возобновления. Соответствующий GitHub workflow можно запустить вручную или пометив pull request live-source-audit.
Обнаружьте встроенный официальный каталог без учётных данных:
node scripts/huangque/cli.mjs discover \
--providers official_catalog \
--force
node scripts/huangque/cli.mjs sources
node scripts/huangque/cli.mjs graphОбнаружение создаёт кандидатов; оно не превращает их молча в цели сбора. Проверьте кандидата, изучите его доказательства и текущую ревизию Реестра, затем явно одобрите его:
node scripts/huangque/cli.mjs probe --source <source-id>
node scripts/huangque/cli.mjs review \
--source <source-id> \
--decision approve \
--reviewer <operator-name> \
--reason "Official public recruitment source verified" \
--revision <current-revision> \
--confirm
node scripts/huangque/cli.mjs collect --source <source-id> --commit
node scripts/huangque/cli.mjs jobs --province-code 420000 --city-code 420100Все состояние по умолчанию локально:
.huangque/state.json— атомарный переносимый Реестр;.huangque/artifacts/— сжатые доказательства с адресацией по содержимому;.huangque/latest-audit.json— последний машиночитаемый самоаудит.
Эти пути игнорируются Git и могут быть перемещены с помощью переменных окружения.
Подключите любой LLM через MCP
Запустите сервер stdio:
npm run mcpПример конфигурации MCP-клиента:
{
"mcpServers": {
"oriole": {
"command": "node",
"args": ["/absolute/path/oriole-job-engine/scripts/huangque/mcp-server.mjs"],
"env": {
"HUANGQUE_REGISTRY_PATH": "/absolute/path/oriole-data/state.json",
"HUANGQUE_ARTIFACT_ROOT": "/absolute/path/oriole-data/artifacts"
}
}
}
}Сервер предоставляет инструменты для запусков конвейера, поиска запусков, статуса, измеримых пробелов покрытия источников, обнаружения, отправки публичных источников, проверки, списка источников, списка вакансий, списка регионов, чтения графа, человеческого рецензирования, сбора, просроченной работы, аудита и экспорта переносимого проекции.
huangque.list_regions сообщает агрегаты уникальных вакансий на уровне провинции, уровне только провинции и каждом городе второго уровня. Вакансия, явно предложенная в двух городах одной провинции, учитывается один раз в общем количестве провинции и один раз в каждом применимом городе.
Одобрение источников через MCP отключено по умолчанию. Оператор должен намеренно установить HUANGQUE_ALLOW_MCP_REVIEW=1; одобрение через CLI остаётся доступным без ослабления этой серверной границы.
Необязательное обнаружение Baidu
Скопируйте пример конфигурации и установите свой ключ локально или как секрет GitHub Actions. Никогда не коммитьте его.
cp .env.example .env
export HUANGQUE_BAIDU_API_KEY="<your-key>"
node scripts/huangque/cli.mjs discover --providers baidu --max-queries 5Ключ отправляется только на qianfan.baidubce.com. Пользовательская конечная точка на другом хосте отклоняется. Бюджет по умолчанию — 40 запросов в день, его можно снизить с помощью HUANGQUE_BAIDU_DAILY_BUDGET.
Отсутствие настройки Baidu не останавливает сбор одобренных источников. Это только оставляет обычные задачи активного обнаружения по ключевым словам явно заблокированными; Common Crawl без ключа продолжает обрабатывать контролируемые задачи site: плана запроса.
Официальная ссылка: Baidu Qianfan AI Search API.
Ежедневное общенациональное обновление в полночь
Встроенный workflow запускается в 16:00 UTC, что соответствует 00:00 Asia/Shanghai на следующий локальный календарный день:
npm run dailyПланировщик записывает маркер завершения по дате Пекина, поэтому повторная попытка не дублирует запуск того же дня, если не указан --force. Расписания GitHub могут начинаться с задержкой в несколько минут; локальный маркер контролирует бизнес-дату, а не время в очереди. См. docs/SCHEDULING.md.
Граф источников, а не просто список
Каждое ребро графа несёт доказательства и временные метки наблюдения. Основные отношения:
publisher ← published_by — source — covers_region → region
│
├─ has_entry_point → public page
├─ has_endpoint → collection endpoint
├─ discovered_via → provider/query/run evidence
└─ lists_job → normalized jobРёбра издателя и региона следуют последним авторитетным доказательствам одобренного источника: когда проверенная идентичность источника меняется, устаревшие отношения published_by и covers_region удаляются, а не остаются как вводящие в заблуждение исторические факты.
«Полный граф» здесь означает, что каждый зарегистрированный источник представлен отношениями, поддерживаемыми его доказательствами, и что каждое отношение поддаётся аудиту. Это не означает, что конечный каталог уже содержит каждого работодателя или каждую открытую вакансию в Китае; Oriole спроектирован для непрерывного расширения и повторной проверки этого графа.
Проверяйте, прежде чем доверять
npm run verify
npm run auditТестовый набор проверяет нормализацию, общенациональные регионы, обработку нескольких мест, провайдеров, ограниченную ротацию больших фидов, атомарность/конкурентность курсора, доказательства графа, удержание Реестра, жизненный цикл MCP, защиту SSRF, обработку robots, владение источниками и идентичность вакансий. Отдельный аудит времени выполнения сообщает, имеют ли внешние провайдеры и опубликованное расписание GitHub реальные успешные доказательства запусков в текущем Реестре. Фикстуры и ручной ежедневный запуск никогда не считаются живым провайдером или успехом GitHub Actions.
Следуйте воспроизводимому чек-листу в docs/VERIFY.md.
Границы
Oriole обрабатывает публичные, не требующие входа веб-источники. Он намеренно исключает частные группы WeChat, OCR изображений, почтовые ящики, страницы с CAPTCHA/только входом и другие частные каналы. Он не подаёт заявки на вакансии и не принимает решений о трудоустройстве. Публичный веб-доступ не отменяет условия сайта, политику robots, права на базы данных, обязательства по конфиденциальности или применимое законодательство; развёртывающие остаются ответственными за соблюдение требований, специфичных для источника.
Структура проекта
data/huangque/ verified public seeds, national query plan, and public catalog
scripts/huangque/ CLI, daily runner, MCP server, deterministic core
tests/ Node test suite
docs/ architecture, sources, schedule, verification
.github/workflows/ CI and Beijing-midnight daily updateВклад приветствуется в рамках лицензии Apache-2.0. Пожалуйста, ознакомьтесь с CONTRIBUTING.md и сообщайте о проблемах безопасности через SECURITY.md.
Available Tools
16 toolshuangque.audit运行黄雀自审ARead-onlyIdempotent
运行不变量与外部激活项检查;不会把报告写入任意路径。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states it will not write reports to any path, which is a valuable behavioral disclosure beyond the readOnlyHint and non-destructive annotations. This addresses a common concern about audit tools that might produce output files. Combined with the annotations (readOnly, idempotent, non-destructive), the agent has a clear safety profile. It doesn't describe what the audit returns or whether it can be run concurrently, but that is partially covered by the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that communicates the tool's purpose and a key behavioral guarantee. There is no wasted text, and critical information (that no report is written) is front-loaded. Excellent for a zero-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters, a clear read-only purpose, and an output schema available, the description covers the essential context. The only gap is that it doesn't explain what the audit report contains or how to interpret the response, but the output schema likely handles that. For a simple, self-contained audit tool, this is sufficient.
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 tool has zero parameters, and the schema has no properties. Since there are no parameters to describe, the baseline is 4 per the rubric. The description adds no parameter semantics because none exist, which is appropriate. The tool's behavior is fully specified by its name and description.
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 tool runs invariant and external activation checks, which clearly identifies the purpose as an audit operation. It distinguishes from siblings by referencing '自审' (self-audit) rather than source management or pipeline execution, though it doesn't explicitly name an alternative tool for other audit-like operations.
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 this is a standalone audit tool with no parameters, suggesting it should be run to check invariants and external activations. It doesn't explicitly state when to use it versus siblings, but the context of '自审' (self-audit) and the sibling list (which includes pipeline and source management) provides enough distinction. No exclusions or alternatives are named, so it's slightly below a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.collect_jobs采集已批准来源A
仅从 approved 来源采集、标准化、强键去重和更新时效;commit 默认 false,预览不写岗位库。
| Name | Required | Description | Default |
|---|---|---|---|
| commit | No | ||
| source_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, but the description clarifies that commit=false means a preview that does not write to the job repository. This adds behavioral transparency beyond annotations by explaining the default behavior and the write path. 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?
The description is one concise sentence that packs key information: scope, operations, default commit behavior, and effect. No wasted words, front-loaded with the essential purpose.
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 2 parameters, no required fields, and an output schema exists, the description is moderately complete. It explains the default non-write behavior but omits details like how source_id filters or what the output represents. With no annotations on safety, some additional context on idempotency (idempotentHint=false) would help, but the output schema covers return values.
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 has 2 parameters (commit, source_id) with zero description coverage. The description mentions commit default but does not explain source_id semantics (e.g., optional filtering). It partially compensates but not fully, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (collect) with a scope (from approved sources) and lists key behaviors (standardize, dedupe, update timeliness). It distinguishes from siblings like run_pipeline and run_due by highlighting the approved-source restriction. However, it does not explicitly name alternatives, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for approved-source collection but does not explicitly state when to use this vs. other tools like run_due or run_pipeline. It mentions commit defaults but no exclusion criteria. The implication is clear but not explicit, so it scores below a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.discover_sources发现招聘信息源C
按查询计划通过官方目录、Common Crawl 和已配置的百度官方 API 发现候选;只写候选和证据。
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| city_code | No | ||
| providers | No | ||
| bucket_ids | No | ||
| max_queries | No | ||
| province_code | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark readOnlyHint=false and openWorldHint=true, but no destructive hint. The description says '只写候选和证据' (only writes candidates and evidence), implying side effects. It adds that it queries official, Common Crawl, and Baidu API, which is useful. However, it doesn't mention limits, rate limits, or what happens on failure. Description aligns with openWorldHint but doesn't go beyond 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 concise, one sentence, and front-loads the key action. It could be slightly more structured, but it's efficient with no fluff.
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 complex (6 parameters, multiple providers, writes side effects) yet the description is minimal. Since there is output schema, return values are covered, but missing parameter semantics and usage guidance leave gaps. The description is not complete enough for an agent to use correctly without further inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description does not explain any of the six parameters (force, city_code, providers, bucket_ids, max_queries, province_code). It only mentions the three providers in passing, but doesn't describe their values or semantics. The description fails to compensate for the schema's lack of descriptions.
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 tool discovers candidate sources via official catalogs, Common Crawl, and Baidu API, but the main verb 'discover' is somewhat vague about the output. Title '发现招聘信息源' matches. It is clear enough that it finds recruitment information sources, but doesn't sharply contrast with sibling tools like probe_source or list_sources.
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 says '按查询计划' (according to query plan) but doesn't explain when to use this tool versus alternatives like probe_source or submit_source. No explicit exclusions or conditions are given, so guidance on when to use this tool is weak.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.export_hosted_projection导出托管投影BIdempotent
把完整 portable Registry 确定性压缩为外部托管系统可同步的有界投影,并返回文件路径与截断清单。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds some behavioral detail (deterministic compression, returns file path and truncation list) beyond the annotations, which already indicate idempotent and non-destructive. It does not contradict annotations, but it omits potential side effects like file system writes or resource usage, which could be relevant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that efficiently conveys the core action and output. There is no fluff or unnecessary detail, making it easy to parse.
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 description mentions returning a file path and truncation list, but does not elaborate on what these contain or how they relate to the output schema. For a tool with no input parameters, the description is somewhat self-contained, yet it lacks details about the output structure or potential error conditions, making it slightly incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so schema coverage is complete. The description does not need to explain parameters, and it doesn't invent any. Baseline of 3 is appropriate since there is no parameter information to add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: deterministic compression of the portable Registry into a bounded projection, with a return of file path and truncation list. This distinguishes it from sibling tools like run_pipeline or audit. However, the term 'hosted projection' is somewhat technical and could be clearer for general use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives. It does not describe typical scenarios, prerequisites, or conditions that would make this tool the appropriate choice. The description lacks usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.get_run查看运行ARead-onlyIdempotent
按 run_id 读取黄雀运行状态、统计、证据索引和错误。
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the specific information returned (status, stats, evidence index, errors) and is consistent with the readOnly and idempotent annotations. However, it does not mention potential error conditions (e.g., run not found) or side effects, though as a read-only operation these are likely minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the action and resource, efficiently conveying the tool's purpose and data returned without unnecessary detail.
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 operation with one parameter, the description sufficiently covers the core functionality. It does not explain the output schema or error handling, but these are likely inferred from the read-only nature and the presence of an output schema, making it complete enough for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly states that run_id is used to identify the run ('按 run_id 读取'), giving clear meaning to the parameter beyond the schema's type and minLength. This fully clarifies the parameter's purpose.
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 that the tool reads run status, statistics, evidence index, and errors by run_id. It uses the verb '读取' (read) and specifies the resource (run) and the data retrieved, making its purpose unambiguous and distinct from sibling tools.
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 does not explicitly mention when to use this tool versus alternatives. It only describes what it does without providing conditions, prerequisites, or comparisons to other tools like 'status' or 'audit', leaving usage guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.get_source_graph读取招聘源图谱 / Read source graphBRead-onlyIdempotent
分页读取发布主体、来源、地区、入口、端点、发现渠道与岗位之间的有证据关系。 Reads evidence-bearing source graph relations.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| source_id | No | ||
| relation_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint. The description adds that it is 'paginated' and returns 'evidence-bearing relations', which is useful context about the nature of the output. However, it does not disclose other behavioral aspects like auth requirements, cursor handling behavior, or any specific limitations. Since annotations provide the core safety profile, the description's extra detail is beneficial but not extensive.
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 and to the point. It consists of two short sentences (bilingual) that effectively convey the action and resource. No verbose or redundant content.
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 that the tool has an output schema and involves four optional parameters, the description provides the core idea (reading relations) but lacks explanation of the parameters and pagination logic. It is sufficient for a simple, safe, read-only operation, but for an agent to correctly filter or paginate, more context would be necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no descriptions for any of the 4 parameters (schema coverage 0%). The description does not explicitly explain `cursor`, `limit`, `source_id`, or `relation_type`. Although it lists the relation types that likely correspond to `relation_type` values (e.g., source, region, etc.), it does not explicitly instruct the agent on how to use these parameters. The description fails to compensate for the lack of schema-level documentation.
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 action: '分页读取' (paginated read) with a specific resource: the evidence-bearing source graph relations. It enumerates the entity types involved (发布主体、来源、地区、入口、端点、发现渠道与岗位), which distinguishes it from sibling tools like list_sources or discover_sources, which deal with sources themselves rather than relational data.
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 does not provide any guidance on when to use this tool vs alternatives. It only states what it does, with no mention of scenarios, exclusions, or explicit comparisons to similar readings (e.g., when to use 'source graph' vs 'list_sources'). This leaves the agent to infer the applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.list_jobs查询岗位库BRead-onlyIdempotent
分页读取已由批准来源采集的全国标准化岗位,可按省、市筛选。 Lists normalized China jobs with province/prefecture filters.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| status | No | ||
| city_code | No | ||
| province_code | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is known. The description adds that it reads from an approved source and is paginated, but doesn't mention batch limits or any details about what happens with invalid filters. 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?
Two short sentences, one in Chinese and one in English, both conveying similar information. It's efficient, but the duplication is minor. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complexity is moderate with 5 optional parameters and an output schema. The description covers the core purpose and filters but omits parameter details like status filtering and cursor-based pagination. It's acceptable for a read-only list operation but could be enhanced.
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?
All 5 parameters are in the schema, but coverage is 0% in the description. The description only mentions province/prefecture filters, ignoring limit, cursor, and status. However, the schema provides enums and defaults, so the baseline is 3, but the description adds minimal value beyond that.
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 that the tool reads normalized China jobs with province/prefecture filters, using '分页读取' and 'Lists normalized China jobs'. It distinguishes itself from siblings like collect_jobs and list_sources, but could be more explicit about what it doesn't do (e.g., it doesn't collect or mutate jobs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for querying job data with optional filters but does not explicitly state when to use this tool versus others like collect_jobs or run_pipeline. No exclusionary guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.list_regions查询全国地区 / List China regionsBRead-onlyIdempotent
读取黄雀使用的省级—地级二级地区目录和岗位计数。 Returns the deterministic province/prefecture taxonomy and job counts.
| Name | Required | Description | Default |
|---|---|---|---|
| province_code | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which cover the safety profile. The description adds the deterministic property and the specific content returned, but does not disclose ordering, pagination, or effects of the optional province_code parameter.
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?
Two brief sentences with no filler. The description is front-loaded with the action verb and immediately states the resource and returned data, making it easy 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?
The high-level purpose is clear and an output schema exists to document return values. However, the lack of any explanation for the optional province_code parameter leaves a significant gap for correct invocation. For a tool with a single optional parameter, this omission is notable.
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 optional parameter 'province_code' has no description in the schema and is completely absent from the tool description. The agent has no information about its format, meaning, or how it filters the results, making it impossible to invoke the tool with meaningful arguments.
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 clear verb ('读取' / 'Returns') and names the exact resource: the province/prefecture two-level region directory and job counts. It also specifies the deterministic nature, distinguishing it from sibling tools like list_sources or list_jobs.
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 provides no guidance on when to use this tool versus alternatives, nor does it mention exclusions or preferred contexts. It simply states what the tool does without supporting selection decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.list_sources查询来源图谱BRead-onlyIdempotent
查询持久化来源 Registry;可按生命周期或验证状态过滤。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| city_code | No | ||
| lifecycle | No | ||
| province_code | No | ||
| verification_state | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 read operation. The description adds that it queries a persistent Registry, but does not disclose details like pagination behavior (though cursor is in schema) or whether results are snapshots. Since annotations cover the safety profile, a 3 is appropriate as the description adds minimal behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that is front-loaded with the main action and resource. It is efficient and easy to scan, though it could include a little more detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (a filtered list operation), the lack of an output schema description is fine, but the missing parameter documentation and lack of guidance on pagination make it borderline. The description provides the basic purpose but not enough for an agent to fully understand filtering parameters and pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fails to explain any parameter semantics beyond mentioning lifecycle and verification_state as filters. The schema has 6 parameters including limit, cursor, city_code, and province_code, but the description does not clarify their purpose or format (e.g., that city_code is a string, or how cursor works). This is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists persisted sources in a Registry, with filtering by lifecycle or verification state. It identifies the resource (source Registry) and the action (list/query), but does not explicitly distinguish it from sibling tools like get_source_graph or source_coverage, though the name and description imply a different scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions filtering by lifecycle or verification state, which implies when to use (e.g., when needing to browse sources by state). However, it does not explicitly state when not to use it versus alternatives like source_coverage or get_source_graph, nor does it mention any prerequisites or context for when to list sources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.probe_source安全探测来源A
对 source_id 或公开 URL 执行 DNS/重定向/robots/大小/超时防护下的真实探测;不会自动批准。
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| source_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds some behavioral details (DNS/redirect/robots protections, no auto-approval) beyond annotations, but does not explain side effects, state changes, or what 'probing' entails in terms of system impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the core function without unnecessary detail.
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?
Does not mention return values or output format, and the tool is likely to produce results (e.g., probe outcomes) that the agent would need to understand. Lacks completeness for a full understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description clarifies that source_id and url are alternative inputs, which is not evident from the schema alone. However, it does not define what constitutes a valid source_id or the exact format for URL.
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 performs real probing of source_id or URL with DNS/redirect/robots/size/timeout protections, distinguishing it from sibling tools like list_sources or get_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. It mentions not auto-approving, but does not clarify the intended workflow or context, leaving the agent uncertain about appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.review_source人工审核来源ADestructive
批准或驳回已探测来源。要求人工确认、审核人、理由和 expected_revision;MCP 端默认禁用,需 operator 显式授权。
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | ||
| decision | Yes | ||
| source_id | Yes | ||
| reviewed_by | Yes | ||
| confirmation | Yes | ||
| expected_revision | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations by noting the authorization requirement and the manual confirmation step. It does not contradict the destructiveHint annotation, as approve/reject implies mutation.
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) and well-structured, containing only essential information without fluff.
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?
While it covers purpose and some preconditions, it lacks detail on post-action effects, return value, or the meaning of the 'confirmation' parameter, leaving some gaps for a tool with six required parameters and no schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description partially compensates for the lack of schema descriptions by naming several parameters (reviewer, reason, expected_revision), but leaves others (source_id, decision, confirmation) unexplained or only implicitly covered.
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 function ('approve or reject a discovered source'), which is specific and distinguishes it from sibling tools like collect or submit.
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?
It provides clear usage context by mentioning manual confirmation, required reviewer, and the fact that it's disabled by default, requiring operator authorization. However, it does not explicitly mention alternatives or contrast with other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.run_due运行到期任务A
按 cadence 运行到期发现、探测与已批准来源采集;commit 默认 false,只有显式 true 才写岗位库。
| Name | Required | Description | Default |
|---|---|---|---|
| commit | No | ||
| max_probes | No | ||
| max_queries | No | ||
| max_collections | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly discloses the key side-effect behavior: commit defaults to false and only an explicit true writes to the job library. This adds valuable mutation semantics beyond the annotations, which only indicate readOnlyHint=false and destructiveHint=false.
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 dense sentence that front-loads the core operation and then adds the critical commit guard. Every element earns its place; there is no filler.
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 description is adequate for basic selection and invocation, especially with an output schema present. However, it lacks detail on what "due" means, how the max_* parameters affect execution, and what happens when commit is false beyond not writing to the library.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only explains the commit parameter. The remaining parameters (max_probes, max_queries, max_collections) are left to be inferred from their names and schema ranges, which is insufficient for a low-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb-resource pairing: it runs due discovery, probing, and approved-source collection by cadence. This clearly distinguishes it from siblings like run_pipeline or discover_sources by naming the exact scope of work.
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?
"按 cadence 运行到期任务" implies the tool is for executing tasks that have become due, but it does not explicitly state when to prefer this over alternatives such as run_pipeline, nor does it provide exclusion criteria. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.run_pipeline运行黄雀流水线C
执行发现→安全探测→候选入来源图谱;新来源不会自动批准。可选采集已批准来源。
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| commit | No | 仅影响已批准来源;默认预览 | |
| city_code | No | 可选六位地级行政区代码 / optional prefecture code | |
| providers | No | 发现 Provider;默认全部 | |
| bucket_ids | No | ||
| max_probes | No | ||
| max_queries | No | ||
| province_code | No | 可选六位省级行政区代码 / optional province code | |
| collect_approved | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations by stating that new sources are not automatically approved and that collection of approved sources is optional. However, it does not disclose side effects like whether commit=true persists changes, whether it modifies the source graph, or potential long-running behavior, which would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and to the point, using two sentences to convey the pipeline flow and a key policy (no auto-approval). No unnecessary words or redundancy, though it could be slightly more detailed without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 optional parameters and no output schema provided, the description is incomplete. It does not explain the difference between preview and commit modes, the meaning of max_probes/max_queries, or the outcome of the pipeline, leaving significant gaps for an agent to understand the full scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not clarify the meaning of undisclosed parameters such as force, bucket_ids, max_probes, max_queries, or collect_approved. It only hints at 'optional collection of approved sources' which likely maps to collect_approved, but leaves other parameters unexplained, failing to complement the schema where coverage is only 44%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool executes a pipeline with a sequence (discovery → security probing → candidate sources into graph) and notes that new sources are not auto-approved, which distinguishes its purpose from simpler sibling tools like run_due or collect_jobs. However, it could be more explicit about being the main pipeline runner.
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 does not indicate when to use this tool versus alternatives such as run_due or collect_jobs. It lacks conditions for running the pipeline, prerequisites, or typical invocation scenarios, leaving the agent without clear usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.source_coverage检查来源覆盖缺口 / Inspect source coverage gapsARead-onlyIdempotent
按 9 类渠道、19 家有界重点企业、34 个省级与 365 个二级区域计算可审计缺口;不把发现线索冒充已批准来源,也不声称抓全互联网。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the tool's non-mutating, non-exhaustive nature is already signaled. The description adds value by explicitly restricting scope (9 channels, 19 enterprises, 34 provinces, 365 secondary regions) and by warning against misinterpreting results ('不把发现线索冒充已批准来源,也不声称抓全互联网'). This goes beyond the annotations by clarifying the semantic boundary of what the gaps represent (auditable gaps, not approved sources or full internet coverage).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with two clauses, efficiently front-loading the core action (compute gaps) and then adding a critical caveat. It uses compact numeric enumerations to convey scope without wasted words. The only minor weakness is that it doesn't mention any output structure or return format (though an output schema exists), and the Chinese is dense but not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has zero parameters and an output schema, so the description doesn't need to document parameters or return values. The description covers purpose, scope dimensions, and interpretive guardrails. Given the tool's complexity (aggregating across multiple dimensions), the description is sufficient to help an agent decide when to call it and what to expect. However, it doesn't mention any specific use cases or integration with other sibling tools like 'audit' or 'discover_sources', which could be helpful but not strictly necessary.
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 tool has 0 parameters, so the input schema is trivially complete (coverage 100%). With no parameters to document, the description's job is to explain what the computation is based on and what the output means, which it does by listing the fixed dimensions (9 channels, 19 enterprises, etc.) and the caveat about not representing approved or comprehensive findings. This adds semantic meaning beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource combination: 'calculate auditable gaps' across specified dimensions (9 channels, 19 bounded key enterprises, 34 provinces, 365 secondary regions). It does not explicitly name a sibling alternative but clarifies this is about coverage gaps, distinct from tools like discover_sources or audit, implying a review/compute role.
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 provides clear context: it computes gaps by specific categories and acknowledges limitations. It does not explicitly state when to use vs. alternatives, but the specificity (e.g., 'bounded key enterprises' vs. broader sources) implies a scoped analysis, and the second sentence guards against misusing its outputs as approved sources or claiming exhaustiveness, which helps the agent decide if this tool fits the need.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.status查看黄雀状态ARead-onlyIdempotent
读取 Registry 版本、来源/岗位/运行统计、到期查询桶和 Provider 配置状态。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 clear. The description adds that it reads specific types of information (Registry version, statistics, buckets, provider config), which is useful context. However, it doesn't disclose any potential side effects (though annotations cover this) or what happens if the Registry is unavailable. With annotations covering the safety profile, 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?
The description is a single, concise sentence that lists the key information the tool provides. It is front-loaded with the verb '读取' and covers the main aspects. It could be slightly more structured (e.g., bullet points), but for a simple status tool, it is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, an output schema exists, and annotations are comprehensive, the description is sufficient. It lists the main categories of information returned (Registry version, statistics, buckets, provider config), which gives the agent a good idea of what to expect. The output schema likely provides more detail on the return structure, so the description doesn't need to elaborate further.
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 tool has 0 parameters, and the schema coverage is 100% (trivially, since there are no properties). The description doesn't need to explain parameters, but it does clarify what the tool returns (Registry version, statistics, etc.), which adds value beyond the empty schema. Since there are no parameters, the baseline is 4, and the description meets this by providing context on the output.
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 reads Registry version, source/position/run statistics, expiration query buckets, and Provider configuration status. It uses a specific verb ('读取' - read) and resource (Registry status), which distinguishes it from sibling tools like huangque.audit or huangque.get_run. However, it could be more explicit about what '状态' encompasses and how it differs from similar status-related tools.
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 this is a read-only status tool, but it does not explicitly state when to use it versus alternatives. It doesn't mention that it's a quick overview vs. more detailed tools like huangque.audit or huangque.source_coverage. The context signals show it has no parameters, suggesting it's a general status check, but this is not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
huangque.submit_source提交公开来源 / Submit public sourceA
把一个公开招聘 URL 作为候选写入图谱并保留提交证据;不会自动探测、批准或采集。 Adds a public URL as an evidence-backed candidate without automatic approval.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| note | No | ||
| title | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (write, non-idempotent, non-destructive), the description explicitly states that it does not auto-approve or collect, and that it keeps submission evidence. This adds clear behavioral expectations without 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?
The description is concise and well-structured, conveying the core action and key limitations in two short sentences. No fluff or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately explains the main action and what it does not do, which covers the essential behavior for a submission tool. It does not mention return values or post-submission effects, but given the simple input schema and absence of an output schema, this is acceptable.
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 lists three parameters (url, note, title) but the description only mentions the URL. No explanation is provided for the optional 'note' or 'title' fields, leaving their purpose and expected content unclear.
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 that the tool submits a public URL as a candidate into the graph with evidence, and distinguishes it from automatic actions like detection or approval. This is a distinct and well-defined 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 implicitly guides when to use this tool by stating it does not automatically detect, approve, or collect, implying it is the initial submission step. However, it does not explicitly contrast with sibling tools like 'review_source' or 'probe_source', leaving some ambiguity for an agent.
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.
16 tool updates
v1.1.1- First observed
huangque.audit - First observed
huangque.collect_jobs - First observed
huangque.discover_sources - First observed
huangque.export_hosted_projection - First observed
huangque.get_run - First observed
huangque.get_source_graph - First observed
huangque.list_jobs - First observed
huangque.list_regions - First observed
huangque.list_sources - First observed
huangque.probe_source - First observed
huangque.review_source - First observed
huangque.run_due - First observed
huangque.run_pipeline - First observed
huangque.source_coverage - First observed
huangque.status - First observed
huangque.submit_source
TDQS
Scored across 16 tools
Most tools have distinct purposes, but run_pipeline and run_due both execute workflows and could be confusing. However, descriptions clarify that run_pipeline is a general discovery-probing pipeline, while run_due runs scheduled tasks. Other pairs like discover_sources/probe_source and submit_source/review_source are clearly separated.
All tools share the 'huangque.' prefix and mostly follow a verb_noun pattern (e.g., list_sources, collect_jobs, get_run). Exceptions like 'status' and 'source_coverage' use nouns, but they are still intuitive and the overall naming is coherent.
With 16 tools, the set is slightly above the ideal 3-15 range but still well-scoped for a comprehensive job-source management system. Each tool covers a distinct aspect, and no tool feels redundant.
The toolset covers the full lifecycle: discovery, submission, probing, review, collection, listing, reporting, and pipeline execution. Minor gaps exist (e.g., no explicit update/delete for sources), but the core workflows are well-supported and agents can work around these limitations.
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseCqualityAmaintenanceLocal MCP server for BOSS Zhipin workflows. Exposes 49 tools for job search, welfare filtering, recruiter messaging, pipeline tracking, and resume optimization for AI agents.77475 PyPI2,073MIT
- FlicenseNot gradedqualityDmaintenanceLocal MCP server that exposes fixed tools for GPT, Claude, and Gemini while routing to any OpenAI-compatible chat completions backend with independent configuration per target.1-
- AlicenseNot gradedqualityDmaintenanceMCP server that exposes 108+ omega-cli OSINT tools for reconnaissance, web analysis, threat intelligence, and reporting, enabling AI assistants to perform comprehensive open-source intelligence tasks.MIT
- FlicenseNot gradedqualityDmaintenanceA custom MCP server with 6 utility tools (file search, file reading, math calculation, JSON formatting, time query, system info) that demonstrates MCP protocol workflow and integrates with LangChain agents.-