Model Context Protocol server for LabArchives electronic lab notebooks with vector search, project-scoped state, and provenance tracking.
Server has 15 tools with mostly complete schemas and descriptions. Naming follows verb_noun convention well (list_, read_, search_, create_, delete_, etc.). Descriptions are present and reasonably detailed (avg ~120 chars). However, several tools lack input schemas entirely (list_notebooks, get_current_context, suggest_next_steps, list_projects), and descriptions for some tools are generic. Output schemas are well-defined in tool_responses.py but not explicitly linked in tool registration. Error handling is present but inconsistent, some tools document error responses (CreateProjectResponse, DeleteProjectResponse) while others do not. Parameter descriptions are generally good but some lack format/constraint details. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels.
Create a new project context for tracking findings and provenance
Delete a project context
Get the currently active project context
Get the hierarchical structure of a notebook
List all accessible LabArchives notebooks
List all project contexts
Log a finding or observation to the active project context
Four tools lack input schemas entirely (list_notebooks, get_current_context, suggest_next_steps, list_projects). Per hard scoring rules, schema score must be 0 for these tools, capping their overall scores at ~50.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels documented (READ_ONLY, WRITE, DESTRUCTIVE). LLMs cannot infer safety properties without explicit hints.
Inconsistent error handling documentation. Some tools (create_project, delete_project, switch_project, log_finding) have typed error responses; others (read_notebook_page, search_notebooks, write_notebook_entry) lack documented error cases. Agents cannot plan recovery without error guidance.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | <=2025-11-25 | v2 |
Read the content of a specific notebook page
Perform semantic search across notebook content using vector embeddings
Get suggestions for next steps based on project context and activity
Switch the active project context
Synchronize the vector search index with current notebook content
Trace the provenance sources for a finding in the active project
Upload a file to a notebook page
Write a new entry to a notebook page
Parameter descriptions lack format/constraint details. E.g., 'content' in log_finding and write_notebook_entry does not specify max length, encoding, or HTML vs plaintext rules. 'limit' in search_notebooks lacks min/max bounds (baseline: 1 - 100).
Output schemas defined in tool_responses.py but not explicitly linked in tool registration. LLMs cannot discover return types without documented schemas in the tool definition.