MCP server for WorkLink Partner API — search Syria jobs and tenders
Four tools with complete schemas and reasonable descriptions. All tools follow verb_noun naming (list_*, get_*). Schemas include proper types, constraints (enums, min/max), and descriptions for all parameters. Output schemas are not explicitly documented in the source, which is a notable gap. Error handling is present in the API client (timeouts, retries, HTTP error parsing) but tool-level recovery guidance is absent. Pagination is well-implemented with page/per_page parameters and documented limits (1-50). No tool annotations (readOnlyHint, etc.) present. Descriptions average ~150 chars, within the 10-1024 baseline, but lack dependency hints and recovery guidance.
Get details of a single tender by its slug. Returns preview text only (full body is on WorkLink). Always includes link to view full tender and apply.
Get full details of a single job vacancy by its slug. Returns title, description (HTML), salary, type, company, locations, deadline, and apply link.
List published tenders from WorkLink Syria. Returns paginated results with title, company, location, preview text, and link to full tender.
List active job vacancies from WorkLink Syria. Returns paginated results with title, company, salary, locations, and apply link.
Output schemas not documented. Tool descriptions state what is returned (title, company, salary, etc.) but no formal schema definition is visible in source code. LLMs cannot reliably extract fields or plan downstream calls without explicit output structure.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All four tools are read-only and idempotent, but this is not declared in the tool definition. Agents cannot infer safety properties without explicit hints.
Error recovery guidance missing. Descriptions do not explain what to do if a slug is invalid, API rate limit is hit, or network timeout occurs. API client handles retries and timeouts internally, but tool-level error messages are not visible in source.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Descriptions lack dependency hints. 'list_vacancies' and 'list_tenders' do not explain that 'category' and 'company' filters require knowing valid IDs beforehand. No guidance on how to discover these IDs.
Parameter 'open' enum values (0, 1) lack semantic clarity in descriptions. Description says '1 = only currently-open items' but does not explain what 0 means (all items? closed items?). Ambiguous enum semantics invite misuse.