A production-grade Multi-Platform Connector Platform for managing and executing actions across multiple external services (OpenAI, Stripe, etc.) via a unified API
This server has severe definition quality gaps. Tool descriptions are present but minimal (10-50 chars, well below the 194-char baseline). Most critically, input schemas are either missing or inferred from code rather than explicitly registered. The execute_action tool accepts generic 'params' and 'metadata' objects with no type constraints, violating the constrained-input pattern. No tool declares what it returns, no error handling guidance, no permission scopes, and no audit trail documentation. Tools like chat_completion and embeddings expose API model selection without enum constraints, inviting hallucinated model names. The webhook handler accepts untyped 'request' and 'headers' dicts. Parameter descriptions lack format/range constraints (e.g., 'amount' in create_charge has no currency validation or min/max). No tool is idempotent-marked. Security is weak: API keys are hardcoded in startup (src/api/main.py line 24-25), not injected. Overall, this reads as a proof-of-concept, not production-grade tooling.
Access OpenAI GPT models for chat completions
Create a charge via Stripe API
Generate embeddings using OpenAI API
Execute a specific action on a connector
Handle incoming webhooks from external platforms
Check the health status of the MCP Framework
List all registered connectors
Generic untyped parameters: execute_action accepts 'params' as bare object with no schema, headers and metadata as untyped dicts. Violates constrained-input pattern, LLMs cannot validate inputs before calling.
No output schemas documented. Tools return responses but LLMs have no way to know what fields to expect. Violates tool-description and response-shaper patterns.
Hardcoded API credentials in startup (src/api/main.py lines 24-25: 'sk-dummy-openai-key', 'sk_test_dummy_stripe_key'). Violates secret-injection pattern, credentials must never appear in code or tool parameters.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 39 | <=2025-11-25 | v2 |
List customers from Stripe
No enum constraints on model selection (chat_completion, embeddings accept 'model' as free-form string). LLMs will hallucinate invalid model names. Should declare allowed models as enum.
No error handling guidance. Tools return HTTP errors but do not tell LLM what to do next (retry? ask user? fatal?). Violates recovery-guide pattern.