oriole
Oriole · 黄雀 Motor de Empleo
中文说明 · Arquitectura · Fuentes · Verificación
Convierte la web abierta en un mapa trazable y con revisión previa de fuentes de empleo, no en un montón opaco de listados extraídos.
Oriole es un motor de inteligencia de fuentes de empleo abierto y de ámbito nacional para China. Descubre publicadores públicos de reclutamiento, verifica sus endpoints, exige aprobación humana antes de la recopilación, normaliza los empleos según su lugar de trabajo real y expone el resultado a cualquier LLM a través de 16 herramientas MCP.
Está construido deliberadamente como un motor, no como un sitio web único. Puede ejecutarlo desde la CLI, programarlo a medianoche, incrustar el núcleo determinista en otro servicio Node.js o conectar un modelo compatible con MCP sin entregar a ese modelo sus credenciales.
Lo que está implementado
Capacidad | Implementación |
Geografía nacional | Taxonomía determinista de dos niveles para China: 34 regiones de nivel provincial y 365 entradas de prefectura/dependencia directa provincial |
Clasificación del lugar de trabajo | Utiliza el lugar de trabajo indicado en el empleo, conserva los empleos con varias ubicaciones, admite filtros por provincia/ciudad y rechaza las filas de solo extranjero. |
Descubrimiento de fuentes | Nueve semillas auditadas, una lista de control limitada a 19 empleadores, directorios oficiales, Baidu Search API, Common Crawl URL Index, las 365 tareas de región de segundo nivel y URLs enviadas. |
Recopilación estable | Adaptadores de búsqueda pública con límites para Lever, Greenhouse, Ashby y ByteDance/Feishu Recruitment, con rotación de offset persistente, JSON público flexible, JSON-LD, RSS/Atom, Sitemap XML y HTML protegido. |
Grafo de fuentes | Relaciones con evidencia entre publicador, fuente, región, punto de entrada, endpoint, canal de descubrimiento y empleo. |
Flujo de confianza |
|
Evidencia | Registros de ejecución, resúmenes HTTP, hashes de contenido, artefactos comprimidos de respuestas en crudo, trazabilidad de fuente/empleo y auditorías legibles por máquina. |
Interfaz de agente | 16 herramientas MCP bilingües sobre JSON-RPC 2.0 NDJSON stdio; negociación moderna |
Operación diaria | Ejecutor idempotente con fecha de Pekín y programación fluida en GitHub Actions a las |
Seguridad | Acceso saliente solo HTTPS, anclaje de DNS a direcciones públicas, defensas contra SSRF, protecciones de redirects y robots, límites de tiempo/tamaño/filas, límites de velocidad y fijación de secretos a un host. |
Related MCP server: OpenAI-Compatible MCP Gateway
El modelo de fuentes
Los canales de descubrimiento y las fuentes de empleo tienen funciones distintas:
Baidu es un radar de descubrimiento. Cuando está configurado, Oriole llama al endpoint oficial de Qianfan de Baidu y almacena evidencia a nivel de solicitud. Nunca obtienels una página de resultados de Baidu.
Common Crawl es un respaldo de archivo/índice sin contraseña para tareas controladas con
site:. Es verificación de que las URLs públicas existen; no se trata como un motor de búsqueda de texto completo ni como la fuente definitiva de los empleos.Public directories siembran publicadores públicos y autorizados, tanto nacionales como locales, incluyendo directorios de empleo público nacional, empleo universitario, instituciones públicas, empresas centrales de propiedad estatal y departamentos gubernamentales.
Los sitios de los empleadores, las tablas ATS oficiales y las páginas de empleo de los gobiernos son los objetivos de recopilación de larga vida. Una fuente debe superar la comprobación de seguridad y la revisión humana antes de que sus empleos puedan introducirse en el Registro.
User submission permite que otro Agente u operador proponga una URL pública, con la misma compuerta de comprobación y revisión.
No se necesita ninguna clave de Baidu para recopilar las nueve semillas de origen previas o para descubrir candidatos del catálogo oficial. La capacidad del proveedor se especifica por detrás de la consulta: el descubrimiento ordinario por palabras clave es solo en Baidu, por lo que esas tareas permanecen visiblemente blocked en status.discoveryBacklog y en las estadísticas de ejecución de descubrimiento cuando Baidu no está disponible. Common Crawl solo puede utilizarse en tareas controladas site:; el trabajo bloqueado nunca se cuenta como completado.
El repositorio público no encierra cero registros de empleo. El comando npm run init importa nueve semillas de fuentes públicas cuidadosamente auditan—objeto de apuntes, incluyendo ByteDance, y una fuente de empleo gubernamental—de modo que un clon limpio tenga objetivos de recopilación funcionales sin publicar una instantánea anticuada o privada. Esto no es aprobación automática de resultados de búsqueda: el manifiesto de semillas es una decisión de confianza revisada y todas las fuentes descubiertas todavía requieren aprobación.
La cobertura es un informe de carencias medible, no una afirmación de captura completa global de empleos. En la lista de control de 19 empleadores, ByteDance es el único destino de arranque revisado; las otras 18 raíces de empleadores comienzan como candidatas no aprobadas y no pueden producir empleos hasta que se comprueban, se verifican y se aprueban.
La recopilación de ByteDance/Feishu está delimitada legalmente a 50 páginas, 5000 filas fusqueables y 24 MB por invocación de fuente. Cuando una invocación no llega al fondo, una ejecución confirmada guarda un cursor con verificacción de generación bajo source.collection.resume; la siguiente parte se refresca una vez la parte inicial y luego continuamente la cola conuna página de solapamiento intencionado. Las escrituras de empleo y el avance del cursor comparten una única transacción atómica del Registro. Antes de cualquiera de las dos, el Registro compara y intercambia la revisión de la fuente leída por el recolector y la generación guardada del cursor; cualquiera de los dos conflictos no escribe ni empleos ni cursor. En vista previa, error o conflicto nunca avanza la posición guardada. Un segmento de cola reanudado permanece pagination.complete: false incluso al cerrar un ciclo de rotación, porque una fuente con offsetsmudables no es una instantánea entre ejecuciones y no puede justificar el cierre de máster. Comprue neighbors la evidencia de recopilación y del Registro por separado: npm run coverage mide el estado de fuente, canal y región y no usa el seguimiento de paginación porcursor.
Vea docs/SOURCES.md para conocer los límites exactos de los proveedores y el catálogo de semillas.
Inicio rápido
Requisitos: Node.js 22.13+. Oriole no tiene dependencias de ejecución y no necesita ningún secreto para inicializarse o recolectar sus fuentes preaprobadas, descubrir desde el catálogo oficial o ejecutar tareas controladas site: de Common Crawl.
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 420000Después de init, status debe mostrar 9 fuentes aprobadas y 0 empleos incluidos. Los empleos solo aparecen tras una recopilación real y cometida.
Para realizar una comprobación de solo previsualización y generación de evidencia, no se necesita clave de Baidu, realizar npm run live-source-check. Se validan las URL oficiales de solicitud y se imprime un resumen compacto en lugar de respuestas colosales o descripciones de trabajo. La previsualización lee la ventana correspondiente pero nunca compromete empleos ni avanza un cursor de reanudación guardado. El archivos flu trabajador de GitHub coincide puede ejecutarse manualmente o ponetiquetando un pull request live-source-audit.
Descubra el catálogo oficial incluido sin credencial:
node scripts/huangque/cli.mjs discover \
--providers official_catalog \
--force
node scripts/huangque/cli.mjs sources
node scripts/huangque/cli.mjs graphEl descubrimiento crea candidatos; no los convierte silenciosamente en objetivos de recopilación. Compruebe un candidato, inspeccione la evidencia y la revisión actual del Registro, y luego apruebe explícitamente:
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 420100Todo el estado es local por defecto:
.huangque/state.json— Registro atómico portátil;.huangque/artifacts/— evidencia comprimida y referenciada por contenido;.huangque/latest-audit.json— la última auditoría automática legible por máquina.
Estas rutas se pasan por alto en un repositorio Git y pueden reubicarse mediante variables de entorno.
Conexión de cualquier LLM mediante MCP
Arranque el servidor stdio:
npm run mcpEjemplo de configuración del cliente 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"
}
}
}
}El servidor expone herramientas para: ejecutar el pipeline, consultar ejecuciones, estado, lago de cobertura de fuentes medible, descubrimiento, envío de fuentes públicas, pruebas de conex, listado de fuentes, listado de empleos, listado de regiones, lectura del grafo, revisión humana, recopilación, trabajo pendiente, auditoría y exportación de proyección portátil.
huangque.list_regions informa de los agregados únicos por empleo a nivel de provincia, a nivel de solo provincia y en cada ciudad de segundo nivel. Un empleo ofrecido explícitamente en dos ciudades de una misma provincia cuenta una vez en el total provincial y una vez en cada ciudad correspondiente.
La aprobación de fuentes a través de MCP está desactivada por defecto. Un operador debe establecer de forma deliberada HUANGQUE_ALLOW_MCP_REVIEW=1; la aprobación por CLI sigue soportada sin debilitar ese límite del lado del servidor.
Descubrimiento opcional con Baidu
Copie la configuración de ejemplo y establezca su clave localmente o como secreto de GitHub Actions. No la incluya nunca en el repositorio.
cp .env.example .env
export HUANGQUE_BAIDU_API_KEY="<your-key>"
node scripts/huangque/cli.mjs discover --providers baidu --max-queries 5La clave solo se envía a qianfan.baidubce.com. Se rechaza un endpoint personalizado en otro host. El presupuesto diario por defecto es de 40 solicitados y puede reducirse con HUANGQUE_BAIDU_DAILY_BUDGET.
Si Baidu no está configurado, no se detiene la recopilación de fuentes aprobadas. Solo deja bloqueadas explícitamente las tareas de descubrimiento activo por palabras clave; Common Crawl sin contraseñas sigue atendiendo las tareas site: del plan de consulta.
Referencia oficial: Baidu Qianfan AI Search API.
Actualización nacional diaria a medianoche
El flujo de trabajo incluido se ejecuta a las 16:00 UTC, lo que es 00:00 Asia/Shanghai del siguiente día calendario local:
npm run dailyEl runner escribe un marcador de finalización de ejecución de fecha en Pekín, de modo que la concurrencia de reintento no duplica la misma ejecución del día, a menos que se indique --force. Programas de GitHub pueden arrancar con unos minutos de retraso; en el control de fecha es el marcado de día calendario, no la cola. Ver docs/SCHEDULING.md.
Grafo de fuentes, no solo una lista
Cada borde del grafo lleva evidencia y marcas de observación. Las relaciones básicas son:
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 jobLas empresas de publicador y de región se rigen por la última evidencia autorizada de fuentes aprobadas: cuando una identidad de fuente auditada cambia, se eliminan las relaciónes obsoletas published_by y covers_region en lugar de dejarlas como hechos históricos engañosos.
«Grafo completo» aquí significa que cada fuente registrada está representada con las relaciones respaldadas por su evidencia y que cada relación es auditable. No significa que el catálogo finitoa contenga cada puesto de trabajo o cada empleador de toda China; Oriole está diseñado para ampliar y reverificar continuamente ese grafo.
Verificación antes de confiar
npm run verify
npm run auditLa suite de pruebas enfoca normalización, regiones nacionales, manejo de empleos con múltiples ubicaciones, proveedores, rotación de grandes lotes y de prueba, atomicidad y concurrencia del cursor, evidencia en el grafo, retención del Registro, ciclo de vida MCP, defensas SSRF, manejo de robots, propiedad de la fuente e identifici de empleo distinto. La auditoría de ejecución informa por separado si los proveedores externos y la programación publicada de GitHub tienen evidencia de éxito real en el Registro actual. Fixtures y una ejecución manual diaria nunca simulan un proveedor en vivo o un éxito real de GitHub Actions.
Siga la lista de comprobación reproducible en docs/VERIFY.md.
Límites
Oriole maneja fuentes web públicas y no protegidas por acceso. Excluye deliberadamente grupos privados de WeChat, OCR de imágenes, bandejas de entrada de correos electrónicos, listas de capit, de solo login, y otros canales privados. No solicita ni aplica a ningún trabajo en sus nombres ni toma decisiones de empleo. El simple acceso web a una fuente pública no exime del respeto a los términos del sitio, la política robots, sobre licencias de base de datos, obligaciones de privacidad o la ley aplicable. Los responsables de un implementation siguen a su fuente a dichas restricciones.
Estructura del proyecto
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 updateLas contribuciones son bienvenidas bajo Apache-2.0. Por favor, lea CONTRIBUTING.md y reporte problemas de seguridad a través de SECURITY.md.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityAmaintenanceLocal MCP server for BOSS Zhipin workflows. Exposes 49 tools for job search, welfare filtering, recruiter messaging, pipeline tracking, and resume optimization for AI agents.1,565MIT
- 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 gradedqualityCmaintenanceA 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.
Related MCP Connectors
MCP server exposing the Backtest360 engine API as tools for AI agents.
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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