Skip to main content
Glama
sawa-zen

VRChat MCP Server

vrchat_search_avatars

Search and filter your own or featured VRChat avatars by criteria like tags, release status, and sorting options to find suitable virtual identities.

Instructions

Search and list avatars by query filters. You can only search your own or featured avatars. It is not possible as a normal user to search other people's avatars.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
featuredNo
sortNo
userNo
userIdNo
nNo
orderNo
offsetNo
tagNo
notagNo
releaseStatusNo
maxUnityVersionNo
minUnityVersionNo
platformNo

Implementation Reference

  • Handler function that authenticates with VRChat, calls the searchAvatars API with provided parameters, and returns the response as JSON text or an error message.
    async (params) => {
      try {
        await vrchatClient.auth()
        const response = await vrchatClient.avatarApi.searchAvatars(
          params.featured,
          params.sort,
          params.user,
          params.userId,
          params.n,
          params.order,
          params.offset,
          params.tag,
          params.notag,
          params.releaseStatus,
          params.maxUnityVersion,
          params.minUnityVersion,
          params.platform
        )
        return {
          content: [{
            type: 'text',
            text: JSON.stringify(response.data, null, 2)
          }]
        }
      } catch (error) {
        return {
          content: [{
            type: 'text',
            text: 'Failed to search avatars: ' + error
          }]
        }
      }
    }
  • Zod input schema defining optional search parameters for avatars such as featured, sort order, user filters, pagination, tags, and platform constraints.
    {
      featured: z.boolean().optional(),
      sort: z.enum(['popularity', 'heat', 'trust', 'shuffle', 'random', 'favorites', 'reportScore', 'reportCount', 'publicationDate', 'labsPublicationDate', 'created', '_created_at', 'updated', '_updated_at', 'order', 'relevance', 'magic', 'name']).optional(),
      user: z.enum(['me']).optional(),
      userId: z.string().optional(),
      n: z.number().min(1).max(100).optional(),
      order: z.enum(['ascending', 'descending']).optional(),
      offset: z.number().min(0).optional(),
      tag: z.string().optional(),
      notag: z.string().optional(),
      releaseStatus: z.enum(['public', 'private', 'hidden', 'all']).optional(),
      maxUnityVersion: z.string().optional(),
      minUnityVersion: z.string().optional(),
      platform: z.string().optional(),
    },
  • The server.tool() registration for 'vrchat_search_avatars', specifying the tool name, description, input schema, and handler function.
    server.tool(
      // Name
      'vrchat_search_avatars',
      // Description
      'Search and list avatars by query filters. You can only search your own or featured avatars. It is not possible as a normal user to search other people\'s avatars.',
      {
        featured: z.boolean().optional(),
        sort: z.enum(['popularity', 'heat', 'trust', 'shuffle', 'random', 'favorites', 'reportScore', 'reportCount', 'publicationDate', 'labsPublicationDate', 'created', '_created_at', 'updated', '_updated_at', 'order', 'relevance', 'magic', 'name']).optional(),
        user: z.enum(['me']).optional(),
        userId: z.string().optional(),
        n: z.number().min(1).max(100).optional(),
        order: z.enum(['ascending', 'descending']).optional(),
        offset: z.number().min(0).optional(),
        tag: z.string().optional(),
        notag: z.string().optional(),
        releaseStatus: z.enum(['public', 'private', 'hidden', 'all']).optional(),
        maxUnityVersion: z.string().optional(),
        minUnityVersion: z.string().optional(),
        platform: z.string().optional(),
      },
      async (params) => {
        try {
          await vrchatClient.auth()
          const response = await vrchatClient.avatarApi.searchAvatars(
            params.featured,
            params.sort,
            params.user,
            params.userId,
            params.n,
            params.order,
            params.offset,
            params.tag,
            params.notag,
            params.releaseStatus,
            params.maxUnityVersion,
            params.minUnityVersion,
            params.platform
          )
          return {
            content: [{
              type: 'text',
              text: JSON.stringify(response.data, null, 2)
            }]
          }
        } catch (error) {
          return {
            content: [{
              type: 'text',
              text: 'Failed to search avatars: ' + error
            }]
          }
        }
      }
    )
  • src/main.ts:31-31 (registration)
    Invocation of createAvatarsTools which registers the vrchat_search_avatars tool on the MCP server.
    createAvatarsTools(server, vrchatClient)
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds some useful context about search limitations (own/featured avatars only) and user permissions, but doesn't describe important behavioral aspects like pagination behavior (offset parameter), rate limits, authentication requirements, or what the response format looks like.

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

Conciseness4/5

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

The description is appropriately sized with three clear sentences. The first sentence states the purpose, the second and third provide important usage constraints. There's no wasted text, though it could be slightly more structured with bullet points for the constraints.

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

Completeness2/5

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

Given the complexity (13 parameters, no schema descriptions, no output schema, no annotations), the description is incomplete. It covers basic purpose and some usage constraints but doesn't address parameter meanings, return values, error conditions, or important behavioral aspects needed for a search tool with many filtering options.

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

Parameters2/5

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

With 0% schema description coverage and 13 parameters, the description provides no information about any parameters. It mentions 'query filters' generically but doesn't explain what specific filters are available, their purposes, or how they interact. The description fails to compensate for the complete lack of parameter documentation in 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?

The description clearly states the tool's purpose as 'Search and list avatars by query filters', which is a specific verb+resource combination. However, it doesn't explicitly differentiate this tool from sibling tools like 'vrchat_search_groups' or 'vrchat_search_worlds' beyond the resource type, missing full sibling differentiation.

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 clear context about when to use this tool: 'You can only search your own or featured avatars. It is not possible as a normal user to search other people's avatars.' This gives important usage boundaries but doesn't explicitly mention when to choose this tool over alternatives like 'vrchat_select_avatar' or other search tools.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sawa-zen/vrchat-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server