Skip to main content
Glama
531,868 tools. Updated 2026-09-08 02:27

"A server for finding and applying to job opportunities" matching MCP tools:

  • PREVIEW: Run terraform plan to preview infrastructure changes Runs a terraform plan for an InsideOut session without applying any changes. This lets the user review what will be created/changed/destroyed before committing. Returns job_id, plan_id, and project_id. Use tflogs to stream the plan output. After the plan completes, use tfdeploy with plan_id to apply the exact plan. SINGLE-FLIGHT: only one TF job per session at a time. If another job is already in flight, tfplan returns tf_job_conflict with the live job_id — attach with tfstatus/tflogs, or pass force_new=true to override. REQUIRES: session_id from convoopen response (format: sess_v2_...). OPTIONAL: sandbox (boolean, default false) — plans real generated Terraform. Set to true for cheap sandbox template (testing only). OPTIONAL: force_new (boolean, default false) - bypass the single-flight guard. Use only when the existing run is provably wedged. CREDENTIAL HANDLING: Same as tfdeploy - credentials must be configured first.
    ConnectorNo auth
  • 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
  • Translate identifiers across databases via UniProt's ID-mapping service — gene names to accessions, accession to PDB / Ensembl / RefSeq / ChEMBL / GeneID, and back. The job runs asynchronously; this tool submits it and polls within a budget. A running job returns status "running" with a ticket; pass that ticket alone to poll the same job. A completed call returns status "finished" with one results page; when continuation is present, pass it alone to fetch the next completed page without re-submitting or polling the job. A gene name often maps to one reviewed Swiss-Prot accession plus dozens of unreviewed TrEMBL ones, so target UniProtKB-Swiss-Prot (reviewed only) for the usual intent, or UniProtKB / UniProtKB_AC-ID to include TrEMBL. Pair a gene-symbol from_db with tax_id to disambiguate species. Chain the resulting accessions into uniprot_get_entry.
    ConnectorNo auth
  • List or get client job invitations for one owned job posting. Requires job_reference from get_job_posting action=list (postings[].id). Invitations are per-job only — there is no list_all. Actions: - list: List active invitations for a job, or get one invitation when invitation_id is set. Params: job_posting_id, job_id, or job_reference (string, required — owned posting ID from get_job_posting action=list), invitation_id (string, optional — when set, returns that invitation only; organizationId_eq comes from org_uid), limit (integer, 1–10, default 10) — list only), cursor (string, optional — pageInfo.endCursor from a prior list for the next page; alias: after; list only). Org comes from org_uid on execute_tool. Optional params are refinements: do not silently invent values. If the user makes a broad request, briefly surface the most relevant available refinements and proceed with only the required params plus context the user already provided. Ask before applying optional filters when the user asks for a selective result such as best, top, cheapest, near me, urgent, or only. After returning results, mention useful refinements the user can apply.
    ConnectorOAuth
  • Record payment for an ACCEPTED job. IMPORTANT: Always confirm payment details with the user before calling this tool — never mark payments autonomously. Job must be in ACCEPTED status (use get_job_status to check). Crypto payments (usdc, eth, sol): provide tx hash + network → verified on-chain instantly, job moves to PAID. Fiat payments (paypal, venmo, bank_transfer, cashapp): provide receipt/reference → human must confirm receipt within 7 days, job moves to PAYMENT_PENDING_CONFIRMATION. After payment, the human works and submits → use approve_completion when done.
    ConnectorNo auth
  • PREVIEW: Run terraform plan to preview infrastructure changes Runs a terraform plan for an InsideOut session without applying any changes. This lets the user review what will be created/changed/destroyed before committing. Returns job_id, plan_id, and project_id. Use tflogs to stream the plan output. After the plan completes, use tfdeploy with plan_id to apply the exact plan. SINGLE-FLIGHT: only one TF job per session at a time. If another job is already in flight, tfplan returns tf_job_conflict with the live job_id — attach with tfstatus/tflogs, or pass force_new=true to override. REQUIRES: session_id from convoopen response (format: sess_v2_...). OPTIONAL: sandbox (boolean, default false) — plans real generated Terraform. Set to true for cheap sandbox template (testing only). OPTIONAL: force_new (boolean, default false) - bypass the single-flight guard. Use only when the existing run is provably wedged. CREDENTIAL HANDLING: Same as tfdeploy - credentials must be configured first.
    ConnectorNo auth

Matching MCP Servers

Matching MCP Connectors

  • Calculate and compare indicative UK building-work budgets from supplied scope using Proper Job.

  • Indeed listings + Glassdoor reviews + H1B salary data for career copilots.

  • Submit an async job to export a FULL bulk dataset for one of the Maritime Reports add-on datasets (dry_dock_dates, casualty, inspections, sales_purchase_demolitions, ownership, class_society, engine, companies). This returns the ENTIRE dataset (all records), not one vessel — for a single vessel use the matching lookup tool instead (e.g. intel_ownership, intel_inspections). Like all reports it is asynchronous: this returns a report_id and a _PENDING_ status without waiting; submit ONCE, then poll report_status with that report_id until _DONE_, which yields a result_url to hand to the user to download. Do not resubmit while a job is running, and if a report comes back _FAILED_, do not automatically submit a replacement — report the message to the user first. At most 10 reports may be pending per account at once (across every report type), so a retry loop can exhaust the queue. The server never downloads the file itself. Part of the Maritime Reports add-on.
    ConnectorNo auth
  • Historical arbitrage opportunities — top 5 per day (MCP-compatible) — Returns a daily history of the top 5 cross-exchange arbitrage opportunities detected by the platform. Each day entry lists the 5 highest-spread opportunities saved by the cron job, including token symbol, spread percentage, buy/sell exchanges, and average USD volume. Useful for AI agents answering questions like 'which tokens appear most frequently in arbitrage?' or 'what is the average daily spread?'. Data is accumulated daily; older than 180 days is automatically purged. Response: { days, history: [{date, opportunities: [{symbol, spreadPct, buyExchange, sellExchange, usdVolume}]}], total, updatedAt }. Query parameter: ?days=7 (default 7, max 180). No authentication required. 60 requests/min rate limit. 5-min in-process cache. — Use this for daily historical data; use the corresponding live snapshot tool for current conditions and the monthly tool for long-term trends.
    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
  • No arguments. Returns how many MCP servers have been read at source level, and the share of them with each category of finding (credential access, network egress, install-time execution, prompt-injection surface). Use this to judge whether checking a specific server is worth it before you look one up. It reports aggregate counts only - no per-server findings, and no verdict about any individual server.
    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
  • View your owned job postings and search the marketplace. Use action=list to obtain posting IDs for list_client_proposals and list_client_invitations. Prior postings are useful templates when creating new jobs. Actions: - get: Get an owned job posting by ID (from get_job_posting action=list). Params: job_id or job_posting_id. For marketplace jobs use find_jobs action=get or get_job_posting action=get_marketplace. - search_marketplace: Search marketplace job postings. Each result includes a ready-to-use url. Params: query (string), filters (object). Optional params are refinements: do not silently invent values. If the user makes a broad request, briefly surface the most relevant available refinements and proceed with only the required params plus context the user already provided. Ask before applying optional filters when the user asks for a selective result such as best, top, cheapest, near me, urgent, or only. After returning results, mention useful refinements the user can apply. - get_marketplace: Get a marketplace job posting by ID. The response includes a ready-to-use url. Params: id (the numeric id, a ~02… ciphertext, or a full Upwork job URL — all accepted directly). - list: List the selected organization's owned job postings (not marketplace), paginated. Params: title (string, optional — partial-match filter applied upstream), limit (integer, 1–10, default 10), page (integer, default 1). Returns total_count, has_more, and next_page, plus postings[] with id, title, status, access, type, created_time, updated_time, premium, and the applicant funnel (applicants, shortlisted, messaged, offered, hired, pending_invitations, new_applicants). Use the ids for list_client_proposals / list_client_invitations; to page, call again with page=next_page. Each entry is a SUMMARY, not the full posting: description, budget, skills, screening questions and invites-sent are not included — call action=get with the id when you need them. Applicant counts ARE included, so answering "how many applied/were hired" needs no follow-up call. Optional params are refinements: do not silently invent values. If the user makes a broad request, briefly surface the most relevant available refinements and proceed with only the required params plus context the user already provided. Ask before applying optional filters when the user asks for a selective result such as best, top, cheapest, near me, urgent, or only. After returning results, mention useful refinements the user can apply.
    ConnectorOAuth
  • 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
  • Search 500+ quantum computing job listings using natural language. Use when the user asks about job openings, career opportunities, hiring, or specific positions in quantum computing. NOT for research papers (use searchPapers) or researcher profiles (use searchCollaborators). Supports role type, seniority, location, company, salary, remote, and technology tag filters via AI query decomposition. Limitations: quantum computing jobs only, last 90 days, max 20 results. Promoted listings appear first (marked). After finding jobs, suggest getJobDetails for full info. Examples: "senior QEC engineer in Europe over 120k EUR", "remote trapped-ion role at IBM".
    ConnectorNo auth
  • 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
  • Semantically rank discoverable (interviewed) candidates against one of the employer's own jobs, with a per-candidate fit score AND a white-box explanation. WORKFLOW for finding the best hire: 1) call with tier:'best' to get the strongest candidates (cover the required skills + proven in interview), cascade to tier:'good' then tier:'weak' only if you need more (read tierCounts to decide; paginate within a band via page.hasMore, not page.total); 2) each row carries matchExplanation — the white-box 'why' (the fit score, the skills the candidate PROVED in their interview, what they're missing, and a plain-English rationale) — use it to explain your shortlist on OUR data, not a black box; 3) for the few you shortlist, call employer.get_candidate_evidence(jobId, userId) for the interview facts + Q&A to write a deeper comparative review. Omit tier for the full ranked pool (back-compat). Returns NOT_FOUND when the job is missing / owned by another employer (no existence leak), or NOT_INDEXED / NO_CATEGORIES when the job is not indexed for semantic search yet (re-save / republish, then retry).
    ConnectorNo auth