AI agents are good at reasoning and terrible at facts. Ask Claude what a data analyst earns in Singapore right now, or which companies are hiring for a role this week, and it will answer confidently from training data that is months or years stale. Salary bands move, postings open and close, and last year's numbers are not what a hiring manager or a labor-market analyst can put in a benchmark.
In this guide we fix that. We connect Claude to the official Apify MCP server, expose a single Actor that reads live job listings from Singapore's national jobs portal, MyCareersFuture, and turn "what does this role pay?" from a guess into a live lookup against real, open postings. By the end you will have a working talent-intelligence tool that Claude, Cursor, or any MCP client can call mid-conversation, and you will understand exactly where in the run the tool fires and what it returns.
Everything below is a real setup with real output. No mocked responses.
What is the Apify MCP server?
Model Context Protocol (MCP) is an open standard that lets AI clients call external tools. The Apify MCP server (https://mcp.apify.com) implements that standard on top of the Apify platform, which means every one of the thousands of Actors in the Apify Store becomes a tool an agent can invoke.
Why route an Actor through MCP instead of hard-coding an API call?
- The agent decides when to fetch. Claude reads the conversation, notices it needs a fact it does not have, and calls the tool on its own. You do not write glue code for every question.
- Structured input and output. The MCP server hands Claude the Actor's input schema, so the model fills in the parameters correctly, and returns a clean dataset it can reason over.
-
One connection, many tools. The same MCP endpoint exposes
search-actors,fetch-actor-details, andcall-actor, so an agent can discover and run any Actor without new configuration. - No infrastructure. The server is hosted. You add a few lines to a config file and you are done.
The Actor we will use
We will expose the Singapore MyCareersFuture Jobs Scraper. You give it a keyword, such as "data analyst" or "software engineer," and it returns structured records for the matching open postings: job title, hiring company and its UEN, employment type, seniority, salary range, work arrangement, required skills, number of vacancies, posting and expiry dates, location and region, and applicant traction.
That field set is exactly what talent intelligence and labor-market research need. MyCareersFuture is Singapore's official government-run jobs portal, so the postings are real, current, and cover the full range of employers from small firms to multinationals.
Step 1: Get your Apify API token
Sign in to the Apify Console, open Settings → Integrations, and copy your personal API token. The MCP server uses it to authenticate and to bill Actor runs to your account.
📌 Note: the token is a secret. Keep it in the client config only, never in a prompt or a committed file.
Step 2: Point Claude Desktop at the Apify MCP server
Open Claude Desktop's config file (Settings → Developer → Edit Config, or ~/Library/Application Support/Claude/claude_desktop_config.json on macOS) and add the Apify server. The tools query parameter is the important part: it tells the server which Actor to expose, so Claude gets one focused tool instead of the entire Store.
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=scrapers_lat/singapore-mycareersfuture-jobs-scraper",
"headers": {
"Authorization": "Bearer YOUR_APIFY_TOKEN"
}
}
}
}
Cursor uses the same JSON in .cursor/mcp.json. If you prefer to run it locally over stdio instead of the hosted endpoint:
{
"mcpServers": {
"apify": {
"command": "npx",
"args": ["-y", "@apify/actors-mcp-server", "--tools", "scrapers_lat/singapore-mycareersfuture-jobs-scraper"],
"env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
}
}
}
Restart Claude Desktop so it picks up the new server.
Step 3: Confirm the tool is loaded
After the restart, the Actor shows up as a callable tool. If you list the tools the Apify server exposes, you will see the storage helpers plus the Actor itself, named after its Store handle:
get-actor-run, get-dataset-items, get-key-value-store-record,
abort-actor-run, scrapers_lat--singapore-mycareersfuture-jobs-scraper
That last entry, scrapers_lat--singapore-mycareersfuture-jobs-scraper, is our jobs-market tool. Claude now knows it exists, what it does (from the Actor's README), and what inputs it takes (from the input schema the server passes along).
Step 4: Ask Claude about the jobs market
Now the payoff. In a normal chat, ask a question that requires live labor-market data:
"I'm benchmarking data-analyst pay in Singapore. Pull a live MyCareersFuture posting and show me the role, the hiring company, the salary band, employment type, and when it was posted."
Claude recognizes it cannot answer this reliably from memory, selects the jobs tool, and fills in the input from your question. Under the hood the client sends a tools/call with the Actor's parameters:
{
"name": "scrapers_lat--singapore-mycareersfuture-jobs-scraper",
"arguments": {
"searchQuery": "data analyst",
"maxJobs": 10
}
}
The Apify MCP server starts the Actor, waits for it to finish, and returns the dataset. Here is the real run metadata it produced:
{
"runId": "kgwsmsiFxm016kbE9",
"actorName": "scrapers_lat/singapore-mycareersfuture-jobs-scraper",
"status": "SUCCEEDED",
"startedAt": "2026-07-30T17:47:17.687Z",
"finishedAt": "2026-07-30T17:47:27.524Z",
"stats": { "runTimeSecs": 9.8 }
}
Under ten seconds, live against the portal.
Step 5: Read the real output
The dataset the tool returns is structured posting data. This is an actual record from the run (trimmed to the fields that matter for salary and talent benchmarking):
{
"title": "LOGISTICS DATA ANALYST",
"company": "MANJRA EX PTE. LTD.",
"companyUen": "201438121N",
"companyEmployeeCount": 110,
"employmentType": "Permanent, Full Time",
"seniority": "Senior Management",
"categories": ["Logistics / Supply Chain"],
"workArrangements": ["Flexi-Hours"],
"salaryMin": 6500,
"salaryMax": 10000,
"salaryType": "Monthly",
"salaryCurrency": "SGD",
"numberOfVacancies": 2,
"minimumYearsExperience": 1,
"location": "6, DEFU SOUTH STREET 1, Singapore 533757",
"region": "North-East",
"postedDate": "2026-07-25",
"expiryDate": "2026-08-15",
"totalApplications": 54,
"totalViews": 293
}
Claude reads that and answers in plain language: this is a live Logistics Data Analyst opening at Manjra Ex Pte. Ltd. (UEN 201438121N), paying SGD 6,500 to 10,000 per month, a permanent full-time role pitched at senior-management seniority, posted on 25 July and closing 15 August, with 293 views and 54 applications so far. Every one of those facts comes from a real, currently open posting, not the model's memory.
The applicant traction matters as much as the salary. The totalApplications and totalViews fields tell you whether a role is hard to fill or flooded, which is signal a static salary survey never gives you. A band that sits open for weeks with few applicants is a very different story from one that draws fifty applications in a fortnight, and the tool surfaces both.
A real use case: a talent-intelligence agent
Put this in context. A recruiter or a compensation analyst is building a hiring plan for a data team in Singapore and needs to know, before setting a budget, what the market is actually paying and how competitive each band is.
Without a tool, the analyst opens MyCareersFuture, runs the search, and copies title, company, salary, and dates from dozens of postings into a spreadsheet, one at a time. With the tool wired into Claude, the analyst asks the agent to pull the current data-analyst postings and summarize the salary spread by seniority, the mix of employment types, and which companies are hiring most aggressively. Claude calls the Actor, reads the returned records, and produces a benchmark table with the posting dates and UENs as evidence. The manual copy-paste disappears; the judgment about where to set the offer stays with the human.
This is the shape of every good agent tool: it removes the mechanical fetch, not the decision.
Going further: chain a second tool
Talent intelligence rarely stops at "what does it pay." Once you have a company name and its UEN from a posting, the obvious next question is whether the employer is a real, live registered entity. The same MCP connection can expose more Actors by extending the tools parameter:
https://mcp.apify.com?tools=scrapers_lat/singapore-mycareersfuture-jobs-scraper,scrapers_lat/singapore-acra-entities-scraper
Now the agent can pull a live posting and verify the hiring company against Singapore's official ACRA corporate register in the same conversation, confirming the entity is a Live Company, checking its incorporation date and registered address, and flagging any employer that does not resolve to a real record. Because each Actor is a separate tool, the agent picks the right one for each step on its own, and the UEN in the job record links the two lookups cleanly.
🏹 Troubleshooting: if the tool does not appear in Claude, the two usual causes are a missing or misspelled Actor handle in the tools parameter (it must be the exact username/actor-name from the Store URL) and a config that was edited while Claude was running. Fix the handle, save, and fully restart the client.
📌 Note: each tool call is a real Actor run billed to your Apify account (this Actor is pay-per-result). For interactive benchmarking the cost is a fraction of a cent; if you plan to pull thousands of postings on a schedule, run the Actor directly through the Apify API or a scheduled task instead of one call per chat message.
Wrapping up
You now have an AI agent that can read Singapore's live jobs market on demand, mid-conversation, with the salary, seniority, employment-type, and applicant-traction detail a real compensation or recruiting decision needs. The pattern is reusable: pick an Actor that returns authoritative structured data, expose it through the Apify MCP server with the tools parameter, and let the agent decide when to call it.
To take it further:
- Change the
searchQueryto any role or thesalaryMinfilter to any floor. The setup is identical. - Add the ACRA registry Actor to verify employers, or a second country's jobs Actor to compare markets, and build a multi-step talent-intelligence agent.
- Read the Apify MCP server docs for OAuth setup, resource reads, and the
search-actors/call-actortools that let an agent discover Actors it was not preconfigured with.
The Actor used in this guide: Singapore MyCareersFuture Jobs Scraper.


Top comments (0)