Skip to main content
Glama
bulatko

vk-mcp-server

by bulatko

VK MCP Server



Features

  • 25 tools across users, walls, communities, photos, stories, community messages, likes and statistics

  • Your community's inbox: list unread conversations, read them, and reply as the community — the assistant drafts, you approve, it sends

  • Read and write as a community: with a community token and a service key together, the assistant reads walls, profiles and communities and posts, comments, publishes stories and answers messages as your community. Writes are marked as such so your client can ask first. Some tools (search, likes, statistics, editing) need a full user token, which VK no longer issues to new apps — the setup guide lists exactly what each token reaches

  • Structured output: every tool declares an output schema, so the model gets typed data instead of a JSON blob it has to parse out of text

  • Pagination that explains itself: list results say how many matches exist and which offset continues from here, so the model can page through a wall instead of stopping at the first twenty posts

  • Things you can look at: on hosts that support MCP Apps — Claude, Claude Desktop, VS Code Copilot, Goose — walls, communities and profiles render as cards: posts with their photos and clip previews, communities with their banner and size, profiles with avatar and following. Everywhere else it behaves exactly as before

  • Prompts: ready-made workflows — community digest, engagement report, audience snapshot, community search, community inbox

  • Resilient: request timeouts, automatic backoff when VK rate-limits, and clear messages for captchas and HTTP failures

  • Honest about tokens: VK has three kinds and they differ enormously in reach. --check names which one you hold and probes what it can actually do, --login walks the VK ID flow for the reading kind, and every VK error carries the fix rather than the code alone

  • Tested: 84 tests driving the real server over the MCP protocol

Related MCP server: Cyclops

Quick Start

Claude Desktop — one click

Download the latest .mcpb bundle from the releases page and open it. It installs the server, asks for your VK token in a form field, and stores it securely — no Node.js, no config files, no terminal.

VS Code — one click

Install in VS Code

VS Code prompts for your VK token and keeps it out of the config file. From a terminal instead:

code --add-mcp '{"name":"vk","command":"npx","args":["-y","vk-mcp-server"],"env":{"VK_ACCESS_TOKEN":"your_token"}}'

npm

npx vk-mcp-server

Or install globally with npm install -g vk-mcp-server.

MCP Registry

Also available in the official MCP Registry:

io.github.bulatko/vk

Getting VK Access Token

To let the assistant post, you need a community token. Open a community you manage → Manage → API usage → Access tokens → Create token, ticking wall, photos, stories, messages and manage. Three clicks, no app, never expires, tied to no browser or IP. It posts, comments and publishes stories as the community.

Add a service key next to it, and the assistant reads walls too. VK refuses a community token wall reads (error 27). Set the service key from your VK app's settings page as VK_SERVICE_KEY, and the server makes every read the token is refused with the key instead — writes never go to it:

"env": {
  "VK_ACCESS_TOKEN": "vk1.a...community token",
  "VK_SERVICE_KEY": "...service key"
}

What no token VK issues to a new app can do, checked against the live API in October 2026: edit or delete posts, upload wall photos, read statistics, likes, photo albums, search or the newsfeed. VK keeps those for full user tokens, which it no longer grants.

For public reads alone, the service key on its own is enough (as VK_SERVICE_KEY or VK_ACCESS_TOKEN), or sign in as yourself:

npx vk-mcp-server --login <YOUR_APP_ID>

Worth knowing before you spend an evening on it: --login returns a VK ID token (vk2.a…), which VK issues for signing in rather than for the API. It reads public profiles, walls and community info; posting, photos, friends, feeds and statistics all answer error 1051, whatever scopes you request. The older flow that granted full user tokens now refuses newly created apps outright. npx vk-mcp-server --check names which kind you hold and what it reaches.

Use your own app rather than an App ID from somewhere else: a token dies with the app that issued it, and the error gives no hint that this is what happened.

📖 Full setup guide — every step with the exact screens, what the scopes unlock, remote installs, and what each error means.

Configuration

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "vk": {
      "command": "npx",
      "args": ["-y", "vk-mcp-server"],
      "env": {
        "VK_ACCESS_TOKEN": "your_access_token_here"
      }
    }
  }
}

Claude Code

Add to your project's .mcp.json:

{
  "mcpServers": {
    "vk": {
      "command": "npx",
      "args": ["-y", "vk-mcp-server"],
      "env": {
        "VK_ACCESS_TOKEN": "your_access_token_here"
      }
    }
  }
}

Environment variables

Variable

Required

Default

Purpose

VK_ACCESS_TOKEN

for tool calls

—

The token tools act with, usually a community token. The server starts and lists its tools without one; calling a tool then returns an error saying so

VK_SERVICE_KEY

no

—

Service key from your VK app. Reads the access token is refused (a wall, under a community token) are made with it; never used for writes. On its own, it is enough for public reads

VK_TIMEOUT_MS

no

30000

Abort a VK request that hangs longer than this

VK_API_BASE

no

https://api.vk.com/method

Point the server at an API mirror or proxy

VK rate-limits user tokens to a few calls per second. When it answers with error 6 (too many requests), the server backs off and retries up to three times before giving up, so short bursts of tool calls do not fail outright.

Command line

Command

What it does

npx vk-mcp-server

Runs the MCP server (this is what your client calls)

npx vk-mcp-server --login <APP_ID>

Gets a token through VK ID in your browser

npx vk-mcp-server --check

Reports what your token is and which tools it can use

npx vk-mcp-server --help

Lists the commands and environment variables

Troubleshooting

Start with:

VK_ACCESS_TOKEN=your_token npx vk-mcp-server --check

It identifies which of the three token types you have — user, community or service — and probes what that token can actually reach, so you find out up front instead of discovering it tool by tool. It never calls a write method.

Common cases:

What you see

What it means

error 8: Application is blocked

The VK app that issued the token is blocked. Every token from it fails this way, however valid the token looks. Create your own app and issue a fresh token.

error 5: User authorization failed

The token expired or was revoked — run --login again.

error 27: Group authorization failed

A community token asked for something VK keeps from it — reading a wall, say. Set VK_SERVICE_KEY and reads go to the key; edits, deletions and statistics stay closed.

error 1051 or error 28

A VK ID token or a service key asked for a method closed to it. To post, use a community token.

error 15: Access denied

The data is restricted — a private profile, or a community that hides its members.

error 5 with subcode 1130

VK bound the token to the IP that authorised it, and the server is on a different one. Common when the server runs on a VPS but you signed in from your laptop. Get the token on the machine that runs the server, or use a community token.

Security Error when authorising

The old implicit OAuth flow. Use --login, which does the current VK ID flow.

No VK token configured on every tool

The server is running but your client never passed VK_ACCESS_TOKEN to it. Check the env block in your client config — a token in your shell does not reach a server the client spawns itself.

The server turns these into messages that say what to do, so the model can usually explain the fix without you reading this table.

Available Tools

Tools marked ✏️ change something on VK — they post, edit, delete or join on behalf of whoever owns the access token. Each tool also carries MCP annotations (readOnlyHint, destructiveHint), so a client can auto-approve lookups while still asking before a post is edited or deleted.

Users

Tool

Description

vk_users_get

Get user profiles by IDs or screen names

vk_users_search

Search users by name, city, age and other criteria

Wall

Tool

Description

vk_wall_get

Get posts from user/community wall

vk_wall_get_by_id

Get specific posts by {owner_id}_{post_id}

vk_wall_post

✏️ Publish a new post

vk_wall_edit

✏️ Edit an existing post

vk_wall_delete

✏️ Delete a post

vk_wall_create_comment

✏️ Add comment to a post

Groups

Tool

Description

vk_groups_get

Get user's communities list

vk_groups_get_by_id

Get community info by ID

vk_groups_search

Search communities by name and criteria

vk_groups_get_members

Get community members

vk_groups_join

✏️ Join a community or request to join

Photos

Tool

Description

vk_photos_get

Get photos from albums

vk_photos_upload_wall

✏️ Upload a photo and get an attachment string for vk_wall_post — needs a full user token; VK refuses community tokens here

Stories

Tool

Description

vk_stories_post_photo

✏️ Publish a photo story, personal or on behalf of a community

vk_stories_post_video

✏️ Publish a video story, personal or on behalf of a community

Community messages

Need a community token with the messages right, and messages switched on in the community settings. VK lets a community write only to people who wrote to it first or allowed its messages.

Tool

Description

vk_messages_get_conversations

List the inbox, newest first; filter: "unread" shows what waits for a reply

vk_messages_get_history

Read one conversation

vk_messages_send

✏️ Reply as the community — reaches a real person, so clients should ask first

vk_messages_mark_as_read

✏️ Mark a conversation as read

Other

Tool

Description

vk_friends_get

Get user's friends list

vk_newsfeed_get

Get user's newsfeed

vk_likes_get

Get users who liked an object, with reaction counts

vk_stats_get

Get community statistics (admin only)

Prompts

Prompts appear in your client as ready-made workflows — pick one, fill in the community, and the model knows which tools to use.

Prompt

What it does

community_digest

Reads recent posts and summarises themes, standouts and cadence

engagement_report

Ranks posts by likes and by comments, then explains what the winners share

audience_snapshot

Samples members and describes the audience by sex, city and activity

publish_post

Drafts a post in the community's own tone, shows it for approval, publishes it

find_communities

Searches communities on a topic and compares the candidates

community_inbox

Goes through unread messages, summarises each and drafts replies; sends only what you approve

Usage Examples

Once configured, you can ask Claude:

  • "Get information about Pavel Durov's VK profile"

  • "Show me the latest 5 posts from the VK official community"

  • "Post 'Hello World!' on my wall"

  • "Get the list of communities I'm a member of"

  • "Show my newsfeed"

Example Conversation

A real exchange — the numbers below came back from VK while this was written.

You:    How big is the VK Mini Apps community, and how are its recent posts doing?

Claude: [vk_groups_get_by_id  group_ids="apiclub", fields="members_count,activity"]
        [vk_wall_get          domain="apiclub", count=3]

        VK Mini Apps (@vkappsdev, id 166562603) — 245,457 members, filed under
        Programming, with 898 posts on the wall. The three most recent:

        21 Jan   22,653 views   46 likes   15 reposts   "Готовы сделать этот год прорывным?..."
        20 Jul      529 views   18 likes    0 reposts   (photo post, no text)
        13 Jul    3,782 views   11 likes    3 reposts   "Суперсила игр и приложений в соцсети..."

        The January post reached forty times the audience of the July ones —
        worth a look at what it did differently.

The model gets each of those numbers as typed fields rather than text it has to parse, because every tool declares an output schema.

Changelog

See CHANGELOG.md.

Testing

Run the test suite:

npm test

Run tests with coverage:

npm run test:coverage

API Reference

This server wraps VK API v5.199. For detailed parameter documentation, see:

Security Notes

  • Never share your access token

  • The offline scope provides a non-expiring token

  • Review permissions before authorizing

  • For production, consider using a service token

Contributing

Contributions are welcome! Please read the Contributing Guidelines first.

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add some amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request

License

MIT © 2026 bulatko


Available Tools

25 tools
vk_friends_getList friendsA
Read-onlyIdempotent

List a user's friends. Returns bare IDs unless you ask for fields. Needs a user token, and only works for profiles that expose their friend list.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of friends
orderNo
fieldsNoProfile fields
user_idNoUser ID. Defaults to the token owner.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of matches on VK, which is usually larger than the returned page
itemsYesFriend IDs, or profiles when fields are requested
paginationNoWhere this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds value by noting that bare IDs are returned unless fields are requested, and it highlights auth and profile visibility constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action. Every sentence serves a purpose with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given annotations and the presence of an output schema, the description covers auth requirements, privacy limitations, and basic output behavior. It is complete for a read-only list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so baseline is 3. The description adds meaning for the 'fields' parameter by explaining the default return behavior. However, it does not elaborate on 'count' or 'order' beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists a user's friends, using a specific verb and resource. It distinguishes itself from siblings like vk_users_get by focusing on friends and mentioning output behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies that a user token is required and that it only works for profiles exposing their friend list. This provides context but does not explicitly compare with alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_groups_getList your communitiesA
Read-onlyIdempotent

List the communities the token owner belongs to. Needs a user token — a community or service token cannot answer this.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of communities
fieldsNoCommunity fields
filterNoFilter by type
user_idNoUser ID. Defaults to the token owner.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of matches on VK, which is usually larger than the returned page
itemsYesCommunities the user belongs to
paginationNoWhere this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, idempotentHint, openWorldHint, destructiveHint. Description adds token type limitation, which is useful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, each providing essential information without redundancy. First sentence states purpose, second sentence specifies token requirement—efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool has output schema (implied), parameters documented, token requirement added. For a simple list tool, this is sufficient. No mention of pagination or sorting, but not necessary given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. Description does not add extra meaning beyond the schema, hence baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb (List), resource (communities), and scope (token owner belongs to). Distinguishes from siblings like vk_groups_search and vk_groups_get_by_id.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly states token requirement, specifying that user token is needed and community/service tokens won't work. Does not explicitly list alternatives but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_groups_get_by_idGet community infoA
Read-onlyIdempotent

Look up communities by numeric ID or short name (e.g. apiclub). Use it to resolve a name to an ID, or to read the description, member count and type before deciding what to do with it.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoCommunity fields
group_idsNoComma-separated community IDs or short names (e.g. apiclub,vk). Positive and without the minus sign.

Output Schema

ParametersJSON Schema
NameRequiredDescription
groupsNoCommunity profiles

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior. The description adds that it can resolve short names to IDs and return specific fields, which provides useful behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary action, no wasted words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given high schema coverage (100%) and presence of output schema, the description fully covers what the tool does, what inputs are needed, and the purpose. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters have schema descriptions, but the tool description adds extra clarity: 'Comma-separated community IDs or short names (e.g. apiclub,vk). Positive and without the minus sign.' This goes beyond the schema's basic description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool looks up communities by ID or short name, resolves names to IDs, and reads fields like description, member count, and type. Distinguishes from siblings like vk_groups_search or vk_groups_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it for resolving names to IDs or reading group info before deciding next steps. Implies when to use, but does not explicitly list alternatives or exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_groups_get_membersList community membersA
Read-onlyIdempotent

List the members of a community. Returns bare user IDs unless you ask for fields, in which case it returns profiles. Many communities hide their member list, which comes back as an access error rather than an empty list.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort order: id_asc, id_desc, time_asc, time_desc
countNoNumber of members to return (max 1000)
fieldsNoAdditional profile fields to return (e.g. photo_200,online,sex,city)
filterNoFilter: managers, editors, mods, advertisers, friends, unsure
offsetNoOffset for pagination
group_idYesCommunity ID or its short name (e.g. apiclub). Positive and without the minus sign — the minus belongs to owner_id on a wall, not here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of matches on VK, which is usually larger than the returned page
itemsYesMember IDs, or profiles when fields are requested
paginationNoWhere this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint, idempotentHint) already indicate safe, idempotent behavior. The description adds value by revealing that hidden member lists return an access error instead of an empty list, and that output format depends on fields parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences, no wasted words. The first sentence states the action, the second adds essential nuance. Perfectly front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (so return values are documented) and comprehensive annotations, the description covers all needed context: default output, parameter effects, and error behavior. It is complete for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds meaning beyond the schema: it clarifies the default output (bare user IDs) and the role of the 'fields' parameter. It also provides a crucial note about group_id format ('Positive and without the minus sign').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title 'List community members' and description clearly state the tool's purpose: listing members of a community. It specifies the output (bare user IDs or profiles) and distinguishes from tools like vk_groups_get by focusing on members.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives, but it provides a key behavioral note about hidden member lists causing errors. This implies caution but lacks direct usage guidance or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_groups_joinJoin a communityA
Idempotent

Join a community as the token owner, or send a join request if it is closed. group_id is positive here, without the minus sign.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYesCommunity ID or its short name (e.g. apiclub). Positive and without the minus sign — the minus belongs to owner_id on a wall, not here.
not_sureNoFor events only: 1 — "maybe attending", 0 — confirmed

Output Schema

ParametersJSON Schema
NameRequiredDescription
successYesWhether VK accepted the change

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate mutable, idempotent, non-destructive behavior. Description adds that the action may result in a join request if the community is closed. No contradictions with annotations. Could further detail side effects like notifications or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that front-load the main action and provide essential parameter guidance. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and presence of output schema and annotations, the description covers key aspects: purpose, parameter format, and behavioral modes. Lacks mention of authentication requirements or what happens if the user is already a member.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds valuable context for group_id (positive, without minus sign) beyond the schema's description. The not_sure parameter is not enhanced, but the main parameter gains clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'join' and the resource 'community', and distinguishes between direct join and sending a join request for closed communities. This differentiates from sibling tools like vk_groups_search or vk_groups_get_members.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context on when to use the tool (joining a community) and clarifies the group_id format (positive, without minus sign). It does not explicitly state when not to use or list alternatives, but the sibling tools are diverse and the purpose is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_likes_getSee who reactedA
Read-onlyIdempotent

List the users who liked or reacted to an object — a post, comment, photo or video — with counts per reaction. owner_id is negative for a community; item_id is the post or object ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesObject type
countNoNumber of users to return (max 1000)
offsetNoOffset for pagination
item_idYesObject ID
owner_idNoOwner ID of the object (negative for community)
reaction_idNoFilter by reaction: 0 — like ❤️, 1 — laugh 😂, 2 — wow 😮, 3 — admiration 🔥, 4 — angry 😡, 5 — sad 😢

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of matches on VK, which is usually larger than the returned page
itemsYesUsers who reacted to the object
paginationNoWhere this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds behavioral context about returning counts per reaction and parameter specifics (e.g., owner_id negative for community), going beyond the schema without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences efficiently convey the tool's purpose and a key parameter detail. No waste, front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 params, 2 required, output schema, comprehensive annotations), the description covers the main purpose and essential parameter nuances. It does not discuss pagination but schema handles that. Adequate for a well-specified tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover 100% of parameters. The tool description adds minimal additional meaning (e.g., clarifying owner_id and item_id), but this information is already present in the schema, providing no significant extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists users who liked/reacted to an object with counts per reaction, using specific verbs and distinguishing from sibling tools that handle other operations like posts or users.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving reaction data but lacks explicit guidance on when to use this tool versus alternatives or when not to use it. No comparison to sibling tools is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_messages_get_conversationsList community conversationsA
Read-onlyIdempotent

List the conversations in your community's inbox, newest first, with the last message of each and the names of the people in them. Use filter "unread" to see what is waiting for a reply. Needs a community token with the messages right.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoHow many to return (default 20, max 200)
filterNoWhich conversations: all (default), unread, important, or unanswered
offsetNoOffset for pagination

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of matches on VK, which is usually larger than the returned page
itemsYesConversations, each with its last message; names are in profiles
paginationNoWhere this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe read-only, idempotent, non-destructive profile, so the bar is lower; the description still adds real value by disclosing the ordering (newest first), the payload shape (last message plus participant names), and the auth requirement (community token with the messages right).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: scope and ordering first, then the filter use case, then the auth prerequisite. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description still covers ordering, entry contents, the key filter, and the token scope required. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes further by giving the "unread" filter a concrete purpose (what is waiting for a reply), which the bare enum cannot convey. count and offset are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (list conversations in the community inbox) plus what each entry contains and the ordering (newest first). It is clear what the tool returns, but it never names or contrasts with the closest sibling, vk_messages_get_history, which retrieves messages inside a single conversation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides one concrete usage cue — use filter "unread" to see what is waiting for a reply — which is genuinely helpful. However there is no guidance on when to prefer this over vk_messages_get_history or vk_messages_mark_as_read, and no exclusions or prerequisites beyond the token note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_messages_get_historyRead a conversationA
Read-onlyIdempotent

Read the messages of one conversation in your community's inbox, newest first. peer_id is the person's user ID, as vk_messages_get_conversations shows it. Needs a community token with the messages right.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoHow many messages to return (default 20, max 200)
offsetNoOffset for pagination
peer_idYesUser ID of the person the community is talking to

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of matches on VK, which is usually larger than the returned page
itemsYesMessages, newest first; names are in profiles
paginationNoWhere this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world. The description adds two traits not in structured data: the required auth scope ('community token with the messages right') and the result ordering (newest first). It doesn't cover pagination behavior, but that's minor against the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero waste, front-loaded with the core action and ordering before the peer_id source and auth note. Each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. With auth requirements, ID sourcing, ordering, and pagination parameters all covered across description and schema, an agent has everything needed to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds genuine meaning beyond the schema by explaining that peer_id is the same user ID surfaced by vk_messages_get_conversations, telling the agent where to source the required value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read), resource (messages of one conversation), scope (community inbox), and ordering (newest first). This clearly distinguishes it from vk_messages_get_conversations and vk_messages_send among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Tells the agent where peer_id comes from (vk_messages_get_conversations shows it), which is a concrete routing hint to the prerequisite sibling. It does not state when-not to use it or mention alternatives like send/mark_as_read, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_messages_mark_as_readMark a conversation as readA
Idempotent

Mark every message in one conversation of your community's inbox as read, e.g. after answering it.

ParametersJSON Schema
NameRequiredDescriptionDefault
peer_idYesUser ID of the person the community is talking to

Output Schema

ParametersJSON Schema
NameRequiredDescription
successYesWhether VK accepted the change

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare it is a non-read-only, idempotent, non-destructive, open-world operation. The description adds the useful scope detail that ALL messages in the conversation are affected, but discloses no auth requirements, rate limits, or side effects beyond that. Modest value over structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the action first and the motivating example trailing. No wasted words and nothing buried that an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and annotations carry the safety profile. The description covers scope and a usage cue, which is sufficient for a one-parameter mutation tool, though it could say more about when not to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single peer_id parameter is documented as 'User ID of the person the community is talking to'. The description reinforces the 'one conversation' framing but adds no format or type detail beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('mark every message in one conversation ... as read') and scopes it to the community's inbox. It is clearly distinct in meaning from siblings like get_conversations or get_history, but it does not explicitly name a sibling to route the agent away from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'e.g. after answering it' gives an implied usage scenario but offers no when-not guidance and names no alternative tool. Adequate but leaves the agent to infer when marking-as-read is or isn't appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_messages_sendReply as the communityA

Send a message from your community to a person. VK only delivers to people who have written to the community or allowed it to message them. This reaches a real person: show the user the text before sending. Returns the new message_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesMessage text
peer_idYesUser ID of the recipient
reply_toNoOptional ID of the message this answers, to quote it
attachmentNoOptional media, e.g. photo-1_2 or doc-1_2, comma-separated

Output Schema

ParametersJSON Schema
NameRequiredDescription
message_idYesID of the sent message

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false and destructiveHint=false, so safety is largely covered. The description earns credit beyond that by disclosing the delivery-restriction behavior, the fact that a real human receives the message, the required user confirmation step, and the return value (new message_id). It does not cover failure modes or rate limits, so it falls just short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences that are front-loaded with the core action, then the delivery constraint, then the human-impact warning and return value. No filler, and each sentence carries information the agent needs before invoking the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with annotations plus an output schema, the description covers the essential gaps: recipient eligibility, the confirmation requirement, and the returned identifier. Error handling and throttling behavior are absent, but the omission is minor given the structured data available and the presence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so peer_id, message, reply_to and attachment are already documented, and the description adds no further syntax or semantic detail for any of them. The only indirect hint is 'the text' and the quoted-reply concept implied by 'answers', which is weaker than the schema's own wording. Baseline 3 is appropriate when the schema carries the full parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource plus the sender's identity ('Send a message from your community to a person'), which distinguishes it from the read-oriented siblings like vk_messages_get_history and vk_messages_get_conversations. An agent can identify this as the only outbound-send tool in the set without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete eligibility condition for when this tool will actually work ('VK only delivers to people who have written to the community or allowed it to message them') and a workflow precondition ('show the user the text before sending'). It stops short of naming an alternative tool or explaining what to do when the recipient is not eligible, but the context it provides is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_newsfeed_getRead your newsfeedA
Read-onlyIdempotent

Read the token owner's own newsfeed. Needs a user token — this is the feed of the account the token belongs to, not a public one.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of items
filtersNoFilter by type: post, photo, video
start_fromNoPagination cursor

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of matches on VK, which is usually larger than the returned page
itemsYesNewsfeed entries
paginationNoWhere this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint, idempotentHint, openWorldHint, and non-destructive. The description adds value by explicitly stating the token requirement and that it's the owner's feed, which are critical behavioral details beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary purpose, and every sentence adds essential information (what the tool does and token requirement). No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return values are covered. The description, combined with rich annotations and schema, provides sufficient context for a simple read operation. Minor gap: no explicit mention of pagination usage, but start_from parameter is described in schema as 'Pagination cursor'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all three parameters (count, filters, start_from). The description does not add any additional meaning or usage guidance for these parameters beyond what the schema already provides, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Read the token owner's own newsfeed', using a specific verb ('Read') and resource ('newsfeed'). It distinguishes from sibling tools like vk_wall_get, which is for wall posts, by specifying it's the personal feed of the token owner.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context by stating it requires a user token and is not public, which helps an agent understand when to use this tool (e.g., for personalized content) versus alternatives. However, it does not explicitly exclude other tools or provide direct comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_photos_getGet photosA
Read-onlyIdempotent

List photos from an album. album_id accepts wall, profile or saved as well as a numeric album ID. owner_id is negative for a community.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of photos
album_idNoAlbum ID or: wall, profile, saved
owner_idNoAlbum owner: negative for a community, positive for a person.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of matches on VK, which is usually larger than the returned page
itemsYesPhotos in the album
paginationNoWhere this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the description does not need to restate safety. It adds value by explaining special parameter values but does not disclose behaviors like pagination or authentication requirements beyond what annotations cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the main action. Every sentence adds essential information without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of output schema and full parameter documentation, the description provides enough context to use the tool. Minor gaps: no mention of default behavior when count is omitted, or pagination hints. Still, it is nearly complete for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% documentation for all 3 parameters, so the description adds minimal new meaning beyond what the schema already provides (e.g., repeating album_id options and owner_id sign). Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb 'List' and resource 'photos from an album', clearly distinguishing from sibling tools like vk_wall_get (wall posts) or vk_photos_upload_wall (upload). It also specifies special album_id values.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides context on album_id and owner_id formats, clarifying common usage scenarios. However, it does not explicitly compare with alternatives or state when not to use this tool, lacking exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_photos_upload_wallUpload a photo for a postA

Upload a photo so it can be attached to a post. Takes a URL or a local file path, runs VK's three-step upload, and returns an attachment string like photo-1_2 to pass to vk_wall_post or vk_wall_edit. group_id is positive here, without the minus sign. Needs a full user token: VK refuses a community token here (error 27), and has no other way for one to attach a photo to a post.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYesImage URL (http/https) or absolute local file path
captionNoPhoto caption
group_idNoCommunity ID or its short name (e.g. apiclub). Positive and without the minus sign — the minus belongs to owner_id on a wall, not here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPhoto ID
owner_idNoOwner of the uploaded photo
attachmentYesAttachment string such as photo-1_2, ready to pass to vk_wall_post

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses the three-step VK upload, the returned attachment-string format (photo-1_2), the auth constraint (community tokens rejected with error 27), and the group_id sign convention. These are non-obvious operational facts the annotations (readOnly=false, openWorld=true) do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, front-loaded with purpose, then the return value, chaining target, parameter nuance, and auth caveat. No filler; every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema existing, the description still clarifies the returned attachment string's purpose and destination, plus the auth requirement and sign convention. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents image (URL or local path), caption, and the positive group_id convention. The description largely restates the schema's group_id note rather than adding syntax or format detail, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Upload a photo so it can be attached to a post') and differentiates from siblings by naming the downstream consumers (vk_wall_post, vk_wall_edit) and its role as a pre-step. An agent can distinguish it from vk_stories_post_photo without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly describes the workflow context: upload, then pass the returned attachment string to vk_wall_post or vk_wall_edit, and warns that a full user token is required (error 27). It gives strong positive guidance but does not explicitly exclude alternatives such as vk_stories_post_photo, leaving that routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_stats_getCommunity statisticsA
Read-onlyIdempotent

Read a community's statistics by period: reach, visitors and activity. The token owner must be an administrator of that community, otherwise VK denies access.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYesCommunity ID or its short name (e.g. apiclub). Positive and without the minus sign — the minus belongs to owner_id on a wall, not here.
intervalNo
intervals_countNoNumber of intervals

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of matches on VK, which is usually larger than the returned page
itemsYesOne entry per statistics period
paginationNoWhere this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the crucial behavioral detail that admin privileges are required, which is not captured in annotations. There is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences are used: the first states the core purpose, the second adds a critical usage condition. No filler words; highly efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-oriented tool with an output schema, the description adequately covers what the tool does (reads statistics by period), the types of data (reach, visitors, activity), and the prerequisite (admin status). No additional behavioral details are needed given the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% with descriptions for group_id and intervals_count. The description mentions 'by period: reach, visitors and activity' but does not elaborate on parameter syntax, formats, or constraints beyond what the schema provides. It adds marginal value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads community statistics (reach, visitors, activity) by period. It uses a specific verb ('Read') and resource ('community statistics'), and is distinct from sibling tools like vk_wall_get or vk_users_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides necessary context: the token owner must be an administrator of the community. It does not explicitly state when not to use this tool or suggest alternatives among siblings, but the given condition is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_stories_post_photoPublish a photo storyA

Publish a photo story on VK (three-step upload: get upload server, upload the photo, save). Posts a personal story, or a community one when group_id is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYesImage URL (http/https) or absolute local file path
group_idNoCommunity ID or its short name (e.g. apiclub) to post as. Positive and without the minus sign. Omit to post a personal story.
link_urlNoLink URL for the button (requires link_text)
link_textNoLink button text
add_to_newsNoAdd the story to the news feed (default true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of matches on VK, which is usually larger than the returned page
itemsYesThe created photo story
paginationNoWhere this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the write/network profile is covered. The description adds real behavioral value by disclosing the three-step server-side workflow (get upload server, upload, save), which explains latency and partial-failure risk. It does not mention retry/duplicate-publication risk, so it is not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the core action and the multi-step nature front-loaded before the personal/community branch. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, annotations cover the safety profile, and the schema fully documents parameters, so the description need not restate return values. It is complete enough to invoke correctly, with only the retry/idempotency caveat for a non-idempotent publish left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including the link_text enum, group_id sign convention and add_to_news default is already documented. The description only restates the personal-vs-community distinction that group_id's own description already carries, adding little beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Publish a photo story on VK') and differentiates itself from the sibling vk_stories_post_video by naming the media type. The parenthetical upload flow further pins down what the tool actually does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the two modes of use: a personal story by default, or a community story when group_id is set. It gives clear context for the main branching decision but stops short of stating when-not to use it or naming alternatives for related actions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_stories_post_videoPublish a video storyA

Publish a video story on VK (three-step upload: get upload server, upload the video, save). Posts a personal story, or a community one when group_id is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
videoYesVideo URL (http/https) or absolute local file path
group_idNoCommunity ID or its short name (e.g. apiclub) to post as. Positive and without the minus sign. Omit to post a personal story.
link_urlNoLink URL for the button (requires link_text)
link_textNoLink button text
add_to_newsNoAdd the story to the news feed (default true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of matches on VK, which is usually larger than the returned page
itemsYesThe created video story
paginationNoWhere this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write/open-world/non-idempotent profile, so the bar is lower, and the description usefully adds the internal three-step upload flow (get upload server, upload, save) that an agent should expect. It does not cover auth/scopes, failure/cleanup behavior if the mid-step upload fails, or rate limits, which would push it higher.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the core action and the upload mechanism front-loaded before the scoping detail. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-param publish tool with full schema coverage, annotations, and an output schema (so return values needn't be explained), the description covers purpose, mechanism and posting target. Only the absence of any error/partial-upload guidance keeps it from 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the schema already documents video, group_id, link_url/link_text pairing and add_to_news. The description only restates the group_id personal-vs-community behavior already present in the schema, adding no new parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Publish a video story on VK') and is immediately distinguishable from the sibling vk_stories_post_photo, which handles photos. It also names the mechanism (three-step upload, get server/upload/save), so the agent knows exactly what operation it triggers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one routing rule – set group_id to post as a community, otherwise it's a personal story – which is real usage context. But it never names the alternative video/media tools or states when NOT to use this (e.g. photo stories or wall posts), leaving the agent to infer from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_users_getGet user profilesA
Read-onlyIdempotent

Look up VK users by numeric ID or short name (e.g. durov). Use this to resolve a name to an ID before calling other tools, or to check whether a profile is closed.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoProfile fields to return
user_idsNoComma-separated user IDs or screen names

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of matches on VK, which is usually larger than the returned page
itemsYesUser profiles
paginationNoWhere this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only and idempotent hints; description adds behavioral context about checking profile closed status but doesn't elaborate further.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with action, no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given low complexity, existing annotations, and output schema, the description fully covers purpose, usage, and parameter context without gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and description adds meaning: user_ids can be numeric IDs or screen names with example 'durov', clarifying usage beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (look up), resource (VK users by numeric ID or short name), and distinguishes from siblings like vk_users_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use: to resolve a name to an ID before calling other tools or check if a profile is closed. Implicitly differentiates from search tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_wall_create_commentComment on a postA

Add a comment to a post. owner_id is negative for a community. Returns the new comment_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesComment text
post_idYesPost ID
owner_idYesWall owner: a community as a negative number (-123), a person as a positive one. Defaults to the token owner.

Output Schema

ParametersJSON Schema
NameRequiredDescription
comment_idYesID of the created comment

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-read-only, non-idempotent, and non-destructive. The description adds relevant context: owner_id must be negative for communities and positive for users, and it returns the new comment_id. These details go beyond the annotations and help the agent understand expected behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences that cover the core action, the key parameter nuance, and the return value. Every sentence is essential, and the structure is front-loaded with the primary purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description covers all necessary aspects: action, required parameters, owner_id convention, and return value. With an output schema present, the description does not need to detail return structure. It is sufficiently complete for a comment creation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides descriptions for all 3 parameters (100% coverage). The tool description adds extra context for owner_id, explaining the sign convention (negative for community). This enhances understanding beyond the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add a comment to a post'), identifies the resource (a post), and differentiates from sibling tools like vk_wall_post (create a post) or vk_wall_delete. The mention of owner_id convention and return value provides additional clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly indicates when to use it (to add a comment) but does not explicitly state when not to use it or compare with alternatives. For example, it doesn't contrast with vk_wall_edit or vk_wall_post for creating comments on posts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_wall_deleteDelete a postA
Destructive

Delete a post from a wall. owner_id is negative for a community. This cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYesPost ID to delete
owner_idNoWall owner: a community as a negative number (-123), a person as a positive one. Defaults to the token owner.

Output Schema

ParametersJSON Schema
NameRequiredDescription
successYesWhether VK accepted the change

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true. Description adds that deletion 'cannot be undone', reinforcing the destructive nature and clarifying context (owner_id negative for community). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: first states core action, second adds essential nuance. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple two-parameter tool with output schema present (though not shown). Description sufficiently covers deleting a post; no obvious gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, baseline 3. Description adds meaning by explaining owner_id sign convention (negative for community) and default behavior (token owner), going beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action ('Delete a post') and resource ('from a wall'), and specifies the owner_id convention. It distinguishes from sibling tools like vk_wall_get, vk_wall_post, vk_wall_edit by focusing on deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description mentions irreversibility and owner_id sign convention, but does not explicitly state when to use this tool vs alternatives (e.g., for permanent removal vs hiding or editing), nor provide exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_wall_editEdit a postA
Destructive

Replace the text or attachments of an existing post. owner_id is negative for a community. Editing overwrites the previous content, so pass the full new text rather than an addition.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNoNew post text
post_idYesPost ID to edit
owner_idNoWall owner: a community as a negative number (-123), a person as a positive one. Defaults to the token owner.
attachmentsNoComma-separated attachments

Output Schema

ParametersJSON Schema
NameRequiredDescription
successYesWhether VK accepted the change

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds context beyond annotations: it explains that editing overwrites previous content, which aligns with the destructiveHint=true annotation. It also clarifies owner_id conventions. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero wasted words. The purpose is front-loaded, and the critical behavior is stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an edit tool with good annotations and full schema, the description is sufficient. It covers the main behavioral aspects. Minor gaps like required permissions or error handling are acceptable given the simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining that the message parameter expects the full new text, not an addition. This clarifies the semantics beyond the schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'replace' and identifies the resource as 'an existing post'. It clearly distinguishes from siblings like vk_wall_post (create new) and vk_wall_delete (remove).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a key guideline about overwriting content: 'pass the full new text rather than an addition.' This explains how to use the tool correctly. However, it does not explicitly state when to choose this tool over alternatives, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_wall_getRead a wallA
Read-onlyIdempotent

Read posts from a user or community wall, newest first. Pass domain for a short address (durov) or owner_id for a numeric one — negative for a community, positive for a person. Each post carries its likes, reposts, comments and views.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of posts (1-100)
domainNoShort address of user or community
filterNoFilter: all, owner, others, postponed, suggests
offsetNoOffset for pagination
owner_idNoWall owner ID (negative for community)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of matches on VK, which is usually larger than the returned page
itemsYesWall posts, newest first
paginationNoWhere this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds value by noting that posts are returned newest first, and that each post carries likes, reposts, comments, and views. It also explains the sign convention for owner_id, which is not in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact sentences with no redundant words. It front-loads the main action and then provides essential details in the second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that all parameters are optional, schema coverage is full, an output schema exists, and annotations cover safety, the description completes the picture by explaining ordering, target selection, and output contents. No gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful context beyond schema by explaining the dual usage of domain and owner_id, and emphasizing the engagement metrics each post includes. This clarifies parameter interplay.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it reads posts from a wall, specifies the resource (user or community), and contrasts with sibling tools like vk_wall_post or vk_wall_delete. It explicitly says 'Read posts from a user or community wall, newest first.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool: to read posts. It provides guidance on how to specify the target using domain or owner_id, with a clear rule for positive/negative values. It does not explicitly exclude non-use cases, but the context from sibling names implies it is for reading, not writing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_wall_get_by_idGet specific postsA
Read-onlyIdempotent

Fetch particular posts by their full IDs in {owner_id}_{post_id} form, e.g. -1_340393. Use it to re-read a post you already know about, such as one you just published.

ParametersJSON Schema
NameRequiredDescriptionDefault
postsYesComma-separated post IDs in format {owner_id}_{post_id} (e.g. -123_456)
fieldsNoAdditional profile fields to return

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoTotal number of matches on VK, which is usually larger than the returned page
itemsYesThe requested posts
paginationNoWhere this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and nondestructive behavior. Description adds the specific ID format and the use case of re-reading, which complements the high annotation coverage without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with 'Fetch', no wasted words. Example and use case are included efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With output schema present and simple parameters, the description adequately covers the tool's purpose and usage. The example and guidance on re-reading provide sufficient context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover both parameters fully (100% coverage). The description reiterates the ID format and comma separation, which adds no new meaning beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Fetch particular posts by their full IDs', providing a specific verb and resource. The example ID format and mention of re-reading posts distinguishes it from siblings like vk_wall_get (which likely lists posts) and vk_wall_post (create).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description explicitly advises using it to 're-read a post you already know about', giving clear context. It does not explicitly list exclusions, but the sibling set implies alternatives for listing or deleting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vk_wall_postPublish a postA

Publish a post on a wall. To post in a community, set owner_id to the community ID with a minus sign (-123) and from_group true, otherwise it appears as your personal post on the community wall. Attach media with the attachment string that vk_photos_upload_wall returns. Returns the new post_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
guidNoUnique identifier to prevent duplicate posts
messageYesPost text content
owner_idNoWall owner: a community as a negative number (-123), a person as a positive one. Defaults to the token owner.
from_groupNoPost on behalf of community
attachmentsNoComma-separated attachments (e.g. photo123_456,link)
publish_dateNoUnix timestamp for scheduled post (must be within 2 weeks)

Output Schema

ParametersJSON Schema
NameRequiredDescription
post_idYesID of the published post

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false (mutation), destructiveHint=false, idempotentHint=false. The description adds value by explaining idempotency prevention via 'guid' parameter, the behavior of posting on behalf of community vs personal, and the return value (new post_id). No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the main action. Each sentence provides essential guidance without redundancy. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (6 parameters, 1 required) and presence of an output schema, the description covers key scenarios: community vs personal posting, attachment handling, scheduling. Returns important info (post_id). Rate limits or permissions are not discussed, but annotations and context signals (destructiveHint=false) partially address safety. Overall complete for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all 6 parameters. The description adds critical semantic context: the meaning of negative owner_id with from_group, the source of attachment strings (vk_photos_upload_wall), and the scheduling constraint (publish_date within 2 weeks via schema). This goes beyond raw schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Publish a post on a wall') and specifies the resource ('a wall'). It distinguishes from siblings like vk_wall_get, vk_wall_delete, vk_wall_edit, vk_wall_create_comment by focusing on posting. Additional details on community vs personal posting further clarify scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance for posting in a community (owner_id with minus sign and from_group true) and for attaching media via vk_photos_upload_wall. It does not explicitly state when not to use it or mention alternatives, but the context is sufficient for typical use cases. Lacks explicit 'when-not-to-use' but still strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.8.2
    • Addedvk_messages_get_conversations
    • Addedvk_messages_get_history
    • Addedvk_messages_mark_as_read
    • Addedvk_messages_send
    • Addedvk_stories_post_photo
    • Addedvk_stories_post_video
  2. 19 tool updatesv0.6.1
    • Changedvk_friends_get2 fields changed
      • changedInput schema / properties / user_id / description
        Previous value: -"User ID"New value: +"User ID. Defaults to the token owner."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "count": {
        +      "description": "Total number of matches on VK, which is usually larger than the returned page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "description": "Friend IDs, or profiles when fields are requested",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "pagination": {
        +      "description": "Where this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.",
        +      "properties": {
        +        "next_from": {
        +          "description": "Cursor for the next page, on the tools that page by cursor rather than offset",
        +          "type": "string"
        +        },
        +        "next_offset": {
        +          "description": "Offset for the next page, or null when this page is the last one",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "offset": {
        +          "description": "The offset this page started at",
        +          "type": "number"
        +        },
        +        "returned": {
        +          "description": "How many came back on this page",
        +          "type": "number"
        +        },
        +        "total": {
        +          "description": "How many matches VK has in total",
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedvk_groups_get2 fields changed
      • changedInput schema / properties / user_id / description
        Previous value: -"User ID"New value: +"User ID. Defaults to the token owner."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "count": {
        +      "description": "Total number of matches on VK, which is usually larger than the returned page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "description": "Communities the user belongs to",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "pagination": {
        +      "description": "Where this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.",
        +      "properties": {
        +        "next_from": {
        +          "description": "Cursor for the next page, on the tools that page by cursor rather than offset",
        +          "type": "string"
        +        },
        +        "next_offset": {
        +          "description": "Offset for the next page, or null when this page is the last one",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "offset": {
        +          "description": "The offset this page started at",
        +          "type": "number"
        +        },
        +        "returned": {
        +          "description": "How many came back on this page",
        +          "type": "number"
        +        },
        +        "total": {
        +          "description": "How many matches VK has in total",
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedvk_groups_get_by_id2 fields changed
      • changedInput schema / properties / group_ids / description
        Previous value: -"Comma-separated group IDs"New value: +"Comma-separated community IDs or short names (e.g. apiclub,vk). Positive and without the minus sign."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "groups": {
        +      "description": "Community profiles",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedvk_groups_get_members
    • Addedvk_groups_join
    • Addedvk_groups_search
    • Addedvk_likes_get
    • Changedvk_newsfeed_get1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "count": {
        +      "description": "Total number of matches on VK, which is usually larger than the returned page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "description": "Newsfeed entries",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "pagination": {
        +      "description": "Where this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.",
        +      "properties": {
        +        "next_from": {
        +          "description": "Cursor for the next page, on the tools that page by cursor rather than offset",
        +          "type": "string"
        +        },
        +        "next_offset": {
        +          "description": "Offset for the next page, or null when this page is the last one",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "offset": {
        +          "description": "The offset this page started at",
        +          "type": "number"
        +        },
        +        "returned": {
        +          "description": "How many came back on this page",
        +          "type": "number"
        +        },
        +        "total": {
        +          "description": "How many matches VK has in total",
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedvk_photos_get2 fields changed
      • changedInput schema / properties / owner_id / description
        Previous value: -"Album owner ID"New value: +"Album owner: negative for a community, positive for a person."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "count": {
        +      "description": "Total number of matches on VK, which is usually larger than the returned page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "description": "Photos in the album",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "pagination": {
        +      "description": "Where this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.",
        +      "properties": {
        +        "next_from": {
        +          "description": "Cursor for the next page, on the tools that page by cursor rather than offset",
        +          "type": "string"
        +        },
        +        "next_offset": {
        +          "description": "Offset for the next page, or null when this page is the last one",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "offset": {
        +          "description": "The offset this page started at",
        +          "type": "number"
        +        },
        +        "returned": {
        +          "description": "How many came back on this page",
        +          "type": "number"
        +        },
        +        "total": {
        +          "description": "How many matches VK has in total",
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Addedvk_photos_upload_wall
    • Changedvk_stats_get3 fields changed
      • changedInput schema / properties / group_id / description
        Previous value: -"Community ID"New value: +"Community ID or its short name (e.g. apiclub). Positive and without the minus sign — the minus belongs to owner_id on a wall, not here."
      • changedInput schema / properties / group_id / type
        Previous value: -"number"New value: +"string"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "count": {
        +      "description": "Total number of matches on VK, which is usually larger than the returned page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "description": "One entry per statistics period",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "pagination": {
        +      "description": "Where this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.",
        +      "properties": {
        +        "next_from": {
        +          "description": "Cursor for the next page, on the tools that page by cursor rather than offset",
        +          "type": "string"
        +        },
        +        "next_offset": {
        +          "description": "Offset for the next page, or null when this page is the last one",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "offset": {
        +          "description": "The offset this page started at",
        +          "type": "number"
        +        },
        +        "returned": {
        +          "description": "How many came back on this page",
        +          "type": "number"
        +        },
        +        "total": {
        +          "description": "How many matches VK has in total",
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedvk_users_get1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "count": {
        +      "description": "Total number of matches on VK, which is usually larger than the returned page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "description": "User profiles",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "pagination": {
        +      "description": "Where this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.",
        +      "properties": {
        +        "next_from": {
        +          "description": "Cursor for the next page, on the tools that page by cursor rather than offset",
        +          "type": "string"
        +        },
        +        "next_offset": {
        +          "description": "Offset for the next page, or null when this page is the last one",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "offset": {
        +          "description": "The offset this page started at",
        +          "type": "number"
        +        },
        +        "returned": {
        +          "description": "How many came back on this page",
        +          "type": "number"
        +        },
        +        "total": {
        +          "description": "How many matches VK has in total",
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Addedvk_users_search
    • Changedvk_wall_create_comment2 fields changed
      • changedInput schema / properties / owner_id / description
        Previous value: -"Wall owner ID"New value: +"Wall owner: a community as a negative number (-123), a person as a positive one. Defaults to the token owner."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "comment_id": {
        +      "description": "ID of the created comment",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "comment_id"
        +  ],
        +  "type": "object"
        +}
    • Addedvk_wall_delete
    • Addedvk_wall_edit
    • Changedvk_wall_get2 fields changed
      • addedInput schema / properties / filter
        Added value: +{
        +  "description": "Filter: all, owner, others, postponed, suggests",
        +  "enum": [
        +    "all",
        +    "owner",
        +    "others",
        +    "postponed",
        +    "suggests"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "count": {
        +      "description": "Total number of matches on VK, which is usually larger than the returned page",
        +      "type": "number"
        +    },
        +    "items": {
        +      "description": "Wall posts, newest first",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "pagination": {
        +      "description": "Where this page sits in the whole result. Call the tool again with offset set to next_offset to continue; when next_offset is null there is nothing left to fetch.",
        +      "properties": {
        +        "next_from": {
        +          "description": "Cursor for the next page, on the tools that page by cursor rather than offset",
        +          "type": "string"
        +        },
        +        "next_offset": {
        +          "description": "Offset for the next page, or null when this page is the last one",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "offset": {
        +          "description": "The offset this page started at",
        +          "type": "number"
        +        },
        +        "returned": {
        +          "description": "How many came back on this page",
        +          "type": "number"
        +        },
        +        "total": {
        +          "description": "How many matches VK has in total",
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Addedvk_wall_get_by_id
    • Changedvk_wall_post5 fields changed
      • addedInput schema / properties / attachments
        Added value: +{
        +  "description": "Comma-separated attachments (e.g. photo123_456,link)",
        +  "type": "string"
        +}
      • addedInput schema / properties / guid
        Added value: +{
        +  "description": "Unique identifier to prevent duplicate posts",
        +  "type": "string"
        +}
      • changedInput schema / properties / owner_id / description
        Previous value: -"Wall owner ID"New value: +"Wall owner: a community as a negative number (-123), a person as a positive one. Defaults to the token owner."
      • addedInput schema / properties / publish_date
        Added value: +{
        +  "description": "Unix timestamp for scheduled post (must be within 2 weeks)",
        +  "type": "number"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "post_id": {
        +      "description": "ID of the published post",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "post_id"
        +  ],
        +  "type": "object"
        +}
  3. 10 tool updatesv0.1.2
    • First observedvk_friends_get
    • First observedvk_groups_get
    • First observedvk_groups_get_by_id
    • First observedvk_newsfeed_get
    • First observedvk_photos_get
    • First observedvk_stats_get
    • First observedvk_users_get
    • First observedvk_wall_create_comment
    • First observedvk_wall_get
    • First observedvk_wall_post

TDQS

A3.9/5.0

Scored across 25 tools

Disambiguation4/5

Most tools have clearly distinct resource+action purposes. The main ambiguity comes from pairs like vk_wall_get vs vk_wall_get_by_id and vk_groups_get vs vk_groups_get_by_id, where the names alone may cause momentary confusion, though descriptions clarify the difference.

Naming Consistency5/5

All tools follow a consistent vk_<resource>_<action> snake_case pattern. Minor variations like mark_as_read or get_by_id are still fully predictable within that scheme.

Tool Count3/5

25 tools is at the upper boundary of what feels appropriate for a single MCP server. The tools are meaningful, but the set is heavy and spans many VK domains, risking cognitive overload for an agent.

Completeness3/5

Core workflows like reading/posting wall content and messaging are covered, but notable lifecycle gaps exist: no delete for messages/photos/stories, no like/unlike actions, no comment editing or deletion, and no friend add/remove or group leave. These omissions limit agents on common VK tasks.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    D
    maintenance
    Model Context Protocol Servers
    -
  • A
    license
    A
    quality
    C
    maintenance
    Kaspersky OpenTIP Model Context Protocol Server. This server gives access to Kaspersky OpenTIP API to agentic applications.
    6
    26
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Model Context Protocol server for BusinessMap (Kanbanize) integration. Provides comprehensive access to BusinessMap's project management features including workspaces, boards, cards, subtasks, parent-child relationships, outcomes, custom fields, and more.
    49 npm
    11
    MIT