MCP server for the Open Science Framework (OSF) — look up projects, abstracts, and components from any MCP client.
Three well-named, read-only tools with clear descriptions and proper input schemas. All tools follow verb_noun naming (osf_get_*, osf_list_*) and include ToolAnnotations with readOnlyHint/destructiveHint/idempotentHint. Descriptions are concise (40-80 chars) and explain WHAT the tool does. Input schemas are present with type and description for all parameters. However, output schemas are not formally documented, responses are inferred from code. Error handling returns structured {ok, error} but lacks recovery guidance. No pagination support despite potential for large component lists. Parameter descriptions could be more prescriptive about format constraints.
Get just the abstract/description text of an OSF project.
Get an OSF project's metadata: title, category, dates, tags, and public URL.
List the child components of an OSF project.
Output schemas not formally documented. Responses are inferred from code (e.g., {ok, error, project_id, title, ...}). LLMs cannot plan downstream tool calls without knowing what fields to expect.
osf_list_components lacks pagination parameters (limit, offset, page_size). The response includes a 'truncated' flag but no way for the agent to fetch subsequent pages. Large component lists will be silently truncated.
Error messages are generic ('OSF API timed out', 'No such OSF project'). They do not guide the LLM on recovery actions (e.g., 'Try a different project_id' or 'Retry in 30 seconds').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
Parameter description for project_id in osf_get_abstract says 'OSF node id, e.g. "bvy3q".' but does not explain the format constraint (alphanumeric, max 24 chars). The _clean_id() function enforces this, but the description should state it explicitly.
osf_get_project and osf_get_abstract both fetch the same /nodes/{pid}/ endpoint and parse the same attributes. No batch variant exists. If an agent needs both title and abstract, it makes two redundant API calls.