使用说明
mcp警卫
KYA(了解你的经纪人) MCP服务器的安全中间件。滥用数据库、基于信任的访问控制、速率限制和审计日志记录。
零依赖。适用于任何Node.js HTTP框架 KYA验证系统.
扫描任何MCP包以查找安全问题: agentscores.xyz -键入包名,立即获得结果。
问题
MCP服务器没有安全层。任何客户端都可以调用任何工具——没有身份验证,没有访问控制,没有速率限制,没有审计跟踪。随着人工智能代理开始自主调用MCP工具,这是一个关键的差距。
mcp-guard 将KYA验证添加到任何MCP HTTP服务器中——滥用数据库检查、基于信任的访问控制和审计日志记录在三行代码中。
安装
npm install mcp-trust-guard
快速开始
import express from 'express';
import { McpGuard } from 'mcp-trust-guard';
const guard = new McpGuard({
rules: [
{ minTrust: 0, tools: ['get_*', 'list_*', 'search_*'] },
{ minTrust: 30, tools: ['create_*', 'update_*'] },
{ minTrust: 60, tools: ['delete_*', 'admin_*'] },
],
rateLimit: { window: 60, max: 30 },
audit: true,
});
const app = express();
app.use(express.json());
app.use('/mcp', guard.middleware());
// ... your MCP server handler
每 tools/call 现在,请求将根据调用者的信任分数进行验证。只读工具已打开。写作工具需要30分以上。破坏性工具需要60岁以上。
运作原理
┌──────────────┐
Request ──→ Extract Identity ──→ Rate Limit ──→ │ Trust Check │ ──→ Rule Match ──→ Allow/Deny
(header) (per caller) │ (AgentScore) │ (tool pattern)
└──────────────┘
- 身份 --从中读取呼叫者的代理名称
x-agent-name标题(可配置) - 速率限制 --每个来电者都有滑动窗口。如果超过JSON-RPC错误,则拒绝
- 信任检查 --通过以下方式查看来电者的信任评分 代理核心 (5分钟缓存,故障关闭)
- 规则匹配 --使用glob模式将请求的工具与您的规则进行匹配。首场比赛获胜
- 允许/拒绝 --如果调用者的分数符合规则的最低值,则请求通过。否则,将返回JSON-RPC错误
特性
基于信任的访问控制
根据信任评分定义分层访问:
const guard = new McpGuard({
rules: [
{ minTrust: 0, tools: ['read_*'] }, // Public — anyone can read
{ minTrust: 20, tools: ['query_*'] }, // Low bar — basic queries
{ minTrust: 40, tools: ['write_*'] }, // Verified agents only
{ minTrust: 70, tools: ['transfer_*'] }, // High trust — financial ops
],
defaultMinTrust: 10, // Tools not matching any rule require score >= 10
});
工具名称模式
规则使用glob模式 * 通配符:
{ minTrust: 30, tools: ['create_*', 'update_*'] } // Matches create_user, update_record
{ minTrust: 60, tools: ['admin_*'] } // Matches admin_delete, admin_config
{ minTrust: 0, tools: ['get_status'] } // Exact match only
{ minTrust: 50, tools: ['*'] } // Catch-all
速率限制
每个调用者的内存滑动窗口:
const guard = new McpGuard({
rateLimit: {
window: 60, // 60-second window
max: 30, // 30 requests per window per caller
},
});
审计日志
控制台日志记录:
const guard = new McpGuard({ audit: true });
// [mcp-guard] ALLOW EmberFoundry → get_status (score: 42, band: MODERATE TRUST) score 42 >= 0 required for get_status
// [mcp-guard] DENY untrusted-bot → admin_delete (score: 3, band: UNVERIFIED) score 3 < 60 required for admin_delete
自定义审核处理程序:
const guard = new McpGuard({
audit: (entry) => {
db.insert('audit_log', entry);
if (!entry.allowed) alerting.notify(`Blocked ${entry.caller} from ${entry.tool}`);
},
});
直接信任检查
在没有中间件的情况下以编程方式使用防护:
const guard = new McpGuard();
const decision = await guard.check('EmberFoundry', 'transfer_funds');
// { allowed: false, reason: 'score 14 < 70 required for transfer_funds', caller: 'EmberFoundry', trustScore: 14, trustBand: 'UNVERIFIED' }
自定义信任提供者
使用任何信任源,而不仅仅是AgentCore:
import { McpGuard, TrustProvider, TrustResult } from 'mcp-trust-guard';
const myProvider: TrustProvider = {
async check(name: string): Promise<TrustResult> {
const score = await myDatabase.getAgentScore(name);
return { score, band: score > 50 ? 'TRUSTED' : 'UNTRUSTED', name };
},
};
const guard = new McpGuard({ provider: myProvider });
包裹任何处理器
不使用Express?包装任何请求处理程序:
const protectedHandler = guard.wrap(mcpHandler);
http.createServer(protectedHandler).listen(3000);
配置
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
provider |
TrustProvider |
AgentScore | 自定义信任评分提供者 |
apiUrl |
string |
https://agentscores.xyz/api/score |
AgentCore API终结点 |
identityHeader |
string |
x-agent-name |
包含呼叫者身份的标头 |
rules |
GuardRule[] |
[] |
准入规则(第一场比赛获胜) |
defaultMinTrust |
number |
0 |
无规则匹配时的最小信任 |
rateLimit |
{ window, max } |
none | 速率限制配置(秒,计数) |
cacheTtl |
number |
300000 |
信任缓存TTL(毫秒)(5分钟) |
audit |
boolean | function |
false |
启用审核日志记录 |
allowAnonymous |
boolean |
false |
允许没有身份的请求 |
识别来电者
默认情况下, mcp-guard 从中读取呼叫者的身份 x-agent-name HTTP标头。MCP客户端在发出请求时应包含此标头:
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "x-agent-name: MyAgent" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_data"}}'
您可以更改标题名称:
const guard = new McpGuard({ identityHeader: 'authorization' });
或者使用查询参数作为回退-- ?agent=MyAgent 会自动检查。
常见问题解答
如果无法访问信任API,该怎么办?
代理人得0分。默认情况下关闭失败。如果你的规则允许 minTrust: 0 对于某些工具,它们仍然有效。
它是否适用于stdio MCP服务器?
否--stdio服务器在本地运行,不需要网络级安全。 mcp-guard 适用于接受远程连接的HTTP/SSE MCP服务器。
它是否修改了MCP请求?
不,它只检查 tools/call 请求:所有其他MCP方法(tools/list, resources/read等等)原封不动地通过。当一个请求被允许时,它会原封不动地继续传递给您的处理程序。
我可以使用自己的评分系统吗?
对。实施 TrustProvider 接口(一种方法: check(name) → { score, band, name })并将其传递到配置中。
KYA滥用数据库(v0.2.0+)
阻止被报告滥用的代理——数据泄露、及时注入、未经授权的访问等等。公共驱动,免费,无API密钥。
const guard = new McpGuard({
abuseCheck: true, // Enable abuse database checks
abuseBlockLevel: 'CAUTION', // Block at MONITOR, CAUTION, or BLOCK level
rules: [
{ minTrust: 0, tools: ['get_*'] },
{ minTrust: 30, tools: ['write_*'] },
],
audit: true,
});
当有滥用报告的代理试图调用工具时:
[mcp-guard] DENY bad-agent → write_file (score: -1, band: ABUSE_REPORTED)
agent reported in KYA abuse database: prompt_injection (1 reports, severity: high)
举报滥用行为: POST https://agentscores.xyz/api/abuse/report
检查代理: GET https://agentscores.xyz/api/abuse/check?agent=name
对于没有完整中间件的独立滥用检查,请使用 kya虐待检查.
KYA的一部分(了解你的代理人)
mcp信任保护是 KYA --实时AI代理验证。六项检查:部署者、模型、代码、滥用、权限、部署。无需平台注册。
许可证
麻省理工学院