@basicbit/vrchat-mcp 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +1 -1
  3. package/dist/package.json +4 -3
  4. package/dist/src/auth/index.js +4 -1
  5. package/dist/src/auth/index.js.map +1 -1
  6. package/dist/src/core/generatedToolOverrides.js +4 -0
  7. package/dist/src/core/generatedToolOverrides.js.map +1 -1
  8. package/dist/src/core/operationPolicy.js +19 -1
  9. package/dist/src/core/operationPolicy.js.map +1 -1
  10. package/dist/src/generated/vrchat-schemas.js +3 -1
  11. package/dist/src/generated/vrchat-schemas.js.map +1 -1
  12. package/dist/src/models/avatars.js +85 -0
  13. package/dist/src/models/avatars.js.map +1 -1
  14. package/dist/src/models/groups.js +92 -0
  15. package/dist/src/models/groups.js.map +1 -1
  16. package/dist/src/models/invites.js +31 -2
  17. package/dist/src/models/invites.js.map +1 -1
  18. package/dist/src/models/status.js +4 -2
  19. package/dist/src/models/status.js.map +1 -1
  20. package/dist/src/services/api/client.js +5 -0
  21. package/dist/src/services/api/client.js.map +1 -1
  22. package/dist/src/services/avatars/index.js +166 -1
  23. package/dist/src/services/avatars/index.js.map +1 -1
  24. package/dist/src/services/groups/index.js +1 -0
  25. package/dist/src/services/groups/index.js.map +1 -1
  26. package/dist/src/services/groups/posts.js +0 -0
  27. package/dist/src/services/groups/posts.js.map +1 -0
  28. package/dist/src/services/invites/curated.js +35 -16
  29. package/dist/src/services/invites/curated.js.map +1 -1
  30. package/dist/src/tools/curated/avatars.js +41 -3
  31. package/dist/src/tools/curated/avatars.js.map +1 -1
  32. package/dist/src/tools/curated/groupPosts.js +173 -0
  33. package/dist/src/tools/curated/groupPosts.js.map +1 -0
  34. package/dist/src/tools/curated/groups.js +3 -42
  35. package/dist/src/tools/curated/groups.js.map +1 -1
  36. package/dist/src/tools/curated/invites.js +1 -1
  37. package/dist/src/tools/curated/invites.js.map +1 -1
  38. package/dist/src/tools/raw.js +5 -1
  39. package/dist/src/tools/raw.js.map +1 -1
  40. package/dist/src/tools/registerAllTools.js +2 -0
  41. package/dist/src/tools/registerAllTools.js.map +1 -1
  42. package/docs/curated-tools.md +18 -0
  43. package/docs/robust-notes.md +9 -1
  44. package/docs/spec-drift.md +71 -0
  45. package/docs/tools.md +664 -239
  46. package/package.json +4 -3
  47. package/server.json +2 -2
package/docs/tools.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Tool Catalog (generated)
2
2
 
3
- Generated: 2026-07-21T08:48:10.759Z
3
+ Generated: 2026-08-03T05:13:46.752Z
4
4
 
5
5
  Spec: VRChat API Documentation (1.20.7)
6
6
 
@@ -102,6 +102,132 @@ Output schema:
102
102
  }
103
103
  ```
104
104
 
105
+ ### vrchat_avatar_update
106
+ 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 creators work against their terms, leak a private avatar, or breach VRChats content policy depending on what the avatar contains. Going private breaks the avatar for everyone currently wearing it. Use dryRun to preview. (write, destructive)
107
+
108
+ Input schema:
109
+
110
+ ```json
111
+ {
112
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
113
+ "type": "object",
114
+ "properties": {
115
+ "avatar": {
116
+ "type": "string",
117
+ "minLength": 1,
118
+ "description": "Avatar to edit: an avtr_ ID, or the exact name of one of your own avatars."
119
+ },
120
+ "name": {
121
+ "description": "New name for the avatar.",
122
+ "type": "string",
123
+ "minLength": 1
124
+ },
125
+ "description": {
126
+ "description": "New description. Pass \"\" to clear it.",
127
+ "type": "string"
128
+ },
129
+ "releaseStatus": {
130
+ "description": "Publication state. Risky in both directions — see the tool description before changing it.",
131
+ "type": "string",
132
+ "enum": [
133
+ "public",
134
+ "private",
135
+ "hidden"
136
+ ]
137
+ },
138
+ "addTags": {
139
+ "description": "Content tags to add. Merged into the existing tags; nothing else is removed.",
140
+ "minItems": 1,
141
+ "type": "array",
142
+ "items": {
143
+ "type": "string",
144
+ "enum": [
145
+ "content_sex",
146
+ "content_adult",
147
+ "content_violence",
148
+ "content_gore",
149
+ "content_horror"
150
+ ]
151
+ }
152
+ },
153
+ "removeTags": {
154
+ "description": "Content tags to remove. Other tags, including author tags, are left alone.",
155
+ "minItems": 1,
156
+ "type": "array",
157
+ "items": {
158
+ "type": "string",
159
+ "enum": [
160
+ "content_sex",
161
+ "content_adult",
162
+ "content_violence",
163
+ "content_gore",
164
+ "content_horror"
165
+ ]
166
+ }
167
+ },
168
+ "clearContentTags": {
169
+ "description": "Remove every content_* tag, including any this build does not know about.",
170
+ "type": "boolean"
171
+ },
172
+ "dryRun": {
173
+ "description": "Compute and return the exact change without writing it.",
174
+ "type": "boolean"
175
+ }
176
+ },
177
+ "required": [
178
+ "avatar"
179
+ ],
180
+ "additionalProperties": false
181
+ }
182
+ ```
183
+
184
+ Output schema:
185
+
186
+ ```json
187
+ {
188
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
189
+ "type": "object",
190
+ "properties": {
191
+ "avatarId": {
192
+ "type": "string"
193
+ },
194
+ "name": {
195
+ "type": "string"
196
+ },
197
+ "dryRun": {
198
+ "type": "boolean"
199
+ },
200
+ "status": {
201
+ "type": "string",
202
+ "enum": [
203
+ "updated",
204
+ "unchanged"
205
+ ]
206
+ },
207
+ "changes": {
208
+ "type": "object",
209
+ "propertyNames": {
210
+ "type": "string"
211
+ },
212
+ "additionalProperties": {}
213
+ },
214
+ "tags": {
215
+ "type": "array",
216
+ "items": {
217
+ "type": "string"
218
+ }
219
+ }
220
+ },
221
+ "required": [
222
+ "avatarId",
223
+ "dryRun",
224
+ "status",
225
+ "tags"
226
+ ],
227
+ "additionalProperties": false
228
+ }
229
+ ```
230
+
105
231
  ### vrchat_boop
106
232
  Send boops to one or many users. Users may be usr_ ids or exact display names. (write)
107
233
 
@@ -4011,8 +4137,8 @@ Output schema:
4011
4137
  }
4012
4138
  ```
4013
4139
 
4014
- ### vrchat_group_posts_recent
4015
- List recent posts for a group (read-only). (read-only)
4140
+ ### vrchat_group_post_create
4141
+ Create a group post (announcement). Does not notify members unless sendNotification is true. (write)
4016
4142
 
4017
4143
  Input schema:
4018
4144
 
@@ -4021,31 +4147,163 @@ Input schema:
4021
4147
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4022
4148
  "type": "object",
4023
4149
  "properties": {
4150
+ "title": {
4151
+ "type": "string",
4152
+ "minLength": 1,
4153
+ "description": "Post title."
4154
+ },
4155
+ "text": {
4156
+ "type": "string",
4157
+ "minLength": 1,
4158
+ "description": "Post body text."
4159
+ },
4160
+ "visibility": {
4161
+ "type": "string",
4162
+ "enum": [
4163
+ "group",
4164
+ "public"
4165
+ ],
4166
+ "description": "group restricts the post to members; public shows it on the group page."
4167
+ },
4168
+ "roleIds": {
4169
+ "type": "array",
4170
+ "items": {
4171
+ "type": "string"
4172
+ },
4173
+ "description": "Restrict the post to these group roles. Omit to show it to everyone who can see the post."
4174
+ },
4175
+ "imageId": {
4176
+ "type": "string",
4177
+ "description": "Existing VRChat file ID to attach as the post image."
4178
+ },
4179
+ "sendNotification": {
4180
+ "description": "Notify group members. Defaults to false; set true only when the post warrants a ping.",
4181
+ "default": false,
4182
+ "type": "boolean"
4183
+ },
4184
+ "groupId": {
4185
+ "type": "string",
4186
+ "description": "Exact group ID. Provide groupId or shortCode."
4187
+ },
4188
+ "shortCode": {
4189
+ "type": "string",
4190
+ "description": "Exact group short code. Provide groupId or shortCode."
4191
+ }
4192
+ },
4193
+ "required": [
4194
+ "title",
4195
+ "text",
4196
+ "visibility"
4197
+ ],
4198
+ "additionalProperties": false
4199
+ }
4200
+ ```
4201
+
4202
+ Output schema:
4203
+
4204
+ ```json
4205
+ {
4206
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4207
+ "type": "object",
4208
+ "properties": {
4209
+ "status": {
4210
+ "type": "string",
4211
+ "enum": [
4212
+ "created",
4213
+ "updated",
4214
+ "deleted"
4215
+ ]
4216
+ },
4024
4217
  "groupId": {
4025
4218
  "type": "string"
4026
4219
  },
4027
- "shortCode": {
4220
+ "postId": {
4028
4221
  "type": "string"
4029
4222
  },
4030
- "publicOnly": {
4223
+ "mergedFromExisting": {
4031
4224
  "type": "boolean"
4032
4225
  },
4033
- "pageSize": {
4034
- "type": "integer",
4035
- "minimum": 1,
4036
- "maximum": 100
4226
+ "post": {
4227
+ "anyOf": [
4228
+ {
4229
+ "type": "object",
4230
+ "properties": {
4231
+ "id": {
4232
+ "type": "string"
4233
+ },
4234
+ "title": {
4235
+ "type": "string"
4236
+ },
4237
+ "text": {
4238
+ "type": "string"
4239
+ },
4240
+ "createdAt": {
4241
+ "type": "string"
4242
+ },
4243
+ "updatedAt": {
4244
+ "type": "string"
4245
+ },
4246
+ "authorId": {
4247
+ "type": "string"
4248
+ },
4249
+ "visibility": {
4250
+ "type": "string"
4251
+ },
4252
+ "roleIds": {
4253
+ "type": "array",
4254
+ "items": {
4255
+ "type": "string"
4256
+ }
4257
+ },
4258
+ "imageId": {
4259
+ "type": "string"
4260
+ }
4261
+ },
4262
+ "required": [
4263
+ "id"
4264
+ ],
4265
+ "additionalProperties": false
4266
+ },
4267
+ {
4268
+ "type": "null"
4269
+ }
4270
+ ]
4271
+ }
4272
+ },
4273
+ "required": [
4274
+ "status",
4275
+ "groupId"
4276
+ ],
4277
+ "additionalProperties": false
4278
+ }
4279
+ ```
4280
+
4281
+ ### vrchat_group_post_delete
4282
+ Delete a group post. Members already notified about it are not un-notified. (write, destructive)
4283
+
4284
+ Input schema:
4285
+
4286
+ ```json
4287
+ {
4288
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4289
+ "type": "object",
4290
+ "properties": {
4291
+ "groupId": {
4292
+ "type": "string",
4293
+ "description": "Exact group ID. Provide groupId or shortCode."
4037
4294
  },
4038
- "maxPages": {
4039
- "type": "integer",
4040
- "minimum": 1,
4041
- "maximum": 100
4295
+ "shortCode": {
4296
+ "type": "string",
4297
+ "description": "Exact group short code. Provide groupId or shortCode."
4042
4298
  },
4043
- "maxItems": {
4044
- "type": "integer",
4045
- "minimum": 1,
4046
- "maximum": 9007199254740991
4299
+ "postId": {
4300
+ "type": "string",
4301
+ "description": "Post ID to delete."
4047
4302
  }
4048
4303
  },
4304
+ "required": [
4305
+ "postId"
4306
+ ],
4049
4307
  "additionalProperties": false
4050
4308
  }
4051
4309
  ```
@@ -4057,18 +4315,286 @@ Output schema:
4057
4315
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4058
4316
  "type": "object",
4059
4317
  "properties": {
4318
+ "status": {
4319
+ "type": "string",
4320
+ "enum": [
4321
+ "created",
4322
+ "updated",
4323
+ "deleted"
4324
+ ]
4325
+ },
4060
4326
  "groupId": {
4061
4327
  "type": "string"
4062
4328
  },
4063
- "pageSize": {
4064
- "type": "integer",
4065
- "minimum": 1,
4066
- "maximum": 9007199254740991
4329
+ "postId": {
4330
+ "type": "string"
4067
4331
  },
4068
- "maxPages": {
4069
- "type": "integer",
4070
- "minimum": 1,
4071
- "maximum": 9007199254740991
4332
+ "mergedFromExisting": {
4333
+ "type": "boolean"
4334
+ },
4335
+ "post": {
4336
+ "anyOf": [
4337
+ {
4338
+ "type": "object",
4339
+ "properties": {
4340
+ "id": {
4341
+ "type": "string"
4342
+ },
4343
+ "title": {
4344
+ "type": "string"
4345
+ },
4346
+ "text": {
4347
+ "type": "string"
4348
+ },
4349
+ "createdAt": {
4350
+ "type": "string"
4351
+ },
4352
+ "updatedAt": {
4353
+ "type": "string"
4354
+ },
4355
+ "authorId": {
4356
+ "type": "string"
4357
+ },
4358
+ "visibility": {
4359
+ "type": "string"
4360
+ },
4361
+ "roleIds": {
4362
+ "type": "array",
4363
+ "items": {
4364
+ "type": "string"
4365
+ }
4366
+ },
4367
+ "imageId": {
4368
+ "type": "string"
4369
+ }
4370
+ },
4371
+ "required": [
4372
+ "id"
4373
+ ],
4374
+ "additionalProperties": false
4375
+ },
4376
+ {
4377
+ "type": "null"
4378
+ }
4379
+ ]
4380
+ }
4381
+ },
4382
+ "required": [
4383
+ "status",
4384
+ "groupId"
4385
+ ],
4386
+ "additionalProperties": false
4387
+ }
4388
+ ```
4389
+
4390
+ ### vrchat_group_post_update
4391
+ 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. (write)
4392
+
4393
+ Input schema:
4394
+
4395
+ ```json
4396
+ {
4397
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4398
+ "type": "object",
4399
+ "properties": {
4400
+ "title": {
4401
+ "type": "string",
4402
+ "minLength": 1,
4403
+ "description": "Post title."
4404
+ },
4405
+ "text": {
4406
+ "type": "string",
4407
+ "minLength": 1,
4408
+ "description": "Post body text."
4409
+ },
4410
+ "visibility": {
4411
+ "type": "string",
4412
+ "enum": [
4413
+ "group",
4414
+ "public"
4415
+ ],
4416
+ "description": "group restricts the post to members; public shows it on the group page."
4417
+ },
4418
+ "roleIds": {
4419
+ "type": "array",
4420
+ "items": {
4421
+ "type": "string"
4422
+ },
4423
+ "description": "Replace the post role restrictions. Omit to keep the current roles; pass an empty array to clear them."
4424
+ },
4425
+ "imageId": {
4426
+ "anyOf": [
4427
+ {
4428
+ "type": "string"
4429
+ },
4430
+ {
4431
+ "type": "null"
4432
+ }
4433
+ ],
4434
+ "description": "Replace the post image. Omit to keep the current image; pass null to remove it."
4435
+ },
4436
+ "sendNotification": {
4437
+ "description": "Re-notify group members about the edit. Defaults to false so corrections stay quiet.",
4438
+ "default": false,
4439
+ "type": "boolean"
4440
+ },
4441
+ "groupId": {
4442
+ "type": "string",
4443
+ "description": "Exact group ID. Provide groupId or shortCode."
4444
+ },
4445
+ "shortCode": {
4446
+ "type": "string",
4447
+ "description": "Exact group short code. Provide groupId or shortCode."
4448
+ },
4449
+ "postId": {
4450
+ "type": "string",
4451
+ "description": "Post ID from vrchat_group_post_create or vrchat_group_posts_recent. Shaped like a notification ID (not_...)."
4452
+ }
4453
+ },
4454
+ "required": [
4455
+ "postId"
4456
+ ],
4457
+ "additionalProperties": false
4458
+ }
4459
+ ```
4460
+
4461
+ Output schema:
4462
+
4463
+ ```json
4464
+ {
4465
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4466
+ "type": "object",
4467
+ "properties": {
4468
+ "status": {
4469
+ "type": "string",
4470
+ "enum": [
4471
+ "created",
4472
+ "updated",
4473
+ "deleted"
4474
+ ]
4475
+ },
4476
+ "groupId": {
4477
+ "type": "string"
4478
+ },
4479
+ "postId": {
4480
+ "type": "string"
4481
+ },
4482
+ "mergedFromExisting": {
4483
+ "type": "boolean"
4484
+ },
4485
+ "post": {
4486
+ "anyOf": [
4487
+ {
4488
+ "type": "object",
4489
+ "properties": {
4490
+ "id": {
4491
+ "type": "string"
4492
+ },
4493
+ "title": {
4494
+ "type": "string"
4495
+ },
4496
+ "text": {
4497
+ "type": "string"
4498
+ },
4499
+ "createdAt": {
4500
+ "type": "string"
4501
+ },
4502
+ "updatedAt": {
4503
+ "type": "string"
4504
+ },
4505
+ "authorId": {
4506
+ "type": "string"
4507
+ },
4508
+ "visibility": {
4509
+ "type": "string"
4510
+ },
4511
+ "roleIds": {
4512
+ "type": "array",
4513
+ "items": {
4514
+ "type": "string"
4515
+ }
4516
+ },
4517
+ "imageId": {
4518
+ "type": "string"
4519
+ }
4520
+ },
4521
+ "required": [
4522
+ "id"
4523
+ ],
4524
+ "additionalProperties": false
4525
+ },
4526
+ {
4527
+ "type": "null"
4528
+ }
4529
+ ]
4530
+ }
4531
+ },
4532
+ "required": [
4533
+ "status",
4534
+ "groupId"
4535
+ ],
4536
+ "additionalProperties": false
4537
+ }
4538
+ ```
4539
+
4540
+ ### vrchat_group_posts_recent
4541
+ List recent posts for a group (read-only). (read-only)
4542
+
4543
+ Input schema:
4544
+
4545
+ ```json
4546
+ {
4547
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4548
+ "type": "object",
4549
+ "properties": {
4550
+ "groupId": {
4551
+ "type": "string"
4552
+ },
4553
+ "shortCode": {
4554
+ "type": "string"
4555
+ },
4556
+ "publicOnly": {
4557
+ "type": "boolean"
4558
+ },
4559
+ "pageSize": {
4560
+ "type": "integer",
4561
+ "minimum": 1,
4562
+ "maximum": 100
4563
+ },
4564
+ "maxPages": {
4565
+ "type": "integer",
4566
+ "minimum": 1,
4567
+ "maximum": 100
4568
+ },
4569
+ "maxItems": {
4570
+ "type": "integer",
4571
+ "minimum": 1,
4572
+ "maximum": 9007199254740991
4573
+ }
4574
+ },
4575
+ "additionalProperties": false
4576
+ }
4577
+ ```
4578
+
4579
+ Output schema:
4580
+
4581
+ ```json
4582
+ {
4583
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4584
+ "type": "object",
4585
+ "properties": {
4586
+ "groupId": {
4587
+ "type": "string"
4588
+ },
4589
+ "pageSize": {
4590
+ "type": "integer",
4591
+ "minimum": 1,
4592
+ "maximum": 9007199254740991
4593
+ },
4594
+ "maxPages": {
4595
+ "type": "integer",
4596
+ "minimum": 1,
4597
+ "maximum": 9007199254740991
4072
4598
  },
4073
4599
  "totalPosts": {
4074
4600
  "type": "integer",
@@ -4142,6 +4668,15 @@ Output schema:
4142
4668
  },
4143
4669
  "visibility": {
4144
4670
  "type": "string"
4671
+ },
4672
+ "roleIds": {
4673
+ "type": "array",
4674
+ "items": {
4675
+ "type": "string"
4676
+ }
4677
+ },
4678
+ "imageId": {
4679
+ "type": "string"
4145
4680
  }
4146
4681
  },
4147
4682
  "required": [
@@ -4312,6 +4847,8 @@ Output schema:
4312
4847
  "group-default-role-manage",
4313
4848
  "group-galleries-manage",
4314
4849
  "group-instance-age-gated-create",
4850
+ "group-instance-announcement-create",
4851
+ "group-instance-bypass-avatar-performance",
4315
4852
  "group-instance-calendar-link",
4316
4853
  "group-instance-join",
4317
4854
  "group-instance-manage",
@@ -4367,6 +4904,8 @@ Output schema:
4367
4904
  "group-default-role-manage",
4368
4905
  "group-galleries-manage",
4369
4906
  "group-instance-age-gated-create",
4907
+ "group-instance-announcement-create",
4908
+ "group-instance-bypass-avatar-performance",
4370
4909
  "group-instance-calendar-link",
4371
4910
  "group-instance-join",
4372
4911
  "group-instance-manage",
@@ -4416,6 +4955,8 @@ Output schema:
4416
4955
  "group-default-role-manage",
4417
4956
  "group-galleries-manage",
4418
4957
  "group-instance-age-gated-create",
4958
+ "group-instance-announcement-create",
4959
+ "group-instance-bypass-avatar-performance",
4419
4960
  "group-instance-calendar-link",
4420
4961
  "group-instance-join",
4421
4962
  "group-instance-manage",
@@ -4463,221 +5004,98 @@ Input schema:
4463
5004
  ```json
4464
5005
  {
4465
5006
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4466
- "oneOf": [
4467
- {
4468
- "type": "object",
4469
- "properties": {
4470
- "action": {
4471
- "type": "string",
4472
- "const": "assign_member_role"
4473
- },
4474
- "groupId": {
4475
- "type": "string"
4476
- },
4477
- "shortCode": {
4478
- "type": "string"
4479
- },
4480
- "userId": {
4481
- "type": "string"
4482
- },
4483
- "groupRoleId": {
4484
- "type": "string"
4485
- }
4486
- },
4487
- "required": [
4488
- "action",
4489
- "userId",
4490
- "groupRoleId"
4491
- ],
4492
- "additionalProperties": false
5007
+ "type": "object",
5008
+ "properties": {
5009
+ "action": {
5010
+ "type": "string",
5011
+ "enum": [
5012
+ "assign_member_role",
5013
+ "remove_member_role",
5014
+ "create_role",
5015
+ "update_role",
5016
+ "delete_role"
5017
+ ]
4493
5018
  },
4494
- {
4495
- "type": "object",
4496
- "properties": {
4497
- "action": {
4498
- "type": "string",
4499
- "const": "remove_member_role"
4500
- },
4501
- "groupId": {
4502
- "type": "string"
4503
- },
4504
- "shortCode": {
4505
- "type": "string"
4506
- },
4507
- "userId": {
4508
- "type": "string"
4509
- },
4510
- "groupRoleId": {
4511
- "type": "string"
4512
- }
4513
- },
4514
- "required": [
4515
- "action",
4516
- "userId",
4517
- "groupRoleId"
4518
- ],
4519
- "additionalProperties": false
5019
+ "groupId": {
5020
+ "description": "Target group. Provide groupId or shortCode.",
5021
+ "type": "string"
4520
5022
  },
4521
- {
4522
- "type": "object",
4523
- "properties": {
4524
- "name": {
4525
- "type": "string"
4526
- },
4527
- "description": {
4528
- "type": "string"
4529
- },
4530
- "permissions": {
4531
- "type": "array",
4532
- "items": {
4533
- "type": "string",
4534
- "enum": [
4535
- "*",
4536
- "group-announcement-manage",
4537
- "group-audit-view",
4538
- "group-bans-manage",
4539
- "group-calendar-manage",
4540
- "group-data-manage",
4541
- "group-default-role-manage",
4542
- "group-galleries-manage",
4543
- "group-instance-age-gated-create",
4544
- "group-instance-calendar-link",
4545
- "group-instance-join",
4546
- "group-instance-manage",
4547
- "group-instance-moderate",
4548
- "group-instance-open-create",
4549
- "group-instance-plus-create",
4550
- "group-instance-plus-portal",
4551
- "group-instance-plus-portal-unlocked",
4552
- "group-instance-public-create",
4553
- "group-instance-queue-priority",
4554
- "group-instance-restricted-create",
4555
- "group-invites-manage",
4556
- "group-members-manage",
4557
- "group-members-remove",
4558
- "group-members-viewall",
4559
- "group-roles-assign",
4560
- "group-roles-manage"
4561
- ]
4562
- }
4563
- },
4564
- "isSelfAssignable": {
4565
- "type": "boolean"
4566
- },
4567
- "action": {
4568
- "type": "string",
4569
- "const": "create_role"
4570
- },
4571
- "groupId": {
4572
- "type": "string"
4573
- },
4574
- "shortCode": {
4575
- "type": "string"
4576
- },
4577
- "roleId": {
4578
- "type": "string"
4579
- }
4580
- },
4581
- "required": [
4582
- "action"
4583
- ],
4584
- "additionalProperties": false
5023
+ "shortCode": {
5024
+ "description": "Target group short code. Provide groupId or shortCode.",
5025
+ "type": "string"
4585
5026
  },
4586
- {
4587
- "type": "object",
4588
- "properties": {
4589
- "name": {
4590
- "type": "string"
4591
- },
4592
- "description": {
4593
- "type": "string"
4594
- },
4595
- "permissions": {
4596
- "type": "array",
4597
- "items": {
4598
- "type": "string",
4599
- "enum": [
4600
- "*",
4601
- "group-announcement-manage",
4602
- "group-audit-view",
4603
- "group-bans-manage",
4604
- "group-calendar-manage",
4605
- "group-data-manage",
4606
- "group-default-role-manage",
4607
- "group-galleries-manage",
4608
- "group-instance-age-gated-create",
4609
- "group-instance-calendar-link",
4610
- "group-instance-join",
4611
- "group-instance-manage",
4612
- "group-instance-moderate",
4613
- "group-instance-open-create",
4614
- "group-instance-plus-create",
4615
- "group-instance-plus-portal",
4616
- "group-instance-plus-portal-unlocked",
4617
- "group-instance-public-create",
4618
- "group-instance-queue-priority",
4619
- "group-instance-restricted-create",
4620
- "group-invites-manage",
4621
- "group-members-manage",
4622
- "group-members-remove",
4623
- "group-members-viewall",
4624
- "group-roles-assign",
4625
- "group-roles-manage"
4626
- ]
4627
- }
4628
- },
4629
- "isSelfAssignable": {
4630
- "type": "boolean"
4631
- },
4632
- "action": {
4633
- "type": "string",
4634
- "const": "update_role"
4635
- },
4636
- "groupId": {
4637
- "type": "string"
4638
- },
4639
- "shortCode": {
4640
- "type": "string"
4641
- },
4642
- "groupRoleId": {
4643
- "type": "string"
4644
- },
4645
- "order": {
4646
- "type": "integer",
4647
- "minimum": -9007199254740991,
4648
- "maximum": 9007199254740991
4649
- }
4650
- },
4651
- "required": [
4652
- "action",
4653
- "groupRoleId"
4654
- ],
4655
- "additionalProperties": false
5027
+ "userId": {
5028
+ "description": "Member to act on. REQUIRED for assign_member_role and remove_member_role.",
5029
+ "type": "string"
4656
5030
  },
4657
- {
4658
- "type": "object",
4659
- "properties": {
4660
- "action": {
4661
- "type": "string",
4662
- "const": "delete_role"
4663
- },
4664
- "groupId": {
4665
- "type": "string"
4666
- },
4667
- "shortCode": {
4668
- "type": "string"
4669
- },
4670
- "groupRoleId": {
4671
- "type": "string"
4672
- }
4673
- },
4674
- "required": [
4675
- "action",
4676
- "groupRoleId"
4677
- ],
4678
- "additionalProperties": false
5031
+ "groupRoleId": {
5032
+ "description": "Existing role to act on. REQUIRED for assign_member_role, remove_member_role, update_role and delete_role. Not used by create_role.",
5033
+ "type": "string"
5034
+ },
5035
+ "roleId": {
5036
+ "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.",
5037
+ "type": "string"
5038
+ },
5039
+ "name": {
5040
+ "description": "Role name. Used by create_role and update_role.",
5041
+ "type": "string"
5042
+ },
5043
+ "description": {
5044
+ "description": "Role description. Used by create_role and update_role.",
5045
+ "type": "string"
5046
+ },
5047
+ "permissions": {
5048
+ "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.",
5049
+ "type": "array",
5050
+ "items": {
5051
+ "type": "string",
5052
+ "enum": [
5053
+ "*",
5054
+ "group-announcement-manage",
5055
+ "group-audit-view",
5056
+ "group-bans-manage",
5057
+ "group-calendar-manage",
5058
+ "group-data-manage",
5059
+ "group-default-role-manage",
5060
+ "group-galleries-manage",
5061
+ "group-instance-age-gated-create",
5062
+ "group-instance-announcement-create",
5063
+ "group-instance-bypass-avatar-performance",
5064
+ "group-instance-calendar-link",
5065
+ "group-instance-join",
5066
+ "group-instance-manage",
5067
+ "group-instance-moderate",
5068
+ "group-instance-open-create",
5069
+ "group-instance-plus-create",
5070
+ "group-instance-plus-portal",
5071
+ "group-instance-plus-portal-unlocked",
5072
+ "group-instance-public-create",
5073
+ "group-instance-queue-priority",
5074
+ "group-instance-restricted-create",
5075
+ "group-invites-manage",
5076
+ "group-members-manage",
5077
+ "group-members-remove",
5078
+ "group-members-viewall",
5079
+ "group-roles-assign",
5080
+ "group-roles-manage"
5081
+ ]
5082
+ }
5083
+ },
5084
+ "isSelfAssignable": {
5085
+ "description": "Whether members can assign this role to themselves. create_role and update_role.",
5086
+ "type": "boolean"
5087
+ },
5088
+ "order": {
5089
+ "description": "Display order of the role. update_role only.",
5090
+ "type": "integer",
5091
+ "minimum": -9007199254740991,
5092
+ "maximum": 9007199254740991
4679
5093
  }
4680
- ]
5094
+ },
5095
+ "required": [
5096
+ "action"
5097
+ ],
5098
+ "additionalProperties": false
4681
5099
  }
4682
5100
  ```
4683
5101
 
@@ -4739,6 +5157,8 @@ Output schema:
4739
5157
  "group-default-role-manage",
4740
5158
  "group-galleries-manage",
4741
5159
  "group-instance-age-gated-create",
5160
+ "group-instance-announcement-create",
5161
+ "group-instance-bypass-avatar-performance",
4742
5162
  "group-instance-calendar-link",
4743
5163
  "group-instance-join",
4744
5164
  "group-instance-manage",
@@ -4809,6 +5229,8 @@ Output schema:
4809
5229
  "group-default-role-manage",
4810
5230
  "group-galleries-manage",
4811
5231
  "group-instance-age-gated-create",
5232
+ "group-instance-announcement-create",
5233
+ "group-instance-bypass-avatar-performance",
4812
5234
  "group-instance-calendar-link",
4813
5235
  "group-instance-join",
4814
5236
  "group-instance-manage",
@@ -5315,7 +5737,7 @@ Output schema:
5315
5737
  ```
5316
5738
 
5317
5739
  ### vrchat_invite
5318
- Invite yourself or one/many users to an instance. Users may be usr_ ids or exact display names. Supports here=true, full location, worldId+instanceId, or bare instanceId for user invites. (write)
5740
+ 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. (write)
5319
5741
 
5320
5742
  Input schema:
5321
5743
 
@@ -5617,10 +6039,16 @@ Input schema:
5617
6039
  "userId": {
5618
6040
  "type": "string"
5619
6041
  },
6042
+ "worldId": {
6043
+ "description": "World of the target instance. Pair with instanceId.",
6044
+ "type": "string"
6045
+ },
5620
6046
  "instanceId": {
6047
+ "description": "Instance to invite into. Pair with worldId, or pass the full \"wrld_:instance\" string here. VRChat rejects a bare instance ID on its own.",
5621
6048
  "type": "string"
5622
6049
  },
5623
6050
  "location": {
6051
+ "description": "Full location string like \"wrld_:instance\". Simplest option when you have it.",
5624
6052
  "type": "string"
5625
6053
  },
5626
6054
  "messageSlot": {
@@ -9154,7 +9582,6 @@ Generated output uses a compact envelope; exact API response content is under `d
9154
9582
  - `acceptFriendRequest` via `vrchat_write` (PUT /auth/user/notifications/{notificationId}/accept) - Write VRChat API: Accept Friend Request.
9155
9583
  - `acknowledgeNotificationV2` via `vrchat_write` (POST /notifications/{notificationId}/see) - Write VRChat API: Acknowledge NotificationV2.
9156
9584
  - `addGroupGalleryImage` via `vrchat_write` (POST /groups/{groupId}/galleries/{groupGalleryId}/images) - Write VRChat API: Add Group Gallery Image.
9157
- - `addGroupPost` via `vrchat_write` (POST /groups/{groupId}/posts) - Write VRChat API: Create a post in a Group.
9158
9585
  - `addTags` via `vrchat_write` (POST /users/{userId}/addTags) - Write VRChat API: Add User Tags.
9159
9586
  - `banGroupMember` via `vrchat_write` (POST /groups/{groupId}/bans) - Write VRChat API: Ban Group Member.
9160
9587
  - `blockGroup` via `vrchat_write` (POST /groups/{groupId}/block) - Write VRChat API: Block Group.
@@ -9204,7 +9631,6 @@ Generated output uses a compact envelope; exact API response content is under `d
9204
9631
  - `updateGroup` via `vrchat_write` (PUT /groups/{groupId}) - Write VRChat API: Update Group.
9205
9632
  - `updateGroupGallery` via `vrchat_write` (PUT /groups/{groupId}/galleries/{groupGalleryId}) - Write VRChat API: Update Group Gallery.
9206
9633
  - `updateGroupMember` via `vrchat_write` (PUT /groups/{groupId}/members/{userId}) - Write VRChat API: Update Group Member.
9207
- - `updateGroupPost` via `vrchat_write` (PUT /groups/{groupId}/posts/{notificationId}) - Write VRChat API: Edits a Group post.
9208
9634
  - `updateGroupRepresentation` via `vrchat_write` (PUT /groups/{groupId}/representation) - Write VRChat API: Update Group Representation.
9209
9635
  - `updateInviteMessage` via `vrchat_write` (PUT /message/{userId}/{messageType}/{slot}) - Write VRChat API: Update Invite Message.
9210
9636
  - `updateOwnInventoryItem` via `vrchat_write` (PUT /inventory/{inventoryItemId}) - Write VRChat API: Update Own Inventory Item.
@@ -9303,7 +9729,6 @@ Generated output uses a compact envelope; exact API response content is under `d
9303
9729
  - `deleteGroupGallery` via `vrchat_delete` (DELETE /groups/{groupId}/galleries/{groupGalleryId}) - Write VRChat API: Delete Group Gallery.
9304
9730
  - `deleteGroupGalleryImage` via `vrchat_delete` (DELETE /groups/{groupId}/galleries/{groupGalleryId}/images/{groupGalleryImageId}) - Write VRChat API: Delete Group Gallery Image.
9305
9731
  - `deleteGroupInvite` via `vrchat_delete` (DELETE /groups/{groupId}/invites/{userId}) - Write VRChat API: Delete User Invite.
9306
- - `deleteGroupPost` via `vrchat_delete` (DELETE /groups/{groupId}/posts/{notificationId}) - Write VRChat API: Delete a Group post.
9307
9732
  - `deleteImpostor` via `vrchat_delete` (DELETE /avatars/{avatarId}/impostor) - Write VRChat API: Delete generated Impostor.
9308
9733
  - `deleteModerationReport` via `vrchat_delete` (DELETE /moderationReports/{moderationReportId}) - Write VRChat API: Delete Moderation Report.
9309
9734
  - `deleteNotificationV2` via `vrchat_delete` (DELETE /notifications/{notificationId}) - Write VRChat API: Delete NotificationV2.