MCP server for Bear Blog integration, providing tools to manage blog posts and pages
The server has 7 well-named tools covering blog post and page operations. Tool names follow the verb_noun pattern (list_, get_, create_, update_, delete_, publish_). All tools have descriptions ranging from 80 - 250 characters, and input schemas are present with type definitions. However, there are critical gaps: (1) Output schemas are documented in docstrings but not formalized in tool registration; (2) Parameters lack detailed constraints (no min/max for lengths, no enum validation where applicable); (3) Error handling is absent, no guidance on what to do if a post doesn't exist, authentication fails, or API limits are hit; (4) Several parameters like 'published_date' have format hints in descriptions but no regex/format constraints in schemas. The server sits in the 'Fair' zone, descriptions exist and are reasonably clear, but lack the rigor of A-grade production tools.
Create a new blog post. Creates a new post with the provided content. By default, posts are created as drafts (unpublished). Set publish=true to publish immediately.
Delete a blog post permanently. **WARNING**: This action cannot be undone! The post will be permanently deleted.
Get full content of a specific blog post. Retrieves all details of a post including title, slug, content, and metadata. Use this to read a post's full content for editing or reference.
List all pages with metadata. Pages are static content like About, Contact, etc. (as opposed to blog posts).
List all blog posts with metadata. Returns a list of posts with their ID, title, publication date, and published status. This is useful for getting an overview of all posts or finding a specific post ID.
Output schemas not formally declared in tool registration. While docstrings document return types, the MCP tool decorator does not expose structured output schemas to the client. This forces LLMs to infer response structure from docstrings alone, risking parsing errors and suboptimal downstream chaining.
Missing error handling and recovery guidance. No tool returns actionable error messages. If a post_id is invalid, if authentication fails, or if API rate limits are hit, LLMs have no guidance on what to do next. Pattern requires error responses to categorize failures and suggest recovery steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 23 | - | v1 |
Publish or unpublish a blog post. Toggle the publication status of a post without changing its content.
Update an existing blog post. Modify any aspect of a post. Only provide the fields you want to change; other fields will remain unchanged.
Parameter constraints not formalized in JSON Schema. The 'published_date' parameter states format 'YYYY-MM-DD HH:MM' in description text, but no regex or format constraint exists in the schema. Parameters like 'tags' say 'comma-separated' but do not declare a pattern. LLMs cannot enforce these rules, validation must be in the schema.
No confirmation step for destructive operations. bear_delete_post permanently deletes a post with no dry-run or confirmation capability. Pattern requires irreversible operations to support user confirmation before execution.
Pagination not declared. bear_list_posts and bear_list_pages return all results with no limit, offset, or cursor. For users with many posts, this can exhaust the context window. Pattern requires list operations to support pagination with a documented limit.
Tool composition gap: No way to search posts by title or tag. Agents must call bear_list_posts (returns all posts), then filter locally. A search_posts tool accepting title, tag, or date range would enable more efficient workflows.