A local-first Markdown workspace for presenting agent work and collecting browser feedback via MCP tools
Behold provides 10 tools with consistent naming (verb_noun pattern: host_, update_, get_, list_, delete_, wait_for_, set_, diff_) and reasonable descriptions (avg ~120 chars). All tools have input schemas with type definitions. However, parameter descriptions are sparse or missing context. Error handling lacks recovery guidance. Output schemas are not documented in the tool definitions themselves. The server targets a specialized use case (document hosting + feedback collection) rather than general-purpose operations, which limits applicability but keeps the tool set focused.
Delete a hosted document
Get a diff between two document versions
Get the Behold agent usage guide with best practices for hosting documents and using semantic fences
Retrieve a hosted document by ID
Host a Markdown document in the local Behold viewer. Pass exactly one of markdown or absolute filePath. Reposting the same filePath updates the existing document. Use semantic fences such as tree, diff, shell, http, and mermaid when they improve scanning.
List all versions of a document
List all hosted documents
list_documents lacks pagination parameters (limit, offset, cursor). Without pagination, large document sets will blow context windows. Tool description does not mention result limits or how to handle many documents.
Error handling is absent from tool descriptions. Tools like delete_document (DESTRUCTIVE) and wait_for_feedback (blocking) do not document failure modes, recovery steps, or what the LLM should do if the operation fails.
Output schemas are not documented in tool definitions. The mcp-main.ts file imports schema types (HostedDocument, DocumentList, etc.) but does not attach them to tool definitions. LLMs cannot infer what fields to expect from responses.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Update the status of a comment on a document
Update an inline hosted document in place and create a new version. File-backed documents must be updated by editing their source file and calling host_document with the same filePath.
Wait for user feedback (comments) on a document. Blocks until comments are received or timeout expires.
Parameter descriptions are minimal or missing context. E.g., 'id' in get_document has no description of what kind of ID (UUID? slug? integer?). 'timeoutSeconds' in wait_for_feedback lacks range constraints (min/max). LLMs cannot validate inputs without explicit constraints.
delete_document is DESTRUCTIVE but has no confirmation step or dry-run option. Agents can permanently delete documents without a safety gate. No error message guidance if deletion fails (e.g., document not found, permission denied).