@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 +11 -4
- package/dist/certscore-mcp.mjs +13 -2
- package/dist/server.d.ts +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +11 -2
- package/package.json +13 -13
- package/server-light.json +19 -0
- package/server.json +10 -3
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.
|
|
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
|
-
|
|
70
|
-
|
|
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
|
|
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
|
|
package/dist/certscore-mcp.mjs
CHANGED
|
@@ -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
|
|
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
|
package/dist/server.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
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.
|
|
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": "
|
|
71
|
-
"@certscore/sdk": "
|
|
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-
|
|
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
|
+
"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.
|
|
23
|
+
"version": "0.2.12",
|
|
17
24
|
"transport": {
|
|
18
25
|
"type": "stdio"
|
|
19
26
|
},
|