Skip to main content
Glama
531,071 tools. Updated 2026-09-07 22:28

"A server for job searching" matching MCP tools:

  • Search JobYap job postings by natural-language query. Matches job titles, falling back to significant keywords when the full phrase finds little. Returns result ids, titles and citable URLs for use with fetch. For structured filtering (location, company, remote, freshness) prefer search_jobs.
    ConnectorNo auth
  • Set whether a PUBLISHED job is in the candidate's saved list (idempotent desired-state, NOT a toggle — pass saved:true to bookmark, saved:false to remove). Returns NOT_FOUND for a missing or non-public job.
    ConnectorNo auth
  • Retrieve the name and description of the company behind a job, by job ID. Use this tool when users want more detail about a company than search_jobs/get_job_details return (e.g. after finding a job and wanting to know more about the company that posted it). DO NOT use for: searching/discovering companies or jobs by keyword (use search_jobs instead). LLM USAGE INSTRUCTIONS: - The typical flow is: search_jobs to find jobs -> user picks one -> offer to look up the company -> if the user agrees, call this tool with that same job_id (the same guid used for get_job_details; no separate lookup step is needed first). - Do not call this automatically right after get_job_details; ask the user first unless they already explicitly asked for company details. - Not every company has published an employer branding profile, and some profiles are marked not visible by the company. When that happens this tool does NOT raise — it returns a Company with `message` set and empty name/desc. Relay that message to the user (e.g. "Looks like that company hasn't published a public profile.") rather than treating it as an error. Args: job_id: The unique identifier of the job whose company to look up (required). This must be the job's `guid` field from a search_jobs result, NOT its `id` field — `id` is a different, internal identifier that this tool does not accept. Returns: Company: Contains: - name: The company name (empty if message is set) - desc: The company description (empty if message is set) - message: Set instead of name/desc when there is no visible company profile to show; None when name/desc are populated Raises: Exception: If the job is not found, an API call itself fails (network error, non-200 response, GraphQL errors), or input validation errors occur
    ConnectorNo auth
  • Resolve a city or airport name or code before searching flights. Returns typed values such as city:SHA to search every catalog airport in Shanghai or airport:SHA for Hongqiao only. Pass the selected value unchanged to search_flights. Ask the traveler when multiple results are plausible.
    ConnectorNo auth
  • Submit a list of addresses as a background job. A job runs a deeper scan than the resolve tool: an address the index has not checked, or holds only stale answers for, is resolved against live sources, so a job can find identities the resolve tool reports as never seen. Use it for lists larger than one resolve call, or when misses are worth re-checking. COST: billed on matches exactly like resolving, when the job completes: one match credit per address that resolved to an X handle or a Farcaster account, misses free. One job may be active per account at a time; a second submission is refused until the first finishes, and the refusal names the active job id. A submission is capped at 10 times the match balance, so the worst case is bounded by what the account already holds. Submitting itself spends one request-unit of the rate window. The submission returns a job id. Poll walletlink_job_status for progress and, on completion, the results. A job that fails is never billed. Resubmitting the same list after a job completes runs the whole job again and bills its matches again.
    ConnectorNo auth
  • Creates a Stripe-hosted Checkout page for a locked quote and returns a `checkoutUrl` plus a `statusUrl`. Use this as the LAST-RESORT payment rail, when the payer is a human paying by credit card (the agent cannot complete card entry itself). Hand the `checkoutUrl` to the user to open in a browser and pay; payment is asynchronous — once they finish, the letter is created automatically by Stripe's webhook. To track it without a job id, GET the returned `statusUrl` (`/v1/quotes/:quoteId/job`): it returns `found:false` with status `pending`/`processing` until the webhook creates the job, then the full job (id, status, tracking). Prefer x402 (or MPP, if available) for autonomous agent payment. Returns an error if Stripe Checkout is not enabled on the server. No charge occurs until the human completes the hosted page.
    ConnectorNo auth

Matching MCP Servers

Matching MCP Connectors

  • Upload JSON metadata to IPFS via Pinata and return the ipfs:// URI. Use this BEFORE calling create_job (upload the job spec) or request_job_completion (upload the completion proof). Requires a Pinata JWT — get one free at https://app.pinata.cloud/developers/api-keys. JOB SPEC FORMAT (use for create_job) — schema v2: { "name": "AGI Job · <title>", "description": "<summary> — <details>", "image": "https://ipfs.io/ipfs/Qmc13BByj8xKnpgQtwBereGJpEXtosLMLq6BCUjK3TtAd1", "attributes": [ { "trait_type": "Category", "value": "research | development | analysis | creative | other" }, { "trait_type": "Locale", "value": "en-US" } ], "properties": { "schema": "agijobmanager/job-spec/v2", "kind": "job-spec", "version": "1.0.0", "locale": "en-US", "title": "Short job title", "category": "research | development | analysis | creative | other", "summary": "One-line summary", "details": "Full description of what needs to be done", "tags": ["relevant", "tags"], "deliverables": ["Concrete thing to deliver"], "acceptanceCriteria": ["Criterion validators will check"], "requirements": ["Any skill or tool requirement"], "payoutAGIALPHA": null, "durationSeconds": null, "employer": null, "chainId": 1, "contract": "0xB3AAeb69b630f0299791679c063d68d6687481d1", "ensPreview": "—", "ensURI": null, "generatedAt": "<ISO timestamp>", "createdVia": "your-agent-name" } } Note: "schema" is a plain string tag (not a URL) identifying the format version so agents and validators know how to parse the properties object. COMPLETION FORMAT (use for request_job_completion): { "name": "AGI Job Completion · <job title>", "description": "Final completion package for Job <jobId>. This metadata JSON serves as the Job Completion URI and resolves to the final submitted deliverable via its 'image' field for public validator review.", "image": "ipfs://<CID of primary deliverable — any file type: PNG, TXT, PDF, JSON, etc. Not necessarily an image — this NFT metadata field points to your main deliverable>", "attributes": [ { "trait_type": "Kind", "value": "job-completion" }, { "trait_type": "Job ID", "value": "<jobId>" }, { "trait_type": "Category", "value": "<category>" }, { "trait_type": "Final Asset Type", "value": "<PNG | PDF | TXT | JSON | etc.>" }, { "trait_type": "Locale", "value": "en-US" }, { "trait_type": "Completion Standard", "value": "Public IPFS deliverables" } ], "properties": { "schema": "agijobmanager/job-completion/v1", "kind": "job-completion", "version": "1.0.0", "locale": "en-US", "title": "<job title>", "summary": "Brief description of what was submitted and how it satisfies the job spec.", "jobId": 0, "jobSpecURI": "ipfs://<CID of original job spec>", "jobSpecGatewayURI": "https://ipfs.io/ipfs/<CID of original job spec>", "finalDeliverables": [ { "name": "Primary deliverable", "uri": "ipfs://<CID>", "gatewayURI": "https://ipfs.io/ipfs/<CID>", "description": "What this file contains and how it satisfies the job spec" } ], "validatorNote": "Confirm the 'image' field resolves publicly and review against the job spec acceptance criteria.", "completionStatus": "submitted", "chainId": 1, "contract": "0xB3AAeb69b630f0299791679c063d68d6687481d1", "createdVia": "your-agent-name", "generatedAt": "<ISO timestamp>", "submissionType": "Job Completion URI" } }
    ConnectorNo auth
  • Tailor a resume to a SPECIFIC job — TWO steps. STEP 1 (default; action omitted or 'prepare'): the server returns the job's full JD, its must-have skills/requirements, and the candidate's current resume, plus tailoring instructions. YOU (the model) then WRITE the tailored resume as JSON Resume, following the instructions — weave JD keywords into existing bullets only where the candidate genuinely has the experience, never fabricate experience/titles/dates/employers, keep all dates and company names, and flag any keyword you couldn't honestly add. STEP 2: call this tool again with action:'save', tailored_resume:<your JSON Resume>, and job_id — the server renders a PDF and saves it to the candidate's Workopia dashboard (requires sign-in). Use whenever the user references a specific job to tailor for: 'tailor for #1', 'for Morgan Stanley', 'tailor my resume for this role: <JD>'. Resolving job_id (same rules as job_detail_tool): from the most recent prior search/refine result — (a) numeric/ordinal → the Nth job; (b) company name → Company-field match; (c) role/title phrase → Job-Title match — then pass that job's **Job Id** value VERBATIM. Do NOT use placeholders like 'JOB_1' or '#1'. For STEP 1 supply ONE of job_id (preferred — server fetches the JD from Mongo) OR job_description, plus the candidate's resume via resume_text / resume_content / resume_data. For general 'improve my resume' (no specific job), do NOT call this tool — call resume_tool action=improve instead. Note: the tailored resume is written by your AI client's own model — the assistant you are already using — so it works out of the box with nothing to configure; Workopia runs no LLM of its own and never charges for the AI.
    Connector
    Destructive
    No auth
  • Search jobs across 90+ countries by title, location, salary, remote/hybrid work mode, or employment type. Find roles in tech, finance, product, design, marketing, and every other vertical — aggregated from 1000+ ATS sources globally. Default action is search; use refine when the user asks for more matches or gives feedback on a prior result set; use save to bookmark a job for the signed-in user (requires OAuth). REFINE PROTOCOL (action=refine has THREE distinct modes): (1) Pure continuation / 'show me more' / 'next batch' / 'another set' / 'more like these': pass refine_recommendations.exclude_ids = the full array of **Job Id** values from the most recent search/refine result's content text (verbatim) + refine_recommendations.session_id = prior response's session_id if present. Server returns next 10 unique jobs. (2) 'Show me more like #N' / 'similar to the Atlassian one' / 'jobs like #2': pass refine_recommendations.liked_indexes = [N] (1-based position from prior numbered list) + exclude_ids + session_id. Equivalently you may pass refine_recommendations.liked_job_ids = [<that job's **Job Id** value verbatim>]. Server seeds the recommendation from that job's title/skills/company profile. (3) 'Less like #N' / 'no more N-style jobs' / 'avoid jobs like that': pass refine_recommendations.disliked_indexes = [N] (or disliked_job_ids = [<Job Id>]) + exclude_ids + session_id. Server suppresses similar jobs. All three modes: if you skip exclude_ids, the user sees duplicates — that's a failure. The handler layers exclude_ids with server-side AgentKit memory, so partial lists still work. NEVER invent 'JOB_1' / '#1' as job_id values — always use the real **Job Id** string from the prior result's content text. For detail requests (user asks about a specific job from the list, e.g. 'details for #1', 'show me this job', 'tell me more about <company>'), DO NOT call this tool — call job_detail_tool instead. That separate tool binds to the job-detail widget card so the full job card renders in chat. OUTPUT BEHAVIOR: Render the search results as a numbered markdown list, one line per job, in this exact compact format: `N. **[Job Title](View_Job_URL)** — Company · Location · Job Type · Compensation · Posted MMM DD`. Embed the View Job URL as a markdown link on the title (so the user can click to apply). Keep URLs intact — don't strip parameters. Skip a field entirely if it's missing — never print 'N/A' placeholders. The numbered list IS the canonical user-facing answer. REQUIRED follow-up: after the list, output EXACTLY these two sentences as two parallel questions (same pattern for action=search and action=refine): Sentence 1 — 'Would you like to see full details on any of these? Reply with the number (#1), the company name, or the role title.' Sentence 2 — 'Or would you like to refine the list — what should change (work mode, level, salary, sector)?' These two sentences must be separate and parallel; do NOT merge them into one 'detail ... or refine' clause (that buries the detail CTA). Both questions must be asked every time after a search or refine result. When the user replies referring to a specific job from the list, identify which job they mean and call job_detail_tool immediately. Identifying the job (use flexibly — users rarely type '#N' literally): (a) any numeric or ordinal reference ('#1', '1', 'first', 'the 1st', 'top one', 'job 3', 'the third') → the Nth job in your prior numbered list; (b) a company name, partial or full ('Morgan Stanley', 'Morstan', 'Capital One') → case-insensitive substring match on the Company field of the prior list, pick the first match; (c) a role/title phrase ('the analyst role', 'the credit risk one') → case-insensitive substring match on the Job Title field. If multiple jobs match, prefer the earliest. Only if no reasonable match exists, ask a one-line clarifying question. Then pass that job's **Job Id** value from the prior search result's content text VERBATIM as job_id to job_detail_tool / tailor_resume_tool / cover_letter_tool. Do NOT invent a placeholder like 'JOB_1' or '#1' — those are not server-valid IDs. For save, pass job_id + optional job_title/company/job_url in save_job. Put search fields in search_jobs or parameters; refine in refine_recommendations; save in save_job.
    Connector
    Destructive
    No auth
  • Creates a Stripe-hosted Checkout page for a locked quote and returns a `checkoutUrl` plus a `statusUrl`. Use this as the LAST-RESORT payment rail, when the payer is a human paying by credit card (the agent cannot complete card entry itself). Hand the `checkoutUrl` to the user to open in a browser and pay; payment is asynchronous — once they finish, the letter is created automatically by Stripe's webhook. To track it without a job id, GET the returned `statusUrl` (`/v1/quotes/:quoteId/job`): it returns `found:false` with status `pending`/`processing` until the webhook creates the job, then the full job (id, status, tracking). Prefer x402 (or MPP, if available) for autonomous agent payment. Returns an error if Stripe Checkout is not enabled on the server. No charge occurs until the human completes the hosted page.
    ConnectorNo auth
  • Creates a Stripe-hosted Checkout page for a locked quote and returns a `checkoutUrl` plus a `statusUrl`. Use this as the LAST-RESORT payment rail, when the payer is a human paying by credit card (the agent cannot complete card entry itself). Hand the `checkoutUrl` to the user to open in a browser and pay; payment is asynchronous — once they finish, the letter is created automatically by Stripe's webhook. To track it without a job id, GET the returned `statusUrl` (`/v1/quotes/:quoteId/job`): it returns `found:false` with status `pending`/`processing` until the webhook creates the job, then the full job (id, status, tracking). Prefer x402 (or MPP, if available) for autonomous agent payment. Returns an error if Stripe Checkout is not enabled on the server. No charge occurs until the human completes the hosted page.
    ConnectorNo auth
  • Retrieve the results of a job. Can be called before completion for partial results, or after completion for the full set. Returns clustered, validated, and enriched web results. While job status is active, call this repeatedly (typically page=1) to refresh partial output. When job reaches completed, iterate all pages. If job fails, call once more to capture any partial output.
    ConnectorNo auth
  • Creates a private NiceVois job and returns a one-time PUT upload URL. Do not ask for consent before the first attempt because NiceVois remembers the current standing account agreement. If the server returns CONSENT_REQUIRED, ask for one acceptance of the linked standing agreement and retry once with acceptsStandingAgreement=true. This allocates a private training slot but does not start GPU work until the audio is uploaded and start_training is called.
    ConnectorNo auth
  • Submit the result payload for a job the calling agent has claimed, completing the job workflow. Bearer token required. Safe to retry with the same idempotency_key.
    ConnectorNo auth
  • Generate an invoice for a completed job. If Stripe Connect is active, automatically creates a payment link. Returns invoice number, total, and payment URL. Requires: job_id from jobs.list (job must be status=Completed). Next step: payments.send_link if needed.
    ConnectorNo auth
  • Generate a read-only probability forecast for a clearly stated future event by searching relevant prediction markets and synthesizing evidence. Use when the user asks for a probability, outlook, or forecast; use polybridge_search when they only need market discovery. Does not place trades, provide financial advice, or access private/internal data.
    ConnectorNo auth
  • Wait for a song job to finish and return the audio when ready. Polls server-side for up to ~45 seconds. If the song is ready, returns the clips with audio URLs. If it is still rendering, returns its status so you can call wait_for_song again with the same job_id. Safe to call repeatedly — it only reads status, never starts a new song.
    ConnectorNo auth
  • Retrieve the results of a job. Can be called before completion for partial results, or after completion for the full set. Returns clustered, validated, and enriched web results. While job status is active, call this repeatedly (typically page=1) to refresh partial output. When job reaches completed, iterate all pages. If job fails, call once more to capture any partial output.
    ConnectorNo auth
  • Retrieve a job's full description and associated skills by job ID. Use this tool when users want more detail about a specific job than search_jobs returns (e.g. after finding a job via search_jobs and wanting its full description and skills list). DO NOT use for: searching/discovering jobs by keyword (use search_jobs instead). LLM USAGE INSTRUCTIONS: - Only call this after the user has picked out a specific job from search_jobs results (or otherwise supplied a job's guid directly) — do not call it speculatively for every search result. - After returning job details, do NOT automatically call get_company. Instead, offer to look up the company (e.g. "Want me to pull up more info on the company?") and only call get_company, passing this same job_id, if the user says yes. Args: job_id: The unique identifier of the job to retrieve (required). This must be the job's `guid` field from a search_jobs result, NOT its `id` field — `id` is a different, internal identifier that this tool does not accept. Returns: JobDetails: Contains: - description: The full job description - skills: List of Skill objects associated with the job Raises: Exception: If the API call fails, the job is not found, or input validation errors occur
    ConnectorNo auth
  • Check the status of an asynchronous conversion job you submitted. Returns ``{job_id, status, ...}`` for one of YOUR jobs (scoped to the calling identity; another caller's job id is reported as not found). When the job has ``succeeded``, small results are inlined as ``markdown`` and larger ones are returned as a ``result_url`` to fetch. A ``failed`` job includes its ``error``.
    ConnectorNo auth
  • Returns all active lifestyle/genre categories available in NomadStays. Use this to discover what lifestyle categories exist before searching with getStaysByLifestyle.
    ConnectorNo auth