Wraps the Ashby ATS API to provide MCP tools for candidate, job, and application management
All 5 tools have explicit schemas with type definitions and descriptions. Naming follows verb_noun convention (list_*, get_*). However, descriptions are minimal (34-76 chars, below the 50-200 char baseline for LLM optimization), parameter descriptions lack actionable constraints (no enums, ranges, or format guidance), and output schemas are completely undocumented. The _apiKey parameter is exposed as a tool input rather than injected server-side, violating secret-injection pattern. No error handling guidance, no pagination details, and no indication of what fields are returned.
Get details for a specific candidate by their ID. Returns full candidate profile.
Get details for a specific job by its ID. Returns full job posting information.
List job applications from Ashby. Returns application details including candidate and job info.
List candidates from Ashby. Returns candidate names, emails, and metadata.
List jobs from Ashby. Optionally filter by status (open, closed, draft, archived).
API key exposed as tool parameter (_apiKey) instead of server-side injection. Credentials in tool params leak into agent logs and traces.
Output schemas completely undocumented. LLMs cannot plan downstream calls or extract required fields (e.g., candidate IDs for follow-up queries). Violates pattern:tool requirement.
Descriptions too brief (34-76 chars vs. 50-200 char baseline). Lack WHEN to use, prerequisites, and what is returned. Example: 'List candidates from Ashby. Returns candidate names, emails, and metadata.' does not explain when to call this vs. get_candidate or how pagination works.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Parameter descriptions lack actionable constraints. 'status' param in ashby_list_jobs says 'Filter by job status: Open, Closed, Draft, Archived' but is not declared as an enum. LLMs may hallucinate invalid values like 'pending' or 'active'.
No error handling guidance. If API returns 401 (invalid key) or 404 (candidate not found), the raw error is thrown with no recovery hint. LLMs cannot self-correct or suggest next steps.