- Route forge-style messages to forge-related profiles instead of arbitrary *mcp* keys - Expand agent loop, custom provider, session manager, filesystem/web tools - Document local MCP server setup; extend setup-mcp-servers.sh and backlog - System prompt: Gitea list_issues vs search_issues, issues vs PRs, since/date windows Made-with: Cursor
5.0 KiB
Local MCP servers
This repo uses a local-clone policy for MCP servers: clone upstream repos into ./mcp-servers/ and run them from disk (instead of fetching from npm/PyPI at runtime).
Gitea MCP
- Upstream:
https://gitea.com/gitea/gitea-mcp.git - Local path:
mcp-servers/gitea-mcp/ - Binary:
mcp-servers/gitea-mcp/gitea-mcp
Build it with:
./scripts/setup-mcp-servers.sh gitea
Then configure nanobot (example):
{
"tools": {
"mcpServers": {
"gitea": {
"command": "./mcp-servers/gitea-mcp/gitea-mcp",
"args": ["-t", "stdio", "--host", "http://10.0.30.169:3000"],
"env": {
"GITEA_ACCESS_TOKEN": "$NANOBOT_GITLE_TOKEN"
}
}
}
}
}
Proxmox MCP (ProxmoxMCP-Plus)
ProxmoxMCP-Plus integrates Proxmox VE over MCP stdio. It registers many tools; use nanobot tools.toolProfiles so only one MCP server (plus builtins) is connected per turn, and tools.toolRouting.enabled so the right profile is chosen from the user message (keyword fast-paths for Proxmox and Gitea in nanobot/agent/tool_routing.py, then a small router LLM call).
Prerequisites
- Python 3.11+ where the server runs.
- Proxmox API token (Datacenter → Permissions → API Tokens). Scope roles to what you accept (
PVEAuditorfor read-only).
Install (local clone)
From the nanobot repo root (e.g. /mnt/data/nanobot):
# optional: source venv/bin/activate — setup script prefers ./venv/bin/python when present
./scripts/setup-mcp-servers.sh proxmox-mcp-plus
This clones into mcp-servers/proxmox-mcp-plus/ and runs pip install -e using venv/bin/python in the repo if it exists, otherwise python3. Override with NANOBOT_PYTHON=/path/to/python if needed. No extra .venv under the clone.
It also seeds proxmox-config/config.json from config.example.json if missing.
Edit mcp-servers/proxmox-mcp-plus/proxmox-config/config.json: set proxmox.host, auth.user, auth.token_name, auth.token_value. Keep mcp.transport STDIO for nanobot. Do not commit secrets (the tree under mcp-servers/ is gitignored except this file).
Register in nanobot config.json
Use the same Python that ran pip install -e (absolute path avoids PATH mismatches in Docker/systemd).
Example for this checkout (venv at repo root — adjust if your clone lives elsewhere):
{
"tools": {
"mcpServers": {
"proxmox": {
"command": "/mnt/data/nanobot/venv/bin/python",
"args": ["-m", "proxmox_mcp.server"],
"env": {
"PROXMOX_MCP_CONFIG": "/mnt/data/nanobot/mcp-servers/proxmox-mcp-plus/proxmox-config/config.json"
}
}
}
}
}
(pip install -e registers proxmox_mcp; you do not need PYTHONPATH for normal use.)
Tools appear as mcp_proxmox_<tool> (normalized from upstream names).
One profile per MCP (local LLMs)
Add tools.toolProfiles: each profile’s mcpServers lists only the server keys to connect for that turn. A default profile with "mcpServers": [] keeps ordinary chat free of huge MCP tool lists.
Example (trim or extend profiles to match your mcpServers keys):
{
"tools": {
"defaultToolProfile": "default",
"toolRouting": { "enabled": true },
"mcpServers": {
"gmail_mcp": {
"command": "npx",
"args": ["-y", "@gongrzhe/server-gmail-autoauth-mcp"]
},
"gitea": {
"command": "/mnt/data/nanobot/mcp-servers/gitea-mcp/gitea-mcp",
"args": ["-t", "stdio", "--host", "https://gitea.example.com"],
"env": { "GITEA_ACCESS_TOKEN": "$GITEA_TOKEN" }
},
"proxmox": {
"command": "/mnt/data/nanobot/venv/bin/python",
"args": ["-m", "proxmox_mcp.server"],
"env": {
"PROXMOX_MCP_CONFIG": "/mnt/data/nanobot/mcp-servers/proxmox-mcp-plus/proxmox-config/config.json"
}
}
},
"toolProfiles": {
"default": {
"description": "Built-in tools only (filesystem, shell, web, cron, etc.). No MCP servers.",
"mcpServers": []
},
"gmail_mcp": {
"description": "Gmail: read/search/send mail via Gmail MCP.",
"mcpServers": ["gmail_mcp"]
},
"gitea": {
"description": "Gitea: pull requests, issues, repos, code search.",
"mcpServers": ["gitea"]
},
"proxmox": {
"description": "Proxmox VE: nodes, VMs, LXC, storage, snapshots, backups, cluster status.",
"mcpServers": ["proxmox"]
}
}
}
}
Profile keys proxmox and gitea are matched by router heuristics. For Gmail, use profile key gmail_mcp if that matches your server name, or rely on the router model and each profile’s description.
Verify
- Start nanobot with the edited config.
- Ask something Proxmox-specific (e.g. “list VMs on Proxmox”) and check logs for
Tool profile 'proxmox': … tools exposed. - Confirm only
mcp_proxmox_*/toolsare available for that turn.