安全上下文MCP服务器
MCP(模型上下文协议)服务器,提供对OWASP、NIST、AWS、Google Cloud、SANS、CIS和其他网络安全机构的权威安全文档的即时访问。把它想象成让安全专家触手可及。
特性
- 综合安全知识库:汇总来自多个权威来源的文件
- 语义搜索:使用自然语言查询查找相关的安全指南
- 本地高速缓存:快速、离线访问索引文档
- 多个安全域:
- OWASP十大秘籍 - NIST网络安全框架,SP 800-53,SP 800-171,零信任 - AWS安全最佳实践,架构良好的框架 - 谷歌云安全,BeyondCorp零信任 - SANS/CWE Top 25,CIS控制 - 独联体基准
安装
npm install
npm run build初始设置
在使用MCP服务器之前,请获取并索引安全文档:
npm run fetch-docs这将:
- 从所有配置的源下载文档
- 索引内容以进行快速语义搜索
- 在本地缓存所有内容
~/.security-mcp/
获取过程需要2-5分钟,具体取决于您的互联网连接。您只需运行一次,或定期更新文档。
用法
作为MCP服务器
添加到您的Claude桌面配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
{
"mcpServers": {
"security-context": {
"command": "node",
"args": ["/path/to/security-mcp/dist/index.js"]
}
}
}或者,如果全局安装:
{
"mcpServers": {
"security-context": {
"command": "security-mcp"
}
}
}可用工具
配置后,Claude将可以访问这些工具:
1. search_security_docs
使用自然语言搜索所有安全文档。
示例查询:
- “如何防止SQL注入?”
- “AWS IAM最佳实践是什么?”
- “解释零信任架构”
- “NIST事件响应指南”
参数:
query(必填):您的安全问题或主题limit(可选):最大结果(默认值:5)source(可选):过滤到特定源(OWASP、NIST、AWS、Google、SANS、CIS)
2. get_security_context
从多个来源获取一个主题的全面背景。
例子:
{
"topic": "authentication best practices"
}返回来自所有相关来源的聚合信息。
3. list_security_sources
列出所有可用的文档来源及其类别。
4. get_owasp_top10
获取特定的OWASP Top 10漏洞信息。
参数:
category(可选):特定类别,如“A01:2021-访问控制中断”
例子
示例1:查找安全指南
用户:“我应该如何保护我的AWS S3存储桶?”
克劳德 (使用 search_security_docs):
从AWS安全最佳实践中找到了相关指导: - 默认情况下启用S3阻止公共访问 - 使用IAM角色和策略进行访问控制 - 启用版本控制和对象锁定 - 实现bucket加密 \[…带有链接的详细结果…\]
示例2:理解框架
用户:“什么是NIST CSF,我该如何使用它?”
克劳德 (使用 get_security_context):
NIST网络安全框架提供了管理风险的结构化方法。.. \[显示来自多个NIST来源的关于CSF功能、实现层和配置文件的信息\]
示例3:漏洞研究
用户:“告诉我最新的OWASP Top 10”
克劳德 (使用 get_owasp_top10):
2021年OWASP Top 10包括: 1. A01:2021-访问控制中断 1. A02:2021-加密失败 \[…每个类别的详细信息…\]
建筑
组件
- MCP 服务器 (
src/index.ts):实现MCP协议的主服务器 - 向量存储 (
src/vector/simple-store.ts):基于TF-IDF的本地缓存搜索 - 文档来源 (
src/sources/):每个安全机构的抓取器 - 文档获取器 (
src/fetcher.ts):协调下载和索引
数据流
- 提取阶段:
npm run fetch-docs从源下载文档 - 指数阶段:内容使用TF-IDF进行处理和索引,以进行语义搜索
- 缓存阶段:已索引的文档已保存到
~/.security-mcp/documents.json - 查询阶段:MCP工具搜索索引缓存并返回相关结果
存储
文件存储在: ~/.security-mcp/documents.json
要更新文档,只需运行 npm run fetch-docs 再一次。
定制
添加新来源
在中创建新源 src/sources/:
import { DocumentSource, SecurityDocument } from "../types.js";
export class CustomSource implements DocumentSource {
name = "CustomSource";
async fetchDocuments(): Promise {
// Fetch and return documents
return [];
}
}然后将其添加到 src/fetcher.ts:
import { CustomSource } from "./sources/custom.js";
const sources = [
// ... existing sources
new CustomSource(),
];升级到矢量嵌入
当前的实现使用TF-IDF以实现简单性和零外部依赖性。为了更好的语义搜索,您可以升级到适当的嵌入:
- 替换
SimpleVectorStore使用实向量数据库(ChromaDB、Pinecone、Weaviate) - 使用以下命令添加嵌入生成:
- OpenAI嵌入API - 通过句子转换器的本地模型 - Anthropic公司的Claude API
更新文档
安全文档经常更改。定期更新缓存:
npm run fetch-docs考虑设置一个cron作业每周更新一次:
# Run every Sunday at 2am
0 2 * * 0 cd /path/to/security-mcp && npm run fetch-docs技术细节
使用的技术
- MCP-SDK:官方模型上下文协议实施
- TypeScript:类型安全开发
- Axios&Cheerio:网页抓取和HTML解析
- 自然的:NLP和TF-IDF搜索
- PDF解析:PDF文档处理(用于未来的增强)
演出
- 初始获取:2-5分钟
- 索引大小:~2-5MB(适用于所有来源)
- 搜索延迟:\<100ms(本地缓存)
- 内存使用量:~50-100MB
局限性
- 如果源网站改变结构,网络抓取可能会中断
- TF-IDF比基于嵌入的搜索更简单
- 无自动更新机制(需要手动刷新)
- 仅限英语
故障排除
未找到文档
运行fetcher下载文档:
npm run fetch-docs服务器未连接
检查Claude Desktop中的MCP配置,确保路径正确。
提取错误
某些来源可能暂时不可用。即使一个源失败,提取器也会继续使用其他源。
空结果
尝试不同的查询短语或使用 list_security_sources 看看有什么可用的。
贡献
要添加更多安全源,请执行以下操作:
- 在中创建新的源文件
src/sources/ - 实施
DocumentSource接口 - 将源添加到
src/fetcher.ts - 提交拉取请求
可添加的潜在来源:
- Microsoft安全最佳实践
- Azure安全
- PCI DSS指南
- HIPAA安全规则
- ISO 27001/27002
- SOC 2要求
许可证
麻省理工学院
安全与隐私
- 所有文档都在本地缓存
- 查询期间没有外部API调用
- 无遥测或数据收集
- 开源且可审计
支持
对于问题或疑问:
- 在GitHub上提交问题
- 检查文档
- 查看源代码
______________________________________________________________________
建于❤️ 对于安全社区
