@certscore/mcp 0.2.2 → 0.2.4
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 +8 -11
- package/dist/certscore-mcp.mjs +33 -27
- package/package.json +11 -12
- package/server.json +2 -2
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
|
|
5
|
+
Status: public remote endpoint plus local stdio package. Remote clients can use `https://mcp.certscore.ai/mcp`; external macOS MCP clients can use the Homebrew-distributed stdio command. Local WC01 development uses `pnpm mcp:certscore`.
|
|
6
6
|
|
|
7
7
|
Public docs:
|
|
8
8
|
|
|
@@ -13,7 +13,7 @@ Public docs:
|
|
|
13
13
|
|
|
14
14
|
## Tools
|
|
15
15
|
|
|
16
|
-
- `scan_site` - Start or reuse a CertScore public-web scan for a public URL.
|
|
16
|
+
- `scan_site` - Start or reuse a CertScore public-web scan for a public URL. API docs: https://certscore.ai/api/v2/openapi.json
|
|
17
17
|
- `get_scan` - Retrieve the API v2 public-safe scan resource for a stable scan ID.
|
|
18
18
|
- `get_scan_status` - Pass scanId (preferred, API v2). Pass jobId only for a just-created scan that has not yet returned a scanId.
|
|
19
19
|
- `get_report` - Retrieve a summary CertScore Pulse report by stable scan ID. Use get_evidence for the larger bounded evidence packet.
|
|
@@ -60,12 +60,9 @@ Run from this monorepo for local development:
|
|
|
60
60
|
CERTSCORE_API_KEY=... pnpm mcp:certscore
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
pnpm db:migrate
|
|
67
|
-
pnpm mcp:certscore:generate-key -- --name "CertScore MCP preview"
|
|
68
|
-
```
|
|
63
|
+
Public API/MCP access uses self-serve read-only keys from `POST https://certscore.ai/api/v2/keys/request` or support-granted
|
|
64
|
+
`scan:create` access. Repository-only key generation commands may exist for internal smoke tests, but they are not the public
|
|
65
|
+
integration path.
|
|
69
66
|
|
|
70
67
|
Run the built package directly after local build:
|
|
71
68
|
|
|
@@ -80,11 +77,11 @@ CERTSCORE_BASE_URL=https://certscore.ai
|
|
|
80
77
|
CERTSCORE_REQUEST_TIMEOUT_MS=300000
|
|
81
78
|
```
|
|
82
79
|
|
|
83
|
-
`CERTSCORE_API_KEY` should be a scoped CertScore API token for the workspace or
|
|
80
|
+
`CERTSCORE_API_KEY` should be a scoped CertScore API token for the workspace or integration user. The MCP server passes it to Pulse as a bearer token and does not persist it.
|
|
84
81
|
|
|
85
82
|
## API Key Access
|
|
86
83
|
|
|
87
|
-
MCP clients usually need `scan:read
|
|
84
|
+
MCP clients usually need `scan:read` and `mcp` for read workflows. Starting scans also requires `scan:create`, which is grant-gated for launch. Request scan creation access by emailing `support@certscore.ai` with your organization, MCP client, expected workflow, expected request volume, contact email, and requested scopes.
|
|
88
85
|
|
|
89
86
|
## Verify Install
|
|
90
87
|
|
|
@@ -217,7 +214,7 @@ For the full production operator smoke, run from the WC01 repo:
|
|
|
217
214
|
pnpm ops:smoke:mcp-production
|
|
218
215
|
```
|
|
219
216
|
|
|
220
|
-
This verifies the Homebrew-installed `certscore-mcp` command against live `https://certscore.ai`. It creates a short-lived
|
|
217
|
+
This verifies the Homebrew-installed `certscore-mcp` command against live `https://certscore.ai`. It creates a short-lived internal smoke key, stores only the hash in production through the approved ECS/Fargate path, checks required tools, requests a fresh EU-IE scan with `freshness: "refresh"` and `scanFrom: "eu_ie"`, requires non-empty findings and pre-consent cookies/trackers rows, runs `explain_finding`, and revokes the temporary key afterward. It exercises existing public-safe API/MCP projections only.
|
|
221
218
|
|
|
222
219
|
## Troubleshooting
|
|
223
220
|
|
package/dist/certscore-mcp.mjs
CHANGED
|
@@ -18065,16 +18065,22 @@ var mcpGetLatestDomainPreConsentCookiesTrackersInputSchema = {
|
|
|
18065
18065
|
scanFrom: mcpScanFromSchema.optional().describe("Optional scan execution context for matching eligible scans."),
|
|
18066
18066
|
maxRows: external_exports.number().int().min(1).max(200).optional().describe("Maximum inventory rows to return. Defaults to 200.")
|
|
18067
18067
|
};
|
|
18068
|
-
|
|
18069
|
-
|
|
18070
|
-
|
|
18071
|
-
|
|
18072
|
-
|
|
18073
|
-
|
|
18074
|
-
|
|
18075
|
-
|
|
18076
|
-
|
|
18077
|
-
|
|
18068
|
+
function scanCreationAnnotations(title) {
|
|
18069
|
+
return {
|
|
18070
|
+
title,
|
|
18071
|
+
readOnlyHint: false,
|
|
18072
|
+
destructiveHint: true,
|
|
18073
|
+
idempotentHint: false,
|
|
18074
|
+
openWorldHint: true
|
|
18075
|
+
};
|
|
18076
|
+
}
|
|
18077
|
+
function readOnlyOpenWorldAnnotations(title) {
|
|
18078
|
+
return {
|
|
18079
|
+
title,
|
|
18080
|
+
readOnlyHint: true,
|
|
18081
|
+
openWorldHint: true
|
|
18082
|
+
};
|
|
18083
|
+
}
|
|
18078
18084
|
var mcpToolErrorPayloadSchema = external_exports.object({
|
|
18079
18085
|
error: external_exports.object({
|
|
18080
18086
|
name: external_exports.string(),
|
|
@@ -18160,10 +18166,10 @@ var certScoreMcpToolContracts = [
|
|
|
18160
18166
|
{
|
|
18161
18167
|
name: "scan_site",
|
|
18162
18168
|
title: "Scan site",
|
|
18163
|
-
description: "Start or reuse a CertScore public-web scan for a public URL.",
|
|
18169
|
+
description: "Start or reuse a CertScore public-web scan for a public URL. API docs: https://certscore.ai/api/v2/openapi.json",
|
|
18164
18170
|
inputSchema: mcpCreateScanInputSchema,
|
|
18165
18171
|
outputSchema: mcpScanSiteOutputSchema,
|
|
18166
|
-
annotations: scanCreationAnnotations
|
|
18172
|
+
annotations: scanCreationAnnotations("Scan site")
|
|
18167
18173
|
},
|
|
18168
18174
|
{
|
|
18169
18175
|
name: "get_scan",
|
|
@@ -18171,31 +18177,31 @@ var certScoreMcpToolContracts = [
|
|
|
18171
18177
|
description: "Retrieve the API v2 public-safe scan resource for a stable scan ID.",
|
|
18172
18178
|
inputSchema: mcpGetScanInputSchema,
|
|
18173
18179
|
outputSchema: apiV2ScanResourceSchema,
|
|
18174
|
-
annotations: readOnlyOpenWorldAnnotations
|
|
18180
|
+
annotations: readOnlyOpenWorldAnnotations("Get CertScore scan")
|
|
18175
18181
|
},
|
|
18176
18182
|
{
|
|
18177
18183
|
name: "get_scan_status",
|
|
18178
|
-
title: "Get CertScore
|
|
18184
|
+
title: "Get CertScore scan status",
|
|
18179
18185
|
description: "Pass scanId (preferred, API v2). Pass jobId only for a just-created scan that has not yet returned a scanId.",
|
|
18180
18186
|
inputSchema: mcpGetScanStatusInputSchema,
|
|
18181
18187
|
outputSchema: mcpScanStatusOutputSchema,
|
|
18182
|
-
annotations: readOnlyOpenWorldAnnotations
|
|
18188
|
+
annotations: readOnlyOpenWorldAnnotations("Get CertScore scan status")
|
|
18183
18189
|
},
|
|
18184
18190
|
{
|
|
18185
18191
|
name: "get_report",
|
|
18186
|
-
title: "Get CertScore
|
|
18192
|
+
title: "Get CertScore report",
|
|
18187
18193
|
description: "Retrieve a summary CertScore Pulse report by stable scan ID. Use get_evidence for the larger bounded evidence packet.",
|
|
18188
18194
|
inputSchema: mcpGetReportInputSchema,
|
|
18189
18195
|
outputSchema: mcpReportOutputSchema,
|
|
18190
|
-
annotations: readOnlyOpenWorldAnnotations
|
|
18196
|
+
annotations: readOnlyOpenWorldAnnotations("Get CertScore report")
|
|
18191
18197
|
},
|
|
18192
18198
|
{
|
|
18193
18199
|
name: "get_evidence",
|
|
18194
|
-
title: "Get CertScore
|
|
18200
|
+
title: "Get CertScore evidence",
|
|
18195
18201
|
description: "Retrieve the bounded structured Evidence JSON packet for a stable scan ID. Excludes raw cookie values, raw bodies, sensitive payloads, full DOM, and unredacted query values.",
|
|
18196
18202
|
inputSchema: mcpGetEvidenceInputSchema,
|
|
18197
18203
|
outputSchema: pulseResponseSchema,
|
|
18198
|
-
annotations: readOnlyOpenWorldAnnotations
|
|
18204
|
+
annotations: readOnlyOpenWorldAnnotations("Get CertScore evidence")
|
|
18199
18205
|
},
|
|
18200
18206
|
{
|
|
18201
18207
|
name: "export_findings",
|
|
@@ -18203,7 +18209,7 @@ var certScoreMcpToolContracts = [
|
|
|
18203
18209
|
description: "Return structured findings from a CertScore Pulse report for downstream review or ticketing workflows.",
|
|
18204
18210
|
inputSchema: mcpExportFindingsInputSchema,
|
|
18205
18211
|
outputSchema: mcpFindingsExportOutputSchema,
|
|
18206
|
-
annotations: readOnlyOpenWorldAnnotations
|
|
18212
|
+
annotations: readOnlyOpenWorldAnnotations("Export CertScore findings")
|
|
18207
18213
|
},
|
|
18208
18214
|
{
|
|
18209
18215
|
name: "list_findings",
|
|
@@ -18211,15 +18217,15 @@ var certScoreMcpToolContracts = [
|
|
|
18211
18217
|
description: "List API v2 public-safe findings already projected for a scan.",
|
|
18212
18218
|
inputSchema: mcpListFindingsInputSchema,
|
|
18213
18219
|
outputSchema: mcpFindingListOutputSchema,
|
|
18214
|
-
annotations: readOnlyOpenWorldAnnotations
|
|
18220
|
+
annotations: readOnlyOpenWorldAnnotations("List CertScore findings")
|
|
18215
18221
|
},
|
|
18216
18222
|
{
|
|
18217
18223
|
name: "get_pre_consent_cookies_trackers",
|
|
18218
|
-
title: "Get pre-consent cookies
|
|
18224
|
+
title: "Get pre-consent cookies & trackers",
|
|
18219
18225
|
description: "Retrieve the public-safe Cookies & Trackers (Pre-consent) report table as compact JSON for a scan.",
|
|
18220
18226
|
inputSchema: mcpGetPreConsentCookiesTrackersInputSchema,
|
|
18221
18227
|
outputSchema: mcpPreConsentCookiesTrackersOutputSchema,
|
|
18222
|
-
annotations: readOnlyOpenWorldAnnotations
|
|
18228
|
+
annotations: readOnlyOpenWorldAnnotations("Get pre-consent cookies & trackers")
|
|
18223
18229
|
},
|
|
18224
18230
|
{
|
|
18225
18231
|
name: "explain_finding",
|
|
@@ -18227,7 +18233,7 @@ var certScoreMcpToolContracts = [
|
|
|
18227
18233
|
description: "Explain a single CertScore finding with public evidence, caveats, and reviewer next steps.",
|
|
18228
18234
|
inputSchema: mcpExplainFindingInputSchema,
|
|
18229
18235
|
outputSchema: apiV2FindingDetailSchema,
|
|
18230
|
-
annotations: readOnlyOpenWorldAnnotations
|
|
18236
|
+
annotations: readOnlyOpenWorldAnnotations("Explain CertScore finding")
|
|
18231
18237
|
},
|
|
18232
18238
|
{
|
|
18233
18239
|
name: "get_latest_domain_scan",
|
|
@@ -18235,15 +18241,15 @@ var certScoreMcpToolContracts = [
|
|
|
18235
18241
|
description: "Retrieve the latest eligible API v2 public-safe scan for a domain.",
|
|
18236
18242
|
inputSchema: mcpGetLatestDomainScanInputSchema,
|
|
18237
18243
|
outputSchema: apiV2DomainLatestScanSchema,
|
|
18238
|
-
annotations: readOnlyOpenWorldAnnotations
|
|
18244
|
+
annotations: readOnlyOpenWorldAnnotations("Get latest domain scan")
|
|
18239
18245
|
},
|
|
18240
18246
|
{
|
|
18241
18247
|
name: "get_latest_domain_pre_consent_cookies_trackers",
|
|
18242
|
-
title: "Get latest
|
|
18248
|
+
title: "Get latest pre-consent cookies & trackers",
|
|
18243
18249
|
description: "Retrieve the public-safe Cookies & Trackers (Pre-consent) table from the latest eligible scan for a domain.",
|
|
18244
18250
|
inputSchema: mcpGetLatestDomainPreConsentCookiesTrackersInputSchema,
|
|
18245
18251
|
outputSchema: mcpPreConsentCookiesTrackersOutputSchema,
|
|
18246
|
-
annotations: readOnlyOpenWorldAnnotations
|
|
18252
|
+
annotations: readOnlyOpenWorldAnnotations("Get latest pre-consent cookies & trackers")
|
|
18247
18253
|
}
|
|
18248
18254
|
];
|
|
18249
18255
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@certscore/mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"mcpName": "ai.certscore/mcp",
|
|
5
5
|
"private": false,
|
|
6
6
|
"description": "MCP server for CertScore public website risk-signal workflows.",
|
|
@@ -46,14 +46,6 @@
|
|
|
46
46
|
"url": "https://certscore.ai/contact",
|
|
47
47
|
"email": "support@certscore.ai"
|
|
48
48
|
},
|
|
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
49
|
"keywords": [
|
|
58
50
|
"certscore",
|
|
59
51
|
"pulse",
|
|
@@ -67,7 +59,14 @@
|
|
|
67
59
|
"zod": "^3.25.76"
|
|
68
60
|
},
|
|
69
61
|
"devDependencies": {
|
|
70
|
-
"@certscore/api-contracts": "
|
|
71
|
-
"@certscore/sdk": "
|
|
62
|
+
"@certscore/api-contracts": "0.1.0",
|
|
63
|
+
"@certscore/sdk": "0.1.0"
|
|
64
|
+
},
|
|
65
|
+
"scripts": {
|
|
66
|
+
"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",
|
|
67
|
+
"bundle": "esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --banner:js='#!/usr/bin/env node' --outfile=dist/certscore-mcp.mjs",
|
|
68
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
69
|
+
"test": "node --import tsx --test src/*.test.ts",
|
|
70
|
+
"clean": "rm -rf dist"
|
|
72
71
|
}
|
|
73
|
-
}
|
|
72
|
+
}
|
package/server.json
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"url": "https://github.com/ergoveritas1-alt/certscore.ai",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "0.2.
|
|
10
|
+
"version": "0.2.4",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "@certscore/mcp",
|
|
15
|
-
"version": "0.2.
|
|
15
|
+
"version": "0.2.4",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
},
|