An MCP server that manages a local file and project registry, enabling AI agents to create, read, update, search, and organize files and projects with archive/unarchive capabilities.
The Briefcase demonstrates solid tool design with consistent naming conventions (verb_noun pattern), comprehensive descriptions (avg 180 chars), and explicit input schemas with type definitions. All 15 tools follow the verb-first naming pattern (create_, add_, archive_, etc.). Descriptions are detailed and explain WHAT the tool does and WHEN to use it. However, output schemas are not formally documented in the code, responses are JSON-serialized but lack explicit schema declarations. Error handling is present but minimal (generic 'not found' messages without recovery guidance). Parameter descriptions are good but some lack constraint details (e.g., 'limit' parameters don't specify bounds). No tool annotations (readOnlyHint, destructiveHint) are visible in the code, despite clear risk classifications in the spec.
Associates a file with a project. A file can belong to at most one project. If the file is already in another project it is moved to this one.
Marks a file as archived. Archived files are excluded from list_files and search_files results by default. The file remains readable by ID at any time and its project association is preserved. Use 'unarchive_file' to restore it to active status. Archiving an already-archived file succeeds without error.
Creates a new file in the Briefcase and makes it immediately available to all agents. Returns the new file's ID, which can be passed to read_file or update_file. Optionally associates the file with a project by providing a projectId.
Creates a new project in the Briefcase. Project names must be unique. Returns the new project's ID.
Deletes a project. All member files remain in the Briefcase but lose their project association.
Returns a project's metadata and the list of files it contains. Accepts a project ID (GUID) or project name. Archived member files are excluded by default; use 'includeArchived' to include them.
Output schemas not formally documented. Tools return JSON objects (e.g., {id, name, size, lastModified, projectId}) but no explicit schema declarations visible in code. LLMs cannot reliably parse response structure or plan downstream tool calls.
Error messages lack recovery guidance. Errors return generic messages like 'Project not found' or 'File not found' without suggesting next steps (e.g., 'Try list_projects() to see available projects'). Agents cannot self-correct.
Tool annotations missing. Code declares risk levels (WRITE, DESTRUCTIVE, READ_ONLY) in comments but does not emit readOnlyHint, destructiveHint, or idempotentHint in tool definitions. Clients cannot determine safety without parsing descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Lists files available in the Briefcase. Returns file IDs, names, sizes, last modified timestamps, and project association. Use the returned ID to read a file's content. Results are sorted newest-modified first by default. Use 'limit' to control how many results are returned and 'sort' to control ordering. Use 'project' to filter by project ID or name, or 'unassigned' to return only files not in any project. Archived files are excluded by default; use 'includeArchived' to include them or 'archivedOnly' to return only archived files.
Lists all projects in the Briefcase. Returns project IDs, names, descriptions, and file counts.
Reads the content of a file by its ID. Returns the file content along with metadata (name, size, last modified). Use list_files to discover available file IDs.
Rebuilds the Briefcase registry and search cache. Scans all configured directories to add newly discovered files and prune stale entries. If the search cache is enabled, rebuilds it fully so subsequent searches are fast. Blocks until the reindex is complete. If a reindex is already in progress, returns immediately with status 'already_running'.
Removes a file from a project. The file remains in the Briefcase but loses its project association.
Searches files in the Briefcase by name and/or content. Returns file IDs, names, sizes, last modified timestamps, where the match was found, and project association. Content search covers .md and .txt files only. Use 'project' to restrict the search to a specific project, or 'unassigned' to search only files not in any project. Archived files are excluded by default; use 'includeArchived' to include them or 'archivedOnly' to search only archived files.
Restores an archived file to active status. The file will appear again in list_files and search_files results. Project association is preserved through archive and unarchive. Unarchiving an already-active file succeeds without error.
Replaces the full content of an existing Briefcase file. The file is identified by the ID returned from list_files or create_file.
Updates a project's name and/or description. Omit a parameter to leave it unchanged.
Numeric parameter constraints not specified. 'limit' parameters in list_files, list_projects, search_files lack min/max bounds. Descriptions say 'Omit to use server-configured default' but do not state the actual default or range.
Enum constraints not enforced in schema. 'sort' parameters accept string values (e.g., 'modified_desc', 'name_asc') but are not declared as enums in the input schema. LLMs may hallucinate invalid sort orders.