MCP Server

CuratorSearch

com.curatorsearch/jobs
Business & Operations Search & Research Public & reachable MCP 2026-07-28

What this MCP does

Searches live museum, gallery, and curatorial job listings, retrieves full postings, lists institution openings, and provides salary statistics.

get_job
One listing in full: description, stated salary, deadline, and the institution's original posting URL. Takes the slug from a curatorsearch.com/opportunities/<slug> URL.
Read only Open world Idempotent
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': "The listing's slug, or the whole curatorsearch.com/opportunities/<slug> URL -- either is accepted."}}}
Output schema
{'type': 'object', 'required': ['title', 'institution', 'category', 'region', 'posted', 'url', 'status', 'source'], 'properties': {'url': {'type': 'string', 'description': "The role's permanent page on curatorsearch.com."}, 'title': {'type': 'string', 'description': 'Job title as advertised.'}, 'posted': {'type': 'string', 'description': 'ISO date the role was first seen on the board.'}, 'region': {'type': 'string', 'description': 'CuratorSearch world region.'}, 'salary': {'type': ['string', 'null'], 'description': 'Pay exactly as the posting states it, or null -- most postings state none.'}, 'source': {'type': 'string', 'description': "The institution's original posting, where applications are made."}, 'status': {'type': 'string', 'description': "'live' while the role is open; anything else means the institution has taken it down."}, 'category': {'type': 'string', 'description': 'CuratorSearch field, one of the category values.'}, 'deadline': {'type': ['string', 'null'], 'description': 'Application deadline as an ISO date, or null if none is given.'}, 'location': {'type': ['string', 'null'], 'description': 'City and country as stated, or null if the posting gives none.'}, 'description': {'type': ['string', 'null'], 'description': "The posting's own text, or null if the source gave none."}, 'institution': {'type': 'string', 'description': 'Museum, gallery or organisation advertising the role.'}}}
institution_jobs
Every role one museum or gallery currently has open on the board, by institution name.
Read only Open world Idempotent
Input schema
{'type': 'object', 'required': ['institution'], 'properties': {'institution': {'type': 'string', 'description': "The institution's name, e.g. 'Philadelphia Museum of Art'. Near-misses resolve; if nothing matches, the reply says so."}}}
Output schema
{'type': 'object', 'required': ['institution', 'results'], 'properties': {'note': {'type': 'string', 'description': 'Present only when no institution of that name is on the board.'}, 'page': {'type': 'string', 'description': "That institution's page on curatorsearch.com."}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'institution', 'category', 'region', 'posted', 'url'], 'properties': {'url': {'type': 'string', 'description': "The role's permanent page on curatorsearch.com."}, 'title': {'type': 'string', 'description': 'Job title as advertised.'}, 'posted': {'type': 'string', 'description': 'ISO date the role was first seen on the board.'}, 'region': {'type': 'string', 'description': 'CuratorSearch world region.'}, 'salary': {'type': ['string', 'null'], 'description': 'Pay exactly as the posting states it, or null -- most postings state none.'}, 'category': {'type': 'string', 'description': 'CuratorSearch field, one of the category values.'}, 'deadline': {'type': ['string', 'null'], 'description': 'Application deadline as an ISO date, or null if none is given.'}, 'location': {'type': ['string', 'null'], 'description': 'City and country as stated, or null if the posting gives none.'}, 'institution': {'type': 'string', 'description': 'Museum, gallery or organisation advertising the role.'}}}, 'description': 'Its open roles, newest first.'}, 'institution': {'type': 'string', 'description': 'The institution as the board names it.'}}}
salary_transparency
How many live museum and curatorial postings state a salary, and the median advertised figure among those that do -- the CuratorSearch Curatorial Pay Archive headline number, computed live.
Read only Open world Idempotent
Input schema
{'type': 'object', 'properties': {}}
Output schema
{'type': 'object', 'properties': {'asOf': {'type': 'string', 'description': 'ISO date the figures were computed.'}, 'note': {'type': 'string', 'description': 'Present only when there is no salary data yet.'}, 'citation': {'type': 'string', 'description': 'How to cite these figures.'}, 'liveListings': {'type': 'integer', 'description': 'Live roles on the board at the moment of the call.'}, 'percentStatingSalary': {'type': 'number', 'description': 'Percentage of those postings that state any pay at all.'}, 'medianAdvertisedEurPerYear': {'type': 'integer', 'description': 'Median stated figure among those that do, annualised into euro.'}}}
search_jobs
Search live museum, gallery and curatorial job listings, gathered daily from institutions' own career pages. Returns up to 20 roles, newest first, each with its curatorsearch.com page.
Read only Open world Idempotent
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'How many roles to return, 1 to 20. Defaults to 10.'}, 'query': {'type': 'string', 'description': "Free text matched against title, institution and location, e.g. 'registrar London'. Omit to browse everything."}, 'region': {'enum': ['North America', 'UK & Ireland', 'Europe', 'Asia-Pacific', 'Middle East', 'Latin America', 'Africa', 'International'], 'type': 'string', 'description': 'Restrict to one world region.'}, 'category': {'enum': ['Leadership', 'Curatorial', 'Education & Public Programmes', 'Archives', 'Collections', 'Conservation', 'Intern & Fellowship', 'Open Call & Residency', 'Production', 'Other'], 'type': 'string', 'description': 'Restrict to one field of work.'}}}
Output schema
{'type': 'object', 'required': ['total', 'results'], 'properties': {'total': {'type': 'integer', 'description': 'How many live roles match, which may exceed the number returned.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'institution', 'category', 'region', 'posted', 'url'], 'properties': {'url': {'type': 'string', 'description': "The role's permanent page on curatorsearch.com."}, 'title': {'type': 'string', 'description': 'Job title as advertised.'}, 'posted': {'type': 'string', 'description': 'ISO date the role was first seen on the board.'}, 'region': {'type': 'string', 'description': 'CuratorSearch world region.'}, 'salary': {'type': ['string', 'null'], 'description': 'Pay exactly as the posting states it, or null -- most postings state none.'}, 'category': {'type': 'string', 'description': 'CuratorSearch field, one of the category values.'}, 'deadline': {'type': ['string', 'null'], 'description': 'Application deadline as an ISO date, or null if none is given.'}, 'location': {'type': ['string', 'null'], 'description': 'City and country as stated, or null if the posting gives none.'}, 'institution': {'type': 'string', 'description': 'Museum, gallery or organisation advertising the role.'}}}, 'description': 'The matching roles, newest first.'}, 'attribution': {'type': 'string', 'description': 'Source credit to quote when citing these results.'}}}
Changed
search_jobs
Sept. 19, 2026, 2:50 a.m.
Added
salary_transparency
Sept. 17, 2026, 12:34 p.m.
Added
institution_jobs
Sept. 17, 2026, 12:34 p.m.
Added
get_job
Sept. 17, 2026, 12:34 p.m.
Added
search_jobs
Sept. 17, 2026, 12:34 p.m.