JobsPipe

Pesquise vagas de emprego ao vivo em mais de 30 quadros de empregos, feeds de ATS e serviços públicos de emprego, normalizados em um único esquema; leia uma vaga por completo; salve uma busca como um sinal para ser notificado de novas correspondências; detecte a pilha de tecnologia de uma empresa. Servidor remoto com login via OAuth, conta gratuita para começar.

Documentação

Servidor MCP

Conecte agentes de IA e clientes MCP ao JobsPipe — pesquise vagas de emprego ao vivo pelo Model Context Protocol, entrando com OAuth ou uma chave de API.

O JobsPipe executa um servidor Model Context Protocol para que agentes de IA e clientes compatíveis com MCP (Claude, ChatGPT, Cursor e hosts MCP personalizados) possam pesquisar vagas de emprego ao vivo diretamente, sem que você precise escrever qualquer código HTTP.

O servidor fala MCP sobre Streamable HTTP em:

https://mcp.jobspipe.dev/mcp

Como funciona

O servidor MCP é uma camada fina sobre a API JobsPipe. Cada chamada de ferramenta que precisa de dados é encaminhada para a API sob sua conta, então:

  • Resultados, fontes e atualidade são idênticos à API REST.
  • O uso conta contra seu plano, e a cota e os limites de taxa do seu plano se aplicam.

Há duas formas de autenticar, e ambas chegam à mesma conta.

Login com OAuth (padrão)

Clientes que suportam autorização MCP — conectores Claude e ChatGPT, Claude Code e outros hosts que implementam descoberta OAuth — precisam apenas da URL. Quando um cliente conecta sem credenciais, o servidor responde 401 com um cabeçalho WWW-Authenticate apontando para seus metadados de recurso protegido:

WWW-Authenticate: Bearer realm="jobspipe", resource_metadata="https://mcp.jobspipe.dev/.well-known/oauth-protected-resource"

O cliente segue esse link para o servidor de autorização em https://api.jobspipe.dev (metadados em /.well-known/oauth-authorization-server), registra-se e envia você por uma tela de login e consentimento do JobsPipe. Ele usa o fluxo de código de autorização com PKCE (S256) e tokens de atualização, e então envia o token de acesso como Authorization: Bearer <token> em cada requisição. Nenhuma chave precisa ser copiada em lugar algum.

A tela de consentimento nomeia o aplicativo, mostra as URLs de redirecionamento que ele registrou e lista o que está sendo solicitado. Aprovar permite que esse aplicativo pesquise vagas e analise stacks de tecnologia como você — cada chamada conta contra seu plano, igual às suas próprias — e crie ou altere seus sinais salvos. Ele não pode ver sua senha, alterar seu faturamento ou acessar nada fora da sua própria conta. A aprovação pertence à conta na qual você está conectado naquele momento, e o aplicativo só é enviado de volta para uma URL de redirecionamento que ele registrou.

Se um token expirar ou for revogado, o servidor responde 401 com Access token is invalid or expired. Reconnect to continue. — reconecte o cliente para entrar novamente.

Cabeçalho de chave de API

Para clientes sem suporte a OAuth, scripts e CI, use a mesma chave de API que você usa para a API REST — uma chave que começa com jp_live_. Crie ou copie uma do seu painel e envie-a em qualquer um dos cabeçalhos:

Authorization: Bearer jp_live_xxxxxxxxxxxxxxxxxxxxxxxx
x-api-key: jp_live_xxxxxxxxxxxxxxxxxxxxxxxx

x-api-key é lido apenas quando não há cabeçalho Authorization: Bearer. Um valor bearer que não começa com jp_live_ é tratado como um token de acesso OAuth.

Uma conexão sem nenhuma credencial é rejeitada com 401 Unauthorized. Uma chave jp_live_ não é validada quando você conecta, apenas quando uma ferramenta alcança a API — veja Limites e erros.

Instale

Escolha seu cliente. Cada rota chega ao mesmo servidor e à mesma conta.

Claude Code

claude mcp add --transport http jobspipe https://mcp.jobspipe.dev/mcp --scope user

Depois execute /mcp dentro do Claude Code e escolha Authenticate para jobspipe — um navegador abre, você entra no JobsPipe e as ferramentas aparecem. Remova --scope user para adicionar apenas ao projeto atual, ou use --scope project para escrever um .mcp.json que sua equipe possa commitar.

Para usar uma chave de API em vez de entrar, passe-a como cabeçalho (e pule a etapa de autenticação /mcp):

claude mcp add --transport http jobspipe https://mcp.jobspipe.dev/mcp \
  --scope user --header "Authorization: Bearer jp_live_xxxxxxxxxxxxxxxxxxxxxxxx"

Um .mcp.json commitado lê a chave do ambiente, então nenhum segredo é versionado:

{
  "mcpServers": {
    "jobspipe": {
      "type": "http",
      "url": "https://mcp.jobspipe.dev/mcp",
      "headers": {
        "Authorization": "Bearer ${JOBSPIPE_API_KEY}"
      }
    }
  }
}

Claude (web, desktop e mobile)

  1. Abra Settings → Connectors e clique em Add custom connector.
  2. Cole https://mcp.jobspipe.dev/mcp como a URL do servidor MCP remoto.
  3. Clique em Connect. O Claude envia você para uma tela de login e consentimento do JobsPipe, e essa é toda a configuração — não há chave para colar nem ID de cliente para preencher em Advanced settings.

Em planos Team e Enterprise, um proprietário adiciona o conector uma vez em Organization settings → Connectors, e cada membro então conecta sua própria conta JobsPipe em Settings → Connectors.

ChatGPT

O ChatGPT conecta ao JobsPipe como um plugin apoiado pelo servidor MCP. Ele não pode enviar uma chave de API, então o login é a única rota, e ele precisa do Developer mode uma vez.

  1. Abra Settings → Security and login e ative Developer mode. Ele precisa permanecer ativo enquanto o plugin estiver instalado.
  2. Abra Settings → Plugins e clique no + para criar um plugin. Nomeie-o JobsPipe e insira https://mcp.jobspipe.dev/mcp como a URL do servidor MCP. Deixe Authentication em OAuth.
  3. Clique em Create, depois Connect. O ChatGPT se registra, abre uma tela de login e consentimento do JobsPipe, e as ferramentas ficam disponíveis em um chat.

Duas coisas que parecem o plugin mas não são: uma entrada JobsPipe instalada de Browse plugins que mostra comandos curl e pede uma chave de API é um documento de habilidade, não este servidor, e o ChatGPT responderá que "não tem chave de API utilizável"; remova-a e crie o plugin acima. E se o ChatGPT nunca mostrar um login, o Developer mode está desativado.

O ChatGPT não pode enviar uma chave de API a um conector, então OAuth é a única rota lá. O servidor também responde às ferramentas search e fetch que os recursos de pesquisa profunda e conhecimento da empresa do ChatGPT exigem, então o JobsPipe pode ser usado como fonte de pesquisa e cada vaga citada linka de volta à postagem original.

Cursor

Ou adicione manualmente — ~/.cursor/mcp.json para cada projeto, .cursor/mcp.json dentro de um projeto:

{
  "mcpServers": {
    "jobspipe": {
      "url": "https://mcp.jobspipe.dev/mcp"
    }
  }
}
{
  "mcpServers": {
    "jobspipe": {
      "url": "https://mcp.jobspipe.dev/mcp",
      "headers": {
        "Authorization": "Bearer ${env:JOBSPIPE_API_KEY}"
      }
    }
  }
}

O Cursor não tem campo type para servidores remotos — um url é suficiente. Abra Settings → MCP para confirmar que jobspipe está conectado e para entrar se você deixou headers de fora.

VS Code e GitHub Copilot

Ou adicione ao .vscode/mcp.json — observe que a chave wrapper é servers, não mcpServers:

{
  "servers": {
    "jobspipe": {
      "type": "http",
      "url": "https://mcp.jobspipe.dev/mcp"
    }
  }
}

Para enviar uma chave de API em vez de entrar, deixe o VS Code solicitá-la uma vez e mantenha-a fora do arquivo:

{
  "servers": {
    "jobspipe": {
      "type": "http",
      "url": "https://mcp.jobspipe.dev/mcp",
      "headers": { "Authorization": "Bearer ${input:jobspipe-api-key}" }
    }
  },
  "inputs": [
    {
      "type": "promptString",
      "id": "jobspipe-api-key",
      "description": "JobsPipe API key",
      "password": true
    }
  ]
}

Windsurf

Em ~/.codeium/windsurf/mcp_config.json, servidores remotos usam serverUrl:

{
  "mcpServers": {
    "jobspipe": {
      "serverUrl": "https://mcp.jobspipe.dev/mcp",
      "headers": {
        "Authorization": "Bearer ${env:JOBSPIPE_API_KEY}"
      }
    }
  }
}

Qualquer outro cliente MCP

Aponte-o para https://mcp.jobspipe.dev/mcp sobre Streamable HTTP. Clientes que implementam autorização MCP não precisam de mais nada; os demais enviam a chave como cabeçalho.

{
  "mcpServers": {
    "jobspipe": {
      "type": "http",
      "url": "https://mcp.jobspipe.dev/mcp",
      "headers": {
        "Authorization": "Bearer jp_live_xxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Uma vez conectado, as ferramentas abaixo aparecem automaticamente e o agente pode chamá-las.

Ferramentas

FerramentaDescrição
searchEncontre postagens e obtenha resultados para citar, cada um com um id, um título e um link.
fetchLeia uma postagem completa pelo id que um resultado search carregou.
search_jobsPesquise vagas de emprego ao vivo de mais de 30 fontes, normalizadas em um único esquema, com todos os filtros.
create_signalSalve uma pesquisa e seja avisado quando algo novo corresponder a ela, por email, Slack ou um webhook assinado.
list_signalsListe os sinais na sua conta, com seus filtros, destinos e quando cada um foi verificado pela última vez.
detect_company_tech_stackDetecte as tecnologias que uma empresa serve em seu domínio, com pontuações de confiança.
search_documentationPesquise estes documentos e obtenha as seções correspondentes com seu texto e um link.
list_pricing_plansListe os planos JobsPipe com preço mensal, cota de vagas e máximo de resultados por chamada.
get_account_infoMostre em qual conta a conexão está autenticada, seu plano e os créditos usados e restantes neste mês.

search, fetch, search_jobs e detect_company_tech_stack chamam a API e contam contra seu plano. Uma vaga é cobrada uma vez por mês calendário, então um fetch de uma postagem que search já retornou é gratuito. search_documentation e list_pricing_plans são respondidos pelo próprio servidor MCP e não usam créditos. get_account_info, create_signal e list_signals leem ou escrevem sua conta e também não usam créditos; um sinal não custa créditos de vaga para avaliar.

search e fetch

search e fetch são o par que recursos de pesquisa e conectores procuram pelo nome — incluindo a pesquisa profunda e o conhecimento da empresa do ChatGPT — então uma pesquisa JobsPipe pode ser citada em um relatório como qualquer outra fonte. Eles são uma visão mais simples do mesmo corpus que search_jobs atende.

search recebe um query e, opcionalmente, country_code (ISO 3166-1 alpha-2), city, remote, posted_within_days e limit (1 a 50, padrão 10). A consulta corresponde aos títulos das postagens: é tentada como escrita primeiro e, se nada corresponder, é tentada novamente como as palavras significativas dela, então uma pergunta inteira ainda retorna algo. Ela responde um array results de { id, title, url }, onde url é a própria postagem e é o que é citado, e um bloco usage dizendo quanto a chamada custou.

{
  "results": [
    {
      "id": "b1f3c0d2e4a5",
      "title": "Senior Data Engineer - Acme Corp (Berlin, Germany)",
      "url": "https://example.com/jobs/b1f3c0d2e4a5"
    }
  ],
  "usage": { "credits_charged": 1, "jobs_already_paid": 0 }
}

usage diz quanto aquela pesquisa custou: credits_charged são os créditos usados, e jobs_already_paid é quantas das postagens foram gratuitas porque sua conta já pagou por elas neste mês calendário. Ele está ausente em uma conta que não é cobrada por vaga.

fetch recebe o id de um resultado e responde aquela postagem como { id, title, text, url, metadata }. text é a postagem como prosa legível — cargo, empregador, localização, regime de trabalho, tipo de emprego, senioridade, salário, datas, habilidades e o corpo da postagem — e metadata carrega os mesmos fatos como campos de string individuais, além de credits_charged e jobs_already_paid para quanto custou lê-la. Um id que não resolve mais retorna como erro de ferramenta nomeando-o; ids param de resolver quando uma postagem é encerrada.

Para qualquer coisa que esses dois não cobrem — pisos salariais, habilidades, fontes, postura de visto, idioma, códigos de indústria ou ocupação, paginação além de 50 — use search_jobs abaixo.

search_jobs

Cada filtro é opcional e combinado com AND. Filtros de array que terminam em _or correspondem a qualquer um de seus valores.

Texto e empresa

ParâmetroTipoDescrição
job_title_orstring[]Corresponda a vagas cujo título contenha qualquer uma dessas frases.
job_title_notstring[]Exclua vagas cujo título contenha qualquer uma dessas frases.
description_orstring[]Corresponda a vagas cuja descrição contenha qualquer uma dessas frases.
company_name_orstring[]Corresponda a vagas de qualquer um desses nomes exatos de empresa.
company_name_partial_match_orstring[]Corresponda a vagas cujo nome de empresa contenha qualquer um destes, ex.: ["acme"] encontra "Acme Corp" e "Acme Ltd".
employer_type_orstring[]Mantenha apenas estes tipos de empregador: employer (a própria empresa), agency, broker.
employer_type_notstring[]Remova estes tipos de empregador. ["agency","broker"] mantém apenas vagas publicadas pela empresa contratante.
min_employee_countnumberEmpresas com pelo menos este número de funcionários. Vagas cujo tamanho da empresa é desconhecido são descartadas, a menos que include_unknown_size seja verdadeiro.
max_employee_countnumberEmpresas com no máximo este número de funcionários. Mesma regra para tamanhos desconhecidos.
include_unknown_sizebooleanMantenha vagas cujo tamanho da empresa é desconhecido ao filtrar por número de funcionários. A maioria das postagens não traz tamanho, então um filtro de tamanho sem isso retorna muito menos resultados.

Localização

ParâmetroTipoDescrição
job_country_code_orstring[]Códigos de país ISO a incluir, ex.: ["US","GB"].
job_country_code_notstring[]Códigos de país ISO a excluir, ex.: ["IN"].
job_location_orstring[]Cidade ou região contém algum destes, ex.: ["Seattle","WA"]. Termos de três caracteres ou menos correspondem a valores inteiros (WA é Washington, nunca Iowa). Combine com job_country_code_or para desambiguar cidades de mesmo nome.
region_orstring[]Estados dos EUA e províncias canadenses como códigos ISO 3166-2, ex.: ["US-NY","CA-ON"]. Mais preciso que job_location_or para um estado ou província.
metro_code_orstring[]Códigos de área metropolitana CBSA dos EUA, ex.: "35620" (Nova York). Vagas fora dos EUA nunca correspondem.
remotebooleantrue retorna somente remoto, false exclui remoto.
work_arrangement_orstring[]remote, hybrid ou onsite — mais refinado que remote, que lê false para híbrido e presencial igualmente. Vagas com modalidade desconhecida nunca correspondem.

Origem

ParâmetroTipoDescrição
source_orstring[]Corresponder a qualquer origem de coletor, ex.: ["linkedin","greenhouse"]. Maiúsculas, espaços e pontuação são ignorados; yc é um alias para ycombinator.
source_notstring[]Excluir origens. ["indeed","linkedin"] remove os dois maiores quadros de vagas; fixe a lista de ATS em source_or para somente ATS.

Função e classificação

ParâmetroTipoDescrição
employment_type_orstring[]full-time, part-time, contract, temporary, internship.
include_unlabeled_employment_typebooleanTambém retorna vagas sem tipo de emprego (cerca de 27% dos anúncios).
job_seniority_orstring[]Níveis de senioridade a incluir.
include_unlabeled_senioritybooleanTambém retorna vagas sem senioridade (cerca de 55% dos anúncios).
skills_orstring[]Slugs de habilidades, ex.: ["python","kubernetes"].
esco_skill_id_orstring[]IDs de conceitos de habilidade ESCO (correspondência exata).
occupation_code_orstring[]Códigos ISCO-08; 4 dígitos exatos ("2512" Desenvolvedores de Software), 1-3 dígitos correspondem como prefixos.
isic_division_orstring[]Divisões de indústria do empregador ISIC Rev.4, 2 dígitos ("62" Programação de computadores).

Remuneração, benefícios e sinais de anúncio

ParâmetroTipoDescrição
min_salary_usdnumberSalário anunciado (topo da faixa, anualizado em USD) atinge este valor. Vagas sem salário anunciado nunca correspondem.
benefits_orstring[]Slugs de benefícios, ex.: ["401k","health insurance"]. Somente dados estruturados de origem, então a cobertura é parcial.
visa_sponsorship_orstring[]offers, no ou citizenship_required, extraídos do texto do anúncio. Vagas que não mencionam nada nunca correspondem.
has_recruiter_emailbooleantrue para somente vagas com e-mail de recrutador extraído, false para somente vagas sem um.
max_applicant_countnumberNo máximo este número de candidatos. Somente o LinkedIn expõe contagens, então vagas sem uma são descartadas.
max_ghost_scorenumberExclui vagas cuja pontuação de probabilidade de fantasma (0-100) exceda isto. Vagas sem pontuação passam.

Datas, paginação e saída

ParâmetroTipoDescrição
posted_at_gtestringSomente anúncios a partir desta data (YYYY-MM-DD).
posted_at_ltestringSomente anúncios até esta data (YYYY-MM-DD).
posted_at_max_age_daysnumberSomente anúncios mais recentes que este número de dias.
last_verified_max_age_daysnumberSomente anúncios cuja confirmação de atividade na origem ocorreu dentro deste número de dias.
statusstringactive (o padrão), closed ou any. Anúncios fechados mantêm seus dados e são como uma pergunta de contratação passada é respondida.
include_unknownstring[]Nomes de campos cujas vagas sem rótulo o filtro desse campo deve manter em vez de descartar, ex.: ["language"].
limitnumberLinhas a retornar. O padrão é 25 e é limitado ao máximo de resultados por chamada do seu plano (25 no Free).
offsetnumberLinhas a pular, para paginação.
cursorstringContinuar uma busca anterior a partir de metadata.next_cursor.
detailstringcompact (o padrão) ou full. O próprio argumento da ferramenta, não um filtro de busca.
include_total_resultsbooleanPreencher metadata.total_results (um pouco mais lento).
blur_company_databooleanObsoleto e ignorado. O modo de pré-visualização foi removido; toda busca retorna o registro completo e é cobrada por vaga.

Cerca de 17% dos anúncios trazem uma modalidade, então work_arrangement_or retorna uma fatia real, mas parcial, e descarta silenciosamente o resto. Use remote para amplitude, work_arrangement_or quando híbrido e presencial precisarem ser distinguidos.

Uma chamada típica de agente:

{
  "job_title_or": ["data engineer"],
  "remote": true,
  "posted_at_max_age_days": 14,
  "limit": 25,
  "include_total_results": true
}

A resposta espelha a API REST: um bloco metadata (com total_results quando solicitado) e um array data de anúncios normalizados — título, empresa, local, país, faixa salarial, senioridade, data do anúncio e a URL de candidatura. Cada anúncio também traz sources (todo quadro em que foi visto, não apenas o primeiro), last_seen_at e verified_at (quando uma rechecagem confirmou pela última vez que o anúncio estava ativo, e quando olhamos por último), e is_manager e job_function onde são conhecidos — is_manager é o que distingue um contribuidor individual principal de um diretor de verdade, já que seniority arquiva ambos sob "director". Veja o esquema de vaga para a forma completa e para quanto do corpus carrega cada campo.

Quanto de cada anúncio você recebe. Linhas vêm compactas por padrão: os campos pelos quais uma lista de resultados é lida, com a descrição cortada para um trecho e qualquer coisa vazia omitida. Uma linha compacta diz description_truncated: true e description_chars quando cortou um, para você saber que há mais para ler. Leia um anúncio completo com fetch, ou passe detail: "full" para obter todos os campos de cada linha exatamente como a API REST responde.

Paginação. Pagine com cursor: pegue metadata.next_cursor de uma resposta e envie de volta como cursor na próxima chamada, inalterado, com os mesmos filtros. Pare quando uma página voltar sem next_cursor. offset ainda funciona e é mais simples para algumas páginas, mas um cursor é mais estável em um corpus que continua crescendo e é a única maneira de passar do teto de deslocamento. Como limit é limitado silenciosamente ao tamanho de página do seu plano, uma página mais curta que o limit que você pediu não significa que você chegou ao fim.

Quanto custou uma chamada. metadata.credits_charged é o que a chamada usou e metadata.jobs_already_paid é quantas linhas foram gratuitas porque sua conta já as pagou neste mês calendário. Ambos estão ausentes em uma conta que não é cobrada por vaga.

create_signal e list_signals

Um sinal é uma busca salva que avisa quando algo novo corresponde a ela, para que um agente não precise reexecutar a mesma busca em um temporizador. Correspondências são baseadas na primeira vez que um anúncio entrou no corpus, então uma republicação ou um backfill não dispara novamente, e avaliar um sinal não custa créditos de vaga.

create_signal aceita:

ParâmetroTipoDescrição
namestringUm rótulo curto para este sinal.
filtersobjectA busca que define uma correspondência, na forma que search_jobs aceita, menos paginação e qualquer coisa que decida o que conta como novo — o sinal mantém seu próprio marcador d'água.
destinationsobject[]Para onde as correspondências vão: { kind: "email" | "slack" | "webhook", target, cadence: "instant" | "daily" }. E-mail está disponível em todos os planos.
modestringjobs dispara em cada anúncio recém-correspondente; companies (o padrão) dispara na primeira vez que uma empresa corresponde.
intentstringTexto livre descrevendo o que você está monitorando.
idempotency_keystringSua própria chave para este sinal. Envie a mesma chave em uma nova tentativa e o sinal já salvo é reproduzido em vez de um segundo ser criado.

Execute os mesmos filtros via search_jobs primeiro para ver o que retornam antes de salvá-los.

Ambas as ferramentas respondem na mesma forma — create_signal um signal, list_signals um array de signals:

{
  "signal": {
    "id": "9f1c2f1e-...",
    "name": "Fintech hiring in Berlin",
    "mode": "jobs",
    "enabled": true,
    "filters": { "job_title_or": ["backend engineer"], "job_country_code_or": ["DE"] },
    "intent": "Berlin fintechs starting to hire backend engineers",
    "grade_leads": false,
    "created_at": "2026-09-22T10:00:00.000Z",
    "last_evaluated_at": null,
    "last_error": null,
    "consecutive_failures": 0,
    "destinations": [
      {
        "id": "7a2b3c4d-...",
        "kind": "webhook",
        "target": "https://example.com/hooks/jobspipe",
        "cadence": "instant",
        "enabled": true,
        "signing_secret": "whsec_..."
      }
    ]
  }
}

O signing_secret de um destino de webhook é retornado uma vez, quando o sinal é criado — armazene-o então, porque um list_signals posterior não o inclui. Veja Sinais para como as entregas são assinadas e repetidas.

detect_company_tech_stack

ParâmetroTipoDescrição
domainstringObrigatório. Domínio a escanear, ex.: "stripe.com". URLs e www. são normalizados.
modestringauto (padrão) tenta uma busca HTTP rápida, depois uma renderização headless se os resultados forem escassos. html ou render força uma estratégia.

Retorna domain, scanned_at, http_status e um array detected — cada entrada com slug, name, categories, confidence, version, website, saas e oss. Resultados são armazenados em cache por 14 dias.

search_documentation

ParâmetroTipoDescrição
querystringObrigatório, pelo menos 2 caracteres. O que procurar, ex.: "filter by salary" ou "webhook signature".
limitnumberMáximo de seções a retornar, um inteiro de 1 a 20. Padrão 5.

Retorna o query e um array results de seções, cada uma com title, heading, url, excerpt e score.

list_pricing_plans

Não aceita parâmetros. Retorna currency (USD) e um array plans com o name, monthlyPriceUsd, monthlyJobs, maxResultsPerRequest e requestsPerSecond de cada plano.

get_account_info

Não aceita parâmetros. Retorna a conta na qual a conexão está autenticada: user_id, email, name, auth_type (oauth ou api_key), plan, o month que os números cobrem, monthly_credits, credits_used, credits_remaining, extra_credits, max_results_per_request e requests_per_second. Não custa créditos. É a mesma resposta de GET /v1/account, e a maneira mais rápida de verificar em qual conta uma conexão OAuth caiu, ou quanto resta antes de uma busca grande.

Limites e erros

O servidor MCP herda os limites do seu plano da API REST. Somente falhas de autenticação voltam como um status HTTP. Tudo o que acontece dentro de uma ferramenta — incluindo uma cota esgotada ou um limite de taxa — volta como um resultado normal de ferramenta com isError: true e um corpo JSON como { "error": "Monthly request quota exceeded" }, para que o agente possa ler e reagir.

OndeO que você recebeSignificado
HTTP 401Connect with OAuth, or send a JobsPipe API key (jp_live_) ...Nenhuma credencial Authorization: Bearer ou x-api-key foi enviada.
HTTP 401Access token is invalid or expired. Reconnect to continue.O portador não é uma chave jp_live_ nem um token OAuth ativo.
Resultado de ferramenta, isError{ "error": "Invalid API key" }A chave jp_live_ não foi aceita pela API.
Resultado de ferramenta, isError{ "error": "Monthly request quota exceeded" }A cota mensal de vagas do seu plano está esgotada.
Resultado de ferramenta, isError{ "error": "Rate limit exceeded" }Limite de taxa por segundo excedido — tente novamente após um segundo.

Chame get_account_info para ver seu próprio plano, limites e créditos restantes, e list_pricing_plans para ver a cota, o limite de taxa e o máximo de resultados por chamada de cada plano.

Outras superfícies de agente

Além do MCP, o JobsPipe é detectável por agentes autônomos:

[

Monitore contratações em empresas-alvo

Acompanhe novas vagas em um conjunto de empresas para identificar sinais de contratação.

](https://docs.jobspipe.dev/guides/monitor-companies)[

Conecte o JobsPipe ao seu assistente

Configuração passo a passo para cada assistente de IA que pode conversar com o JobsPipe — Claude, ChatGPT, Gemini, Grok, Perplexity, Le Chat, Cursor e os agentes de codificação — a partir da listagem de diretório ou como um conector MCP personalizado.

](https://docs.jobspipe.dev/ai-agents/connect)