Skip to main content
Glama

Read one posting

get_job
Read-onlyIdempotent

Retrieve full details for an Ashby job posting by board and job ID, including locations, description, and published pay ranges. Use the identifiers returned by job search.

Instructions

Read one Ashby posting in full: its locations, its description and the pay ranges its company published. Ashby addresses a posting by board and identifier, both of which search_jobs returns.

Input Schema

NameRequiredDescriptionDefault
boardYesA company name, or an Ashby board token.
job_idYesThe identifier search_jobs returned for this posting.
descriptionNoThe description runs to thousands of characters. html is the company's own markup, unrewritten.plain
include_compensationNo

Output Schema

NameRequiredDescriptionDefault
idYes
teamYes
boardYes
notesYes
titleYes
sourceYes
job_urlYes
locationYes
apply_urlYes
is_listedYesFalse marks a posting Ashby serves by direct link alone rather than on the board.
is_remoteYes
departmentYes
descriptionYesNull when the caller asked for no description.
compensationYesNull when the caller asked for no compensation, which states nothing about the company.
published_atYesISO 8601 with the offset Ashby publishes.
workplace_typeYesNull when the company records none, which is never the same as on site.
employment_typeYes
secondary_locationsYes
compensation_summaryYesNull when the company withholds its pay ranges, which is never zero.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed19 schema fields changedv2.1.0
    • changedOutput schema / properties / compensation / anyOf
      Previous value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "additionalProperties": false,
      -        "properties": {
      -          "published": {
      -            "const": true,
      -            "type": "boolean"
      -          },
      -          "summary": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "tiers": {
      -            "items": {
      -              "additionalProperties": false,
      -              "properties": {
      -                "additional_information": {
      -                  "anyOf": [
      -                    {
      -                      "type": "string"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ]
      -                },
      -                "components": {
      -                  "items": {
      -                    "additionalProperties": false,
      -                    "properties": {
      -                      "currency": {
      -                        "anyOf": [
      -                          {
      -                            "type": "string"
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ],
      -                        "description": "Null on a percentage of equity, which has no currency. Never converted."
      -                      },
      -                      "interval": {
      -                        "description": "The period the amounts belong to, as Ashby writes it: 1 YEAR, 1 MONTH, 1 HOUR, NONE. Never annualised.",
      -                        "type": "string"
      -                      },
      -                      "max": {
      -                        "anyOf": [
      -                          {
      -                            "type": "number"
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ]
      -                      },
      -                      "min": {
      -                        "anyOf": [
      -                          {
      -                            "type": "number"
      -                          },
      -                          {
      -                            "type": "null"
      -                          }
      -                        ],
      -                        "description": "Null when the company promises the component without naming an amount."
      -                      },
      -                      "summary": {
      -                        "description": "The line the company wrote for this component.",
      -                        "type": "string"
      -                      },
      -                      "type": {
      -                        "description": "Salary, EquityCashValue, EquityPercentage, Commission, Bonus, or a value beyond them.",
      -                        "type": "string"
      -                      }
      -                    },
      -                    "required": [
      -                      "type",
      -                      "min",
      -                      "max",
      -                      "currency",
      -                      "interval",
      -                      "summary"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  "type": "array"
      -                },
      -                "summary": {
      -                  "type": "string"
      -                },
      -                "title": {
      -                  "anyOf": [
      -                    {
      -                      "type": "string"
      -                    },
      -                    {
      -                      "type": "null"
      -                    }
      -                  ],
      -                  "description": "Names a zone or a level, and is null on most tiers."
      -                }
      -              },
      -              "required": [
      -                "title",
      -                "summary",
      -                "additional_information",
      -                "components"
      -              ],
      -              "type": "object"
      -            },
      -            "type": "array"
      -          }
      -        },
      -        "required": [
      -          "published",
      -          "summary",
      -          "tiers"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "additionalProperties": false,
      -        "properties": {
      -          "published": {
      -            "const": false,
      -            "type": "boolean"
      -          },
      -          "summary": {
      -            "type": "null"
      -          },
      -          "tiers": {
      -            "items": [],
      -            "type": "array"
      -          }
      -        },
      -        "required": [
      -          "published",
      -          "summary",
      -          "tiers"
      -        ],
      -        "type": "object"
      -      }
      -    ]
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "anyOf": [
      +      {
      +        "additionalProperties": false,
      +        "properties": {
      +          "published": {
      +            "const": true,
      +            "type": "boolean"
      +          },
      +          "summary": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "tiers": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "additional_information": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "components": {
      +                  "items": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "currency": {
      +                        "description": "Null on a percentage of equity, which has no currency. Never converted.",
      +                        "type": [
      +                          "string",
      +                          "null"
      +                        ]
      +                      },
      +                      "interval": {
      +                        "description": "The period the amounts belong to, as Ashby writes it: 1 YEAR, 1 MONTH, 1 HOUR, NONE. Never annualised.",
      +                        "type": "string"
      +                      },
      +                      "max": {
      +                        "type": [
      +                          "number",
      +                          "null"
      +                        ]
      +                      },
      +                      "min": {
      +                        "description": "Null when the company promises the component without naming an amount.",
      +                        "type": [
      +                          "number",
      +                          "null"
      +                        ]
      +                      },
      +                      "summary": {
      +                        "description": "The line the company wrote for this component.",
      +                        "type": "string"
      +                      },
      +                      "type": {
      +                        "description": "Salary, EquityCashValue, EquityPercentage, Commission, Bonus, or a value beyond them.",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "type",
      +                      "min",
      +                      "max",
      +                      "currency",
      +                      "interval",
      +                      "summary"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "type": "array"
      +                },
      +                "summary": {
      +                  "type": "string"
      +                },
      +                "title": {
      +                  "description": "Names a zone or a level, and is null on most tiers.",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "required": [
      +                "title",
      +                "summary",
      +                "additional_information",
      +                "components"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "published",
      +          "summary",
      +          "tiers"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "properties": {
      +          "published": {
      +            "const": false,
      +            "type": "boolean"
      +          },
      +          "summary": {
      +            "type": "null"
      +          },
      +          "tiers": {
      +            "additionalItems": false,
      +            "items": [],
      +            "maxItems": 0,
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "published",
      +          "summary",
      +          "tiers"
      +        ],
      +        "type": "object"
      +      }
      +    ]
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / compensation_summary / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / compensation_summary / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / is_remote / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / is_remote / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • removedOutput schema / properties / location / properties / country / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / location / properties / country / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / location / properties / locality / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / location / properties / locality / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / location / properties / region / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / location / properties / region / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / secondary_locations / items / properties / country / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / secondary_locations / items / properties / country / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / secondary_locations / items / properties / locality / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / secondary_locations / items / properties / locality / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / secondary_locations / items / properties / region / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / secondary_locations / items / properties / region / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / workplace_type / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / workplace_type / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  2. First observedv1.0.0

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds that the response is the complete posting including compensation, which is modest extra context but says nothing about payload size, error behavior, or missing/unpublished compensation cases. Adequate but not rich beyond the 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. The scope of returned content is front-loaded before the addressing requirement, matching how an agent reads: what it gives me, then what it needs.

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?

With an output schema present, return values need not be explained, and the annotations cover safety. The description covers purpose, source of identifiers, and payload scope. The only gap is the include_compensation parameter, which neither the schema nor the description explains.

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 coverage is 75%, so the schema does most of the work, including documenting job_id's provenance. The description reinforces the addressing model (board plus identifier from search_jobs) but adds no detail on the description format or include_compensation flag, which remain undocumented in the schema. Marginal value over structured fields.

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?

States a specific verb and resource ("Read one Ashby posting in full") and enumerates the payload it returns: locations, description, and published pay ranges. It also implicitly contrasts with the discovery sibling by naming search_jobs as the source of addressing values, so an agent can tell it apart from a search tool.

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?

The second sentence establishes the retrieval workflow: you need board and identifier, and search_jobs supplies both. That is clear guidance on when this tool is the right call (single-posting fetch after a search). It does not name explicit exclusions such as when to prefer compare_compensation, so it falls short of a 5.

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