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)
- Abra Settings → Connectors e clique em Add custom connector.
- Cole
https://mcp.jobspipe.dev/mcpcomo a URL do servidor MCP remoto. - 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.
- Abra Settings → Security and login e ative Developer mode. Ele precisa permanecer ativo enquanto o plugin estiver instalado.
- Abra Settings → Plugins e clique no + para criar um plugin. Nomeie-o JobsPipe e insira
https://mcp.jobspipe.dev/mcpcomo a URL do servidor MCP. Deixe Authentication em OAuth. - 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
| Ferramenta | Descrição |
|---|---|
search | Encontre postagens e obtenha resultados para citar, cada um com um id, um título e um link. |
fetch | Leia uma postagem completa pelo id que um resultado search carregou. |
search_jobs | Pesquise vagas de emprego ao vivo de mais de 30 fontes, normalizadas em um único esquema, com todos os filtros. |
create_signal | Salve uma pesquisa e seja avisado quando algo novo corresponder a ela, por email, Slack ou um webhook assinado. |
list_signals | Liste os sinais na sua conta, com seus filtros, destinos e quando cada um foi verificado pela última vez. |
detect_company_tech_stack | Detecte as tecnologias que uma empresa serve em seu domínio, com pontuações de confiança. |
search_documentation | Pesquise estes documentos e obtenha as seções correspondentes com seu texto e um link. |
list_pricing_plans | Liste os planos JobsPipe com preço mensal, cota de vagas e máximo de resultados por chamada. |
get_account_info | Mostre 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âmetro | Tipo | Descrição |
|---|---|---|
job_title_or | string[] | Corresponda a vagas cujo título contenha qualquer uma dessas frases. |
job_title_not | string[] | Exclua vagas cujo título contenha qualquer uma dessas frases. |
description_or | string[] | Corresponda a vagas cuja descrição contenha qualquer uma dessas frases. |
company_name_or | string[] | Corresponda a vagas de qualquer um desses nomes exatos de empresa. |
company_name_partial_match_or | string[] | Corresponda a vagas cujo nome de empresa contenha qualquer um destes, ex.: ["acme"] encontra "Acme Corp" e "Acme Ltd". |
employer_type_or | string[] | Mantenha apenas estes tipos de empregador: employer (a própria empresa), agency, broker. |
employer_type_not | string[] | Remova estes tipos de empregador. ["agency","broker"] mantém apenas vagas publicadas pela empresa contratante. |
min_employee_count | number | Empresas 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_count | number | Empresas com no máximo este número de funcionários. Mesma regra para tamanhos desconhecidos. |
include_unknown_size | boolean | Mantenha 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âmetro | Tipo | Descrição |
|---|---|---|
job_country_code_or | string[] | Códigos de país ISO a incluir, ex.: ["US","GB"]. |
job_country_code_not | string[] | Códigos de país ISO a excluir, ex.: ["IN"]. |
job_location_or | string[] | 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_or | string[] | 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_or | string[] | Códigos de área metropolitana CBSA dos EUA, ex.: "35620" (Nova York). Vagas fora dos EUA nunca correspondem. |
remote | boolean | true retorna somente remoto, false exclui remoto. |
work_arrangement_or | string[] | 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âmetro | Tipo | Descrição |
|---|---|---|
source_or | string[] | 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_not | string[] | 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âmetro | Tipo | Descrição |
|---|---|---|
employment_type_or | string[] | full-time, part-time, contract, temporary, internship. |
include_unlabeled_employment_type | boolean | Também retorna vagas sem tipo de emprego (cerca de 27% dos anúncios). |
job_seniority_or | string[] | Níveis de senioridade a incluir. |
include_unlabeled_seniority | boolean | Também retorna vagas sem senioridade (cerca de 55% dos anúncios). |
skills_or | string[] | Slugs de habilidades, ex.: ["python","kubernetes"]. |
esco_skill_id_or | string[] | IDs de conceitos de habilidade ESCO (correspondência exata). |
occupation_code_or | string[] | Códigos ISCO-08; 4 dígitos exatos ("2512" Desenvolvedores de Software), 1-3 dígitos correspondem como prefixos. |
isic_division_or | string[] | 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âmetro | Tipo | Descrição |
|---|---|---|
min_salary_usd | number | Salário anunciado (topo da faixa, anualizado em USD) atinge este valor. Vagas sem salário anunciado nunca correspondem. |
benefits_or | string[] | Slugs de benefícios, ex.: ["401k","health insurance"]. Somente dados estruturados de origem, então a cobertura é parcial. |
visa_sponsorship_or | string[] | offers, no ou citizenship_required, extraídos do texto do anúncio. Vagas que não mencionam nada nunca correspondem. |
has_recruiter_email | boolean | true para somente vagas com e-mail de recrutador extraído, false para somente vagas sem um. |
max_applicant_count | number | No máximo este número de candidatos. Somente o LinkedIn expõe contagens, então vagas sem uma são descartadas. |
max_ghost_score | number | Exclui vagas cuja pontuação de probabilidade de fantasma (0-100) exceda isto. Vagas sem pontuação passam. |
Datas, paginação e saída
| Parâmetro | Tipo | Descrição |
|---|---|---|
posted_at_gte | string | Somente anúncios a partir desta data (YYYY-MM-DD). |
posted_at_lte | string | Somente anúncios até esta data (YYYY-MM-DD). |
posted_at_max_age_days | number | Somente anúncios mais recentes que este número de dias. |
last_verified_max_age_days | number | Somente anúncios cuja confirmação de atividade na origem ocorreu dentro deste número de dias. |
status | string | active (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_unknown | string[] | Nomes de campos cujas vagas sem rótulo o filtro desse campo deve manter em vez de descartar, ex.: ["language"]. |
limit | number | Linhas a retornar. O padrão é 25 e é limitado ao máximo de resultados por chamada do seu plano (25 no Free). |
offset | number | Linhas a pular, para paginação. |
cursor | string | Continuar uma busca anterior a partir de metadata.next_cursor. |
detail | string | compact (o padrão) ou full. O próprio argumento da ferramenta, não um filtro de busca. |
include_total_results | boolean | Preencher metadata.total_results (um pouco mais lento). |
blur_company_data | boolean | Obsoleto 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âmetro | Tipo | Descrição |
|---|---|---|
name | string | Um rótulo curto para este sinal. |
filters | object | A 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. |
destinations | object[] | Para onde as correspondências vão: { kind: "email" | "slack" | "webhook", target, cadence: "instant" | "daily" }. E-mail está disponível em todos os planos. |
mode | string | jobs dispara em cada anúncio recém-correspondente; companies (o padrão) dispara na primeira vez que uma empresa corresponde. |
intent | string | Texto livre descrevendo o que você está monitorando. |
idempotency_key | string | Sua 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âmetro | Tipo | Descrição |
|---|---|---|
domain | string | Obrigatório. Domínio a escanear, ex.: "stripe.com". URLs e www. são normalizados. |
mode | string | auto (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âmetro | Tipo | Descrição |
|---|---|---|
query | string | Obrigatório, pelo menos 2 caracteres. O que procurar, ex.: "filter by salary" ou "webhook signature". |
limit | number | Má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.
| Onde | O que você recebe | Significado |
|---|---|---|
HTTP 401 | Connect with OAuth, or send a JobsPipe API key (jp_live_) ... | Nenhuma credencial Authorization: Bearer ou x-api-key foi enviada. |
HTTP 401 | Access 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:
- Habilidades de agente —
SKILL.mddocumentos para descoberta autônoma emhttps://jobspipe.dev/.well-known/agent-skills/index.json. llms.txt— um índice amigável para agentes do site emhttps://jobspipe.dev/llms.txt. Cada página de conteúdo também está disponível como Markdown bruto.- Especificação OpenAPI — o esquema legível por máquina da API em
https://jobspipe.dev/openapi.json. Para testar requisições interativamente, use o API Explorer nestes documentos ou a referência emhttps://api.jobspipe.dev/docs/reference.
[
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.