@basicbit/vrchat-mcp 0.1.5 → 0.1.7

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 (100) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +21 -21
  3. package/README.md +39 -9
  4. package/assets/logo.svg +58 -39
  5. package/dist/package.json +10 -4
  6. package/dist/src/auth/index.js +65 -3
  7. package/dist/src/auth/index.js.map +1 -1
  8. package/dist/src/config/defaults.json +4 -2
  9. package/dist/src/config/index.js +23 -12
  10. package/dist/src/config/index.js.map +1 -1
  11. package/dist/src/core/client.js +27 -4
  12. package/dist/src/core/client.js.map +1 -1
  13. package/dist/src/core/generatedOperations.js +133 -0
  14. package/dist/src/core/generatedOperations.js.map +1 -0
  15. package/dist/src/core/generatedToolDescriptions.js +26 -0
  16. package/dist/src/core/generatedToolDescriptions.js.map +1 -0
  17. package/dist/src/core/generatedToolOverrides.js +19 -61
  18. package/dist/src/core/generatedToolOverrides.js.map +1 -1
  19. package/dist/src/core/generatedToolSkips.js +6 -23
  20. package/dist/src/core/generatedToolSkips.js.map +1 -1
  21. package/dist/src/core/operationDetails.js +96 -0
  22. package/dist/src/core/operationDetails.js.map +1 -0
  23. package/dist/src/core/operationPolicy.js +32 -0
  24. package/dist/src/core/operationPolicy.js.map +1 -0
  25. package/dist/src/core/readToolRegistry.js +35 -81
  26. package/dist/src/core/readToolRegistry.js.map +1 -1
  27. package/dist/src/core/writeToolRegistry.js +59 -101
  28. package/dist/src/core/writeToolRegistry.js.map +1 -1
  29. package/dist/src/models/avatars.js +2 -1
  30. package/dist/src/models/avatars.js.map +1 -1
  31. package/dist/src/models/common.js +4 -0
  32. package/dist/src/models/common.js.map +1 -0
  33. package/dist/src/models/events.js +8 -4
  34. package/dist/src/models/events.js.map +1 -1
  35. package/dist/src/models/favorites.js +120 -0
  36. package/dist/src/models/favorites.js.map +1 -0
  37. package/dist/src/models/friends.js +7 -6
  38. package/dist/src/models/friends.js.map +1 -1
  39. package/dist/src/models/groups.js +91 -5
  40. package/dist/src/models/groups.js.map +1 -1
  41. package/dist/src/models/invites.js +81 -3
  42. package/dist/src/models/invites.js.map +1 -1
  43. package/dist/src/models/statusPage.js +9 -0
  44. package/dist/src/models/statusPage.js.map +1 -1
  45. package/dist/src/models/users.js +3 -2
  46. package/dist/src/models/users.js.map +1 -1
  47. package/dist/src/models/worlds.js +2 -1
  48. package/dist/src/models/worlds.js.map +1 -1
  49. package/dist/src/schemas/read.js +22 -9
  50. package/dist/src/schemas/read.js.map +1 -1
  51. package/dist/src/schemas/write.js +17 -3
  52. package/dist/src/schemas/write.js.map +1 -1
  53. package/dist/src/services/api/client.js +20 -0
  54. package/dist/src/services/api/client.js.map +1 -1
  55. package/dist/src/services/events/curated.js +37 -3
  56. package/dist/src/services/events/curated.js.map +1 -1
  57. package/dist/src/services/favorites/index.js +106 -0
  58. package/dist/src/services/favorites/index.js.map +1 -0
  59. package/dist/src/services/groups/index.js +1 -0
  60. package/dist/src/services/groups/index.js.map +1 -1
  61. package/dist/src/services/groups/roles.js +75 -0
  62. package/dist/src/services/groups/roles.js.map +1 -0
  63. package/dist/src/services/invites/bulk.js +310 -0
  64. package/dist/src/services/invites/bulk.js.map +1 -0
  65. package/dist/src/services/invites/curated.js +203 -5
  66. package/dist/src/services/invites/curated.js.map +1 -1
  67. package/dist/src/services/invites/messages.js +65 -0
  68. package/dist/src/services/invites/messages.js.map +1 -0
  69. package/dist/src/services/statusPage/curated.js +42 -5
  70. package/dist/src/services/statusPage/curated.js.map +1 -1
  71. package/dist/src/tools/auth.js +4 -4
  72. package/dist/src/tools/auth.js.map +1 -1
  73. package/dist/src/tools/curated/events.js +4 -3
  74. package/dist/src/tools/curated/events.js.map +1 -1
  75. package/dist/src/tools/curated/favorites.js +79 -0
  76. package/dist/src/tools/curated/favorites.js.map +1 -0
  77. package/dist/src/tools/curated/groups.js +88 -3
  78. package/dist/src/tools/curated/groups.js.map +1 -1
  79. package/dist/src/tools/curated/invites.js +78 -2
  80. package/dist/src/tools/curated/invites.js.map +1 -1
  81. package/dist/src/tools/generated.js +4 -4
  82. package/dist/src/tools/generated.js.map +1 -1
  83. package/dist/src/tools/raw.js +4 -7
  84. package/dist/src/tools/raw.js.map +1 -1
  85. package/dist/src/tools/read/system.js +98 -0
  86. package/dist/src/tools/read/system.js.map +1 -1
  87. package/dist/src/tools/registerAllTools.js +2 -0
  88. package/dist/src/tools/registerAllTools.js.map +1 -1
  89. package/dist/src/utils/toolNames.js +0 -6
  90. package/dist/src/utils/toolNames.js.map +1 -1
  91. package/docs/architecture.md +1 -1
  92. package/docs/curated-tools.md +28 -5
  93. package/docs/privacy.md +23 -0
  94. package/docs/robust-notes.md +29 -0
  95. package/docs/tools-guide.md +9 -3
  96. package/docs/tools.md +3641 -8201
  97. package/docs/vrcx.md +1 -1
  98. package/package.json +10 -4
  99. package/server.json +3 -3
  100. package/skills/vrchat-mcp/SKILL.md +16 -0
@@ -1 +1 @@
1
- {"version":3,"file":"invites.js","sourceRoot":"","sources":["../../../../src/tools/curated/invites.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"invites.js","sourceRoot":"","sources":["../../../../src/tools/curated/invites.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,18 @@
1
1
  import { registerGeneratedReadTools } from '../core/readToolRegistry.js';
2
2
  import { registerGeneratedWriteTools } from '../core/writeToolRegistry.js';
3
- import { ReadOptionsSchema, ReadToolOutputSchema } from '../schemas/read.js';
4
- import { WriteOptionsSchema, WriteToolOutputSchema } from '../schemas/write.js';
3
+ import { GeneratedReadToolOutputSchema, ReadOptionsSchema } from '../schemas/read.js';
4
+ import { GeneratedWriteToolOutputSchema, WriteOptionsSchema } from '../schemas/write.js';
5
5
  import { readToolResponse } from './read/common.js';
6
6
  import { writeToolResponse } from './write/common.js';
7
7
  export async function registerGeneratedTools(server) {
8
8
  await registerGeneratedReadTools(server, {
9
9
  readOptionsSchema: ReadOptionsSchema,
10
- readOutputSchema: ReadToolOutputSchema,
10
+ readOutputSchema: GeneratedReadToolOutputSchema,
11
11
  respond: readToolResponse,
12
12
  });
13
13
  await registerGeneratedWriteTools(server, {
14
14
  writeOptionsSchema: WriteOptionsSchema,
15
- writeOutputSchema: WriteToolOutputSchema,
15
+ writeOutputSchema: GeneratedWriteToolOutputSchema,
16
16
  respond: writeToolResponse,
17
17
  });
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../../src/tools/generated.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAiB;IAC5D,MAAM,0BAA0B,CAAC,MAAM,EAAE;QACvC,iBAAiB,EAAE,iBAAiB;QACpC,gBAAgB,EAAE,oBAAoB;QACtC,OAAO,EAAE,gBAAgB;KAC1B,CAAC,CAAC;IACH,MAAM,2BAA2B,CAAC,MAAM,EAAE;QACxC,kBAAkB,EAAE,kBAAkB;QACtC,iBAAiB,EAAE,qBAAqB;QACxC,OAAO,EAAE,iBAAiB;KAC3B,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../../src/tools/generated.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,6BAA6B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAiB;IAC5D,MAAM,0BAA0B,CAAC,MAAM,EAAE;QACvC,iBAAiB,EAAE,iBAAiB;QACpC,gBAAgB,EAAE,6BAA6B;QAC/C,OAAO,EAAE,gBAAgB;KAC1B,CAAC,CAAC;IACH,MAAM,2BAA2B,CAAC,MAAM,EAAE;QACxC,kBAAkB,EAAE,kBAAkB;QACtC,iBAAiB,EAAE,8BAA8B;QACjD,OAAO,EAAE,iBAAiB;KAC3B,CAAC,CAAC;AACL,CAAC"}
@@ -1,14 +1,10 @@
1
1
  import { z } from 'zod';
2
2
  import { callOperation, CallError } from '../core/client.js';
3
+ import { getBlockedOperationReason } from '../core/operationPolicy.js';
3
4
  import { CallInputSchema } from '../schemas/call.js';
4
5
  import { writeToolAnnotations } from '../utils/toolAnnotations.js';
5
6
  import { toolName } from '../utils/toolNames.js';
6
7
  import { toolError } from '../utils/toolResponses.js';
7
- const RAW_BLOCKED_OPERATION_IDS = new Set([
8
- 'getGroupAnnouncements',
9
- 'createGroupAnnouncement',
10
- 'deleteGroupAnnouncement',
11
- ]);
12
8
  export function registerRawTools(server) {
13
9
  server.registerTool(toolName('vrchat.call'), {
14
10
  description: 'Call a VRChat OpenAPI operation by operationId.',
@@ -22,8 +18,9 @@ export function registerRawTools(server) {
22
18
  }),
23
19
  annotations: writeToolAnnotations,
24
20
  }, async (args) => {
25
- if (RAW_BLOCKED_OPERATION_IDS.has(args.operationId)) {
26
- return toolError(`Operation ${args.operationId} is disabled: group announcement endpoints are deprecated and unsafe.`);
21
+ const blockedReason = getBlockedOperationReason(args.operationId);
22
+ if (blockedReason) {
23
+ return toolError(`Operation ${args.operationId} is disabled: ${blockedReason}`);
27
24
  }
28
25
  try {
29
26
  const result = await callOperation(args);
@@ -1 +1 @@
1
- {"version":3,"file":"raw.js","sourceRoot":"","sources":["../../../src/tools/raw.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAkB,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,uBAAuB;IACvB,yBAAyB;IACzB,yBAAyB;CAC1B,CAAC,CAAC;AAEH,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,YAAY,CACjB,QAAQ,CAAC,aAAa,CAAC,EACvB;QACE,WAAW,EAAE,iDAAiD;QAC9D,WAAW,EAAE,eAAe;QAC5B,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;YACrB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;YACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACpD,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;YACxB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SAC/B,CAAC;QACF,WAAW,EAAE,oBAAoB;KAClC,EACD,KAAK,EAAE,IAAe,EAAE,EAAE;QACxB,IAAI,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACpD,OAAO,SAAS,CACd,aAAa,IAAI,CAAC,WAAW,uEAAuE,CACrG,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;qBACtC;iBACF;gBACD,iBAAiB,EAAE,MAA4C;aAChE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,SAAS,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC5C,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACrE,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"raw.js","sourceRoot":"","sources":["../../../src/tools/raw.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAkB,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,YAAY,CACjB,QAAQ,CAAC,aAAa,CAAC,EACvB;QACE,WAAW,EAAE,iDAAiD;QAC9D,WAAW,EAAE,eAAe;QAC5B,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;YACrB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;YACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACpD,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;YACxB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SAC/B,CAAC;QACF,WAAW,EAAE,oBAAoB;KAClC,EACD,KAAK,EAAE,IAAe,EAAE,EAAE;QACxB,MAAM,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClE,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,SAAS,CACd,aAAa,IAAI,CAAC,WAAW,iBAAiB,aAAa,EAAE,CAC9D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;qBACtC;iBACF;gBACD,iBAAiB,EAAE,MAA4C;aAChE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,SAAS,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC5C,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACrE,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,5 +1,65 @@
1
+ import { z } from 'zod';
2
+ import { generatedToolStatusValues, listGeneratedOperations, } from '../../core/generatedOperations.js';
3
+ import { getOperationDetails } from '../../core/operationDetails.js';
1
4
  import { ReadOptionsSchema } from '../../schemas/read.js';
5
+ import { readOnlyToolAnnotations } from '../../utils/toolAnnotations.js';
6
+ import { toolName } from '../../utils/toolNames.js';
7
+ import { textContent, toolError } from '../../utils/toolResponses.js';
2
8
  import { registerReadTool } from './common.js';
9
+ const OperationDetailsInputSchema = z.object({
10
+ operationId: z.string().describe('VRChat OpenAPI operationId.'),
11
+ });
12
+ const OperationsInputSchema = z.object({
13
+ kind: z.enum(['read', 'write', 'delete']).describe('Operation kind.').optional(),
14
+ view: z.enum(['available', 'all']).describe('Show available generated ops or all ops.').optional(),
15
+ query: z.string().describe('Filter operationId, path, summary, or description.').optional(),
16
+ limit: z.number().int().min(1).max(500).describe('Max operations.').optional(),
17
+ });
18
+ const OperationSummarySchema = z.object({
19
+ operationId: z.string(),
20
+ kind: z.enum(['read', 'write', 'delete']),
21
+ method: z.string(),
22
+ path: z.string(),
23
+ summary: z.string().optional(),
24
+ description: z.string().optional(),
25
+ generatedToolStatus: z.enum(generatedToolStatusValues),
26
+ generatedToolName: z.string().optional(),
27
+ curatedToolName: z.string().optional(),
28
+ blockedReason: z.string().optional(),
29
+ });
30
+ const OperationsOutputSchema = z.object({
31
+ total: z.number().int().min(0),
32
+ truncated: z.boolean(),
33
+ operations: z.array(OperationSummarySchema),
34
+ });
35
+ const OperationDetailsOutputSchema = z.object({
36
+ operationId: z.string(),
37
+ method: z.string(),
38
+ path: z.string(),
39
+ summary: z.string().optional(),
40
+ description: z.string().optional(),
41
+ generatedToolStatus: z.enum(generatedToolStatusValues),
42
+ generatedToolName: z.string().optional(),
43
+ curatedToolName: z.string().optional(),
44
+ blockedReason: z.string().optional(),
45
+ parameters: z.array(z.object({
46
+ name: z.string(),
47
+ in: z.enum(['path', 'query', 'header', 'cookie']),
48
+ required: z.boolean(),
49
+ description: z.string().optional(),
50
+ schemaRef: z.string().optional(),
51
+ schema: z.unknown().optional(),
52
+ })),
53
+ requestBody: z
54
+ .object({
55
+ required: z.boolean(),
56
+ description: z.string().optional(),
57
+ contentTypes: z.array(z.string()).optional(),
58
+ schemaRef: z.string().optional(),
59
+ schema: z.unknown().optional(),
60
+ })
61
+ .optional(),
62
+ });
3
63
  export function registerSystemReadTools(server) {
4
64
  registerReadTool({
5
65
  server,
@@ -15,5 +75,43 @@ export function registerSystemReadTools(server) {
15
75
  operationId: 'getSystemTime',
16
76
  inputSchema: ReadOptionsSchema,
17
77
  });
78
+ server.registerTool(toolName('vrchat.operations'), {
79
+ description: 'List VRChat OpenAPI operationIds and generated-tool availability for vrchat_read/vrchat_write/vrchat_delete.',
80
+ inputSchema: OperationsInputSchema,
81
+ outputSchema: OperationsOutputSchema,
82
+ annotations: readOnlyToolAnnotations,
83
+ }, async (args) => {
84
+ try {
85
+ const input = OperationsInputSchema.parse(args ?? {});
86
+ const result = await listGeneratedOperations(input);
87
+ return {
88
+ content: textContent(JSON.stringify(result, null, 2)),
89
+ structuredContent: result,
90
+ };
91
+ }
92
+ catch (err) {
93
+ const message = err instanceof Error ? err.message : 'Unknown error';
94
+ return toolError(message);
95
+ }
96
+ });
97
+ server.registerTool(toolName('vrchat.operation_details'), {
98
+ description: 'Look up exact OpenAPI params and request body schema for a VRChat operationId.',
99
+ inputSchema: OperationDetailsInputSchema,
100
+ outputSchema: OperationDetailsOutputSchema,
101
+ annotations: readOnlyToolAnnotations,
102
+ }, async (args) => {
103
+ try {
104
+ const { operationId } = OperationDetailsInputSchema.parse(args ?? {});
105
+ const details = await getOperationDetails(operationId);
106
+ return {
107
+ content: textContent(JSON.stringify(details, null, 2)),
108
+ structuredContent: details,
109
+ };
110
+ }
111
+ catch (err) {
112
+ const message = err instanceof Error ? err.message : 'Unknown error';
113
+ return toolError(message);
114
+ }
115
+ });
18
116
  }
19
117
  //# sourceMappingURL=system.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sourceRoot":"","sources":["../../../../src/tools/read/system.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,gBAAgB,CAAC;QACf,MAAM;QACN,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,+BAA+B;QAC5C,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,iBAAiB;KAC/B,CAAC,CAAC;IAEH,gBAAgB,CAAC;QACf,MAAM;QACN,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,sCAAsC;QACnD,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE,iBAAiB;KAC/B,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../../../src/tools/read/system.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { registerAuthTools } from './auth.js';
2
2
  import { registerCacheTools } from './cache.js';
3
3
  import { registerCuratedAvatarTools } from './curated/avatars.js';
4
4
  import { registerCuratedEventTools } from './curated/events.js';
5
+ import { registerCuratedFavoriteTools } from './curated/favorites.js';
5
6
  import { registerCuratedFriendTools } from './curated/friends.js';
6
7
  import { registerCuratedGroupTools } from './curated/groups.js';
7
8
  import { registerCuratedInstanceTools } from './curated/instances.js';
@@ -24,6 +25,7 @@ export async function registerAllTools(server) {
24
25
  registerCuratedFriendTools(server);
25
26
  registerCuratedAvatarTools(server);
26
27
  registerCuratedEventTools(server);
28
+ registerCuratedFavoriteTools(server);
27
29
  registerCuratedGroupTools(server);
28
30
  registerCuratedInstanceTools(server);
29
31
  registerCuratedInviteTools(server);
@@ -1 +1 @@
1
- {"version":3,"file":"registerAllTools.js","sourceRoot":"","sources":["../../../src/tools/registerAllTools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAiB;IACtD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC5B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IACD,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,8BAA8B,CAAC,MAAM,CAAC,CAAC;IACvC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,gCAAgC,CAAC,MAAM,CAAC,CAAC;IACzC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAEhC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"registerAllTools.js","sourceRoot":"","sources":["../../../src/tools/registerAllTools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAiB;IACtD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC5B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IACD,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,8BAA8B,CAAC,MAAM,CAAC,CAAC;IACvC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,gCAAgC,CAAC,MAAM,CAAC,CAAC;IACzC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAEhC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC"}
@@ -4,10 +4,4 @@ function sanitize(name) {
4
4
  export function toolName(name) {
5
5
  return sanitize(name.replace(/\./g, '_'));
6
6
  }
7
- export function readToolName(operationId) {
8
- return sanitize(`vrchat_read_${operationId}`);
9
- }
10
- export function writeToolName(operationId) {
11
- return sanitize(`vrchat_write_${operationId}`);
12
- }
13
7
  //# sourceMappingURL=toolNames.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toolNames.js","sourceRoot":"","sources":["../../../src/utils/toolNames.ts"],"names":[],"mappings":"AAAA,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,QAAQ,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,OAAO,QAAQ,CAAC,gBAAgB,WAAW,EAAE,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"toolNames.js","sourceRoot":"","sources":["../../../src/utils/toolNames.ts"],"names":[],"mappings":"AAAA,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C,CAAC"}
@@ -12,7 +12,7 @@ This server is organized by responsibility so each file stays small and focused.
12
12
  - `client.ts` executes API operations with auth + headers and enforces write gating.
13
13
  - `readTools.ts` provides read-only helpers (pagination, field selection, shaping).
14
14
  - `readToolRegistry.ts` registers auto-generated GET tools from the spec.
15
- - `writeToolRegistry.ts` registers auto-generated non-GET tools from the spec.
15
+ - `writeToolRegistry.ts` registers auto-generated POST/PUT/PATCH and DELETE routers from the spec.
16
16
 
17
17
  ## Tool registration (`src/tools/`)
18
18
 
@@ -9,12 +9,13 @@ without wading through hundreds of low-level endpoints.
9
9
  - Small and explicit: each tool has a single, obvious purpose.
10
10
  - Human-input friendly: accept names or natural inputs where reasonable.
11
11
  - Composable: outputs include IDs and metadata for follow-ups.
12
- - Practical by default: write tools are available out of the box, with `writes.allow` for read-only mode and group allowlists for group-scoped writes.
12
+ - Local full capability by default: curated write tools are enabled, with account-changing approval expected from the MCP client or agent harness. Group allowlists can further restrict group-scoped writes.
13
13
 
14
14
  ## Write controls
15
15
 
16
16
  - Read-only tools are always enabled.
17
- - Write tools are enabled unless `writes.allow = false`.
17
+ - Curated write tools are enabled by default through `writes.allow = true`.
18
+ - Set `writes.allow = false` or `VRCHAT_MCP_ALLOW_WRITES=false` for read-only mode.
18
19
  - Group-scoped writes additionally honor `groups.allowlist`.
19
20
 
20
21
  ## Current curated tools (implemented)
@@ -93,7 +94,15 @@ Events and calendar (write):
93
94
  Instances and invites (write):
94
95
 
95
96
  - `vrchat_instance_create`
97
+ - `vrchat_invite`
96
98
  - `vrchat_invite_user`
99
+ - `vrchat_invite_user_to_me`
100
+
101
+ Groups and social writes:
102
+
103
+ - `vrchat_group_invite`
104
+ - `vrchat_friend_request`
105
+ - `vrchat_boop`
97
106
 
98
107
  Invites (write, low-risk):
99
108
 
@@ -121,12 +130,26 @@ Automation hooks:
121
130
 
122
131
  - `vrchat_status_guard` (periodic check + corrective update)
123
132
 
124
- ## Toolset toggles (planned)
133
+ ## Toolset toggles
125
134
 
126
- Auto-generated read tools are enabled by default (`vrchat_read_<operationId>`).
127
- Auto-generated write tools are enabled by default (`vrchat_write_<operationId>`) unless disabled by `writes.allow`.
135
+ The default toolset is curated plus generated read/write/delete routers for API gaps. `vrchat_read` handles available generated GET operations by `operationId`; `vrchat_write` handles available generated POST/PUT/PATCH operations by `operationId`; `vrchat_delete` handles available generated DELETE operations by `operationId`. Use `vrchat_operations` to list availability and `vrchat_operation_details` for exact params/body schemas. The generated routers can be narrowed with `generatedReadTools.operationIds` / `generatedWriteTools.operationIds` or disabled with `generatedReadTools.enabled = false` / `generatedWriteTools.enabled = false`. Generated routers do not expose hard-skipped operations or operations with curated replacements, even if those operation IDs appear in an `operationIds` narrowing list.
128
136
  The raw tool (`vrchat_call`) is disabled by default and can be enabled via config/environment flags.
129
137
 
138
+ ## Output schema budget
139
+
140
+ Curated tool output schemas should document stable top-level fields and keep nested raw VRChat API objects opaque. This preserves useful MCP metadata without embedding large generated `User`, `Group`, `World`, `CalendarEvent`, or similar object schemas in every tool. If an agent needs specific nested fields before calling a tool, add a compact curated summary field rather than reintroducing a full generated API object schema.
141
+
142
+ ## Consolidation candidates
143
+
144
+ Prefer fewer, higher-confidence curated tools when multiple endpoint-shaped tools represent one user intent. A combined tool should keep the target and side effect explicit, expose IDs in outputs for follow-ups, and preserve confirmation/risk controls.
145
+
146
+ Near-term candidates:
147
+
148
+ - Keep `vrchat_invite` as the primary invite entry point for self-invites, user invites, and invite-to-current-instance flows; keep narrow invite tools only when they avoid ambiguity for agents.
149
+ - Keep social write tools batch-capable where safe (`vrchat_boop`, `vrchat_friend_request`, `vrchat_group_invite`) instead of exposing one generated endpoint per target.
150
+ - Consider a single event management surface only if create/update/delete/follow can stay explicit enough to avoid accidental destructive calls.
151
+ - Keep profile/status writes separate unless the combined tool can make status changes, profile edits, and preserved fields obvious to the caller.
152
+
130
153
  ## Group allowlist guard
131
154
 
132
155
  Use `groups.allowlist` in the config file to limit group write operations to specific group IDs.
@@ -0,0 +1,23 @@
1
+ # Privacy
2
+
3
+ VRChat MCP runs locally on your machine as a stdio MCP server. The project does not operate a hosted service for your VRChat session.
4
+
5
+ ## Data Access
6
+
7
+ Depending on which tools you call, VRChat MCP can retrieve VRChat account, friend, world, group, event, notification, invite, avatar, status, and local VRCX history data. Tool results are returned to the MCP client that launched the server.
8
+
9
+ ## Authentication Storage
10
+
11
+ By default, VRChat auth cookies are stored in the operating system keychain. If keychain storage is unavailable, the server falls back to a local cookie file on your machine. You can opt into file storage explicitly with `VRCHAT_MCP_COOKIE_STORE=file`.
12
+
13
+ VRChat's Creator Guidelines caution third-party API applications not to request or store login credentials, auth tokens, or session data. This project currently relies on local user-managed cookies because VRChat does not provide OAuth for this use case. Treat that as a policy-sensitive personal-use boundary: do not collect anyone else's login information, do not host this service for other users, and clear cookies with `vrchat_auth_logout` when you no longer need the session.
14
+
15
+ ## Network Requests
16
+
17
+ The server makes requests to VRChat APIs, VRChat pipeline services, and VRChat status endpoints as needed for the tools you call. VRCX features read local VRCX database files on your machine when VRCX data is present.
18
+
19
+ Curated write tools, generated write tools for API gaps, generated read tools, and read-only VRCX local-history tools are enabled by default for local full-capability use. Use your MCP client or agent harness to control account-changing tool calls, or set `VRCHAT_MCP_ALLOW_WRITES=false` for read-only mode. VRCX tools stay read-only and avoid known cookie/credential storage.
20
+
21
+ ## Hosted Integrations
22
+
23
+ Do not send VRChat MCP cookies or session tokens to hosted third-party services. Public HTTP or hosted connector variants should only be used if a future VRChat OAuth or public-data-only design exists.
@@ -0,0 +1,29 @@
1
+ # Robust Notes
2
+
3
+ Durable product and security-review notes for future agents.
4
+
5
+ ## Security Review Product Boundary
6
+
7
+ VRChat MCP is intended to be a local, full-capability MCP server. Do not reduce the default tool surface to read-only as a security-review reflex. The expected permission boundary for account-changing actions is the user's MCP client or agent harness, which should decide whether to allow, deny, or ask before executing tool calls.
8
+
9
+ Default posture:
10
+
11
+ - Curated write tools are enabled by default through `writes.allow = true`.
12
+ - VRCX local-history tools are enabled by default and remain read-only, bounded, and curated.
13
+ - Generated read tools are enabled by default for API exploration, excluding hard-skipped operations and operations with curated replacements.
14
+ - Generated write tools are enabled by default for usable API-gap coverage, excluding hard-skipped operations and operations with curated replacements.
15
+ - Read-only mode remains available with `writes.allow = false` or `VRCHAT_MCP_ALLOW_WRITES=false` for test, demo, or constrained deployments.
16
+
17
+ Generated tool `operationIds` lists are narrowing controls, not required allowlists, and they do not re-enable generated operations covered by curated tools. Keep generated tools default-on for broad VRChat API capability and rely on the local MCP client or agent harness to approve or deny account-changing tool calls. Do not propose disabling generated read/write/delete routers by default as a context-budget optimization unless the user explicitly reopens that product boundary. Prefer solving context cost with schema deduplication, smaller repeated metadata, on-demand operation details, and curated consolidation of common multi-endpoint workflows. If a generated write becomes common or needs better ergonomics, add a curated write tool with clear inputs, bounded behavior, IDs in outputs, rate/backoff behavior where appropriate, and tests; the generated duplicate should then disappear from the default surface.
18
+
19
+ Do not omit generated `outputSchema` only to save context: some MCP clients may use output schemas for validation or UX, and the field is optional context for clients rather than guaranteed model prompt text. Treat output schema removal as a client-compatibility decision, not a default budget trick.
20
+
21
+ When consolidating tools, preserve harness permission granularity. Avoid combining read-only and write operations in one curated tool, and avoid combining destructive and non-destructive writes unless the resulting tool is correctly annotated/described as the highest-risk operation it can perform. Prefer explicit `action` enums over natural-language routing, and keep code focused on validation/execution rather than fuzzy intent inference.
22
+
23
+ When future audits flag write/VRCX/generated-tool exposure, treat the preferred remediation as better docs, curated coverage, tool annotations, tests, and harness guidance, not disabling the feature by default.
24
+
25
+ The separate unresolved policy-sensitive boundary remains VRChat authentication: this project uses local user-managed cookies because there is no OAuth flow for this use case. Do not host this service for other users or collect other users' credentials/session data.
26
+
27
+ ## API Content Upload Boundary
28
+
29
+ VRChat Creator Guidelines (API Usage / Bots, checked 2026-05-26) say not to create or use software, scripts, or applications that upload content such as worlds, avatars, or similar asset types on a user's behalf. Treat generated operations for uploading or managing uploaded asset content as policy-sensitive, not merely high-risk writes. Default policy blocks explicit avatar/world content-management operations (`createAvatar`, `updateAvatar`, `deleteAvatar`, `createWorld`, `updateWorld`, `deleteWorld`, `publishWorld`, `unpublishWorld`) in central operation validation and hides their generated write tools. Do not assume all image-like uploads are prohibited: icons, prints, gallery images, file upload pipeline operations, and similar user image/file operations remain separate policy decisions. Selecting or viewing avatars is a different class from uploading avatar content; do not over-block ordinary user account actions without mapping them to the guideline text.
@@ -5,9 +5,15 @@ This is the human-oriented overview for how to use the tool surface. The full, g
5
5
  ## How to use tools
6
6
 
7
7
  - Prefer **curated tools** first. They include search and summary flows for common VRChat tasks.
8
- - Use **auto-generated tools** (`vrchat_read_<operationId>`, `vrchat_write_<operationId>`) only when a curated tool does not exist.
9
- - **Writes are enabled by default**. Set `writes.allow = false` (or `VRCHAT_MCP_ALLOW_WRITES=false`) for read-only mode.
8
+ - Auto-generated API-gap coverage is exposed through `vrchat_read`, `vrchat_write`, and `vrchat_delete`. Pass an OpenAPI `operationId`; use `vrchat_operations` to list available operation IDs and `vrchat_operation_details` for exact params/body schemas. Generated routers omit hard-skipped operations and operations already covered by curated tools. Use `generatedReadTools.operationIds` or `generatedWriteTools.operationIds` only when you want to narrow the remaining generated surface.
9
+ - Curated write tools are enabled by default for local full-capability use. Set `writes.allow = false` (or `VRCHAT_MCP_ALLOW_WRITES=false`) for read-only mode.
10
+ - The MCP client or agent harness is expected to control approval/denial for account-changing tool calls.
10
11
  - Group write actions are restricted by `groups.allowlist` when set.
12
+ - Do not expose this server as a hosted/public MCP service with VRChat cookies. Keep it local and user-controlled.
13
+
14
+ ## Metadata budget
15
+
16
+ Tool names, tool descriptions, argument names, argument descriptions, and schema structure consume model context. Run `npm run metrics:tool-budget` to report the estimated default tool metadata token budget, category breakdown, initial tool-list cost, full schema cost, repeated argument-description hotspots, blank tool-description coverage, argument-description coverage, and the largest tools by metadata size. CI includes this in `npm run metrics`; keep the budget from drifting upward unless the extra guidance is worth the context cost.
11
17
 
12
18
  ## MCP resources
13
19
 
@@ -23,5 +29,5 @@ This is the human-oriented overview for how to use the tool surface. The full, g
23
29
 
24
30
  ## Where the truth lives
25
31
 
26
- - `docs/tools.md` is generated from code + the OpenAPI spec and reflects the actual exposed tools.
32
+ - `docs/tools.md` is generated from code + the OpenAPI spec and includes curated tools plus the generated catalog.
27
33
  - `docs/curated-tools.md` describes the curated tool charter and risk tiers.