Skip to content
Back to search
45
MCP MCP 2025-11-25 streamable-http

Refine Job Search

co.getrefine/refine

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

Watch this dependency Share evidence report
Uptime
100.0%
3 direct probes · 30d
Response
336ms
last probe
Tools
62
callable
Resources
4
readable
Prompts
5
available
Score: 45/100
The server exists but requires sign-in before we can list its tools.
partial Answers the MCP handshake 35/50
The endpoint answered HTTP 401 to an anonymous server/discover, so it exists, but we could not list its tools without credentials. It does advertise OAuth protected-resource metadata.
How to earn +15 points
Let anonymous clients discover what the server offers
Answer server/discover and tools/list without credentials and require auth only on tools/call. If the whole server must stay private, return a WWW-Authenticate header with resource_metadata pointing at /.well-known/oauth-protected-resource (RFC 9728) so MCP clients can sign in on their own; 2026-07-28 clients identify themselves with a Client ID Metadata Document rather than dynamic registration.
Docs →
n/a Lists tools, resources or prompts 0/30
Not scored: a catalogue only counts once the handshake succeeds.
n/a 3 or more catalogue items 0/10
Not scored: a catalogue only counts once the handshake succeeds.
pass Describes itself 10/10
95 characters; more than 30 earns these points.

Tools · 62

jobs.list

List jobs in your journey

jobs.get

Get details of a specific job

jobs.add

Add a new job to your journey

jobs.update

Update a job in your journey

jobs.delete

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.

jobs.refresh

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

jobs.mark_applied

Mark a job as applied

jobs.archive

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

jobs.unarchive

Restore an archived job to the active board

jobs.interviews.add

Log an interview for a job

jobs.interviews.update

Update an existing interview

jobs.interviews.delete

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

jobs.offer.create

Record a job offer with compensation details

jobs.offer.update

Update the offer recorded for a job

jobs.offer.delete

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.

jobs.offer.accept

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.

jobs.offer.decline

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

jobs.offer.add_negotiation

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

jobs.offer.delete_negotiation

Remove a negotiation event from an offer

following.list

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 in…

following.follow

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…

following.update

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.

following.unfollow

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.

following.pause

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

following.resume

Resume a paused company follow.

following.openings.list

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 c…

following.openings.mark_read

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

following.openings.mark_all_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 …

following.digest.get

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.

following.digest.update

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 w…

companies.submissions.create

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, n…

companies.submissions.get

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 processin…

openings.get

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

openings.add_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 e…

search.create

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 pagina…

search.get

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 missi…

search.update

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…

search.company_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.

inbox.list

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

inbox.get

Get one inbox item with its related job and application

inbox.get_thread

Fetch the full email thread for an inbox item

inbox.draft_reply

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

inbox.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.

inbox.apply_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.

inbox.undo

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

inbox.mark_read

Clear an inbox item's unread-reply flag

inbox.unsubscribe

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 sender…

inbox.dismiss

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

inbox.acknowledge

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

inbox.decline

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…

inbox.refresh

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

inbox.sync_status

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

persona.get

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

recommendations.list

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…

recommendations.get

Get one recommended company with sources and persona fit

recommendations.dismiss

Dismiss a recommended company

recommendations.block

Dismiss a recommended company and block it from future recommendations

recommendations.restore

Restore a dismissed or blocked recommendation

recommendations.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. Dismis…

account.agenda

Get upcoming interviews and action items

integrations.list

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

integrations.connect_google

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 …

Resources · 4

guide

What Refine is, the job-search loop it supports, and how to work with it

refine://guide
briefing

Live orientation in one read: the user's persona, board agenda, pending inbox and new matches, and what to do next

refine://briefing
profile

The authenticated user's Refine account profile and identity

refine://me
agenda

Upcoming interviews and job-search action items that need attention

refine://agenda

Prompts · 5

daily_briefing

A prioritized read-only summary of what to focus on in your job search today

triage_inbox

Go through pending email conversations and decide what to do with each

prep_for_interview

Build tailored preparation for a specific interview

negotiate_offer

Build a negotiation strategy for an offer on your board

review_matches

Review new openings and companies that fit your persona and act on the good ones

How to use

Claude Desktop or claude.ai: add a custom connector (Customize → Connectors; on Team and Enterprise plans an owner adds it under Organization settings → Connectors) with this server URL: https://mcp.getrefine.co/mcp

Cursor or Cline: add to your MCP config:

{
  "mcpServers": {
    "refine_job_search": {
      "url": "https://mcp.getrefine.co/mcp",
      "transport": "streamable-http"
    }
  }
}