bash-history-mcp
Documentation
Atuin Integration for Claude Code
Bidirectional bash history integration between Claude Code and atuin.
Problem
- Claude Code runs bash commands but they don't appear in your shell history
- Claude Code can't learn from your command patterns
Architecture
Write: Hook
Claude Code hook → writes commands to atuin after Claude executes each bash command
# Post-bash-execution hook calls:
id=$(atuin history start "$COMMAND")
atuin history end --exit "$EXIT_CODE" --duration 0 "$id"Read: MCP Server
MCP server → Claude can query your atuin history
Tools:
- `search_history(query, limit?)` - Find commands matching a pattern
- `get_recent_history(limit?)` - Get recent commands with timestamps and exit codes
Benefits
- Persistent history: Rerun commands Claude executed from your terminal
- Context awareness: Claude can learn from your command patterns and workflow
- Rich metadata: Timestamps, working directory, exit codes, and duration
- Cross-machine sync: History syncs across machines (if atuin sync is enabled)
Setup
Prerequisites
Write Hook Installation
Note: If you've previously installed this package and are updating to a new version, clear Bun's cache first:
bun pm cache rmStep 1: Locate your settings file
Claude Code settings are in `~/.claude/settings.json`. Create it if it doesn't exist:
mkdir -p ~/.claude
touch ~/.claude/settings.jsonStep 2: Add the hook configuration
Edit `~/.claude/settings.json` and add:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bunx github:nitsanavni/bash-history-mcp hook"
}
]
}
]
}
}If you already have hooks configured, merge with your existing configuration:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bunx github:nitsanavni/bash-history-mcp hook"
}
]
},
// ... your other PostToolUse hooks
]
// ... your other hook types (PreToolUse, etc.)
}
}Step 3: Restart Claude Code
The hook will be active in your next Claude Code session.
Step 4: Verify it's working
After Claude runs some bash commands:
atuin history lastYou should see the commands Claude executed.
How It Works
After each bash command Claude executes:
1. Hook receives JSON with command and exit code via stdin
2. Calls `atuin history start "$COMMAND"` to get an entry ID
3. Calls `atuin history end --exit $EXIT --duration 0 $ID`
4. Fails silently if atuin is unavailable
Troubleshooting
Hook not running?
# Check if hook is registered
claude --debug
# Run a command in Claude and look for hook execution logsCommands not appearing in atuin?
# Test atuin manually
atuin history start "test command"
atuin history lastMCP Server Installation
Note: If you've previously installed this package and are updating to a new version, clear Bun's cache first:
bun pm cache rmConfigure Claude Code to use the MCP server:
claude mcp add -s user bash-history bunx -- github:nitsanavni/bash-history-mcp mcpOr manually add to `~/.claude/settings.json`:
{
"mcpServers": {
"bash-history": {
"command": "bunx",
"args": ["github:nitsanavni/bash-history-mcp", "mcp"]
}
}
}Available Tools:
- `search_history(query, limit?)` - Search for commands matching a pattern
Example: search_history("git commit", 5)- `get_recent_history(limit?)` - Get recent commands
Example: get_recent_history(10)Implementation Status
1. ✅ Write hook with atuin integration
2. ✅ Test hook integration
3. ✅ MCP server with read-only atuin access
Frequently asked questions
What is bash-history-mcp?
bash-history-mcp is a Model Context Protocol (MCP) server listed in the TrackMCP directory.
How do I install bash-history-mcp?
Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.
Is bash-history-mcp open source?
Yes — it is hosted on GitHub at https://github.com/nitsanavni/bash-history-mcp and has 1 stars.
Related MCP tools
Model Context Protocol Servers
A MCP for Claude Desktop / Claude Code / Windsurf / Cursor to build n8n workflows for you
MCP server to provide Figma layout information to AI coding agents like Cursor
Open-source backend-as-a-service. Postgres, auth, storage, functions, AI gateway, MCP.
Your memories are in ChatGPT... But nowhere else. Universal Memory MCP makes your memories available to every single LLM. No logins or paywall. One command to set it up.
MCP Server for kubernetes management commands
Run your own MCP server? See who uses it and what to fix.
Measure it with TrackMCP