Refine Job Search
REMOTE · MCP.GETREFINE.CO · SCANNED SEP 20
Job search management: applications, interviews, offers, recruiter email, and company openings.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security81
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS enforcement could not be verified: the plaintext port answered with HTTP 401, which proves neither a plaintext path nor enforcement. View diagnostics → Unverified
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server supports Client ID Metadata Documents, the current MCP client-registration mechanism. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability86
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 4003 tokens (~67/item across 59 items; 55 tools + 4 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management40
- Stability check failed: schema churn in the 28 days we've observed: 30 tool removals, 6 breaking changes, 0 auth/transport breaks, 23 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 56 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Refine Job Search MCP server?
Refine Job Search is a hosted endpoint at https://mcp.getrefine.co/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.getrefine.co
claude mcp add --transport http co-getrefine-refine 'https://mcp.getrefine.co/mcp'
{
"mcpServers": {
"co-getrefine-refine": {
"url": "https://mcp.getrefine.co/mcp"
}
}
} {
"servers": {
"co-getrefine-refine": {
"type": "http",
"url": "https://mcp.getrefine.co/mcp"
}
}
} [mcp_servers.co-getrefine-refine] url = "https://mcp.getrefine.co/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"co-getrefine-refine": {
"type": "remote",
"url": "https://mcp.getrefine.co/mcp",
"enabled": true
}
}
} openclaw mcp add co-getrefine-refine --url 'https://mcp.getrefine.co/mcp' --transport streamable-http
mcp_servers:
co-getrefine-refine:
url: "https://mcp.getrefine.co/mcp" {
"McpServers": {
"co-getrefine-refine": {
"Transport": "http",
"Url": "https://mcp.getrefine.co/mcp"
}
}
} assistant mcp add co-getrefine-refine -t streamable-http -u 'https://mcp.getrefine.co/mcp'
{
"mcpServers": {
"co-getrefine-refine": {
"type": "http",
"url": "https://mcp.getrefine.co/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 18 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 30 to 33.
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27.
- 14 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 17 to 20.
- 12 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 10 to 13.
- 10 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7.
- 27 Aug 26 0
- Server version: 0.5.1 → 0.5.2 functional
- 26 Aug 26 +2
- Stability: 0.07 → fail ▼ security
- Tool “interviews.add” was removed ▼ security
- Tool “interviews.delete” was removed ▼ security
- Tool “interviews.list” was removed ▼ security
- Tool “interviews.update” was removed ▼ security
- Tool “persona.remove_trait” was removed ▼ security
- Tool “recommendations.block” was removed ▼ security
- Tool “inbox.accept” was removed ▼ security
- Tool “inbox.status” was removed ▼ security
- Tool “jobs.update_notes” was removed ▼ security
- Tool “journey.update” was removed ▼ security
- Tool “notifications.list” was removed ▼ security
- Tool “notifications.read” was removed ▼ security
- Tool “notifications.read_all” was removed ▼ security
- Tool “offers.accept” was removed ▼ security
- Tool “offers.add_negotiation” was removed ▼ security
- Tool “offers.create” was removed ▼ security
- Tool “offers.decline” was removed ▼ security
- Tool “offers.delete” was removed ▼ security
- Tool “offers.delete_negotiation” was removed ▼ security
- Tool “offers.get” was removed ▼ security
- Tool “offers.update” was removed ▼ security
- Tool “persona.confirm_trait” was removed ▼ security
- Tool “persona.correct_trait” was removed ▼ security
- Tool “recommendations.dismiss” was removed ▼ security
- Tool “recommendations.feedback” was removed ▼ security
- Tool “recommendations.get” was removed ▼ security
- Tool “recommendations.list” was removed ▼ security
- Tool “recommendations.restore” was removed ▼ security
- Tool “recommendations.watch” was removed ▼ security
- Tool “signals.save_opening” was removed ▼ security
- First check of Injection markers: pass security
- First check of Judged manipulation: pass security
- New tool “inbox.apply_suggestion”, which the server declares destructive security
- New tool “jobs.interviews.delete”, which the server declares destructive security
- New tool “jobs.offer.accept”, which the server declares destructive security
- New tool “jobs.offer.decline”, which the server declares destructive security
- New tool “jobs.offer.delete”, which the server declares destructive security
- New tool “jobs.offer.delete_negotiation”, which the server declares destructive security
- Tool “inbox.acknowledge” rewrote its description, which is the text the model reads security
- Tool “inbox.undo” rewrote its description, which is the text the model reads security
- Tool “integrations.connect_google” rewrote its description, which is the text the model reads security
- Tool “jobs.archive” rewrote its description, which is the text the model reads security
- Tool “jobs.delete” rewrote its description, which is the text the model reads security
- Tool “jobs.refresh” rewrote its description, which is the text the model reads security
- Tool “jobs.update” no longer declares itself destructive security
- Tool “signals.update” no longer declares itself destructive security
- Tool “inbox.acknowledge” is now declared destructive security
- Schema quality: 59 → 67 ▼ functional
- “inbox.acknowledge” added a required parameter “confirmed”, so existing callers break ▼ functional
- “inbox.dismiss” added a required parameter “confirmed”, so existing callers break ▼ functional
- “inbox.undo” added a required parameter “confirmed”, so existing callers break ▼ functional
- “inbox.unsubscribe” added a required parameter “confirmed”, so existing callers break ▼ functional
- “jobs.delete” added a required parameter “confirmed”, so existing callers break ▼ functional
- “signals.untrack” added a required parameter “confirmed”, so existing callers break ▼ functional
- Schema quality: 78% → 100% ▲ functional
- First check of Destructive annotations: 100 functional
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- Server version: 0.4.1 → 0.5.1 functional
- New tool “inbox.sync_status” functional
- New tool “jobs.interviews.add” functional
- New tool “jobs.interviews.update” functional
- New tool “jobs.offer.add_negotiation” functional
- New tool “jobs.offer.create” functional
- New tool “jobs.offer.update” functional
- New tool “signals.openings.list” functional
- New tool “signals.openings.mark_all_read” functional
- New tool “signals.openings.mark_read” functional
- New tool “signals.openings.save” functional
- New tool “signals.recommendations.block” functional
- New tool “signals.recommendations.dismiss” functional
- New tool “signals.recommendations.feedback” functional
- New tool “signals.recommendations.get” functional
- New tool “signals.recommendations.list” functional
- New tool “signals.recommendations.restore” functional
- New tool “signals.recommendations.watch” functional
- “inbox.list” added an optional parameter “limit” cosmetic
- “inbox.list” added an optional parameter “page” cosmetic
- “jobs.update” added an optional parameter “notes” cosmetic
- “signals.list_applied_jobs” added an optional parameter “limit” cosmetic
- “signals.list_applied_jobs” added an optional parameter “page” cosmetic
- “jobs.add” dropped the optional parameter “captured_at” cosmetic
- “jobs.add” dropped the optional parameter “journey_id” cosmetic
- “jobs.add” dropped the optional parameter “state” cosmetic
- “jobs.update” dropped the optional parameter “captured_at” cosmetic
- “jobs.update” dropped the optional parameter “journey_id” cosmetic
- “jobs.update” dropped the optional parameter “state” cosmetic
- 25 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Probed https://mcp.getrefine.co/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=getrefine.co | CN=WE1,O=Google Trust Services,C=US | 9 Aug 2026 | 7 Nov 2026 | ECDSA 256 | ECDSA-SHA256 | 3db43164c218b627132c77f2c8a20f36 |
| SANs: getrefine.co, mcp.getrefine.co, *.mcp.getrefine.co | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.getrefine.co. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| co. | present | 7786 | 8 | Verified |
| getrefine.co. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer resource_metadata="https://mcp.getrefine.co/.well-known/oauth-protected-resource", scope="openid read_user read_jobs write_jobs read_signals write_signals read_inbox write_inbox read_integrations write_integrations"
Bearer resource_metadata="https://mcp.getrefine.co/.well-known/oauth-protected-resource", scope="openid read_user read_jobs write_jobs read_signals write_signals read_inbox write_inbox read_integrations write_integrations" Protected resource metadata
| Document | https://mcp.getrefine.co/.well-known/oauth-protected-resource |
|---|---|
| Retrieved | Yes |
| Resource | https://mcp.getrefine.co/mcp |
| Authorisation server | https://api.getrefine.co |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.getrefine.co/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.getrefine.co/mcp | Inconclusive | 401 |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
account.agenda ~16
Get upcoming interviews and action items
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
inbox.acknowledge ~64
Keep auto-applied inbox items as-is and finalize the automatic action. Confirm the specific items with the user first.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | Must be true after the user confirms keeping these automatic actions |
| ids | array | yes | Inbox item ids to acknowledge |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
inbox.apply_suggestion ~67
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | Must be true after the user confirms applying this suggestion |
| item_id | string | yes | Inbox item id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
inbox.decline ~105
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | Must be true, and only after the user explicitly approved declining these conversations |
| ids | array | yes | Inbox item ids to decline |
| preference | string | – | Send preference to apply; omit to use the saved preference |
| remember | boolean | – | Save the preference for future declines |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
inbox.dismiss ~61
Dismiss inbox items you are not acting on (also marks the mail read in Gmail)
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | Must be true after the user confirms dismissing these items and marking their mail read |
| ids | array | yes | Inbox item ids to dismiss |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
inbox.draft_reply ~59
Generate an AI reply draft for an inbox item. Returns HTML for review; it does not send anything.
| Name | Type | Req | Description |
|---|---|---|---|
| item_id | string | yes | Inbox item id |
| kind | string | yes | decline politely passes; interested asks to continue the conversation |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
inbox.get ~30
Get one inbox item with its related job and application
| Name | Type | Req | Description |
|---|---|---|---|
| item_id | string | yes | Inbox item id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
inbox.get_thread ~30
Fetch the full email thread for an inbox item
| Name | Type | Req | Description |
|---|---|---|---|
| item_id | string | yes | Inbox item id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | yes | – |
| meta | object | – | – |
No examples provided.
inbox.list ~153
List email conversations Refine matched to your job search (applications, interviews, recruiter outreach)
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | – | Filter to one connected Google account id |
| limit | integer | – | Maximum records to return |
| page | string | – | Pagination cursor returned as meta.next_page |
| shelf | string | – | For the outreach tab: show the low-signal shelf instead of the main feed |
| status | string | – | pending needs a decision, auto was auto-applied, active has an open conversation, handled is done |
| tab | string | – | Which inbox tab to list; defaults to applications |
| unread | boolean | – | With status=active: only conversations with (or without) an unread reply |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | yes | – |
| meta | object | – | – |
No examples provided.
inbox.mark_read ~29
Clear an inbox item's unread-reply flag
| Name | Type | Req | Description |
|---|---|---|---|
| item_id | string | yes | Inbox item id |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Human-readable confirmation of the action |
No examples provided.
inbox.refresh ~21
Check Gmail for new mail now; returns per-account sync status
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | yes | – |
| meta | object | – | – |
No examples provided.
inbox.send_reply ~115
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.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | yes | HTML body of the reply, exactly as approved by the user |
| confirmed | boolean | yes | Must be true, and only after the user explicitly approved sending this exact message |
| draft_kind | string | – | Set when the body came from inbox.draft_reply |
| item_id | string | yes | Inbox item id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
inbox.sync_status ~23
Per-account Gmail synchronization status, including current progress and last sync time
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | yes | – |
| meta | object | – | – |
No examples provided.
inbox.undo ~65
Undo an auto-applied inbox action. This can delete a board record that the automatic action created, so confirm with the user first.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | Must be true after the user confirms undoing the automatic action |
| item_id | string | yes | Inbox item id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
inbox.unsubscribe ~91
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | Must be true, and only after the user explicitly approved unsubscribing from this sender |
| item_id | string | yes | Inbox item id |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Human-readable confirmation of the action |
No examples provided.
integrations.connect_google ~66
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.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| connect_url | string | yes | Single-use browser URL for connecting Gmail |
| expires_at | string | – | When the connection URL expires |
| instructions | string | yes | Safety and usage instructions for the connection URL |
No examples provided.
integrations.list ~28
List connected Google accounts and their grant status. To connect a new account, use integrations.connect_google.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | yes | – |
| meta | object | – | – |
No examples provided.
jobs.add ~98
Add a new job to your journey
| Name | Type | Req | Description |
|---|---|---|---|
| company | string | yes | Company name |
| compensation_text | string | – | Compensation text from the posting |
| description | string | – | Job description |
| location | string | – | Job location |
| qualifications | string | – | Job qualifications |
| source | string | – | Where this job came from |
| title | string | yes | Job title |
| url | string | – | URL of the job posting |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
jobs.archive ~34
Hide a job from the active board without recording a rejection or closing the application
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | Job id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
jobs.delete ~73
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | Must be true after the user confirms permanent deletion |
| job_id | string | yes | Job id |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Human-readable confirmation of the action |
No examples provided.
jobs.get ~25
Get details of a specific job
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | Job id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
jobs.interviews.add ~89
Log an interview for a job
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | Job id |
| location | string | – | Location or meeting link |
| name | string | yes | Interview name, e.g. phone screen, technical, behavioral, onsite |
| notes | string | – | Notes or debrief from the interview |
| scheduled_at | string | – | ISO 8601 date/time with timezone |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
jobs.interviews.delete ~66
Permanently delete an interview from a job. Confirm with the user first; it cannot be undone.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | Must be true after the user confirms permanent deletion |
| interview_id | string | yes | Interview id |
| job_id | string | yes | Job id |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Human-readable confirmation of the action |
No examples provided.
jobs.interviews.update ~206
Update an existing interview
| Name | Type | Req | Description |
|---|---|---|---|
| cancelled_at | string | – | ISO 8601 cancellation time with timezone |
| cancelled_reason | string | – | Why the interview was cancelled |
| completed_at | string | – | Completion date in YYYY-MM-DD format |
| feedback | string | – | Feedback received or given |
| interview_id | string | yes | Interview id |
| interviewers | string | – | Names or roles of the interviewers |
| job_id | string | yes | Job id |
| location | string | – | Location or meeting link |
| name | string | – | Interview name, e.g. phone screen, technical, onsite |
| next_action | string | – | The next step after this interview |
| notes | string | – | Notes or debrief from the interview |
| outcome | string | – | Interview outcome |
| rating | integer | – | Your rating of the interview, 1 to 5 |
| scheduled_at | string | – | ISO 8601 date/time with timezone |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
jobs.list ~39
List jobs in your journey
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum records to return |
| page | string | – | Pagination cursor returned as meta.next_page |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | yes | – |
| meta | object | – | – |
No examples provided.
jobs.mark_applied ~26
Mark a job as applied
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | Job id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
jobs.offer.accept ~72
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | Must be true after the user confirms accepting the offer |
| job_id | string | yes | Job id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
jobs.offer.add_negotiation ~143
Log a negotiation event on an offer (counter-offer, update, etc.)
| Name | Type | Req | Description |
|---|---|---|---|
| bonus_cents | integer | – | Signing bonus in cents |
| equity_text | string | – | Equity details (e.g. "0.05% over 4 years") |
| event_date | string | – | Event date in YYYY-MM-DD format |
| event_type | string | yes | Whether the event records an employer offer or your counter |
| job_id | string | yes | Job id |
| notes | string | – | Notes about this negotiation event |
| salary_cents | integer | – | Salary in cents (e.g. 15000000 for $150k) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
jobs.offer.create ~286
Record a job offer with compensation details
| Name | Type | Req | Description |
|---|---|---|---|
| base_salary_cents | integer | – | Base salary in cents (e.g. 15000000 for $150k) |
| bonus_cents | integer | – | Bonus in cents |
| currency | string | – | Supported currency code |
| deadline_at | string | – | ISO 8601 offer deadline with timezone |
| equity_text | string | – | Equity details as text |
| initial_bonus_cents | integer | – | The originally offered bonus in cents |
| initial_equity_text | string | – | The originally offered equity as text |
| initial_rsu_text | string | – | The originally offered RSUs as text |
| initial_salary_cents | integer | – | The originally offered base salary in cents |
| job_id | string | yes | Job id |
| next_action | string | – | The next step on this offer |
| notes | string | – | Notes about the offer |
| rsu_text | string | – | RSU details as text |
| target_bonus_cents | integer | – | The bonus you are negotiating toward, in cents |
| target_equity_text | string | – | The equity you are negotiating toward, as text |
| target_rsu_text | string | – | The RSUs you are negotiating toward, as text |
| target_salary_cents | integer | – | The base salary you are negotiating toward, in cents |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
jobs.offer.decline ~63
Decline the offer for a job, a major state change; confirm with the user first. It does not email the employer.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | Must be true after the user confirms declining the offer |
| job_id | string | yes | Job id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
jobs.offer.delete ~68
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | Must be true after the user confirms permanent deletion |
| job_id | string | yes | Job id |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Human-readable confirmation of the action |
No examples provided.
jobs.offer.delete_negotiation ~57
Remove a negotiation event from an offer
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | Must be true after the user confirms deletion |
| event_id | integer | yes | Negotiation event id |
| job_id | string | yes | Job id |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Human-readable confirmation of the action |
No examples provided.
jobs.offer.update ~286
Update the offer recorded for a job
| Name | Type | Req | Description |
|---|---|---|---|
| base_salary_cents | integer | – | Base salary in cents (e.g. 15000000 for $150k) |
| bonus_cents | integer | – | Bonus in cents |
| currency | string | – | Supported currency code |
| deadline_at | string | – | ISO 8601 offer deadline with timezone |
| equity_text | string | – | Equity details as text |
| initial_bonus_cents | integer | – | The originally offered bonus in cents |
| initial_equity_text | string | – | The originally offered equity as text |
| initial_rsu_text | string | – | The originally offered RSUs as text |
| initial_salary_cents | integer | – | The originally offered base salary in cents |
| job_id | string | yes | Job id |
| next_action | string | – | The next step on this offer |
| notes | string | – | Notes about the offer |
| rsu_text | string | – | RSU details as text |
| target_bonus_cents | integer | – | The bonus you are negotiating toward, in cents |
| target_equity_text | string | – | The equity you are negotiating toward, as text |
| target_rsu_text | string | – | The RSUs you are negotiating toward, as text |
| target_salary_cents | integer | – | The base salary you are negotiating toward, in cents |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
jobs.refresh ~46
Queue a job posting to be re-scraped. The returned job may remain pending; use jobs.get later to inspect the refreshed state.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | Job id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
jobs.unarchive ~28
Restore an archived job to the active board
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | Job id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
jobs.update ~119
Update a job in your journey
| Name | Type | Req | Description |
|---|---|---|---|
| company | string | – | Company name |
| compensation_text | string | – | Compensation text from the posting |
| description | string | – | Job description |
| job_id | string | yes | Job id |
| location | string | – | Job location |
| notes | string | – | Markdown notes about this application |
| qualifications | string | – | Job qualifications |
| source | string | – | Where this job came from |
| title | string | – | Job title |
| url | string | – | URL of the job posting |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
persona.get ~32
Get the user's persona: inferred job-search preferences and traits with an understanding score. Use it to tailor advice and searches.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
signals.list ~39
List companies you are tracking
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum records to return |
| page | string | – | Pagination cursor returned as meta.next_page |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | yes | – |
| meta | object | – | – |
No examples provided.
signals.list_applied_jobs ~62
List jobs in your journey that came from a tracked company
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum records to return |
| page | string | – | Pagination cursor returned as meta.next_page |
| signal_id | string | yes | Signal (tracked company) id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | yes | – |
| meta | object | – | – |
No examples provided.
signals.openings.list ~129
List signal notifications (new openings at tracked companies)
| Name | Type | Req | Description |
|---|---|---|---|
| department | string | – | Exact department facet |
| limit | integer | – | Maximum records to return |
| location | string | – | Exact location facet; use "remote" for remote roles |
| matches | boolean | – | Only openings that score as a match for your persona |
| page | string | – | Pagination cursor returned as meta.next_page |
| q | string | – | Free-text search over opening titles |
| tab | string | – | Use new for unread notifications |
| tracker_id | string | – | Filter notifications to one signal tracker |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | yes | – |
| meta | object | – | – |
No examples provided.
signals.openings.mark_all_read ~45
Mark every unread opening notification as read after the user confirms the bulk action
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | Must be true after the user confirms marking all openings read |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Human-readable confirmation of the action |
No examples provided.
signals.openings.mark_read ~39
Mark one opening notification returned by signals.openings.list as read
| Name | Type | Req | Description |
|---|---|---|---|
| notification_id | string | yes | Notification id from signals.openings.list |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Human-readable confirmation of the action |
No examples provided.
signals.openings.save ~42
Save a matched opening returned by signals.openings.list to your job journey
| Name | Type | Req | Description |
|---|---|---|---|
| opening_id | string | yes | Matched opening id from signals.openings.list |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
signals.pause ~28
Pause tracking for a company
| Name | Type | Req | Description |
|---|---|---|---|
| signal_id | string | yes | Signal (tracked company) id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
signals.recommendations.block ~33
Dismiss a recommended company and block it from future recommendations
| Name | Type | Req | Description |
|---|---|---|---|
| recommendation_id | string | yes | Recommendation id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
signals.recommendations.dismiss ~43
Dismiss a recommended company
| Name | Type | Req | Description |
|---|---|---|---|
| reason | string | – | Why it was dismissed; sharpens future recommendations |
| recommendation_id | string | yes | Recommendation id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
signals.recommendations.feedback ~74
Record why a recommendation was or was not a fit; this sharpens future recommendations and the persona
| Name | Type | Req | Description |
|---|---|---|---|
| feedback_types | array | yes | One or more supported feedback tags |
| interaction_source | string | – | Where the feedback came from in the UI or agent flow |
| recommendation_id | string | yes | Recommendation id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
signals.recommendations.get ~31
Get one recommended company with sources and persona fit
| Name | Type | Req | Description |
|---|---|---|---|
| recommendation_id | string | yes | Recommendation id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
signals.recommendations.list ~67
List companies recommended from one company you track. Get signal_id from signals.list.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum records to return |
| page | string | – | Pagination cursor returned as meta.next_page |
| signal_id | string | yes | Tracked-company id from signals.list |
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | yes | – |
| meta | object | – | – |
No examples provided.
signals.recommendations.restore ~28
Restore a dismissed or blocked recommendation
| Name | Type | Req | Description |
|---|---|---|---|
| recommendation_id | string | yes | Recommendation id |
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | – |
| meta | object | – | – |
No examples provided.
What is the Refine Job Search MCP server?
Refine Job Search is an MCP server listed in the public MCP registry as co.getrefine/refine. Job search management: applications, interviews, offers, recruiter email, and company openings. This page covers its hosted endpoint (https://mcp.getrefine.co/mcp).
Is the Refine Job Search MCP server safe to use?
Refine Job Search scores 81 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Refine Job Search MCP server expose?
Refine Job Search exposes 55 tools: jobs.list, jobs.get, jobs.add, jobs.update, jobs.delete, and 50 more. Their descriptions and schemas cost roughly 3,922 tokens of context every time the server is loaded.
Does the Refine Job Search MCP server require authentication?
Yes. Refine Job Search asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the Refine Job Search MCP server still maintained?
Refine Job Search is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.