- SSH-MCP server with 7 infrastructure management tools * ssh_list_hosts - List all available hosts * ssh_exec - Execute commands on remote hosts * ssh_get_file / ssh_put_file - File operations * ssh_docker_ps - List Docker containers * lxc_list / lxc_exec - LXC container management - HTTP/SSE transport wrapper for Claude Code integration * FastAPI-based HTTP server on port 8081 * Server-Sent Events (SSE) support * MCP 2025 specification compliant - Complete deployment on LXC 110 (10.50.0.110) * SSH key-based authentication (Ed25519) * Systemd service for automatic startup * Tested and verified on all infrastructure - Comprehensive documentation * Complete deployment guide * Git collaboration workflow * API usage examples Developed collaboratively by Claude Code and Agent Zero. Infrastructure Access: - photon.obnh.io (test target) - proton.obr.sh (development server, hosts this repo) - fry.obr.sh (migration target) - Proxmox 10.50.0.72 (LXC/VM host) 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
7.6 KiB
SSH-MCP Project Git Collaboration Setup
Project Repository
Repository Location: proton.obr.sh (NOT photon)
- URL: https://git.proton.obr.sh
- Reason: photon.obnh.io will be used as a TEST TARGET for SSH-MCP server operations
Git Configuration for This Project
Gitea Instance: git.proton.obr.sh
- URL: https://git.proton.obr.sh
- Internal URL: http://localhost:3000 (from proton.obr.sh server)
- Username: olaf
- API-KEY: 151b26b25ffa4100ea776b09e2ed72a2dcb0787e
Repository Name
ssh-mcp-server (suggested)
- Organization: OBNH or olaf
- Description: SSH-based MCP server for OBNH/OBR infrastructure management
Collaboration Workflow
For Claude Code
- Create repository on proton.obr.sh via API or UI
- Initialize git in /home/olaf/proton/ssh-mcp-project/
- Commit implementation files
- Push to proton.obr.sh
For Agent Zero
- Access repository via HTTP API: https://git.proton.obr.sh
- Clone repository to accessible location (e.g., /tmp/ssh-mcp-project/repo/)
- Make changes and commits
- Push updates via API or git commands
Why proton.obr.sh for This Project?
-
Test Isolation: photon.obnh.io is a primary target for SSH-MCP operations
- We'll use SSH-MCP to manage photon's Docker containers
- We'll test file operations on photon
- We'll verify infrastructure queries against photon
-
Development Separation: proton.obr.sh hosts the development repository
- Code is stored on proton
- Tests are executed against photon
- Clean separation of concerns
-
Infrastructure Access: SSH-MCP server can access BOTH
- Repository on proton.obr.sh (via ssh_get_file, ssh_exec)
- Test target photon.obnh.io (for validation)
Repository Structure
ssh-mcp-server/
├── README.md
├── docs/
│ ├── ssh-mcp-server-complete.md
│ ├── agent-zero-integration-guide.md
│ └── gitea-config.md
├── implementation/
│ ├── ssh_mcp_server.py
│ ├── http_wrapper.py
│ └── requirements.txt
├── tests/
│ ├── test_ssh_tools.py
│ └── test_integration.py
├── config/
│ ├── ssh-mcp-server.service
│ └── ssh_config
└── examples/
└── usage_examples.md
Creating the Repository
Via Gitea API (Automated)
curl -X POST https://git.proton.obr.sh/api/v1/user/repos \
-H "Authorization: token 151b26b25ffa4100ea776b09e2ed72a2dcb0787e" \
-H "Content-Type: application/json" \
-d '{
"name": "ssh-mcp-server",
"description": "SSH-based MCP server for OBNH/OBR infrastructure management",
"private": false,
"auto_init": true,
"readme": "Default",
"default_branch": "main"
}'
Via Gitea UI (Manual)
- Navigate to https://git.proton.obr.sh
- Login as olaf
- Click "+" → "New Repository"
- Name: ssh-mcp-server
- Description: SSH-based MCP server for OBNH/OBR infrastructure management
- Initialize with README: Yes
- Create Repository
Initial Commit Workflow
# Create local git repository
cd /home/olaf/proton
mkdir -p ssh-mcp-project-repo
cd ssh-mcp-project-repo
# Initialize git
git init
git config user.name "Claude Code + Agent Zero"
git config user.email "ai-agents@obnh.io"
# Copy project files
cp -r /tmp/ssh-mcp-server.py implementation/
cp -r /tmp/ssh-mcp-http-wrapper.py implementation/
cp /home/olaf/proton/ssh-mcp-server-complete.md docs/
# Create README
cat > README.md << 'EOF'
# SSH-MCP Server
Model Context Protocol (MCP) server providing SSH-based infrastructure access for Claude Code and Agent Zero.
## Features
- 7 infrastructure management tools
- HTTP/SSE transport for Claude Code
- SSH key-based authentication
- Systemd service integration
## Deployment
- Server: LXC 110 (10.50.0.110)
- HTTP API: http://10.50.0.110:8081
- Documentation: docs/ssh-mcp-server-complete.md
## Collaboration
This project is collaboratively developed by Claude Code and Agent Zero.
EOF
# Add and commit
git add .
git commit -m "Initial commit: SSH-MCP server implementation
- SSH-MCP server with 7 tools (ssh_exec, ssh_list_hosts, etc.)
- HTTP/SSE transport wrapper for Claude Code integration
- Complete documentation and deployment guide
- LXC 110 deployment with systemd service
Developed collaboratively by Claude Code and Agent Zero.
🤖 Generated with Claude Code + Agent Zero collaboration
"
# Add remote and push
git remote add origin https://olaf:151b26b25ffa4100ea776b09e2ed72a2dcb0787e@git.proton.obr.sh/olaf/ssh-mcp-server.git
git branch -M main
git push -u origin main
Agent Zero Access
Agent Zero can interact with the repository using:
1. Git Commands via SSH-MCP
# Clone repository on proton.obr.sh
ssh root@proton.obr.sh "cd /tmp && git clone https://git.proton.obr.sh/olaf/ssh-mcp-server.git"
# Make changes and commit
ssh root@proton.obr.sh "cd /tmp/ssh-mcp-server && git add . && git commit -m 'Update from Agent Zero'"
# Push changes
ssh root@proton.obr.sh "cd /tmp/ssh-mcp-server && git push"
2. Gitea API
# Get repository info
curl -H "Authorization: token 151b26b25ffa4100ea776b09e2ed72a2dcb0787e" \
https://git.proton.obr.sh/api/v1/repos/olaf/ssh-mcp-server
# Create issue
curl -X POST https://git.proton.obr.sh/api/v1/repos/olaf/ssh-mcp-server/issues \
-H "Authorization: token 151b26b25ffa4100ea776b09e2ed72a2dcb0787e" \
-H "Content-Type: application/json" \
-d '{
"title": "Enhancement: Add tool XYZ",
"body": "Agent Zero suggests adding tool XYZ for better infrastructure management"
}'
3. SSH-MCP Tools
Agent Zero can use the deployed SSH-MCP server to:
- Read files from the repository:
ssh_get_filewith host="proton", path="/path/to/repo/file" - Execute git commands:
ssh_execwith host="proton", command="cd /tmp/ssh-mcp-server && git status" - Modify files:
ssh_put_filewith host="proton"
Progress Tracking
Both Claude Code and Agent Zero should:
- Commit changes with descriptive messages
- Include "Claude Code" or "Agent Zero" in commit author/message
- Use issues for tracking enhancements
- Update documentation with each change
Security Notes
⚠️ API Key Security
- This file contains the Gitea API key for proton.obr.sh
- Keep this file restricted:
chmod 600 - Never commit to public repositories
- Both agents should use the API key responsibly
Testing Strategy
Test on photon.obnh.io (PRIMARY TEST TARGET)
- Use SSH-MCP to list Docker containers on photon
- Use SSH-MCP to read config files from photon
- Use SSH-MCP to execute monitoring commands on photon
- Verify SSH-MCP operations don't interfere with photon's services
Test on proton.obr.sh (DEVELOPMENT SERVER)
- Clone and manage the repository
- Test git operations via SSH-MCP
- Verify API access and authentication
Test on fry.obr.sh (SECONDARY TARGET)
- Validate SSH-MCP connectivity
- Test LXC operations (as fry will host migrated services)
Next Steps
-
Create Repository (Claude Code or Agent Zero)
- Use Gitea API or UI
- Name: ssh-mcp-server
- Initialize with README
-
Initial Commit (Claude Code)
- Commit all implementation files
- Push to proton.obr.sh
-
Agent Zero Setup (Agent Zero)
- Clone repository
- Verify SSH-MCP access to repository
- Make first collaborative commit
-
Testing (Both)
- Execute test operations on photon.obnh.io
- Document results in repository
- Create issues for improvements
Project Status: Ready for repository creation and initial commit Collaboration Model: Claude Code (development) + Agent Zero (testing & integration) Repository Host: proton.obr.sh (git.proton.obr.sh) Test Target: photon.obnh.io