@cyanheads/anime-mcp-server 0.1.1

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 (85) hide show
  1. package/AGENTS.md +346 -0
  2. package/CLAUDE.md +346 -0
  3. package/Dockerfile +99 -0
  4. package/LICENSE +201 -0
  5. package/README.md +313 -0
  6. package/changelog/0.1.x/0.1.1.md +42 -0
  7. package/changelog/template.md +127 -0
  8. package/dist/index.d.ts +8 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +24 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/mcp-server/prompts/index.d.ts +7 -0
  13. package/dist/mcp-server/prompts/index.d.ts.map +1 -0
  14. package/dist/mcp-server/prompts/index.js +7 -0
  15. package/dist/mcp-server/prompts/index.js.map +1 -0
  16. package/dist/mcp-server/resources/definitions/anime-media.resource.d.ts +31 -0
  17. package/dist/mcp-server/resources/definitions/anime-media.resource.d.ts.map +1 -0
  18. package/dist/mcp-server/resources/definitions/anime-media.resource.js +100 -0
  19. package/dist/mcp-server/resources/definitions/anime-media.resource.js.map +1 -0
  20. package/dist/mcp-server/resources/index.d.ts +29 -0
  21. package/dist/mcp-server/resources/index.d.ts.map +1 -0
  22. package/dist/mcp-server/resources/index.js +7 -0
  23. package/dist/mcp-server/resources/index.js.map +1 -0
  24. package/dist/mcp-server/tools/definitions/anime-find-characters.tool.d.ts +77 -0
  25. package/dist/mcp-server/tools/definitions/anime-find-characters.tool.d.ts.map +1 -0
  26. package/dist/mcp-server/tools/definitions/anime-find-characters.tool.js +308 -0
  27. package/dist/mcp-server/tools/definitions/anime-find-characters.tool.js.map +1 -0
  28. package/dist/mcp-server/tools/definitions/anime-get-media.tool.d.ts +92 -0
  29. package/dist/mcp-server/tools/definitions/anime-get-media.tool.d.ts.map +1 -0
  30. package/dist/mcp-server/tools/definitions/anime-get-media.tool.js +425 -0
  31. package/dist/mcp-server/tools/definitions/anime-get-media.tool.js.map +1 -0
  32. package/dist/mcp-server/tools/definitions/anime-get-rankings.tool.d.ts +73 -0
  33. package/dist/mcp-server/tools/definitions/anime-get-rankings.tool.d.ts.map +1 -0
  34. package/dist/mcp-server/tools/definitions/anime-get-rankings.tool.js +154 -0
  35. package/dist/mcp-server/tools/definitions/anime-get-rankings.tool.js.map +1 -0
  36. package/dist/mcp-server/tools/definitions/anime-get-recommendations.tool.d.ts +35 -0
  37. package/dist/mcp-server/tools/definitions/anime-get-recommendations.tool.d.ts.map +1 -0
  38. package/dist/mcp-server/tools/definitions/anime-get-recommendations.tool.js +174 -0
  39. package/dist/mcp-server/tools/definitions/anime-get-recommendations.tool.js.map +1 -0
  40. package/dist/mcp-server/tools/definitions/anime-get-relations.tool.d.ts +43 -0
  41. package/dist/mcp-server/tools/definitions/anime-get-relations.tool.d.ts.map +1 -0
  42. package/dist/mcp-server/tools/definitions/anime-get-relations.tool.js +245 -0
  43. package/dist/mcp-server/tools/definitions/anime-get-relations.tool.js.map +1 -0
  44. package/dist/mcp-server/tools/definitions/anime-get-schedule.tool.d.ts +51 -0
  45. package/dist/mcp-server/tools/definitions/anime-get-schedule.tool.d.ts.map +1 -0
  46. package/dist/mcp-server/tools/definitions/anime-get-schedule.tool.js +196 -0
  47. package/dist/mcp-server/tools/definitions/anime-get-schedule.tool.js.map +1 -0
  48. package/dist/mcp-server/tools/definitions/anime-get-studio.tool.d.ts +50 -0
  49. package/dist/mcp-server/tools/definitions/anime-get-studio.tool.d.ts.map +1 -0
  50. package/dist/mcp-server/tools/definitions/anime-get-studio.tool.js +163 -0
  51. package/dist/mcp-server/tools/definitions/anime-get-studio.tool.js.map +1 -0
  52. package/dist/mcp-server/tools/definitions/anime-search-media.tool.d.ts +73 -0
  53. package/dist/mcp-server/tools/definitions/anime-search-media.tool.d.ts.map +1 -0
  54. package/dist/mcp-server/tools/definitions/anime-search-media.tool.js +229 -0
  55. package/dist/mcp-server/tools/definitions/anime-search-media.tool.js.map +1 -0
  56. package/dist/mcp-server/tools/index.d.ts +435 -0
  57. package/dist/mcp-server/tools/index.d.ts.map +1 -0
  58. package/dist/mcp-server/tools/index.js +23 -0
  59. package/dist/mcp-server/tools/index.js.map +1 -0
  60. package/dist/services/anilist/anilist-service.d.ts +90 -0
  61. package/dist/services/anilist/anilist-service.d.ts.map +1 -0
  62. package/dist/services/anilist/anilist-service.js +496 -0
  63. package/dist/services/anilist/anilist-service.js.map +1 -0
  64. package/dist/services/anilist/types.d.ts +255 -0
  65. package/dist/services/anilist/types.d.ts.map +1 -0
  66. package/dist/services/anilist/types.js +6 -0
  67. package/dist/services/anilist/types.js.map +1 -0
  68. package/dist/services/jikan/jikan-service.d.ts +22 -0
  69. package/dist/services/jikan/jikan-service.d.ts.map +1 -0
  70. package/dist/services/jikan/jikan-service.js +89 -0
  71. package/dist/services/jikan/jikan-service.js.map +1 -0
  72. package/dist/services/jikan/types.d.ts +85 -0
  73. package/dist/services/jikan/types.d.ts.map +1 -0
  74. package/dist/services/jikan/types.js +6 -0
  75. package/dist/services/jikan/types.js.map +1 -0
  76. package/dist/services/kitsu/kitsu-service.d.ts +14 -0
  77. package/dist/services/kitsu/kitsu-service.d.ts.map +1 -0
  78. package/dist/services/kitsu/kitsu-service.js +94 -0
  79. package/dist/services/kitsu/kitsu-service.js.map +1 -0
  80. package/dist/services/kitsu/types.d.ts +17 -0
  81. package/dist/services/kitsu/types.d.ts.map +1 -0
  82. package/dist/services/kitsu/types.js +6 -0
  83. package/dist/services/kitsu/types.js.map +1 -0
  84. package/package.json +103 -0
  85. package/server.json +99 -0
@@ -0,0 +1,435 @@
1
+ /**
2
+ * @fileoverview Barrel export for all anime-mcp-server tool definitions.
3
+ * @module mcp-server/tools/index
4
+ */
5
+ export declare const allToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
6
+ id: import("zod").ZodOptional<import("zod").ZodNumber>;
7
+ character_name: import("zod").ZodOptional<import("zod").ZodString>;
8
+ voice_actor_name: import("zod").ZodOptional<import("zod").ZodString>;
9
+ language: import("zod").ZodOptional<import("zod").ZodEnum<{
10
+ JAPANESE: "JAPANESE";
11
+ ENGLISH: "ENGLISH";
12
+ KOREAN: "KOREAN";
13
+ ITALIAN: "ITALIAN";
14
+ SPANISH: "SPANISH";
15
+ PORTUGUESE: "PORTUGUESE";
16
+ FRENCH: "FRENCH";
17
+ GERMAN: "GERMAN";
18
+ HEBREW: "HEBREW";
19
+ HUNGARIAN: "HUNGARIAN";
20
+ }>>;
21
+ page: import("zod").ZodDefault<import("zod").ZodNumber>;
22
+ per_page: import("zod").ZodDefault<import("zod").ZodNumber>;
23
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
24
+ mode: import("zod").ZodEnum<{
25
+ by_media: "by_media";
26
+ by_character: "by_character";
27
+ by_voice_actor: "by_voice_actor";
28
+ }>;
29
+ media_id: import("zod").ZodNullable<import("zod").ZodNumber>;
30
+ has_next_page: import("zod").ZodBoolean;
31
+ characters: import("zod").ZodArray<import("zod").ZodObject<{
32
+ character_id: import("zod").ZodNumber;
33
+ character_name: import("zod").ZodNullable<import("zod").ZodString>;
34
+ character_name_native: import("zod").ZodNullable<import("zod").ZodString>;
35
+ role: import("zod").ZodString;
36
+ character_image_url: import("zod").ZodNullable<import("zod").ZodString>;
37
+ character_site_url: import("zod").ZodNullable<import("zod").ZodString>;
38
+ voice_actors: import("zod").ZodArray<import("zod").ZodObject<{
39
+ va_id: import("zod").ZodNumber;
40
+ va_name: import("zod").ZodNullable<import("zod").ZodString>;
41
+ va_name_native: import("zod").ZodNullable<import("zod").ZodString>;
42
+ language: import("zod").ZodNullable<import("zod").ZodString>;
43
+ va_image_url: import("zod").ZodNullable<import("zod").ZodString>;
44
+ va_site_url: import("zod").ZodNullable<import("zod").ZodString>;
45
+ }, import("zod/v4/core").$strip>>;
46
+ }, import("zod/v4/core").$strip>>;
47
+ voice_actor: import("zod").ZodNullable<import("zod").ZodObject<{
48
+ va_id: import("zod").ZodNumber;
49
+ va_name: import("zod").ZodNullable<import("zod").ZodString>;
50
+ va_name_native: import("zod").ZodNullable<import("zod").ZodString>;
51
+ language: import("zod").ZodNullable<import("zod").ZodString>;
52
+ description: import("zod").ZodNullable<import("zod").ZodString>;
53
+ va_image_url: import("zod").ZodNullable<import("zod").ZodString>;
54
+ va_site_url: import("zod").ZodNullable<import("zod").ZodString>;
55
+ roles: import("zod").ZodArray<import("zod").ZodObject<{
56
+ media_id: import("zod").ZodNumber;
57
+ media_title: import("zod").ZodNullable<import("zod").ZodString>;
58
+ media_format: import("zod").ZodNullable<import("zod").ZodString>;
59
+ character_role: import("zod").ZodString;
60
+ character_name: import("zod").ZodNullable<import("zod").ZodString>;
61
+ }, import("zod/v4/core").$strip>>;
62
+ }, import("zod/v4/core").$strip>>;
63
+ }, import("zod/v4/core").$strip>, readonly [{
64
+ readonly reason: "not_found";
65
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
66
+ readonly when: "Name search returns no match from AniList";
67
+ readonly recovery: "Try a broader name search or check spelling. For character searches, use the full name or a distinctive part of it.";
68
+ }, {
69
+ readonly reason: "missing_identifier";
70
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
71
+ readonly when: "Neither id nor character_name nor voice_actor_name provided";
72
+ readonly recovery: "Provide at least one of: id (media AniList ID), character_name, or voice_actor_name.";
73
+ }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
74
+ id: import("zod").ZodNumber;
75
+ include_adult: import("zod").ZodDefault<import("zod").ZodBoolean>;
76
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
77
+ id: import("zod").ZodNumber;
78
+ id_mal: import("zod").ZodNullable<import("zod").ZodNumber>;
79
+ type: import("zod").ZodEnum<{
80
+ ANIME: "ANIME";
81
+ MANGA: "MANGA";
82
+ }>;
83
+ title: import("zod").ZodObject<{
84
+ romaji: import("zod").ZodNullable<import("zod").ZodString>;
85
+ english: import("zod").ZodNullable<import("zod").ZodString>;
86
+ native: import("zod").ZodNullable<import("zod").ZodString>;
87
+ }, import("zod/v4/core").$strip>;
88
+ format: import("zod").ZodNullable<import("zod").ZodString>;
89
+ status: import("zod").ZodNullable<import("zod").ZodString>;
90
+ season: import("zod").ZodNullable<import("zod").ZodString>;
91
+ description: import("zod").ZodNullable<import("zod").ZodString>;
92
+ source: import("zod").ZodNullable<import("zod").ZodString>;
93
+ episodes: import("zod").ZodNullable<import("zod").ZodNumber>;
94
+ chapters: import("zod").ZodNullable<import("zod").ZodNumber>;
95
+ volumes: import("zod").ZodNullable<import("zod").ZodNumber>;
96
+ genres: import("zod").ZodArray<import("zod").ZodString>;
97
+ tags: import("zod").ZodArray<import("zod").ZodObject<{
98
+ name: import("zod").ZodString;
99
+ category: import("zod").ZodNullable<import("zod").ZodString>;
100
+ rank: import("zod").ZodNullable<import("zod").ZodNumber>;
101
+ is_spoiler: import("zod").ZodBoolean;
102
+ is_adult: import("zod").ZodBoolean;
103
+ }, import("zod/v4/core").$strip>>;
104
+ studios: import("zod").ZodArray<import("zod").ZodObject<{
105
+ id: import("zod").ZodNumber;
106
+ name: import("zod").ZodString;
107
+ is_main: import("zod").ZodBoolean;
108
+ is_animation_studio: import("zod").ZodBoolean;
109
+ }, import("zod/v4/core").$strip>>;
110
+ scores: import("zod").ZodObject<{
111
+ anilist_mean: import("zod").ZodNullable<import("zod").ZodNumber>;
112
+ anilist_average: import("zod").ZodNullable<import("zod").ZodNumber>;
113
+ anilist_popularity: import("zod").ZodNullable<import("zod").ZodNumber>;
114
+ mal_score: import("zod").ZodNullable<import("zod").ZodNumber>;
115
+ mal_scored_by: import("zod").ZodNullable<import("zod").ZodNumber>;
116
+ mal_rank: import("zod").ZodNullable<import("zod").ZodNumber>;
117
+ mal_popularity: import("zod").ZodNullable<import("zod").ZodNumber>;
118
+ }, import("zod/v4/core").$strip>;
119
+ streaming_links: import("zod").ZodArray<import("zod").ZodObject<{
120
+ site: import("zod").ZodString;
121
+ url: import("zod").ZodString;
122
+ subs: import("zod").ZodArray<import("zod").ZodString>;
123
+ dubs: import("zod").ZodArray<import("zod").ZodString>;
124
+ source: import("zod").ZodEnum<{
125
+ kitsu: "kitsu";
126
+ anilist: "anilist";
127
+ }>;
128
+ }, import("zod/v4/core").$strip>>;
129
+ relations: import("zod").ZodArray<import("zod").ZodObject<{
130
+ relation_type: import("zod").ZodString;
131
+ id: import("zod").ZodNumber;
132
+ title: import("zod").ZodNullable<import("zod").ZodString>;
133
+ type: import("zod").ZodNullable<import("zod").ZodString>;
134
+ format: import("zod").ZodNullable<import("zod").ZodString>;
135
+ status: import("zod").ZodNullable<import("zod").ZodString>;
136
+ }, import("zod/v4/core").$strip>>;
137
+ cover_image_url: import("zod").ZodNullable<import("zod").ZodString>;
138
+ banner_image_url: import("zod").ZodNullable<import("zod").ZodString>;
139
+ site_url: import("zod").ZodNullable<import("zod").ZodString>;
140
+ next_airing: import("zod").ZodNullable<import("zod").ZodObject<{
141
+ episode: import("zod").ZodNumber;
142
+ airing_at_utc: import("zod").ZodString;
143
+ time_until_airing_seconds: import("zod").ZodNumber;
144
+ }, import("zod/v4/core").$strip>>;
145
+ is_adult: import("zod").ZodBoolean;
146
+ data_sources: import("zod").ZodObject<{
147
+ anilist: import("zod").ZodBoolean;
148
+ mal: import("zod").ZodBoolean;
149
+ kitsu: import("zod").ZodBoolean;
150
+ }, import("zod/v4/core").$strip>;
151
+ }, import("zod/v4/core").$strip>, readonly [{
152
+ readonly reason: "not_found";
153
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
154
+ readonly when: "AniList returns null for the given ID (invalid or nonexistent)";
155
+ readonly recovery: "Use anime_search_media to find a valid AniList ID and retry.";
156
+ }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
157
+ mode: import("zod").ZodEnum<{
158
+ top: "top";
159
+ trending: "trending";
160
+ seasonal: "seasonal";
161
+ }>;
162
+ media_type: import("zod").ZodEnum<{
163
+ ANIME: "ANIME";
164
+ MANGA: "MANGA";
165
+ }>;
166
+ format: import("zod").ZodOptional<import("zod").ZodEnum<{
167
+ MANGA: "MANGA";
168
+ TV: "TV";
169
+ TV_SHORT: "TV_SHORT";
170
+ MOVIE: "MOVIE";
171
+ SPECIAL: "SPECIAL";
172
+ OVA: "OVA";
173
+ ONA: "ONA";
174
+ MUSIC: "MUSIC";
175
+ NOVEL: "NOVEL";
176
+ ONE_SHOT: "ONE_SHOT";
177
+ }>>;
178
+ genre: import("zod").ZodOptional<import("zod").ZodString>;
179
+ season: import("zod").ZodOptional<import("zod").ZodEnum<{
180
+ WINTER: "WINTER";
181
+ SPRING: "SPRING";
182
+ SUMMER: "SUMMER";
183
+ FALL: "FALL";
184
+ }>>;
185
+ season_year: import("zod").ZodOptional<import("zod").ZodNumber>;
186
+ page: import("zod").ZodDefault<import("zod").ZodNumber>;
187
+ per_page: import("zod").ZodDefault<import("zod").ZodNumber>;
188
+ include_adult: import("zod").ZodDefault<import("zod").ZodBoolean>;
189
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
190
+ mode: import("zod").ZodEnum<{
191
+ top: "top";
192
+ trending: "trending";
193
+ seasonal: "seasonal";
194
+ }>;
195
+ media_type: import("zod").ZodEnum<{
196
+ ANIME: "ANIME";
197
+ MANGA: "MANGA";
198
+ }>;
199
+ season_label: import("zod").ZodNullable<import("zod").ZodString>;
200
+ page: import("zod").ZodNumber;
201
+ has_next_page: import("zod").ZodBoolean;
202
+ total_results: import("zod").ZodNullable<import("zod").ZodNumber>;
203
+ entries: import("zod").ZodArray<import("zod").ZodObject<{
204
+ rank: import("zod").ZodNumber;
205
+ id: import("zod").ZodNumber;
206
+ id_mal: import("zod").ZodNullable<import("zod").ZodNumber>;
207
+ title: import("zod").ZodNullable<import("zod").ZodString>;
208
+ title_english: import("zod").ZodNullable<import("zod").ZodString>;
209
+ type: import("zod").ZodEnum<{
210
+ ANIME: "ANIME";
211
+ MANGA: "MANGA";
212
+ }>;
213
+ format: import("zod").ZodNullable<import("zod").ZodString>;
214
+ status: import("zod").ZodNullable<import("zod").ZodString>;
215
+ season: import("zod").ZodNullable<import("zod").ZodString>;
216
+ episodes: import("zod").ZodNullable<import("zod").ZodNumber>;
217
+ chapters: import("zod").ZodNullable<import("zod").ZodNumber>;
218
+ mean_score: import("zod").ZodNullable<import("zod").ZodNumber>;
219
+ is_adult: import("zod").ZodBoolean;
220
+ cover_image_url: import("zod").ZodNullable<import("zod").ZodString>;
221
+ }, import("zod/v4/core").$strip>>;
222
+ }, import("zod/v4/core").$strip>, undefined, undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
223
+ id: import("zod").ZodNumber;
224
+ liked_aspects: import("zod").ZodOptional<import("zod").ZodString>;
225
+ page: import("zod").ZodDefault<import("zod").ZodNumber>;
226
+ per_page: import("zod").ZodDefault<import("zod").ZodNumber>;
227
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
228
+ source_id: import("zod").ZodNumber;
229
+ source_id_mal: import("zod").ZodNullable<import("zod").ZodNumber>;
230
+ source_type: import("zod").ZodNullable<import("zod").ZodString>;
231
+ liked_aspects: import("zod").ZodNullable<import("zod").ZodString>;
232
+ has_next_page: import("zod").ZodBoolean;
233
+ recommendations: import("zod").ZodArray<import("zod").ZodObject<{
234
+ id: import("zod").ZodNumber;
235
+ id_mal: import("zod").ZodNullable<import("zod").ZodNumber>;
236
+ title: import("zod").ZodNullable<import("zod").ZodString>;
237
+ title_english: import("zod").ZodNullable<import("zod").ZodString>;
238
+ type: import("zod").ZodNullable<import("zod").ZodString>;
239
+ format: import("zod").ZodNullable<import("zod").ZodString>;
240
+ status: import("zod").ZodNullable<import("zod").ZodString>;
241
+ mean_score: import("zod").ZodNullable<import("zod").ZodNumber>;
242
+ cover_image_url: import("zod").ZodNullable<import("zod").ZodString>;
243
+ anilist_rating: import("zod").ZodNullable<import("zod").ZodNumber>;
244
+ jikan_votes: import("zod").ZodNullable<import("zod").ZodNumber>;
245
+ sources: import("zod").ZodArray<import("zod").ZodEnum<{
246
+ anilist: "anilist";
247
+ jikan: "jikan";
248
+ }>>;
249
+ }, import("zod/v4/core").$strip>>;
250
+ }, import("zod/v4/core").$strip>, undefined, undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
251
+ id: import("zod").ZodNumber;
252
+ max_depth: import("zod").ZodDefault<import("zod").ZodNumber>;
253
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
254
+ root_id: import("zod").ZodNumber;
255
+ total_entries: import("zod").ZodNumber;
256
+ depth_reached: import("zod").ZodNumber;
257
+ entries: import("zod").ZodArray<import("zod").ZodObject<{
258
+ id: import("zod").ZodNumber;
259
+ id_mal: import("zod").ZodNullable<import("zod").ZodNumber>;
260
+ title: import("zod").ZodNullable<import("zod").ZodString>;
261
+ title_english: import("zod").ZodNullable<import("zod").ZodString>;
262
+ type: import("zod").ZodNullable<import("zod").ZodString>;
263
+ format: import("zod").ZodNullable<import("zod").ZodString>;
264
+ status: import("zod").ZodNullable<import("zod").ZodString>;
265
+ season: import("zod").ZodNullable<import("zod").ZodString>;
266
+ season_year: import("zod").ZodNullable<import("zod").ZodNumber>;
267
+ episodes: import("zod").ZodNullable<import("zod").ZodNumber>;
268
+ chapters: import("zod").ZodNullable<import("zod").ZodNumber>;
269
+ mean_score: import("zod").ZodNullable<import("zod").ZodNumber>;
270
+ is_adult: import("zod").ZodBoolean;
271
+ cover_image_url: import("zod").ZodNullable<import("zod").ZodString>;
272
+ relation_to_root: import("zod").ZodNullable<import("zod").ZodString>;
273
+ watch_order_category: import("zod").ZodEnum<{
274
+ main: "main";
275
+ supplementary: "supplementary";
276
+ }>;
277
+ is_root: import("zod").ZodBoolean;
278
+ }, import("zod/v4/core").$strip>>;
279
+ }, import("zod/v4/core").$strip>, readonly [{
280
+ readonly reason: "not_found";
281
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
282
+ readonly when: "Root media ID not found on AniList";
283
+ readonly recovery: "Use anime_search_media to find a valid AniList ID and retry.";
284
+ }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
285
+ mode: import("zod").ZodEnum<{
286
+ season: "season";
287
+ upcoming: "upcoming";
288
+ }>;
289
+ season: import("zod").ZodOptional<import("zod").ZodEnum<{
290
+ WINTER: "WINTER";
291
+ SPRING: "SPRING";
292
+ SUMMER: "SUMMER";
293
+ FALL: "FALL";
294
+ }>>;
295
+ season_year: import("zod").ZodOptional<import("zod").ZodNumber>;
296
+ days_ahead: import("zod").ZodDefault<import("zod").ZodNumber>;
297
+ page: import("zod").ZodDefault<import("zod").ZodNumber>;
298
+ per_page: import("zod").ZodDefault<import("zod").ZodNumber>;
299
+ include_adult: import("zod").ZodDefault<import("zod").ZodBoolean>;
300
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
301
+ mode: import("zod").ZodEnum<{
302
+ season: "season";
303
+ upcoming: "upcoming";
304
+ }>;
305
+ season_label: import("zod").ZodNullable<import("zod").ZodString>;
306
+ page: import("zod").ZodNumber;
307
+ has_next_page: import("zod").ZodBoolean;
308
+ total_results: import("zod").ZodNullable<import("zod").ZodNumber>;
309
+ entries: import("zod").ZodArray<import("zod").ZodObject<{
310
+ id: import("zod").ZodNumber;
311
+ title: import("zod").ZodNullable<import("zod").ZodString>;
312
+ title_english: import("zod").ZodNullable<import("zod").ZodString>;
313
+ format: import("zod").ZodNullable<import("zod").ZodString>;
314
+ status: import("zod").ZodNullable<import("zod").ZodString>;
315
+ episodes: import("zod").ZodNullable<import("zod").ZodNumber>;
316
+ mean_score: import("zod").ZodNullable<import("zod").ZodNumber>;
317
+ cover_image_url: import("zod").ZodNullable<import("zod").ZodString>;
318
+ next_episode: import("zod").ZodNullable<import("zod").ZodNumber>;
319
+ next_airing_at_utc: import("zod").ZodNullable<import("zod").ZodString>;
320
+ time_until_airing_seconds: import("zod").ZodNullable<import("zod").ZodNumber>;
321
+ }, import("zod/v4/core").$strip>>;
322
+ }, import("zod/v4/core").$strip>, readonly [{
323
+ readonly reason: "invalid_season";
324
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
325
+ readonly when: "mode is \"season\" but season or season_year is missing";
326
+ readonly recovery: "Provide both season (WINTER/SPRING/SUMMER/FALL) and season_year (e.g. 2024) when using mode \"season\".";
327
+ }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
328
+ name: import("zod").ZodOptional<import("zod").ZodString>;
329
+ id: import("zod").ZodOptional<import("zod").ZodNumber>;
330
+ sort: import("zod").ZodDefault<import("zod").ZodEnum<{
331
+ SCORE_DESC: "SCORE_DESC";
332
+ POPULARITY_DESC: "POPULARITY_DESC";
333
+ START_DATE_DESC: "START_DATE_DESC";
334
+ START_DATE: "START_DATE";
335
+ }>>;
336
+ page: import("zod").ZodDefault<import("zod").ZodNumber>;
337
+ per_page: import("zod").ZodDefault<import("zod").ZodNumber>;
338
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
339
+ studio_id: import("zod").ZodNumber;
340
+ studio_name: import("zod").ZodString;
341
+ is_animation_studio: import("zod").ZodBoolean;
342
+ studio_site_url: import("zod").ZodNullable<import("zod").ZodString>;
343
+ page: import("zod").ZodNumber;
344
+ has_next_page: import("zod").ZodBoolean;
345
+ total_titles: import("zod").ZodNullable<import("zod").ZodNumber>;
346
+ filmography: import("zod").ZodArray<import("zod").ZodObject<{
347
+ id: import("zod").ZodNumber;
348
+ id_mal: import("zod").ZodNullable<import("zod").ZodNumber>;
349
+ title: import("zod").ZodNullable<import("zod").ZodString>;
350
+ title_english: import("zod").ZodNullable<import("zod").ZodString>;
351
+ type: import("zod").ZodEnum<{
352
+ ANIME: "ANIME";
353
+ MANGA: "MANGA";
354
+ }>;
355
+ format: import("zod").ZodNullable<import("zod").ZodString>;
356
+ status: import("zod").ZodNullable<import("zod").ZodString>;
357
+ season: import("zod").ZodNullable<import("zod").ZodString>;
358
+ season_year: import("zod").ZodNullable<import("zod").ZodNumber>;
359
+ episodes: import("zod").ZodNullable<import("zod").ZodNumber>;
360
+ mean_score: import("zod").ZodNullable<import("zod").ZodNumber>;
361
+ is_adult: import("zod").ZodBoolean;
362
+ cover_image_url: import("zod").ZodNullable<import("zod").ZodString>;
363
+ }, import("zod/v4/core").$strip>>;
364
+ }, import("zod/v4/core").$strip>, readonly [{
365
+ readonly reason: "not_found";
366
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
367
+ readonly when: "Neither name search nor ID lookup returns a result on AniList";
368
+ readonly recovery: "Check the studio name spelling (e.g. \"Kyoto Animation\" not \"KyoAni\") or use the correct AniList studio ID.";
369
+ }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
370
+ media_type: import("zod").ZodEnum<{
371
+ ANIME: "ANIME";
372
+ MANGA: "MANGA";
373
+ }>;
374
+ query: import("zod").ZodOptional<import("zod").ZodString>;
375
+ genre: import("zod").ZodOptional<import("zod").ZodString>;
376
+ tag: import("zod").ZodOptional<import("zod").ZodString>;
377
+ season: import("zod").ZodOptional<import("zod").ZodEnum<{
378
+ WINTER: "WINTER";
379
+ SPRING: "SPRING";
380
+ SUMMER: "SUMMER";
381
+ FALL: "FALL";
382
+ }>>;
383
+ season_year: import("zod").ZodOptional<import("zod").ZodNumber>;
384
+ format: import("zod").ZodOptional<import("zod").ZodEnum<{
385
+ MANGA: "MANGA";
386
+ TV: "TV";
387
+ TV_SHORT: "TV_SHORT";
388
+ MOVIE: "MOVIE";
389
+ SPECIAL: "SPECIAL";
390
+ OVA: "OVA";
391
+ ONA: "ONA";
392
+ MUSIC: "MUSIC";
393
+ NOVEL: "NOVEL";
394
+ ONE_SHOT: "ONE_SHOT";
395
+ }>>;
396
+ status: import("zod").ZodOptional<import("zod").ZodEnum<{
397
+ FINISHED: "FINISHED";
398
+ RELEASING: "RELEASING";
399
+ NOT_YET_RELEASED: "NOT_YET_RELEASED";
400
+ CANCELLED: "CANCELLED";
401
+ HIATUS: "HIATUS";
402
+ }>>;
403
+ sort: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
404
+ page: import("zod").ZodDefault<import("zod").ZodNumber>;
405
+ per_page: import("zod").ZodDefault<import("zod").ZodNumber>;
406
+ include_adult: import("zod").ZodDefault<import("zod").ZodBoolean>;
407
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
408
+ source: import("zod").ZodEnum<{
409
+ anilist: "anilist";
410
+ jikan: "jikan";
411
+ }>;
412
+ page: import("zod").ZodNumber;
413
+ has_next_page: import("zod").ZodBoolean;
414
+ total_results: import("zod").ZodNullable<import("zod").ZodNumber>;
415
+ results: import("zod").ZodArray<import("zod").ZodObject<{
416
+ id: import("zod").ZodNumber;
417
+ id_mal: import("zod").ZodNullable<import("zod").ZodNumber>;
418
+ title_romaji: import("zod").ZodNullable<import("zod").ZodString>;
419
+ title_english: import("zod").ZodNullable<import("zod").ZodString>;
420
+ title_native: import("zod").ZodNullable<import("zod").ZodString>;
421
+ type: import("zod").ZodEnum<{
422
+ ANIME: "ANIME";
423
+ MANGA: "MANGA";
424
+ }>;
425
+ format: import("zod").ZodNullable<import("zod").ZodString>;
426
+ status: import("zod").ZodNullable<import("zod").ZodString>;
427
+ season: import("zod").ZodNullable<import("zod").ZodString>;
428
+ episodes: import("zod").ZodNullable<import("zod").ZodNumber>;
429
+ chapters: import("zod").ZodNullable<import("zod").ZodNumber>;
430
+ mean_score: import("zod").ZodNullable<import("zod").ZodNumber>;
431
+ is_adult: import("zod").ZodBoolean;
432
+ cover_image_url: import("zod").ZodNullable<import("zod").ZodString>;
433
+ }, import("zod/v4/core").$strip>>;
434
+ }, import("zod/v4/core").$strip>, undefined, undefined>)[];
435
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0DAS9B,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @fileoverview Barrel export for all anime-mcp-server tool definitions.
3
+ * @module mcp-server/tools/index
4
+ */
5
+ import { animeFindCharacters } from './definitions/anime-find-characters.tool.js';
6
+ import { animeGetMedia } from './definitions/anime-get-media.tool.js';
7
+ import { animeGetRankings } from './definitions/anime-get-rankings.tool.js';
8
+ import { animeGetRecommendations } from './definitions/anime-get-recommendations.tool.js';
9
+ import { animeGetRelations } from './definitions/anime-get-relations.tool.js';
10
+ import { animeGetSchedule } from './definitions/anime-get-schedule.tool.js';
11
+ import { animeGetStudio } from './definitions/anime-get-studio.tool.js';
12
+ import { animeSearchMedia } from './definitions/anime-search-media.tool.js';
13
+ export const allToolDefinitions = [
14
+ animeSearchMedia,
15
+ animeGetMedia,
16
+ animeGetRelations,
17
+ animeGetSchedule,
18
+ animeFindCharacters,
19
+ animeGetRecommendations,
20
+ animeGetRankings,
21
+ animeGetStudio,
22
+ ];
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp-server/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAE5E,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,gBAAgB;IAChB,aAAa;IACb,iBAAiB;IACjB,gBAAgB;IAChB,mBAAmB;IACnB,uBAAuB;IACvB,gBAAgB;IAChB,cAAc;CACf,CAAC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * @fileoverview AniList service — GraphQL client wrapping https://graphql.anilist.co.
3
+ * Primary source for all anime/manga data: search, detail, relations, schedule,
4
+ * characters, recommendations, rankings, and studio filmography.
5
+ * @module services/anilist/anilist-service
6
+ */
7
+ import type { AiringSchedule, CharacterEdge, CharacterWithMedia, MediaDetail, MediaFormat, MediaPage, MediaRelationEdge, MediaSeason, MediaStatus, MediaType, RecommendationNode, StaffWithRoles, StudioDetail } from './types.js';
8
+ /** Search anime or manga by various filters. Returns a page of results. */
9
+ export declare function searchMedia(params: {
10
+ mediaType: MediaType;
11
+ query?: string | undefined;
12
+ genre?: string | undefined;
13
+ tag?: string | undefined;
14
+ season?: MediaSeason | undefined;
15
+ seasonYear?: number | undefined;
16
+ format?: MediaFormat | undefined;
17
+ status?: MediaStatus | undefined;
18
+ sort?: string[] | undefined;
19
+ page?: number | undefined;
20
+ perPage?: number | undefined;
21
+ includeAdult?: boolean | undefined;
22
+ }): Promise<MediaPage>;
23
+ /** Get full detail for one media item by AniList ID. Returns null if not found. */
24
+ export declare function getMediaById(id: number, includeAdult?: boolean): Promise<MediaDetail | null>;
25
+ /** Get relation edges for a media entry (one hop). Returns null if not found. */
26
+ export declare function getMediaRelations(id: number): Promise<MediaRelationEdge[] | null>;
27
+ /** Get seasonal airing schedule. */
28
+ export declare function getSeasonSchedule(params: {
29
+ season: MediaSeason;
30
+ seasonYear: number;
31
+ page?: number;
32
+ perPage?: number;
33
+ includeAdult?: boolean;
34
+ }): Promise<MediaPage>;
35
+ /** Get upcoming airing episodes within a time window. */
36
+ export declare function getUpcomingEpisodes(params: {
37
+ daysAhead?: number;
38
+ page?: number;
39
+ perPage?: number;
40
+ }): Promise<AiringSchedule[]>;
41
+ /** Get characters for a media item. */
42
+ export declare function getMediaCharacters(params: {
43
+ mediaId: number;
44
+ language?: string | undefined;
45
+ page?: number | undefined;
46
+ perPage?: number | undefined;
47
+ }): Promise<{
48
+ characters: CharacterEdge[];
49
+ hasNextPage: boolean;
50
+ }>;
51
+ /** Search for a character by name. */
52
+ export declare function searchCharacter(name: string): Promise<CharacterWithMedia | null>;
53
+ /** Search for a voice actor (staff) by name. */
54
+ export declare function searchStaff(name: string, page?: number, perPage?: number): Promise<StaffWithRoles | null>;
55
+ /** Get recommendations for a media entry. */
56
+ export declare function getRecommendations(params: {
57
+ mediaId: number;
58
+ page?: number;
59
+ perPage?: number;
60
+ }): Promise<{
61
+ nodes: RecommendationNode[];
62
+ hasNextPage: boolean;
63
+ }>;
64
+ /** Get rankings by mode: top, trending, or seasonal. */
65
+ export declare function getRankings(params: {
66
+ mediaType: MediaType;
67
+ mode: 'top' | 'trending' | 'seasonal';
68
+ format?: MediaFormat | undefined;
69
+ genre?: string | undefined;
70
+ season?: MediaSeason | undefined;
71
+ seasonYear?: number | undefined;
72
+ page?: number | undefined;
73
+ perPage?: number | undefined;
74
+ includeAdult?: boolean | undefined;
75
+ }): Promise<MediaPage>;
76
+ /** Look up a studio by name (search) and return its filmography. */
77
+ export declare function searchStudio(params: {
78
+ name: string;
79
+ sort?: string;
80
+ page?: number;
81
+ perPage?: number;
82
+ }): Promise<StudioDetail | null>;
83
+ /** Get studio by AniList ID. */
84
+ export declare function getStudioById(params: {
85
+ id: number;
86
+ sort?: string;
87
+ page?: number;
88
+ perPage?: number;
89
+ }): Promise<StudioDetail | null>;
90
+ //# sourceMappingURL=anilist-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anilist-service.d.ts","sourceRoot":"","sources":["../../../src/services/anilist/anilist-service.ts"],"names":[],"mappings":"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"}