Axon

devops-infra MCP Server

Self-hosted web crawling and RAG pipeline with MCP tooling for scrape, crawl, ingest, embed, query, and ask workflows.

Verified
devops-infradevops-infra
8 views2 stars1 forks

Why This Matters

Discovered via github-topic:mcp-server and last synced 3mo ago.

Verified
Source
github-topic:mcp-server
Stars
2
Last synced
3mo ago
Install
Check source

Install

Install instructions not detected yet

Check the source repository for the latest setup steps.

View source instructions
180
Tools
0
Resources
0
Prompts
Standard I/O
Transport

Available Tools (180)

axon-ui

Streamlit UI

axon

HTTP server, web panel, MCP HTTP, action API, in-process workers

axon-mcp

MCP stdio server

Command

Starts

Guide

What it covers

axon-api

FastAPI REST server

Method

Path

5

Maximum crawl depth.

cortex

Target Qdrant collection.

path

Default

Description

bool

`true`

string

OPENAI_API_KEY

true

Queue embed job from crawl output.

10

Number of results.

Codex

`~/.codex/sessions/`

high

1800 seconds (30 min)

list

List recent jobs (last 50).

help

`response_mode`

artifacts

`head\

QDRANT_URL

Yes

OPENAI_BASE_URL

For ask/research

AXON_NEO4J_PASSWORD

No

GITHUB_TOKEN

For GitHub ingest

AXON_INGEST_QUEUE

`axon.ingest.jobs`

AXON_MAX_PENDING_CRAWL_JOBS

`100`

AXON_ASK_AUTHORITATIVE_DOMAINS

AXON_SERVE_PORT

`49000`

AXON_WEB_ALLOW_INSECURE_DEV

`false`

TEI_HTTP_PORT

`52000`

File

Purpose

20s

2

flag

OPENAI_MODEL

For ask/research

Flag

Required

GitHub

Key flags:

hot

Post sort: `hot`, `top`, `new`, `rising`.

Gemini

`~/.gemini/history/`, `~/.gemini/tmp/`

cleanup

Remove failed, canceled, and old completed jobs.

map

`url`, `limit`, `offset`, `response_mode`

schedule

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:

AXON_GRAPH_CONCURRENCY

No

REDDIT_CLIENT_ID

For Reddit ingest

AXON_REFRESH_QUEUE

`axon.refresh.jobs`

AXON_CRAWL_SIZE_WARN_THRESHOLD

`10000`

AXON_ASK_AUTHORITATIVE_BOOST

`0.0`

usize

profile

TEI_URL

Yes

markdown

Output format: `markdown`, `html`, `rawHtml`, `json`.

100

Maximum pull requests to fetch (0 = unlimited).

Provider

Path

medium

21600 seconds (6 hours)

elicit_demo

`message`, `response_mode`

search

`query`, `limit`, `offset`, `search_time_range`, `response_mode`

AXON_REDIS_URL

Yes

AXON_ACP_ADAPTER_CMD

Yes (for ask/evaluate/research)

AXON_NEO4J_URL

No

AXON_GRAPH_TAXONOMY_PATH

No

AXON_EXTRACT_QUEUE

`axon.extract.jobs`

AXON_JOB_STALE_TIMEOUT_SECS

`300`

AXON_ASK_MAX_CONTEXT_CHARS

`120000`

AXON_INLINE_BYTES_THRESHOLD

`8192`

NEXT_PUBLIC_AXON_API_TOKEN

Required when `AXON_WEB_API_TOKEN` is set

GOOGLE_OAUTH_REDIS_URL

Redis URL for OAuth token storage

TEI_TOKENIZATION_WORKERS

`8`

axon-chrome

browser rendering and CDP proxy

Profile

Crawl concurrency

u32

`0`

enum

`high-stable`

u64

profile

AXON_AMQP_URL

Yes

AXON_EMBED_QUEUE

`axon.embed.jobs`

auto-switch

`http`, `chrome`, `auto-switch`.

2

Comment traversal depth.

scrape

`url`, `render_mode`, `format`, `embed`, `response_mode`, `root_selector`, `exclude_selector`

Variable

Required

AXON_LITE

No

TAVILY_API_KEY

For search/research

AXON_GRAPH_SIMILARITY_LIMIT

No

AXON_EMBED_DOC_TIMEOUT_SECS

`300`

AXON_ASK_CHUNK_LIMIT

`10`

AXON_MCP_HTTP_HOST

`0.0.0.0`

AXON_WEB_API_TOKEN

No (but recommended)

GOOGLE_OAUTH_SCOPES

Requested OAuth scopes

TEI_MAX_CLIENT_BATCH_SIZE

`128`

axon-qdrant

vector storage, optional local service; production points at tootie by default

max

CPUs×24 (256–1024)

false

Block until ingestion completes.

off

Include Gemini sessions.

Yes

Destination collection (auto-created if absent).

ask

`query`, `diagnostics`, `collection`, `since`, `before`, `response_mode`

screenshot

`url`, `full_page`, `viewport`, `output`, `response_mode`

AXON_PG_URL

Yes

AXON_GRAPH_CONTEXT_MAX_CHARS

No

AXON_CRAWL_QUEUE

`axon.crawl.jobs`

AXON_EMBED_STRICT_PREDELETE

`true`

AXON_ASK_FULL_DOCS

`4`

AXON_MCP_HTTP_PORT

`8001`

AXON_WEB_BROWSER_API_TOKEN

No

GOOGLE_OAUTH_DCR_TOKEN

Dynamic Client Registration token

TEI_POOLING

`last-token`

axon-tei

Qwen3 embeddings through TEI

chrome

Chrome DevTools Protocol (CDP). Full JavaScript execution.

12s

1

day

Time range for `top` sort: `hour`, `day`, `week`, `month`, `year`, `all`.

low

86400 seconds (24 hours)

clear

Delete all jobs and purge the queue. Requires `--yes` or prompts for confirmation.

query

`query`, `limit`, `offset`, `collection`, `since`, `before`, `response_mode`

inline

Return payload directly in the response (truncated to safe size).

AXON_DATA_DIR

No

AXON_GRAPH_LLM_URL

No

REDDIT_CLIENT_SECRET

For Reddit ingest

AXON_GRAPH_QUEUE

`axon.graph.jobs`

AXON_ASK_AUTHORITATIVE_ALLOWLIST

AXON_WEB_DEV_PORT

`49010`

GOOGLE_OAUTH_CLIENT_ID

Google OAuth2 client ID

TEI_MAX_CONCURRENT_REQUESTS

`256`

axon-postgres

postgres:17-alpine

axon-web

`49010`

30s

2

infrastructure

Receive, index, and search syslog streams from all homelab hosts via SQLite FTS5.

25

Maximum posts to fetch.

research

`query`, `limit`, `offset`, `search_time_range`, `response_mode`

both

Write artifact AND include inline payload.

AXON_COLLECTION

No

AXON_ACP_AUTO_APPROVE

No

AXON_GRAPH_LLM_MODEL

No

AXON_ASK_MIN_RELEVANCE_SCORE

`0.45`

SHELL_SERVER_PORT

`49011`

GOOGLE_OAUTH_CLIENT_SECRET

Google OAuth2 client secret

TEI_MAX_BATCH_TOKENS

`163840`

axon-redis

redis:8.2-alpine

Mode

Description

extreme

CPUs×16 (128–384)

0

Minimum score threshold for posts and comments.

worker

Run a worker inline (blocking).

retrieve

`url`, `max_points`, `response_mode`

AXON_SQLITE_PATH

No

AXON_GRAPH_SIMILARITY_THRESHOLD

No

AXON_CHROME_REMOTE_URL

For Chrome rendering

AXON_INGEST_LANES

`2`

AXON_ASK_CANDIDATE_LIMIT

`64`

AXON_MCP_TRANSPORT

`http`

GOOGLE_OAUTH_REDIRECT_URI

OAuth redirect URI

TEI_MAX_BATCH_REQUESTS

`256`

axon-rabbitmq

rabbitmq:4.0-management

15s

1

utilities

Send and manage push notifications via a self-hosted Gotify server.

Claude

`~/.claude/projects/`

Tier

Interval

http

Pure HTTP with `reqwest`. Fast; no JavaScript execution.

export

`include_history`, `response_mode`

Family

Subactions

AXON_ACP_ADAPTER_ARGS

No

AXON_NEO4J_USER

No

AXON_JOB_STALE_CONFIRM_SECS

`60`

AXON_ASK_MIN_CITATIONS_NONTRIVIAL

`2`

AXON_WEB_ALLOWED_ORIGINS

No

HF_TOKEN

axon-ollama

ollama/ollama:0.6.5

Timeout

Retries

Plugin

Category

AXON_SERVE_HOST

`127.0.0.1`

TEI_EMBEDDING_MODEL

`Qwen/Qwen3-Embedding-0.6B`

Service

Purpose

axon-workers

`49000`, `8001`

balanced

CPUs×4 (32–96)

media

Search movies and TV shows, submit requests, and monitor failed requests via Overseerr.

dev-tools

Scaffold, review, align, and deploy homelab MCP plugins with agents and canonical templates.

AXON_ACP_CLAUDE_ADAPTER_CMD

When `AXON_ASK_AGENT=claude`

core

Core agents, commands, skills, and setup/health workflows for homelab management.

AXON_ASK_AGENT

For ask/research

failed

`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`:

AXON_ASK_BACKEND

For ask/research

recover

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:

auto-inline

System-assigned only. Any payload ≤ `AXON_INLINE_BYTES_THRESHOLD` (default: 8,192 bytes) is returned inline automatically with `"response_mode": "auto-inline"`.

ANY

`/v1/call/:slug/:endpoint`

GET

`/v1/usage/by-api`

POST

`/v1/admin/credit`