A collection of showcase MCP servers demonstrating integration patterns for business intelligence, API integration, content automation, GitHub operations, and social media posting.
This MCP server has 23 tools with basic schema structure but significant quality gaps. All tools have names starting with action verbs (send_, create_, lookup_, scrape_, parse_, list_, post_, comment_) and minimal descriptions. However, the definitions lack depth required for reliable LLM reasoning. Many parameter descriptions are one-liners without format constraints, validation ranges, or error guidance. Output schemas are not documented. Several tools combine multiple responsibilities (create_issue_and_optionally_notify, cross_post). No tool annotations visible. Error handling patterns are absent. Average tool score: 42/100.
Analyze multiple open GitHub issues using GraphQL to determine AI-suitability based on description length, labels, assignment status, and comment count
Post a comment on a Reddit post or comment
Create a new article on Dev.to with markdown content, tags, and publishing options
Create a new article on Hashnode with markdown content and tags
Create a new GitHub issue in a repository
Create a GitHub issue and optionally notify a Slack channel with the issue URL
Tool 'create_issue_and_optionally_notify' violates single-responsibility principle by combining GitHub issue creation with Slack notification in one tool. Per pattern:tool, each tool should do exactly one thing, split into 'create_issue' and 'send_slack_message'.
Tool 'cross_post' combines posting to 7 different social platforms in a single tool. This violates composition patterns and forces LLMs to manage platform-specific logic. Split into separate platform-specific tools (post_to_twitter, post_to_reddit, etc.) that agents can compose independently.
Parameter descriptions are minimal (typically 1-2 words, e.g., 'Slack channel identifier', 'Message text to send'). Rubric requires 10-1024 characters and must specify format constraints, validation ranges, and error recovery hints. E.g., handle_nl_query's 'schema_hint' param needs clarification on what schema format is expected.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | 2026-07-28+ | v2 |
Post content to multiple social media platforms simultaneously with platform-specific formatting
Get GitHub API rate limit status and local rate limiter metrics
Convert a natural language query to SQL, validate the SQL is safe (read-only), and execute it against the database
List GitHub issues from a repository with optional filtering by state and labels
Look up a Stripe customer by ID and retrieve their charges and subscriptions
Parse an RSS feed URL and extract entries
Create a link post on LinkedIn with title, description, and preview
Create a post on Bluesky
Create a text post on LinkedIn
Create a status/post on Mastodon with optional visibility settings
Post text or link content to a Reddit subreddit
Post a tweet or reply to an existing tweet on Twitter/X
Post multiple tweets as a thread on Twitter/X
Extract article content from a given URL
Extract all links from a given URL
Extract all tables from a given URL
Post a message to a Slack channel
No output schemas documented for any tool. Rubric requires documentation of return types and field structures so LLMs know what to expect. E.g., 'list_issues' should document that it returns an array of issue objects with fields: id, title, state, labels, url, etc.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) detected. Spec 2026-07-28 expects these for safety. Tools with WRITE risk (create_issue, post_tweet, send_slack_message, etc.) should have 'destructiveHint: true' or 'idempotentHint' to guide agent planning.
No error handling guidance visible. Per pattern:recovery-guide, error responses must tell the LLM what to do next. E.g., 'handle_nl_query' should clarify: What happens if SQL generation fails? If the query is unsafe? If DB connection times out? Return codes and recovery actions for each.
Scraping tools (scrape_article, scrape_links, scrape_tables) accept only a URL parameter with no timeout, retry, or failure handling guidance. Tools calling external web services must document timeouts, rate limits, and what to do on network errors.
Social media posting tools (post_tweet, post_to_reddit, create_devto_article, etc.) lack confirmation/dry-run patterns. Per pattern:confirmation-request, irreversible operations (publish, send) should support dry-run or user confirmation to prevent accidental public posts.
Parameter 'limit' in parse_rss has no numeric bounds documented. Rubric requires minimum/maximum (e.g., 'limit: 1-1000, default 20') to prevent LLMs from requesting 999999 entries.
Parameter 'state' in list_issues lacks enum constraint in visible schema. Description mentions 'open, closed, or all' but should be formally declared as enum: ["open", "closed", "all"] so LLM cannot pass invalid values.
Parameter 'per_page' in list_issues has description 'max 100' but no min bound. Should document: 'per_page: integer, minimum 1, maximum 100, default 30'.