Hiring Signals MCP Server for Claude, Cursor and VS Code
By the RoleDawn team · Published · Updated
Add the remote MCP server https://roledawn.com/mcp to your AI client (Streamable HTTP, no sign-up, no key needed to start). Your assistant then gets four read-only tools: list_hiring_signals (companies that just started hiring a team, such as their first SDR or RevOps hire, with the job post), list_company_jobs (one company's open Greenhouse, Lever or Ashby jobs), get_app and list_app_reviews (App Store and Google Play). In Claude Code run: claude mcp add --transport http roledawn https://roledawn.com/mcp
- One URL, nothing to install. A remote server: no Docker, no npm package, no local process to keep running.
- Free to start. No sign-up and no key for the first 50 calls a day; a free key (email only) gives hiring signals their own 50 daily calls.
- Answers with evidence. Every hiring signal links to the company's own job post, so you can check it before you reach out.
- Read-only and public data only. No logins, no personal contact details, nothing the tools can change.
What is the server URL?
https://roledawn.com/mcp, transport Streamable HTTP (stateless, JSON responses over POST). Server name com.roledawn/mcp. With a free key, either send the header X-RoleDawn-Key: rd_your_key or use https://roledawn.com/mcp?key=rd_your_key.
How do I add it to Claude Code?
claude mcp add --transport http roledawn https://roledawn.com/mcp
With your free key, and for all your projects (--scope user):
claude mcp add --transport http roledawn https://roledawn.com/mcp --scope user --header "X-RoleDawn-Key: rd_your_key"
To share it with your team, commit a .mcp.json at the project root (or run the command with --scope project):
{
"mcpServers": {
"roledawn": {
"type": "http",
"url": "https://roledawn.com/mcp"
}
}
}
How do I add it to Claude Desktop or claude.ai?
- Open Customize > Connectors, click + Add, then Add custom connector. (Team and Enterprise owners add it under Organization settings > Connectors.)
- Name it RoleDawn and paste
https://roledawn.com/mcpas the remote MCP server URL. - Choose No sign in for authentication. With a key, add the request header
X-RoleDawn-Key, or usehttps://roledawn.com/mcp?key=rd_your_keyas the URL.
Custom connectors work on Claude's Free, Pro, Max, Team and Enterprise plans, according to Anthropic's help center.
How do I add it to Cursor?
Add this to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
{
"mcpServers": {
"roledawn": {
"url": "https://roledawn.com/mcp"
}
}
}
With your key:
{
"mcpServers": {
"roledawn": {
"url": "https://roledawn.com/mcp",
"headers": {
"X-RoleDawn-Key": "rd_your_key"
}
}
}
}
How do I add it to VS Code (GitHub Copilot agent mode)?
Run MCP: Add Server from the Command Palette and follow the prompts with the URL above, or add this to .vscode/mcp.json (drop headers if you have no key):
{
"servers": {
"roledawn": {
"type": "http",
"url": "https://roledawn.com/mcp",
"headers": {
"X-RoleDawn-Key": "rd_your_key"
}
}
}
}
Clients that only run local (stdio) servers can bridge to it with npx mcp-remote https://roledawn.com/mcp.
Which tools does the server have?
| Tool | What it returns |
|---|---|
list_hiring_signals | Companies that just started hiring in a role family (first_hire) or are hiring clearly more in it (surge), each with the job post. Up to 20 companies per call. |
list_company_jobs | Every open job on one company's Greenhouse, Lever or Ashby board: title, location, department, remote, URL, posting date. |
get_app | One App Store or Google Play app: rating, ratings count, star histogram, installs, version, release notes, price. |
list_app_reviews | Reviews shown on the store page, with star filter, sorting and paging; developer replies on Google Play. |
Role family ids for list_hiring_signals include sdr, sales, revops, marketing, security, data-engineering and more: the full list is in the tool's input schema and on /api.
How do I find companies that just started hiring a team?
Ask, for example: "Which companies started hiring their first SDR in the last 7 days?". The client sends:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_hiring_signals",
"arguments": {
"family": [
"sdr"
],
"since": "7d",
"limit": 2
}
}
}
Real result, captured 2026-10-07 (long text and lists shortened, marked …). The first text block is the summary the model reads; structuredContent holds the data:
2 companies with first_hire signals in sdr (last 7d), from offset 0. More: call again with offset=2. 39 companies matched; the free API returns the top 20. Full list: https://roledawn.com/weekly-list
{
"family": "sdr",
"since": "7d",
"type": "first_hire",
"window_start": "2026-09-30T10:44:43.779Z",
"generated_at": "2026-10-07T10:44:43.779Z",
"total": 39,
"count": 2,
"limit": 2,
"offset": 0,
"next_offset": 2,
"free_rows": 20,
"truncated": true,
"signals": [
{
"company": "SwiftConnect",
"company_key": "swiftconnect",
"company_url": "https://roledawn.com/companies/swiftconnect",
"title": "Sales Development Representative",
"family": "sdr",
"type": "first_hire",
"signal": "New SDR/BDR team",
"evidence": "New on their board",
"founding": true,
"location": "United States",
"job_url": "https://jobs.lever.co/swiftconnect/3305b93a-6112-4334-a4f5-cb0a36f5eeed",
"posted": "2026-10-06T18:58:48.406Z",
"detected": "2026-10-07T06:30:17.442Z",
"roles_last_30d": null,
"roles_prior_30d": null
},
{
"company": "Coperniq",
"company_key": "coperniq",
"company_url": "https://roledawn.com/companies/coperniq",
"title": "Founding BDR",
"family": "sdr",
"type": "first_hire",
"signal": "New SDR/BDR team",
"evidence": "Likely new team · inferred",
"founding": true,
"location": "Remote",
"job_url": "https://jobs.ashbyhq.com/coperniq/d89d3086-b05a-4fd4-adad-c8f44b11be07",
"posted": "2026-09-22T05:03:19.128Z",
"detected": "2026-10-05T19:07:14.382Z",
"roles_last_30d": null,
"roles_prior_30d": null
}
]
}
How do I list one company's open jobs?
Ask, for example: "What jobs does Stripe have open on its Greenhouse board right now?". The client sends:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_company_jobs",
"arguments": {
"ats": "greenhouse",
"company": "stripe",
"limit": 2
}
}
}
Real result, captured 2026-10-07 (long text and lists shortened, marked …). The first text block is the summary the model reads; structuredContent holds the data:
Stripe (greenhouse): 733 matching open jobs, showing 2 from offset 0. More: call again with offset=2.
{
"ats": "greenhouse",
"company": "stripe",
"company_name": "Stripe",
"board_url": "https://job-boards.greenhouse.io/stripe",
"fetched_at": "2026-10-07T09:32:29.178Z",
"total": 733,
"count": 2,
"limit": 2,
"offset": 0,
"next_offset": 2,
"jobs": [
{
"id": "8241345",
"title": "Account Executive, Velocity Scaled Grower (Italian or Spanish fluency)",
"company": "stripe",
"company_name": "Stripe",
"ats": "greenhouse",
"location": "Dublin",
"department": "1185 Account Executives (EMEA)",
"remote": false,
"url": "https://stripe.com/jobs/search?gh_jid=8241345",
"posted_at": "2026-10-07T09:23:16.000Z"
},
{
"id": "8257892",
"title": "Security Engineer, New Grad",
"company": "stripe",
"company_name": "Stripe",
"ats": "greenhouse",
"location": "Dublin",
"department": "5112 General University",
"remote": false,
"url": "https://stripe.com/jobs/search?gh_jid=8257892",
"posted_at": "2026-10-07T08:45:47.000Z"
}
]
}
How do I get an app's rating and store details?
Ask, for example: "What is the Google Play rating and install count of Spotify?". The client sends:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_app",
"arguments": {
"id": "com.spotify.music",
"store": "google"
}
}
}
Real result, captured 2026-10-07 (long text and lists shortened, marked …). The first text block is the summary the model reads; structuredContent holds the data:
Spotify: Music and Podcasts by Spotify AB (google, us): rating 4.35 from 36442165 ratings, version n/a, updated 2026-10-05T08:34:41.000Z.
{
"store": "google",
"id": "com.spotify.music",
"country": "us",
"lang": "en",
"title": "Spotify: Music and Podcasts",
"developer": "Spotify AB",
"developer_id": "Spotify+AB",
"url": "https://play.google.com/store/apps/details?id=com.spotify.music",
"icon": "https://play-lh.googleusercontent.com/IzQgYCcnCFCD08GR-3bdtcT8xzOvrNkC84avGT5CwTX2VIqmTmKKJcP_Cd4JoBOdmCMlTndlOzV6hrthg2fOWA",
"genre": "Music & Audio",
"price": 0,
"currency": "USD",
"free": true,
"rating": 4.35,
"ratings_count": 36442165,
"reviews_count": 1855375,
"histogram": {
"1": 3716306,
"2": 1064307,
"3": 1312656,
"4": 3101459,
"5": 27247421
},
"rating_current_version": null,
"ratings_count_current_version": null,
"installs": "1,000,000,000+",
"min_installs": 1000000000,
"version": null,
"release_notes": "We’re always making changes and improvements to Spotify. To make sure you don’t miss a thing, just keep your Updates turned on.",
"released_at": "2014-05-27T00:00:00.000Z",
"updated_at": "2026-10-05T08:34:41.000Z",
"content_rating": "Teen",
"min_os_version": null,
"size_bytes": null,
"contains_ads": true,
"in_app_purchases": true,
"description": "With the Spotify music and podcast app, you can play millions of songs, albums and original podcasts for free. We have even added audiobooks, so you can enjoy …",
"fetched_at": "2026-10-07T10:33:11.799Z"
}
How do I read an app's store reviews?
Ask, for example: "Show me the 1- and 2-star UK App Store reviews of WhatsApp.". The client sends:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_app_reviews",
"arguments": {
"id": "310633997",
"store": "apple",
"country": "gb",
"rating": [
1,
2
],
"limit": 2
}
}
}
Real result, captured 2026-10-07 (long text and lists shortened, marked …). The first text block is the summary the model reads; structuredContent holds the data:
WhatsApp Messenger (apple, gb): 5 matching reviews on the store page, showing 2 from offset 0. More: call again with offset=2.
{
"store": "apple",
"id": "310633997",
"country": "gb",
"lang": null,
"app_title": "WhatsApp Messenger",
"app_url": "https://apps.apple.com/gb/app/whatsapp-messenger/id310633997",
"rating": 4.7,
"ratings_count": 4199657,
"fetched_at": "2026-10-07T10:33:05.390Z",
"total": 5,
"count": 2,
"limit": 2,
"offset": 0,
"next_offset": 2,
"reviews": [
{
"id": "13051642211",
"rating": 2,
"title": "Superb app but anti-disabled",
"text": "This is an excellent app and well designed. However the sign in process on the iPad is unnecessarily ridiculous and really hard if you’re physically disabled. I…",
"date": "2025-08-23T16:29:26.000Z",
"app_version": null,
"thumbs_up": null,
"developer_reply": null,
"developer_reply_date": null
},
{
"id": "12906618413",
"rating": 1,
"title": "Review from a blind persons perspective.",
"text": "I use WhatsApp every single day for important daily communication with my friends, family and business contacts. For four years I have enjoyed the app significa…",
"date": "2025-07-18T13:17:24.000Z",
"app_version": null,
"thumbs_up": null,
"developer_reply": null,
"developer_reply_date": null
}
]
}
Can I test the server with curl?
Yes. initialize, tools/list and ping are free; each tools/call counts as one API request.
curl -X POST https://roledawn.com/mcp -H "content-type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'
curl -X POST https://roledawn.com/mcp -H "content-type: application/json" -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
What are the limits, and when do I need the key?
- No key: 50 tool calls per IP per day for all four tools together, 60 per minute; reset at 00:00 UTC.
- Free key (get one, email only):
list_hiring_signalscounts 50 calls per day for your key instead of the IP. Useful when your client runs in the cloud and shares an IP with other users. list_hiring_signalsreturns the top 20 companies per query. The full weekly list, with a suggested opening line for each company, is the RoleDawn Weekly List.
FAQ
Do I need an API key or an account?
No. The server works without a key: 50 tool calls per IP per day across all four tools and 60 per minute. Hosted clients often call from shared IP addresses, so for list_hiring_signals you can add a free personal key from roledawn.com/api/key (email only, shown right away): it then counts 50 calls per day for your key instead of the IP.
How do I send the key?
As an X-RoleDawn-Key header (or Authorization: Bearer with the key) in clients that support headers, such as Claude Code, Cursor and VS Code. In clients that only take a URL, put it on the server URL: https://roledawn.com/mcp?key=rd_your_key. The key is only used for list_hiring_signals; the other tools keep the per-IP allowance.
Which transport does the server use?
Streamable HTTP with plain JSON responses over POST. It is stateless: no session id and no SSE stream to keep open. It supports MCP protocol versions 2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05.
Can the tools change anything?
No. All four tools are read-only and marked readOnlyHint. They read public job boards, public app-store pages and RoleDawn's own hiring-signal data; they never log in anywhere and return no personal contact details.
What happens when I reach the daily limit?
The tool returns an error result with code rate_limited and the number of seconds to wait; counts reset at 00:00 UTC. For list_hiring_signals the message points to the free key.
My client only runs local (stdio) servers. Can I still use it?
Yes. Bridge to the remote server with npx mcp-remote https://roledawn.com/mcp.
Is there a plain REST API too?
Yes. Every tool wraps a GET endpoint documented at roledawn.com/api: /api/v1/signals, /api/v1/jobs, /api/v1/app and /api/v1/app-reviews. Using Clay? See how to pull hiring signals into clay with an http api column at roledawn.com/guides/clay-http-api-hiring-signals.
Related: MCP section of the API docs · Hiring Signals API · Hiring signals in Clay · App Reviews API · Free API key · Companies that just started hiring a new team. RoleDawn is not affiliated with Anthropic, Cursor or Microsoft.