@basicbit/vrchat-mcp 0.1.4 → 0.1.6

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 (94) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +39 -9
  3. package/dist/package.json +8 -2
  4. package/dist/src/auth/index.js +65 -3
  5. package/dist/src/auth/index.js.map +1 -1
  6. package/dist/src/config/defaults.json +4 -2
  7. package/dist/src/config/index.js +23 -12
  8. package/dist/src/config/index.js.map +1 -1
  9. package/dist/src/core/client.js +27 -4
  10. package/dist/src/core/client.js.map +1 -1
  11. package/dist/src/core/generatedOperations.js +133 -0
  12. package/dist/src/core/generatedOperations.js.map +1 -0
  13. package/dist/src/core/generatedToolDescriptions.js +26 -0
  14. package/dist/src/core/generatedToolDescriptions.js.map +1 -0
  15. package/dist/src/core/generatedToolOverrides.js +19 -61
  16. package/dist/src/core/generatedToolOverrides.js.map +1 -1
  17. package/dist/src/core/generatedToolSkips.js +6 -23
  18. package/dist/src/core/generatedToolSkips.js.map +1 -1
  19. package/dist/src/core/operationDetails.js +96 -0
  20. package/dist/src/core/operationDetails.js.map +1 -0
  21. package/dist/src/core/operationPolicy.js +32 -0
  22. package/dist/src/core/operationPolicy.js.map +1 -0
  23. package/dist/src/core/readToolRegistry.js +35 -81
  24. package/dist/src/core/readToolRegistry.js.map +1 -1
  25. package/dist/src/core/writeToolRegistry.js +59 -101
  26. package/dist/src/core/writeToolRegistry.js.map +1 -1
  27. package/dist/src/models/avatars.js +2 -1
  28. package/dist/src/models/avatars.js.map +1 -1
  29. package/dist/src/models/common.js +4 -0
  30. package/dist/src/models/common.js.map +1 -0
  31. package/dist/src/models/events.js +5 -4
  32. package/dist/src/models/events.js.map +1 -1
  33. package/dist/src/models/favorites.js +120 -0
  34. package/dist/src/models/favorites.js.map +1 -0
  35. package/dist/src/models/friends.js +7 -6
  36. package/dist/src/models/friends.js.map +1 -1
  37. package/dist/src/models/groups.js +91 -5
  38. package/dist/src/models/groups.js.map +1 -1
  39. package/dist/src/models/invites.js +81 -3
  40. package/dist/src/models/invites.js.map +1 -1
  41. package/dist/src/models/statusPage.js +9 -0
  42. package/dist/src/models/statusPage.js.map +1 -1
  43. package/dist/src/models/users.js +3 -2
  44. package/dist/src/models/users.js.map +1 -1
  45. package/dist/src/models/worlds.js +2 -1
  46. package/dist/src/models/worlds.js.map +1 -1
  47. package/dist/src/schemas/read.js +22 -9
  48. package/dist/src/schemas/read.js.map +1 -1
  49. package/dist/src/schemas/write.js +17 -3
  50. package/dist/src/schemas/write.js.map +1 -1
  51. package/dist/src/services/api/client.js +20 -0
  52. package/dist/src/services/api/client.js.map +1 -1
  53. package/dist/src/services/favorites/index.js +106 -0
  54. package/dist/src/services/favorites/index.js.map +1 -0
  55. package/dist/src/services/groups/index.js +1 -0
  56. package/dist/src/services/groups/index.js.map +1 -1
  57. package/dist/src/services/groups/roles.js +75 -0
  58. package/dist/src/services/groups/roles.js.map +1 -0
  59. package/dist/src/services/invites/bulk.js +310 -0
  60. package/dist/src/services/invites/bulk.js.map +1 -0
  61. package/dist/src/services/invites/curated.js +203 -5
  62. package/dist/src/services/invites/curated.js.map +1 -1
  63. package/dist/src/services/invites/messages.js +65 -0
  64. package/dist/src/services/invites/messages.js.map +1 -0
  65. package/dist/src/services/statusPage/curated.js +42 -5
  66. package/dist/src/services/statusPage/curated.js.map +1 -1
  67. package/dist/src/tools/auth.js +4 -4
  68. package/dist/src/tools/auth.js.map +1 -1
  69. package/dist/src/tools/curated/favorites.js +79 -0
  70. package/dist/src/tools/curated/favorites.js.map +1 -0
  71. package/dist/src/tools/curated/groups.js +88 -3
  72. package/dist/src/tools/curated/groups.js.map +1 -1
  73. package/dist/src/tools/curated/invites.js +78 -2
  74. package/dist/src/tools/curated/invites.js.map +1 -1
  75. package/dist/src/tools/generated.js +4 -4
  76. package/dist/src/tools/generated.js.map +1 -1
  77. package/dist/src/tools/raw.js +4 -7
  78. package/dist/src/tools/raw.js.map +1 -1
  79. package/dist/src/tools/read/system.js +98 -0
  80. package/dist/src/tools/read/system.js.map +1 -1
  81. package/dist/src/tools/registerAllTools.js +2 -0
  82. package/dist/src/tools/registerAllTools.js.map +1 -1
  83. package/dist/src/utils/toolNames.js +0 -6
  84. package/dist/src/utils/toolNames.js.map +1 -1
  85. package/docs/architecture.md +1 -1
  86. package/docs/curated-tools.md +28 -5
  87. package/docs/privacy.md +23 -0
  88. package/docs/robust-notes.md +29 -0
  89. package/docs/tools-guide.md +9 -3
  90. package/docs/tools.md +3631 -8201
  91. package/docs/vrcx.md +1 -1
  92. package/package.json +8 -2
  93. package/server.json +3 -3
  94. package/skills/vrchat-mcp/SKILL.md +16 -0
@@ -0,0 +1,133 @@
1
+ import { getConfig } from '../config/index.js';
2
+ import { toolName } from '../utils/toolNames.js';
3
+ import { getCuratedReadToolName, getCuratedWriteToolName } from './generatedToolOverrides.js';
4
+ import { GENERATED_READ_SKIP_IDS, GENERATED_WRITE_SKIP_IDS } from './generatedToolSkips.js';
5
+ import { getBlockedOperationReason } from './operationPolicy.js';
6
+ import { getSpecIndex } from './spec.js';
7
+ export const generatedToolStatusValues = [
8
+ 'available',
9
+ 'blocked_by_policy',
10
+ 'curated_replacement',
11
+ 'hard_skipped',
12
+ 'disabled_by_config',
13
+ 'not_allowlisted',
14
+ ];
15
+ const DEFAULT_LIMIT = 250;
16
+ function isRecord(value) {
17
+ return Boolean(value && typeof value === 'object' && !Array.isArray(value));
18
+ }
19
+ function getText(value) {
20
+ return typeof value === 'string' && value.trim() ? value : undefined;
21
+ }
22
+ export function generatedOperationKind(op) {
23
+ if (op.method === 'GET')
24
+ return 'read';
25
+ if (op.method === 'DELETE')
26
+ return 'delete';
27
+ return 'write';
28
+ }
29
+ export function generatedToolName(kind) {
30
+ if (kind === 'read')
31
+ return toolName('vrchat.read');
32
+ if (kind === 'delete')
33
+ return toolName('vrchat.delete');
34
+ return toolName('vrchat.write');
35
+ }
36
+ function rawOperation(raw, op) {
37
+ if (!isRecord(raw))
38
+ return undefined;
39
+ const paths = raw.paths;
40
+ if (!isRecord(paths))
41
+ return undefined;
42
+ const pathItem = paths[op.path];
43
+ if (!isRecord(pathItem))
44
+ return undefined;
45
+ const methodEntry = pathItem[op.method.toLowerCase()];
46
+ return isRecord(methodEntry) ? methodEntry : undefined;
47
+ }
48
+ export function getGeneratedOperationInfo(op) {
49
+ const kind = generatedOperationKind(op);
50
+ const blockedReason = getBlockedOperationReason(op.operationId);
51
+ const curatedToolName = kind === 'read'
52
+ ? getCuratedReadToolName(op.operationId)
53
+ : getCuratedWriteToolName(op.operationId);
54
+ const skipIds = kind === 'read' ? GENERATED_READ_SKIP_IDS : GENERATED_WRITE_SKIP_IDS;
55
+ const generatedConfig = kind === 'read' ? getConfig().generatedReadTools : getConfig().generatedWriteTools;
56
+ const allowedIds = new Set(generatedConfig.operationIds);
57
+ if (blockedReason) {
58
+ return { generatedToolStatus: 'blocked_by_policy', curatedToolName, blockedReason };
59
+ }
60
+ if (curatedToolName) {
61
+ return { generatedToolStatus: 'curated_replacement', curatedToolName };
62
+ }
63
+ if (skipIds.includes(op.operationId)) {
64
+ return { generatedToolStatus: 'hard_skipped' };
65
+ }
66
+ if (!generatedConfig.enabled) {
67
+ return { generatedToolStatus: 'disabled_by_config' };
68
+ }
69
+ if (allowedIds.size > 0 && !allowedIds.has(op.operationId)) {
70
+ return { generatedToolStatus: 'not_allowlisted' };
71
+ }
72
+ return {
73
+ generatedToolStatus: 'available',
74
+ generatedToolName: generatedToolName(kind),
75
+ };
76
+ }
77
+ async function collectGeneratedOperations() {
78
+ const index = await getSpecIndex();
79
+ const operations = [];
80
+ for (const op of index.operations.values()) {
81
+ const rawOp = rawOperation(index.raw, op);
82
+ const info = getGeneratedOperationInfo(op);
83
+ operations.push({
84
+ operationId: op.operationId,
85
+ kind: generatedOperationKind(op),
86
+ method: op.method,
87
+ path: op.path,
88
+ summary: getText(rawOp?.summary),
89
+ description: getText(rawOp?.description),
90
+ ...info,
91
+ });
92
+ }
93
+ return operations.sort((a, b) => a.operationId.localeCompare(b.operationId));
94
+ }
95
+ function matchesQuery(operation, query) {
96
+ if (!query)
97
+ return true;
98
+ const needle = query.toLowerCase();
99
+ const haystack = [
100
+ operation.operationId,
101
+ operation.method,
102
+ operation.path,
103
+ operation.summary,
104
+ operation.description,
105
+ ]
106
+ .filter(Boolean)
107
+ .join('\n')
108
+ .toLowerCase();
109
+ return haystack.includes(needle);
110
+ }
111
+ export async function listGeneratedOperations(input = {}) {
112
+ const view = input.view ?? 'available';
113
+ const limit = Math.max(1, Math.floor(input.limit ?? DEFAULT_LIMIT));
114
+ const filtered = (await collectGeneratedOperations()).filter((operation) => {
115
+ if (input.kind && operation.kind !== input.kind)
116
+ return false;
117
+ if (view === 'available' && operation.generatedToolStatus !== 'available')
118
+ return false;
119
+ return matchesQuery(operation, input.query?.trim());
120
+ });
121
+ return {
122
+ operations: filtered.slice(0, limit),
123
+ total: filtered.length,
124
+ truncated: filtered.length > limit,
125
+ };
126
+ }
127
+ export async function getAvailableGeneratedOperationIds(kind) {
128
+ const operations = await collectGeneratedOperations();
129
+ return new Set(operations
130
+ .filter((operation) => operation.kind === kind && operation.generatedToolStatus === 'available')
131
+ .map((operation) => operation.operationId));
132
+ }
133
+ //# sourceMappingURL=generatedOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generatedOperations.js","sourceRoot":"","sources":["../../../src/core/generatedOperations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ const MAX_SUMMARY_LENGTH = 96;
2
+ function firstTextLine(value) {
3
+ return typeof value === 'string' ? value.split('\n')[0].replace(/\s+/g, ' ').trim() : '';
4
+ }
5
+ function trimSentence(value) {
6
+ return value.replace(/[.?!:;]+$/g, '').trim();
7
+ }
8
+ function truncate(value) {
9
+ if (value.length <= MAX_SUMMARY_LENGTH)
10
+ return value;
11
+ const truncated = value.slice(0, MAX_SUMMARY_LENGTH - 1).trimEnd();
12
+ const lastSpace = truncated.lastIndexOf(' ');
13
+ const base = lastSpace >= 40 ? truncated.slice(0, lastSpace) : truncated;
14
+ return `${trimSentence(base)}...`;
15
+ }
16
+ function sentence(value) {
17
+ return value.endsWith('...') ? value : `${value}.`;
18
+ }
19
+ export function buildGeneratedToolDescription(kind, operationId, op) {
20
+ const prefix = kind === 'read' ? 'Read VRChat API' : 'Write VRChat API';
21
+ const summary = trimSentence(firstTextLine(op.summary) || firstTextLine(op.description));
22
+ if (summary)
23
+ return `${prefix}: ${sentence(truncate(summary))}`;
24
+ return `${prefix} operation: ${operationId}.`;
25
+ }
26
+ //# sourceMappingURL=generatedToolDescriptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generatedToolDescriptions.js","sourceRoot":"","sources":["../../../src/core/generatedToolDescriptions.ts"],"names":[],"mappings":"AAKA,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3F,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,IAAI,KAAK,CAAC,MAAM,IAAI,kBAAkB;QAAE,OAAO,KAAK,CAAC;IACrD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACnE,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACpC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,IAAsB,EACtB,WAAmB,EACnB,EAA8B;IAE9B,MAAM,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACxE,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAEzF,IAAI,OAAO;QAAE,OAAO,GAAG,MAAM,KAAK,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;IAChE,OAAO,GAAG,MAAM,eAAe,WAAW,GAAG,CAAC;AAChD,CAAC"}
@@ -11,9 +11,16 @@ const CURATED_READ_TOOL_MAP = new Map([
11
11
  ['getWorld', toToolName('vrchat.world.profile')],
12
12
  ['searchWorlds', toToolName('vrchat.worlds.search')],
13
13
  ['getFavoritedWorlds', toToolName('vrchat.worlds.favorites')],
14
+ ['getFavoritedAvatars', toToolName('vrchat.favorites')],
15
+ ['getFavoriteGroup', toToolName('vrchat.favorites')],
16
+ ['getFavoriteGroups', toToolName('vrchat.favorites')],
17
+ ['getFavoriteLimits', toToolName('vrchat.favorites')],
18
+ ['getFavorites', toToolName('vrchat.favorites')],
14
19
  ['getGroup', toToolName('vrchat.group.profile')],
15
20
  ['searchGroups', toToolName('vrchat.groups.search')],
16
21
  ['getGroupMembers', toToolName('vrchat.group.members')],
22
+ ['getGroupRoles', toToolName('vrchat.group.roles')],
23
+ ['getGroupRoleTemplates', toToolName('vrchat.group.roles')],
17
24
  ['getGroupPosts', toToolName('vrchat.group.posts_recent')],
18
25
  ['getGroupInstances', toToolName('vrchat.group.instances.overview')],
19
26
  ['getGroupCalendarEvents', toToolName('vrchat.group.events.list')],
@@ -23,71 +30,28 @@ const CURATED_READ_TOOL_MAP = new Map([
23
30
  ['getCalendarEvents', toToolName('vrchat.events.upcoming')],
24
31
  ['discoverCalendarEvents', toToolName('vrchat.events.discover')],
25
32
  ['searchCalendarEvents', toToolName('vrchat.events.search')],
33
+ ['getAvatar', toToolName('vrchat.avatar.profile')],
26
34
  ]);
27
35
  const CURATED_WRITE_TOOL_MAP = new Map([
36
+ ['boop', toToolName('vrchat.boop')],
37
+ ['createGroupInvite', toToolName('vrchat.group.invite')],
28
38
  ['createInstance', toToolName('vrchat.instance.create')],
39
+ ['friend', toToolName('vrchat.friend.request')],
29
40
  ['inviteMyselfTo', toToolName('vrchat.invite.self')],
30
41
  ['inviteUser', toToolName('vrchat.invite.user')],
31
42
  ['createGroupCalendarEvent', toToolName('vrchat.event.create')],
32
43
  ['updateGroupCalendarEvent', toToolName('vrchat.event.update')],
33
44
  ['deleteGroupCalendarEvent', toToolName('vrchat.event.delete')],
34
45
  ['followGroupCalendarEvent', toToolName('vrchat.event.follow')],
46
+ ['addFavorite', toToolName('vrchat.favorite.add')],
47
+ ['removeFavorite', toToolName('vrchat.favorite.remove')],
48
+ ['addGroupMemberRole', toToolName('vrchat.group.roles.manage')],
49
+ ['removeGroupMemberRole', toToolName('vrchat.group.roles.manage')],
50
+ ['createGroupRole', toToolName('vrchat.group.roles.manage')],
51
+ ['updateGroupRole', toToolName('vrchat.group.roles.manage')],
52
+ ['deleteGroupRole', toToolName('vrchat.group.roles.manage')],
35
53
  ['updateUser', toToolName('vrchat.profile.update')],
36
- ]);
37
- const GENERATED_READ_TOOL_DESCRIPTIONS = new Map([
38
- ['getConfig', 'Get VRChat API config (includes the current client API key).'],
39
- ['getSystemTime', 'Get VRChat server time.'],
40
- ['getCurrentUser', 'Fetch the current user (raw API; large payload). Prefer vrchat_me.'],
41
- ['getFriends', 'List friends (raw API; prefers pagination).'],
42
- ['getUser', 'Fetch a user by userId (raw API). Prefer vrchat_user_profile.'],
43
- ['getUserByName', 'Fetch a user by name (raw API). Prefer vrchat_user_profile.'],
44
- ['getUserGroups', 'List groups for a user (raw API). Prefer vrchat_user_groups.'],
45
- ['getWorld', 'Fetch a world by worldId (raw API). Prefer vrchat_world_profile.'],
46
- ['searchWorlds', 'Search worlds (raw API). Prefer vrchat_worlds_search.'],
47
- ['getFavoritedWorlds', 'List favorited worlds (raw API). Prefer vrchat_worlds_favorites.'],
48
- ['getGroup', 'Fetch a group profile (raw API). Prefer vrchat_group_profile.'],
49
- ['searchGroups', 'Search groups (raw API). Prefer vrchat_groups_search.'],
50
- ['getGroupMembers', 'List group members (raw API). Prefer vrchat_group_members.'],
51
- ['getGroupPosts', 'List group posts (raw API). Prefer vrchat_group_posts_recent.'],
52
- ['getGroupInstances', 'List group instances (raw API). Prefer vrchat_group_instances_overview.'],
53
- [
54
- 'getGroupCalendarEvents',
55
- 'List group calendar events (raw API). Prefer vrchat_group_events_list.',
56
- ],
57
- ['getGroupCalendarEvent', 'Get a group calendar event (raw API). Prefer vrchat_group_event_get.'],
58
- ['getGroupNextCalendarEvent', 'Get the next group calendar event (raw API). Prefer vrchat_group_event_next.'],
59
- ['getNotifications', 'List recent notifications (raw API). Prefer vrchat_notifications_recent.'],
60
- ['getCalendarEvents', 'List upcoming calendar events (raw API). Prefer vrchat_events_upcoming.'],
61
- ['discoverCalendarEvents', 'Discover calendar events (raw API). Prefer vrchat_events_discover.'],
62
- ['searchCalendarEvents', 'Search calendar events (raw API). Prefer vrchat_events_search.'],
63
- ]);
64
- const GENERATED_WRITE_TOOL_DESCRIPTIONS = new Map([
65
- ['createInstance', 'Create a VRChat instance (raw API). Prefer vrchat_instance_create.'],
66
- [
67
- 'inviteUser',
68
- 'Invite a user to an instance (raw API). Prefer vrchat_invite_user or vrchat_invite_user_to_me when inviting to your current instance.',
69
- ],
70
- ['inviteMyselfTo', 'Invite yourself to an instance (raw API). Prefer vrchat_invite_self.'],
71
- [
72
- 'createGroupCalendarEvent',
73
- 'Create a group calendar event (raw API). Prefer vrchat_event_create.',
74
- ],
75
- [
76
- 'updateGroupCalendarEvent',
77
- 'Update a group calendar event (raw API). Prefer vrchat_event_update.',
78
- ],
79
- [
80
- 'deleteGroupCalendarEvent',
81
- 'Delete a group calendar event (raw API). Prefer vrchat_event_delete.',
82
- ],
83
- [
84
- 'followGroupCalendarEvent',
85
- 'Follow or unfollow a group calendar event (raw API). Prefer vrchat_event_follow.',
86
- ],
87
- [
88
- 'updateUser',
89
- 'Update the current user profile (raw API). Prefer vrchat_profile_update (or vrchat_status_set for status-only changes).',
90
- ],
54
+ ['logout', toToolName('vrchat.auth.logout')],
91
55
  ]);
92
56
  export function getCuratedReadToolName(operationId) {
93
57
  return CURATED_READ_TOOL_MAP.get(operationId);
@@ -95,10 +59,4 @@ export function getCuratedReadToolName(operationId) {
95
59
  export function getCuratedWriteToolName(operationId) {
96
60
  return CURATED_WRITE_TOOL_MAP.get(operationId);
97
61
  }
98
- export function getGeneratedReadToolDescription(operationId) {
99
- return GENERATED_READ_TOOL_DESCRIPTIONS.get(operationId);
100
- }
101
- export function getGeneratedWriteToolDescription(operationId) {
102
- return GENERATED_WRITE_TOOL_DESCRIPTIONS.get(operationId);
103
- }
104
62
  //# sourceMappingURL=generatedToolOverrides.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generatedToolOverrides.js","sourceRoot":"","sources":["../../../src/core/generatedToolOverrides.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generatedToolOverrides.js","sourceRoot":"","sources":["../../../src/core/generatedToolOverrides.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,11 @@
1
- export const GENERATED_READ_SKIP_IDS = [
2
- 'getConfig',
3
- 'getSystemTime',
4
- 'getFriends',
5
- 'getUser',
6
- 'getUserByName',
7
- 'getGroup',
8
- 'getGroupAnnouncements',
9
- 'getGroupCalendarEvents',
10
- 'getGroupNextCalendarEvent',
11
- 'getGroupCalendarEvent',
12
- 'discoverCalendarEvents',
13
- 'searchCalendarEvents',
14
- 'getWorld',
15
- ];
1
+ import { CONTENT_MANAGEMENT_OPERATION_IDS } from './operationPolicy.js';
2
+ // Extra hard skips for generated tools. Curated replacements are filtered in generatedToolOverrides.
3
+ export const GENERATED_READ_SKIP_IDS = ['getGroupAnnouncements'];
16
4
  export const GENERATED_WRITE_SKIP_IDS = [
17
- 'createInstance',
18
- 'inviteMyselfTo',
19
- 'inviteUser',
20
5
  'createGroupAnnouncement',
21
6
  'deleteGroupAnnouncement',
22
- 'createGroupCalendarEvent',
23
- 'updateGroupCalendarEvent',
24
- 'deleteGroupCalendarEvent',
25
- 'followGroupCalendarEvent',
26
- 'updateUser',
7
+ 'inviteUserWithPhoto',
8
+ 'requestInviteWithPhoto',
9
+ ...CONTENT_MANAGEMENT_OPERATION_IDS,
27
10
  ];
28
11
  //# sourceMappingURL=generatedToolSkips.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generatedToolSkips.js","sourceRoot":"","sources":["../../../src/core/generatedToolSkips.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,WAAW;IACX,eAAe;IACf,YAAY;IACZ,SAAS;IACT,eAAe;IACf,UAAU;IACV,uBAAuB;IACvB,wBAAwB;IACxB,2BAA2B;IAC3B,uBAAuB;IACvB,wBAAwB;IACxB,sBAAsB;IACtB,UAAU;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,yBAAyB;IACzB,yBAAyB;IACzB,0BAA0B;IAC1B,0BAA0B;IAC1B,0BAA0B;IAC1B,0BAA0B;IAC1B,YAAY;CACb,CAAC"}
1
+ {"version":3,"file":"generatedToolSkips.js","sourceRoot":"","sources":["../../../src/core/generatedToolSkips.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAC;AAExE,qGAAqG;AACrG,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAEjE,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,yBAAyB;IACzB,yBAAyB;IACzB,qBAAqB;IACrB,wBAAwB;IACxB,GAAG,gCAAgC;CACpC,CAAC"}
@@ -0,0 +1,96 @@
1
+ import { getSpecIndex } from './spec.js';
2
+ import { getGeneratedOperationInfo, } from './generatedOperations.js';
3
+ function isRecord(value) {
4
+ return Boolean(value && typeof value === 'object' && !Array.isArray(value));
5
+ }
6
+ function getText(value) {
7
+ return typeof value === 'string' && value.trim() ? value : undefined;
8
+ }
9
+ function resolveLocalRef(raw, ref) {
10
+ if (!ref.startsWith('#/'))
11
+ return undefined;
12
+ let current = raw;
13
+ for (const part of ref.slice(2).split('/')) {
14
+ if (!isRecord(current))
15
+ return undefined;
16
+ current = current[part.replace(/~1/g, '/').replace(/~0/g, '~')];
17
+ }
18
+ return current;
19
+ }
20
+ function schemaDetails(schema, raw) {
21
+ if (!isRecord(schema))
22
+ return schema === undefined ? {} : { schema };
23
+ const ref = typeof schema.$ref === 'string' ? schema.$ref : undefined;
24
+ if (!ref)
25
+ return { schema };
26
+ const resolved = resolveLocalRef(raw, ref);
27
+ return { schema: resolved ?? schema, schemaRef: ref };
28
+ }
29
+ function rawOperation(raw, op) {
30
+ if (!isRecord(raw))
31
+ return undefined;
32
+ const paths = raw.paths;
33
+ if (!isRecord(paths))
34
+ return undefined;
35
+ const pathItem = paths[op.path];
36
+ if (!isRecord(pathItem))
37
+ return undefined;
38
+ const methodEntry = pathItem[op.method.toLowerCase()];
39
+ return isRecord(methodEntry) ? methodEntry : undefined;
40
+ }
41
+ function resolveRequestBody(raw, requestBody) {
42
+ if (!isRecord(requestBody))
43
+ return undefined;
44
+ const ref = typeof requestBody.$ref === 'string' ? requestBody.$ref : undefined;
45
+ const resolved = ref ? resolveLocalRef(raw, ref) : requestBody;
46
+ return isRecord(resolved) ? resolved : requestBody;
47
+ }
48
+ function firstRequestBodySchema(body) {
49
+ const content = body?.content;
50
+ if (!isRecord(content))
51
+ return {};
52
+ const contentTypes = Object.keys(content);
53
+ const json = content['application/json'];
54
+ const selected = isRecord(json) ? json : contentTypes.map((type) => content[type]).find(isRecord);
55
+ return {
56
+ contentTypes,
57
+ schema: isRecord(selected) ? selected.schema : undefined,
58
+ };
59
+ }
60
+ function buildRequestBodyDetails(input) {
61
+ if (!input.op.hasRequestBody)
62
+ return undefined;
63
+ const body = resolveRequestBody(input.raw, input.rawOp?.requestBody);
64
+ const { contentTypes, schema } = firstRequestBodySchema(body);
65
+ return {
66
+ required: Boolean(input.op.requestBodyRequired),
67
+ description: getText(body?.description) ?? input.op.requestBodyDescription,
68
+ contentTypes,
69
+ ...schemaDetails(schema ?? input.op.requestBodySchema, input.raw),
70
+ };
71
+ }
72
+ export async function getOperationDetails(operationId) {
73
+ const index = await getSpecIndex();
74
+ const op = index.operations.get(operationId);
75
+ if (!op)
76
+ throw new Error(`Unknown operationId: ${operationId}`);
77
+ const rawOp = rawOperation(index.raw, op);
78
+ const generatedToolInfo = getGeneratedOperationInfo(op);
79
+ return {
80
+ operationId,
81
+ method: op.method,
82
+ path: op.path,
83
+ summary: getText(rawOp?.summary),
84
+ description: getText(rawOp?.description),
85
+ ...generatedToolInfo,
86
+ parameters: op.parameters.map((param) => ({
87
+ name: param.name,
88
+ in: param.in,
89
+ required: param.required,
90
+ description: param.description,
91
+ ...schemaDetails(param.schema, index.raw),
92
+ })),
93
+ requestBody: buildRequestBodyDetails({ raw: index.raw, op, rawOp }),
94
+ };
95
+ }
96
+ //# sourceMappingURL=operationDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operationDetails.js","sourceRoot":"","sources":["../../../src/core/operationDetails.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export const CONTENT_MANAGEMENT_OPERATION_IDS = [
2
+ 'createAvatar',
3
+ 'updateAvatar',
4
+ 'deleteAvatar',
5
+ 'createWorld',
6
+ 'updateWorld',
7
+ 'deleteWorld',
8
+ 'publishWorld',
9
+ 'unpublishWorld',
10
+ ];
11
+ const BLOCKED_OPERATION_REASONS = new Map([
12
+ [
13
+ 'getGroupAnnouncements',
14
+ 'group announcement endpoints are deprecated and unsafe.',
15
+ ],
16
+ [
17
+ 'createGroupAnnouncement',
18
+ 'group announcement endpoints are deprecated and unsafe.',
19
+ ],
20
+ [
21
+ 'deleteGroupAnnouncement',
22
+ 'group announcement endpoints are deprecated and unsafe.',
23
+ ],
24
+ ...CONTENT_MANAGEMENT_OPERATION_IDS.map((operationId) => [
25
+ operationId,
26
+ 'avatar/world content-management endpoints are disabled by policy. Use ordinary view/select/favorite tools instead.',
27
+ ]),
28
+ ]);
29
+ export function getBlockedOperationReason(operationId) {
30
+ return BLOCKED_OPERATION_REASONS.get(operationId);
31
+ }
32
+ //# sourceMappingURL=operationPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operationPolicy.js","sourceRoot":"","sources":["../../../src/core/operationPolicy.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,cAAc;IACd,cAAc;IACd,cAAc;IACd,aAAa;IACb,aAAa;IACb,aAAa;IACb,cAAc;IACd,gBAAgB;CACR,CAAC;AAEX,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAiB;IACxD;QACE,uBAAuB;QACvB,yDAAyD;KAC1D;IACD;QACE,yBAAyB;QACzB,yDAAyD;KAC1D;IACD;QACE,yBAAyB;QACzB,yDAAyD;KAC1D;IACD,GAAG,gCAAgC,CAAC,GAAG,CACrC,CAAC,WAAW,EAAE,EAAE,CACd;QACE,WAAW;QACX,oHAAoH;KAC5G,CACb;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,yBAAyB,CAAC,WAAmB;IAC3D,OAAO,yBAAyB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACpD,CAAC"}
@@ -1,93 +1,47 @@
1
- import { z } from 'zod';
2
1
  import { getConfig } from '../config/index.js';
3
- import { getSpecIndex } from './spec.js';
4
2
  import { callReadOperation } from './readTools.js';
5
3
  import { CallError } from './client.js';
6
- import { buildParamsSchema } from './operationSchemas.js';
7
- import { readToolName } from '../utils/toolNames.js';
4
+ import { toolName } from '../utils/toolNames.js';
8
5
  import { toolError } from '../utils/toolResponses.js';
9
6
  import { readOnlyToolAnnotations } from '../utils/toolAnnotations.js';
10
- import { getCuratedReadToolName, getGeneratedReadToolDescription, } from './generatedToolOverrides.js';
11
- import { GENERATED_READ_SKIP_IDS } from './generatedToolSkips.js';
12
- function buildGeneratedReadToolDescription(operationId, op) {
13
- const summary = op?.summary ?? op?.description ?? '';
14
- const summaryLine = String(summary).split('\n')[0].trim();
15
- const curated = getCuratedReadToolName(operationId);
16
- const override = getGeneratedReadToolDescription(operationId);
17
- if (override)
18
- return override;
19
- const fallback = summaryLine
20
- ? `Auto-generated read tool. ${summaryLine}`
21
- : `Auto-generated read tool for ${operationId}.`;
22
- if (curated)
23
- return `${fallback} Prefer curated tool: ${curated}.`;
24
- return `${fallback} Prefer curated tools when available.`;
25
- }
26
- function buildGeneratedReadToolInputSchema(input) {
27
- const opDef = input.index.operations.get(input.operationId);
28
- const paramsInfo = buildParamsSchema(opDef?.parameters ?? [], input.componentsSchemas, {
29
- aliasNumberForN: true,
30
- });
31
- const shape = {};
32
- if (paramsInfo.schema) {
33
- shape.params = paramsInfo.required ? paramsInfo.schema : paramsInfo.schema.optional();
34
- }
35
- return z.object(shape).merge(input.readOptionsSchema).passthrough();
36
- }
7
+ import { getAvailableGeneratedOperationIds } from './generatedOperations.js';
8
+ import { GeneratedReadToolInputSchema } from '../schemas/read.js';
37
9
  export async function registerGeneratedReadTools(server, options) {
38
10
  const config = getConfig();
39
- if (config.generatedReadTools.disable)
11
+ if (!config.generatedReadTools.enabled)
40
12
  return 0;
41
- const skipOperationIds = new Set(GENERATED_READ_SKIP_IDS);
42
- const index = await getSpecIndex();
43
- const spec = index.raw ?? {};
44
- const paths = spec.paths ?? {};
45
- const componentsSchemas = spec?.components?.schemas;
46
- let count = 0;
47
- for (const pathItem of Object.values(paths)) {
48
- for (const [method, op] of Object.entries(pathItem ?? {})) {
49
- if (method !== 'get')
50
- continue;
51
- if (!op?.operationId)
52
- continue;
53
- const operationId = op.operationId;
54
- if (skipOperationIds.has(operationId))
55
- continue;
56
- const toolName = readToolName(operationId);
57
- const description = buildGeneratedReadToolDescription(operationId, op);
58
- const inputSchema = buildGeneratedReadToolInputSchema({
59
- operationId,
60
- index,
61
- componentsSchemas,
62
- readOptionsSchema: options.readOptionsSchema,
63
- });
64
- server.registerTool(toolName, {
65
- description,
66
- inputSchema,
67
- outputSchema: options.readOutputSchema,
68
- annotations: readOnlyToolAnnotations,
69
- }, async (args) => {
70
- try {
71
- const { params = {}, fields, compact, maxArrayLength, includeMeta } = args ?? {};
72
- const result = await callReadOperation(operationId, params, {
73
- fields,
74
- compact,
75
- maxArrayLength,
76
- includeMeta,
77
- });
78
- return options.respond(result, includeMeta);
79
- }
80
- catch (err) {
81
- if (err instanceof CallError && err.payload) {
82
- return toolError(err.message, err.payload);
83
- }
84
- const message = err instanceof Error ? err.message : 'Unknown error';
85
- return toolError(message);
86
- }
13
+ const availableOperationIds = await getAvailableGeneratedOperationIds('read');
14
+ if (availableOperationIds.size === 0)
15
+ return 0;
16
+ const inputSchema = GeneratedReadToolInputSchema;
17
+ server.registerTool(toolName('vrchat.read'), {
18
+ description: 'Call an available generated VRChat GET operation by operationId. Use vrchat_operations and vrchat_operation_details to discover params.',
19
+ inputSchema,
20
+ outputSchema: options.readOutputSchema,
21
+ annotations: readOnlyToolAnnotations,
22
+ }, async (args) => {
23
+ try {
24
+ const { operationId, params = {}, fields, compact, maxArrayLength, includeMeta, page } = inputSchema.parse(args ?? {});
25
+ if (!availableOperationIds.has(operationId)) {
26
+ return toolError(`Generated read operation ${operationId} is not available. Use vrchat_operation_details for status.`);
27
+ }
28
+ const result = await callReadOperation(operationId, params, {
29
+ fields,
30
+ compact,
31
+ maxArrayLength,
32
+ includeMeta,
33
+ page,
87
34
  });
88
- count += 1;
35
+ return options.respond(result, includeMeta);
36
+ }
37
+ catch (err) {
38
+ if (err instanceof CallError && err.payload) {
39
+ return toolError(err.message, err.payload);
40
+ }
41
+ const message = err instanceof Error ? err.message : 'Unknown error';
42
+ return toolError(message);
89
43
  }
90
- }
91
- return count;
44
+ });
45
+ return 1;
92
46
  }
93
47
  //# sourceMappingURL=readToolRegistry.js.map