Match products with optimal influencer profiles based on category, audience fit, engagement rate, and ROI estimation.
The server exposes a single tool, 'match', with a well-structured input schema and comprehensive description. However, the tool operates with a hardcoded influencer pool rather than dynamic data, lacks output schema documentation, provides no error handling or recovery guidance, and the tool definition appears to be inferred from client.py rather than explicitly registered in an MCP server context. The schema is present and typed, but output structure is not documented for LLM planning. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present. The description is adequate but could be more actionable regarding when to use this tool vs. alternatives.
Match a product with influencer profiles. Scores influencers on follower count, engagement rate, and cost efficiency weighted by campaign goal. Estimates ROI and generates outreach briefs.
Output schema not documented. The match() method returns a dict with 'matches', 'budget_allocation', and 'campaign_brief' keys, but the LLM has no explicit schema defining the structure of each. This forces the LLM to infer output shape and risks planning errors.
No error handling or recovery guidance. If product_category is not in INFLUENCER_POOL, the tool silently falls back to the first category. No error response tells the LLM which categories are valid, preventing self-correction.
Tool definition is inferred from client.py (SDK), not explicitly registered in an MCP server context. No evidence of a proper MCP server implementation (e.g., no MCP request/response handlers, no protocol version negotiation, no _meta handling).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
No tool annotations. The 'match' tool does not declare readOnlyHint (true, since it only reads the INFLUENCER_POOL), idempotentHint (true), or destructiveHint. This limits the LLM's ability to reason about safety and retry semantics.
Platform filtering silently degrades. If platform != 'all' and no influencers match the platform, the tool falls back to the entire pool without notification. The LLM does not know a fallback occurred and may misinterpret results.
target_audience parameter is nullable and undocumented. The description says 'Optional dict with age_range, gender, interests' but does not specify the format, valid keys, value types, or what happens if the dict is malformed. The tool code does not use target_audience at all, suggesting it is unimplemented.