MCP server with MCP Apps integration for searching YouTube videos, Twitter tweets, and performing India-specific government service research with sentiment analysis and credibility scoring
The server defines 6 tools with varying quality. All tools have descriptions and input schemas visible in index.ts, but descriptions are superficial (10-100 chars, well below the 50-200 char LLM-optimized baseline), parameters lack depth, and output schemas are mostly undocumented. Tool names follow verb_noun convention but lack clarity about interdependencies. The server appears to be a proof-of-concept rather than production-grade: search tools have overlapping functionality without clear differentiation, error handling is minimal (only catch blocks returning text errors), and no security controls for API credentials are evident in the visible code.
Get detailed information about a specific fruit
🇮🇳 India-specific research agent for government services - analyzes YouTube videos for sentiment, credibility, and actionable insights from Indian sources (Twitter optional)
Search YouTube videos, comments, and Twitter tweets for a specific query across both platforms
Search for fruits and display the results in a visual widget
Search Twitter/X for tweets related to a query
Search YouTube videos and get comments related to a query
Tool name 'search-all' violates single-responsibility naming (verb_noun + conjunction). This name signals the tool handles multiple distinct operations (YouTube + Twitter) that should be separate tools for clarity. The LLM cannot determine from the name alone whether to call this or the individual search tools.
Descriptions are too short and lack LLM-critical details. E.g. 'Search for fruits and display the results in a visual widget' (68 chars) does not explain WHEN to use this tool vs get-fruit-details, or what input format is expected. Baseline for A+ tools: 50-200 chars with WHAT, WHEN, and PREREQUISITES.
Output schemas are mostly missing or undocumented. get-fruit-details has an outputSchema (zod object with fruit, color, facts), but search-youtube, search-twitter, search-all, and research-government-query return widget() calls with undocumented prop shapes. The LLM cannot infer what fields to expect for downstream tool chains.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 39 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 34 | - | v1 |
No error classification or recovery guidance. All tools catch errors and return bare text errors like 'Error searching YouTube: <message>'. No indication of whether the error is retryable, user-fixable, or fatal. The LLM has no actionable next step.
API credentials (YOUTUBE_API_KEY, TWITTER_BEARER_TOKEN) are referenced as environment variables in error handling code, but no evidence of server-side injection or masking in tool parameters. If these appear anywhere in logs or LLM context, they risk leakage.
Overlapping tool functionality without clear differentiation. 'search-youtube', 'search-twitter', and 'search-all' all perform searches, the LLM must reason about which to call. No guidance on trade-offs (e.g., 'search-all' is slower but more complete, or uses different APIs).
Parameter 'query' in research-government-query has description 'Indian government service query' with example text, which invites literal reuse. Baseline rule: never include example values in descriptions, use enum or pattern constraints instead.
search-tools accepts optional 'query' parameter but no documentation of behavior when query is absent. Does it return all fruits? A limited set? The description does not clarify.