Refine Job Search

co.getrefinePublished by getrefine.coOfficial publisherv0.6.0Updated Oct 24, 2026

Job search management: applications, interviews, offers, recruiter email, and company openings.

Overview

AI-generated overview

Lets an assistant manage a job search: track applications, interviews and offers, follow companies, search openings, and read matched recruiter email.

What you can do
Refine Job Search gives an assistant tools to run a job-search board: list, add, update, archive or delete jobs, mark them applied, and log interviews and offers with compensation and negotiation events. It can search indexed jobs and companies, follow companies for new matching openings, read a Following feed and digest schedule, and submit a missing company by its careers URL. It also reads an inbox of email conversations matched to applications, interviews and recruiter outreach.
When to use it
Use it when you want an assistant to keep a job search organized end to end: tracking applications and interview stages, recording and comparing offers, watching companies for new openings, or pulling up recruiter email tied to a specific application.
Requirements
A remote MCP endpoint at mcp.getrefine.co over streamable HTTP; no packages, environment variables or headers are declared. Some features, such as the Following email digest schedule, require a Plus or Student plan.
Before you install
Many tools change or delete data: deleting jobs, interviews and offers is permanent, and accepting or declining an offer is a major state change; the tool descriptions ask for user confirmation first. Unfollowing a company and marking all openings read also affect stored state. Submitting a company adds it to a shared index. Offer actions do not email the employer.

Installation

In SourceWeft

  1. Open Refine Job Search in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/co.getrefine%2Frefine/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "refine-job-search": {
      "type": "http",
      "url": "https://mcp.getrefine.co/mcp"
    }
  }
}

Tools

62

jobs.list

List jobs

List jobs in your journey

Parameterspagelimit

jobs.get

Job details

Get details of a specific job

Parametersjob_idrequired

jobs.add

Add job

Add a new job to your journey

Parametersurltitlerequiredsourcecompanyrequiredlocationdescriptionqualificationscompensation_text

jobs.update

Update job

Update a job in your journey

Parametersurlnotestitlejob_idrequiredsourcecompanylocationdescriptionqualificationscompensation_text

jobs.delete

Delete job

Permanently delete a job and its application from the board. Confirm with the user first; it cannot be undone. To hide a job without recording a rejection or closure, use jobs.archive instead.

Parametersjob_idrequiredconfirmedrequired

jobs.refresh

Re-scrape job

Queue a job posting to be re-scraped. The returned job may remain pending; use jobs.get later to inspect the refreshed state.

Parametersjob_idrequired

jobs.mark_applied

Mark applied

Mark a job as applied

Parametersjob_idrequired

jobs.archive

Archive job

Hide a job from the active board without recording a rejection or closing the application

Parametersjob_idrequired

jobs.unarchive

Unarchive job

Restore an archived job to the active board

Parametersjob_idrequired

jobs.interviews.add

Log interview

Log an interview for a job

Parametersnamerequirednotesjob_idrequiredlocationscheduled_at

jobs.interviews.update

Update interview

Update an existing interview

Parametersnamenotesjob_idrequiredratingoutcomefeedbacklocationnext_actioncancelled_atcompleted_atinterview_idrequiredinterviewers+2 more

jobs.interviews.delete

Delete interview

Permanently delete an interview from a job. Confirm with the user first; it cannot be undone.

Parametersjob_idrequiredconfirmedrequiredinterview_idrequired

jobs.offer.create

Record offer

Record a job offer with compensation details

Parametersnotesjob_idrequiredcurrencyrsu_textbonus_centsdeadline_atequity_textnext_actiontarget_rsu_textinitial_rsu_textbase_salary_centstarget_bonus_cents+5 more

jobs.offer.update

Update offer

Update the offer recorded for a job

Parametersnotesjob_idrequiredcurrencyrsu_textbonus_centsdeadline_atequity_textnext_actiontarget_rsu_textinitial_rsu_textbase_salary_centstarget_bonus_cents+5 more

jobs.offer.delete

Delete offer

Permanently delete the offer recorded for a job (the job stays). Use only to fix a mistake, and confirm with the user first; it cannot be undone.

Parametersjob_idrequiredconfirmedrequired

jobs.offer.accept

Accept offer

Accept the offer for a job. This is a major state change that closes out the search for this role; confirm with the user before calling. It does not email the employer.

Parametersjob_idrequiredconfirmedrequired

jobs.offer.decline

Decline offer

Decline the offer for a job, a major state change; confirm with the user first. It does not email the employer.

Parametersjob_idrequiredconfirmedrequired

jobs.offer.add_negotiation

Log negotiation event

Log a negotiation event on an offer (counter-offer, update, etc.)

Parametersnotesjob_idrequiredevent_dateevent_typerequiredbonus_centsequity_textsalary_cents

jobs.offer.delete_negotiation

Delete negotiation event

Remove a negotiation event from an offer

Parametersjob_idrequiredevent_idrequiredconfirmedrequired

following.list

Followed companies

List all followed companies, their filters, state, and unread counts. Returns the full list without pagination. Following delivers future matching openings; use Search to browse jobs already in the index.

Takes no parameters.

following.follow

Follow company

Follow an indexed company for future matching openings and company recommendations. Get company_id from Search, a ready submission, or a recommendation candidate_company.id. Specify at least one match; [{}] follows all new openings. This does not submit an unknown careers page or collect historical matches.

Parametersfiltersrequiredcompany_idrequired

following.update

Update follow filters

Replace all match filters for a followed company. Other follow settings are unchanged. Pass [{}] for all new openings. Pending means the new filters are being applied; old unread counts may change.

Parametersfiltersrequiredfollow_idrequired

following.unfollow

Unfollow company

Unfollow a company and remove its Following feed and recommendation source. Confirm with the user first. Board jobs remain. To pause temporarily instead, use following.pause.

Parametersconfirmedrequiredfollow_idrequired

following.pause

Pause follow

Pause future matching openings for this follow without deleting it. This does not stop shared company indexing or pause other follows.

Parametersfollow_idrequired

following.resume

Resume follow

Resume a paused company follow.

Parametersfollow_idrequired

following.openings.list

Following openings

Read matching openings from followed companies. tab defaults to unread. Use the row id for marking read and nested opening.id for opening details or adding to the board. meta.unread_count/read_count cover the selected follow or all companies before view filters; meta.filtered_count covers the current filtered tab.

Parametersqtabpagelimitlocationfollow_iddepartment

following.openings.mark_read

Mark opening read

Mark one Following row as read. Use the row id from following.openings.list, not nested opening.id.

Parametersfollow_opening_idrequired

following.openings.mark_all_read

Mark all openings read

Mark all unread openings as read for one follow, or every followed company if follow_id is omitted. Includes every page and openings hidden by view filters. Confirm the scope with the user first. The API returns no affected count; do not invent one.

Parametersconfirmedrequiredfollow_id

following.digest.get

Following email schedule

Read the user-wide Following email digest schedule. data is null if no schedule is configured. Company match filters are managed separately with following.update.

Takes no parameters.

following.digest.update

Update Following email schedule

Set the user-wide Following email digest schedule after the user requests it. Requires Plus or Student. For a new schedule supply frequency, hour (0–23), timezone (IANA), and weekday (Sunday=0) when weekly. Existing schedules can be patched.

Parametershourweekdaytimezonefrequency

companies.submissions.create

Submit company

Submit a missing company using its public HTTPS careers URL, supplied or confirmed by the user. Refine detects supported sources and processes openings asynchronously. This adds to the shared index, not to Following. Use companies.submissions.get for progress; follow separately once company.id is available.

Parameterscareers_urlrequiredcompany_namerequired

companies.submissions.get

Company submission status

Read company submission progress. queued/detecting/processing means wait; ready means search again using the company name. unsupported means the careers source is not supported; failed means processing failed. Do not claim the company was added or invent jobs while it is still working.

Parameterssubmission_idrequired

openings.get

Opening details

Read an indexed opening, including its full description and qualifications. Use opening.id from Search or Following, not a follow-opening row ID.

Parametersopening_idrequired

openings.add_to_board

Add opening to board

Add an indexed opening to the board after the user chooses it. Uses opening.id, not the Following row ID. Returns the existing board job if already added. This does not apply to the employer or send email; it also marks any matching Following item as read.

Parametersopening_idrequired

search.create

Create search

Search indexed jobs or companies. Supply input OR query, not both. Natural-language searches return a search ID and processing state: use search.get later, without rapid polling. Keep the ID to paginate or update this same search. Empty query {} is All openings, currently sorted by newest without persona personalization.

Parameterspagesortviewinputquery

search.get

Search results

Read a search and its results, switch jobs/companies view, or fetch results.next_page. Pending/interpreting/processing means it is still working: do not create another search or poll rapidly. If missing_company_name is set, ask for its careers URL and use companies.submissions.create. Company rows contain samples, not all matching jobs.

Parameterspagesortviewsearch_idrequired

search.update

Update search

Update the existing search instead of creating another. Supply input OR the complete replacement query; omitted filters are cleared. Wait until the current search is ready or failed before updating it.

Parameterspagesortviewinputquerysearch_idrequired

search.company_openings

Company search openings

Read all matching jobs for a company in a ready search, not just its three preview jobs. Continue with data.next_page until null. Use company.id from the search results.

Parameterspagesortsearch_idrequiredcompany_idrequired

inbox.list

List inbox

List email conversations Refine matched to your job search (applications, interviews, recruiter outreach)

Parameterstabpagelimitshelfstatusunreadaccount

inbox.get

Inbox item

Get one inbox item with its related job and application

Parametersitem_idrequired

inbox.get_thread

Email thread

Fetch the full email thread for an inbox item

Parametersitem_idrequired

inbox.draft_reply

Draft reply

Generate an AI reply draft for an inbox item. Returns HTML for review; it does not send anything.

Parameterskindrequireditem_idrequired

inbox.send_reply

Send reply

Send an email reply through the user's Gmail. This emails a real person from the user's address. Only call after the user has seen the exact message body and explicitly approved sending it.

Parametersbodyrequireditem_idrequiredconfirmedrequireddraft_kind

inbox.apply_suggestion

Apply inbox suggestion

Apply an inbox item's suggested action, such as adding an application to the board or recording a rejection. Confirm the specific action with the user first.

Parametersitem_idrequiredconfirmedrequired

inbox.undo

Undo inbox action

Undo an auto-applied inbox action. This can delete a board record that the automatic action created, so confirm with the user first.

Parametersitem_idrequiredconfirmedrequired

inbox.mark_read

Mark read

Clear an inbox item's unread-reply flag

Parametersitem_idrequired

inbox.unsubscribe

Unsubscribe sender

Unsubscribe the user from this sender's mailing list via one-click list-unsubscribe. This changes the user's real email subscriptions; confirm with them before calling. Use it for unwanted bulk senders, not for a person you can simply decline.

Parametersitem_idrequiredconfirmedrequired

inbox.dismiss

Dismiss inbox items

Dismiss inbox items you are not acting on (also marks the mail read in Gmail)

Parametersidsrequiredconfirmedrequired

inbox.acknowledge

Acknowledge inbox items

Keep auto-applied inbox items as-is and finalize the automatic action. Confirm the specific items with the user first.

Parametersidsrequiredconfirmedrequired

inbox.decline

Decline conversations

Queue decline replies to recruiter outreach. Depending on the user's preference this SENDS email from their address. Only call after the user explicitly approved declining these specific conversations.

Parametersidsrequiredrememberconfirmedrequiredpreference

inbox.refresh

Refresh inbox

Check Gmail for new mail now; returns per-account sync status

Takes no parameters.

inbox.sync_status

Inbox sync status

Per-account Gmail synchronization status, including current progress and last sync time

Takes no parameters.

persona.get

Get persona

Get the user's persona: inferred job-search preferences and traits with an understanding score. Use it to tailor advice and searches.

Takes no parameters.

recommendations.list

List recommendations

Discover companies recommended from the companies you follow. Optionally filter by source_company_id (company.id from following.list, not a follow ID). Returns one flat list plus per-source counts. To follow a recommendation, use following.follow with candidate_company.id and your chosen filters.

Parameterspagelimitsource_company_id

recommendations.get

Recommendation details

Get one recommended company with sources and persona fit

Parametersrecommendation_idrequired

recommendations.dismiss

Dismiss recommendation

Dismiss a recommended company

Parametersreasonrecommendation_idrequired

recommendations.block

Block recommendation

Dismiss a recommended company and block it from future recommendations

Parametersrecommendation_idrequired

recommendations.restore

Restore recommendation

Restore a dismissed or blocked recommendation

Parametersrecommendation_idrequired

recommendations.feedback

Recommendation feedback

Record recommendation feedback to improve future suggestions. The historical feedback tag "watched" records that a company was followed; it does not create a follow. Use following.follow first. Dismiss/block/restore actions are separate tools.

Parametersfeedback_typesrequiredrecommendation_idrequiredinteraction_source

account.agenda

Upcoming agenda

Get upcoming interviews and action items

Takes no parameters.

integrations.list

Connected accounts

List connected Google accounts and their grant status. To connect a new account, use integrations.connect_google.

Takes no parameters.

integrations.connect_google

Connect Gmail

Get a link for the user to connect Gmail to Refine or approve a missing Gmail permission. Refine selects the permission needed for the connected account. The connection happens in the browser with no Refine sign-in required. Share the link only with the owner of this Refine account.

Takes no parameters.

Version history

2
  1. v0.6.0LatestOct 22, 2026
  2. v0.5.2Sep 16, 2026

Score

83% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts

    Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.

  • LicenseNot applicable

    A hosted service is used under its provider's terms, so no license is expected here. This check is left out of the percentage.