skillssafe-mcp 1.0.0 → 1.1.0
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 +12 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/package.json +20 -3
- package/bin/skillssafe-mcp.js +0 -56
package/README.md
CHANGED
|
@@ -90,6 +90,18 @@ Parameters:
|
|
|
90
90
|
- **Smithery**: [skillssafe](https://smithery.ai/server/skillssafe)
|
|
91
91
|
- **Glama**: [skillssafe-mcp](https://glama.ai/mcp/servers/GUCCI-atlasv/skillssafe-mcp)
|
|
92
92
|
|
|
93
|
+
## 🛡️ Security Audit
|
|
94
|
+
|
|
95
|
+
This project is indexed by [SkillsSafe](https://skillssafe.com).
|
|
96
|
+
|
|
97
|
+
You can audit this MCP server before installing it:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
openclaw mcp add skillssafe https://mcp.skillssafe.com/sse
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Check out the community discussion on [Cursor Forum](https://forum.cursor.com/t/built-with-cursor-skillssafe-a-security-firewall-for-mcp-servers-ai-skills/154530).
|
|
104
|
+
|
|
93
105
|
## License
|
|
94
106
|
|
|
95
107
|
MIT © SkillsSafe
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* SkillsSafe MCP Server
|
|
4
|
+
* Proxies stdio ↔ remote SSE endpoint at mcp.skillssafe.com
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx skillssafe-mcp
|
|
8
|
+
*
|
|
9
|
+
* Config for Claude Desktop / Cursor / Codex:
|
|
10
|
+
* { "command": "npx", "args": ["-y", "skillssafe-mcp"] }
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* SkillsSafe MCP Server
|
|
4
|
+
* Proxies stdio ↔ remote SSE endpoint at mcp.skillssafe.com
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx skillssafe-mcp
|
|
8
|
+
*
|
|
9
|
+
* Config for Claude Desktop / Cursor / Codex:
|
|
10
|
+
* { "command": "npx", "args": ["-y", "skillssafe-mcp"] }
|
|
11
|
+
*/
|
|
12
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
13
|
+
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
14
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
15
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
16
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
17
|
+
const SSE_URL = "https://mcp.skillssafe.com/sse";
|
|
18
|
+
async function main() {
|
|
19
|
+
const remoteClient = new Client({ name: "skillssafe-mcp-proxy", version: "1.0.0" }, { capabilities: {} });
|
|
20
|
+
const sseTransport = new SSEClientTransport(new URL(SSE_URL));
|
|
21
|
+
await remoteClient.connect(sseTransport);
|
|
22
|
+
const remoteInfo = remoteClient.getServerVersion();
|
|
23
|
+
const remoteCapabilities = remoteClient.getServerCapabilities();
|
|
24
|
+
const server = new Server({ name: "skillssafe", version: remoteInfo?.version ?? "1.0.0" }, { capabilities: remoteCapabilities ?? {} });
|
|
25
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
26
|
+
return await remoteClient.listTools();
|
|
27
|
+
});
|
|
28
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
29
|
+
return await remoteClient.callTool(request.params);
|
|
30
|
+
});
|
|
31
|
+
const stdioTransport = new StdioServerTransport();
|
|
32
|
+
await server.connect(stdioTransport);
|
|
33
|
+
}
|
|
34
|
+
main().catch((err) => {
|
|
35
|
+
process.stderr.write(`SkillsSafe MCP error: ${err.message}\n`);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,OAAO,GAAG,gCAAgC,CAAC;AAEjD,KAAK,UAAU,IAAI;IACjB,MAAM,YAAY,GAAG,IAAI,MAAM,CAC7B,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO,EAAE,EAClD,EAAE,YAAY,EAAE,EAAE,EAAE,CACrB,CAAC;IAEF,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,MAAM,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzC,MAAM,UAAU,GAAG,YAAY,CAAC,gBAAgB,EAAE,CAAC;IACnD,MAAM,kBAAkB,GAAG,YAAY,CAAC,qBAAqB,EAAE,CAAC;IAEhE,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,OAAO,EAAE,EAC/D,EAAE,YAAY,EAAE,kBAAkB,IAAI,EAAE,EAAE,CAC3C,CAAC;IAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QAC1D,OAAO,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,OAAO,MAAM,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAClD,MAAM,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AACvC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;IAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skillssafe-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"mcpName": "com.skillssafe/scanner",
|
|
5
5
|
"description": "MCP server for SkillsSafe — AI agent skill security scanner. Detects prompt injection, credential theft, zero-width character attacks, and ClawHavoc malware. Free, no API key required.",
|
|
6
6
|
"keywords": ["mcp", "security", "ai-safety", "prompt-injection", "skill-scanner", "clawhavoc"],
|
|
@@ -9,19 +9,36 @@
|
|
|
9
9
|
"homepage": "https://skillssafe.com",
|
|
10
10
|
"repository": {
|
|
11
11
|
"type": "git",
|
|
12
|
-
"url": "https://github.com/GUCCI-atlasv/skillssafe-mcp.git"
|
|
12
|
+
"url": "git+https://github.com/GUCCI-atlasv/skillssafe-mcp.git"
|
|
13
13
|
},
|
|
14
14
|
"bugs": {
|
|
15
15
|
"url": "https://github.com/GUCCI-atlasv/skillssafe-mcp/issues"
|
|
16
16
|
},
|
|
17
17
|
"type": "module",
|
|
18
|
+
"main": "./dist/index.js",
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
18
20
|
"bin": {
|
|
19
|
-
"skillssafe-mcp": "./
|
|
21
|
+
"skillssafe-mcp": "./dist/index.js"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"glama.json",
|
|
26
|
+
"LICENSE",
|
|
27
|
+
"README.md"
|
|
28
|
+
],
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "tsc",
|
|
31
|
+
"prepare": "npm run build",
|
|
32
|
+
"start": "node dist/index.js"
|
|
20
33
|
},
|
|
21
34
|
"engines": {
|
|
22
35
|
"node": ">=18"
|
|
23
36
|
},
|
|
24
37
|
"dependencies": {
|
|
25
38
|
"@modelcontextprotocol/sdk": "^1.10.2"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"typescript": "^5.7.3",
|
|
42
|
+
"@types/node": "^22.10.2"
|
|
26
43
|
}
|
|
27
44
|
}
|
package/bin/skillssafe-mcp.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* SkillsSafe MCP Server
|
|
4
|
-
* Proxies stdio ↔ remote SSE endpoint at mcp.skillssafe.com
|
|
5
|
-
*
|
|
6
|
-
* Usage:
|
|
7
|
-
* npx skillssafe-mcp
|
|
8
|
-
*
|
|
9
|
-
* Config for Claude Desktop / Cursor / Codex:
|
|
10
|
-
* { "command": "npx", "args": ["-y", "skillssafe-mcp"] }
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
14
|
-
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
15
|
-
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
16
|
-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
17
|
-
|
|
18
|
-
const SSE_URL = "https://mcp.skillssafe.com/sse";
|
|
19
|
-
|
|
20
|
-
async function main() {
|
|
21
|
-
// Connect to SkillsSafe remote SSE server
|
|
22
|
-
const remoteClient = new Client(
|
|
23
|
-
{ name: "skillssafe-mcp-proxy", version: "1.0.0" },
|
|
24
|
-
{ capabilities: {} }
|
|
25
|
-
);
|
|
26
|
-
const sseTransport = new SSEClientTransport(new URL(SSE_URL));
|
|
27
|
-
await remoteClient.connect(sseTransport);
|
|
28
|
-
|
|
29
|
-
// Get capabilities from remote
|
|
30
|
-
const remoteInfo = remoteClient.getServerVersion();
|
|
31
|
-
const remoteCapabilities = remoteClient.getServerCapabilities();
|
|
32
|
-
|
|
33
|
-
// Create local stdio server that mirrors remote capabilities
|
|
34
|
-
const server = new Server(
|
|
35
|
-
{ name: "skillssafe", version: remoteInfo?.version ?? "1.0.0" },
|
|
36
|
-
{ capabilities: remoteCapabilities ?? {} }
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
// Forward all tool calls to remote
|
|
40
|
-
server.setRequestHandler({ method: "tools/list" }, async () => {
|
|
41
|
-
return await remoteClient.listTools();
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
server.setRequestHandler({ method: "tools/call" }, async (request) => {
|
|
45
|
-
return await remoteClient.callTool(request.params);
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
// Start stdio transport
|
|
49
|
-
const stdioTransport = new StdioServerTransport();
|
|
50
|
-
await server.connect(stdioTransport);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
main().catch((err) => {
|
|
54
|
-
process.stderr.write(`SkillsSafe MCP error: ${err.message}\n`);
|
|
55
|
-
process.exit(1);
|
|
56
|
-
});
|