Skip to main content
Glama

CuratorSearch

Server Details

Live museum and curatorial job listings from institutions' own careers pages, plus a salary archive.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: get_job retrieves a single listing by slug, institution_jobs lists all roles at a given institution, salary_transparency provides aggregate pay statistics, and search_jobs performs keyword-based searching. There is no overlap or ambiguity between these operations.

Naming Consistency3/5

Tool names mix conventions: get_job and search_jobs follow a verb_noun pattern, while institution_jobs and salary_transparency are noun phrases. The inconsistency is noticeable but all names are still readable and descriptive, making this a moderate deviation rather than chaotic naming.

Tool Count5/5

With only 4 tools, the server is tightly scoped to its purpose of searching and retrieving curatorial job listings. This is well within the ideal 3-15 range and each tool serves a necessary function without redundancy.

Completeness4/5

The server covers the core workflows: searching listings, viewing full details, drilling down by institution, and accessing salary transparency metrics. Minor gaps exist, such as no explicit pagination or filtering options beyond the default search behavior, but the surface is complete for a read-only job board.

Available Tools

4 tools
get_jobA
Read-onlyIdempotent
Inspect

One listing in full: description, stated salary, deadline, and the institution's original posting URL. Takes the slug from a curatorsearch.com/opportunities/ URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesThe listing's slug, or the whole curatorsearch.com/opportunities/<slug> URL -- either is accepted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYesThe role's permanent page on curatorsearch.com.
titleYesJob title as advertised.
postedYesISO date the role was first seen on the board.
regionYesCuratorSearch world region.
salaryNoPay exactly as the posting states it, or null -- most postings state none.
sourceYesThe institution's original posting, where applications are made.
statusYes'live' while the role is open; anything else means the institution has taken it down.
categoryYesCuratorSearch field, one of the category values.
deadlineNoApplication deadline as an ISO date, or null if none is given.
locationNoCity and country as stated, or null if the posting gives none.
descriptionNoThe posting's own text, or null if the source gave none.
institutionYesMuseum, gallery or organisation advertising the role.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds useful context beyond annotations by specifying what 'full' means: description, salary, deadline, and original posting URL. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the core purpose and input format front-loaded. Every sentence contributes meaningful guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only tool with an output schema and rich annotations, this description is complete. An agent knows what to pass, what will be returned, and that the operation is safe and idempotent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the input schema already documents that slug can be a slug or a full URL. The description reinforces that by mentioning the curatorsearch.com/opportunities/<slug> URL format, but it does not add meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific action: get one full listing, enumerating the fields returned (description, salary, deadline, original posting URL). It clearly distinguishes itself from broader search/list tools by emphasizing 'One listing in full' and the slug-based identifier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context is provided: use this tool when you have a specific slug or curatorsearch.com/opportunities/<slug> URL and need the full listing details. It does not explicitly name alternatives or exclusion criteria, but the use case is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

institution_jobsA
Read-onlyIdempotent
Inspect

Every role one museum or gallery currently has open on the board, by institution name.

ParametersJSON Schema
NameRequiredDescriptionDefault
institutionYesThe institution's name, e.g. 'Philadelphia Museum of Art'. Near-misses resolve; if nothing matches, the reply says so.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNoPresent only when no institution of that name is on the board.
pageNoThat institution's page on curatorsearch.com.
resultsYesIts open roles, newest first.
institutionYesThe institution as the board names it.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds modest context by emphasizing 'currently has open' and 'on the board,' but it doesn't reveal any deeper behavior such as freshness, ordering, or limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence with no filler or repeated annotation content. The phrasing is slightly awkward ('Every role... has open') but the length and front-loading of the core idea are appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only tool with a full input schema and an output schema, the description plus structured data covers what an agent needs to call it. It stops short of a 5 because it doesn't explicitly mention when to use this over search_jobs, which would make it fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the institution parameter already includes near-miss resolution and failure behavior. The description adds only the general notion of 'by institution name,' which provides no new meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the specific resource (open roles for one museum or gallery) and the key dimension (institution name), making its purpose clear. It lacks an explicit operative verb like 'list' or 'get', and it doesn't explicitly contrast itself with siblings like search_jobs, so it doesn't fully distinguish itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by institution name' implies this tool is for a specific institution's open roles, giving a clear usage context. However, it never explicitly says when to prefer this over search_jobs, get_job, or salary_transparency, nor does it state any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salary_transparencyA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
asOfNoISO date the figures were computed.
noteNoPresent only when there is no salary data yet.
citationNoHow to cite these figures.
liveListingsNoLive roles on the board at the moment of the call.
percentStatingSalaryNoPercentage of those postings that state any pay at all.
medianAdvertisedEurPerYearNoMedian stated figure among those that do, annualised into euro.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description adds that the number is 'computed live' and that the median is only among postings 'that do' state a salary, clarifying the denominator. It does not contradict annotations. This gives useful behavioral context for a zero-parameter aggregate tool, though it stops short of describing refresh rates or data source caveats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is a single, front-loaded sentence that states the metric, scope, and live nature without any filler. The appended brand phrase 'CuratorSearch Curatorial Pay Archive' is brief and doesn't hurt.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has zero parameters, rich annotations, and an output schema, so the description does not need to detail return types. It fully captures what is calculated and the population it covers. No important calling-context information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, and the schema coverage is trivially 100%; the baseline for zero-parameter tools is 4. The description therefore doesn't need to elaborate on parameter meanings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool reports: the number of live museum/curatorial postings with a stated salary and the median advertised figure among those that do. It identifies the resource ('museum and curatorial postings') and distinguishes it from sibling tools like get_job or search_jobs by offering an aggregate statistic rather than job-level data. Though it lacks an explicit imperative verb, 'computed live' makes the operation clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for pay-transparency aggregate statistics, but it never explicitly says when to use this tool instead of get_job, institution_jobs, or search_jobs. There are no exclusions or alternative routing cues. The context of 'headline number' is clear enough but the comparison is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_jobsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many roles to return, 1 to 20. Defaults to 10.
queryNoFree text matched against title, institution and location, e.g. 'registrar London'. Omit to browse everything.
regionNoRestrict to one world region.
categoryNoRestrict to one field of work.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYesHow many live roles match, which may exceed the number returned.
resultsYesThe matching roles, newest first.
attributionNoSource credit to quote when citing these results.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond annotations: it states the freshness ('live', 'gathered daily'), the result cap ('up to 20 roles'), the ordering ('newest first'), and the output format ('each with its curatorsearch.com page'). These details are not in the annotations (readOnlyHint, openWorldHint, etc.) and help an agent anticipate result characteristics, though it does not cover edge cases like empty results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly two sentences, with the primary verb and purpose front-loaded. The first sentence states what it searches and the data source; the second states key output behaviors. There is no redundancy or filler - every clause contributes to understanding the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only search tool with all-optional parameters, an output schema, and annotations covering safety, the description is quite complete: it explains the data source, result cap, ordering, and output format. The only minor gaps are edge-case behavior (e.g., no matches) and explicit routing to siblings, but these are not critical given the sibling names and schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (all four parameters - limit, query, region, category - have descriptive text and enums). The description itself adds no parameter-specific meaning, so the baseline of 3 is appropriate per the rubric; the schema carries the full semantic weight for parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Search') and a concrete resource ('live museum, gallery and curatorial job listings') with a clear data source ('gathered daily from institutions' own career pages'). It distinguishes itself from siblings like get_job (which likely fetches a single job) and institution_jobs (which likely filters by institution) by describing a broad aggregated search across multiple institutions and job types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for searching/browsing job listings broadly, but it gives no explicit guidance about when to prefer it over alternatives. It does not mention siblings or state exclusionary conditions (e.g., 'use get_job for a specific role ID'), so an agent must infer usage from the general purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedsearch_jobs1 field changed
      • changedInput schema / properties / category / enum
        Previous value: -[
        -  "Leadership",
        -  "Curatorial",
        -  "Education & Public Programmes",
        -  "Archives",
        -  "Collections",
        -  "Conservation",
        -  "Intern & Fellowship",
        -  "Production",
        -  "Other"
        -]New value: +[
        +  "Leadership",
        +  "Curatorial",
        +  "Education & Public Programmes",
        +  "Archives",
        +  "Collections",
        +  "Conservation",
        +  "Intern & Fellowship",
        +  "Open Call & Residency",
        +  "Production",
        +  "Other"
        +]
  2. 4 tool updates
    • Changedget_job2 fields changed
      • addedInput schema / properties / slug / description
        Added value: +"The listing's slug, or the whole curatorsearch.com/opportunities/<slug> URL -- either is accepted."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "category": {
        +      "description": "CuratorSearch field, one of the category values.",
        +      "type": "string"
        +    },
        +    "deadline": {
        +      "description": "Application deadline as an ISO date, or null if none is given.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "description": {
        +      "description": "The posting's own text, or null if the source gave none.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "institution": {
        +      "description": "Museum, gallery or organisation advertising the role.",
        +      "type": "string"
        +    },
        +    "location": {
        +      "description": "City and country as stated, or null if the posting gives none.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "posted": {
        +      "description": "ISO date the role was first seen on the board.",
        +      "type": "string"
        +    },
        +    "region": {
        +      "description": "CuratorSearch world region.",
        +      "type": "string"
        +    },
        +    "salary": {
        +      "description": "Pay exactly as the posting states it, or null -- most postings state none.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "source": {
        +      "description": "The institution's original posting, where applications are made.",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "'live' while the role is open; anything else means the institution has taken it down.",
        +      "type": "string"
        +    },
        +    "title": {
        +      "description": "Job title as advertised.",
        +      "type": "string"
        +    },
        +    "url": {
        +      "description": "The role's permanent page on curatorsearch.com.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "title",
        +    "institution",
        +    "category",
        +    "region",
        +    "posted",
        +    "url",
        +    "status",
        +    "source"
        +  ],
        +  "type": "object"
        +}
    • Changedinstitution_jobs2 fields changed
      • addedInput schema / properties / institution / description
        Added value: +"The institution's name, e.g. 'Philadelphia Museum of Art'. Near-misses resolve; if nothing matches, the reply says so."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "institution": {
        +      "description": "The institution as the board names it.",
        +      "type": "string"
        +    },
        +    "note": {
        +      "description": "Present only when no institution of that name is on the board.",
        +      "type": "string"
        +    },
        +    "page": {
        +      "description": "That institution's page on curatorsearch.com.",
        +      "type": "string"
        +    },
        +    "results": {
        +      "description": "Its open roles, newest first.",
        +      "items": {
        +        "properties": {
        +          "category": {
        +            "description": "CuratorSearch field, one of the category values.",
        +            "type": "string"
        +          },
        +          "deadline": {
        +            "description": "Application deadline as an ISO date, or null if none is given.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "institution": {
        +            "description": "Museum, gallery or organisation advertising the role.",
        +            "type": "string"
        +          },
        +          "location": {
        +            "description": "City and country as stated, or null if the posting gives none.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "posted": {
        +            "description": "ISO date the role was first seen on the board.",
        +            "type": "string"
        +          },
        +          "region": {
        +            "description": "CuratorSearch world region.",
        +            "type": "string"
        +          },
        +          "salary": {
        +            "description": "Pay exactly as the posting states it, or null -- most postings state none.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "title": {
        +            "description": "Job title as advertised.",
        +            "type": "string"
        +          },
        +          "url": {
        +            "description": "The role's permanent page on curatorsearch.com.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "title",
        +          "institution",
        +          "category",
        +          "region",
        +          "posted",
        +          "url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "institution",
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • Changedsalary_transparency1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "asOf": {
        +      "description": "ISO date the figures were computed.",
        +      "type": "string"
        +    },
        +    "citation": {
        +      "description": "How to cite these figures.",
        +      "type": "string"
        +    },
        +    "liveListings": {
        +      "description": "Live roles on the board at the moment of the call.",
        +      "type": "integer"
        +    },
        +    "medianAdvertisedEurPerYear": {
        +      "description": "Median stated figure among those that do, annualised into euro.",
        +      "type": "integer"
        +    },
        +    "note": {
        +      "description": "Present only when there is no salary data yet.",
        +      "type": "string"
        +    },
        +    "percentStatingSalary": {
        +      "description": "Percentage of those postings that state any pay at all.",
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedsearch_jobs5 fields changed
      • addedInput schema / properties / category / description
        Added value: +"Restrict to one field of work."
      • addedInput schema / properties / limit / description
        Added value: +"How many roles to return, 1 to 20. Defaults to 10."
      • changedInput schema / properties / query / description
        Previous value: -"Free text matched against title, institution and location, e.g. 'registrar London'."New value: +"Free text matched against title, institution and location, e.g. 'registrar London'. Omit to browse everything."
      • addedInput schema / properties / region / description
        Added value: +"Restrict to one world region."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "attribution": {
        +      "description": "Source credit to quote when citing these results.",
        +      "type": "string"
        +    },
        +    "results": {
        +      "description": "The matching roles, newest first.",
        +      "items": {
        +        "properties": {
        +          "category": {
        +            "description": "CuratorSearch field, one of the category values.",
        +            "type": "string"
        +          },
        +          "deadline": {
        +            "description": "Application deadline as an ISO date, or null if none is given.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "institution": {
        +            "description": "Museum, gallery or organisation advertising the role.",
        +            "type": "string"
        +          },
        +          "location": {
        +            "description": "City and country as stated, or null if the posting gives none.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "posted": {
        +            "description": "ISO date the role was first seen on the board.",
        +            "type": "string"
        +          },
        +          "region": {
        +            "description": "CuratorSearch world region.",
        +            "type": "string"
        +          },
        +          "salary": {
        +            "description": "Pay exactly as the posting states it, or null -- most postings state none.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "title": {
        +            "description": "Job title as advertised.",
        +            "type": "string"
        +          },
        +          "url": {
        +            "description": "The role's permanent page on curatorsearch.com.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "title",
        +          "institution",
        +          "category",
        +          "region",
        +          "posted",
        +          "url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "How many live roles match, which may exceed the number returned.",
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "total",
        +    "results"
        +  ],
        +  "type": "object"
        +}
  3. 4 tool updates
    • First observedget_job
    • First observedinstitution_jobs
    • First observedsalary_transparency
    • First observedsearch_jobs

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables searching live job postings, aggregating labour-market slices, and reporting how long listings have been open, with filters for titles, location, salary, and more.
    4
    43 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Live tech-hiring intelligence for AI agents. Search 130K+ open jobs collected daily from ~500 tech companies' own career sites — plus company hiring profiles, tech stacks, salary benchmarks, and skill trends. Five tools work with no account.
    31
    93 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables querying open job postings directly from company applicant-tracking systems (Greenhouse, Ashby, Lever), finding a company's job board, listing and comparing roles, and accessing salary data, all without scraping or API keys.
    3
    34 PyPI
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables querying real disclosed salary data across 20 regions, with tools to search jobs, retrieve salary statistics, and find similar roles.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources