Refine Job Search
Run your job search from any AI assistant.
Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeCan modify data
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.
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. |