Self-contained MCP server with full access control for VKontakte: pairing, allowlists, group support with mention-triggering. Uses VK Bot Long Poll API for inbound; messages.send / messages.edit / messages.sendReaction / photos+docs upload for outbound.
Four tools with mixed quality. Tool naming follows verb_noun pattern (send, edit, react, access) but descriptions vary widely. vkontakte:send, vkontakte:edit, vkontakte:react have reasonable descriptions (60-90 chars) and documented parameters with types. vkontakte:access is severely underdocumented, a catch-all tool with 10 optional parameters, minimal per-parameter guidance, and no enum constraints on the 'action' field despite accepting 9+ distinct values. Input schemas present for all tools but lack depth: no min/max on numeric fields, no regex patterns, no required field declarations visible. Output schemas completely absent, callers cannot predict response structure. Error handling minimal; no recovery guidance or actionable error messages in code.
Manage access control: pairing codes, allowlists, group policies, mention patterns, and reply modes. Requires /vkontakte:access skill invocation.
Edit a previously sent message in VKontakte. Supports text and attachment updates.
Send a reaction emoji to a VKontakte message. Supports a fixed set of VK reaction IDs (❤, 🔥, 👍, 😁, 😲, 😢, 🤔, 😠).
Send a message to a VKontakte peer (user or group chat). Supports text, attachments (photos, documents), and optional reply-to.
vkontakte:access is a god-tool: single tool with 10 optional parameters and 9+ action types (list, approve, deny, group-add, group-remove, group-policy, mention-pattern, reply-mode, ack-reaction, chunk-config, dm-policy). No enum constraint on 'action' field; LLM must guess valid values. Parameter descriptions are generic ('Action: ...') with no guidance on which params apply to which actions or their dependencies.
No output schemas documented for any tool. Callers cannot predict response structure, field types, or whether results are paginated. LLM must infer from context or trial-and-error.
Parameter constraints missing: 'peer_id' accepts string but no format guidance (user ID vs group chat ID distinction unclear in param description); 'conversation_message_id' is number but no min/max; 'emoji' in vkontakte:react has no enum of supported reactions despite code defining REACTION_MAP with 8 fixed values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | 2026-07-28+ | v2 |
Error handling absent from tool definitions. Code references 'refusing to send channel state' and permission checks but no tool-level error recovery guidance. LLM receives raw errors with no actionable next steps.
vkontakte:send and vkontakte:edit accept 'attachments' as array but no description of supported file types, size limits (code shows MAX_ATTACHMENT_BYTES=50MB but not exposed), or format. LLM cannot validate inputs before calling.