VRChat MCP
VRChat MCP is a local, user-controlled MCP server that lets you query and act on your VRChat account, friends, worlds, groups, events, notifications, and local VRCX history through an LLM/agent while keeping your credentials on your machine.
Auth & session: local browser login (
vrchat_auth_begin), auth status, logout, with cookie storage in the OS keychain or file.Profile & status: read/update your user profile, set status/description, edit avatar metadata, and manage favorites.
Friends: search, list, and overview friends; see online friends grouped by world/instance; view friend profiles and locations.
Social actions: send invites, group invites, friend requests, boops, and invite yourself or others to instances.
Worlds & instances: search worlds, get world profiles/favorites, summarize world instances, and create new instances.
Groups: search groups, view profiles/members/roles/posts/instances, manage roles and posts, and send group invites.
Events: discover, search, and list upcoming calendar events; create, update, follow, and delete group events.
Notifications: list recent notifications and filter by unread/type.
VRCX local history: detect VRCX databases, view recent world visits/instance sessions, user relationship summaries, and user/world/avatar memos.
Generated OpenAPI coverage: use
vrchat_read,vrchat_write, andvrchat_deleterouters for additional VRChat API operations, withvrchat_operations/vrchat_operation_detailsfor discovery.Utilities: VRChat status-page overview, system time, API config, cache invalidation, and local gallery image upload.
Safety controls: read-only mode, group write allowlists, dry-run previews, destructive-action hints, and local loopback-only HTTP mode.
Provides tools for interacting with VRChat's API, enabling management of friends, worlds, groups, events, notifications, status, invites, and local VRCX history.
VRChat MCP
Unofficial local Model Context Protocol tools for VRChat friends, worlds, groups, events, notifications, status, invites, and local VRCX history.
VRChat MCP runs locally through stdio by default and also offers an opt-in loopback-only Streamable HTTP mode. Your VRChat auth cookies stay on your machine and default to your OS keychain, with file storage as the fallback when a keychain backend is unavailable. Curated write tools, generated read/write tools, and read-only VRCX local-history tools are available by default; use your MCP client or agent harness to approve account-changing tool calls.
This project is unofficial and is not affiliated with VRChat Inc.
Policy and Safety Boundaries
VRChat does not provide a public OAuth flow for third-party API applications. VRChat's Creator Guidelines say API applications should not request or store VRChat login credentials, auth tokens, or session data, should identify themselves with a clear User-Agent, should cache/back off instead of sending unmetered requests, and should not act on behalf of another user.
This project is therefore intended only as a local, user-controlled personal tool. Do not run it as a hosted/public MCP service, do not collect anyone else's credentials or cookies, do not automate spam or harassment, and do not use it to evade VRChat enforcement or moderation. Use write tools only for actions you would intentionally perform yourself in VRChat.
Related MCP server: signal-mcp
Install
Requirements:
Node.js 24.15.0 or newer.
An MCP client that can run local stdio servers.
Native dependencies are installed for keychain and VRCX SQLite support (
keytar,better-sqlite3).
On headless Linux or containers without a keychain daemon such as libsecret, set VRCHAT_MCP_COOKIE_STORE=file for explicit persistent cookie storage.
The npm package is the normal install path:
npx -y @basicbit/vrchat-mcpThe server is also published to the official MCP Registry as io.github.BASIC-BIT/vrchat-mcp.
MCP Client Config
Most clients use one of these shapes. No environment variables are required for the default setup.
OpenCode
OpenCode uses an array-valued command field.
Add this to ~/.config/opencode/opencode.json:
{
"mcp": {
"vrchat": {
"type": "local",
"command": ["npx", "-y", "@basicbit/vrchat-mcp"],
"enabled": true
}
}
}Claude Desktop, Cursor, Kiro, Roo, Windsurf
These clients usually split the executable into command plus args.
Use this in clients that expect an mcpServers object:
{
"mcpServers": {
"vrchat": {
"command": "npx",
"args": ["-y", "@basicbit/vrchat-mcp"]
}
}
}VS Code
VS Code uses a servers object instead of mcpServers.
Use this in .vscode/mcp.json:
{
"servers": {
"vrchat": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@basicbit/vrchat-mcp"]
}
}
}OpenAI Codex
Add this to ~/.codex/config.toml or .codex/config.toml:
[mcp_servers.vrchat]
command = "npx"
args = ["-y", "@basicbit/vrchat-mcp"]
startup_timeout_sec = 40If your Windows client cannot spawn npx directly, use cmd as the command and put /c, npx, -y, and @basicbit/vrchat-mcp in the argument list.
Local Streamable HTTP
Use native Streamable HTTP when an MCP client needs to connect to a long-running local server instead of spawning its own stdio child process. STDIO remains the default and recommended setup for ordinary desktop clients.
HTTP mode:
Binds only to
127.0.0.1.Uses the MCP endpoint
http://127.0.0.1:8765/mcpby default.Requires
Authorization: Bearer <token>on every MCP request.Supports stateful sessions, SSE notifications, resource subscriptions, and session termination.
Reaps abandoned sessions after 30 minutes of inactivity while preserving active response streams.
Shares one local VRChat login, cache, and pipeline connection across all connected HTTP clients.
Is not a hosted or multi-user mode.
Generate a secret and launch the server in PowerShell:
$env:VRCHAT_MCP_HTTP_BEARER_TOKEN = node -e "console.log(require('node:crypto').randomBytes(32).toString('hex'))"
npx -y @basicbit/vrchat-mcp --transport httpThen configure the MCP client to use http://127.0.0.1:8765/mcp and send the token from VRCHAT_MCP_HTTP_BEARER_TOKEN as a bearer token. Keep the token in an environment variable or secret store; do not put it in a URL or commit it to a client configuration.
CLI overrides:
npx -y @basicbit/vrchat-mcp --transport http --port 9000 --path /vrchat-mcpThe HTTP listener deliberately cannot bind to a LAN or public interface. Public hosting remains unsupported because VRChat does not provide the OAuth/account-isolation model needed for a hosted personal-account service.
Login
After adding the server to your MCP client, ask it to call vrchat_auth_begin. The tool returns a local browser login URL.
After logging in, call vrchat_auth_status to confirm the session. By default, cookies are stored in the OS keychain so the login survives MCP server restarts. If the OS keychain is unavailable, VRChat MCP falls back to file storage.
Do not ask another person to use this login flow for you. Do not send the local login URL, cookies, or session files to hosted tools or third-party services.
Useful auth tools:
vrchat_auth_begin: start local browser login.vrchat_auth_status: check whether the server is logged in.vrchat_auth_logout: clear the stored session.
What You Can Ask
Examples:
Show my VRChat status and current location.Which friends are online, grouped by world?Search my friends for Alice and show their profile.Find public VRChat events happening today.Invite Bob to my current instance.Show recent worlds from my local VRCX history.Tools
VRChat MCP exposes curated tools plus generated read/write/delete routers by default. Curated tools cover common tasks with compact, agent-friendly inputs and outputs.
Common curated tools include:
vrchat_mevrchat_friends_overviewvrchat_friends_searchvrchat_friend_detailsvrchat_worlds_searchvrchat_group_profilevrchat_events_upcomingvrchat_notifications_recentvrchat_instance_link_eventvrchat_gallery_image_uploadvrchat_invitevrchat_group_invitevrchat_friend_requestvrchat_boopvrcx_instances_recent
Generated OpenAPI API-gap coverage uses three router tools:
vrchat_readfor available GET operations; passoperationIdplus path/query/header/cookie values underparams.vrchat_writefor available POST/PUT/PATCH operations; passoperationId,params, and JSON payloads underbody.vrchat_deletefor available DELETE operations; passoperationId,params, and optional JSON payloads underbody.
Use vrchat_operations to list available generated operation IDs and vrchat_operation_details for exact per-operation params/body schemas.
Generated read and write tools are enabled by default. VRCHAT_MCP_DISABLE_GENERATED_READ_TOOLS=true hides vrchat_read. VRCHAT_MCP_DISABLE_GENERATED_WRITE_TOOLS=true hides both vrchat_write and vrchat_delete, which share the generated-write switch. JSON config can also narrow either surface to specific operation IDs; generatedWriteTools.operationIds covers DELETE operations too, so a list holding only POST/PUT/PATCH IDs also hides vrchat_delete:
{
"generatedReadTools": { "enabled": true, "operationIds": ["getAvatarStyles"] },
"generatedWriteTools": { "enabled": true, "operationIds": ["selectAvatar"] }
}When an operationIds list is empty and that generated tool class is enabled, all generated operations in that class are available through its router except hard-skipped operations and operations with curated replacements. Prefer curated tools for common workflows, but generated routers keep the local server capable as the VRChat API evolves without duplicating known curated coverage or exposing generated endpoints this client cannot reliably call.
See docs/tools-guide.md for a short guide and docs/tools.md for the generated catalog.
Write Controls
Curated write tools and generated write tools for API gaps are enabled by default so the local MCP server is usable from the first run. Your MCP client or agent harness is expected to control tool-call permission, approval, and denial for account-changing actions.
To force read-only mode, add this env fragment inside the server entry for your MCP client:
{
"env": {
"VRCHAT_MCP_ALLOW_WRITES": "false"
}
}Only use write tools when you intend this local MCP server to perform VRChat account actions. Bulk social tools are capped and back off on 429s, but you are responsible for avoiding spam, harassment, or unwanted automation.
vrchat_gallery_image_upload uploads a validated static PNG to the signed-in account's personal gallery. It accepts only imagePath; group authorization is enforced later by the group post or event tool that attaches the returned file ID. Configure at least one absolute uploads.allowedRoots entry before using it.
For group write tools, you can restrict writes to specific group IDs with a JSON config file:
{
"groups": {
"allowlist": ["grp_abc123"]
}
}Then set VRCHAT_MCP_CONFIG_FILE to that file path in your MCP client config.
Configuration
Configuration is optional. Defaults cover normal local use.
Common environment variables:
Variable | Use |
| Path to a JSON config file. |
| Descriptive user agent for VRChat API requests. |
|
|
|
|
| Cookie file path when |
| Set to |
| Absolute roots allowed for local PNG uploads. |
|
|
| Required 32+ character secret for HTTP mode. |
| Loopback HTTP port. Defaults to |
| MCP endpoint path. Defaults to |
| Maximum concurrent HTTP sessions. Defaults to |
| Per-client HTTP request limit. Defaults to |
| Abandoned-session timeout. Defaults to |
Example JSON config:
{
"auth": { "cookieStore": "file" },
"writes": { "allow": false },
"http": {
"port": 8765,
"path": "/mcp",
"maxSessions": 8,
"rateLimitPerMinute": 300,
"sessionIdleTimeoutMs": 1800000
},
"groups": { "allowlist": ["grp_abc123"] },
"uploads": { "allowedRoots": ["C:\\Users\\you\\Pictures\\VRChat Uploads"] },
"cache": { "enabled": true },
"vrcx": { "enabled": true }
}See src/config/defaults.json for all defaults.
Local Development
git clone https://github.com/BASIC-BIT/vrchat-mcp.git
cd vrchat-mcp
npm install
npm run build
npm run checkUseful scripts:
npm run dev: run fromsrc/index.ts.npm run start: run the built server fromdist/.npm run dev -- --transport http: run the local Streamable HTTP server from source.npm run start -- --transport http: run the built local Streamable HTTP server.npm run mcp:login: start login through the local harness.npm run mcp:status: check auth through the local harness.npm run smoke:live: run the opt-in live smoke check.npm run generate:tools-docs: regeneratedocs/tools.md.npm run generate:schemas: regenerate OpenAPI schemas.npm run mcpb:build: build a local MCPB bundle undermcpb/.
Live E2E tests and LLM evals are opt-in. See docs/evals.md for details.
License
MIT. See LICENSE.
Available Tools
71 toolsvrchat_auth_beginA
Begin login flow via local browser UI.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effect of opening a browser UI, matching readOnlyHint=false. No contradiction. Could mention that user interaction is required, but acceptable for a simple tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no unnecessary words, front-loaded with core action. Perfect conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no parameters and an output schema exists (not shown), so description need not detail returns. It sufficiently covers the initiation aspect but could mention prerequisites like needing to be logged out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. Description adds no parameter info, but baseline is 3 per guidelines for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action ('begin login flow') and method ('via local browser UI'). Distinguishes from siblings like vrchat_auth_status and vrchat_auth_logout by implying this is the initiation step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage as the first authentication step, but no explicit when-to-use or alternatives (e.g., use vrchat_auth_status to check if already authenticated). No guidance on when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_auth_logoutA
Logout and clear session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| loggedIn | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, and the description adds 'clear session' to disclose the destructive behavior. However, it does not detail side effects, such as invalidating tokens or requiring re-authentication, leaving room for ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at 4 words, front-loading the core action. Every word is necessary and contributes to clarity, making it appropriately sized for this simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, output schema exists), the description fully covers the needed context. It explains the primary action and result (clearing session), requiring no further elaboration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the input schema requires no further explanation. Baseline 4 applies as the description does not need to compensate for parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Logout and clear session' clearly specifies the verb (logout) and resource (session). It distinguishes itself from sibling tools like vrchat_auth_begin (login) and other auth-related tools, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs alternatives, such as when a session should be cleared or prerequisites like being logged in. It lacks context for proper invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_auth_statusDRead-only
Auth status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| loggedIn | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond the annotation readOnlyHint=true. It does not describe what the tool returns, side effects, or error conditions. For a tool with no annotations beyond readOnlyHint, the description should provide more detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise but at the expense of clarity. It is under-specification rather than efficient communication. A single phrase does not serve the agent's need to understand the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, the description is still incomplete. It does not explain the meaning or use of the output. Even for a simple auth check, a sentence like 'Returns the current authentication status of the user (logged in/out, user ID, etc.)' would be expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the input schema is fully self-documenting (100% coverage). The description does not need to add param info, but it also fails to provide any additional context about the output. Baseline of 3 is appropriate as the schema already accounts for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Auth status.' is a tautology of the tool name and does not specify what aspect of authentication status is returned, e.g., whether it checks login state, token validity, or user identity. It fails to distinguish from sibling tools like vrchat_status_get or vrchat_auth_begin.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, typical use cases, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_avatar_profileCRead-only
Get an avatar profile by avatarId (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| compact | No | ||
| avatarId | Yes | ||
| maxArrayLength | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| stale | Yes | |
| avatar | Yes | |
| avatarId | Yes | |
| vrcxMemo | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes the safety profile, and the description merely repeats 'read-only' without adding new behavioral context such as auth requirements, rate limits, data freshness, or side effects. It does not contradict the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with the action and target front-loaded. It contains no filler or redundant elaboration, making it well-structured for quick parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only getter with an output schema, the core operation is covered. However, optional parameters are undocumented and no alternative tools are mentioned, so an agent would need to rely on schema inference and sibling-tool names to fully understand selection and invocation behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 4 parameters, the description should compensate by explaining parameter meaning. It only clarifies that avatarId is the lookup key, while fields, compact, and maxArrayLength are left entirely to inference from their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get'), the resource ('avatar profile'), and the lookup key ('avatarId'). It is specific enough to be distinguished from sibling user/world profile tools, though it does not explicitly contrast them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like vrchat_user_profile, vrchat_world_profile, or vrchat_avatar_update. The read-only marker describes a property of the operation, not a use case or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_avatar_updateADestructive
Edit your own avatar metadata: name, description, releaseStatus, and content tags. Asset fields (assetUrl, unityPackageUrl, unityVersion, version) are unreachable — a bad value there repoints the avatar at the wrong build with no undo. Content tags: content_sex, content_adult, content_violence, content_gore, content_horror. Tags merge rather than replace, so author tags survive; clearContentTags strips every content_* tag, including ones this build does not know. CAUTION — releaseStatus is risky in BOTH directions; confirm intent before changing it. Going public can expose a creator’s work against their terms, leak a private avatar, or breach VRChat’s content policy depending on what the avatar contains. Going private breaks the avatar for everyone currently wearing it. Use dryRun to preview.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name for the avatar. | |
| avatar | Yes | Avatar to edit: an avtr_ ID, or the exact name of one of your own avatars. | |
| dryRun | No | Compute and return the exact change without writing it. | |
| addTags | No | Content tags to add. Merged into the existing tags; nothing else is removed. | |
| removeTags | No | Content tags to remove. Other tags, including author tags, are left alone. | |
| description | No | New description. Pass "" to clear it. | |
| releaseStatus | No | Publication state. Risky in both directions — see the tool description before changing it. | |
| clearContentTags | No | Remove every content_* tag, including any this build does not know about. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| tags | Yes | |
| dryRun | Yes | |
| status | Yes | |
| changes | No | |
| avatarId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint annotation by detailing no-undo behavior for asset fields, tag merge semantics that preserve author tags, clearContentTags removing unknown content tags, and two-directional releaseStatus risks (public leak / private breakage). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: it front-loads the core action, then provides essential caveats about asset fields, tag behavior, releaseStatus, and dryRun. The structure is logical and dense without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 8 parameters, mutation risk, and nuanced tag behavior, the description is remarkably complete. It covers scope, restrictions, edge cases, risk warnings, and a preview mechanism. An output schema exists, so the lack of return-value detail is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters, but the description adds critical semantics: the exact content tag enum values, the merge/replace behavior for tags, the role of clearContentTags, the dual dangers of releaseStatus, and the purpose of dryRun for previewing. This far exceeds the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with an explicit verb and resource: 'Edit your own avatar metadata', and enumerates exactly which fields are editable (name, description, releaseStatus, content tags). It also distinguishes itself from read-only siblings like vrchat_avatar_profile and clarifies that asset fields are out of scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: this is for editing your own avatar's metadata, and it explicitly excludes asset fields. It gives warning conditions (releaseStatus risks, tag merge behavior) that guide when to be cautious, though it doesn't name alternative tools or state a 'when not to use' beyond scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_boopC
Send boops to one or many users. Users may be usr_ ids or exact display names.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | ||
| retry | No | ||
| users | No | ||
| dryRun | No | ||
| emojiId | No | ||
| emojiVersion | No | ||
| continueOnError | No | ||
| inventoryItemId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| sent | Yes | |
| dryRun | Yes | |
| failed | Yes | |
| status | Yes | |
| results | Yes | |
| skipped | Yes | |
| totalTargets | Yes | |
| continueOnError | Yes | |
| stoppedAfterFailure | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it's not read-only (readOnlyHint=false), and description confirms it 'sends' boops. However, no additional behavioral details such as whether boops are one-time, have limits, or require authentication beyond what annotations give.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence makes it concise, but lacks structure such as separating usage from parameter details. It could be more informative without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, nested objects, and an output schema, the description is severely lacking. It does not explain what a boop is, the effect, or what the tool returns. With minimal annotations, the description should provide much more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description mentions only 'user' and 'users' implicitly via 'one or many users'. With 8 parameters and 0% schema description coverage, the description adds negligible value. Parameters like 'retry', 'dryRun', 'emojiId' are completely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Send' and resource 'boops', and specifies scope ('one or many users'). It distinguishes from siblings by being the only boop-related tool, but does not explicitly differentiate from similar 'send' tools like 'invite'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'invite' or 'message' tools. No prerequisites, permissions, or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_cache_invalidateB
Invalidate cached data (local-only).
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| area | No | ||
| scope | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | |
| area | No | |
| scope | Yes | |
| cleared | Yes | |
| enabled | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=false already signals a mutation, but the description adds valuable context with 'local-only', clarifying that it does not affect server state. This goes beyond the annotation, though it could mention side effects or scope details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no wasted words. It is appropriately front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the core purpose is clear, the tool has three parameters with no descriptions, and the description does not explain what 'cached data' refers to or when invalidation is needed. An output schema exists but does not compensate for missing parameter semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description provides no explanation of the three parameters (key, area, scope). The agent has no way to know how to use them correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool invalidates cached data and specifies it's local-only. The verb 'invalidate' is specific and distinguishes this from all listed sibling tools, which focus on auth, status, friends, events, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives, nor any conditions or prerequisites. The description is too minimal to help an agent decide when invalidation is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_config_getBRead-only
Fetch API config (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Paging controls. | |
| fields | No | Fields to keep. | |
| compact | No | Compact response. | |
| includeMeta | No | Include URL/page metadata. | |
| maxArrayLength | No | Max array items. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| data | Yes | |
| page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only repeats the 'read-only' nature already declared by annotations. It adds no additional behavioral context such as rate limits, caching, or response characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (one short sentence) but does not earn its place as it mostly reiterates the tool name and annotation. It is not overly long, but it lacks substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, nested objects, and an output schema, the description is too brief. It does not explain what 'API config' retrieves or how the parameters affect the result, leaving the agent with insufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 5 parameters are fully described in the input schema (100% coverage). The description does not add any meaning beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Fetch' and the resource 'API config', and notes that it is read-only. It distinguishes the tool from siblings, as there are no other config-fetching tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, no exclusions, and no context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_deleteBDestructive
Call an available generated VRChat DELETE operation by operationId. Use vrchat_operations and vrchat_operation_details to discover params/body.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | OpenAPI request body. | |
| params | No | OpenAPI params. | |
| options | No | Write options. | |
| includeMeta | No | Include URL/status/headers. | |
| operationId | Yes | OpenAPI operationId. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | VRChat API response data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate destructiveHint=true and readOnlyHint=false, so the agent knows this is a destructive operation. The description adds 'DELETE operation' which aligns but provides no additional behavioral context about auth requirements, irreversibility, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first sentence defines the purpose, and the second provides actionable guidance. Perfectly concise for a generic proxy tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a generic wrapper with 5 parameters including nested objects and an output schema exists, the description is minimal but functional. It relies heavily on external tools (vrchat_operations) for full context, which is reasonable for a generated API client, but could offer more about what the operation does.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 each parameter. The description adds no extra meaning beyond the schema's descriptions and only directs to other tools for details. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it calls a DELETE operation by operationId, which is a specific verb+resource. However, it does not differentiate from specific delete tools like vrchat_event_delete, relying on the agent to infer that this is a generic tool for any discovered DELETE operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent to use vrchat_operations and vrchat_operation_details to discover parameters, providing context for how to prepare the call. However, it does not explicitly state when to use this tool vs. specific delete alternatives, nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_event_createC
Create a group calendar event.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | Yes | ||
| endsAt | Yes | ||
| groupId | Yes | ||
| imageId | No | ||
| isDraft | No | ||
| roleIds | No | ||
| category | No | other | |
| featured | No | ||
| parentId | No | ||
| startsAt | Yes | ||
| languages | No | ||
| platforms | No | ||
| accessType | No | group | |
| description | Yes | ||
| hostEarlyJoinMinutes | No | ||
| usesInstanceOverflow | No | ||
| guestEarlyJoinMinutes | No | ||
| sendCreationNotification | No | ||
| closeInstanceAfterEndMinutes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| event | No | |
| result | No | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=false already signals this is a mutation, and the description's 'create' wording is consistent with that (no contradiction). However, the description adds no behavioral context beyond the annotation — nothing about draft vs. published events, notification side effects, permission requirements, or that the event must belong to an existing group. For a write operation, this fails to disclose meaningful behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is grammatically complete and front-loaded with the verb, so it is genuinely concise. But at five words for a 20-parameter mutation tool, it leans toward under-specification rather than disciplined brevity. It reads more like a summary line than a tool definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, return-value explanation is unnecessary, but the description still omits essential operational context: date-time format requirements, enum semantics and defaults, behavior of isDraft/featured/sendCreationNotification, and the relationship between groupId and the calendar. The sparse readOnlyHint annotation does little to fill these gaps. The definition is incomplete for the complexity of this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for 20 undocumented parameters. It provides no guidance on the five required fields (description, endsAt, startsAt, title, groupId) and no hints about the strict ISO-8601 date-time pattern, enum defaults (category='other', accessType='group'), or optional flags like isDraft, featured, or sendCreationNotification. An agent would have to reverse-engineer semantics from types, validation patterns, and names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a group calendar event' pairs a specific verb with a resource type, clearly identifying a creation operation. The 'create' verb distinguishes it from siblings like vrchat_event_update, vrchat_event_delete, and the various event-read tools. It misses a 5 only because it omits any scope nuance (e.g., the event must belong to a group) that the required groupId parameter implies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage context is provided — the description says nothing about when to choose this tool over vrchat_event_update, vrchat_event_delete, or the group event read tools. It also omits prerequisites such as group membership or required permission levels to create events. An agent must infer all selection criteria from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_event_deleteADestructive
Delete a group calendar event after verifying whether the target is an occurrence or series.
| Name | Required | Description | Default |
|---|---|---|---|
| groupId | Yes | ||
| calendarId | Yes | ||
| targetKind | Yes | Required safety check. Use single_event for a non-recurring event, occurrence for a generated recurring occurrence, or series for the recurring parent series. |
Output Schema
| Name | Required | Description |
|---|---|---|
| event | No | |
| result | No | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, so the description adds the safety check context. However, it does not elaborate on the permanent nature of deletion or impact on recurring events.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words. Front-loaded with the action verb. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with 3 parameters and an output schema, the description is too minimal. It omits return values, permanence, and consequences for recurring events, which are crucial for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only targetKind parameter gets context from the description; groupId and calendarId are left unexplained despite low schema coverage (33%). The description fails to compensate for missing parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it deletes a group calendar event, with the additional step of verifying target type. It uniquely identifies the tool among siblings as the delete event tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the need to verify target type but gives no explicit guidance on when to use vs alternatives like updating or following events. No prerequisites or caveats mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_event_followC
Follow or unfollow a group calendar event.
| Name | Required | Description | Default |
|---|---|---|---|
| groupId | Yes | ||
| calendarId | Yes | ||
| isFollowing | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| event | No | |
| result | No | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a mutation action ('follow/unfollow') which is consistent with the annotation readOnlyHint=false, but it adds no additional behavioral context such as idempotency, error conditions, or authorization requirements beyond what the annotations already imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words. However, it is so concise that it omits useful detail, which slightly reduces its effectiveness despite efficient wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three required parameters, no schema descriptions, and an output schema that is not detailed, the description lacks essential context such as the effect of isFollowing, success/failure responses, and prerequisites. The agent would likely need to infer or test behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not explain the meaning or format of any parameter (groupId, calendarId, isFollowing). With 0% schema description coverage, the description fails to compensate, leaving the agent to infer usage from parameter names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Follow or unfollow' and the resource 'group calendar event', which is distinct from other event-related sibling tools like create, update, delete, or get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool, prerequisites (e.g., group membership), or how this tool relates to alternatives like event creation or deletion. The description is purely declarative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_events_discoverBRead-only
Discover public calendar events with optional category/tag filters (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| scope | No | ||
| fields | No | ||
| compact | No | ||
| maxItems | No | ||
| maxPages | No | ||
| pageSize | No | ||
| categories | No | ||
| nextCursor | No | ||
| maxArrayLength | No | ||
| featuredResults | No | ||
| nonFeaturedResults | No | ||
| personalizedResults | No | ||
| minimumInterestCount | No | ||
| upcomingOffsetMinutes | No | ||
| minimumRemainingMinutes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| scope | No | |
| events | Yes | |
| maxItems | Yes | |
| maxPages | Yes | |
| pageSize | Yes | |
| truncated | Yes | |
| nextCursor | No | |
| totalEvents | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true; description adds 'read-only' parenthetically but provides no further behavioral context (e.g., pagination, ordering, rate limits). Limited added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single concise sentence is front-loaded but too sparse given 16 parameters. Every word earns its place, but lacks structure for parameter details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite presence of an output schema, description is incomplete for a tool with 16 parameters including enums and pagination. Does not guide usage of filtering, pagination, or result format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%; description only mentions 'category/tag filters' (categories, tags). Fails to explain other 14 parameters (scope, fields, compact, pagination, etc.) leaving agent uninformed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action 'Discover', the resource 'public calendar events', and optional filters. Distinguishes from sibling tools like vrchat_events_upcoming and vrchat_events_search by focusing on discovery with filters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for read-only discovery with filters, but does not explicitly state when to use this tool versus alternatives. No exclusions or context for replacement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_events_searchCRead-only
Search calendar events by term (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| compact | No | ||
| maxItems | No | ||
| maxPages | No | ||
| pageSize | No | ||
| utcOffset | No | ||
| searchTerm | Yes | ||
| maxArrayLength | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| events | Yes | |
| maxPages | Yes | |
| pageSize | Yes | |
| truncated | Yes | |
| utcOffset | No | |
| searchTerm | Yes | |
| totalEvents | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds 'read-only' which is redundant. Does not disclose additional behavioral traits like auth requirements, rate limits, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, concise, but lacks structure and detail. Could be more informative while remaining brief.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters and existing output schema, the description is insufficient. Does not cover pagination parameters (maxItems, pageSize, maxPages) or optional fields. Return value is not contextualized.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and description provides no explanation for any of the 8 parameters. Only 'searchTerm' is implied by the phrase 'by term', but no semantics are added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'Search', resource 'calendar events', and filter 'by term'. Includes 'read-only' mode. However, does not differentiate from sibling tools like vrchat_events_discover or vrchat_events_upcoming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for searching by term, but no when-to-use or when-not-to-use guidance. No mention of alternatives or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_events_upcomingARead-only
List calendar events in the upcoming window (read-only). Defaults to the next 7 days.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | ||
| fields | No | ||
| compact | No | ||
| maxItems | No | ||
| maxPages | No | ||
| pageSize | No | ||
| windowHours | No | ||
| maxArrayLength | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | Yes | |
| from | Yes | |
| events | Yes | |
| maxItems | Yes | |
| maxPages | Yes | |
| pageSize | Yes | |
| segments | Yes | |
| truncated | Yes | |
| totalEvents | Yes | |
| windowHours | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description accurately labels the tool as read-only, which aligns with the readOnlyHint annotation and adds no contradiction. It further specifies the default time window, providing behavioral context beyond the annotation. For a simple listing tool with output schema, this is sufficient transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that conveys purpose, scope, and default behavior without extraneous words. It is front-loaded with the core action and provides additional details concisely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters and no required parameters, the description is too sparse. It fails to explain how to use the parameters to navigate or filter events, leaving a significant gap for an agent. While the output schema compensates for return values, the input semantics are not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not explain any of the 8 input parameters despite 0% schema description coverage. Key parameters like 'from', 'fields', 'compact', 'windowHours' remain undocumented, leaving the agent without critical guidance on how to customize the query. The default window hint only indirectly relates to 'windowHours' but is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List', the resource 'calendar events', and the scope 'in the upcoming window'. It also specifies default behavior (next 7 days) and marks the tool as read-only, effectively distinguishing it from sibling event tools like vrchat_events_discover and vrchat_events_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the default window of 7 days, giving a sense of when the tool is appropriate. However, it lacks explicit guidance on when to use this tool versus alternatives (e.g., vrchat_events_search for broader searches) and does not provide exclusion criteria or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_event_updateC
Update a group calendar event.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | No | ||
| endsAt | No | ||
| groupId | Yes | ||
| imageId | No | ||
| isDraft | No | ||
| roleIds | No | ||
| category | No | ||
| featured | No | ||
| parentId | No | ||
| startsAt | No | ||
| languages | No | ||
| platforms | No | ||
| calendarId | Yes | ||
| description | No | ||
| hostEarlyJoinMinutes | No | ||
| usesInstanceOverflow | No | ||
| guestEarlyJoinMinutes | No | ||
| sendCreationNotification | No | ||
| closeInstanceAfterEndMinutes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| event | No | |
| result | No | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral transparency beyond the mutation implied by readOnlyHint=false. It does not explain whether updates are partial or full, what side effects may occur, whether permissions are required, or how missing fields are treated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, but for a 20-parameter tool it is under-specified rather than appropriately concise. It states only the basic action and omits essential context that should accompany such a complex operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 20 parameters, 2 required, no parameter documentation, and only a readOnlyHint=false annotation. The one-sentence description leaves out update semantics, identifier usage, side effects, and constraints, so it is far from complete enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 20 parameters, the description needed to explain parameter roles, but it names none. Critical parameters such as groupId, calendarId, sendCreationNotification, and usesInstanceOverflow remain unexplained, leaving an agent to guess how to construct a valid request.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Update') and a clear resource ('a group calendar event'), so an agent can identify the core operation. It does not explicitly differentiate from sibling tools like vrchat_event_create, but the verb and resource make the intent unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as vrchat_event_create or vrchat_group_event_get, and no prerequisites or exclusions are mentioned. The only usage signal is the word 'update,' which is thin for a complex mutation tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_favorite_addB
Add a user, avatar, or world to a favorite group.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | Yes | Favorite group tags, e.g. worlds1, avatars1, group_0. | |
| type | Yes | ||
| targetId | Yes | User/avatar/world ID to favorite. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | |
| status | Yes | |
| favorite | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, consistent with the 'Add' action, but the description adds no additional behavioral context (e.g., idempotency, permission requirements, or effects on existing favorites).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with all essential information and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description is adequate for a simple add operation, it could mention idempotency, return value, or specific constraints given the existence of an output schema and 3 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not elaborate on parameter meanings beyond what the schema already provides (e.g., tags format, relationship between type and tag values). With 67% schema coverage, there is room to add value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool adds a user, avatar, or world to a favorite group. It distinguishes itself from sibling tools like vrchat_favorite_remove and vrchat_favorites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., vrchat_favorite_remove for removal), nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_favorite_removeADestructive
Remove a favorite by favorite record ID. Use vrchat_favorites to look up favoriteRecordId first.
| Name | Required | Description | Default |
|---|---|---|---|
| favoriteRecordId | Yes | Favorite record ID, not the target user/avatar/world ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | |
| status | Yes | |
| favorite | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, and the description confirms removal. No additional behavioral details beyond the annotation, but consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with one required param and output schema present; description covers the operation and a key prerequisite, sufficient for the task.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage; description adds clarification that favoriteRecordId is not the target user/avatar/world ID, adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Remove) and the resource (favorite), and differentiates from sibling tools like vrchat_favorite_add by referencing the lookup step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use vrchat_favorites first to obtain the favoriteRecordId, providing clear usage context. Lacks explicit when-not-to-use but sufficient for this simple tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_favoritesBRead-only
Read favorites, favorite groups, limits, or favorited avatars with compact outputs (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| sort | No | ||
| type | No | ||
| view | No | favorites | |
| notag | No | ||
| order | No | ||
| query | No | ||
| offset | No | ||
| userId | No | ||
| ownerId | No | ||
| featured | No | ||
| maxItems | No | ||
| maxPages | No | ||
| pageSize | No | ||
| platform | No | ||
| releaseStatus | No | ||
| maxUnityVersion | No | ||
| minUnityVersion | No | ||
| favoriteGroupName | No | ||
| favoriteGroupType | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| view | Yes | |
| group | No | |
| notes | No | |
| total | No | |
| groups | No | |
| limits | No | |
| avatars | No | |
| favorites | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds 'compact outputs' and enumerates readable resources, providing some behavioral context beyond annotations, but lacks details on pagination, rate limits, or output structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence (15 words) that front-loads the purpose. It wastes no words, but could be more structured by explaining the main parameter (view) that controls which resource is read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (20 parameters, multiple enum options, an output schema), the description is too minimal. It does not cover how to use the view parameter or other key parameters, leaving the agent under-informed for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation for any of the 20 parameters. The tool's behavior depends heavily on parameters like view, tag, type, but the description offers no guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it reads favorites, groups, limits, and avatars, and specifies read-only nature. It distinguishes from sibling mutation tools (favorite_add, favorite_remove) and other read tools by focusing on favorites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. Does not mention prerequisites, limitations, or recommended scenarios. The description only states 'read-only' and 'compact outputs' without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_friend_detailsBRead-only
Get a friend's profile, status, and location details by display name or userId (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| userId | No | ||
| includeOffline | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| group | Yes | |
| world | Yes | |
| friend | Yes | |
| profile | Yes | |
| instance | Yes | |
| location | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description's '(read-only)' merely restates that rather than adding new information. It adds modest context about what is returned (profile, status, location) and hints at offline filtering via the includeOffline parameter, but does not state behavior for missing or offline friends, auth needs, or rate limits. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that communicates the action, the resource, and the lookup keys efficiently. The only minor waste is the '(read-only)' parenthetical, which duplicates the readOnlyHint annotation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a read-only lookup that has an output schema, but real gaps remain: the includeOffline parameter's semantics are undocumented, whether name and userId are mutually exclusive is unstated, and no distinction is drawn from vrchat_user_profile, which likely serves a nearly identical purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does clarify that 'name' and 'userId' are alternative lookup mechanisms, adding real meaning for two of three parameters. However, 'includeOffline' is left entirely unexplained, so the compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), a concrete resource ('a friend's profile, status, and location details'), and the lookup keys ('by display name or userId'). The 'friend's' scope implicitly differentiates it from vrchat_user_profile and vrchat_me, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus overlapping siblings such as vrchat_user_profile, vrchat_friends_list, or vrchat_friends_search, all of which appear in the sibling list. No when-to-use, when-not-to-use, or alternative-selection conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_friend_requestB
Send friend requests to one or many users. Users may be usr_ ids or exact display names.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | ||
| retry | No | ||
| users | No | ||
| dryRun | No | ||
| continueOnError | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| sent | Yes | |
| dryRun | Yes | |
| failed | Yes | |
| status | Yes | |
| results | Yes | |
| skipped | Yes | |
| totalTargets | Yes | |
| continueOnError | Yes | |
| stoppedAfterFailure | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, which is consistent with the description. However, the description does not disclose behavioral details such as rate limits, duplicate request handling, or authorization requirements beyond what is implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with two short sentences that contain no unnecessary information. It is front-loaded, stating the core action immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (5 parameters, nested objects, and an output schema), the description is too minimal. It omits details on retry behavior, dry-run mode, error continuation, and output format, leaving significant gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description only clarifies that the 'user' and 'users' parameters accept usr_ ids or display names, but it does not explain the 'retry', 'dryRun', or 'continueOnError' parameters. With 0% schema coverage, the description provides insufficient guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Send friend requests' to 'one or many users', specifying that users can be 'usr_ ids or exact display names'. This differentiates it from sibling tools like vrchat_invite or vrchat_boop, which involve different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for sending friend requests, but it does not explicitly state when to use it over alternatives (e.g., vs. vrchat_invite for instance invites), nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_friends_listBRead-only
List friends with cache-backed pagination (read-only). Defaults to online-only; set includeOffline=true to include offline friends.
| Name | Required | Description | Default |
|---|---|---|---|
| maxItems | No | ||
| maxPages | No | ||
| pageSize | No | ||
| detailLevel | No | ||
| includeOffline | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| stale | Yes | |
| friends | Yes | |
| maxItems | No | |
| maxPages | Yes | |
| pageSize | Yes | |
| segments | Yes | |
| truncated | Yes | |
| detailLevel | Yes | |
| totalFriends | Yes | |
| includeOffline | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the 'read-only' claim is redundant. The description adds 'cache-backed pagination', which provides useful behavioral context beyond annotations, but no further details on auth needs or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with front-loaded verb and resource. No wasted words; the second sentence adds practical default behavior. Ideal length for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the main purpose and one parameter, but lacks explanation for pagination controls (maxItems, maxPages, pageSize) and detailLevel. With an output schema, return values are covered, but usage of pagination parameters is not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should explain all parameters. It only addresses includeOffline, leaving maxItems, maxPages, pageSize, and detailLevel unexplained. This is a significant gap for a 5-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and resource 'friends', and adds 'cache-backed pagination' for specificity. However, it does not differentiate from sibling tools like vrchat_friends_search or vrchat_friends_overview, which have overlapping purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear default ('online-only') and how to change it (includeOffline=true). But it offers no guidance on when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_friends_overviewBRead-only
Summarize friends by status and location with enriched world/group info (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| maxLocations | No | ||
| statusFilter | No | ||
| includeOffline | No | ||
| instanceDetailLevel | No | ||
| minInstanceUserCount | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| stale | Yes | |
| totals | Yes | |
| segments | Yes | |
| locations | Yes | |
| truncated | Yes | |
| onlineCount | Yes | |
| maxLocations | Yes | |
| offlineCount | Yes | |
| statusCounts | Yes | |
| statusFilter | No | |
| totalFriends | Yes | |
| includeOffline | Yes | |
| totalLocations | Yes | |
| omittedLocations | Yes | |
| returnedLocations | Yes | |
| locationsTruncated | Yes | |
| instanceDetailLevel | No | |
| minInstanceUserCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares the operation non-destructive, and the description reinforces this with 'read-only.' It adds some context about enrichment, but it does not disclose behavior around pagination, default offline-user handling, or how instance detail levels affect results. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the action, resource, and core dimensions. The only minor redundancy is repeating 'read-only' despite the annotation, but it does not meaningfully hurt the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema and readOnly annotation cover part of the picture, but the tool has six undocumented parameters and a fairly involved filtering/summary behavior. The description does not clarify parameter roles or when to set them, leaving a material gap for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no parameter-level meaning. The distinction between 'status' and 'statusFilter' is ambiguous, and parameters like 'maxLocations', 'minInstanceUserCount', and 'instanceDetailLevel' are left unexplained, forcing the agent to rely on names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Summarize', identifies the resource, 'friends', and names the key dimensions: status, location, and enriched world/group info. This implies an aggregated overview rather than a raw list, which helps separate it from siblings like vrchat_friends_list, though it does not explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as vrchat_friends_list, vrchat_friends_search, or vrchat_friend_details. The description only communicates the high-level purpose, leaving the agent to infer when this overview is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_friends_searchARead-only
Search friends by display name (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| maxResults | No | ||
| includeOffline | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| matches | Yes | |
| totalFriends | Yes | |
| includeOffline | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the key detail that the search is by 'display name' (not username or ID), and reinforces the read-only nature already indicated by annotations. This goes beyond annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (5 words) with no wasted text. However, the brevity sacrifices completeness; a slightly longer description could improve utility without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 (reducing need to describe returns) and annotations, the description is adequate but not thorough. It fails to explain pagination or effect of optional parameters, leaving gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should explain all parameters. It only indirectly covers the 'query' parameter via 'search by display name', but provides no meaning for 'maxResults' or 'includeOffline'. Incomplete compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'search', resource 'friends', and criterion 'by display name'. It distinguishes from sibling tools like vrchat_friends_list (which likely lists all friends) and vrchat_friend_details (which shows details for a specific friend).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for finding specific friends by name, but does not explicitly state when to use this tool over alternatives like vrchat_friends_list or vrchat_friends_overview. No exclusions or prerequisites are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_gallery_image_uploadA
Upload a validated static PNG to the signed-in VRChat account gallery. This does not attach the image to a group post or event.
| Name | Required | Description | Default |
|---|---|---|---|
| imagePath | Yes | Absolute path to a static PNG inside uploads.allowedRoots. The image must be 65-2048 pixels per side and no larger than 10 MiB. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| image | Yes | |
| fileId | Yes | |
| ownerId | No | |
| version | No | |
| mimeType | No | |
| extension | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation only says readOnlyHint=false, so the description correctly conveys a write operation to the signed-in account's gallery. It adds useful context by stating the image is not attached to group posts or events. However, it does not disclose potential side effects such as replacing existing gallery items, rate limits, or upload failure behavior, though the output schema may cover some of this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tightly written sentences. The primary action is stated first, and the differentiation from group-post/event attachment follows immediately. There is no filler or redundant material.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter upload tool with a detailed input schema and an output schema, the description is sufficient: it identifies the target, the accepted input class, and a key non-goal. An agent has everything needed to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for the single parameter imagePath, including path constraints, file type, dimensions, and size limit. The description's mention of 'validated static PNG' aligns with the schema but adds no new parameter-level meaning beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Upload') and resource ('signed-in VRChat account gallery'), and narrows the payload to 'a validated static PNG.' The explicit disclaimer that it 'does not attach the image to a group post or event' distinguishes it from sibling tools like vrchat_group_post_create or vrchat_event_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the primary use case clear: uploading an image to the account gallery. The sentence 'This does not attach the image to a group post or event' provides an explicit exclusion that helps an agent choose this tool over attachment-related siblings, though it does not name those alternatives directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_group_event_getCRead-only
Get a single group calendar event (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| compact | No | ||
| groupId | No | ||
| shortCode | No | ||
| calendarId | Yes | ||
| maxArrayLength | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| event | No | |
| stale | Yes | |
| groupId | Yes | |
| calendarId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds 'read-only' which is redundant but not contradictory. No additional behavioral details (e.g., error handling, permissions) are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with one sentence, but it omits essential parameter information, making it under-specific rather than efficiently concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the six parameters and presence of an output schema, the description is insufficient. It does not explain how to identify the event or what the response contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description says nothing about the six parameters (fields, compact, groupId, shortCode, calendarId, maxArrayLength). The agent has no guidance on what each parameter controls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a single group calendar event (read-only).' It uses a specific verb and resource, distinguishing it from sibling tools like vrchat_group_events_list which returns multiple events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like vrchat_group_events_list or vrchat_group_event_next. Does not mention prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_group_event_nextCRead-only
Get the next upcoming calendar event for a group (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| compact | No | ||
| groupId | No | ||
| shortCode | No | ||
| maxArrayLength | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| event | No | |
| stale | Yes | |
| groupId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description repeats the 'read-only' hint already present in annotations but adds no further behavioral context such as idempotency, rate limits, or authentication requirements. With annotations present, the bar is lower, yet the description fails to provide additional value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the core purpose. However, it is overly terse, sacrificing necessary detail about parameters and context, making it minimally adequate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has five parameters, no required ones, and an output schema, the description explains the tool's purpose but lacks details on how to use parameters (e.g., groupId vs shortCode) or what return values look like. It is insufficient for an agent to invoke the tool correctly without additional inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the input schema provides no descriptions. The tool description does not mention any of the five parameters (fields, compact, groupId, shortCode, maxArrayLength), leaving their semantics entirely unexplained. This is a critical gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Get', the resource 'next upcoming calendar event', and the scope 'for a group'. It distinguishes from sibling tools like vrchat_group_events_list and vrchat_group_events_upcoming by indicating singularity ('next'), but does not explicitly contrast with vrchat_group_event_get which might also fetch a single event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as vrchat_group_events_list or vrchat_group_events_upcoming. There is no mention of prerequisites, context, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_group_events_listCRead-only
List group calendar events (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| fields | No | ||
| compact | No | ||
| groupId | No | ||
| maxItems | No | ||
| maxPages | No | ||
| pageSize | No | ||
| shortCode | No | ||
| maxArrayLength | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | No | |
| page | No | |
| stale | Yes | |
| events | Yes | |
| groupId | Yes | |
| maxItems | Yes | |
| maxPages | Yes | |
| pageSize | Yes | |
| truncated | Yes | |
| totalEvents | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description matches the readOnlyHint annotation, so no contradiction. But it does not add additional behavioral context such as pagination, filtering, or auth requirements beyond what the annotation already indicates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one sentence), but it omits essential details about parameters and usage, making it too brief to be fully useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters with no schema descriptions and the tool's simplicity in purpose, the description is incomplete. It does not guide the agent on how to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the tool has 9 parameters. The description does not explain any parameters, relying entirely on the schema which lacks descriptions. The description fails to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists group calendar events and specifies it is read-only. However, it does not differentiate from sibling tools like vrchat_group_events_upcoming, which may have a similar purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention when-not-to-use or reference other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_group_events_upcomingBRead-only
List upcoming group events in a time window (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | ||
| fields | No | ||
| compact | No | ||
| groupId | No | ||
| maxItems | No | ||
| maxPages | No | ||
| pageSize | No | ||
| shortCode | No | ||
| windowHours | No | ||
| maxArrayLength | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | Yes | |
| from | Yes | |
| stale | Yes | |
| events | Yes | |
| groupId | Yes | |
| maxItems | Yes | |
| maxPages | Yes | |
| pageSize | Yes | |
| segments | Yes | |
| truncated | Yes | |
| totalEvents | Yes | |
| windowHours | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly says 'read-only', which is consistent with the readOnlyHint annotation. It adds the time window constraint, but no additional behavioral traits (e.g., data freshness, side effects, or limits) beyond what the annotation already declares.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no filler. Every word adds meaning. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 10 optional parameters and an output schema, the description is minimal. It does not explain the time window, group requirement (groupId/shortCode), pagination controls (maxItems, pageSize, maxPages), or compact/field selection. Incomplete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description should compensate. It hints at a time window (implied by 'windowHours', 'from' parameters) but does not explain any of the 10 parameters. Most parameters lack any interpretive context, leaving the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists upcoming group events in a time window and is read-only. The verb 'list' and resource 'upcoming group events' are specific, and it distinguishes from sibling tools like vrchat_events_upcoming (non-group) and vrchat_group_events_list (possibly all events).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Siblings like vrchat_group_events_list and vrchat_events_upcoming exist but no exclusion criteria or usage context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_group_instances_overviewCRead-only
Summarize active group instances (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| groupId | No | ||
| shortCode | No | ||
| maxInstances | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| stale | Yes | |
| groupId | Yes | |
| instances | Yes | |
| totalMembers | Yes | |
| totalInstances | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers safety, so the description adds 'summarize' and 'active' context. However, it does not explain what 'active' means or what the summary entails (e.g., which fields are returned). With annotations present, the bar is lower, and 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and resource. It is concise and avoids fluff, though it could be slightly more informative without losing brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 3 parameters and 0% schema description coverage, the description is insufficient. It does not clarify parameter relationships or the meaning of 'active'. While an output schema exists, the input semantics are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds no parameter meaning. It does not explain groupId vs shortCode, maxInstances limits, or how they affect results. The description fails to compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'summarize' and the resource 'active group instances', and labels it read-only. However, it does not differentiate from sibling tools like vrchat_group_members or vrchat_group_events, which could also involve summarizing group data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., vrchat_world_instances_overview for worlds). The description only says 'read-only', which is redundant with annotations, but does not give use-case context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_group_inviteB
Invite one or many users to a group. Users may be usr_ ids or exact display names. Requires groupId or shortCode. confirmOverrideBlock defaults false; pass true only to override an existing target-user block.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | ||
| retry | No | ||
| users | No | ||
| dryRun | No | ||
| groupId | No | ||
| shortCode | No | ||
| continueOnError | No | ||
| confirmOverrideBlock | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| sent | Yes | |
| dryRun | Yes | |
| failed | Yes | |
| status | Yes | |
| groupId | Yes | |
| results | Yes | |
| skipped | Yes | |
| totalTargets | Yes | |
| continueOnError | Yes | |
| stoppedAfterFailure | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation (readOnlyHint false). Description adds useful behavioral detail about confirmOverrideBlock overriding blocks. However, it does not disclose rate limits, permission requirements, or side effects of inviting (e.g., notifications, group membership changes).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler. Front-loaded with core purpose, then key details. Every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite presence of an output schema (reducing need for return value description), the tool has 8 parameters and many sibling tools. Description fails to cover 3 parameters, lacks guidance on required vs optional parameters (despite stating 'requires groupId or shortCode'), and offers no comparison to other invite tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds meaning for 5 of 8 parameters (user, users, groupId, shortCode, confirmOverrideBlock). It clarifies user identifier formats and the confirmOverrideBlock default. Missing explanations for retry, dryRun, and continueOnError.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'invite one or many users to a group' and specifies acceptable user identifiers (usr_ ids or display names). However, it does not explicitly differentiate from sibling invite tools (e.g., vrchat_invite, vrchat_invite_user) which serve different contexts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on requiring groupId or shortCode and explains confirmOverrideBlock's default and override behavior. Missing when to use this tool over other invite tools or when not to use it (e.g., permissions, self-invite not mentioned). Parameters like retry, dryRun, continueOnError lack usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_group_membersARead-only
List one page of compact group members by default. Use view=all only when a complete, cached snapshot is required (read-only, capped at 10,000).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | VRChat group-member sort expression. | |
| view | No | page fetches one bounded API page; all explicitly loads and caches a rate-aware snapshot capped at 10,000 members. | page |
| offset | No | Starting member offset when view=page. Ignored when view=all. | |
| roleId | No | Only include members with this role. | |
| groupId | No | Exact group ID. Provide groupId or shortCode. | |
| pageSize | No | Members to fetch when view=page. Ignored when view=all. | |
| shortCode | No | Exact group short code. Provide groupId or shortCode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| view | Yes | |
| stale | Yes | |
| groupId | Yes | |
| members | Yes | |
| truncated | Yes | |
| returnedMembers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only. Description adds that view=all is cached and capped at 10,000, and that default returns compact data. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with default behavior, then the exception. No superfluous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% schema description coverage and an output schema, the description provides sufficient high-level behavior. Could mention sorting/filtering briefly, but schema covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters with detailed descriptions. The tool description adds value by summarizing the key difference between page and all views, and noting that offset/pageSize are ignored for all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool lists one page of compact group members by default. Distinguishes between view=page and view=all, and is distinct from sibling tools which deal with search, profile, roles, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance that view=all should only be used when a complete cached snapshot is needed, and mentions the cap. Does not explicitly compare to alternative tools, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_group_post_createA
Create a group post (announcement). Does not notify members unless sendNotification is true.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Post body text. | |
| title | Yes | Post title. | |
| groupId | No | Exact group ID. Provide groupId or shortCode. | |
| imageId | No | Existing VRChat file ID to attach as the post image. | |
| roleIds | No | Restrict the post to these group roles. Omit to show it to everyone who can see the post. | |
| shortCode | No | Exact group short code. Provide groupId or shortCode. | |
| visibility | Yes | group restricts the post to members; public shows it on the group page. | |
| sendNotification | No | Notify group members. Defaults to false; set true only when the post warrants a ping. |
Output Schema
| Name | Required | Description |
|---|---|---|
| post | No | |
| postId | No | |
| status | Yes | |
| groupId | Yes | |
| mergedFromExisting | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a meaningful behavioral detail: 'Does not notify members unless sendNotification is true,' which is not captured by the sparse annotations (only readOnlyHint: false). However, it does not disclose other potential behaviors such as permission requirements, side effects beyond notification, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately identifies the action and includes one crucial behavioral caveat. Every word earns its place; there is no redundant or explanatory fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, 3 required) and the rich schema descriptions, the description adds the key notification nuance but omits other context such as group membership prerequisites or potential failure modes. The output schema helps, but the description itself is minimal and leaves some operational context unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for all 8 parameters with descriptive text, so the baseline is 3. The description reinforces the sendNotification parameter ('Does not notify members unless sendNotification is true') but does not add new semantic information beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Create a group post') and resource ('group post'), with an explicit parenthetical ('announcement') that clarifies the post type. This clearly distinguishes the tool from sibling tools like vrchat_group_post_update and vrchat_group_post_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided about when to use this tool versus alternatives, nor are any prerequisites or exclusions mentioned. The only hint is the verb 'Create,' which implies usage but does not offer the contextual guidance that would help an agent choose this over update/delete or other group-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_group_post_deleteADestructive
Delete a group post. Members already notified about it are not un-notified.
| Name | Required | Description | Default |
|---|---|---|---|
| postId | Yes | Post ID to delete. | |
| groupId | No | Exact group ID. Provide groupId or shortCode. | |
| shortCode | No | Exact group short code. Provide groupId or shortCode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| post | No | |
| postId | No | |
| status | Yes | |
| groupId | Yes | |
| mergedFromExisting | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive behavior, but the description adds a valuable non-obvious consequence: members already notified are not un-notified. This provides useful behavioral context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two brief sentences, front-loaded with the primary action. Every word contributes meaning with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with three parameters and an output schema, the description is minimally complete. It covers the core action and a key consequence, but lacks any context on permissions or relationship to other post tools, though this is somewhat mitigated by schema and siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for each parameter. The tool description does not add any parameter-specific meaning beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a group post' with a specific verb and resource, and the notification caveat adds further specificity. It is distinct from sibling tools like create/update/recent posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives or prerequisites. It does not mention that this should be used for removing existing posts, nor any conditions like permissions or side effects beyond the notification note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_group_posts_recentBRead-only
List recent posts for a group (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| groupId | No | ||
| maxItems | No | ||
| maxPages | No | ||
| pageSize | No | ||
| shortCode | No | ||
| publicOnly | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| posts | Yes | |
| stale | Yes | |
| groupId | Yes | |
| maxPages | Yes | |
| pageSize | Yes | |
| truncated | Yes | |
| totalPosts | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond the readOnlyHint annotation it repeats. It does not disclose pagination behavior, the need to provide either groupId or shortCode, sorting/ordering, or any side effects or prerequisites. With annotations already covering safety, this adds minimal value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that captures the essence in under ten words. Every word earns its place; no fluff or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 optional parameters and no required ones, the tool has ambiguous invocation requirements. The description does not clarify how to specify the group (groupId vs shortCode) or the pagination parameters, leaving the agent under-informed. Although an output schema exists, the request construction remains unclear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides absolutely no explanation of any parameter (groupId, maxItems, maxPages, pageSize, shortCode, publicOnly). The agent is left without guidance on how these optional parameters interact or which combination is required to identify the group.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), identifies the resource ('recent posts for a group'), and explicitly marks the operation as read-only, clearly distinguishing it from sibling write tools like vrchat_group_post_create/update/delete. It fully conveys what the tool does with no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'read-only' and the focus on 'recent posts' provide clear context for when to use this tool (viewing group posts) and implicitly that it should not be used for mutations. However, it does not name specific alternatives or provide explicit when-not-to-use guidance, just a clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_group_post_updateA
Update a group post. Omitted fields keep their current values; pass roleIds: [] to clear role restrictions. VRChat replaces the whole post on edit, so this reads the most recent 300 posts to recover the fields you did not send. If the post is older than that window, supplying title, text, and visibility still lets the edit land, but it cannot preserve roleIds or imageId and the response reports mergedFromExisting: false. Editing does not re-notify members unless sendNotification is true.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Post body text. | |
| title | No | Post title. | |
| postId | Yes | Post ID from vrchat_group_post_create or vrchat_group_posts_recent. Shaped like a notification ID (not_...). | |
| groupId | No | Exact group ID. Provide groupId or shortCode. | |
| imageId | No | Replace the post image. Omit to keep the current image; pass null to remove it. | |
| roleIds | No | Replace the post role restrictions. Omit to keep the current roles; pass an empty array to clear them. | |
| shortCode | No | Exact group short code. Provide groupId or shortCode. | |
| visibility | No | group restricts the post to members; public shows it on the group page. | |
| sendNotification | No | Re-notify group members about the edit. Defaults to false so corrections stay quiet. |
Output Schema
| Name | Required | Description |
|---|---|---|
| post | No | |
| postId | No | |
| status | Yes | |
| groupId | Yes | |
| mergedFromExisting | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the minimal readOnlyHint: false annotation, the description richly discloses non-obvious behavior: VRChat replaces the whole post, the tool reads the most recent 300 posts to recover omitted fields, older posts cannot preserve roleIds/imageId, mergedFromExisting: false is reported, and editing does not re-notify members unless sendNotification is true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place. Core update behavior is front-loaded, followed by merge-window caveats, the response flag, and notification behavior. There is no filler or repetition of schema data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description need not enumerate return fields. It covers the critical operational context: partial updates, the 300-post recovery window, fallback behavior for older posts, the mergedFromExisting response flag, and the notification toggle. An agent has everything needed to call this safely and interpret edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter. The description adds meaningful update-specific semantics beyond the schema: omitted fields retain current values, roleIds: [] clears restrictions, and the notification side effect is tied to sendNotification. This exceeds the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Update a group post', a specific verb and resource, and immediately clarifies partial-update semantics ('Omitted fields keep their current values'). This clearly separates it from sibling create/delete operations without needing to inspect schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear this tool edits an existing post identified by postId, and explains the merge behavior for omitted fields. It does not explicitly name alternatives like vrchat_group_post_create or vrchat_group_post_delete, nor does it state when not to use this tool, 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.
vrchat_group_profileBRead-only
Get a group profile by groupId or shortCode (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| compact | No | ||
| groupId | No | ||
| shortCode | No | ||
| maxArrayLength | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| group | Yes | |
| stale | Yes | |
| groupId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description redundantly states 'read-only', which is consistent. However, the description does not add other behavioral context like authentication requirements, rate limits, or caching behavior. Given that the annotations cover the primary safety trait, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no unnecessary words. It is front-loaded with the verb and resource, making it easy to scan. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 are not needed. However, with 5 parameters and no description beyond two identifiers, the tool is incomplete for an agent to use without additional context. The description covers core purpose but lacks parameter semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description only mentions groupId and shortCode. It fails to explain the purpose of 'fields', 'compact', and 'maxArrayLength'. With no parameter details, the agent cannot correctly invoke the tool, especially for optional filtering or formatting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'group profile', and the two identifier methods (groupId or shortCode). It distinguishes this as a single-profile fetch tool among multiple group-related siblings, though it could be more explicit about when to use this vs. group search or membership tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies you need either groupId or shortCode, but it does not provide explicit guidance on when to use this tool over alternatives, such as vrchat_groups_search for listing groups. There is no mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_group_rolesARead-only
List group roles or role templates with compact fields (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | roles | |
| groupId | No | ||
| shortCode | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| view | Yes | |
| roles | No | |
| groupId | No | |
| templates | No | |
| totalRoles | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation already declares readOnlyHint=true, and the description reinforces it with 'read-only'. It adds the behavioral detail of returning 'compact fields', but otherwise does not disclose further side effects, permissions, or response behavior beyond what the schema/output schema might provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one compact sentence with the action front-loaded, no filler, and no redundant restating of the tool name. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists and readOnly annotation reduces safety concerns, the description does not adequately cover parameter semantics for identifying a group (groupId vs shortCode). An agent would likely need additional context to invoke this reliably, making it incomplete despite its simple appearance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains the 'view' distinction (roles vs templates) but does not clarify the meaning or usage of 'groupId' or 'shortCode' — for example, whether they are alternatives, required, or how they select the group. This leaves key parameters ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' with a clear resource ('group roles or role templates') and signals 'read-only', which distinguishes it from the sibling management tool vrchat_group_roles_manage. It also notes compact fields, making the output scope explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The statement clearly frames the tool as a read-only listing operation, implying it is for retrieval rather than management. However, it does not explicitly name alternatives or state when not to use it, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_group_roles_manageADestructive
Assign/remove member roles or create/update/delete group role definitions.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Role name. Used by create_role and update_role. | |
| order | No | Display order of the role. update_role only. | |
| action | Yes | ||
| roleId | No | create_role only, and optional there: requests a specific ID for the new role instead of letting VRChat assign one. This is NOT the role being edited — that is groupRoleId. | |
| userId | No | Member to act on. REQUIRED for assign_member_role and remove_member_role. | |
| groupId | No | Target group. Provide groupId or shortCode. | |
| shortCode | No | Target group short code. Provide groupId or shortCode. | |
| description | No | Role description. Used by create_role and update_role. | |
| groupRoleId | No | Existing role to act on. REQUIRED for assign_member_role, remove_member_role, update_role and delete_role. Not used by create_role. | |
| permissions | No | Complete permission list for the role, replacing the previous one. Used by create_role and update_role. Note group-members-remove and group-bans-manage each require group-members-manage on the same role. | |
| isSelfAssignable | No | Whether members can assign this role to themselves. create_role and update_role. |
Output Schema
| Name | Required | Description |
|---|---|---|
| role | No | |
| roles | No | |
| action | Yes | |
| userId | No | |
| groupId | Yes | |
| roleIds | No | |
| groupRoleId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description confirms destructive actions (delete roles, remove assignments). However, it adds no new behavioral context such as permission requirements, side effects, or limitations beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that succinctly captures the full scope of actions. It is front-loaded, has no filler, and covers both role definition management and member role assignment.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, 5 actions), the description along with the rich schema and output schema provides enough context for an agent to understand what the tool handles and how parameters connect to actions. Minor gap: no guidance on when to choose specific actions, but this is partly addressed by the enum descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 91%, so the schema carries the burden of parameter semantics. The description does not add parameter-level detail, but the schema descriptions are thorough, including distinctions like roleId versus groupRoleId and dependency notes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the resource (group roles) and multiple distinct verbs (assign, remove, create, update, delete). It differentiates from sibling tools like vrchat_group_roles by explicitly covering role definition CRUD and member role assignment/removal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor are any exclusions or prerequisites mentioned. The description only states what the tool does, not when it should be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_groups_searchBRead-only
Search groups by name or shortCode (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| maxItems | No | ||
| maxPages | No | ||
| pageSize | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| query | Yes | |
| stale | Yes | |
| groups | Yes | |
| maxPages | Yes | |
| pageSize | Yes | |
| truncated | Yes | |
| totalGroups | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description includes "(read-only)" which aligns with the annotation readOnlyHint=true. It adds that search is by name or shortCode, but no further behavioral traits (e.g., rate limits, result ordering, exact vs. partial matching) are disclosed. With annotations covering the safety profile, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states purpose and constrains search criteria. It is very concise, but could include brief usage guidance without becoming verbose. The structure is effective for minimal information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 parameters, a required query, and an output schema, the description covers only the basic search functionality. It lacks details on search behavior (fuzzy vs. exact, case sensitivity), pagination mechanics, and how results relate to the output schema. The output schema may exist but the description does not leverage it for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the query parameter implicitly (search by name or shortCode), but provides no meaning for maxItems, maxPages, or pageSize. These parameters relate to pagination and result limits, but the description ignores them, leaving agents to infer from names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Search) and the resource (groups) with specific search criteria (by name or shortCode). It also notes the tool is read-only, distinguishing it from mutation tools. Sibling tools like vrchat_group_profile and vrchat_group_members have different purposes, so this tool is well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. Sibling tools like vrchat_group_profile (for a known group) or vrchat_group_events_list (for events) exist, but the description doesn't advise when to choose this search tool over them. No exclusion criteria or use cases are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_instance_createD
Create a new instance.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| region | Yes | ||
| ageGate | No | ||
| groupId | No | ||
| ownerId | No | ||
| roleIds | No | ||
| worldId | Yes | ||
| closedAt | No | ||
| hardClose | No | ||
| inviteOnly | No | ||
| displayName | No | ||
| queueEnabled | No | ||
| calendarEntryId | No | ||
| contentSettings | No | ||
| groupAccessType | No | ||
| canRequestInvite | No | ||
| playerPersistenceEnabled | No | ||
| instancePersistenceEnabled | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| instance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The only behavioral cue is the verb 'create', which aligns with readOnlyHint=false but adds no information beyond the tool name. The description fails to disclose side effects, such as the instance becoming joinable, authorization requirements, or any impact on existing instances, and provides zero behavioral context beyond what annotations already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short and front-loaded, but this is under-specification rather than conciseness. While the single sentence is economical, it contains no structured substance that helps an agent understand the operation, making the brevity detrimental.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex write operation with 18 parameters, nested objects, and an output schema, this description is completely inadequate. It does not explain what an 'instance' means in the VRChat domain, what the required parameters do, or what the expected outcome is, so the agent cannot safely or correctly invoke the tool based on the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description mentions none of the 18 parameters, not even the required worldId, type, and region. An agent receives no explanation of how parameters like groupId, ageGate, inviteOnly, or contentSettings affect the created instance, leaving the schema as the only source of meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new instance' essentially restates the tool name without adding specificity about what kind of instance is being created, what it represents, or how it relates to required parameters like worldId and type. It does not clearly distinguish this tool from sibling instance-related tools, making it a tautological definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as vrchat_instance_link_event, vrcx_instances_recent, or vrchat_group_instances_overview. There is no mention of prerequisites, context, or exclusions, leaving the agent without any selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_instance_link_eventA
Link an allowlisted group instance to its event without notifying.
| Name | Required | Description | Default |
|---|---|---|---|
| groupId | Yes | Owning group. | |
| worldId | Yes | Instance world. | |
| calendarId | Yes | Group event. | |
| instanceId | Yes | Bare instance. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| groupId | Yes | |
| location | Yes | |
| calendarId | Yes | |
| eventTitle | Yes | |
| instanceName | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint=false annotation by disclosing that no notification is sent, which is a meaningful behavioral side-effect. However, it does not mention permission requirements, idempotency, or what happens to a previously linked event, so transparency is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that puts the core action first and includes the important 'without notifying' qualifier. No filler; every word contributes to selecting and invoking the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description and schema together cover the four required parameters and an output schema exists, but terms like 'allowlisted' and 'bare instance' are left unexplained and there is no guidance on preconditions or conflict behavior. It is adequate for a simple linking operation but not richly contextual.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter; the description adds no additional parameter-level meaning. The schema descriptions are terse but present, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (Link), a specific resource (allowlisted group instance), and a target (its event), plus the non-notification qualifier. This clearly distinguishes it from the many event/instance sibling tools like vrchat_instance_create or vrchat_group_event_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case—linking an existing allowlisted instance to a calendar event—and flags the no-notification behavior, but it never explicitly says when to prefer this over create/update tools or states exclusions. An agent must infer the alternatives from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_inviteA
Invite yourself or one/many users to an instance. Users may be usr_ ids or exact display names. Destination is here=true, a full location like "wrld_:instance", or worldId+instanceId. A bare instanceId is not accepted: VRChat needs the worldId and rejects the stripped form.
| Name | Required | Description | Default |
|---|---|---|---|
| here | No | ||
| self | No | ||
| user | No | ||
| retry | No | ||
| users | No | ||
| dryRun | No | ||
| message | No | ||
| worldId | No | ||
| location | No | ||
| instanceId | No | ||
| continueOnError | No | ||
| overwriteMessageSlot | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| sent | Yes | |
| dryRun | Yes | |
| failed | Yes | |
| status | Yes | |
| message | No | |
| results | Yes | |
| skipped | Yes | |
| destination | Yes | |
| totalTargets | Yes | |
| continueOnError | Yes | |
| stoppedAfterFailure | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only providing readOnlyHint=false, the description carries the burden of behavioral disclosure. It adds key quirks: users can be usr_ ids or exact display names, and bare instanceIds are rejected because VRChat needs the worldId. This goes beyond the schema and annotations, though it does not cover auth, rate limits, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences cover purpose, user formats, and destination requirements. Each sentence earns its place, and the most critical rejection rule is highlighted. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 12 parameters with nested objects and an output schema. The description covers the core invite flow and key constraints, but leaves several parameters untranslated. It doesn't mention prerequisites (e.g., whether you must be in the instance) or error handling. The output schema mitigates return-value gaps, but the overall context for advanced use is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain the core parameter relationships: 'here=true', 'location', 'worldId+instanceId', 'user/users', and 'self'. The note about instanceId rejection is valuable. However, advanced parameters (retry, dryRun, continueOnError, message, overwriteMessageSlot) remain unexplained, leaving gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Invite yourself or one/many users to an instance.' It clearly distinguishes this general invite tool from siblings like vrchat_invite_self or vrchat_invite_user by covering both self and multiple users. It also adds details about user identification and destination formats, removing ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use: for inviting self or multiple users to an instance. It explains destination options and the rejected bare instanceId, but does not explicitly name alternatives or state 'use this instead of X'. The sibling names imply separate self/user tools, but the description could be more explicit about trade-offs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_invite_selfB
Invite yourself to an instance (low-risk write).
| Name | Required | Description | Default |
|---|---|---|---|
| worldId | No | ||
| location | No | ||
| instanceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| notification | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, so the tool is a write operation. The description adds 'low-risk write', which characterizes the side effects but does not detail what exactly happens (e.g., joins instance, creates a record). No destructive hint is provided, but the description offers minimal additional transparency beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no unnecessary words. It front-loads the key action and risk level. However, it could benefit from additional structured details (e.g., parameter relationships) without being verbose, potentially reaching 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 3 parameters, lack of required fields, and no output schema visible, the description is too sparse to ensure correct invocation. It does not specify how to combine parameters or the consequences of different combinations. The presence of an output schema (not shown) mitigates this slightly, but the description remains incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema defines 3 parameters (worldId, location, instanceId) with 0% description coverage. The description does not explain the purpose, format, or any dependencies among these parameters. For a tool with no parameter documentation, this is a critical gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'invite yourself' and the resource 'instance'. It distinguishes this tool from sibling invite tools (e.g., vrchat_invite, vrchat_invite_user) by specifying self-invitation. The parenthetical 'low-risk write' further clarifies its safety profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or when not to use it. The 'low-risk write' hint is indirect but insufficient for clear usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_invite_userC
Invite a user to an instance.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | ||
| worldId | No | World of the target instance. Pair with instanceId. | |
| location | No | Full location string like "wrld_:instance". Simplest option when you have it. | |
| instanceId | No | Instance to invite into. Pair with worldId, or pass the full "wrld_:instance" string here. VRChat rejects a bare instance ID on its own. | |
| messageSlot | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| notification | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=false already signals a mutation, and the verb 'invite' aligns with that. No additional behavioral context is provided, such as whether the invitation requires friendship, is reversible, or triggers a notification.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that avoids redundancy. It is appropriately short for a simple statement, though it omits useful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters, an output schema, and several sibling invite tools, yet the description only provides a bare statement of function. It does not explain how to construct an invitation, what prerequisites exist, or how it differs from other invite tools, leaving significant gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema includes descriptions for worldId, location, and instanceId, but the tool description adds no parameter semantics. The missing descriptions for userId and messageSlot are not compensated, leaving the agent to infer from names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action ('invite') and the target ('a user to an instance'), making the core function clear. However, it does not distinguish this from sibling tools like vrchat_invite_user_to_me or vrchat_group_invite.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as vrchat_invite_user_to_me or how to specify the instance (via worldId+instanceId versus location). The schema provides some parameter hints, but the description itself offers no usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_invite_user_to_meA
Invite a user to your current instance. Requires only the target userId; resolves your current location automatically. If you only have a display name, run vrchat_friends_search first to get userId.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | ||
| messageSlot | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| userId | Yes | |
| worldId | Yes | |
| location | Yes | |
| instanceId | Yes | |
| notification | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses automatic resolution of current instance, adding value beyond annotations. However, misses side effects (e.g., notification to user, failure if not in an instance) and rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences with no redundancy. Key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the core action and prerequisite but omits preconditions like being in an instance or user being a friend. Does not differentiate from similar sibling 'vrchat_invite_user'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The userId parameter is adequately described via context, but messageSlot (an optional integer) is not mentioned at all, leaving its purpose unclear despite schema coverage being 0%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (invite) and the target (a user to your current instance). It distinguishes from siblings by highlighting automatic location resolution, which is unique among invite-like tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear prerequisite: if only a display name is known, use vrchat_friends_search first. Lacks explicit exclusions or alternative tools for different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_meARead-only
Get your profile (read-only). Use view=presence/summary/profile presets; provide fields to override. Optionally include a paged list of your groups.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | ||
| fields | No | ||
| compact | No | ||
| groupOffset | No | ||
| groupMaxPages | No | ||
| groupPageSize | No | ||
| includeGroups | No | ||
| maxArrayLength | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| user | Yes | |
| groups | No | |
| userId | Yes | |
| vrcxMemo | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the readOnlyHint annotation by stating 'read-only' and adds behavioral context: view presets control the response shape, fields override presets, and groups can be included as a paged list. This goes beyond what the annotations alone provide without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two succinct sentences with no wasted words. It front-loads the core purpose and read-only nature, then provides the key usage details in a compact, easy-to-scan structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main behaviors: read-only retrieval, view presets, field overrides, and optional group paging. An output schema exists and likely documents return values, but the tool has eight optional parameters and two of them, compact and maxArrayLength, receive no explanation. This leaves the description adequate but incomplete for full parameter understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the eight unnamed parameters. It explains view, fields, and the group-related pagination parameters reasonably well by referencing presets, overrides, and 'a paged list of your groups.' However, compact and maxArrayLength are not explained, leaving notable gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get your profile (read-only).' This clearly identifies the tool as retrieving the caller's own profile rather than another user's or avatar's profile. It does not explicitly name sibling tools such as vrchat_user_profile or vrchat_avatar_profile, so it stops slightly short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage instructions: use view presets, override with fields, and optionally include paged groups. It implies this tool is for the caller's own profile but does not explicitly state when to choose it over alternatives or list exclusions among the many sibling profile/read tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_notifications_recentBRead-only
List recent notifications (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| after | No | ||
| maxItems | No | ||
| maxPages | No | ||
| pageSize | No | ||
| unreadOnly | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| stale | Yes | |
| maxPages | Yes | |
| pageSize | Yes | |
| truncated | Yes | |
| notifications | Yes | |
| totalNotifications | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation 'readOnlyHint: true' already signals safety. The description adds 'read-only' (redundant) and 'recent' implying temporal filtering, but no other behavioral traits (pagination, auth requirements) are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, but it is efficient for a simple list operation. However, it omits parameter details, which could be added without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description lacks details on parameter usage and any behavioral context. For a 6-parameter tool with no schema coverage, this is insufficient 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description mentions nothing about the 6 parameters (type, after, maxItems, etc.). The description fails to add any meaning beyond the schema's property names and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list), resource (notifications), and a qualifier (recent), with 'read-only' indicating no side effects. Among siblings, no other notification list tool exists, so it is well-distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives, but there are no other notification list tools among siblings, so usage context is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_operation_detailsARead-only
Look up exact OpenAPI params and request body schema for a VRChat operationId.
| Name | Required | Description | Default |
|---|---|---|---|
| operationId | Yes | VRChat OpenAPI operationId. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| method | Yes | |
| summary | No | |
| parameters | Yes | |
| description | No | |
| operationId | Yes | |
| requestBody | No | |
| blockedReason | No | |
| curatedToolName | No | |
| generatedToolName | No | |
| generatedToolStatus | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read-only lookup, consistent with the readOnlyHint annotation. It does not add behavioral details beyond what annotations already provide, such as error handling or performance characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence front-loads the tool's purpose with no unnecessary words. Every part of the description earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no nested objects, output schema present), the description is fully sufficient for an agent to understand and invoke the tool correctly. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully documents the single parameter. The description merely restates the parameter's purpose ('VRChat OpenAPI operationId') without adding new meaning, meeting the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Look up' and the resource 'exact OpenAPI params and request body schema for a VRChat operationId', making the tool's purpose unambiguous. It is distinct from sibling tools that perform other VRChat operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs. alternatives, such as when to inspect an operationId versus directly calling the operation. No exclusions or context are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_operationsARead-only
List VRChat OpenAPI operationIds and generated-tool availability for vrchat_read/vrchat_write/vrchat_delete.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Operation kind. | |
| view | No | Show available generated ops or all ops. | |
| limit | No | Max operations. | |
| query | No | Filter operationId, path, summary, or description. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| truncated | Yes | |
| operations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's additional behavioral context is minimal. It correctly indicates a listing operation without contradiction, but does not disclose any further traits like pagination or response details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no extraneous words. It efficiently conveys the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, the description adequately covers its purpose. An output schema exists (though not shown), so return value details are not required. Could potentially mention that the tool provides a list of operation IDs with availability flags, but it's still sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described in the input schema. The description adds no extra meaning beyond the schema; it's a generic overview. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists VRChat OpenAPI operationIds and generated-tool availability, distinguishing it from sibling tools that perform specific read/write/delete actions. It uses a specific verb ('List') and resource ('operationIds and generated-tool availability').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for discovering available operations but provides no explicit guidance on when to use this tool versus alternatives, nor when not to use it. No exclusions or context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_profile_updateB
Update your profile fields (bio, bioLinks, pronouns, userIcon, booping, content filters). Status is preserved automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| bio | No | ||
| bioLinks | No | ||
| pronouns | No | ||
| userIcon | No | ||
| contentFilters | No | ||
| isBoopingEnabled | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| user | Yes | |
| userId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false, so the description carries the transparency burden. It adds the behavioral note 'Status is preserved automatically,' which is helpful. However, it omits other important traits like whether the update is a partial or full replacement, permission requirements, or side effects like overwriting unmentioned fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence under 20 words, front-loading the action and key fields. It's not over-detailed but remains clear. Could benefit from structured bullets or more context for completeness, but it achieves high efficiency for its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 6 optional parameters and an output schema (not shown). The description lists the updatable fields and mentions automatic status preservation, but lacks critical context like whether the tool does a partial update (implied by optional params), typical response format, or error conditions. For a mutation tool, this is adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It lists the field names but provides no additional meaning—no syntax, constraints, examples, or default behaviors. For example, 'booping' is ambiguous (maps to isBoopingEnabled), and no explanation of what the boolean means. This is insufficient for an agent to understand parameter usage without prior domain knowledge.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool's purpose: updating profile fields. It lists the specific fields (bio, bioLinks, pronouns, userIcon, booping, content filters), making the action unambiguous. No sibling tool duplicates this function, so differentiation is effortless.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives, such as vrchat_status_set for status-specific changes. The description lacks 'when not to use' or 'prefer alternative' instructions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_readARead-only
Call an available generated VRChat GET operation by operationId. Use vrchat_operations and vrchat_operation_details to discover params.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Paging controls. | |
| fields | No | Fields to keep. | |
| params | No | OpenAPI params. | |
| compact | No | Compact response. | |
| includeMeta | No | Include URL/page metadata. | |
| operationId | Yes | OpenAPI operationId. | |
| maxArrayLength | No | Max array items. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | VRChat API response data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds that it's a GET operation. No additional behavioral details (e.g., rate limits, caching) are provided, but the read-only nature is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose. No fluff, every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's generic nature and the existence of an output schema, the description is adequate. It explains the basic mechanism (calling generated GET ops) and points to discovery tools, but could elaborate on the generated aspect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains parameters. The description does not add significant semantic value beyond the meta-guidance about parameter discovery via sibling tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool calls a VRChat GET operation by operationId, distinguishing it from write/delete operations. The verb 'call' and resource 'GET operation' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description directs the agent to use vrchat_operations and vrchat_operation_details for parameter discovery, providing explicit guidance. However, it does not explicitly mention when not to use this tool or compare to sibling read tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_status_getARead-only
Get your current status + description (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| userId | No | |
| statusDescription | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true. Description redundantly says 'read-only' but adds no new behavioral context beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words. Front-loaded with action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Zero parameters, output schema present, and read-only annotation make this complete. No missing information for an agent to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters to describe; schema coverage is trivial. The description mentions return content (status+description), which adds value over schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'Get' and resource 'your current status + description'. Distinguishes from sibling 'vrchat_status_set' by read-only nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not guidance, but name and description imply usage for reading status. Alternatives like 'vrchat_status_set' are obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_status_page_overviewARead-only
Compact VRChat status-page overview: up/down state, graph min/max/current values, unresolved + recent incidents, and active + upcoming maintenance (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| maxItems | No | ||
| recentHours | No | ||
| includeGraphs | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| notes | Yes | |
| graphs | Yes | |
| status | Yes | |
| maxItems | Yes | |
| checkedAt | Yes | |
| incidents | Yes | |
| components | Yes | |
| recentHours | Yes | |
| maintenances | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include readOnlyHint=true, and the description reinforces this with '(read-only)'. It also adds behavioral context by disclosing the coverage of the overview: up/down state, graph values, incidents, and maintenance windows, which helps the agent understand what data to expect and that this is a compact summary rather than a detailed operational report.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently uses a colon-delimited list to enumerate the returned content. There is no filler or redundant restating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema covers the return structure, and the description lists the main content areas and read-only nature. However, the lack of parameter semantics and any usage guidance leaves some gaps for an agent deciding how to invoke the tool with the optional arguments.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain the three parameters at all. While the parameter names (maxItems, recentHours, includeGraphs) and schema constraints give some hints, there is ambiguity about what maxItems applies to, what recentHours covers, and what happens when includeGraphs is omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource (VRChat status page) and the specific content delivered: up/down state, graph min/max/current values, unresolved and recent incidents, and active/upcoming maintenance. This is distinct enough from sibling tools such as vrchat_operations or vrcx_db_status to avoid confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The read-only status-page purpose makes the use case fairly obvious, but the description does not explicitly say when to choose this tool over alternatives or mention any exclusions. There is no direct sibling comparison or routing guidance, so the usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_status_setA
Set your status + description (write). Requires status or color (blue/green/orange/red); if both are provided they must agree. Defaults to current user.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | ||
| status | No | ||
| userId | No | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| userId | Yes | |
| statusDescription | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=false, so the description carries the burden. It adds that the tool writes, requires status or color, and defaults to current user. However, it fails to disclose what happens when userId is provided (set someone else's status?) or any authorization needs. The description is decent but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the core action ('Set your status + description (write)') and then adds constraints. It is efficient but could be slightly more structured (e.g., separating parameter explanations). Minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, no required fields, and an output schema, the description covers the primary purpose and key constraints. However, it misses explanations for userId and description parameters, and does not clarify return value (partially mitigated by output schema). Overall adequate but with notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It mentions 'status' and 'color' with enum values (though only color values are listed explicitly) and describes their relationship. It also mentions 'description' in the text. However, userId is completely unexplained, and the roles of each parameter beyond the constraint are vague. Two out of four parameters lack adequate semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Set' and the resource 'your status + description', explicitly marking it as a write operation. It further specifies constraints (requires status or color, agreement if both provided) and defaults to current user, distinguishing it from the related read tool vrchat_status_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for writing status, especially given the sibling read tool (vrchat_status_get). It outlines constraints like requiring status or color and agreement, providing enough context for decision-making. However, it does not explicitly state when to avoid using this tool or mention alternative tools beyond the implicit contrast with get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_system_timeBRead-only
Get current system time (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Paging controls. | |
| fields | No | Fields to keep. | |
| compact | No | Compact response. | |
| includeMeta | No | Include URL/page metadata. | |
| maxArrayLength | No | Max array items. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| data | Yes | |
| page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description repeats the readOnlyHint annotation, which is already provided. It adds no further behavioral details (e.g., return format, rate limits, authentication requirements). Consistent with annotations, so no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words. Front-loaded with key info. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 5 optional parameters and output schema, description is extremely minimal. It doesn't explain the time format, timezone, or why paging/fields are needed. Output schema may help, but description fails to provide sufficient context for effective tool usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds no value for parameters. The parameters (paging, fields, compact, includeMeta, maxArrayLength) are present but not explained, which is confusing for a time-fetching tool. Schema alone doesn't clarify their relevance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Get' and resource 'current system time'. Name reinforces purpose. However, it doesn't explicitly differentiate from sibling tools like vrchat_auth_status or vrchat_status_get, which might also provide time-related info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. The description doesn't specify context, prerequisites, or exclusions. An agent would need to infer usage from name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_user_groupsARead-only
List a user's groups (id + name only, cache-backed).
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| userId | No | ||
| maxPages | No | ||
| pageSize | No | ||
| username | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| stale | Yes | |
| groups | Yes | |
| userId | Yes | |
| maxPages | Yes | |
| pageSize | Yes | |
| truncated | Yes | |
| totalGroups | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. The description adds value by noting the tool is 'cache-backed' (data may be stale) and limits output to 'id + name only', which supplements the read-only nature. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the essential purpose and constraints with no wasted words. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists (documenting return values), the description fails to provide guidance on the 5 parameters, usage context, or how caching affects behavior. For a tool with multiple parameters, this lack of parameter semantics and usage guidelines leaves the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention any of the 5 parameters (offset, userId, maxPages, pageSize, username). Consequently, the description adds no meaning beyond the schema, which is insufficient given the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), the resource ('a user's groups'), and constraints ('id + name only, cache-backed'). It distinguishes this tool from sibling group tools like vrchat_groups_search and vrchat_group_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage via 'cache-backed' suggesting lightweight retrieval, but provides no explicit guidance on when to use this tool vs alternatives like vrchat_groups_search or vrchat_group_members. No when-not-to-use or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_user_profileCRead-only
Get a user profile (read-only). Optionally include a paged list of the user's groups.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| userId | No | ||
| compact | No | ||
| username | No | ||
| groupOffset | No | ||
| groupMaxPages | No | ||
| groupPageSize | No | ||
| includeGroups | No | ||
| maxArrayLength | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| user | Yes | |
| groups | No | |
| userId | Yes | |
| vrcxMemo | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=true, and the description's 'read-only' qualifier is consistent with that, so no contradiction. The description adds the optional paged-groups behavior, which is useful context beyond annotations. However, it discloses nothing about lookup failure, precedence between userId and username, or output-shaping behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the primary purpose stated first and the optional feature second. Zero wasted words. It is efficient, though slightly too terse given it is the only documentation source for a 9-parameter schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema covers return values and readOnlyHint covers safety, but the input side is severely underdocumented: an agent cannot determine how to identify the target user (which of userId or username to use, precedence, mutual exclusivity), what fields/compact/maxArrayLength control, or the semantics of the three group pagination parameters. Inadequate for a 9-param, 0-coverage, 0-required tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the documentation burden for 9 parameters. It conceptually covers the group-related parameters ('paged list of the user's groups' maps to includeGroups, groupOffset, groupMaxPages, groupPageSize), but leaves the core identification parameters (userId vs username), fields, compact, and maxArrayLength entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a user profile') with a read-only qualifier. The 'user' qualifier distinguishes it from sibling profile tools like vrchat_avatar_profile, vrchat_world_profile, and vrchat_group_profile, though it does not explicitly differentiate from vrchat_me or vrchat_user_groups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no alternatives named. With over 70 siblings including the overlapping vrchat_user_groups and vrchat_me, an agent gets no help deciding between this tool and those alternatives. The groups feature is mentioned but not framed as a routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_world_instances_overviewCRead-only
Summarize world instances by access type and region (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| worldId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| stale | Yes | |
| worldId | Yes | |
| instances | Yes | |
| resolvedBy | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description restates the read-only nature already indicated by the readOnlyHint annotation. It adds no additional behavioral context such as authentication requirements, rate limits, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short, which is concise but at the cost of omitting necessary details. It is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameter documentation and no output schema description (though output schema exists), the tool is incomplete for an agent to use correctly. The description lacks context for when to select this over similar tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description provides no explanation of the two parameters 'name' and 'worldId'. The description fails to compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'summarize' and the resource 'world instances' with dimensions by access type and region. It adds '(read-only)' which clarifies the nature. However, it does not explicitly differentiate from the sibling 'vrchat_group_instances_overview', but the resource distinction is implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description lacks any context for usage scenarios, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_world_profileCRead-only
Get a world profile by worldId or name (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| fields | No | ||
| compact | No | ||
| worldId | No | ||
| maxArrayLength | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| stale | Yes | |
| world | Yes | |
| worldId | Yes | |
| vrcxMemo | No | |
| resolvedBy | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the read-only safety profile, so the description's 'read-only' adds no new behavioral information. The description does not disclose behavior around name resolution, ambiguous matches, field filtering, or response shape. With annotations present, the bar for added context is lower, but this description still provides almost nothing beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with the core action and lookup keys front-loaded. It is appropriately concise, though the parenthetical 'read-only' is redundant given the readOnlyHint annotation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has five parameters, zero schema descriptions, no required parameters, and a large sibling set, but the description only addresses two of the parameters. The output schema may document return values, but the description still leaves important input semantics and behavioral context unclear, making it insufficient for fully correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the five parameters. It only explains that 'worldId' and 'name' are lookup identifiers, leaving 'fields', 'compact', and 'maxArrayLength' entirely unexplained. This is partial compensation but not enough for a tool with completely undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Get'), the resource ('world profile'), and the lookup keys ('by worldId or name'). It is unambiguous about what the tool does, but it does not explicitly distinguish itself from related sibling tools like vrchat_worlds_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you have a worldId or name and want the world's profile. However, it does not provide any explicit guidance about when not to use it or which sibling tool to prefer instead, such as vrchat_worlds_search for discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_worlds_favoritesCRead-only
List favorited worlds with compact results (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| sort | No | ||
| notag | No | ||
| order | No | ||
| query | No | ||
| offset | No | ||
| userId | No | ||
| featured | No | ||
| maxItems | No | ||
| maxPages | No | ||
| pageSize | No | ||
| platform | No | ||
| includeTags | No | ||
| releaseStatus | No | ||
| maxUnityVersion | No | ||
| minUnityVersion | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| notes | No | |
| stale | Yes | |
| total | Yes | |
| worlds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the behavioral note 'compact results', which goes beyond the readOnlyHint annotation. However, it does not disclose pagination, rate limiting, or what happens when no favorites exist, so the transparency is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (one sentence), which is concise but lacks structure. It does not break down key behaviors or parameter roles, making it too brief given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 16 parameters and no schema-level parameter descriptions, the description offers no information about filtering, pagination, sorting, or output format. It fails to provide a complete picture for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description provides no explanation of any of the 16 parameters, including important filtering and sorting options. This leaves an agent with no understanding of how to form queries or what each parameter does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists favorited worlds and mentions 'compact results', which hints at a different output format. However, it does not explicitly differentiate from sibling tools like vrchat_favorites (which lists favorites generally) or vrchat_worlds_search, limiting how well an agent can distinguish it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like vrchat_worlds_profile for full details or vrchat_favorites for other favorite types. The description only says 'read-only', which is already annotated, offering no practical usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_worlds_searchCRead-only
Search worlds by name and return compact results (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| sort | No | ||
| notag | No | ||
| order | No | ||
| query | Yes | ||
| offset | No | ||
| featured | No | ||
| maxItems | No | ||
| maxPages | No | ||
| pageSize | No | ||
| platform | No | ||
| includeTags | No | ||
| releaseStatus | No | ||
| maxUnityVersion | No | ||
| minUnityVersion | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| notes | No | |
| query | Yes | |
| stale | Yes | |
| total | Yes | |
| worlds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true. The description adds 'compact results' but does not disclose pagination, rate limits, or other behavioral traits. Minimal added value 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One efficient sentence front-loading the purpose with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description is too brief for a complex tool with 15 parameters and many siblings. It does not explain pagination, filtering options, or result details, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description does not explain any of the 15 parameters. It only mentions 'by name' but fails to describe query, filters, pagination, etc. This is a critical gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches worlds by name and returns compact results. It distinguishes from sibling tools like world profile or favorites, though it does not fully capture that the search can use other filters beyond name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like vrchat_worlds_favorites or vrchat_world_profile. No mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrchat_writeA
Call an available generated VRChat POST/PUT/PATCH operation by operationId. Use vrchat_operations and vrchat_operation_details to discover params/body.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | OpenAPI request body. | |
| params | No | OpenAPI params. | |
| options | No | Write options. | |
| includeMeta | No | Include URL/status/headers. | |
| operationId | Yes | OpenAPI operationId. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | VRChat API response data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint: false), the description adds only that it calls write operations. It fails to disclose behavioral traits like side effects, authentication requirements, rate limits, or error behavior. For a generic wrapper that performs mutations, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with front-loaded purpose and immediate referral to companion tools. No unnecessary words; every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, nested objects, output schema present), the description minimally covers core functionality and directs to discovery tools. However, it omits safety/behavioral context, making it adequate but not complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but descriptions like 'OpenAPI request body' or 'OpenAPI params' are generic. The description adds no additional meaning, only pointing to other tools for discovery. Baseline 3 is appropriate given complete but low-quality schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it calls POST/PUT/PATCH operations by operationId, distinguishing it from sibling tools like vrchat_read (GET) and vrchat_delete (DELETE). The verb 'call' indicates execution, and the resource is specified as 'available generated VRChat operation'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells users to use vrchat_operations and vrchat_operation_details to discover parameters and body, providing clear context for when to use this tool. It does not explicitly exclude other tools, but sibling names (vrchat_read, vrchat_delete) imply the read/delete alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrcx_db_statusARead-only
Detect VRCX on this machine and report database path, active user, and DB version (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| db | Yes | |
| enabled | Yes | |
| worldDb | Yes | |
| vrcxJson | Yes | |
| warnings | No | |
| available | Yes | |
| userPrefix | Yes | |
| activeUserId | Yes | |
| databaseVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'read-only', reinforcing the readOnlyHint annotation, and adds behavioral context beyond it: the tool detects VRCX locally and reports specific database fields. It does not cover failure behavior when VRCX is absent, but for a zero-parameter read-only check this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, compact sentence states the action, scope, and specific outputs with no filler. The essential 'read-only' qualifier is included and the sentence 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only diagnostic tool with an output schema present, the description is sufficiently complete. An agent knows what the tool does, what it reports, and that it is safe to invoke. No additional invocation details are needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description carries no parameter burden. Schema coverage is effectively 100% because the schema is empty and complete for this tool. The description appropriately focuses on the tool's purpose rather than parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action (detect/report) and a concrete resource (VRCX database status), and names the exact outputs: database path, active user, and DB version. It is not a tautology and is easily distinguished from sibling tools like vrcx_memos or vrchat_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies appropriate use: when you need to check whether VRCX is present and obtain its local database information. It does not explicitly name alternatives or exclusions, but the zero-parameter read-only nature and unique scope make the usage context reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrcx_gamelog_world_visits_recentARead-only
List recent world visits from the VRCX gamelog (read-only). This reflects your local VRChat/VRCX activity history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| daysBack | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| from | Yes | |
| limit | Yes | |
| total | Yes | |
| visits | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, and the description reinforces it with '(read-only)' while adding useful context: the data is from a local gamelog and reflects local activity history. This helps the agent understand that the data may differ from live VRChat server state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core operation and source are front-loaded, and the second sentence adds only relevant context about local activity history.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with an output schema and a readOnlyHint annotation, the description is largely complete. It explains the data source and local nature of the data, though it could marginally benefit from noting how limit and daysBack interact or what 'recent' means.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate by explaining parameter behavior. It does not mention 'limit' or 'daysBack' at all. However, the parameter names are fairly self-explanatory and the schema provides min/max constraints, so this is a minor but noticeable gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a specific resource ('world visits'), and a specific source ('VRCX gamelog'). It clearly distinguishes this from sibling tools by emphasizing local VRChat/VRCX activity history, making its scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is appropriate when looking at local activity history, but it does not explicitly state when to use this tool over alternatives or mention any exclusions. No sibling alternative is named or contrasted, so the agent must infer the intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrcx_instances_recentARead-only
List recent instance sessions for your active VRCX account (read-only). Derived from VRCX gamelog OnPlayerLeft entries.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| daysBack | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| from | Yes | |
| limit | Yes | |
| total | Yes | |
| sessions | Yes | |
| truncated | Yes | |
| activeUserId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers safety, and the description adds meaningful context beyond it by revealing the data source (VRCX gamelog OnPlayerLeft entries) and the account scope. This helps the agent understand the data is locally derived from gamelog events rather than a live VRChat API query.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It conveys the action, scope, read-only nature, and data provenance efficiently, covering the essential points without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read-only tool with an output schema, two optional parameters, and a clear annotation, the description is largely sufficient. It provides the key context about the source and scope, though it could be slightly stronger with an explicit usage comparison to sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain limit or daysBack beyond the word 'recent,' which only loosely maps to daysBack. The parameter names are somewhat self-explanatory, but the description does not compensate for the missing schema-level documentation, defaults, or exact meaning of the limit parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a specific resource ('recent instance sessions'), and a clear scope ('your active VRCX account'). It also adds the source ('gamelog OnPlayerLeft entries'), which helps distinguish this tool from the broader VRChat API and sibling VRCX log-based tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving recent instance sessions from a VRCX account and indicates a read-only operation, but it does not explicitly state when to prefer this tool over related siblings like vrcx_gamelog_world_visits_recent or vrcx_user_relationship_sessions. The guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrcx_memos_avatar_getARead-only
Get a VRCX avatar memo by avatarId (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| avatarId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| memo | Yes | |
| avatarId | Yes | |
| editedAt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The 'read-only' phrase matches the readOnlyHint annotation but adds no behavioral detail beyond it. It does not disclose missing-memo behavior or authentication needs, though the annotation already covers the main safety trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler, front-loading the verb and resource before the parameter. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with one required parameter, an output schema, and a readOnlyHint annotation, the description contains everything an agent needs to invoke the tool correctly. Missing details like memo contents are covered by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description's 'by avatarId' is the only explanation of the parameter's role: it is the identifier of the avatar whose memo is fetched. It could add format guidance like an 'avtr_' prefix, but the purpose of the sole required parameter is clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), a specific resource ('VRCX avatar memo'), and the lookup key ('avatarId'), making the action unambiguous. The 'avatar' qualifier also distinguishes it from sibling tools like vrcx_memos_user_get and vrcx_memos_world_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The resource name 'avatar memo' gives clear context for when to call this tool, and the sibling names imply the alternatives for user/world memos. It does not explicitly name an alternative or state exclusions, but for a simple getter the implied routing is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrcx_memos_user_getARead-only
Get a VRCX user memo by userId (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| memo | Yes | |
| userId | Yes | |
| editedAt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description repeats the readOnlyHint annotation ('read-only') but adds no behavioral context beyond it, such as local data source behavior, missing-memo handling, or access requirements. With the annotation already covering safety, the description contributes little extra transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that states the operation, target resource, lookup key, and read-only nature with no filler. All essential information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only getter with an output schema and readOnlyHint annotation, the description covers everything needed to invoke it correctly. Return-value details are already handled by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by explicitly identifying userId as the lookup key for the memo. For a single simple string parameter, this is sufficient to convey the parameter's role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), names the exact resource ('VRCX user memo'), and specifies the lookup key ('by userId'), which clearly distinguishes it from sibling memo tools like vrcx_memos_world_get and vrcx_memos_avatar_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates this tool is for user-scoped memos, so an agent can select it over the world/avatar memo variants. It does not explicitly state exclusions, but the user/world/avatar distinction is apparent from the sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrcx_memos_world_getBRead-only
Get a VRCX world memo by worldId (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| worldId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| memo | Yes | |
| worldId | Yes | |
| editedAt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, and the description merely restates 'read-only' without adding behavioral context beyond it. It discloses nothing about behavior for a missing memo (e.g., null return vs error) or any side effects, so the description adds no value beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence of seven words that delivers the verb, resource, and key. Every word earns its place with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is low-complexity (one required parameter, no nested objects), an output schema exists so return values need not be explained, and the readOnlyHint annotation covers safety. The only notable gaps are the unaddressed missing-memo behavior and the lack of explicit distinction from sibling memo getters, both minor for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining the parameter. It only repeats 'by worldId', which is nearly identical to the property name itself; it does not explain the expected format of a worldId, where to obtain it, or what constitutes a valid value. Minimal added meaning over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a specific resource ('VRCX world memo'), and the lookup key ('by worldId'), making the core function clear. It does not explicitly contrast with the sibling tools vrcx_memos_user_get and vrcx_memos_avatar_get, though the 'world' qualifier alongside the name conveys the entity scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the analogous sibling tools vrcx_memos_user_get or vrcx_memos_avatar_get, and no mention of prerequisites or context. The appropriate usage (when you have a worldId and need its memo) is only implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrcx_user_relationship_sessionsARead-only
List recent shared instance sessions with a user from VRCX logs (read-only). Use this for deep history; results are limited by default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| userId | No | ||
| displayName | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | Yes | |
| query | Yes | |
| total | Yes | |
| sessions | Yes | |
| truncated | Yes | |
| resolvedBy | Yes | |
| resolvedUserId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation already declares readOnlyHint=true, and the description reinforces the read-only nature while adding useful behavioral context: sessions come from VRCX logs and results are limited by default. No contradictions with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one tight sentence that front-loads the action and resource, then adds the key usage and limitation context. Every clause contributes value with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, annotations, and output schema cover the basic read-only listing behavior, but the undocumented parameters and lack of explicit sibling differentiation leave gaps. An agent can probably call it, but not with full confidence about parameter selection or default limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not compensate by explaining what userId, displayName, or limit mean or how they relate. The phrase 'with a user' hints at the user parameters, but the agent is left to infer which identifier to use and how limit behaves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), the resource ('recent shared instance sessions with a user'), and the data source ('from VRCX logs'). It does not explicitly name a sibling tool or explain how it differs from vrcx_user_relationship_summary, but 'deep history' signals a specific scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Use this for deep history' gives a clear context for when this tool is appropriate. However, it does not name alternatives or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vrcx_user_relationship_summaryARead-only
Summarize your relationship history with a user using VRCX logs: time spent, join count, and last seen (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | ||
| displayName | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| hasData | Yes | |
| lastSeen | Yes | |
| joinCount | Yes | |
| resolvedBy | Yes | |
| displayName | Yes | |
| timeSpentMs | Yes | |
| resolvedUserId | Yes | |
| timeSpentHours | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds useful context beyond that: it identifies VRCX logs as the data source and specifies that the summary includes time spent, join count, and last seen. This gives an agent a good sense of the behavior without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one focused sentence that front-loads the core action and includes the key output metrics. There is no filler or redundant elaboration; every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description makes the tool's purpose and read-only nature clear, and an output schema exists to document return shape. However, with two optional parameters and no explanations, it leaves unclear whether the caller must supply at least one identifier and how the parameters interact. This is a meaningful gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention either parameter. It says 'with a user' but does not explain how userId and displayName are used, whether one is sufficient, or what happens if both are omitted. The parameter names are self-evident, but the description adds essentially no semantic guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Summarize') and resource ('relationship history with a user using VRCX logs'), and names concrete output metrics: time spent, join count, and last seen. This clearly differentiates it from siblings like vrcx_user_relationship_sessions, which handles session-level detail rather than a summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context for the tool—summarizing relationship data from VRCX logs—so an agent can infer when it applies. However, it does not explicitly state when to choose this over alternatives such as vrcx_user_relationship_sessions, vrcx_memos_user_get, or vrchat_friend_details, nor does it mention any exclusions or prerequisites.
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. Dates show when Glama detected each change.
21 tool updates
v0.1.13- Changed
vrchat_avatar_profile4 fields changed- removed
Output schema / properties / vrcxMemo / properties / editedAt / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / vrcxMemo / properties / editedAt / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / vrcxMemo / properties / memo / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / vrcxMemo / properties / memo / typeAdded value: +[ + "string", + "null" +]
- Changed
vrchat_event_create2 fields changed- changed
Input schema / properties / endsAt / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - changed
Input schema / properties / startsAt / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
- Changed
vrchat_event_update2 fields changed- changed
Input schema / properties / endsAt / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - changed
Input schema / properties / startsAt / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
- Changed
vrchat_friend_details3 fields changed- changed
Output schema / properties / instance / anyOfPrevious value: -[ - { - "additionalProperties": {}, - "properties": { - "calendarEntryId": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "canRequestInvite": { - "default": true, - "type": "boolean" - }, - "capacity": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "displayName": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "full": { - "default": false, - "type": "boolean" - }, - "groupAccessType": { - "default": "members", - "enum": [ - "members", - "plus", - "public" - ], - "type": "string" - }, - "hasCapacityForYou": { - "type": "boolean" - }, - "id": { - "type": "string" - }, - "instanceId": { - "type": "string" - }, - "location": { - "type": "string" - }, - "n_users": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "name": { - "minLength": 1, - "type": "string" - }, - "photonRegion": { - "enum": [ - "eu", - "jp", - "unknown", - "us", - "use", - "usw", - "usx" - ], - "type": "string" - }, - "queueEnabled": { - "type": "boolean" - }, - "queueSize": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "recommendedCapacity": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "region": { - "enum": [ - "eu", - "jp", - "unknown", - "us", - "use", - "usw", - "usx" - ], - "type": "string" - }, - "shortName": { - "anyOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "enum": [ - "friends", - "group", - "hidden", - "private", - "public" - ], - "type": "string" - }, - "userCount": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "worldId": { - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "calendarEntryId": { + "type": [ + "string", + "null" + ] + }, + "canRequestInvite": { + "default": true, + "type": "boolean" + }, + "capacity": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "displayName": { + "type": [ + "string", + "null" + ] + }, + "full": { + "default": false, + "type": "boolean" + }, + "groupAccessType": { + "default": "members", + "enum": [ + "members", + "plus", + "public" + ], + "type": "string" + }, + "hasCapacityForYou": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "instanceId": { + "type": "string" + }, + "location": { + "type": "string" + }, + "n_users": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "photonRegion": { + "enum": [ + "eu", + "jp", + "unknown", + "us", + "use", + "usw", + "usx" + ], + "type": "string" + }, + "queueEnabled": { + "type": "boolean" + }, + "queueSize": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "recommendedCapacity": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "region": { + "enum": [ + "eu", + "jp", + "unknown", + "us", + "use", + "usw", + "usx" + ], + "type": "string" + }, + "shortName": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "enum": [ + "friends", + "group", + "hidden", + "private", + "public" + ], + "type": "string" + }, + "userCount": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "worldId": { + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - removed
Output schema / properties / location / properties / raw / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / location / properties / raw / typeAdded value: +[ + "string", + "null" +]
- Changed
vrchat_friends_overview3 fields changed- changed
Output schema / properties / locations / items / properties / instance / anyOfPrevious value: -[ - { - "additionalProperties": {}, - "properties": { - "calendarEntryId": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "canRequestInvite": { - "default": true, - "type": "boolean" - }, - "capacity": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "displayName": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "full": { - "default": false, - "type": "boolean" - }, - "groupAccessType": { - "default": "members", - "enum": [ - "members", - "plus", - "public" - ], - "type": "string" - }, - "hasCapacityForYou": { - "type": "boolean" - }, - "id": { - "type": "string" - }, - "instanceId": { - "type": "string" - }, - "location": { - "type": "string" - }, - "n_users": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "name": { - "minLength": 1, - "type": "string" - }, - "photonRegion": { - "enum": [ - "eu", - "jp", - "unknown", - "us", - "use", - "usw", - "usx" - ], - "type": "string" - }, - "queueEnabled": { - "type": "boolean" - }, - "queueSize": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "recommendedCapacity": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "region": { - "enum": [ - "eu", - "jp", - "unknown", - "us", - "use", - "usw", - "usx" - ], - "type": "string" - }, - "shortName": { - "anyOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "enum": [ - "friends", - "group", - "hidden", - "private", - "public" - ], - "type": "string" - }, - "userCount": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "worldId": { - "type": "string" - } - }, - "type": "object" - }, - { - "additionalProperties": {}, - "propertyNames": { - "type": "string" - }, - "type": "object" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "calendarEntryId": { + "type": [ + "string", + "null" + ] + }, + "canRequestInvite": { + "default": true, + "type": "boolean" + }, + "capacity": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "displayName": { + "type": [ + "string", + "null" + ] + }, + "full": { + "default": false, + "type": "boolean" + }, + "groupAccessType": { + "default": "members", + "enum": [ + "members", + "plus", + "public" + ], + "type": "string" + }, + "hasCapacityForYou": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "instanceId": { + "type": "string" + }, + "location": { + "type": "string" + }, + "n_users": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "photonRegion": { + "enum": [ + "eu", + "jp", + "unknown", + "us", + "use", + "usw", + "usx" + ], + "type": "string" + }, + "queueEnabled": { + "type": "boolean" + }, + "queueSize": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "recommendedCapacity": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "region": { + "enum": [ + "eu", + "jp", + "unknown", + "us", + "use", + "usw", + "usx" + ], + "type": "string" + }, + "shortName": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "enum": [ + "friends", + "group", + "hidden", + "private", + "public" + ], + "type": "string" + }, + "userCount": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "worldId": { + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } +] - removed
Output schema / properties / locations / items / properties / raw / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / locations / items / properties / raw / typeAdded value: +[ + "string", + "null" +]
- Added
vrchat_gallery_image_upload - Changed
vrchat_group_post_update2 fields changed- removed
Input schema / properties / imageId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / imageId / typeAdded value: +[ + "string", + "null" +]
- Changed
vrchat_instance_create10 fields changed- changed
Input schema / properties / closedAt / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - removed
Input schema / properties / displayName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / displayName / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / instancePersistenceEnabled / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / instancePersistenceEnabled / typeAdded value: +[ + "boolean", + "null" +] - removed
Input schema / properties / ownerId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / ownerId / typeAdded value: +[ + "string", + "null" +] - removed
Input schema / properties / playerPersistenceEnabled / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / playerPersistenceEnabled / typeAdded value: +[ + "boolean", + "null" +] - changed
Output schema / properties / instance / anyOfPrevious value: -[ - { - "additionalProperties": {}, - "properties": { - "calendarEntryId": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "canRequestInvite": { - "default": true, - "type": "boolean" - }, - "capacity": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "displayName": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "full": { - "default": false, - "type": "boolean" - }, - "groupAccessType": { - "default": "members", - "enum": [ - "members", - "plus", - "public" - ], - "type": "string" - }, - "hasCapacityForYou": { - "type": "boolean" - }, - "id": { - "type": "string" - }, - "instanceId": { - "type": "string" - }, - "location": { - "type": "string" - }, - "n_users": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "name": { - "minLength": 1, - "type": "string" - }, - "photonRegion": { - "enum": [ - "eu", - "jp", - "unknown", - "us", - "use", - "usw", - "usx" - ], - "type": "string" - }, - "queueEnabled": { - "type": "boolean" - }, - "queueSize": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "recommendedCapacity": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "region": { - "enum": [ - "eu", - "jp", - "unknown", - "us", - "use", - "usw", - "usx" - ], - "type": "string" - }, - "shortName": { - "anyOf": [ - { - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "enum": [ - "friends", - "group", - "hidden", - "private", - "public" - ], - "type": "string" - }, - "userCount": { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "worldId": { - "type": "string" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "calendarEntryId": { + "type": [ + "string", + "null" + ] + }, + "canRequestInvite": { + "default": true, + "type": "boolean" + }, + "capacity": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "displayName": { + "type": [ + "string", + "null" + ] + }, + "full": { + "default": false, + "type": "boolean" + }, + "groupAccessType": { + "default": "members", + "enum": [ + "members", + "plus", + "public" + ], + "type": "string" + }, + "hasCapacityForYou": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "instanceId": { + "type": "string" + }, + "location": { + "type": "string" + }, + "n_users": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "photonRegion": { + "enum": [ + "eu", + "jp", + "unknown", + "us", + "use", + "usw", + "usx" + ], + "type": "string" + }, + "queueEnabled": { + "type": "boolean" + }, + "queueSize": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "recommendedCapacity": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "region": { + "enum": [ + "eu", + "jp", + "unknown", + "us", + "use", + "usw", + "usx" + ], + "type": "string" + }, + "shortName": { + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "enum": [ + "friends", + "group", + "hidden", + "private", + "public" + ], + "type": "string" + }, + "userCount": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "worldId": { + "type": "string" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Added
vrchat_instance_link_event - Changed
vrchat_me4 fields changed- removed
Output schema / properties / vrcxMemo / properties / editedAt / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / vrcxMemo / properties / editedAt / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / vrcxMemo / properties / memo / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / vrcxMemo / properties / memo / typeAdded value: +[ + "string", + "null" +]
- Changed
vrchat_status_page_overview12 fields changed- removed
Output schema / properties / graphs / items / properties / current / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / graphs / items / properties / current / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / graphs / items / properties / max / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / graphs / items / properties / max / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / graphs / items / properties / min / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / graphs / items / properties / min / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / graphs / items / properties / overlayCurrent / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / graphs / items / properties / overlayCurrent / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / graphs / items / properties / overlayMax / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / graphs / items / properties / overlayMax / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / graphs / items / properties / overlayMin / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / graphs / items / properties / overlayMin / typeAdded value: +[ + "number", + "null" +]
- Changed
vrchat_user_profile4 fields changed- removed
Output schema / properties / vrcxMemo / properties / editedAt / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / vrcxMemo / properties / editedAt / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / vrcxMemo / properties / memo / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / vrcxMemo / properties / memo / typeAdded value: +[ + "string", + "null" +]
- Changed
vrchat_world_profile4 fields changed- removed
Output schema / properties / vrcxMemo / properties / editedAt / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / vrcxMemo / properties / editedAt / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / vrcxMemo / properties / memo / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / vrcxMemo / properties / memo / typeAdded value: +[ + "string", + "null" +]
- Changed
vrcx_db_status10 fields changed- removed
Output schema / properties / activeUserId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / activeUserId / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / db / properties / path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / db / properties / path / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / userPrefix / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / userPrefix / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / vrcxJson / properties / path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / vrcxJson / properties / path / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / worldDb / properties / path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / worldDb / properties / path / typeAdded value: +[ + "string", + "null" +]
- Changed
vrcx_gamelog_world_visits_recent2 fields changed- removed
Output schema / properties / visits / items / properties / groupName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / visits / items / properties / groupName / typeAdded value: +[ + "string", + "null" +]
- Changed
vrcx_instances_recent4 fields changed- removed
Output schema / properties / sessions / items / properties / groupName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / sessions / items / properties / groupName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / sessions / items / properties / joinTime / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / sessions / items / properties / joinTime / typeAdded value: +[ + "string", + "null" +]
- Changed
vrcx_memos_avatar_get4 fields changed- removed
Output schema / properties / editedAt / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / editedAt / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / memo / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / memo / typeAdded value: +[ + "string", + "null" +]
- Changed
vrcx_memos_user_get4 fields changed- removed
Output schema / properties / editedAt / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / editedAt / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / memo / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / memo / typeAdded value: +[ + "string", + "null" +]
- Changed
vrcx_memos_world_get4 fields changed- removed
Output schema / properties / editedAt / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / editedAt / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / memo / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / memo / typeAdded value: +[ + "string", + "null" +]
- Changed
vrcx_user_relationship_sessions6 fields changed- removed
Output schema / properties / resolvedUserId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / resolvedUserId / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / sessions / items / properties / groupName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / sessions / items / properties / groupName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / sessions / items / properties / joinTime / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / sessions / items / properties / joinTime / typeAdded value: +[ + "string", + "null" +]
- Changed
vrcx_user_relationship_summary6 fields changed- removed
Output schema / properties / displayName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / displayName / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / lastSeen / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / lastSeen / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / resolvedUserId / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / resolvedUserId / typeAdded value: +[ + "string", + "null" +]
8 tool updates
v0.1.10- Added
vrchat_avatar_update - Added
vrchat_group_post_create - Added
vrchat_group_post_delete - Added
vrchat_group_post_update - Changed
vrchat_group_posts_recent2 fields changed- added
Output schema / properties / posts / items / properties / imageIdAdded value: +{ + "type": "string" +} - added
Output schema / properties / posts / items / properties / roleIdsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
vrchat_group_roles3 fields changed- changed
Output schema / properties / roles / items / properties / permissions / items / enumPrevious value: -[ - "*", - "group-announcement-manage", - "group-audit-view", - "group-bans-manage", - "group-calendar-manage", - "group-data-manage", - "group-default-role-manage", - "group-galleries-manage", - "group-instance-age-gated-create", - "group-instance-calendar-link", - "group-instance-join", - "group-instance-manage", - "group-instance-moderate", - "group-instance-open-create", - "group-instance-plus-create", - "group-instance-plus-portal", - "group-instance-plus-portal-unlocked", - "group-instance-public-create", - "group-instance-queue-priority", - "group-instance-restricted-create", - "group-invites-manage", - "group-members-manage", - "group-members-remove", - "group-members-viewall", - "group-roles-assign", - "group-roles-manage" -]New value: +[ + "*", + "group-announcement-manage", + "group-audit-view", + "group-bans-manage", + "group-calendar-manage", + "group-data-manage", + "group-default-role-manage", + "group-galleries-manage", + "group-instance-age-gated-create", + "group-instance-announcement-create", + "group-instance-bypass-avatar-performance", + "group-instance-calendar-link", + "group-instance-join", + "group-instance-manage", + "group-instance-moderate", + "group-instance-open-create", + "group-instance-plus-create", + "group-instance-plus-portal", + "group-instance-plus-portal-unlocked", + "group-instance-public-create", + "group-instance-queue-priority", + "group-instance-restricted-create", + "group-invites-manage", + "group-members-manage", + "group-members-remove", + "group-members-viewall", + "group-roles-assign", + "group-roles-manage" +] - changed
Output schema / properties / templates / additionalProperties / properties / basePermissions / items / enumPrevious value: -[ - "*", - "group-announcement-manage", - "group-audit-view", - "group-bans-manage", - "group-calendar-manage", - "group-data-manage", - "group-default-role-manage", - "group-galleries-manage", - "group-instance-age-gated-create", - "group-instance-calendar-link", - "group-instance-join", - "group-instance-manage", - "group-instance-moderate", - "group-instance-open-create", - "group-instance-plus-create", - "group-instance-plus-portal", - "group-instance-plus-portal-unlocked", - "group-instance-public-create", - "group-instance-queue-priority", - "group-instance-restricted-create", - "group-invites-manage", - "group-members-manage", - "group-members-remove", - "group-members-viewall", - "group-roles-assign", - "group-roles-manage" -]New value: +[ + "*", + "group-announcement-manage", + "group-audit-view", + "group-bans-manage", + "group-calendar-manage", + "group-data-manage", + "group-default-role-manage", + "group-galleries-manage", + "group-instance-age-gated-create", + "group-instance-announcement-create", + "group-instance-bypass-avatar-performance", + "group-instance-calendar-link", + "group-instance-join", + "group-instance-manage", + "group-instance-moderate", + "group-instance-open-create", + "group-instance-plus-create", + "group-instance-plus-portal", + "group-instance-plus-portal-unlocked", + "group-instance-public-create", + "group-instance-queue-priority", + "group-instance-restricted-create", + "group-invites-manage", + "group-members-manage", + "group-members-remove", + "group-members-viewall", + "group-roles-assign", + "group-roles-manage" +] - changed
Output schema / properties / templates / additionalProperties / properties / roles / properties / basePermissions / items / enumPrevious value: -[ - "*", - "group-announcement-manage", - "group-audit-view", - "group-bans-manage", - "group-calendar-manage", - "group-data-manage", - "group-default-role-manage", - "group-galleries-manage", - "group-instance-age-gated-create", - "group-instance-calendar-link", - "group-instance-join", - "group-instance-manage", - "group-instance-moderate", - "group-instance-open-create", - "group-instance-plus-create", - "group-instance-plus-portal", - "group-instance-plus-portal-unlocked", - "group-instance-public-create", - "group-instance-queue-priority", - "group-instance-restricted-create", - "group-invites-manage", - "group-members-manage", - "group-members-remove", - "group-members-viewall", - "group-roles-assign", - "group-roles-manage" -]New value: +[ + "*", + "group-announcement-manage", + "group-audit-view", + "group-bans-manage", + "group-calendar-manage", + "group-data-manage", + "group-default-role-manage", + "group-galleries-manage", + "group-instance-age-gated-create", + "group-instance-announcement-create", + "group-instance-bypass-avatar-performance", + "group-instance-calendar-link", + "group-instance-join", + "group-instance-manage", + "group-instance-moderate", + "group-instance-open-create", + "group-instance-plus-create", + "group-instance-plus-portal", + "group-instance-plus-portal-unlocked", + "group-instance-public-create", + "group-instance-queue-priority", + "group-instance-restricted-create", + "group-invites-manage", + "group-members-manage", + "group-members-remove", + "group-members-viewall", + "group-roles-assign", + "group-roles-manage" +]
- Changed
vrchat_group_roles_manage15 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / actionAdded value: +{ + "enum": [ + "assign_member_role", + "remove_member_role", + "create_role", + "update_role", + "delete_role" + ], + "type": "string" +} - added
Input schema / properties / descriptionAdded value: +{ + "description": "Role description. Used by create_role and update_role.", + "type": "string" +} - added
Input schema / properties / groupIdAdded value: +{ + "description": "Target group. Provide groupId or shortCode.", + "type": "string" +} - added
Input schema / properties / groupRoleIdAdded value: +{ + "description": "Existing role to act on. REQUIRED for assign_member_role, remove_member_role, update_role and delete_role. Not used by create_role.", + "type": "string" +} - added
Input schema / properties / isSelfAssignableAdded value: +{ + "description": "Whether members can assign this role to themselves. create_role and update_role.", + "type": "boolean" +} - added
Input schema / properties / nameAdded value: +{ + "description": "Role name. Used by create_role and update_role.", + "type": "string" +} - added
Input schema / properties / orderAdded value: +{ + "description": "Display order of the role. update_role only.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +} - added
Input schema / properties / permissionsAdded value: +{ + "description": "Complete permission list for the role, replacing the previous one. Used by create_role and update_role. Note group-members-remove and group-bans-manage each require group-members-manage on the same role.", + "items": { + "enum": [ + "*", + "group-announcement-manage", + "group-audit-view", + "group-bans-manage", + "group-calendar-manage", + "group-data-manage", + "group-default-role-manage", + "group-galleries-manage", + "group-instance-age-gated-create", + "group-instance-announcement-create", + "group-instance-bypass-avatar-performance", + "group-instance-calendar-link", + "group-instance-join", + "group-instance-manage", + "group-instance-moderate", + "group-instance-open-create", + "group-instance-plus-create", + "group-instance-plus-portal", + "group-instance-plus-portal-unlocked", + "group-instance-public-create", + "group-instance-queue-priority", + "group-instance-restricted-create", + "group-invites-manage", + "group-members-manage", + "group-members-remove", + "group-members-viewall", + "group-roles-assign", + "group-roles-manage" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / roleIdAdded value: +{ + "description": "create_role only, and optional there: requests a specific ID for the new role instead of letting VRChat assign one. This is NOT the role being edited — that is groupRoleId.", + "type": "string" +} - added
Input schema / properties / shortCodeAdded value: +{ + "description": "Target group short code. Provide groupId or shortCode.", + "type": "string" +} - added
Input schema / properties / userIdAdded value: +{ + "description": "Member to act on. REQUIRED for assign_member_role and remove_member_role.", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "action" +] - changed
Output schema / properties / role / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "description": { - "type": "string" - }, - "isManagementRole": { - "type": "boolean" - }, - "isSelfAssignable": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "order": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "permissions": { - "items": { - "enum": [ - "*", - "group-announcement-manage", - "group-audit-view", - "group-bans-manage", - "group-calendar-manage", - "group-data-manage", - "group-default-role-manage", - "group-galleries-manage", - "group-instance-age-gated-create", - "group-instance-calendar-link", - "group-instance-join", - "group-instance-manage", - "group-instance-moderate", - "group-instance-open-create", - "group-instance-plus-create", - "group-instance-plus-portal", - "group-instance-plus-portal-unlocked", - "group-instance-public-create", - "group-instance-queue-priority", - "group-instance-restricted-create", - "group-invites-manage", - "group-members-manage", - "group-members-remove", - "group-members-viewall", - "group-roles-assign", - "group-roles-manage" - ], - "type": "string" - }, - "type": "array" - }, - "roleId": { - "type": "string" - } - }, - "required": [ - "roleId" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "isManagementRole": { + "type": "boolean" + }, + "isSelfAssignable": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "order": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "permissions": { + "items": { + "enum": [ + "*", + "group-announcement-manage", + "group-audit-view", + "group-bans-manage", + "group-calendar-manage", + "group-data-manage", + "group-default-role-manage", + "group-galleries-manage", + "group-instance-age-gated-create", + "group-instance-announcement-create", + "group-instance-bypass-avatar-performance", + "group-instance-calendar-link", + "group-instance-join", + "group-instance-manage", + "group-instance-moderate", + "group-instance-open-create", + "group-instance-plus-create", + "group-instance-plus-portal", + "group-instance-plus-portal-unlocked", + "group-instance-public-create", + "group-instance-queue-priority", + "group-instance-restricted-create", + "group-invites-manage", + "group-members-manage", + "group-members-remove", + "group-members-viewall", + "group-roles-assign", + "group-roles-manage" + ], + "type": "string" + }, + "type": "array" + }, + "roleId": { + "type": "string" + } + }, + "required": [ + "roleId" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / roles / items / properties / permissions / items / enumPrevious value: -[ - "*", - "group-announcement-manage", - "group-audit-view", - "group-bans-manage", - "group-calendar-manage", - "group-data-manage", - "group-default-role-manage", - "group-galleries-manage", - "group-instance-age-gated-create", - "group-instance-calendar-link", - "group-instance-join", - "group-instance-manage", - "group-instance-moderate", - "group-instance-open-create", - "group-instance-plus-create", - "group-instance-plus-portal", - "group-instance-plus-portal-unlocked", - "group-instance-public-create", - "group-instance-queue-priority", - "group-instance-restricted-create", - "group-invites-manage", - "group-members-manage", - "group-members-remove", - "group-members-viewall", - "group-roles-assign", - "group-roles-manage" -]New value: +[ + "*", + "group-announcement-manage", + "group-audit-view", + "group-bans-manage", + "group-calendar-manage", + "group-data-manage", + "group-default-role-manage", + "group-galleries-manage", + "group-instance-age-gated-create", + "group-instance-announcement-create", + "group-instance-bypass-avatar-performance", + "group-instance-calendar-link", + "group-instance-join", + "group-instance-manage", + "group-instance-moderate", + "group-instance-open-create", + "group-instance-plus-create", + "group-instance-plus-portal", + "group-instance-plus-portal-unlocked", + "group-instance-public-create", + "group-instance-queue-priority", + "group-instance-restricted-create", + "group-invites-manage", + "group-members-manage", + "group-members-remove", + "group-members-viewall", + "group-roles-assign", + "group-roles-manage" +]
- Changed
vrchat_invite_user3 fields changed- added
Input schema / properties / instanceId / descriptionAdded value: +"Instance to invite into. Pair with worldId, or pass the full \"wrld_:instance\" string here. VRChat rejects a bare instance ID on its own." - added
Input schema / properties / location / descriptionAdded value: +"Full location string like \"wrld_:instance\". Simplest option when you have it." - added
Input schema / properties / worldIdAdded value: +{ + "description": "World of the target instance. Pair with instanceId.", + "type": "string" +}
65 tool updates
v0.1.8- First observed
vrchat_auth_begin - First observed
vrchat_auth_logout - First observed
vrchat_auth_status - First observed
vrchat_avatar_profile - First observed
vrchat_boop - First observed
vrchat_cache_invalidate - First observed
vrchat_config_get - First observed
vrchat_delete - First observed
vrchat_event_create - First observed
vrchat_event_delete - First observed
vrchat_event_follow - First observed
vrchat_event_update - First observed
vrchat_events_discover - First observed
vrchat_events_search - First observed
vrchat_events_upcoming - First observed
vrchat_favorite_add - First observed
vrchat_favorite_remove - First observed
vrchat_favorites - First observed
vrchat_friend_details - First observed
vrchat_friend_request - First observed
vrchat_friends_list - First observed
vrchat_friends_overview - First observed
vrchat_friends_search - First observed
vrchat_group_event_get - First observed
vrchat_group_event_next - First observed
vrchat_group_events_list - First observed
vrchat_group_events_upcoming - First observed
vrchat_group_instances_overview - First observed
vrchat_group_invite - First observed
vrchat_group_members - First observed
vrchat_group_posts_recent - First observed
vrchat_group_profile - First observed
vrchat_group_roles - First observed
vrchat_group_roles_manage - First observed
vrchat_groups_search - First observed
vrchat_instance_create - First observed
vrchat_invite - First observed
vrchat_invite_self - First observed
vrchat_invite_user - First observed
vrchat_invite_user_to_me - First observed
vrchat_me - First observed
vrchat_notifications_recent - First observed
vrchat_operation_details - First observed
vrchat_operations - First observed
vrchat_profile_update - First observed
vrchat_read - First observed
vrchat_status_get - First observed
vrchat_status_page_overview - First observed
vrchat_status_set - First observed
vrchat_system_time - First observed
vrchat_user_groups - First observed
vrchat_user_profile - First observed
vrchat_world_instances_overview - First observed
vrchat_world_profile - First observed
vrchat_worlds_favorites - First observed
vrchat_worlds_search - First observed
vrchat_write - First observed
vrcx_db_status - First observed
vrcx_gamelog_world_visits_recent - First observed
vrcx_instances_recent - First observed
vrcx_memos_avatar_get - First observed
vrcx_memos_user_get - First observed
vrcx_memos_world_get - First observed
vrcx_user_relationship_sessions - First observed
vrcx_user_relationship_summary
TDQS
Multiple tools have overlapping purposes: vrchat_friends_list, vrchat_friends_search, vrchat_friends_overview, and vrchat_friend_details all retrieve friend information with subtle differences. Similarly, vrchat_invite is a generic catch-all that makes vrchat_invite_user and vrchat_invite_self redundant. The generic vrchat_read/write/delete also overlap with specific operations, creating substantial ambiguity for agent selection.
The tools consistently use snake_case with domain prefixes like vrchat_ and vrcx_. Read operations often drop the 'get' verb (e.g., vrchat_world_profile) while writes include verbs (e.g., vrchat_event_create). A few outliers like vrchat_boop, vrchat_me, and vrchat_read/write/delete break the pattern, but overall the naming is systematic and predictable.
At 69 tools, the server is far beyond the recommended range. While VRChat's API is broad, the tool set bundles many small operations (e.g., separate tools for every group/event action) plus generic OpenAPI passthrough tools, making the surface overwhelming and hard to navigate.
The tool set covers most VRChat domains: profile, friends, groups, events, posts, instances, worlds, avatars, favorites, and notifications. The inclusion of generic vrchat_read/write/delete with operation discovery ensures that any OpenAPI endpoint can be accessed, so there are no obvious dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
The official Planning Center MCP server for interacting with your ministry's data.
The official MCP Server for the Mux API
MCP server to assist with JxBrowser development.
- SupabaseOAuthcom.supabase
MCP server for interacting with the Supabase platform
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA basic MCP server implementation for testing purposes. Communicates via stdio and is designed to work with MCP-compliant clients.-
- FlicenseNot gradedqualityCmaintenanceMCP server for Signal via signal-cli that enables sending and receiving messages, managing contacts and groups, and reacting over stdio.15-
- AlicenseAqualityCmaintenanceMCP server for Rocket.Chat — messages, DMs, search, files, and channels over stdio121MIT
- AlicenseNot gradedqualityBmaintenanceZero-dependency MCP server and CLI that proxies, inspects, and analyzes JSON-RPC message streams between MCP clients and servers.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/BASIC-BIT/vrchat-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server