Skip to main content
Glama
sawa-zen

VRChat MCP Server

vrchat_search_worlds

Search VRChat worlds by name, tags, or filters to find specific virtual environments based on popularity, creation date, or user ownership.

Instructions

Search and list worlds by query filters.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
featuredNoReturn featured worlds only
sortNoSort worlds by a specific criteria
userNoFilter by the specified user, currently only supports "me" to see your own worlds
userIdNoFilter worlds by a specific VRChat user ID
nNoNumber of worlds to return, from 1 to 100
orderNoSort results in ascending or descending order
offsetNoOffset for pagination, minimum 0
searchNoSearch worlds by name or other text fields
tagNoFilter worlds by a specific tag
notagNoExclude worlds with a specific tag

Implementation Reference

  • Handler function executing the tool: authenticates, calls vrchatClient.worldsApi.searchWorlds with input params, returns JSON results or error.
    async (params) => {
      try {
        await vrchatClient.auth()
        const worlds = await vrchatClient.worldsApi.searchWorlds(
          params.featured,
          params.sort,
          params.user,
          params.userId,
          params.n,
          params.order,
          params.offset,
          params.search,
          params.tag,
          params.notag,
        )
        return {
          content: [{
            type: 'text',
            text: JSON.stringify(worlds.data, null, 2)
          }]
        }
      } catch (error) {
        return {
          content: [{
            type: 'text',
            text: 'Failed to search worlds: ' + error
          }]
        }
      }
    }
  • Zod schema for input parameters of vrchat_search_worlds tool.
    {
      featured: z.boolean().optional().describe('Return featured worlds only'),
      sort: z.enum(['popularity', 'heat', 'trust', 'shuffle', 'random', 'favorites', 'reportScore', 'reportCount', 'publicationDate', 'labsPublicationDate', 'created', '_created_at', 'updated', '_updated_at', 'order', 'relevance', 'magic', 'name']).optional().describe('Sort worlds by a specific criteria'),
      user: z.enum(['me']).optional().describe('Filter by the specified user, currently only supports "me" to see your own worlds'),
      userId: z.string().optional().describe('Filter worlds by a specific VRChat user ID'),
      n: z.number().min(1).max(100).optional().describe('Number of worlds to return, from 1 to 100'),
      order: z.enum(['ascending', 'descending']).optional().describe('Sort results in ascending or descending order'),
      offset: z.number().min(0).optional().describe('Offset for pagination, minimum 0'),
      search: z.string().optional().describe('Search worlds by name or other text fields'),
      tag: z.string().optional().describe('Filter worlds by a specific tag'),
      notag: z.string().optional().describe('Exclude worlds with a specific tag'),
    },
  • Direct registration of the vrchat_search_worlds tool via server.tool call within createWorldsTools function.
    server.tool(
      // Name
      'vrchat_search_worlds',
      // Description
      'Search and list worlds by query filters.',
      {
        featured: z.boolean().optional().describe('Return featured worlds only'),
        sort: z.enum(['popularity', 'heat', 'trust', 'shuffle', 'random', 'favorites', 'reportScore', 'reportCount', 'publicationDate', 'labsPublicationDate', 'created', '_created_at', 'updated', '_updated_at', 'order', 'relevance', 'magic', 'name']).optional().describe('Sort worlds by a specific criteria'),
        user: z.enum(['me']).optional().describe('Filter by the specified user, currently only supports "me" to see your own worlds'),
        userId: z.string().optional().describe('Filter worlds by a specific VRChat user ID'),
        n: z.number().min(1).max(100).optional().describe('Number of worlds to return, from 1 to 100'),
        order: z.enum(['ascending', 'descending']).optional().describe('Sort results in ascending or descending order'),
        offset: z.number().min(0).optional().describe('Offset for pagination, minimum 0'),
        search: z.string().optional().describe('Search worlds by name or other text fields'),
        tag: z.string().optional().describe('Filter worlds by a specific tag'),
        notag: z.string().optional().describe('Exclude worlds with a specific tag'),
      },
      async (params) => {
        try {
          await vrchatClient.auth()
          const worlds = await vrchatClient.worldsApi.searchWorlds(
            params.featured,
            params.sort,
            params.user,
            params.userId,
            params.n,
            params.order,
            params.offset,
            params.search,
            params.tag,
            params.notag,
          )
          return {
            content: [{
              type: 'text',
              text: JSON.stringify(worlds.data, null, 2)
            }]
          }
        } catch (error) {
          return {
            content: [{
              type: 'text',
              text: 'Failed to search worlds: ' + error
            }]
          }
        }
      }
    )
  • src/main.ts:32-32 (registration)
    Top-level call to createWorldsTools which registers vrchat_search_worlds and other worlds tools on the MCP server.
    createWorldsTools(server, vrchatClient)
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions 'search and list' but doesn't specify whether this is a read-only operation, what permissions might be needed, how results are paginated (beyond the 'offset' parameter), or what the output format looks like. For a search tool with 10 parameters, this leaves significant behavioral gaps.

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 a single, efficient sentence that directly states the tool's function without unnecessary words. It's appropriately sized and front-loaded with the core purpose.

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 (10 parameters, no annotations, no output schema), the description is insufficient. It doesn't explain what a 'world' represents in VRChat context, what fields are returned, how results are structured, or any rate limits/authentication requirements. For a search tool with many filtering options, more context is needed.

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 10 parameters thoroughly with descriptions and enums. The description adds minimal value beyond stating 'by query filters,' which is already implied by the parameter names. This meets the baseline for high schema coverage.

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 worlds by query filters,' which specifies both the action (search/list) and resource (worlds). It distinguishes from siblings like 'vrchat_search_avatars' and 'vrchat_search_groups' by focusing on worlds, but doesn't explicitly differentiate from 'vrchat_list_favorited_worlds' or other world-related tools.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over 'vrchat_list_favorited_worlds' for finding worlds, or whether it's for general discovery versus specific user scenarios. No exclusions or prerequisites are stated.

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