devops-infra MCP Server
Self-hosted web crawling and RAG pipeline with MCP tooling for scrape, crawl, ingest, embed, query, and ask workflows.
Discovered via github-topic:mcp-server and last synced 3mo ago.
Install instructions not detected yet
Check the source repository for the latest setup steps.
Streamlit UI
HTTP server, web panel, MCP HTTP, action API, in-process workers
MCP stdio server
Starts
What it covers
FastAPI REST server
Path
Maximum crawl depth.
Target Qdrant collection.
—
Description
`true`
—
—
Queue embed job from crawl output.
Number of results.
`~/.codex/sessions/`
1800 seconds (30 min)
List recent jobs (last 50).
`response_mode`
`head\
Yes
For ask/research
No
For GitHub ingest
`axon.ingest.jobs`
`100`
—
`49000`
`false`
`52000`
Purpose
2
—
For ask/research
Required
Key flags:
Post sort: `hot`, `top`, `new`, `rising`.
`~/.gemini/history/`, `~/.gemini/tmp/`
Remove failed, canceled, and old completed jobs.
`url`, `limit`, `offset`, `response_mode`
Refresh schedule subaction (`schedule_subaction`): `list`, `create`, `delete`, `enable`, `disable` Also available as direct actions (no subaction): `doctor`, `domains`, `sources`, `stats`, `status` Example requests: ```json { "action": "scrape", "url": "https://example.com" } { "action": "crawl", "subaction": "start", "urls": ["https://example.com"] } { "action": "ingest", "subaction": "start", "source_type": "github", "target": "rust-lang/rust" } { "action": "ask", "query": "how does hybrid search work?" } { "action": "graph", "subaction": "build", "url": "https://tokio.rs" } { "action": "refresh", "subaction": "schedule", "schedule_subaction": "list" } { "action": "artifacts", "subaction": "list" } ``` ### Response Modes All actions accept a `response_mode` field:
No
For Reddit ingest
`axon.refresh.jobs`
`10000`
`0.0`
profile
Yes
Output format: `markdown`, `html`, `rawHtml`, `json`.
Maximum pull requests to fetch (0 = unlimited).
Path
21600 seconds (6 hours)
`message`, `response_mode`
`query`, `limit`, `offset`, `search_time_range`, `response_mode`
Yes
Yes (for ask/evaluate/research)
No
No
`axon.extract.jobs`
`300`
`120000`
`8192`
Required when `AXON_WEB_API_TOKEN` is set
Redis URL for OAuth token storage
`8`
browser rendering and CDP proxy
Crawl concurrency
`0`
`high-stable`
profile
Yes
`axon.embed.jobs`
`http`, `chrome`, `auto-switch`.
Comment traversal depth.
`url`, `render_mode`, `format`, `embed`, `response_mode`, `root_selector`, `exclude_selector`
Required
No
For search/research
No
`300`
`10`
`0.0.0.0`
No (but recommended)
Requested OAuth scopes
`128`
vector storage, optional local service; production points at tootie by default
CPUs×24 (256–1024)
Block until ingestion completes.
Include Gemini sessions.
Destination collection (auto-created if absent).
`query`, `diagnostics`, `collection`, `since`, `before`, `response_mode`
`url`, `full_page`, `viewport`, `output`, `response_mode`
Yes
No
`axon.crawl.jobs`
`true`
`4`
`8001`
No
Dynamic Client Registration token
`last-token`
Qwen3 embeddings through TEI
Chrome DevTools Protocol (CDP). Full JavaScript execution.
1
Time range for `top` sort: `hour`, `day`, `week`, `month`, `year`, `all`.
86400 seconds (24 hours)
Delete all jobs and purge the queue. Requires `--yes` or prompts for confirmation.
`query`, `limit`, `offset`, `collection`, `since`, `before`, `response_mode`
Return payload directly in the response (truncated to safe size).
No
No
For Reddit ingest
`axon.graph.jobs`
—
`49010`
Google OAuth2 client ID
`256`
postgres:17-alpine
`49010`
2
Receive, index, and search syslog streams from all homelab hosts via SQLite FTS5.
Maximum posts to fetch.
`query`, `limit`, `offset`, `search_time_range`, `response_mode`
Write artifact AND include inline payload.
No
No
No
`0.45`
`49011`
Google OAuth2 client secret
`163840`
redis:8.2-alpine
Description
CPUs×16 (128–384)
Minimum score threshold for posts and comments.
Run a worker inline (blocking).
`url`, `max_points`, `response_mode`
No
No
For Chrome rendering
`2`
`64`
`http`
OAuth redirect URI
`256`
rabbitmq:4.0-management
1
Send and manage push notifications via a self-hosted Gotify server.
`~/.claude/projects/`
Interval
Pure HTTP with `reqwest`. Fast; no JavaScript execution.
`include_history`, `response_mode`
Subactions
No
No
`60`
`2`
No
—
ollama/ollama:0.6.5
Retries
Category
`127.0.0.1`
`Qwen/Qwen3-Embedding-0.6B`
Purpose
`49000`, `8001`
CPUs×4 (32–96)
Search movies and TV shows, submit requests, and monitor failed requests via Overseerr.
Scaffold, review, align, and deploy homelab MCP plugins with agents and canonical templates.
When `AXON_ASK_AGENT=claude`
Core agents, commands, skills, and setup/health workflows for homelab management.
For ask/research
`canceled` --- ## MCP Server `axon mcp` exposes a single MCP tool named `axon` with `action`/`subaction` routing. ### Transport Modes ```bash axon mcp # stdio only (default, for local MCP clients) axon serve mcp # HTTP only (default for serving /mcp) axon mcp --transport http # HTTP only axon mcp --transport both # stdio + HTTP concurrently ``` HTTP endpoint: `http://<AXON_MCP_HTTP_HOST>:<AXON_MCP_HTTP_PORT>/mcp` HTTP bind environment: ```bash AXON_MCP_HTTP_HOST=127.0.0.1 # default AXON_MCP_HTTP_PORT=8001 # default AXON_MCP_HTTP_TOKEN= # required for non-loopback binds ``` HTTP transport enforces `AXON_MCP_HTTP_TOKEN` when it is set. Tokenless HTTP is allowed only for loopback binds; non-loopback binds such as `0.0.0.0` are rejected at startup unless `AXON_MCP_HTTP_TOKEN` is configured. Reverse proxies can still add OAuth or other ingress controls in front of the token gate. Authenticated clients send either `Authorization: Bearer $AXON_MCP_HTTP_TOKEN` or `x-api-key: $AXON_MCP_HTTP_TOKEN` on every `/mcp` request. ### Tool Contract Tool name: `axon` Primary route field: `action` Lifecycle route: `action` + `subaction` Response field: `response_mode` (default: `path`) Parser rules (strict): - `action` is required and must match canonical names exactly - `subaction` is required for lifecycle families - No fallback fields (`command`, `op`, `operation`) - No token normalization or case folding Canonical success envelope: ```json { "ok": true, "action": "<resolved action>", "subaction": "<resolved subaction>", "data": { "...": "..." } } ``` ### Direct Actions These actions do not require `subaction`:
For ask/research
Also available as direct actions (no subaction): `doctor`, `domains`, `sources`, `stats`, `status` Example requests: ```json { "action": "scrape", "url": "https://example.com" } { "action": "crawl", "subaction": "start", "urls": ["https://example.com"] } { "action": "ingest", "subaction": "start", "source_type": "github", "target": "rust-lang/rust" } { "action": "ask", "query": "how does hybrid search work?" } { "action": "artifacts", "subaction": "list" } ``` ### Response Modes All actions accept a `response_mode` field:
System-assigned only. Any payload ≤ `AXON_INLINE_BYTES_THRESHOLD` (default: 8,192 bytes) is returned inline automatically with `"response_mode": "auto-inline"`.
`/v1/call/:slug/:endpoint`
`/v1/usage/by-api`
`/v1/admin/credit`