ccs-mcp-server 1.2.14 → 1.2.16
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 +13 -0
- package/package.json +20 -10
- package/src/index.js +8 -4
- package/src/skillpay.js +74 -0
package/README.md
CHANGED
|
@@ -9,6 +9,19 @@ It verifies AI agent tool calls at runtime, blocks unsafe ones by default, issue
|
|
|
9
9
|
|
|
10
10
|
> **Runtime evidence layer, not a static scanner.** Every decision is enforced at call time and produces independently verifiable cryptographic evidence.
|
|
11
11
|
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
### 🇨🇳 国内用户 · 支付宝一键购买
|
|
15
|
+
|
|
16
|
+
本工具的合规授权与批量能力可通过支付宝 SkillPay 获取:
|
|
17
|
+
|
|
18
|
+
- 打开货架:https://skillpay.alipay.com/public/correctover
|
|
19
|
+
- 或把这行发给你的 AI 助手:**请通过 SkillPay 购买并安装 Skill「CCS收据批量审计」**
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
*China users: purchase via Alipay SkillPay — see above.*
|
|
24
|
+
|
|
12
25
|
## ⚡ Quick Start — running in 30 seconds
|
|
13
26
|
|
|
14
27
|
```bash
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ccs-mcp-server",
|
|
3
|
-
"version": "1.2.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.2.16",
|
|
4
|
+
"description": "MCP security server for AI agents — runtime verification and receipt verification for Claude Code, Cursor, Cline and Windsurf. 7-dimension CCS checks, Ed25519 tamper-evident receipts, offline verification, zero runtime dependencies.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"bin": {
|
|
7
7
|
"ccs-mcp-server": "src/index.js"
|
|
@@ -17,17 +17,27 @@
|
|
|
17
17
|
"model-context-protocol",
|
|
18
18
|
"mcp-server",
|
|
19
19
|
"mcp-security",
|
|
20
|
+
"claude",
|
|
21
|
+
"claude-code",
|
|
22
|
+
"cursor",
|
|
23
|
+
"cline",
|
|
24
|
+
"windsurf",
|
|
25
|
+
"ai-agent",
|
|
20
26
|
"ai-agent-security",
|
|
27
|
+
"agent-security",
|
|
21
28
|
"runtime-verification",
|
|
29
|
+
"receipt-verification",
|
|
30
|
+
"agent-receipt",
|
|
31
|
+
"ed25519",
|
|
32
|
+
"tamper-evident",
|
|
33
|
+
"offline-verification",
|
|
34
|
+
"tool-call-guardrail",
|
|
35
|
+
"mcp security audit",
|
|
22
36
|
"ccs",
|
|
23
37
|
"correctover",
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"supply-chain-security",
|
|
28
|
-
"agent-security",
|
|
29
|
-
"security",
|
|
30
|
-
"developer-tools"
|
|
38
|
+
"decision-provenance",
|
|
39
|
+
"json-rpc",
|
|
40
|
+
"supply-chain-security"
|
|
31
41
|
],
|
|
32
42
|
"license": "Elastic-2.0",
|
|
33
43
|
"repository": {
|
|
@@ -51,4 +61,4 @@
|
|
|
51
61
|
"description": "Verify AI agent tool calls and issue Ed25519-signed CCS evidence receipts."
|
|
52
62
|
},
|
|
53
63
|
"mcpName": "io.github.DSHCorrectover/ccs-mcp-server"
|
|
54
|
-
}
|
|
64
|
+
}
|
package/src/index.js
CHANGED
|
@@ -27,12 +27,14 @@
|
|
|
27
27
|
const crypto = require("crypto");
|
|
28
28
|
const readline = require("readline");
|
|
29
29
|
const receipts = require("./receipts");
|
|
30
|
+
const skillpay = require("./skillpay");
|
|
30
31
|
|
|
31
32
|
// ---------------------------------------------------------------------------
|
|
32
33
|
// CCS Verifier Core (pure stdlib Node.js)
|
|
33
34
|
// ---------------------------------------------------------------------------
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
// Read from package.json so the reported version can never drift from the published one.
|
|
37
|
+
const CCS_VERSION = require("../package.json").version;
|
|
36
38
|
|
|
37
39
|
const DEFAULT_POLICY = {
|
|
38
40
|
mode: "block",
|
|
@@ -671,11 +673,13 @@ function handleRequest(req) {
|
|
|
671
673
|
function main() {
|
|
672
674
|
const kp = receipts.getKeypair();
|
|
673
675
|
const fp = receipts.publicKeyFingerprint();
|
|
674
|
-
|
|
676
|
+
const banner =
|
|
675
677
|
`[ccs-mcp-server] v${CCS_VERSION} starting on stdio\n` +
|
|
676
678
|
`[ccs-mcp-server] signing key source: ${kp.source}\n` +
|
|
677
|
-
`[ccs-mcp-server] signer fingerprint: ${fp}\n
|
|
678
|
-
)
|
|
679
|
+
`[ccs-mcp-server] signer fingerprint: ${fp}\n`;
|
|
680
|
+
// SkillPay acquisition block: text+CN only (stderr), JSON-RPC stdout stays clean.
|
|
681
|
+
const cnBlock = skillpay.block("server");
|
|
682
|
+
process.stderr.write(cnBlock ? banner + cnBlock + "\n" : banner);
|
|
679
683
|
const rl = readline.createInterface({ input: process.stdin });
|
|
680
684
|
rl.on("line", (line) => {
|
|
681
685
|
if (!line.trim()) return;
|
package/src/skillpay.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SkillPay (Alipay) acquisition bridge for users in mainland China.
|
|
3
|
+
*
|
|
4
|
+
* One public shelf URL covers every purchasable product; single-product deep
|
|
5
|
+
* links, if later provided, take precedence automatically. No prices are
|
|
6
|
+
* printed anywhere here — only a pointer to the shelf.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const STORE_URL = 'https://skillpay.alipay.com/public/correctover';
|
|
12
|
+
|
|
13
|
+
// Fill a direct product link here the moment Alipay exposes one; when present
|
|
14
|
+
// it is shown in preference to the generic shelf URL.
|
|
15
|
+
const PRODUCTS = {
|
|
16
|
+
scan: { name: 'MCP配置安全体检', url: '' },
|
|
17
|
+
verify: { name: 'CCS收据验签', url: '' },
|
|
18
|
+
audit: { name: 'CCS收据批量审计', url: '' },
|
|
19
|
+
lint: { name: 'CCS收据批量审计', url: '' },
|
|
20
|
+
server: { name: 'CCS收据批量审计', url: '' },
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
function isChinaUser() {
|
|
24
|
+
if (process.env.CORRECTOVER_REGION === 'CN') return true;
|
|
25
|
+
if (process.env.CORRECTOVER_REGION === 'GLOBAL') return false;
|
|
26
|
+
if (process.env.LANG && /^zh_CN/i.test(process.env.LANG)) return true;
|
|
27
|
+
try {
|
|
28
|
+
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone || '';
|
|
29
|
+
if (tz === 'Asia/Shanghai') return true;
|
|
30
|
+
} catch (e) {}
|
|
31
|
+
// UTC+8 with no other signal is a reasonable default for this shelf.
|
|
32
|
+
const off = -new Date().getTimezoneOffset() / 60;
|
|
33
|
+
return off === 8;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function shelfUrlFor(key) {
|
|
37
|
+
const p = PRODUCTS[key];
|
|
38
|
+
return (p && p.url) || STORE_URL;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Full China acquisition block. Returns '' for non-China users so behaviour is
|
|
43
|
+
* identical to pre-bridge releases unless a CN user is detected.
|
|
44
|
+
*/
|
|
45
|
+
function block(productKey, opts) {
|
|
46
|
+
if (!isChinaUser()) return '';
|
|
47
|
+
const o = opts || {};
|
|
48
|
+
const p = PRODUCTS[productKey];
|
|
49
|
+
const productName = (p && p.name) || o.productName || 'Correctover';
|
|
50
|
+
const url = shelfUrlFor(productKey);
|
|
51
|
+
const out = [];
|
|
52
|
+
out.push('🇨🇳 国内用户 · 支付宝 SkillPay');
|
|
53
|
+
out.push(` 搜索「${productName}」或打开:${url}`);
|
|
54
|
+
if (o.agentInstruction !== false) {
|
|
55
|
+
out.push(` 请把这行发给你的 AI 助手:请通过 SkillPay 购买并安装 Skill『${productName}』`);
|
|
56
|
+
}
|
|
57
|
+
return out.join('\n');
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Compact one-line pointer, used alongside free-tier status lines. */
|
|
61
|
+
function ctaLine(productKey) {
|
|
62
|
+
if (!isChinaUser()) return '';
|
|
63
|
+
const p = PRODUCTS[productKey];
|
|
64
|
+
const productName = (p && p.name) || 'Correctover';
|
|
65
|
+
return ` 支付宝 SkillPay 搜索「${productName}」: ${shelfUrlFor(productKey)}`;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
module.exports = {
|
|
69
|
+
STORE_URL,
|
|
70
|
+
PRODUCTS,
|
|
71
|
+
isChinaUser,
|
|
72
|
+
block,
|
|
73
|
+
ctaLine,
|
|
74
|
+
};
|