Unified API gateway for multi-LLM orchestration with MCP integration, social automation, image & video generation
OpenClaw Hub exposes 28 tools across multiple domains (AI completions, alerts, GitHub, social media, images, MCP server management). Tool definitions are generally present with descriptions and input schemas, placing the server in the fair-to-good range. However, there are significant consistency issues: parameter descriptions vary in depth and clarity; several tools lack actionable error guidance; output schemas are not documented; some parameter types lack proper constraints (enums where appropriate); and composition patterns show room for improvement. The naming convention is solid (verb_noun), but parameter naming could be more consistent (e.g., connection vs connection_name). Error handling is minimal, most tools appear to return standard HTTP errors without guidance on recovery or retry logic. The server would benefit from structured error responses, documented output schemas, and more rigorous parameter constraint declarations.
Add and connect to an MCP server with specified command, arguments, and environment variables.
OpenAI-compatible chat completion endpoint. Applies budget enforcement, retry with backoff, and fallback routing.
Create a new issue with support for labels and assignees.
Mark an alert as dismissed — hides it from the dashboard banner.
Generate an image using OpenAI's DALL-E models. Compatible with OpenAI's image generation API format.
Return current alert configuration values including thresholds, check intervals, and webhook settings.
Output schemas not documented for any tool. LLMs cannot predict response structure, forcing them to make assumptions about available fields for downstream chaining. This violates the tool-chain pattern and risks context loss between calls.
Discovery tools (list_models, get_alert_config, get_config_status, get_github_capabilities, get_social_capabilities, list_servers) lack guidance on WHEN to call them and what structure they reveal. Agents cannot determine if a discovery call is necessary or what to expect from the response.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 47 | - | v1 |
Get authenticated user information from GitHub.
Show which integrations are configured and ready. Returns configuration state for each integration without exposing raw API keys or secrets.
List available GitHub capabilities and endpoints.
Get a specific issue by owner, repository name, and issue number.
Get a specific pull request by owner, repository name, and PR number.
Get repository details for a specific owner and repository name.
List available social media capabilities.
Aggregated 24-hour stats plus budget snapshot and blocked connection list. Includes token counts, request counts, costs, and health information.
Shortcut: unresolved + undismissed alerts only (used by dashboard banner poll).
List alerts with optional filters for resolved status, connection name, and result limit.
List issues for a repository with optional filtering by state, labels, and pagination.
List available models from all providers
List pull requests for a repository with optional filtering by state and pagination.
List repositories with optional filtering by owner, visibility, sort order, and pagination.
List all connected MCP servers.
List available tools from a specific MCP server.
Post to Instagram via Late API. Supports single images, carousels (multiple images), and videos.
Search code across GitHub using GitHub search syntax (e.g., "repo:owner/name extension:py function").
Search issues and pull requests across GitHub using GitHub search syntax (e.g., "repo:owner/name is:open label:bug").
Update alert thresholds at runtime (in-memory only; changes survive until Hub restarts). To persist permanently, add the updated values to .env.
Update an existing issue. Can update title, body, state, and labels.
Upload media for Instagram posting. Returns public URL that can be used in post request.
No documented error handling or recovery guidance in any tool description. Agents do not know how to handle failures, whether errors are retryable, or what corrective action to take. Descriptions like 'List models' provide no guidance on error scenarios.
Parameter constraints are inconsistently applied. Example: 'per_page' parameters in GitHub tools lack min/max declarations (should be min=1, max=100). 'n' in generate_image correctly declares minimum=1, maximum=10, but others do not follow suit. This invites LLM-generated invalid values.
Parameter naming inconsistency: some tools use 'per_page' (GitHub), others use 'limit' (alerts). This forces LLMs to reason about field mapping across similar tools. Should standardize on one naming convention (recommend 'limit' as more general).
Composition issue: create_completion requires an LLM selection (model parameter), but list_models does not clearly document what models are available or how to choose between them. No guidance linking these two tools for a common user intent ('generate text with my preferred model').
Tools returning paginated results (list_alerts, list_repositories, list_issues, list_pull_requests, search_code, search_issues) accept limit/per_page but do not document offset/cursor mechanism in descriptions. Unclear if pagination is cursor-based or offset-based, blocking agent planning.
Sensitive operations (dismiss_alert, update_alert_config, create_issue, update_issue, post_to_instagram, add_server) lack explicit confirmation patterns. No indication that these are destructive/state-modifying or require user approval. Agents might execute irreversible actions without explicit intent.
Parameters that resolve human-friendly identifiers (owner in list_repositories, etc.) do not document fallback lookup behavior. If an agent passes 'john' instead of 'john-doe', is the call rejected or does the tool attempt fuzzy matching? Undocumented behavior invites misuse.
Descriptions of alert configuration tool (update_alert_config) mention 'in-memory only' and 'survive until Hub restarts', which is important context but buried in description. No explicit tool annotation (e.g., destructiveHint or idempotentHint) to signal side effects to agents.