@certscore/mcp 0.2.11 → 0.2.12

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
@@ -2,7 +2,7 @@
2
2
 
3
3
  CertScore MCP exposes a focused Model Context Protocol server for CertScore Pulse workflows.
4
4
 
5
- Status: public developer preview. Version 0.2.11 is prepared for the hosted Streamable HTTP service and the next deterministic Homebrew release. Local WC01 development uses `pnpm mcp:certscore`.
5
+ Status: public developer preview. Version 0.2.12 adds the focused hosted CertScore Light workflow and current remote registry metadata. Local WC01 development uses `pnpm mcp:certscore`.
6
6
 
7
7
  Public docs:
8
8
 
@@ -66,8 +66,15 @@ For low-volume agent discovery without account or OAuth setup, use the unauthent
66
66
  https://mcp.certscore.ai/mcp/anonymous
67
67
  ```
68
68
 
69
- It exposes the same public-safe tool surface and preserves the existing limit of 10 new scans per requester IP per UTC day. Reusing an
70
- eligible recent result does not consume the quota. Use the OAuth endpoint or a scoped API key for higher-volume workflows.
69
+ For the simplest no-account workflow, use CertScore Light:
70
+
71
+ ```text
72
+ https://mcp.certscore.ai/mcp/light
73
+ ```
74
+
75
+ Light exposes only `scan_site`, `get_scan_status`, and `get_scan_bundle`. The allowance is 20 new scans per requester IP per UTC day.
76
+ Eligible recent-result reuse does not consume the allowance. Every no-account response includes the higher-volume contact path at
77
+ `support@certscore.ai`.
71
78
 
72
79
  ## Configuration
73
80
 
@@ -149,7 +156,7 @@ curl -X POST https://certscore.ai/api/v2/scans \
149
156
  -d '{"url":"https://example.com","freshness":"latest","scanFrom":"eu_ie"}'
150
157
  ```
151
158
 
152
- New anonymous scans are limited to 10 per requester IP per UTC day. Reusing an eligible recent result does not consume the quota. Poll the returned status resource, then retrieve findings or evidence. Use OAuth or a scoped API key for repeated or higher-volume workflows.
159
+ New anonymous scans are limited to 20 per requester IP per UTC day. Reusing an eligible recent result does not consume the quota. Poll the returned status resource, then retrieve findings or evidence. Contact `support@certscore.ai` for a higher-volume allowance, including when reuse serves the current request.
153
160
 
154
161
  ## MCP Client Examples
155
162
 
@@ -20333,6 +20333,8 @@ var apiV2ScanCreationMetadataShape = {
20333
20333
  anonymousQuotaLimit: external_exports2.number().int().min(0).nullable().optional(),
20334
20334
  anonymousQuotaRemaining: external_exports2.number().int().min(0).nullable().optional(),
20335
20335
  anonymousQuotaResetAt: external_exports2.string().nullable().optional(),
20336
+ upgradeSupportEmail: external_exports2.string().email().nullable().optional(),
20337
+ upgradeMessage: external_exports2.string().nullable().optional(),
20336
20338
  recommendedNextTool: external_exports2.enum(["get_scan_status", "get_scan_bundle"]).optional()
20337
20339
  };
20338
20340
  var apiV2LinksSchema = external_exports2.object({
@@ -33123,7 +33125,9 @@ function scanCreationMetadata(value) {
33123
33125
  quotaConsumed: value.quotaConsumed,
33124
33126
  anonymousQuotaLimit: value.anonymousQuotaLimit,
33125
33127
  anonymousQuotaRemaining: value.anonymousQuotaRemaining,
33126
- anonymousQuotaResetAt: value.anonymousQuotaResetAt
33128
+ anonymousQuotaResetAt: value.anonymousQuotaResetAt,
33129
+ upgradeSupportEmail: value.upgradeSupportEmail,
33130
+ upgradeMessage: value.upgradeMessage
33127
33131
  };
33128
33132
  }
33129
33133
  function toolContract(name) {
@@ -33152,7 +33156,14 @@ function createCertScoreMcpServer(options = {}) {
33152
33156
  name: "certscore",
33153
33157
  version: CERTSCORE_MCP_VERSION
33154
33158
  });
33155
- const registerTool = server.registerTool.bind(server);
33159
+ const lightTools = /* @__PURE__ */ new Set(["scan_site", "get_scan_status", "get_scan_bundle"]);
33160
+ const registerMcpTool = server.registerTool.bind(server);
33161
+ const registerTool = (name, contract, handler) => {
33162
+ if (options.toolProfile === "light" && !lightTools.has(name)) {
33163
+ return;
33164
+ }
33165
+ registerMcpTool(name, contract, handler);
33166
+ };
33156
33167
  async function createPulseScanTool(input) {
33157
33168
  const result = await client.submitScan(input.url, {
33158
33169
  detail: normalizeDetail2(input.detail),
package/dist/server.d.ts CHANGED
@@ -5,6 +5,7 @@ export interface CertScoreMcpOptions {
5
5
  forwardedClientIp?: string | null;
6
6
  anonymousRequesterSecret?: string | null;
7
7
  timeout?: number;
8
+ toolProfile?: "full" | "light";
8
9
  }
9
10
  export declare function createCertScoreMcpServer(options?: CertScoreMcpOptions): McpServer;
10
11
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsDD,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,mBAAwB,aAoSzE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC;AAwDD,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,mBAAwB,aA2SzE"}
package/dist/server.js CHANGED
@@ -14,7 +14,9 @@ function scanCreationMetadata(value) {
14
14
  quotaConsumed: value.quotaConsumed,
15
15
  anonymousQuotaLimit: value.anonymousQuotaLimit,
16
16
  anonymousQuotaRemaining: value.anonymousQuotaRemaining,
17
- anonymousQuotaResetAt: value.anonymousQuotaResetAt
17
+ anonymousQuotaResetAt: value.anonymousQuotaResetAt,
18
+ upgradeSupportEmail: value.upgradeSupportEmail,
19
+ upgradeMessage: value.upgradeMessage
18
20
  };
19
21
  }
20
22
  function toolContract(name) {
@@ -43,7 +45,14 @@ export function createCertScoreMcpServer(options = {}) {
43
45
  name: "certscore",
44
46
  version: CERTSCORE_MCP_VERSION
45
47
  });
46
- const registerTool = server.registerTool.bind(server);
48
+ const lightTools = new Set(["scan_site", "get_scan_status", "get_scan_bundle"]);
49
+ const registerMcpTool = server.registerTool.bind(server);
50
+ const registerTool = (name, contract, handler) => {
51
+ if (options.toolProfile === "light" && !lightTools.has(name)) {
52
+ return;
53
+ }
54
+ registerMcpTool(name, contract, handler);
55
+ };
47
56
  async function createPulseScanTool(input) {
48
57
  const result = await client.submitScan(input.url, {
49
58
  detail: normalizeDetail(input.detail),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@certscore/mcp",
3
- "version": "0.2.11",
3
+ "version": "0.2.12",
4
4
  "mcpName": "ai.certscore/mcp",
5
5
  "private": false,
6
6
  "description": "MCP server for CertScore public website risk-signal workflows.",
@@ -31,7 +31,8 @@
31
31
  "dist",
32
32
  "README.md",
33
33
  "LICENSE",
34
- "server.json"
34
+ "server.json",
35
+ "server-light.json"
35
36
  ],
36
37
  "publishConfig": {
37
38
  "access": "public"
@@ -46,14 +47,6 @@
46
47
  "url": "https://certscore.ai/contact",
47
48
  "email": "support@certscore.ai"
48
49
  },
49
- "scripts": {
50
- "build": "tsc -p tsconfig.json && esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --banner:js='#!/usr/bin/env node' --outfile=dist/certscore-mcp.mjs",
51
- "bundle": "esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --banner:js='#!/usr/bin/env node' --outfile=dist/certscore-mcp.mjs",
52
- "typecheck": "tsc --noEmit -p tsconfig.json",
53
- "test": "node --import tsx --test src/*.test.ts",
54
- "prepack": "pnpm run build",
55
- "clean": "rm -rf dist"
56
- },
57
50
  "keywords": [
58
51
  "certscore",
59
52
  "pulse",
@@ -67,7 +60,14 @@
67
60
  "zod": "^3.25.76"
68
61
  },
69
62
  "devDependencies": {
70
- "@certscore/api-contracts": "workspace:*",
71
- "@certscore/sdk": "workspace:*"
63
+ "@certscore/api-contracts": "0.1.0",
64
+ "@certscore/sdk": "0.2.6"
65
+ },
66
+ "scripts": {
67
+ "build": "tsc -p tsconfig.json && esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --banner:js='#!/usr/bin/env node' --outfile=dist/certscore-mcp.mjs",
68
+ "bundle": "esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --banner:js='#!/usr/bin/env node' --outfile=dist/certscore-mcp.mjs",
69
+ "typecheck": "tsc --noEmit -p tsconfig.json",
70
+ "test": "node --import tsx --test src/*.test.ts",
71
+ "clean": "rm -rf dist"
72
72
  }
73
- }
73
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "ai.certscore/light",
4
+ "title": "CertScore Light",
5
+ "description": "No-account public website privacy risk scans with 20 new scans/day and free recent-result reuse.",
6
+ "status": "active",
7
+ "repository": {
8
+ "url": "https://github.com/ergoveritas1-alt/certscore.ai",
9
+ "source": "github"
10
+ },
11
+ "websiteUrl": "https://certscore.ai/developers/mcp",
12
+ "version": "0.2.12",
13
+ "remotes": [
14
+ {
15
+ "type": "streamable-http",
16
+ "url": "https://mcp.certscore.ai/mcp/light"
17
+ }
18
+ ]
19
+ }
package/server.json CHANGED
@@ -1,19 +1,26 @@
1
1
  {
2
- "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json",
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
3
  "name": "ai.certscore/mcp",
4
+ "title": "CertScore",
4
5
  "description": "MCP server for CertScore public website risk-signal workflows.",
5
6
  "status": "active",
6
7
  "repository": {
7
8
  "url": "https://github.com/ergoveritas1-alt/certscore.ai",
8
9
  "source": "github"
9
10
  },
10
- "version": "0.2.11",
11
+ "version": "0.2.12",
12
+ "remotes": [
13
+ {
14
+ "type": "streamable-http",
15
+ "url": "https://mcp.certscore.ai/mcp"
16
+ }
17
+ ],
11
18
  "packages": [
12
19
  {
13
20
  "registryType": "npm",
14
21
  "registryBaseUrl": "https://registry.npmjs.org",
15
22
  "identifier": "@certscore/mcp",
16
- "version": "0.2.11",
23
+ "version": "0.2.12",
17
24
  "transport": {
18
25
  "type": "stdio"
19
26
  },