mkeys
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mkeys保存订单服务的凭据,类型 oauth-client-credentials,clientId/clientSecret 用环境变量 ORDERS_CLIENT_ID / ORDERS_CLIENT_SECRET"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MyKeys (mkeys)
本地优先的 AI 凭据保险库 —— 密钥不出本机,AI 只拿临时令牌,每次使用都可审计
A local-first credential vault for AI coding agents: secrets stay AES-256-GCM encrypted on your machine, the AI only ever gets short-lived tokens, and every use is audited by purpose.
它解决什么问题
把密码 / API Key 交给 AI 编码助手,常见做法每一种都有代价:
粘贴进对话 —— 密钥进入聊天记录与云端日志,随会话导出、共享一路扩散;
写进
.env/ 配置文件 —— 被一起提交进 Git,或被任意一段生成的代码直接读取;每次手动复制 —— 相对安全,但 AI 无法端到端完成任务。
MyKeys 把这三者替换成一条边界清晰的令牌通道:
密钥 ──▶ 加密保险库(本机) ──▶ AI 按用途换临时令牌 ──▶ 用后即弃,全程审计AI 从不接触原始密钥(默认连读取接口都是禁用的),你随时可以回答那个最重要的问题: “我的密钥被 AI 用了多少次、用来干什么、是哪个会话用的?”
Related MCP server: brokre
✨ 核心特性
🔐 加密存储 —— 凭据字段整体 AES-256-GCM 加密(AAD 绑定格式版本);数据目录 0700、文件 0600、原子写入
🎫 临时令牌 —— OAuth2 client-credentials / password、HTTP Basic、静态 API Key、自定义令牌端点(
{{field}}模板 +tokenPath提取);令牌只在内存缓存,过期自动重签,refresh强制重登✅ 登录验证 —— verify 端点(2xx / 401)或令牌流探活;管理台里一键测试
📊 用途审计 —— 每次签发 / 验证 / 读密钥都记录用途、成败、会话、缓存命中,按凭据 / 用途 / 天聚合
🛡 SSRF 防护 —— verify / token 端点仅允许公网 http/https,拒绝环回、私有、链路本地与保留网段(含域名解析后命中的情况)
🖥 Web 管理台 —— 本地图形界面:表单添加(字段支持
env:引用)、在线验证、签发令牌、统计图表🪶 零依赖 —— 纯 Node.js(≥ 18)内置模块实现 MCP stdio 协议,
git clone即用,无需npm install
🖥️ 界面一览
凭据管理 | AI 使用统计 | 审计日志 |
|
|
|
截图中的凭据均为演示数据。页面为本地 Web 管理台(见下文),仅本机可访问。
🚀 快速开始
方式一:作为 ZCode 插件(推荐)
打开 ZCode → 设置 → 插件管理 → 发现页;
点击
+添加插件市场:填入本仓库的 GitHub 地址(或本地 clone 后的目录路径,仓库根目录已带marketplace.json);在市场中找到 mkeys 并安装启用。
安装后自动获得:mkeys MCP 服务器(9 个工具)、/mykeys 使用报告命令、/mykeys-admin 管理台命令,以及一个教 AI 何时、如何使用这些工具的内置技能。
方式二:接入任意 MCP 客户端
MyKeys 是标准 MCP stdio 服务器,Claude Code / Cursor / 自研客户端均可直接接入:
{
"mcpServers": {
"mkeys": {
"type": "stdio",
"command": "node",
"args": ["/path/to/mkeys/server/index.js"],
"env": { "MKEYS_ALLOW_REVEAL": "false" }
}
}
}保存第一个凭据(3 步)
# ① 真实值只进环境变量,不进对话、不进文件
export ORDERS_CLIENT_ID=...
export ORDERS_CLIENT_SECRET=...② 对 AI 说:"用 mkeys 保存订单服务的凭据,类型 oauth-client-credentials,
clientId/clientSecret 用环境变量 ORDERS_CLIENT_ID / ORDERS_CLIENT_SECRET"
→ AI 调用 add_credential(字段写 env: 引用,服务端解析后即刻加密)
③ 之后直接说:"查一下订单服务今天的错误率"
→ AI 调用 get_token(name, purpose) 换取临时令牌并发起请求查账随时输入 /mykeys(最近 7 天报告),或在管理台看图表。
🔐 工作原理
flowchart LR
U(["👤 用户"]) -- "① export SECRET=…" --> ENV[("🖥 环境变量")]
AI(["🤖 AI 会话"]) -- "② add_credential<br/>fields: env:SECRET" --> T
subgraph MK ["🔐 MyKeys · 本机(MCP stdio + Web 管理台)"]
direction TB
T["MCP 工具层<br/>add / verify / get_token / stats"]
V[("~/.mkeys/vault.json<br/>AES-256-GCM · 0600")]
A["令牌引擎<br/>OAuth2 · Basic · API-Key"]
L[("~/.mkeys/usage.jsonl<br/>用途审计 · 0600")]
end
T --> V
T --> L
AI -- "③ get_token(name, purpose)" --> A
A -- "④ 端点公网校验(防 SSRF)<br/>登录 / 换取令牌" --> SYS[("🌐 目标系统")]
A -- "⑤ 临时令牌(仅内存缓存)" --> AIsequenceDiagram
autonumber
participant AI as 🤖 AI 会话
participant MK as 🔐 MyKeys
participant SYS as 🌐 目标系统
AI->>MK: get_token("orders-prod", purpose="查询订单监控指标")
MK->>MK: 解密凭据字段(仅驻留内存)
alt 内存缓存的令牌未过期
MK-->>AI: 返回缓存令牌 + 携带方式
else 需要登录
MK->>SYS: POST /oauth/token(端点公网校验)
SYS-->>MK: access_token
MK-->>AI: 返回新令牌 + 携带方式
end
MK->>MK: 审计落盘:用途 / 成败 / 会话 / 缓存命中
AI->>SYS: 业务请求(Authorization: Bearer 临时令牌)
Note over AI,SYS: 令牌用后即弃:不落盘、不进日志、不写入生成的代码🧰 MCP 工具
工具 | 说明 |
| 元数据列表(不含密钥明文) |
| 凭据增删改;字段值支持 |
| 验证登录有效性(2xx / 401) |
| 签发 / 复用临时令牌,purpose 必填(用途审计的基石) |
| 读取原始密钥,默认禁用;开启后每次调用都审计 |
| 使用统计报告(按凭据 / 用途 / 会话 / 天) |
| 启动本地 Web 管理台,返回带访问令牌的地址 |
🖥️ Web 管理台
在 ZCode 里输入 /mykeys-admin(或让 AI “打开 MyKeys 管理页面”),也可以脱离 ZCode 独立运行:
node bin/mykeys.js admin # 或 node server/webadmin.js
功能:凭据增删改查与表单添加(字段可写 env: 引用或直接输入,入库即加密)、在线验证登录、签发临时令牌、使用统计图表。
安全约束:仅绑定 127.0.0.1;访问令牌经 URL 传递并用 timingSafeEqual 比较(持久化于 ~/.mkeys/admin.token,0600,重启后地址不变,也可用 MKEYS_ADMIN_TOKEN 指定);校验 Host 头防 DNS rebinding;CSP 禁止一切外部资源。
⌨️ 斜杠命令与技能
名称 | 作用 |
| 使用统计报告:AI 用了哪些密钥、几次、干什么、哪个会话;发现连续失败会提醒轮换 |
| 打开本地 Web 管理台 |
技能 | 教 AI 何时、如何使用这些工具(密钥不过对话、purpose 必填、令牌优先、用后即弃) |
⚙️ 配置
环境变量 | 说明 |
| 数据目录,默认 |
| 主密钥:base64 的 32 字节,或任意口令(scrypt 派生)。未设置时首启自动生成 |
| 是否允许 |
| 允许 verify / token 端点指向环回 / 私有 / 保留地址(也可用插件设置 |
| Web 管理台访问令牌(默认读取 / 生成 |
| 调试日志输出到 stderr |
密钥来源约定:凭据值只从环境变量进入 —— add_credential 的字段值写 env:VAR_NAME,
服务进程解析后即刻加密。密钥明文既不经过对话内容,也不落入源码 / 配置文件。
📖 示例:保存一个 OAuth 客户端凭据
先在启动 ZCode 的 shell 里导出真实值(示例变量名,勿写入任何文件):
export ORDERS_CLIENT_ID=... # 你的 client id
export ORDERS_CLIENT_SECRET=... # 你的 client secret然后对 AI 说“用 mkeys 保存订单服务的凭据”,等价于调用:
add_credential({
"name": "orders-prod",
"system": "订单服务",
"authType": "oauth-client-credentials",
"fields": {
"clientId": "env:ORDERS_CLIENT_ID",
"clientSecret": "env:ORDERS_CLIENT_SECRET"
},
"endpoints": {
"token": { "url": "https://sso.example.com/oauth/token" },
"verify": { "url": "https://api.example.com/whoami" }
},
"description": "生产订单服务只读账号"
})之后 AI 访问该系统时调用 get_token({ "name": "orders-prod", "purpose": "查询订单监控指标" }),
拿到的 Authorization: Bearer <token> 仅在本次任务的请求中使用。
🛡️ 安全模型
凭据字段整体加密为单条 GCM 密文(AAD 绑定格式版本),主密钥来自环境变量或本地密钥文件
令牌缓存仅在进程内存,进程退出即失效;不落盘、不进日志
usage.jsonl(0600)记录时间、类型、凭据、用途、成败、缓存命中与会话;usage_stats只读聚合删除凭据不删除历史使用记录(审计留存)
明确不支持跳过 TLS 校验;内部 CA 请用
NODE_EXTRA_CA_CERTSSSRF 防护:服务端发请求前校验目标 —— 仅允许公网 http/https,拒绝 localhost、环回、私有、链路本地与保留网段(含域名解析后命中这些网段的情况);可信内网目标需显式开启
allowPrivateEndpoints
数据目录(~/.mkeys)
文件 | 作用 | 权限 |
| 加密凭据库 | 0600 |
| 审计 / 统计日志 | 0600 |
| 主密钥(未设 | 0600 |
| Web 管理台访问令牌 | 0600 |
🧪 测试
npm test # 29 项:加密 / 保险库 / 认证流(本地假认证服务器)/ SSRF 地址防护 / 统计 / MCP 协议 / Web 管理台❓ FAQ
忘记 / 丢失主密钥怎么办?
无法解密旧凭据 —— 这是设计使然。删除 ~/.mkeys 重新初始化,并到目标系统轮换那些密钥。
换机器或多机使用?
整体打包 ~/.mkeys 目录(含 master.key)即可;或设置 MKEYS_MASTER_KEY 后只拷 vault.json。
我的系统在内网,verify 端点连不上?
端点默认只允许公网地址(防 SSRF)。确认目标可信后,在插件设置开启 allowPrivateEndpoints 或设 MKEYS_ALLOW_PRIVATE_ENDPOINTS=true。
AI 确实需要原始密钥怎么办?
默认禁用的 reveal_secret 可通过 allowReveal 开启;每次读取都会记入审计。能用临时令牌就优先用令牌。
和把密钥放 .env 里给 AI 读有什么区别?
.env 是“全有或全无”:无审计、无过期、任何生成的代码都能读走全部内容。MyKeys 按用途签发临时令牌,全程留痕,随时可查、可吊销(删除凭据即可)。
📄 License
你的密钥永远只存在你自己的机器上 —— 本项目不含任何遥测或外部上报。
Available Tools
9 toolsadd_credentialA
添加一个系统凭据(名称唯一)。敏感字段值支持 'env:VAR_NAME' 形式——写入时从服务进程环境变量读取实际值,推荐这种方式以避免密钥经过对话内容。所有字段以 AES-256-GCM 加密后落盘。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | 唯一名称,如 github-prod | |
| tags | No | ||
| fields | Yes | 凭据字段。常用键名: username 与 password(basic、oauth-password 流程)、clientId 与 clientSecret(client-credentials 流程)、apiKey、token、key(静态密钥)。值为 'env:VAR' 时从环境变量解析。允许任意自定义字段。 | |
| system | No | 所属系统/平台标识,如 github、内部 API 网关 | |
| authType | Yes | basic — 用户名和密码(HTTP Basic);可配置令牌端点换取访问令牌;api-key — 静态访问密钥(API Key / Bearer Token);oauth-password — OAuth2 资源所有者口令流程;oauth-client-credentials — OAuth2 客户端凭据流程;custom — 自定义令牌端点(body 模板用 {{field}} 引用凭据字段) | |
| endpoints | No | 可选端点配置。仅允许公网 http/https 地址(环回/私有/保留网段默认拒绝,防 SSRF;可信内网目标需用户在插件设置中开启 allowPrivateEndpoints) | |
| ttlSeconds | No | 令牌有效期(秒);端点未返回 expires_in 时使用,默认 3600 | |
| description | No | 用途说明(给人和 AI 看) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full behavioral disclosure burden. It clearly reveals that sensitive field values are read from the service process environment variable at write time, that this is recommended to avoid secrets passing through conversation content, and that all fields are AES-256-GCM encrypted before being stored. These are meaningful security-relevant behaviors beyond what the schema conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler. It front-loads the purpose, immediately adds the critical env-var pattern, and closes with the encryption guarantee. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, the description is largely complete for invocation: it covers the creation intent, uniqueness, secret handling, and persistence encryption. It does not describe return values or error behavior, and there is no output schema, but for a create operation these are not significant enough to lower the score further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (88%), so the baseline is 3. The description adds extra meaning by specifying that 'env:VAR_NAME' is resolved from the service process environment variable at write time, recommends this pattern for security, and notes that every field is encrypted at rest. These details enhance the semantics of the fields parameter beyond the schema's own explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: '添加一个系统凭据' (add a system credential), with a clear uniqueness constraint. It distinguishes itself from siblings like update_credential and delete_credential by the action 'add', though it does not explicitly name or contrast those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use add_credential versus update_credential, verify_login, get_token, or reveal_secret. It only implies creation by the word '添加' and suggests using 'env:VAR' for sensitive values, but does not state prerequisites, exclusions, or when to use an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_credentialA
删除一个凭据(不可恢复)。删除前会返回该凭据的使用统计摘要。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | 凭据名称或 id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It explicitly discloses irreversibility and the pre-deletion usage-stats summary, which are important and non-obvious traits. However, it does not mention permission requirements, rate limits, or impact on dependent credentials/tokens.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences convey the action, the critical irreversibility warning, and a notable behavioral detail. Every clause earns its place; there is no repetition of the tool name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the input (via schema), the destructive nature, and the pre-deletion stats output. However, with no output schema and no annotations, it leaves gaps around the post-deletion response, success/failure behavior, and any required authorization.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage with a clear description for the single 'name' parameter ('凭据名称或 id'). The tool description adds no additional parameter-level meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: '删除一个凭据' (delete a credential), and adds a decisive qualifier '不可恢复' (irrecoverable). This clearly distinguishes it from sibling tools such as list_credentials, update_credential, and usage_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but gives no guidance on when to use it versus alternatives. Notably, it mentions returning usage statistics before deletion, which could mislead an agent into calling this destructive tool for stats alone; the sibling usage_stats is not referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tokenA
为指定凭据签发(或复用缓存的)临时令牌供后续调用使用。必须在 purpose 中说明本次用途,便于审计统计。返回令牌值、携带方式(请求头)、有效期。令牌仅缓存在内存中,过期自动重新签发。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | 凭据名称或 id | |
| purpose | Yes | 本次使用用途,如 '查询生产订单服务状态' | |
| refresh | No | true 时强制重新登录签发,忽略缓存 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It discloses that tokens are cached in memory, expire, and are automatically re-issued, plus the return payload (token value, header, validity). It does not mention error conditions or authorization requirements, but the core behavioral traits are well-covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the core function and purpose requirement. Every clause earns its place, and the return details are compactly listed. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters and no output schema, the description adequately covers the return value, caching, and expiration. It does not explain error scenarios or token scope, but for a token issuance tool the essentials are present. Slightly more detail on error handling would elevate it, but it's complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the purpose parameter's audit purpose and implying the refresh behavior via '或复用缓存的' (or reuse cached). It also describes the return format, enriching the schema without repeating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb '签发/复用' (issue/reuse) and the resource '凭据' (credential), explicitly distinguishing it as a token provisioning tool. It also mentions the purpose requirement and return format, which separates it from sibling tools like verify_login or list_credentials.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when a temporary token is needed for subsequent calls. It explicitly requires a purpose for audit, which is a clear precondition. However, it does not name alternative tools or exclusion conditions, though the context makes it obvious this is the go-to for token acquisition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_credentialsA
列出凭据库中所有凭据的元数据(名称、系统、类型、字段名、端点配置)。不返回任何密钥明文。在 add/get_token 之前先调用它确认凭据名称。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It usefully discloses that the tool lists metadata only and explicitly does not return secret plaintext, which is critical for an agent to avoid misuse. It does not mention pagination, ordering, or error behavior, but for a zero-parameter list operation the key safety and scope behaviors are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence states the operation and its output scope, and the second sentence adds a crucial safety warning plus a concrete usage directive. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (no parameters) and the absence of an output schema, the description provides sufficient information: what metadata is returned, what is not returned, and when to use it. It could mention pagination or return formatting, but these are minor gaps for a credential-listing operation that the agent can call without extra input.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema description coverage is 100% (trivially, since there are no properties). The baseline for zero parameters is 4, and the description appropriately adds no unnecessary parameter information that would be irrelevant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('list') with a clear resource ('all credential metadata') and enumerates the exact metadata fields returned (name, system, type, field name, endpoint configuration). It also explicitly distinguishes itself from secret-returning tools by noting it returns no plaintext secrets, which differentiates it from siblings like reveal_secret and get_token.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance to call this tool before add/get_token to confirm credential names. It does not explicitly name alternatives for retrieving actual secrets, but the statement that it returns no plaintext secrets implies when this tool is not appropriate, giving the agent adequate context for routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_adminA
启动(或复用)mkeys 本地 Web 管理台并返回带一次性访问令牌的访问地址(仅绑定 127.0.0.1)。页面上可以图形化管理凭据(增删改查、表单添加)、在线验证登录、签发临时令牌、查看使用统计图表。用户说'打开/看 mkeys 管理页面'或需要图形界面管理凭据时调用。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and provides meaningful behavior: it starts or reuses a local console, returns a one-time access token URL, and binds only to 127.0.0.1. It does not mention process lifecycle or token expiry, but the key side effects and security scoping are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and return value. The second sentence lists GUI capabilities, which helps an agent decide between this tool and the sibling CLI-style tools, though the list is slightly enumerative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, it explains the return value (access URL with one-time token), the localhost binding, and the invocation trigger. Minor gaps remain around prerequisites and lifecycle/cleanup, but an agent has enough to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds no parameter-level details, and none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and resource: 启动(或复用)mkeys 本地 Web 管理台并返回带一次性访问令牌的访问地址. It clearly distinguishes itself from the sibling credential/verification tools by positioning itself as the GUI admin surface rather than a programmatic operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives trigger conditions: 用户说'打开/看 mkeys 管理页面'或需要图形界面管理凭据时调用. It does not explicitly name alternatives or when-not cases, but the contrast with the programmatic sibling tools is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reveal_secretA
读取凭据的原始密钥明文(危险操作,每次调用都计入审计日志)。默认禁用——需要用户在插件设置中开启 allowReveal。优先使用 get_token 获取临时令牌而非读取原始密钥。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| field | Yes | 字段名,如 password / apiKey | |
| purpose | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so exceptionally: it flags the operation as dangerous, states that every call is audit-logged, and discloses it is disabled by default with a required setting. This goes beyond a typical mutation warning and gives the agent actionable safety context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the danger and audit behavior, then state the enablement requirement and the alternative tool. Every clause earns its place with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers safety, enablement, and tool selection well, but leaves gaps for a dangerous no-annotation tool: it does not describe the return value (the plaintext secret), what name precisely identifies, or what purpose is expected for the audit log. Given the high risk and low schema coverage, more operational detail would be needed for fully confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers only one of three parameters (field), and the description adds no parameter-specific meaning for name or purpose. It does not clarify what name refers to or what should be supplied for purpose, leaving the agent to infer from sibling context. With 33% coverage, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: reading the raw plaintext of credential secrets. It explicitly contrasts with get_token, distinguishing this tool from the closest sibling and making its unique role clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-not-to-use guidance by stating that get_token should be preferred for temporary tokens, and it gives a prerequisite condition: the allowReveal setting must be enabled. This leaves no ambiguity about when the tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_credentialA
更新已有凭据。fields 只合并传入的键;removeFields 删除字段;endpoints 整体替换。同样支持 'env:VAR' 间接引用。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | 现有凭据名称或 id | |
| tags | No | ||
| fields | No | ||
| system | No | ||
| newName | No | ||
| authType | No | ||
| endpoints | No | 整体替换端点配置(结构同 add_credential);传 {} 清空 | |
| ttlSeconds | No | ||
| description | No | ||
| removeFields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses non-obvious behavior: fields are merged by key, removeFields deletes fields, endpoints are replaced wholesale, and env:VAR indirection is supported. This goes beyond the schema and warns about destructive/replacement semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the purpose front-loaded and the key behavioral rules compactly listed. There is no filler or redundant restating of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with no output schema and no annotations, the description covers core update semantics but omits behavior for several parameters and does not explain what happens to unspecified fields. It is useful but not fully complete for every calling scenario.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, so the description must compensate. It adds valuable semantics for the most nuanced parameters: fields (merge), removeFields (delete), endpoints (replace), and env:VAR references. However, it leaves tags, system, newName, authType, ttlSeconds, and description to self-explanatory names or the schema enum, so compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with '更新已有凭据' (update existing credential), naming a specific verb and resource, and the 'existing' qualifier distinguishes it from add_credential and delete_credential. It also states concrete update behaviors (merge, remove, replace), so an agent can clearly identify this tool's role among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes that this tool is for modifying an existing credential, which tells an agent when to select it over add_credential or delete_credential. It does not explicitly name alternatives or list when-not-to-use conditions, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usage_statsA
查询 AI 使用统计:按凭据、按用途、按天的调用量与成功率,以及最近失败记录。用户询问'密钥用了多少次/用在哪/用来干什么'时调用本工具。
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | 只统计指定事件类型 | |
| sinceDays | No | 统计最近 N 天(默认 7;0 或不传=全部历史) | |
| credential | No | 只统计指定凭据 | |
| topPurposes | No | 用途排行条数(默认 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of explaining behavior. It communicates read-only semantics through '查询' and details what the tool returns: call volume, success rate by credential/purpose/day, and recent failure records. It does not discuss permissions or data retention, but for a non-destructive statistics query this is reasonably complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences: the first states what the tool does and its output dimensions, the second gives concrete invocation triggers. There is no filler or redundant restating of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description compensates reasonably by naming the main result dimensions and failure records. It does not specify the exact response shape or pagination, but for a statistics query with simple filter parameters this is enough for an agent to call it correctly in the stated scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents all four parameters with types, defaults, and ranges. The description loosely maps to the parameters (credential, purpose, day) but adds no syntax or format detail beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('AI 使用统计') with a clear query verb and enumerates the breakdown dimensions: by credential, purpose, and day, plus success rate and recent failures. It also gives concrete user-phrase triggers ('密钥用了多少次/用在哪/用来干什么'), which distinguishes it from the credential-management sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to invoke the tool: when the user asks how many times a key was used, where it was used, or what it was used for. It does not explicitly list exclusions or alternatives, but the sibling tools are all credential CRUD/management actions, so the analytics use case is already clearly differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_loginA
验证凭据登录是否有效(2xx=有效,401/403=被拒绝)。优先使用配置的 verify 端点,否则以能否成功签发令牌为准。验证结果计入使用统计。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | 凭据名称或 id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the validation logic, HTTP status meaning, the fallback to token issuance, and that verification affects usage statistics. It stops short of stating side effects or permissions, but is substantially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each adding distinct information: what is verified, how it is determined, and the side-effect on usage stats. There is no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description covers the key behavior and result interpretation. The only notable omission is the exact return value/format, but the 2xx/401/403 framing largely covers what an agent needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the only parameter already has a description ('credential name or id'). The tool description adds no additional parameter-level meaning, so it meets the baseline without exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (verify), the resource (credential login), and the exact success criteria (2xx valid, 401/403 rejected). This differentiates it from siblings like get_token or reveal_secret, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to choose verify_login over siblings such as get_token or list_credentials. The mention of preferring a configured verify endpoint is implementation behavior, not usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.2.0- First observed
add_credential - First observed
delete_credential - First observed
get_token - First observed
list_credentials - First observed
open_admin - First observed
reveal_secret - First observed
update_credential - First observed
usage_stats - First observed
verify_login
TDQS
Scored across 9 tools
Each tool maps to a distinct action: CRUD on credentials, login verification, token issuance, raw secret reveal, admin UI, and usage stats. Potentially similar tools like get_token and reveal_secret are clearly separated by temporary token vs raw secret.
Most names follow a verb_noun snake_case pattern (add_credential, get_token, reveal_secret). Minor deviations include list_credentials using a plural noun while its CRUD siblings are singular, and usage_stats lacking a leading verb.
Nine tools is well-scoped for a credential manager, covering CRUD, validation, token issuance, secret access, an admin UI, and usage monitoring. There is no redundant or excessive surface.
The set provides complete lifecycle coverage: add/read/update/delete credentials, verify logins, obtain tokens, reveal raw secrets, manage via admin UI, and audit usage. No obvious dead ends or critical missing operations exist for this domain.
Maintenance
Related MCP Connectors
- FullmaktOAuthai.fullmakt
Credential broker for AI agents: scoped, revocable API access with policy enforcement and audit.
Give your AI hands. Identity, credential vault, and API gateway for autonomous agents.
Command your AI agents: verifiable passports, credential injection, full audit, revoke in 60s.
Security gateway for AI agents: policy, approval, and audited execution, no secrets shared.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to securely perform privileged actions like creating GitHub issues by minting short-lived, single-purpose tokens on demand, with policy enforcement and audit logging.MIT
- AlicenseNot gradedqualityAmaintenanceLocal credential broker that enables AI agents to securely run CLI tools like SSH and MySQL without exposing passwords to the AI context, environment variables, or process listings.3MIT
- AlicenseAqualityBmaintenanceEnables AI agents to make authenticated API calls and run commands with secrets injected, while keeping credentials completely hidden from the model, with policy enforcement, grants, and audit logging.6MIT
- FlicenseNot gradedqualityBmaintenanceEnables agents to securely use credentials for GitHub, Cloudflare, OpenAI, Stripe, and xAI without ever reading the secret values, including credential health, rotation, and audit features.-


