This is a 28-tool Paystack integration server with mixed quality. Strengths: all tools have non-empty descriptions (10 - 200 chars, within baseline range); input schemas are present with type declarations for most parameters; tool names follow verb_noun pattern consistently. Weaknesses: descriptions are often generic and lack context about WHEN to use a tool or what happens next; parameter descriptions are minimal (many just repeat the name or value type without actionable guidance); output schemas are not documented anywhere in the visible code; error handling is not evident from the tool definitions; several tools accept ambiguous parameter types (string|number) without guidance on which to use; no pagination guidance documented despite list_* tools; no mention of idempotence, retryability, or side effects in tool descriptions. Example: create_product has description 'Create a new product on your Paystack integration', this is 48 chars, acceptable length, but lacks guidance on when to call it vs update_product, what fields are required, or what the response looks like. Example: validate_customer accepts both 'code' and multiple validation parameters but does not explain the relationship between them. Example: list_products accepts page and perPage but does not specify min/max or total count behavior. The server falls into the 'fair but needs work' category with some foundational quality but missing critical LLM-optimization details.
Fetch all pay-ins and pay-outs that occurred on your Paystack integration
Charge a previously authorized card
Get the available balance on your Paystack integration
Create a new customer in Paystack
Create a new product on your Paystack integration
Deactivates a payment authorization
Output schemas not documented. No visible return type specifications for any of the 28 tools. LLMs cannot plan multi-step calls or extract chaining IDs (e.g., customer_id for downstream operations) without knowing what fields will be returned.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 38 | - | v1 |
Disable OTP requirement for transfers
Enable OTP requirement for transfers
Export transactions data
Get details of a transaction by ID
Finalize the request to disable OTP on your transfers
Get details of a specific customer by email or code
Get details of a specific product by ID
Get transaction totals and metrics
Initialize a transaction to accept payment on Paystack
Get a list of all banks supported by Paystack and their properties
Get a list of countries that Paystack currently supports
List customers available on your Paystack integration
List products available on your Paystack integration with pagination support
Get a list of states for a country for address verification
List transactions with pagination and filtering options
Charge a partial amount from a previously authorized card
Generates a new OTP and sends to customer for transfer verification
Whitelist or blacklist a customer
Update a customer's details
Update an existing product by ID
Validate a customer's identity with bank account
Verify a transaction's status using the transaction reference
Tool descriptions lack actionable context. Most descriptions are 35 - 50 characters and describe WHAT the tool does but not WHEN to use it, prerequisites, or side effects. E.g., 'Create a new customer in Paystack' does not tell an LLM when this is needed vs update_customer, or what happens if the email already exists.
Parameter descriptions are minimal. Many parameters just restate the type (e.g., 'Items per page' for perPage) without explaining constraints (min/max), format (integer range?), or dependencies (how does page relate to perPage?). Baseline for A+ tools is 72 chars avg per parameter; these are often 10 - 30 chars.
Ambiguous parameter types in validate_customer and others. The parameter 'country' in validate_customer is described as 'Country code' but no enum/format is specified. Is it 'NG', 'US', or full name? Same issue with 'type', no valid enum values listed.
Pagination tools lack documentation of limits and total counts. list_products, list_customers, list_transactions accept page/perPage but no description explains: What is the default perPage? What is the max? Does the response include a total count or next_cursor? Without this, agents cannot iterate safely.
No error handling or recovery guidance. Tool descriptions do not indicate which errors are retryable, which require user intervention, or what to do on 404 (not found). E.g., get_customer does not say 'If not found, try search_customers with partial name.'
No indication of idempotence or side effects. Tools like charge_authorization and partial_debit are clearly state-changing (financial). Descriptions should explicitly state 'Warning: Financial charge, not idempotent' so agents know not to retry blindly on transient errors.
Parameter type ambiguities (string|number) without guidance. update_product and get_product accept 'id' as string|number but no description clarifies which type Paystack actually expects or how the tool resolves the ambiguity.
No enum constraints on values. risk_action in set_customer_risk_action is described as 'Risk action (whitelist/blacklist)' with hardcoded examples but no formal enum constraint. OTP/transfer tools similarly lack enums for state transitions (enable vs disable).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible in tool definitions. Per current spec (2026-07-28), tools should declare their semantics. All write/state-changing tools (charge_authorization, delete, update, create) should have destructiveHint or equivalent.