Skip to content

AI clients ​

keymitt speaks MCP over stdio, so any client that can launch a local MCP server can use it. The command is always:

sh
keymitt mcp

Claude Code ​

sh
keymitt setup claude

prints the exact command for your installation, for example:

sh
claude mcp add --scope user keymitt -- /Users/you/.cargo/bin/keymitt mcp

--scope user makes keymitt available in every project. Restart Claude Code afterwards.

Other clients ​

Add a stdio server whose command is the full path to keymitt and whose argument is mcp. In clients configured with JSON, that usually looks like:

json
{
  "mcpServers": {
    "keymitt": { "command": "/usr/local/bin/keymitt", "args": ["mcp"] }
  }
}

The server tells the agent how to behave in its MCP instructions: never ask for secret values in chat, refer to secrets as {{secret:NAME}}, prefer http_request for APIs, don't repeat a denied request, and use read_file_redacted for config files.

Hardening your client ​

keymitt protects secrets that flow through it. An agent with a shell can still read a credential file directly, so tell your client to stop it — the agent will then reach for read_file_redacted. In Claude Code, add deny rules to ~/.claude/settings.json:

json
{
  "permissions": {
    "deny": [
      "Read(**/.env)",
      "Read(**/.env.*)",
      "Read(**/*.pem)",
      "Read(**/*.key)",
      "Read(~/.pgpass)",
      "Read(~/.netrc)",
      "Read(~/.ssh/**)",
      "Read(~/.aws/credentials)"
    ]
  }
}

Adapt the list to where your credentials live. Read rules do not stop a shell command such as cat .env; your client's own permission prompts for shell commands remain your line of defence there.

Logging ​

keymitt mcp logs to standard error, at warn level by default. Set KEYMITT_LOG=info (or debug) for more. Logs never contain secret values.

Released under the MIT or Apache-2.0 license.