MCP server for Avito: 148 tools for buyer chats, listings, promotion and orders, with dry runs and confirmation for consequential actions. Supports MCP 2025-11-25 (default) and 2026-07-28 via AVITO_MCP_PROTOCOL_ERA.
Avito MCP has solid naming conventions (all tools start with domain + verb, e.g. 'auth_get_access_token', 'messenger_send_message') and presents 23 tools across 6 domains. Tool descriptions are present but concise (averaging ~40-60 chars, below the 194-char production baseline). Parameter schemas are visible for most tools (items_get_item_info, messenger_get_chat_messages, reviews_reply_to_review all show explicit input types), but many tools lack visible schema details in the provided source excerpt. Error handling is implicit (confirmation_id/secret in meta_confirm_action suggests irreversible operations require confirmation, a good pattern), but recovery guidance in error messages is not evident from the source. Security is strong (OAuth token handling, no credentials in params). Output schemas are inferred but not explicitly documented. Tools are well-composed (each performs one domain action) and chain properly (e.g., messenger tools follow get → send pattern). The server supports both STDIO and HTTP transport, enabling remote accessibility.
Retrieve OAuth access token from Avito authorization server
Refresh the OAuth access token using a refresh token
Get CPA (Cost Per Action) bids
Set or update a CPA bid
List delivery shipments
Get detailed information about a specific item/listing
List user's items with filtering and pagination
Get messages from a specific chat
Tool descriptions are below production baseline. Average observed ~45 chars; production baseline is 194 chars. Descriptions like 'Get user account balance' lack context on WHEN to use the tool, WHAT it returns, or dependencies. This forces LLMs to guess selection criteria.
Parameter descriptions are largely absent in the source excerpt. Only 5 tools show explicit input schemas (items_get_item_info, messenger_get_chat_messages, messenger_send_message, reviews_reply_to_review, meta_confirm_action); most others lack visible parameter documentation. LLMs cannot infer parameter meaning from names alone (e.g., 'text' parameter could mean raw text, markdown, HTML, or rich format).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | <=2025-11-25 | v2 |
List messenger conversations
Send a message to a buyer/seller
Upload images for attachment to messages
Confirm a pending action (requires confirmation_id from previous operation)
Reject/cancel a pending action
Get detailed order information
List user's orders
Create a new promotion campaign
List promotion campaigns
List reviews received
Reply to a review
Get stock/inventory information
Update stock quantities
Get user account balance
Get current user information
Output schemas not documented. For tools like 'items_list_items' and 'messenger_get_chats', the response structure is unknown from the source. LLMs cannot plan downstream tool calls if they don't know what fields are returned. Lists should document pagination fields (offset, limit, total_count or next_cursor).
Irreversible operations (promotion_create_campaign, cpa_set_bid, stock_update_inventory) lack explicit dry-run or confirmation workflow documentation. While meta_confirm_action and meta_reject_action exist, it is unclear which write operations require confirmation or how agents should invoke them. This risks accidental campaign creation or stock updates.
Vague naming for discovery/list tools. 'items_list_items' uses the word 'items' twice, which is confusing. Clearer names like 'items_list_seller_items' or 'items_list_my_listings' would better distinguish from singular 'items_get_item_info' and clarify scope (user's items vs. marketplace items).
Error handling and recovery guidance not visible in source. Tools return error codes and types (CONFIG_ERROR mentioned in Dockerfile), but error messages shown to LLMs are not documented. A 'not found' error should suggest alternatives, e.g., 'Item not found. Try search_items() or list_items() to find the ID.'