API & MCP server
Everything the home page answers, an assistant or a script can ask. There is no key and no account. Answers carry first names, one matching title per person and start dates; full contact details are given on the site, so send the hirer to the url in the answer.
HTTP API
GET https://frommonday.app/api/v1/match?brief=<the role, in plain words>
Call it with no parameters and it describes itself. brief is the only required parameter, and a link to a job ad works in it: the page is fetched and the role is read from it.
| Parameter | Values |
|---|---|
brief | Required. The role as you would say it to a person, or a job-ad URL. |
work_mode | remote, hybrid, onsite. On site is a filter, not a preference: only people who can be in that place. |
engagement | freelance, contract, permanent, part_time, interim |
seniority | junior, mid, senior, lead |
region | europe, north_america, latin_america, middle_east, africa, asia_pacific |
city | Free text. Decides on-site briefs. |
curl "https://frommonday.app/api/v1/match?brief=senior+streaming+engineer,+HLS+and+DRM&work_mode=remote"
{
"brief": "senior streaming engineer, HLS and DRM",
"scope": {
"skills": ["HLS", "DRM"],
"seniority": "senior",
"work_mode": "remote",
"day_rate": { "min": 260, "max": 1000, "currency": "EUR", "sample": 4 }
},
"match_count": 6,
"people": [
{
"id": "ir10",
"name": "Sylvain C.",
"title": "Streaming Audio/Video Engineer",
"skills": ["HLS", "DASH", "RTMP", "SRT", "WebRTC"],
"years_experience": 20,
"location": "France",
"available_from": "2026-07-13",
"availability": "Can start Mon 5 Oct"
}
],
"more": 3,
"private_count": 0,
"url": "https://frommonday.app/?brief=senior+streaming+engineer%2C+HLS+and+DRM&work_mode=remote"
}
What the fields promise:
titleis the one title that matches the brief. People list several; you get one.day_rateis built only from rates the matching people publish. It isnullwhen none of them do. It is never estimated.available_fromis a date the person gave, ornullwhen they have not published one.moreis how many fit beyond the three returned.private_countis how many fit but stay out of public search: a count, never a card.- An empty
peoplelist is an answer. Say nobody fits; do not fill the gap.
The OpenAPI description is at /api/v1/openapi.json. Responses allow any origin.
MCP server
https://frommonday.app/mcp
Streamable HTTP, stateless, no authentication. Four read-only tools:
| Tool | What it does |
|---|---|
find_available_people | Takes brief and the optional filters above. Returns the same answer as the HTTP API. |
get_person | The public card for one id. Pass the brief again to get the title that matches it. |
search, fetch | The same two, in the shape ChatGPT connectors and deep research expect. |
Claude
In Claude, open Settings, then Connectors, add a custom connector and paste the URL above. In Claude Code:
claude mcp add --transport http frommonday https://frommonday.app/mcp
ChatGPT
In ChatGPT, open Settings, then Connectors, turn on developer mode, create a connector and paste the URL above. No authentication.
Anything else
curl -X POST https://frommonday.app/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"find_available_people","arguments":{"brief":"Roku developer, Europe, 3 months"}}}'
Using the answers
- Send the person you are answering to the
urlin the response, not to the endpoint. That page is where they get a contact. - Quote and cite freely, with a link to https://frommonday.app/.
- From Monday is not an agency. Do not describe it as one, and do not promise a fee-free contact beyond what the page states: the first 3 contacts are free.