copyseeker-mcp-server 2.0.2 → 2.0.3

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.
package/README.md CHANGED
@@ -4,11 +4,11 @@ Give Claude, Cursor, VS Code Copilot, Windsurf, OpenAI Codex, Gemini CLI and any
4
4
 
5
5
  | Tool | What it does | Cost |
6
6
  |---|---|---|
7
- | `reverse_image_search` | Finds the web pages that show an image, ranked by prominence, with the copies each page uses | 1 search |
8
- | `detect_ai_image` | Tells whether an image is AI-generated, with a confidence score | 0.01 searches |
9
- | `detect_nsfw` | Tells whether an image contains nudity or sexual content, with a confidence score | 0.01 searches |
7
+ | `reverse_image_search` | Finds the web pages that show an image, ranked by prominence, with the copies each page uses | 1 credit |
8
+ | `detect_ai_image` | Tells whether an image is AI-generated, with a confidence score | 0.01 credits |
9
+ | `detect_nsfw` | Tells whether an image contains nudity or sexual content, with a confidence score | 0.01 credits |
10
10
 
11
- Each tool takes a direct image URL or the path to a local image file (up to 20 MB). Calls draw from the same search balance as the website, Monitor and the [Copyseeker API](https://copyseeker.net/apis).
11
+ Each tool takes a direct image URL or the path to a local image file (up to 20 MB). Calls draw from the same credit balance as the website, Monitor and the [Copyseeker API](https://copyseeker.net/apis).
12
12
 
13
13
  ## Requirements
14
14
 
package/build/client.js CHANGED
@@ -106,7 +106,7 @@ async function toError(response) {
106
106
  case "PLAN_REQUIRED":
107
107
  return new CopyseekerError("API access needs a paid Copyseeker plan. See https://copyseeker.net/pricing.", code);
108
108
  case "QUOTA_EXHAUSTED":
109
- return new CopyseekerError("The Copyseeker account has no searches left for this call. Top up at https://copyseeker.net/account#searches or wait for the monthly reset.", code);
109
+ return new CopyseekerError("The Copyseeker account has no credits left for this call. Top up at https://copyseeker.net/account#searches or wait for the monthly reset.", code);
110
110
  case "RATE_LIMITED": {
111
111
  const retryAfter = response.headers.get("Retry-After");
112
112
  return new CopyseekerError(`Copyseeker's rate limit (60 calls per minute) was hit. Retry after ${retryAfter ?? "a few"} seconds.`, code);
@@ -114,7 +114,7 @@ async function toError(response) {
114
114
  case "INVALID_IMAGE":
115
115
  return new CopyseekerError("Copyseeker could not read an image there. Use a direct link to the image file itself (not a web page that shows it), or a local file path. Nothing was charged.", code);
116
116
  case "SEARCH_FAILED":
117
- return new CopyseekerError("The search failed on Copyseeker's side and its searches were refunded. Try again.", code);
117
+ return new CopyseekerError("The call failed on Copyseeker's side and its credits were refunded. Try again.", code);
118
118
  default:
119
119
  return new CopyseekerError(`Copyseeker answered HTTP ${response.status}${code ? ` (${code})` : ""}.`, code || `HTTP_${response.status}`);
120
120
  }
package/build/server.js CHANGED
@@ -2,10 +2,10 @@ import { McpServer } from "@modelcontextprotocol/server";
2
2
  import { z } from "zod";
3
3
  import { CopyseekerError, } from "./client.js";
4
4
  export const SERVER_NAME = "copyseeker";
5
- export const SERVER_VERSION = "2.0.2";
5
+ export const SERVER_VERSION = "2.0.3";
6
6
  const DEFAULT_MAX_RESULTS = 25;
7
7
  const INSTRUCTIONS = `Copyseeker tools work on one image each, given as a direct image URL (http/https) or the path to a local image file.
8
- Each call is charged to the user's Copyseeker searches: reverse_image_search 1, detect_ai_image 0.01, detect_nsfw 0.01.
8
+ Each call is charged to the user's Copyseeker credits: reverse_image_search 1 credit, detect_ai_image 0.01, detect_nsfw 0.01.
9
9
  Call a tool once per image and question; do not repeat a call that already succeeded.`;
10
10
  const imageInput = z
11
11
  .string()
@@ -17,7 +17,7 @@ export function createServer(client) {
17
17
  server.registerTool("reverse_image_search", {
18
18
  title: "Reverse image search",
19
19
  description: "Find the web pages that show this image, with the copies of it each page uses, ranked by how prominent the page is. " +
20
- "Use it to find where an image came from, who published it first, or where it is reused without permission. Costs 1 search.",
20
+ "Use it to find where an image came from, who published it first, or where it is reused without permission. Costs 1 credit.",
21
21
  inputSchema: z.object({
22
22
  image: imageInput,
23
23
  max_results: z.number().int().min(1).max(100).default(DEFAULT_MAX_RESULTS).describe("Most pages to return, best ranked first."),
@@ -41,7 +41,7 @@ export function createServer(client) {
41
41
  });
42
42
  server.registerTool("detect_ai_image", {
43
43
  title: "Detect AI-generated image",
44
- description: "Tell whether an image was generated by AI (Midjourney, DALL-E, Stable Diffusion, Flux and similar) or is a real photo or artwork. Costs 0.01 searches.",
44
+ description: "Tell whether an image was generated by AI (Midjourney, DALL-E, Stable Diffusion, Flux and similar) or is a real photo or artwork. Costs 0.01 credits.",
45
45
  inputSchema: z.object({ image: imageInput }),
46
46
  outputSchema: z.object({
47
47
  isAiGenerated: z.boolean(),
@@ -56,7 +56,7 @@ export function createServer(client) {
56
56
  });
57
57
  server.registerTool("detect_nsfw", {
58
58
  title: "Detect NSFW image",
59
- description: "Tell whether an image contains nudity or sexual content that is not safe for work. Costs 0.01 searches.",
59
+ description: "Tell whether an image contains nudity or sexual content that is not safe for work. Costs 0.01 credits.",
60
60
  inputSchema: z.object({ image: imageInput }),
61
61
  outputSchema: z.object({
62
62
  isNsfw: z.boolean(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "copyseeker-mcp-server",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "MCP server for Copyseeker: reverse image search, AI image detection and NSFW detection for Claude, Cursor, VS Code Copilot, Codex, Gemini CLI and other AI assistants",
5
5
  "type": "module",
6
6
  "bin": {