A Discord bot that integrates with MCP servers for web crawling and Gmail functionality, using LangChain and LangGraph for agentic capabilities
Server has 7 tools with basic descriptions and input schemas, but significant quality gaps. Tool names are action-oriented (scrape_, extract_, send_, schedule_, fetch_) which is good. However, descriptions are minimal (10-50 chars for most), parameter descriptions are sparse or missing, output schemas are undocumented, and error handling provides no recovery guidance. No tool annotations (readOnlyHint/destructiveHint). Email tools expose sensitive operations (send_email, schedule_email) without confirmation patterns or permission gates. Web scraping tools lack rate-limit or timeout documentation. Average tool score: 42/100.
Extract relevant text from a webpage based on a search query.
Fetch the most recent emails from a specified folder.
Schedule an email to be sent at a specified time.
Scrape a webpage and return its content.
Send an email via Gmail SMTP.
Intelligently extract specific information from a webpage using LLM-based extraction.
Start the scheduled email service.
Destructive operations (send_email_tool, schedule_email) lack confirmation patterns, permission gates, or dry-run support. Agents can send emails without user confirmation, risking unintended messages.
Output schemas are not documented. Tools return strings (e.g., 'Successfully extracted information...') but LLMs cannot plan downstream calls or extract structured data without knowing response field names and types.
Tool descriptions are too brief (10-50 chars). Rubric baseline is 194 chars. Descriptions lack WHEN to use, prerequisites, or dependencies. E.g., 'Send an email via Gmail SMTP' does not explain attachment handling, rate limits, or required credentials.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Email tools should be marked destructiveHint=true; web scraping tools should be marked readOnlyHint=true. This prevents agents from misclassifying tool safety.
Error responses are generic strings ('Error scraping URL: ...', 'Error searching page: ...'). No recovery guidance, categorization (retryable vs fatal), or actionable next steps for the agent.