Model Context Protocol implementation for New API - provides tools for model pricing, user management, token management, channel management, logs, and advanced model search/comparison
This server exposes 30 tools with basic FastMCP definitions. All tools have names and descriptions, and most have documented input parameters with types. However, significant gaps prevent a higher score: (1) No output schemas are documented, LLMs cannot know what fields to expect from tool responses, violating pattern:tool and pattern:response-shaper. (2) Descriptions are often generic and under-optimized for LLM understanding, many lack actionable context about when to use each tool or what to do with results. (3) Parameter descriptions are minimal or missing domain context (e.g., 'The channel ID' without explaining what a channel ID is or how to obtain it). (4) Several high-risk tools (delete_user, create_user, update_model_ratio, create_token) lack confirmation or dry-run patterns despite destructive/sensitive nature. (5) No evidence of error handling guidance, responses are unstructured dicts with no documented error classification or recovery hints. (6) Tool composition issues: overlapping tools like get_model_list/get_model_pricing, get_all_channels/get_channel_list, and get_all_models/get_all_models (latter appears twice, line 252 cut off mid-definition) create LLM disambiguation overhead. Tools like create_user require a password parameter exposed as a tool input, violates pattern:secret-injection. (7) Parameter naming inconsistencies: some tools use singular 'model_name', others 'model_names' (array), and overlapping filtering parameters (min_ratio/max_ratio appear in multiple tools with no description of when to use each). (8) Pagination defaults vary (page=1, limit=10 in most tools) with no explanation of total_count or next_cursor support.
Compare multiple models.
Create a new channel.
Create a new API token.
Create a new user.
Delete a user.
Estimate API call cost.
Get all channels with pagination.
No output schemas documented for any tool. LLMs cannot predict response structure, field names, or types. This forces agents to guess what data will be returned and how to extract fields for downstream calls.
Password exposed as tool parameter in create_user and update_user. This violates secret-injection pattern, passwords will be logged in agent traces, prompt history, and audit logs, creating a security breach.
No error handling guidance or recovery instructions. Tools return unstructured dicts with no documented error classification (retryable vs fatal), error messages, or suggested next steps for LLMs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
Get all models with pagination.
Get all users with pagination.
Get channel by name.
Get simplified channel list.
Get channel status.
Get cheapest models by ratio.
Get fastest models by completion ratio.
Get logs with optional filtering.
Get all model names (simplified).
Get model price by name.
Get all model pricing and ratios.
Get models by ratio range.
Get models by vendor ID.
Get pricing statistics.
Get current token information.
Get token usage statistics.
List all available models for current token.
Search models with advanced filtering.
Test channel connectivity.
Update channel configuration.
Update model prices.
Update model ratios.
Update user information.
Destructive operations (delete_user) lack confirmation or dry-run patterns. Agents can accidentally delete users without warning or undo capability.
Overlapping tool functionality with unclear disambiguation. get_model_list and get_model_pricing both retrieve models; get_all_channels and get_channel_list both list channels; get_all_models appears defined twice (truncated at line 252). LLMs waste reasoning cycles selecting between similar tools.
Parameter descriptions lack actionable context. 'The vendor ID' does not explain what a vendor is, how to obtain a vendor ID, or when to filter by vendor. Missing dependency hints like 'Use search_models() to discover vendor IDs first.'
Pagination implementation inconsistent and undocumented. All list tools accept page/limit but no documentation of total_count return or cursor support. Unbounded results risk context window exhaustion.
Generic parameter names and descriptions. 'limit' without min/max constraints, 'sort' without documented values, 'status' and 'priority' without explanation of valid enums or semantics.
No evidence of input validation or constraint enforcement. Parameters like 'limit' are unbounded, 'sort' accepts arbitrary strings, and enum-like fields (channel_type, status, priority) have no declared valid values.
Tool registration via @mcp.tool() decorator inferred from function signatures rather than explicit schema definitions. Cannot verify if schemas match actual API capabilities or if optional parameters are correctly declared.