Ashby job boards

Busca en los tableros de empleo públicos de Ashby: resuelve una empresa, lee sus vacantes y el salario que publica.

Documentación

mcp-ashby

npm CI license MCP Registry Glama M8ven LobeHub Install in Cursor Install in VS Code

Ashby es un software de reclutamiento, y cada empresa que lo utiliza obtiene un tablón de empleo público incluido. Cada tablón contiene las posiciones abiertas de esa empresa con su título, su departamento y equipo, el tipo de empleo, las ubicaciones y si el trabajo es remoto, el anuncio completo y, cuando la empresa decide publicarlo, la remuneración: un rango salarial, una participación accionaria, una comisión o un bono, cada uno con el período al que corresponde. Ashby mantiene un tablón por empresa y no publica un índice entre ellos.

Este servidor conecta un cliente de chat con esos tablones. Usted nombra las empresas que le interesan, y convierte cada nombre en el token que dirige a su tablón, busca sus publicaciones, las filtra por departamento, equipo, ubicación, país, tipo de empleo, modalidad remota, antigüedad o remuneración, lee una publicación completa, enumera las palabras que cada tablón usa realmente y compara la remuneración de varias publicaciones una al lado de la otra. No necesita clave de API ni cuenta.

Versión francesa


Instalación

Instalación en un clic

Install in Cursor Install in VS Code

Claude Code

claude mcp add ashby -- npx -y mcp-ashby

Claude Desktop, Cursor y cualquier cliente que use el formato de configuración estándar

{
  "mcpServers": {
    "ashby": {
      "command": "npx",
      "args": ["-y", "mcp-ashby"]
    }
  }
}

Se requiere Node 24 o posterior, y no es necesario configurar ninguna variable de entorno.

Con Docker

{
  "mcpServers": {
    "ashby": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-ashby:2.0.1"]
    }
  }
}

-i mantiene stdin abierto, que es por donde viaja el protocolo, y -t se omite porque una TTY reescribe el flujo. El contenedor necesita HTTPS saliente hacia api.ashbyhq.com, y nada más: sin volumen, sin puerto, sin credencial.

Paquete, sin npm

Descargue mcp-ashby-2.0.1.mcpb desde la última versión y ábralo. Un cliente que admita paquetes MCP lo instala por sí solo, sin npm y sin archivo de configuración que editar. El paquete incluye sus dependencias, por lo que no se descarga nada en el momento de la instalación.

Lo que puede preguntar

  • "¿Está Ramp contratando en Ashby?"
  • "Encuéntrame roles de diseño remotos en Ramp y Linear."
  • "Léeme esa publicación completa."
  • "¿Qué departamentos usa ese tablón para clasificar sus empleos?"
  • "Compara los salarios de esas publicaciones de ingeniería una al lado de la otra."

Toda pregunta parte de una empresa, ya que Ashby no ofrece búsqueda entre tablones. search_jobs resuelve los nombres que usted proporciona, por lo que no se necesita preparación:

resolve_board(["Ramp"])          ->  ramp, publishing
search_jobs(["Ramp"], query: "designer", is_remote: true)
get_job("ramp", "b0c8…")

Herramientas

HerramientaQué hace
resolve_boardConvierte un nombre de empresa en el token del tablón de Ashby.
search_jobsBusca las publicaciones de las empresas que usted nombra.
get_jobLee una publicación completa, incluido el anuncio.
list_filter_valuesEnumera las palabras que usa un tablón, con cuántas publicaciones las incluyen.
compare_compensationCompara un componente de remuneración de varias publicaciones una al lado de la otra.

Cada tablón mantiene sus propios departamentos y equipos, por lo que un filtro escrito con el vocabulario de otro tablón se reduce a nada. list_filter_values publica las palabras que un tablón usa realmente.

resolve_board

Convierte un nombre de empresa en el token que dirige a su tablón de Ashby.

ArgumentoTipoObligatorioQué hace
namestringUn nombre de empresa, o un token de tablón de Ashby que ya conozca.

A cambio: found, los tablones que respondieron, y tried, los formularios realmente enviados en orden. Se prueban cuatro formularios por nombre, por lo que no encontrar nada nunca es prueba de que una empresa esté ausente de Ashby.

search_jobs

Busca las publicaciones de las empresas nombradas. Ashby sirve un tablón completo de una vez, y cada restricción a continuación se aplica a lo leído.

ArgumentoTipoObligatorioQué hace
companiesarray de 1 a 10 cadenasNombres de empresas o tokens de tablón.
querystringnoPalabras a buscar.
search_intitle o title_and_description, predeterminado titlenoDónde se busca query.
departmentuna cadena o una lista de hasta 10noDepartamentos tal como los escribe el tablón.
teamuna cadena o una lista de hasta 10noEquipos tal como los escribe el tablón.
employment_typeuna cadena o una lista de hasta 6noTipos de empleo.
workplace_typeuna cadena o una lista de hasta 4noTipos de lugar de trabajo.
is_remotebooleanonoConservar las publicaciones marcadas como remotas.
countryun país o una lista de hasta 10noPaíses tal como los escribe el tablón.
location_containsstringnoParte de una línea de ubicación.
published_afteruna fecha ISO 8601noQué tan reciente debe ser una publicación.
has_compensationbooleanonoConservar las publicaciones cuya empresa publica un rango salarial.
salary_minnúmero, 0 o másnoUn mínimo para el componente salarial.
currencycódigo de tres letrasnoLa moneda en la que está escrito el mínimo.
salary_intervalstring, predeterminado 1 YEARnoEl período al que pertenece el mínimo.
sortpublished_desc, published_asc o title, predeterminado published_descnoCómo se ordenan las filas.
limitentero, 1 a 100, predeterminado 20noPublicaciones a servir.
offsetentero, 0 a 10000, predeterminado 0noPublicaciones a omitir.

A cambio: jobs, cada una con board y id, que get_job toma juntos, además de title, department, team, employment_type, location, country, secondary_location_count, workplace_type, is_remote, published_at con el desplazamiento que publica Ashby, compensation_summary, job_url y apply_url. Las filas no llevan texto de anuncio, en ningún límite. total_on_board cuenta las publicaciones que contienen los tablones leídos, total_matched las que los criterios conservaron y returned las de esta respuesta: tres números diferentes. per_company da un resultado por empresa con su status, filters_applied repite lo que se aplicó y undeclared cuenta las publicaciones que no declaran nada en un campo que se está filtrando, para que una restricción nunca las elimine en silencio.

get_job

Lee una publicación completa.

ArgumentoTipoObligatorioQué hacer
boardstringUn nombre de empresa, o un token de tablón de Ashby.
job_idstringEl identificador que lleva una fila de búsqueda.
descriptionplain, html o none, predeterminado plainnoCómo servir el anuncio.
include_compensationbooleano, predeterminado truenoIncluir la remuneración que publicó la empresa.

El anuncio llega a miles de caracteres, y html es el marcado propio de la empresa, sin reescribir.

A cambio: la publicación que lleva una fila de búsqueda, con su descripción, sus ubicaciones y los componentes de remuneración que publicó la empresa.

list_filter_values

Enumera las palabras que un tablón usa realmente, con cuántas publicaciones las incluyen.

ArgumentoTipoObligatorioQué hacer
boardstringUn nombre de empresa, o un token de tablón.
facetdepartments, teams, locations, countries, employment_types, workplace_types o all, predeterminado allnoQué vocabulario leer.

A cambio: facets, cada valor con el número de publicaciones que lo incluyen, y undeclared, las publicaciones que no declaran nada en ese aspecto. sibling_spellings nombra las variantes que difieren solo en mayúsculas o espacios, que un filtro trataría de otro modo como dos cosas diferentes.

compare_compensation

Compara un componente de remuneración de varias publicaciones una al lado de la otra.

ArgumentoTipoObligatorioQué hace
boardstringUn nombre de empresa o un token de bolsa.
job_idsarray de hasta 50 stringsnoLas ofertas a comparar.
departmentun string o una lista de hasta 10noComparar un departamento en su lugar.
teamun string o una lista de hasta 10noComparar un equipo en su lugar.
querystringnoPalabras para buscar en los títulos.
componentSalary, EquityCashValue, EquityPercentage, Commission o Bonus, por defecto SalarynoQué componente comparar.
intervalstring, por defecto 1 YEARnoEl período comparado.
limitentero, de 1 a 100, por defecto 25noOfertas a comparar.

Un componente a la vez: una participación de capital y un salario no se suman. Las ofertas citadas en otro período se listan por separado, sin convertir.

A cambio: rows, una por oferta, con el component y el interval sobre los que se compararon, currencies_present nombrando cada moneda en la respuesta, y not_published listando las ofertas cuya empresa no publicó nada, lo cual nunca es lo mismo que cero.

Qué significa una cifra salarial

Una empresa publica lo que elige. Una oferta sin rango regresa sin ninguno, nunca con un cero. Un rango se informa en la moneda y en el período en que Ashby lo lleva, y nunca se convierte ni se anualiza: comparar dos ofertas citadas en períodos diferentes se deja a quien sabe para qué es la comparación.

Configuración

No hay que configurar nada. El servidor no lee ninguna variable de entorno, y el bloque mcpServers anterior está completo tal como está escrito.

El ritmo, el tiempo de espera y la caché son ajustes de la capa del cliente, que Como biblioteca muestra cómo pasar. El intervalo entre dos solicitudes se puede ampliar allí y nunca reducir.

Errores

Cada fallo lleva uno de seis códigos, un mensaje y, donde ayuda, los valores que habrían sido aceptados.

CódigoQué pasóQué hacer
not_foundAshby respondió y no tiene tal bolsa u oferta.Verifica el token con resolve_board.
invalid_inputLos argumentos fueron rechazados antes de enviar cualquier solicitud.Lee el mensaje, que nombra el argumento y qué acepta.
rate_limitedAshby pidió a este cliente que se ralentizara.Espera y vuelve a llamar con los mismos argumentos. La oferta sigue en la bolsa.
parse_failureAshby respondió en una forma que este cliente no puede leer.Repórtalo en el rastreador de problemas.
network_errorLa solicitud no se completó.Inténtalo de nuevo en breve.
timeoutLa solicitud superó su plazo.Pide menos empresas o un limit más pequeño.

Como biblioteca

La capa que lee Ashby se publica por separado, con su ritmo, su caché y sus errores, y sin ningún protocolo adjunto.

import { Client } from "mcp-ashby/client";

const client = new Client({ minIntervalMs: 2000 });
const resolved = await client.resolveBoard("Ramp");
console.log(resolved.found);

ClientOptions toma minIntervalMs, timeoutMs, cacheTtlMs y fetchImpl. Un intervalo por debajo del mínimo publicado se ignora, por lo que el mínimo se mantiene aquí también.

Ritmo y atribución

Las solicitudes salen una a la vez con al menos un segundo entre ellas, y ese mínimo se mantiene sin importar cómo esté configurado el cliente. Ashby sirve toda una bolsa en una respuesta, que puede pesar megabytes, por lo que una sola pregunta sobre una empresa cuesta una solicitud y este servidor guarda la respuesta brevemente en lugar de volver a preguntar. El User-Agent lleva el proyecto y una dirección donde se puede contactar a una persona, y no imita ningún navegador.

Cada oferta lleva la dirección de su página de Ashby y su URL de postulación. Acredita a la empresa y enlaza esa página cuando muestres una oferta.

Este servidor MCP es un proyecto no oficial, sin afiliación con Ashby ni con las empresas cuyas bolsas lee.

Privacidad

Este servidor no recopila nada sobre ti y no envía nada a su autor. Se ejecuta en tu máquina, contacta a api.ashbyhq.com y nada más, guarda sus respuestas en memoria mientras se ejecuta y no escribe nada en disco. PRIVACY.md indica qué lleva una solicitud y qué ajustes cambian algo de eso.

Desarrollo

npm install
npm run build:fixtures
npm test
npm run check

Las pruebas se ejecutan contra fixtures generados y no hacen ninguna solicitud de red. La suite en vivo, npm run test:live, hace una solicitud por ruta y se ejecuta cada noche contra el propio servicio.

Contribuciones

Los errores, preguntas e ideas van en el rastreador de problemas. Las solicitudes de extracción son bienvenidas; abrir un problema primero ayuda a acordar la forma del cambio. Consulta CONTRIBUTING.md.

Licencia

MIT, consulta LICENSE. Las ofertas pertenecen a las empresas que las publicaron.


mcp-ashby (francés)

Versión en inglés

Ashby es un software de reclutamiento, y cada empresa que lo usa recibe con él un sitio de ofertas público. Cada sitio lleva los puestos abiertos de esa empresa con su título, su departamento y su equipo, el tipo de contrato, las ubicaciones y el carácter remoto del trabajo, el anuncio completo y, cuando la empresa ha elegido publicarlo, la remuneración: un rango salarial, una participación de capital, una comisión o un bono, cada uno con el período sobre el que se expresa. Ashby aloja un sitio por empresa y no publica ningún índice que los atraviese.

Este servidor conecta un cliente de conversación con estos sitios. Nombras las empresas que te interesan, y él traduce cada nombre al token que direcciona su sitio, busca en sus ofertas, las filtra por departamento, equipo, ubicación, país, tipo de contrato, trabajo remoto, frescura o remuneración, lee una oferta completa, lista las palabras que cada sitio usa realmente y pone las remuneraciones de varias ofertas lado a lado. Sin clave de API, sin cuenta.

Instalación

Instalación en un clic

Install in Cursor Install in VS Code

Claude Code

claude mcp add ashby -- npx -y mcp-ashby

Claude Desktop, Cursor y cualquier cliente con formato de configuración estándar

{
  "mcpServers": {
    "ashby": {
      "command": "npx",
      "args": ["-y", "mcp-ashby"]
    }
  }
}

Se necesita Node 24 o más reciente, y no hay que configurar ninguna variable de entorno.

Con Docker

{
  "mcpServers": {
    "ashby": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-ashby:2.0.1"]
    }
  }
}

-i mantiene la entrada estándar abierta, que es el canal del protocolo, y -t se omite porque un TTY reescribe el flujo. El contenedor necesita acceso HTTPS saliente hacia api.ashbyhq.com, y nada más: sin volúmenes, sin puertos, sin identificadores.

Bundle, sin npm

Descarga mcp-ashby-2.0.1.mcpb desde la última publicación y ábrelo. Un cliente que gestiona bundles MCP lo instala solo, sin npm y sin archivo de configuración que modificar. El bundle lleva sus dependencias, por lo que no se descarga nada en la instalación.

Qué se puede pedir

  • «¿Está Ramp reclutando en Ashby?»
  • «Encuéntrame puestos de diseño en remoto en Ramp y Linear.»
  • «Léeme esta oferta completa.»
  • «¿Bajo qué departamentos clasifica este sitio sus ofertas?»
  • «Pon lado a lado los salarios de estas ofertas de ingeniería.»

Cada pregunta parte de una empresa, ya que Ashby no ofrece ninguna búsqueda que atraviese los sitios. search_jobs resuelve él mismo los nombres que se le dan, por lo que no hay nada que preparar:

resolve_board(["Ramp"])          ->  ramp, publie
search_jobs(["Ramp"], query: "designer", is_remote: true)
get_job("ramp", "b0c8…")

Las herramientas

HerramientaQué hace
resolve_boardTraduce un nombre de empresa a token de sitio Ashby.
search_jobsBusca en las ofertas de las empresas nombradas.
get_jobLee una oferta completa, anuncio incluido.
list_filter_valuesLista las palabras que un sitio usa y cuántas ofertas las llevan.
compare_compensationPone un componente de remuneración de varias ofertas lado a lado.

Cada sitio mantiene sus propios departamentos y equipos, por lo que un filtro escrito en el vocabulario de otro sitio no retiene nada. list_filter_values publica las palabras que un sitio usa realmente.

resolve_board

Traduce un nombre de empresa al token que direcciona su sitio Ashby.

ArgumentoTipoObligatorioQué hace
namecadenaUn nombre de empresa o un token Ashby ya conocido.

A cambio: found, los sitios que respondieron, y tried, las formas realmente enviadas en orden. Se prueban cuatro formas por nombre, por lo que no encontrar nada nunca prueba que una empresa esté ausente de Ashby.

search_jobs

Busca en las ofertas de las empresas nombradas. Ashby sirve un sitio completo de una vez, y cada restricción a continuación se aplica a lo que se ha leído.

ArgumentoTipoRequisitoQué hace
companiesmatriz de 1 a 10 cadenasNombres de empresas o tokens.
querycadenanoLas palabras a buscar.
search_intitle o title_and_description, por defecto titlenoDónde se busca query.
departmentuna cadena o una lista de hasta 10noDepartamentos tal como el sitio los escribe.
teamuna cadena o una lista de hasta 10noEquipos tal como el sitio los escribe.
employment_typeuna cadena o una lista de hasta 6noTipos de contrato.
workplace_typeuna cadena o una lista de hasta 4noModalidades de trabajo.
is_remotebooleanonoConservar solo las ofertas en teletrabajo.
countryun país o una lista de hasta 10noPaíses tal como el sitio los escribe.
location_containscadenanoUna parte de una línea de ubicación.
published_afteruna fecha ISO 8601noLa antigüedad máxima de una oferta.
has_compensationbooleanonoConservar solo las ofertas cuya empresa publica un rango.
salary_minnúmero, 0 o másnoUn mínimo para el componente salarial.
currencycódigo de tres letrasnoLa moneda del mínimo.
salary_intervalcadena, por defecto 1 YEARnoEl período al que se refiere el mínimo.
sortpublished_desc, published_asc o title, por defecto published_descnoEl orden de las líneas.
limitentero, 1 a 100, por defecto 20noOfertas a servir.
offsetentero, 0 a 10000, por defecto 0noOfertas a omitir.

En retorno: jobs, cada una con board y id, que get_job retoma en conjunto, más title, department, team, employment_type, location, country, secondary_location_count, workplace_type, is_remote, published_at con la diferencia horaria que Ashby publica, compensation_summary, job_url y apply_url. Las líneas no incluyen el anuncio, sin importar el límite. total_on_board cuenta las ofertas que contienen los sitios leídos, total_matched las que los criterios retuvieron, y returned las de esta respuesta: tres números diferentes. per_company da un resultado por empresa con su status, filters_applied reexpone lo que se aplicó, y undeclared cuenta las ofertas que no declaran nada sobre un campo filtrado, para que una restricción nunca las elimine en silencio.

get_job

Lee una oferta completa.

ArgumentoTipoRequisitoQué hace
boardcadenaUn nombre de empresa, o un token de Ashby.
job_idcadenaEl identificador que lleva una línea.
descriptionplain, html o none, por defecto plainnoCómo servir el anuncio.
include_compensationbooleano, por defecto truenoIncluir la remuneración publicada.

El anuncio tiene miles de caracteres, y html es el marcado de la empresa, no reescrito.

En retorno: la oferta que lleva una línea de búsqueda, con su descripción, sus ubicaciones y los componentes de remuneración que la empresa publicó.

list_filter_values

Lista las palabras que un sitio emplea realmente, y cuántas ofertas llevan cada una.

ArgumentoTipoRequisitoQué hace
boardcadenaUn nombre de empresa, o un token.
facetdepartments, teams, locations, countries, employment_types, workplace_types o all, por defecto allnoEl vocabulario a leer.

En retorno: facets, cada valor con el número de ofertas que lo llevan, y undeclared, las ofertas que no declaran nada sobre esta faceta. sibling_spellings nombra las formulaciones que solo difieren por mayúsculas o espacios, que un filtro trataría de otro modo como dos cosas distintas.

compare_compensation

Pone un componente de remuneración de varias ofertas lado a lado.

ArgumentoTipoRequisitoQué hace
boardcadenaUn nombre de empresa, o un token.
job_idsmatriz de hasta 50 cadenasnoLas ofertas a comparar.
departmentuna cadena o una lista de hasta 10noComparar un departamento.
teamuna cadena o una lista de hasta 10noComparar un equipo.
querycadenanoLas palabras a buscar en los títulos.
componentSalary, EquityCashValue, EquityPercentage, Commission o Bonus, por defecto SalarynoEl componente comparado.
intervalcadena, por defecto 1 YEARnoEl período comparado.
limitentero, 1 a 100, por defecto 25noOfertas a comparar.

Un componente a la vez: una parte de capital y un salario no se suman. Las ofertas expresadas en otro período se listan aparte, sin conversión.

En retorno: rows, una por oferta, con el component y el interval sobre los que se compararon, currencies_present que nombra cada moneda presente en la respuesta, y not_published que lista las ofertas cuya empresa no publicó nada, lo que nunca equivale a cero.

Qué dice una cifra de remuneración

Una empresa publica lo que quiere. Una oferta sin rango regresa sin nada, nunca con un cero. Un rango se entrega en la moneda y en el período donde Ashby lo lleva, y nunca se convierte ni se anualiza: comparar dos ofertas expresadas en períodos diferentes se deja a quien sabe para qué debe servir la comparación.

Configuración

No hay nada que configurar. El servidor no lee ninguna variable de entorno, y el bloque mcpServers anterior está completo tal cual.

El ritmo, el plazo y la caché son ajustes de la capa cliente, que Como biblioteca muestra cómo pasar. La diferencia entre dos solicitudes puede ampliarse allí, y nunca reducirse.

Errores

Cada fallo lleva uno de los seis códigos, un mensaje, y cuando ayuda, los valores que habrían sido aceptados.

CódigoQué sucedióQué hacer
not_foundAshby respondió, y no tiene ni este sitio ni esta oferta.Verifique el token con resolve_board.
invalid_inputLos argumentos fueron rechazados antes de cualquier solicitud.Lea el mensaje, que nombra el argumento y qué acepta.
rate_limitedAshby pide a este cliente que reduzca la velocidad.Espere, luego vuelva a llamar con los mismos argumentos. La oferta sigue en línea.
parse_failureAshby respondió en una forma que este cliente no lee.Repórtelo en el seguimiento de incidentes.
network_errorLa solicitud no se completó.Reintente en breve.
timeoutLa solicitud superó su plazo.Solicite menos empresas, o un limit más pequeño.

Como biblioteca

La capa que lee Ashby se publica sola, con su ritmo, su caché y sus errores, sin protocolo adjunto.

import { Client } from "mcp-ashby/client";

const client = new Client({ minIntervalMs: 2000 });
const resolved = await client.resolveBoard("Ramp");
console.log(resolved.found);

ClientOptions toma minIntervalMs, timeoutMs, cacheTtlMs y fetchImpl. Una diferencia por debajo del mínimo publicado se ignora, por lo que el mínimo también se aplica aquí.

Ritmo y atribución

Las solicitudes se envían una a una con al menos un segundo entre ellas, y este mínimo se mantiene sin importar la configuración del cliente. Ashby sirve un sitio completo en una sola respuesta, que puede pesar varios megabytes, por lo que una consulta sobre una empresa cuesta una solicitud y este servidor guarda brevemente la respuesta en lugar de volver a solicitarla. El User-Agent lleva el proyecto y una dirección para contactar a una persona, y no imita a ningún navegador.

Cada oferta incluye la dirección de su página de Ashby y su dirección de postulación. Dale crédito a la empresa y enlaza a esa página cuando muestres una oferta.

Este MCP es un proyecto no oficial, sin afiliación con Ashby ni con las empresas cuyos sitios lee.

Privacidad

Este servidor no recopila nada sobre ti y no envía nada a su autor. Se ejecuta en tu máquina, solo se conecta a api.ashbyhq.com, guarda sus respuestas en memoria mientras está en ejecución, y no escribe nada en el disco. PRIVACY.md indica qué lleva una solicitud y qué ajustes cambian eso.

Desarrollo

npm install
npm run build:fixtures
npm test
npm run check

Las pruebas se ejecutan sobre fixtures generados y no emiten ninguna solicitud. La suite en vivo, npm run test:live, emite una solicitud por ruta y se ejecuta cada noche contra el servicio mismo.

Contribuciones

Los errores, las preguntas y las ideas tienen su lugar en el seguimiento de incidentes. Las propuestas de modificación son bienvenidas; abrir un ticket primero ayuda a ponerse de acuerdo sobre la forma del cambio. Consulta CONTRIBUTING.md.

Licencia

MIT, ver LICENSE. Las ofertas pertenecen a las empresas que las han publicado.