MCP server providing tools to access InterviewReady platform resources including courses, blog posts, reminders, and external resources
Server has 10 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-50 chars, mostly under the 194-char baseline), and input schemas are present with Zod validation. However, descriptions are generic and lack actionable context for LLM selection. No output schemas documented. Error handling is minimal (withError wrapper catches exceptions but returns generic text). No parameter validation guidance, no enum constraints, no pagination support despite tools returning lists. Tool naming is verb-based but lacks clarity in distinguishing similar operations (e.g., get-blog-post-by-slug vs get-blog-post-by-title vs get-blog-post-by-keywords all do similar things). No security annotations, no audit logging, no rate limiting.
Get content of a blog post by title
Set a reminder for an upcoming class or deadline
Get a blog post by keywords
Get a blog post by slug
Get a blog post by title
Get all blog posts on interviewready platform
Get a course by id
Descriptions are too generic and lack LLM-selection context. Most descriptions are 10-50 chars (well below 194-char baseline). E.g., 'Get all blog posts on interviewready platform' does not explain WHEN to use this vs get-blog-post-by-slug, or what structure is returned. Descriptions should state: what it does, when to use it, what it returns, and any prerequisites.
No output schemas documented. Tools return JSON-stringified content, but LLMs cannot plan downstream calls without knowing the response structure. E.g., create-reminder returns a reminder object, but the schema of that object is not declared. This violates the pattern:tool requirement that output schemas must be documented.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Get all courses on interviewready platform
Get all reminders
Get all external resources recommended by interviewready platform
Multiple tools perform similar operations without clear differentiation. get-blog-post-by-slug, get-blog-post-by-title, and get-blog-post-by-keywords all retrieve blog posts but via different lookups. LLMs will struggle to choose the right one. Consider consolidating into a single search_blog_posts tool with optional filters, or add explicit 'Use this when you have a slug' guidance to each description.
No pagination support for list tools. get-blog-posts, get-courses, get-reminders, and get-resources return all results without limit or offset parameters. If the platform has many items, responses will bloat the context window and degrade LLM reasoning. Add limit and offset/cursor parameters and document the result cap in descriptions.
Error handling is minimal and non-actionable. The withError middleware catches exceptions but returns generic text like 'No blog post found' without guidance on next steps. Per pattern:recovery-guide, errors should tell the LLM what to do: 'Blog post not found. Try search_blog_posts() with keywords or title.' This enables agent recovery.