MCP server for Ex Libris Primo library discovery -- search university catalogue and subscribed databases via the Model Context Protocol
Primo MCP has well-structured tool definitions with complete schemas and descriptions for all 5 tools. All tools follow verb_noun naming (primo_search, primo_get_record, primo_suggest, primo_cite, primo_export). Descriptions are substantive (100-250 chars) and explain WHAT each tool does and WHEN to use it. Input schemas are properly typed with enums for constrained fields (field, scope, sort_by, style, format). However, output schemas are not documented, responses are formatted strings rather than structured objects, forcing LLMs to parse unstructured text. Error handling returns plain text messages without recovery guidance or error classification. No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only. Parameter descriptions are clear but lack explicit format constraints (e.g., date_from/date_to state 'YYYY format' but no regex or validation rules visible in schema).
Generate formatted citations for library records.
Export library records to reference manager formats.
Get full details for a single library record.
Search the university library catalogue and subscribed databases.
Get autocomplete suggestions for a search term.
Output schemas not documented. All tools return formatted strings rather than structured JSON objects. LLMs must parse unstructured text, increasing errors and token waste.
No tool annotations despite all tools being read-only. Missing readOnlyHint metadata prevents agents from understanding safety properties and optimizing caching/retry logic.
Error handling returns plain text messages without recovery guidance. Errors like 'Error searching Primo: {e}' do not tell LLM what to do next or whether to retry.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
primo_search returns results as formatted strings with no pagination metadata (total_count, next_cursor). Large result sets cannot be properly paginated despite limit/offset parameters.
Date parameters (date_from, date_to) lack explicit format validation in schema. Description states 'YYYY format' but no regex pattern or minLength/maxLength constraints visible.