Prometeo MCP server interface for testing and integration with LLMs. Provides tools for account validation, banking, crossborder payments, and CURP queries.
Prometeo MCP has 27 tools with significant quality gaps. All tools are explicitly registered via @mcp.tool() decorators and have descriptions. However, parameter descriptions rely heavily on a utility function (get_param_description) whose actual strings cannot be verified in the provided code, creating uncertainty about description quality. Schema definitions are present and well-typed using Pydantic annotations, but many lack detail in constraints and ranges. Error handling is basic, most tools return dict with status and message fields, but lack actionable recovery guidance. No tool annotations (readOnlyHint/destructiveHint/idempotentHint) are used, despite clear WRITE vs READ_ONLY distinctions in the metadata. Tool naming is clear and follows verb-noun patterns consistently, which is a strength. Composition is good, tools are single-responsibility and chainable. However, the reliance on an external description utility and STDIO-only transport are significant limitations.
Get list of accounts for an active session.
Get list of clients for an active session.
Get movements for an account in a date range.
Login to a banking provider and store session by session_id. If the session retrieves interaction_required, ask for OTP and retry login with provided session_key
Logout of the current session.
Select a client for an active session.
Parameter descriptions delegated to external utility function (get_param_description), actual description text cannot be verified in source code. Cannot confirm descriptions meet 10 - 1024 character guideline or are LLM-optimized.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear semantic classification (READ_ONLY vs WRITE vs REVERSIBLE in metadata). LLM cannot infer safety/mutability of operations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 52 | - | v1 |
Add a withdrawal account to a crossborder customer
Create a crossborder customer
Create a crossborder payin intent
Create a crossborder payout transfer
Get a merchant account by account_id.
Get all transactions for a merchant account by account_id.
Get all accounts to the current merchant (API key assigned).
Get a crossborder customer
Get a crossborder payin intent
Get a crossborder payout transfer
List all crossborder customers
List all crossborder payin intents
List all crossborder payout transfers
Refund a crossborder payin intent
Select a withdrawal account for a crossborder customer
Update a crossborder customer
Query an existing CURP
Query a CURP using personal data
Get all validation tasks
Check the status or result of an account validation
Validate an account with Prometeo
Error handling is generic, most tools return {status: error, message: str(e)} without actionable recovery guidance.
No output schemas documented for any tool. Rubric requires documentation of return types so LLM can plan downstream calls. E.g., banking_login returns {status, session_key, ...}, caller needs to know session_key format and persistence model.
banking_* tools maintain stateful _active_sessions dict. Per current MCP spec (stateless), all session/auth state should be carried in client requests or stored server-side with per-request identifiers. Global mutable state invites concurrency bugs and violates spec statefulness principle.
validate_account accepts account_number without enum constraint on country_code or bank_code, yet the API requires these to be valid. No validation before dispatch, LLM can pass arbitrary strings, causing API failures with poor error messages.
banking_get_movements accepts start_date and end_date as datetime type annotation but no validation on order (start <= end) or range constraints. LLM could pass invalid date ranges.
List tools (get_tasks, crossborder_list_intents, crossborder_list_payouts, crossborder_list_customers) lack pagination parameters (limit, offset, cursor). No documented upper limit on result size. Large result sets will exhaust context window.
crossborder_create_customer's withdrawal_account parameter is typed as object with no nested schema details. LLM cannot know what fields are required or what their types are.