Refine Job Search
Run your job search from any AI assistant.
What it can do
- Jobs.List: List jobs in your journey
- Jobs.Get: Get details of a specific job
- Jobs.Add: Add a new job to your journey
What data it sees
Do you need an account
No: the server works without sign-in
Run your job search from any AI assistant. Refine gives an agent real actions on a job search plus durable memory that persists across sessions and assistants.
- A model of you.
get_personareturns your inferred preferences, seniority, and dealbreakers, so every opening, reply, and recommendation is scored and tailored to you. - Real openings, ranked. Track companies, browse matched openings, and get adjacent-company recommendations, all scored for fit.
- The inbox loop. Read recruiter threads, draft replies, and send them: the application, reply, interview, and offer arc, from your own mail.
- Durable memory. Your board persists across assistant sessions and vendors, so Refine is the continuous record of your search.
Hosted and OAuth-secured, so there is nothing to install and no API key to paste. Sending email always requires your explicit approval of the exact message.
How to connect
How to connect Refine Job Search to Claude
The server address to paste into Claude settings:
https://refine--getrefine.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect Refine Job Search to ChatGPT
The server address to paste into ChatGPT settings:
https://refine--getrefine.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect Refine Job Search to Cursor
The server address to paste into Cursor settings:
https://refine--getrefine.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (55)
Raw names from tools/list. Only developers need these.
| 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 |
| signals.list | List companies you are tracking |
| signals.track | Start tracking a company for new job openings |
| signals.update | Update filters on a tracked company |
| signals.untrack | Stop tracking a company and delete its signal. Confirm with the user first; they stop getting new openings from it. To stop notifications temporarily instead, use signals.pause. |
| signals.pause | Pause tracking for a company |
| signals.resume | Resume tracking for a company |
| signals.openings.save | Save a matched opening returned by signals.openings.list to your job journey |
| signals.list_applied_jobs | List jobs in your journey that came from a tracked company |
| signals.openings.list | List signal notifications (new openings at tracked companies) |
| signals.openings.mark_read | Mark one opening notification returned by signals.openings.list as read |
| signals.openings.mark_all_read | Mark every unread opening notification as read after the user confirms the bulk action |
| 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 senders, not for a person you can simply decline. |
| 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. |
| signals.recommendations.list | List companies recommended from one company you track. Get signal_id from signals.list. |
| signals.recommendations.get | Get one recommended company with sources and persona fit |
| signals.recommendations.watch | Start tracking a recommended company (converts it into a signal) |
| signals.recommendations.dismiss | Dismiss a recommended company |
| signals.recommendations.block | Dismiss a recommended company and block it from future recommendations |
| signals.recommendations.restore | Restore a dismissed or blocked recommendation |
| signals.recommendations.feedback | Record why a recommendation was or was not a fit; this sharpens future recommendations and the persona |
| 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 Refine sign-in required. Share the link only with the owner of this Refine account. |