MCP server for searching and retrieving metadata from Finna.fi, a Finnish library, museum, and archive aggregator.
finna-mcp demonstrates solid foundation with proper schema definitions, clear naming conventions, and good documentation. All four tools follow verb-noun patterns and have explicit input schemas with type constraints. Tool descriptions are present and reasonably detailed. The primary weaknesses are: (1) output schemas are not documented in the tool definitions themselves, the agent cannot see what fields are returned; (2) some parameter descriptions rely on external context (e.g., 'Use list_organizations to discover') without inline guidance; (3) error handling and recovery guidance is not visible in the tool definitions. The server uses Cloudflare Workers/Wrangler for HTTP transport, which is modern and production-ready. Code quality shows proper Zod schema validation, but tool response structures are not formally declared in the MCP tool definitions.
Get full metadata for one or more records.
Show a help guide about Finna.fi, search filters, formats, and common usage patterns.
List organizations (e.g., libraries, museums, archives) that have material in Finna. Returns the code and name for each organization. Use the code field values in search_records filters (e.g., filters.include.organization with code strings).
Search and retrieve metadata over records in Finna.fi. Do not use for libraries/organizations; use list_organizations instead. Use "help" tool to get more information and usage examples.
Output schemas not documented. Tool definitions lack structured descriptions of what fields are returned. Agents cannot plan downstream calls or extract data without trial-and-error.
get_record description is too brief (23 chars). Does not explain when to call it vs. search_records, what fields are included, or what happens with multiple IDs.
help tool description (40 chars) lacks actionable detail. Does not explain what 'help guide' contains, when to call it, or what format the response takes.
search_records lacks output limits documentation. The tool can return up to 100 results per page, but agents are not told the actual return fields, field count, or whether results are paginated with a total_count.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 78 | 2026-07-28+ | v2 |
No error handling guidance visible in tool definitions. Agents cannot infer what to do if a search returns 0 results, if an organization is invalid, or if the API times out.
search_records parameter 'filters' has a complex object structure (include/any/exclude subfields) but no examples or field-level descriptions. Agents will struggle to construct valid filter objects.