reverse_image_search_anime
Identify anime characters and scenes by uploading an image URL to search SauceNAO's database for matches and source information.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Image URL to search on SauceNAO |
Implementation Reference
- src/index.ts:317-326 (handler)Registration and handler definition for reverse_image_search_anime.
server.tool( "reverse_image_search_anime", { url: z.string().url().describe("Image URL to search on SauceNAO") }, async ({ url }) => { const result = await snClient.searchUrl(url); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }], }; } ); - src/tools/saucenao.ts:24-52 (handler)Core logic implementation for searching SauceNAO.
async searchUrl(url: string): Promise<SauceNaoResult> { const apiKey = configManager.get("SAUCENAO_API_KEY"); if (!apiKey) { throw new McpError( ErrorCode.InvalidRequest, "SAUCENAO_API_KEY is not configured" ); } try { const data = await this.fetch<any>("search.php", { method: "GET", }, { db: 999, output_type: 2, numres: 5, url: url, api_key: apiKey, }); return SauceNaoResultSchema.parse(data); } catch (error) { if (error instanceof McpError) throw error; throw new McpError( ErrorCode.InternalError, `SauceNAO error: ${(error as Error).message}` ); } } - src/tools/saucenao.ts:6-12 (schema)Validation schema for SauceNAO results.
export const SauceNaoResultSchema = z.object({ header: z.any(), results: z.array(z.object({ header: z.any(), data: z.any(), })), });