Unofficial stdio MCP server that calls xAI's x_search / web_search via X Premium / SuperGrok OAuth (no API key, no metered billing).
Server has 4 tools with explicit schemas and descriptions. Naming follows verb_noun pattern (grok_login, grok_auth_callback, x_search, web_search). Descriptions are present but brief (34-194 chars). All tools have input schemas with type definitions. However, output schemas are not documented, responses are JSON strings with 'ok', 'code', 'error', 'text', 'citations', 'model' fields, but LLMs cannot see this structure. Error handling returns structured error objects (code + message) which is good, but recovery guidance is minimal. Parameters lack detailed constraints (e.g., date format validation happens server-side but not declared in schema descriptions). No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Overall: functional but below production baseline.
Complete login by passing the authorization code from the redirect (the full callback URL is also accepted).
Start the OAuth login to xAI (SuperGrok / X Premium) and return the authorize URL.
Search the web and return Grok's synthesized answer with citations.
Search posts on X (Twitter) and return Grok's synthesized answer with citations.
Output schemas not documented. Tools return JSON strings with fields (ok, code, error, text, citations, model) but LLMs cannot see the structure. This forces LLMs to parse unstructured text and guess field names for downstream reasoning.
Parameter descriptions lack constraint details. 'from_date' and 'to_date' accept YYYY-MM-DD format but this is only validated server-side; schema descriptions do not state the format requirement. LLMs may pass invalid dates.
No tool annotations. Tools lack readOnlyHint (all are read-only), destructiveHint (none are destructive), or idempotentHint. This prevents clients from optimizing caching and retry logic.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Error recovery guidance is minimal. Errors return (code, error) but do not suggest next steps. E.g., 'LOGIN_EXPIRED' does not say 'Call grok_login to start over.'
OAuth flow requires manual callback URL parsing. Users must copy the 'code' from the redirect URL and pass it to grok_auth_callback. No local callback server is implemented, making the flow fragile and error-prone.