Skip to main content
Glama
gaofeibilly-maker

oriole

Oriole · 黄雀 Job Engine

中文说明 · Architecture · Sources · Verification

Turn the open web into a traceable, review-gated map of job sources—not an opaque pile of scraped listings.

Oriole is an open, nationwide China job-source aggregation engine and Agent. It discovers public recruitment publishers, verifies their endpoints, requires human approval before collection, normalizes jobs by their actual workplace, and exposes the result through 18 bilingual MCP tools.

It is deliberately built as an engine, not a single website. Run it from the CLI, use the separate job-update and source-spider schedules, embed the deterministic core in another Node.js service, or connect it to an LLM client that supports MCP. “MCP-capable” is an integration requirement: Oriole does not make every LLM remotely usable automatically, and the client still needs local process access or an operator-provided transport.

What is implemented

Capability

Implementation

Nationwide geography

Deterministic two-level China taxonomy: 34 province-level regions and 365 prefecture/province-direct entries

Workplace classification

Uses the job's stated work location, preserves multi-location jobs, supports province/city filters, and rejects foreign-only rows

Source discovery

A bounded 5,000+ employer universe built from four official directories plus 19 versioned priority employers, nine channels, Baidu Search API, Common Crawl URL Index, and submitted URLs

Stable collection

Lever, Greenhouse, Ashby, bounded ByteDance/Feishu Recruitment public search adapters with durable offset rotation, flexible public JSON, JSON-LD, RSS/Atom, Sitemap XML, and guarded HTML

Source graph

Evidence-bearing relations between publisher, source, region, entry point, endpoint, discovery channel, and job

Trust workflow

candidate → probed → approved/rejected; discovery and probing never auto-approve a source

Evidence and persistence

Run records, HTTP summaries, hashes, source/job traceability, and a complete durable state tree on oriole-state: the Registry gzip bundle/manifest, employer universe, spider queue, and receipts; compressed raw run evidence is retained separately as GitHub artifacts for 30 days

Agent interface

18 bilingual MCP tools over JSON-RPC 2.0 NDJSON stdio; modern 2026-07-28 plus legacy 2025-11-25, 2025-06-18, and 2025-03-26 negotiation

Automation

Separate Beijing-time schedules: jobs daily at 00:17; employer universe Sunday at 01:15; source spider daily at 02:30; deeper scan Sunday at 03:30; recovery audit Sunday at 04:47

Query coverage

833 bounded discovery tasks: 730 prefecture-rotation tasks plus national, province, ATS, industry, park, and association work

Job freshness

The hosted current-job projection requires source-scoped evidence no older than 14 days; older Registry evidence is retained but is not advertised as fresh

Safety

HTTPS-only outbound access, public-address DNS pinning, SSRF defenses, redirect and robots guards, time/size/row limits, rate limits, and secret-host pinning

Related MCP server: OpenAI-Compatible MCP Gateway

The source model

Discovery channels and job sources have different jobs:

  • Baidu is a discovery radar. When configured, Oriole calls Baidu's official Qianfan endpoint and stores request-level evidence. It never scrapes a Baidu result page.

  • Common Crawl is a keyless archive/index fallback for controlled site: patterns. It verifies that public URLs existed; it is not treated as a full-text search engine or as the final job source.

  • Official employer directories define a bounded source-spider universe. The four authority inputs are SSE Main Board, SSE STAR Market, CNINFO's Shenzhen A-share disclosure-publisher directory, and the SASAC central-enterprise directory; the reviewed 19-employer inventory is versioned separately. The checked artifact contains 5,425 deduplicated targets. Its CNINFO scope explicitly includes current and historical publishers after excluding names clearly ending in 退/退市; the SASAC request failed with HTTP 502 during this build, so its 99 entries are labelled as the versioned 2026-07-11 snapshot rather than live data.

  • Employer sites, official ATS boards, and government employment pages are the long-lived collection targets. A source must pass safety probing and human review before its jobs can enter the Registry.

  • User submission lets another Agent or operator propose a public URL, while keeping the same probe-and-review gate.

No Baidu key is required to collect the nine pre-approved source seeds or to discover candidates from the bundled official catalog. Provider capability is explicit per query task: ordinary keyword discovery is Baidu-only, so those tasks remain visibly blocked in status.discoveryBacklog and discovery-run statistics when Baidu is unavailable. Common Crawl is eligible only for controlled site: tasks; blocked work is never counted as completed.

The main source tree and a clean clone start with zero job records. npm run init imports nine explicitly audited public source seeds—eight employer-controlled boards, including ByteDance, and one government employment source—so a clean clone has functional collection targets without bundling a stale job snapshot. A deployed repository may deliberately keep current jobs and receipts on its separate public oriole-state branch; that durable operational state is not part of the clean-clone seed. This is not automatic approval of search results: the seed manifest itself is a reviewed trust decision, and all newly discovered sources still require probe and approval.

Coverage is a measurable gap report, not a claim of complete national job capture. The 5,000+ universe is a bounded discovery denominator, not 5,000+ approved job feeds. The source spider prioritizes missing and high-value employers, keeps persistent retry/backoff state, and can only create candidate or probed records. Every newly found source still needs a human approval before collection. The versioned ByteDance priority root is https://jobs.bytedance.com/; its reviewed experienced-hire listing remains the bootstrap collection entry.

ByteDance/Feishu collection is bounded to 50 pages, 5,000 upstream rows, and 24 MB per source invocation. When one invocation cannot reach the tail, a committed run stores a fingerprinted, generation-checked cursor under source.collection.resume; the next segment refreshes one head page and then continues the tail with one page of deliberate overlap. Job writes and cursor advancement share one atomic Registry transaction. Before either mutation, the Registry compare-and-swaps both the source revision read by the collector and the saved cursor generation; either conflict writes neither jobs nor cursor. Preview, failure, or a conflict never advances the saved position. A resumed tail segment remains pagination.complete: false even when it closes a rotation cycle, because a changing offset feed is not a cross-run snapshot and cannot justify missing-job closure. Inspect collection-run and Registry evidence separately: npm run coverage measures source/channel/region state and does not read pagination or resume progress.

The hosted projection applies a separate freshness boundary: a confirmed_active job needs qualifying source-scoped evidence within 14 days. A partial cursor segment cannot refresh jobs it did not observe. This filters the portable export; it does not erase older evidence from the complete Registry.

See docs/SOURCES.md for the exact provider boundaries and seed catalog.

Quick start

Requirements: Node.js 22.13+. Oriole has no runtime dependencies and needs no secret to initialize or collect its pre-approved sources, discover from the official catalog, or run controlled Common Crawl site: tasks.

git clone https://github.com/gaofeibilly-maker/oriole-job-engine.git
cd oriole-job-engine
npm ci --ignore-scripts
npm test
npm run init
npm run status
npm run coverage
npm run regions -- --province-code 420000

After init, status should show 9 approved sources and 0 bundled jobs. Jobs only appear after a real committed collection.

For a preview-only, evidence-producing check of ByteDance's current public jobs (no Baidu key required), run npm run live-source-check. It validates official application URLs and prints a compact summary rather than raw responses or job descriptions. Preview reads the applicable window but never commits jobs or advances a saved resume cursor. The matching GitHub workflow can be run manually or by labeling a pull request live-source-audit.

Discover the bundled official catalog without a credential:

node scripts/huangque/cli.mjs discover \
  --providers official_catalog \
  --force

node scripts/huangque/cli.mjs sources
node scripts/huangque/cli.mjs graph

Discovery creates candidates; it does not silently turn them into collection targets. Probe a candidate, inspect its evidence and current Registry revision, then approve it explicitly:

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

All state is local by default:

  • .huangque/state.json — atomic portable Registry;

  • .huangque/artifacts/ — content-addressed, compressed evidence;

  • .huangque/source-spider-state.json — persistent employer queue and backoff state;

  • .huangque/latest-job-update.json and .huangque/job-updates/ — latest and dated job-update receipts;

  • .huangque/latest-audit.json — latest machine-readable self-audit.

These paths are ignored by Git and can be relocated with environment variables. The reference GitHub deployment stores the Registry as registry.json.gz plus a manifest containing compressed and plaintext SHA-256 values; plaintext registry.json is never committed. The same dedicated oriole-state tree also contains the validated employer universe, spider queue, and receipts. Compressed raw run evidence is uploaded separately with 30-day retention. The bundle code rejects compressed Registry data above 90 MiB (94,371,840 bytes), below the official GitHub 100 MiB per-file block. Deployments that approach this guard must move Registry storage to a database/object store rather than raising it.

Initialize oriole-state once

The scheduled workflows cannot check out a branch that does not exist. Before the first Actions run, create a clean state branch from a disposable directory. These commands do not touch the current source branch, and the final push is intentionally not forced: if oriole-state already exists, it fails instead of overwriting durable state.

ORIOLE_ORIGIN_URL="$(git remote get-url origin)"
ORIOLE_BOOTSTRAP_ROOT="$(mktemp -d)"
mkdir "$ORIOLE_BOOTSTRAP_ROOT/repository"

npm run init-state -- \
  --output "$ORIOLE_BOOTSTRAP_ROOT/repository/state-data"

ls -1 "$ORIOLE_BOOTSTRAP_ROOT/repository/state-data"
test ! -e "$ORIOLE_BOOTSTRAP_ROOT/repository/state-data/registry.json"

git -C "$ORIOLE_BOOTSTRAP_ROOT/repository" init -b oriole-state
git -C "$ORIOLE_BOOTSTRAP_ROOT/repository" config user.name "Oriole State Bootstrap"
git -C "$ORIOLE_BOOTSTRAP_ROOT/repository" config user.email "actions@users.noreply.github.com"
git -C "$ORIOLE_BOOTSTRAP_ROOT/repository" remote add origin "$ORIOLE_ORIGIN_URL"
git -C "$ORIOLE_BOOTSTRAP_ROOT/repository" add -- state-data
git -C "$ORIOLE_BOOTSTRAP_ROOT/repository" diff --cached --name-only
git -C "$ORIOLE_BOOTSTRAP_ROOT/repository" commit -m "state: initialize oriole-state"
git -C "$ORIOLE_BOOTSTRAP_ROOT/repository" push origin HEAD:refs/heads/oriole-state

The staged inventory must contain exactly employer-universe.json, registry.bundle-manifest.json, registry.json.gz, and source-spider-state.json. The initialization summary must report nine approved reviewed seeds, zero jobs, zero runs, zero receipts, and no persisted plaintext Registry. This proves only that the durable state was initialized; it is not a successful online job update, source-spider run, or recovery exercise. Do not rerun this bootstrap to repair an existing branch—restore and audit the existing state instead.

Connect an MCP-capable LLM client

Start the stdio server:

npm run mcp

Example MCP client configuration:

{
  "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"
      }
    }
  }
}

The 18 tools cover pipeline runs, run lookup, status, measurable source-coverage gaps, discovery, public-source submission, probing, source listing, job listing, region listing, graph reading, human review, collection, compatible due-job execution, the independent source spider, the independent job updater, audit, and portable projection export.

Network-tool defaults intentionally perform a small unit of work (for example, one employer or one due source) within the MCP deadline; callers can request a larger bounded batch or repeat the call. A failed or partial business result is returned with isError: true and completed: false, not labelled as successful merely because the process returned JSON.

The server is stdio MCP, not a public hosted endpoint. A compatible client must be configured to start the local process (as above), or an operator must provide a separate secured transport. Merely choosing an arbitrary LLM does not give it automatic remote access to Oriole.

huangque.list_regions reports unique-job aggregates at province level, province-only level, and each second-level city. A job explicitly offered in two cities in one province counts once in the province total and once in each applicable city.

Source approval through MCP is disabled by default. An operator must intentionally set HUANGQUE_ALLOW_MCP_REVIEW=1; CLI approval remains available without weakening that server-side boundary.

Optional Baidu discovery

Copy the example configuration and set your key locally or as a GitHub Actions secret. Never commit it.

cp .env.example .env
export HUANGQUE_BAIDU_API_KEY="<your-key>"
node scripts/huangque/cli.mjs discover --providers baidu --max-queries 5

The key is only sent to qianfan.baidubce.com. A custom endpoint on another host is rejected. The default daily budget is 40 requests and can be lowered with HUANGQUE_BAIDU_DAILY_BUDGET.

Leaving Baidu unconfigured does not stop approved-source collection. It only leaves ordinary keyword-based active-discovery tasks explicitly blocked; keyless Common Crawl continues to handle the query plan's controlled site: tasks.

Official reference: Baidu Qianfan AI Search API.

Independent schedules

The reference GitHub automation separates source discovery from job refresh:

Beijing time

UTC cron

Work

Daily 00:17

17 16 * * *

Refresh due approved job sources only

Sunday 01:15

15 17 * * 6

Atomically rebuild and validate the persistent employer universe

Daily 02:30

30 18 * * *

Run the bounded source spider

Sunday 03:30

30 19 * * 6

Run a deeper source/region gap scan

Sunday 04:47

47 20 * * 6

Restore the complete oriole-state tree, verify its inventory and Registry bundle, run Agent status, and persist a recovery receipt

Run the job updater locally with:

npm run daily

The runner writes a Beijing-date completion receipt, so a retry does not duplicate the same day's run unless --force is supplied. Run the source spider separately with npm run source-spider; use -- --deep only for the deeper mode. GitHub schedules can start late, so these are configured target times rather than proof that an online run occurred. See docs/SCHEDULING.md.

Source graph, not just a list

Each graph edge carries evidence and observation timestamps. Core relations are:

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

Publisher and region edges follow the latest authoritative approved-source evidence: when an audited source identity changes, obsolete published_by and covers_region relations are pruned instead of remaining as misleading historical facts.

“Complete graph” here means that every registered source is represented with the relations supported by its evidence and that every relation is auditable. It does not mean the finite catalog already contains every employer or every open job in China; Oriole is designed to expand and re-verify that graph continuously.

Verify before trusting

npm run verify
npm run audit

The test suite exercises normalization, the 5,000+ bounded universe contract, nationwide regions and 833 query tasks, multi-location handling, providers, bounded large-feed rotation, conditional GET, cursor atomicity/concurrency, graph evidence, Registry retention, state initialization/recovery, official-SDK MCP interoperability, SSRF controls, robots handling, source ownership, and job identity.

Keep these three claims separate:

  1. Implementation (implementationComplete) says the code, workflow wiring, schemas, and safety contracts exist. Local tests and stateIntegrityPassed are supporting checks; neither is online evidence.

  2. Operational now (operationalNow) says the current durable state contains real traceable jobs, graph and queue activity, recent real Provider observations, recent GitHub job/spider receipts, and a recent full-state recovery receipt. A configured cron, an initialized branch, a fixture, or a local run cannot satisfy it.

  3. Cross-day maturity (maturityObserved) says successful GitHub job-update receipts and online-evidenced spider receipts cover at least two distinct Beijing natural dates. It measures repetition only and does not by itself imply that all current operationalNow recency checks still pass.

The v2.0.0 documentation describes implemented behavior; it does not claim that your GitHub workflows have already run successfully. Until the complete online checks pass, report “implemented/configured, operational verification pending.” Until both dated series cover two dates, separately report “cross-day maturity pending.” fullyOperational is true only when implementation, state integrity, operational-now, and maturity checks all pass.

Follow the reproducible checklist in docs/VERIFY.md.

Boundaries

Oriole handles public, non-login web sources. It intentionally excludes private WeChat groups, image OCR, email inboxes, CAPTCHA/login-only pages, and other private channels. It does not apply for jobs or make employment decisions. Public web access does not waive a site's terms, robots policy, database rights, privacy obligations, or applicable law; deployers remain responsible for source-specific compliance.

Project layout

data/huangque/              verified seeds, employer universe, query/channel plans, public catalog
scripts/huangque/           CLI, independent updater/spider, MCP server, deterministic core
tests/                      Node test suite
docs/                       architecture, sources, schedule, verification
.github/workflows/          CI, employer refresh, separate job/source schedules, and full-state recovery audit

Contributions are welcome under Apache-2.0. Please read CONTRIBUTING.md and report security issues through SECURITY.md.

Available Tools

16 tools
huangque.audit运行黄雀自审A
Read-onlyIdempotent

运行不变量与外部激活项检查;不会把报告写入任意路径。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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,预览不写岗位库。

ParametersJSON Schema
NameRequiredDescriptionDefault
commitNo
source_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 发现候选;只写候选和证据。

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
city_codeNo
providersNo
bucket_idsNo
max_queriesNo
province_codeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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导出托管投影B
Idempotent

把完整 portable Registry 确定性压缩为外部托管系统可同步的有界投影,并返回文件路径与截断清单。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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查看运行A
Read-onlyIdempotent

按 run_id 读取黄雀运行状态、统计、证据索引和错误。

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 graphB
Read-onlyIdempotent

分页读取发布主体、来源、地区、入口、端点、发现渠道与岗位之间的有证据关系。 Reads evidence-bearing source graph relations.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
source_idNo
relation_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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查询岗位库B
Read-onlyIdempotent

分页读取已由批准来源采集的全国标准化岗位,可按省、市筛选。 Lists normalized China jobs with province/prefecture filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
statusNo
city_codeNo
province_codeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 regionsB
Read-onlyIdempotent

读取黄雀使用的省级—地级二级地区目录和岗位计数。 Returns the deterministic province/prefecture taxonomy and job counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
province_codeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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查询来源图谱B
Read-onlyIdempotent

查询持久化来源 Registry;可按生命周期或验证状态过滤。

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
city_codeNo
lifecycleNo
province_codeNo
verification_stateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

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 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.

Purpose4/5

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.

Usage Guidelines3/5

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/大小/超时防护下的真实探测;不会自动批准。

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
source_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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人工审核来源A
Destructive

批准或驳回已探测来源。要求人工确认、审核人、理由和 expected_revision;MCP 端默认禁用,需 operator 显式授权。

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonYes
decisionYes
source_idYes
reviewed_byYes
confirmationYes
expected_revisionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 才写岗位库。

ParametersJSON Schema
NameRequiredDescriptionDefault
commitNo
max_probesNo
max_queriesNo
max_collectionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

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 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.

Purpose5/5

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.

Usage Guidelines3/5

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

执行发现→安全探测→候选入来源图谱;新来源不会自动批准。可选采集已批准来源。

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
commitNo仅影响已批准来源;默认预览
city_codeNo可选六位地级行政区代码 / optional prefecture code
providersNo发现 Provider;默认全部
bucket_idsNo
max_probesNo
max_queriesNo
province_codeNo可选六位省级行政区代码 / optional province code
collect_approvedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 gapsA
Read-onlyIdempotent

按 9 类渠道、19 家有界重点企业、34 个省级与 365 个二级区域计算可审计缺口;不把发现线索冒充已批准来源,也不声称抓全互联网。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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查看黄雀状态A
Read-onlyIdempotent

读取 Registry 版本、来源/岗位/运行统计、到期查询桶和 Provider 配置状态。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
noteNo
titleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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. Dates show when Glama detected each change.

  1. 16 tool updatesv1.1.1
    • First observedhuangque.audit
    • First observedhuangque.collect_jobs
    • First observedhuangque.discover_sources
    • First observedhuangque.export_hosted_projection
    • First observedhuangque.get_run
    • First observedhuangque.get_source_graph
    • First observedhuangque.list_jobs
    • First observedhuangque.list_regions
    • First observedhuangque.list_sources
    • First observedhuangque.probe_source
    • First observedhuangque.review_source
    • First observedhuangque.run_due
    • First observedhuangque.run_pipeline
    • First observedhuangque.source_coverage
    • First observedhuangque.status
    • First observedhuangque.submit_source

TDQS

B3.4/5.0
Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP 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
  • F
    license
    Not graded
    quality
    C
    maintenance
    A 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.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gaofeibilly-maker/oriole-job-engine'

If you have feedback or need assistance with the MCP directory API, please join our Discord server