
A代表Keel。指向任何MCP客户端(Claude Desktop、Claude Code、Cursor),用自然语言驱动你的合规程序:“我的ISO 27001准备度是多少?
概览
A 代表 Keel。指向任何 MCP 客户端(Claude Desktop、Claude Code、Cursor),用自然语言驱动你的合规程序:“我的 ISO 27001 准备度如何?”,“控制点还处于空白状态”,“开启任务轮换我们的 TLS 证书。” 文档:https://docs.keelgrc.com/api-mcp/mcp-server/ ·开源代码:https://keelgrc.com/open-source/ 它是对 Keel 公共 API(/api/v1)的薄包裹。每个操作映射到一个真实端点,并与你的 API 密钥组织关系。MCP 不会赋予比密钥已有更多的访问权限。 每个资源一个工具,并带有一个动作参数。十三个工具涵盖四十五个操作;另一种选择是每个操作一个工具,MCP客户端在使用大约一百个工具后性能会严重下降。 有些操作是缺失的。每个操作都是REST surface中的一个空隙,并且在工具描述中明确说明,使模型读取到一个答案而非一个空洞: - keel_tasks没有。Keel在任何地方都没有删除任务的操作,包括应用程序。
概述(AI 翻译)
Keel的模型上下文协议(MCP)服务器。指向任意MCP客户端(Claude 桌面、Claude Code、光标)开始,自然地驱动你的合规计划 语言:“我的ISO 27001准备度是多少?”,“列表控制仍在空白中”,“打开一个 轮换我们的TLS证书。”
文档:·开源:
它是一个薄包装在 Keel 公共 API([/api/v1)上的。每个操作都映射到 real
端点,并且作用域对应你的 API 密钥所属的组织。MCP 不再授予任何访问权限
比钥匙已经做的还要多。
工具
每个资源一个工具,参数为action。十三个工具涵盖四十五个
操作;另一种选择是每个操作使用工具,MCP客户端性能下降严重
大约有一百个工具。
| 工具 | 操作 | 映射到 |
|---|---|---|
keel_whoami |
(无) | GET /me |
keel_members |
(无) | GET /members |
keel_frameworks |
(无) | GET /frameworks |
keel_readiness |
(无) | GET /readiness |
keel_controls |
列表、获取、创建、更新、删除、映射、映射、解除映射 | /controls, /controls/{id}, /controls/{id}/crosswalks |
keel_starter_controls |
(无) | POST /frameworks/{key}/starter-controls |
本页由 AI 翻译,技术细节请以原文为准。
README
以下为原文 README 节选,完整内容请查看原文。
keelgrc-mcp
A Model Context Protocol (MCP) server for Keel. Point any MCP client (Claude Desktop, Claude Code, Cursor) at it and drive your compliance program in natural language: “what’s my ISO 27001 readiness?”, “list controls still in gap”, “open a task to rotate our TLS certs.”
Docs: · Open source:
KEEL_API_KEY=your_key npx keelgrc-mcp
It’s a thin wrapper over the Keel public API (/api/v1). Every action maps to a real
endpoint and is scoped to your API key’s organization. The MCP grants no more access
than the key already has.
Tools
One tool per resource, with an action argument. Thirteen tools cover forty-five
operations; the alternative is a tool per operation, and MCP clients degrade badly
past roughly a hundred tools.
| Tool | Actions | Maps to |
|---|---|---|
keel_whoami |
(none) | GET /me |
keel_members |
(none) | GET /members |
keel_frameworks |
(none) | GET /frameworks |
keel_readiness |
(none) | GET /readiness |
keel_controls |
list, get, create, update, delete, mappings, map, unmap | /controls, /controls/{id}, /controls/{id}/crosswalks |
keel_starter_controls |
(none) | POST /frameworks/{key}/starter-controls |
keel_tasks |
list, get, create, update | /tasks, /tasks/{id} |
keel_risks |
list, get, create, update, delete | /risks, /risks/{id} |
keel_vendors |
list, get, create, update, delete | /vendors, /vendors/{id} |
keel_people |
list, get, create, update, delete | /people, /people/{id} |
keel_policies |
list, get, create, update, delete | /policies, /policies/{id} |
keel_evidence |
list, get, create, update, delete | /evidence, /evidence/{id} |
keel_webhooks |
list, create, rotate, delete | /hooks, /hooks/{id}, /hooks/{id}/rotate |
Some actions are absent. Each is a gap in the REST surface, and each is stated in the tool description so a model reads an answer rather than a hole:
keel_taskshas no delete. Keel has no delete-a-task operation anywhere, the app included. Update the status tocancelledinstead, which keeps the record.keel_controlscreatetakes no state, owner or mappings. It takes a name, a description and an optionalkeyof your own, which is all the app’s “Add a control” form takes. A new control startsnot_started, unowned and unmapped: setstateandownerEmailwithupdate, and clauses withmap, which attaches any control to any clause of an applied framework.- Applying a framework is not here. It is plan-metered and happens in the app;
keel_starter_controlsandmaprefuse a framework the workspace has not applied. keel_webhookshas no get or update. The API has neither. List them to read one, and replace a subscription by deleting it and creating another.
安装
npx -y keelgrc-mcp配置
{
"mcpServers": {
"keel": {
"command": "npx",
"args": ["-y", "keelgrc-mcp"],
"env": { "KEEL_API_KEY": "keel_live_..." }
}
}
}