MCP server for artifact storage and retrieval with session-aware file management
Server provides 11 tools with visible schemas and descriptions. Naming is consistent and verb-based (list_, upload_, write_, download_, read_, delete_, copy_, move_). Most tools have reasonable descriptions (100-150 chars), but several critical gaps exist: parameters lack comprehensive descriptions, schemas are present but under-documented in code, and error handling lacks recovery guidance. Tool descriptions answer 'what' and 'when' but inconsistently address prerequisites or state-modification consequences. Parameters like 'meta' (object type) and 'encoding' lack constraint documentation. No explicit error classification or recovery paths visible in tool definitions. Output schemas are referenced in models.py but not visible in this excerpt; cannot verify completeness. Session-context fallback pattern (validate_session_parameter) is well-designed but adds subtle behavioral complexity not fully documented in tool descriptions.
Copy a file (artifact) to the same or a different session.
Delete a file (artifact) by ID.
Download (retrieve) a file by artifact ID, with optional presigning.
Get metadata for an artifact by ID.
List artefacts in a directory within a session (uses session context if session_id not provided).
List artefacts in the given session (uses session context if session_id not provided).
Move/rename a file (artifact).
Parameter descriptions lack constraint details. 'meta' (object) and 'encoding' parameters have minimal guidance on format, allowed values, or constraints. LLMs cannot infer valid input structure.
Tool descriptions do not explicitly state state-modification consequences. Tools like delete_file and write_file should say 'This operation is irreversible' or 'Creates/overwrites artifact' so agents understand retry safety.
No error recovery guidance in tool descriptions. When a tool fails (e.g. session not found, storage unavailable), the description does not hint at recovery steps or alternative actions.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 35 | - | v1 |
Read the content of a file by artifact ID, optionally decoding as text.
Update metadata for an artifact.
Upload (store) a file from base64 bytes (uses session context if session_id not provided).
Write content to a new file (uses session context if session_id not provided).
Session context fallback behavior is undocumented in parameter descriptions. 'session_id (optional if context available)' is vague, does not clarify when session context is used, how it is determined, or what happens if both are absent.
Output schema documentation not visible in tool definitions. Tool descriptions reference 'ListSessionFilesResult', 'UploadFileResult', etc., but the actual field definitions and types are in models.py (not shown in excerpt). Cannot verify if outputs are LLM-friendly.
No explicit limit on list results documented. 'limit=1000' is hardcoded in list_by_prefix call but not surfaced as a parameter or constraint in tool description. Large result sets can exhaust context window.
Presign behavior in download_file is under-documented. 'presign' parameter lacks explanation of what happens when presigning is unavailable, TTL expectations, or when to use presigned vs inline.