@agentscore-xyz/mcp-server 2.2.1 → 2.2.2
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/LICENSE +21 -0
- package/README.md +2 -0
- package/dist/api.js +1 -1
- package/dist/index.js +5 -5
- package/dist/sunset.d.ts +6 -0
- package/dist/sunset.js +13 -0
- package/dist/tools.js +15 -3
- package/package.json +1 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Janus Compliance Limited
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# @agentscore-xyz/mcp-server
|
|
2
2
|
|
|
3
|
+
> **Service end date: 31 December 2026.** AgentScore's scanning service and API close after that date. Version 2.2.2 is the final release. Until the end date every tool result carries a closing note; from 1 January 2027 every tool returns a closing message and checks nothing. The two Policy Gate set-up tools are withdrawn and no longer generate or write a workflow. Do not build a new dependency on this server.
|
|
4
|
+
|
|
3
5
|
**Ask your agent if an npm MCP package is safe to install.** A drop-in MCP server that exposes AgentScore's live security data to Claude, Cursor, ChatGPT, and any MCP-compatible client. No API key, zero config, eight tools.
|
|
4
6
|
|
|
5
7
|
[](https://agentscores.xyz/report/@agentscore-xyz/mcp-server)
|
package/dist/api.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { z } from "zod";
|
|
|
5
5
|
import { handleTool } from "./tools.js";
|
|
6
6
|
const server = new McpServer({
|
|
7
7
|
name: "agentscore",
|
|
8
|
-
version: "2.2.
|
|
8
|
+
version: "2.2.2",
|
|
9
9
|
});
|
|
10
10
|
// --- Tools ---
|
|
11
11
|
server.tool("scan_package", "Scan an npm package for MCP security issues. Checks install scripts, prompt injection patterns, suspicious URLs, source code patterns, dependency count, metadata completeness, and publisher provenance. Returns score (0-100), risk level, and detailed findings.", {
|
|
@@ -23,14 +23,14 @@ server.tool("check_abuse", "Check if a package or agent has been reported to the
|
|
|
23
23
|
server.tool("monitor_status", "Check if an MCP package is under continuous monitoring and get its scan history. Shows current score, risk level, and recent changes.", {
|
|
24
24
|
npm: z.string().describe("npm package name"),
|
|
25
25
|
}, async (args) => handleTool("monitor_status", args));
|
|
26
|
-
server.tool("check_my_repo", "Inspect the current repo for MCP dependencies
|
|
26
|
+
server.tool("check_my_repo", "Inspect the current repo for MCP dependencies and look up AgentScore verdicts for each package. Use this when a developer wants to understand all MCP packages in a repo instead of scanning one package at a time.", {
|
|
27
27
|
path: z.string().optional().describe("Optional path to the repo root. Defaults to the current working directory."),
|
|
28
28
|
}, async (args) => handleTool("check_my_repo", args));
|
|
29
|
-
server.tool("generate_policy_gate_setup", "
|
|
29
|
+
server.tool("generate_policy_gate_setup", "Withdrawn. AgentScore's scanning service and API close after 31 December 2026, so the Policy Gate is no longer offered for new set-ups. This tool returns that notice and generates nothing.", {
|
|
30
30
|
path: z.string().optional().describe("Optional path to the repo root. Defaults to the current working directory."),
|
|
31
31
|
repo_url: z.string().optional().describe("Optional repository URL override for the pilot handoff link."),
|
|
32
32
|
}, async (args) => handleTool("generate_policy_gate_setup", args));
|
|
33
|
-
server.tool("install_policy_gate", "
|
|
33
|
+
server.tool("install_policy_gate", "Withdrawn. AgentScore's scanning service and API close after 31 December 2026, so the Policy Gate is no longer offered for new set-ups. This tool returns that notice and writes no file.", {
|
|
34
34
|
path: z.string().optional().describe("Optional path to the repo root. Defaults to the current working directory."),
|
|
35
35
|
repo_url: z.string().optional().describe("Optional repository URL override."),
|
|
36
36
|
}, async (args) => handleTool("install_policy_gate", args));
|
|
@@ -38,7 +38,7 @@ server.tool("install_policy_gate", "Write the AgentScore Policy Gate workflow fi
|
|
|
38
38
|
async function main() {
|
|
39
39
|
const transport = new StdioServerTransport();
|
|
40
40
|
await server.connect(transport);
|
|
41
|
-
console.error("AgentScore MCP server v2.2 running on stdio");
|
|
41
|
+
console.error("AgentScore MCP server v2.2.2 running on stdio (the service closes after 31 December 2026)");
|
|
42
42
|
}
|
|
43
43
|
main().catch((err) => {
|
|
44
44
|
console.error("Fatal error:", err);
|
package/dist/sunset.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const SERVICE_END_ISO = "2027-01-01T00:00:00Z";
|
|
2
|
+
export declare const SERVICE_END_LABEL = "31 December 2026";
|
|
3
|
+
export declare const CLOSING_NOTE = "Note: AgentScore's scanning service and API close after 31 December 2026 (UTC). After that date this server returns a closing message in place of results.";
|
|
4
|
+
export declare const ENDED_MESSAGE = "AgentScore's scanning service and API closed on 31 December 2026. This tool no longer returns security verdicts or scan results, and nothing was checked.";
|
|
5
|
+
export declare const GATE_WITHDRAWN = "The AgentScore Policy Gate is no longer offered for new set-ups. AgentScore's scanning service and API close after 31 December 2026, and a gate installed now would stop working on that date. No workflow has been generated or written.";
|
|
6
|
+
export declare function serviceEnded(now?: number): boolean;
|
package/dist/sunset.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// AgentScore's scanning service and API close after 31 December 2026 (the main
|
|
2
|
+
// application's src/lib/sunset.js holds the same date). This is the final
|
|
3
|
+
// release of the server: it tells the user about the closure, stops offering the
|
|
4
|
+
// Policy Gate set-up, and returns a plain closing message once the date has
|
|
5
|
+
// passed, without calling an API that would only answer 410.
|
|
6
|
+
export const SERVICE_END_ISO = "2027-01-01T00:00:00Z";
|
|
7
|
+
export const SERVICE_END_LABEL = "31 December 2026";
|
|
8
|
+
export const CLOSING_NOTE = `Note: AgentScore's scanning service and API close after ${SERVICE_END_LABEL} (UTC). After that date this server returns a closing message in place of results.`;
|
|
9
|
+
export const ENDED_MESSAGE = `AgentScore's scanning service and API closed on ${SERVICE_END_LABEL}. This tool no longer returns security verdicts or scan results, and nothing was checked.`;
|
|
10
|
+
export const GATE_WITHDRAWN = `The AgentScore Policy Gate is no longer offered for new set-ups. AgentScore's scanning service and API close after ${SERVICE_END_LABEL}, and a gate installed now would stop working on that date. No workflow has been generated or written.`;
|
|
11
|
+
export function serviceEnded(now = Date.now()) {
|
|
12
|
+
return now >= Date.parse(SERVICE_END_ISO);
|
|
13
|
+
}
|
package/dist/tools.js
CHANGED
|
@@ -2,6 +2,7 @@ import fs from "node:fs";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { fetchApi, ApiError } from "./api.js";
|
|
4
4
|
import { inspectRepoForMcpDependencies, } from "./repo.js";
|
|
5
|
+
import { serviceEnded, CLOSING_NOTE, ENDED_MESSAGE, GATE_WITHDRAWN, } from "./sunset.js";
|
|
5
6
|
const WEBSITE_BASE = "https://www.agentscores.xyz";
|
|
6
7
|
function text(s, isError = false) {
|
|
7
8
|
return { content: [{ type: "text", text: s }], isError };
|
|
@@ -92,7 +93,6 @@ function formatScan(data) {
|
|
|
92
93
|
lines.push(` ${t.name}: ${t.description?.slice(0, 100) || "no description"}`);
|
|
93
94
|
}
|
|
94
95
|
}
|
|
95
|
-
lines.push(policyGateHint({ packageName: data.package }));
|
|
96
96
|
return lines.join("\n");
|
|
97
97
|
}
|
|
98
98
|
function formatVerdict(data) {
|
|
@@ -114,7 +114,6 @@ function formatVerdict(data) {
|
|
|
114
114
|
if (data.tool_count > 0) {
|
|
115
115
|
lines.push("", `Tools exposed: ${data.tool_count}`);
|
|
116
116
|
}
|
|
117
|
-
lines.push(policyGateHint({ packageName: data.package }));
|
|
118
117
|
return lines.join("\n");
|
|
119
118
|
}
|
|
120
119
|
function formatExposure(data) {
|
|
@@ -224,7 +223,6 @@ function formatRepoSummary(repoPath, repoUrl, checkedFiles, results) {
|
|
|
224
223
|
const reasons = item.reasons.length > 0 ? ` | reasons: ${item.reasons.join(", ")}` : "";
|
|
225
224
|
lines.push(` ${item.name}@${version} - ${item.verdict.toUpperCase()} (${score}/100, ${risk}) [source: ${item.source}]${reasons}`);
|
|
226
225
|
}
|
|
227
|
-
lines.push("", "Next step:", " Run generate_policy_gate_setup to preview the OIDC-based GitHub Actions workflow for this repo.", " Run install_policy_gate to write .github/workflows/agentscore-policy-gate.yml directly.");
|
|
228
226
|
return lines.join("\n");
|
|
229
227
|
}
|
|
230
228
|
function buildOidcWorkflowYaml(packages) {
|
|
@@ -278,7 +276,21 @@ function formatPolicyGateSetup(repoPath, repoUrl, dependencies, checkedFiles) {
|
|
|
278
276
|
}
|
|
279
277
|
return lines.join("\n");
|
|
280
278
|
}
|
|
279
|
+
// Final release (2.2.2): every tool tells the user the service is closing, the
|
|
280
|
+
// two Policy Gate set-up tools are withdrawn, and once the end date has passed
|
|
281
|
+
// no tool calls the API at all.
|
|
281
282
|
export async function handleTool(name, args) {
|
|
283
|
+
if (serviceEnded())
|
|
284
|
+
return text(ENDED_MESSAGE, true);
|
|
285
|
+
if (name === "generate_policy_gate_setup" || name === "install_policy_gate") {
|
|
286
|
+
return text(GATE_WITHDRAWN, true);
|
|
287
|
+
}
|
|
288
|
+
const result = await runTool(name, args);
|
|
289
|
+
if (result.isError)
|
|
290
|
+
return result;
|
|
291
|
+
return { ...result, content: [...result.content, { type: "text", text: CLOSING_NOTE }] };
|
|
292
|
+
}
|
|
293
|
+
async function runTool(name, args) {
|
|
282
294
|
try {
|
|
283
295
|
switch (name) {
|
|
284
296
|
case "scan_package": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentscore-xyz/mcp-server",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.2",
|
|
4
4
|
"mcpName": "io.github.Thezenmonster/agentscore",
|
|
5
5
|
"description": "MCP security trust layer. Scan packages, inspect repo MCP dependencies, generate Policy Gate setup, install the workflow directly, check exposure, and query abuse data.",
|
|
6
6
|
"type": "module",
|